cm2489/oravan

βš–οΈ Legal🟒 Verified Active
0 Views
0 Installs

πŸ“‡ ☁️ - Nonpartisan U.S. Congress data: plain-language bill decodes (bilingual EN/ES), representative lookup by ZIP with district-office phone numbers, and what’s-moving urgency ranking. Read-only, keyless, no accounts. Remote server at oravan.org/api/mcp/mcp, listed in the MCP registry as org.oravan/mcp.

Quick Install

One-Click IDE Configuration
claude_desktop_config.json
{
  "mcpServers": {
    "cm2489-oravan": {
      "command": "npx",
      "args": [
        "-y",
        "cm2489-oravan"
      ]
    }
  }
}
Or

Using an AI coding agent (Claude Code, Cursor, etc.)? Copy a ready-made prompt that tells it to fetch the setup instructions and install this server for you.

Documentation Overview

Oravan

Your line to Congress Β· Tu lΓ­nea con el Congreso

Oravan is free, nonpartisan civic infrastructure: find your federal representatives, understand active bills in plain language (English and Spanish), get a 30-second call script, and make the call β€” in under 5 minutes, with no account.

The name is the Oravan: the platform in the Roman Forum where citizens stood to address the public and the powerful β€” the original place a voice met power. Latin roots are the shared ancestry of English and Spanish alike.

MCP server

This repository also implements a remote MCP (Model Context Protocol) server β€” the same decoded corpus and lookups, exposed for AI assistants and agents:

  • Endpoint (Streamable HTTP): https://oravan.org/api/mcp/mcp β€” keyless, read-only, rate-limited; no account or credentials required
  • Local/stdio: npm ci then npx tsx scripts/mcp-stdio.mjs β€” the same 5 tools over stdio, zero env vars/secrets required
  • Implementation: app/api/mcp/[transport]/route.ts (built on mcp-handler + @modelcontextprotocol/sdk), tool definitions shared with the stdio entry via lib/core/mcp-tools.ts, pure data layer in lib/core/
  • Five tools: lookup_representatives, get_bill, search_bills, whats_moving, get_representative β€” every response carries a citation envelope (source, as-of freshness, AI-content label, license) in English or Spanish
  • Official MCP Registry: published as org.oravan/mcp (server.json at the repo root, schema-validated in CI by scripts/check-server-json.mjs)
  • Docs: oravan.org/mcp (tool reference, client config, privacy posture) Β· docs/mcp-server-readme.md

Design principles

  1. Zero accounts. ZIP code, interests, and call history live in localStorage on the visitor's device. No server-side user data exists β€” nothing to breach, leak, or subpoena. This is the core privacy posture for at-risk users, not a missing feature.
  2. Static-first. Bills, legislators, district offices, and ZIP→district mappings are static JSON in data/, baked into ~1,000 statically generated pages. Fast, nearly free to host, resilient under load. The only dynamic endpoints are /api/script (AI script generation, cached per bill+stance+language, IP rate-limited), /api/reps (pure lookup), /api/district (stateless split-ZIP address refinement: proxies the Census geocoder so the visitor's IP never reaches census.gov; the address is never stored or logged), and /api/feedback (beta feedback relayed to a private GitHub issue — only what the visitor volunteered, no identifiers).
  3. Bilingual as a first-class feature. Full EN/ES UI via next-intl; scripts are generated in the user's language.
  4. The call moment is the product. Voicemail is legitimized (offices tally it identically), after-hours calling is encouraged, district offices are listed alongside DC, and outcomes (spoke / voicemail / couldn't reach) are logged locally.
  5. Honest about AI. Every generated summary and script is labeled, editable, and reviewed by the human before any call.
  6. Accessible by default. Semantic landmarks, skip link, visible focus, prefers-reduced-motion, 44px+ touch targets, AA contrast.

Data sources

FileSourceRefresh
data/bills.json + data/bills-es.jsonDecoded bill corpus (Congress.gov bills + AI plain-language summaries, English and Spanish)Nightly sync (scripts/sync-bills.mjs via sync-bills.yml): statuses refresh freely; new bills are decode-before-publish, entering the corpus only once their EN and ES summaries exist
data/legislators.jsonunitedstates/congress-legislators (public domain) + district officesscripts/process-data.py
data/zip-districts.jsonOpenSourceActivismTech/us_zipcodes_congresssame
data/vacancies.jsonDerived, not fetched: scripts/vacancy_diff.py diffs seat sets against the currently-committed data every run, so a departed member with no successor surfaces as an explicit vacancy (reps page, /api/reps, MCP lookup_representatives) instead of silently disappearing or being backfilled from a stale term recordscripts/process-data.py (same run as legislators.json)
data/redistricting-watch.jsonHuman-authored (status/note) for the 10 states with contested-or-recent 2025–26 mid-decade map changes; rdh_lastmod is a tripwire baseline against the Redistricting Data Hub's own state-page sitemap β€” see docs/solutions/two-clock-district-boundaries.mdscripts/check-redistricting-watch.mjs, weekly via refresh-legislators.yml; opens a redistricting-watch-labeled issue on change, never auto-updates status/note
data/coverage.jsonReal news articles about top-band bills via TheNewsAPI, AI-relevance-filtered (Haiku)scripts/sync-coverage.mjs (nightly, gated on NEWS_API_KEY)
data/media-bias.jsonOutlet political-lean ratings by AllSides, used under CC BY-NC with attributionVendored snapshot

Portraits are served from the public-domain unitedstates/images project.

Solved pipeline incidents (root cause + the CI gates that prevent recurrence) are documented in docs/solutions/.

The "Read" section (outlet-bias coverage)

Each top bill's page shows real third-party articles about it, labeled by the outlet's political lean (Left / Center / Right) β€” reusing AllSides' publication-level ratings, never a Oravan-invented one. Oravan takes no stance and authors no partisan text: AI is used only behind the scenes β€” generating each bill's news-search terms (press-style names and a subject query) and a cheap relevance gate (is this article about this bill?) β€” and authors nothing displayed. The ingestion runs nightly in CI and bakes results to JSON, so the site still makes zero runtime third-party calls. Without NEWS_API_KEY the sync is a no-op and the section renders nothing; a small hand-built real sample (data/coverage.json) keeps it demoable. Lean is shown by text label + position only β€” never party colors (a hard rule; see DESIGN.md).

Develop

npm install
echo "ANTHROPIC_API_KEY=sk-ant-..." > .env.local   # script generation + decode/relevance
echo "NEWS_API_KEY=..." >> .env.local               # optional; enables the "Read" coverage sync
npm run dev

npm run build statically generates every bill page in both locales.

Known v1 caveats

  • ZIPβ†’district mapping is ZCTA-based; a split ZIP shows all candidate districts by default (senators are unaffected). Entering a street address β€” optional, sent once by POST, never stored or logged β€” narrows it to the actual district via a server-proxied Census-geocoder lookup; the all-candidates view remains the graceful fallback whenever the geocoder can't help. The geocoder request pins the "119th Congressional Districts" layer, which needs a bump when the Census rolls the vintage to the 120th.
  • Script cache and rate limits are in-memory per serverless instance β€” fine at demo scale, should move to a shared store before heavy traffic.
  • New bills can lag behind Congress.gov: the nightly sync decodes at most MAX_NEW_DECODES new bills per run (cost ceiling), so after a missed window the corpus catches up over several nights (decode-before-publish; the backlog drains oldest-first).
  • "Read" coverage exists only for top-band bills (the long tail shows nothing); the ES locale shows the same English articles with localized chrome; outlets absent from data/media-bias.json appear without a lean chip.

License

  • Code: GNU AGPL-3.0. You may use, modify, and run this code β€” including as a network service β€” provided modified versions you operate or distribute remain open under the same license. Embedding Oravan's hosted widgets on your site via the loader/script tag does not subject your site to the AGPL; that's use of our service, not distribution of this code.
  • Not licensed: the Oravan name, logo, and brand assets (assets/brand/, app icons). All rights reserved β€” forks must use their own identity.
  • Content: underlying legislative data is U.S. government work (public domain). AI-generated decodes and summaries are licensed CC BY 4.0, exactly as declared in the MCP citation envelope and on the citations page.

Related MCP Servers

ad0750/regintel-mcp

🐍 ☁️ - MCP server for the RegIntel API: structured regulatory data across 41 jurisdictions and 212 regulations (GDPR, MiCA, DORA, SEC, FINRA, FCA, APRA, ASIC, MAS). Tools for search, lookup, recent updates, and compliance checks.

βš–οΈ Legal0 views
ark-forge/mcp-eu-ai-act

πŸ“‡ ☁️ - EU AI Act compliance scanner that detects regulatory violations in AI codebases with risk classification and remediation guidance.

βš–οΈ Legal0 views
atomno-labs/mcp-sudact

🐍☁️ - Russian court practice (Sudact): case search by article, court, instance and dates; full decision text.

βš–οΈ Legal0 views
atomno-mcp/mcp-fssp

🐍☁️ - FSSP enforcement proceedings lookup for Russian debtors and compliance checks.

βš–οΈ Legal0 views

Engagement

Views
0
Installs
0
Upvotes
0

Views and upvotes are unique per visitor network (hashed IP). Installs count copy actions.

Status

Health: Active

Recent health check succeeded.

Last checked: 7/28/2026, 9:14:48 PM

Unclaimed listing (imported or pending owner verification). Claim it β†’
β˜… Spotlight Slot

Feature Your MCP Server

Get maximum visibility for your server across our directory, search results, and detail pages.

Spotlight Your Server

Own this project?

This directory is pre-filled from public sources. Claim via GitHub README, site badge, or DNS TXT to get the verified badge and attach your website.

Claim this listing

Promote this listing

Optional paid placement. Free listings stay free forever.

Share & Embed

Add our SVG badge (dark/light directory styles) or embeddable widget to your site.