Search bills, legislators, committees, and events across all 50 US states, DC, and Puerto Rico via MCP. STDIO or Streamable HTTP.
- ✓Open-source license (Apache-2.0)
- ✓Actively maintained (<30d)
- ✓Clear description
- ✓Topics declared
git clone https://github.com/cyanheads/openstates-mcp-server{
"mcpServers": {
"openstates": {
"command": "node",
"args": ["/path/to/openstates-mcp-server/dist/index.js"],
"env": {
"OPENSTATES_API_KEY": "<openstates_api_key>"
}
}
}
}OPENSTATES_API_KEYMCP Servers overview
<div align="center">
<h1>@cyanheads/openstates-mcp-server</h1>
<p><b>Search bills, legislators, committees, and events across all 50 US states, DC, and 5 US territories via MCP. STDIO or Streamable HTTP.</b>
<div>10 Tools • 1 Resource • 2 Prompts</div>
</p>
</div>
<div align="center">
[](./CHANGELOG.md) [](./LICENSE) [](https://github.com/users/cyanheads/packages/container/package/openstates-mcp-server) [](https://modelcontextprotocol.io/) [](https://www.npmjs.com/package/@cyanheads/openstates-mcp-server) [](https://www.typescriptlang.org/) [](https://bun.sh/)
</div>
<div align="center">
[](https://github.com/cyanheads/openstates-mcp-server/releases/latest/download/openstates-mcp-server.mcpb) [](https://cursor.com/en/install-mcp?name=openstates-mcp-server&config=eyJjb21tYW5kIjoibnB4IiwiYXJncyI6WyIteSIsIkBjeWFuaGVhZHMvb3BlbnN0YXRlcy1tY3Atc2VydmVyIl0sImVudiI6eyJPUEVOU1RBVEVTX0FQSV9LRVkiOiJ5b3VyLWFwaS1rZXkifX0=) [](https://vscode.dev/redirect?url=vscode:mcp/install?%7B%22name%22%3A%22openstates-mcp-server%22%2C%22command%22%3A%22npx%22%2C%22args%22%3A%5B%22-y%22%2C%22%40cyanheads%2Fopenstates-mcp-server%22%5D%2C%22env%22%3A%7B%22OPENSTATES_API_KEY%22%3A%22your-api-key%22%7D%7D)
[](https://www.npmjs.com/package/@cyanheads/mcp-ts-core)
**Public Hosted Server:** [https://openstates.caseyjhand.com/mcp](https://openstates.caseyjhand.com/mcp)
</div>
---
## Tools
10 tools covering the full Open States v3 API surface — bills, legislators, committees, events, and jurisdictions:
| Tool | Description |
|:---|:---|
| `openstates_search_bills` | Search state legislative bills across all covered US jurisdictions with full-text search, jurisdiction/session filtering, subject tags, and sponsor lookups |
| `openstates_get_bill` | Fetch full detail for a specific bill by OCD ID or three-part path (jurisdiction + session + bill_id) |
| `openstates_search_people` | Search state legislators and officials within a jurisdiction by name, chamber, district, or party |
| `openstates_get_legislators_by_location` | Find all legislators representing a geographic coordinate (latitude/longitude) |
| `openstates_search_committees` | List committees for a jurisdiction (experimental — not all states have coverage) |
| `openstates_get_committee` | Fetch committee detail by OCD organization ID, with optional membership roster |
| `openstates_search_events` | Search hearings, floor sessions, and committee meetings (experimental) |
| `openstates_get_event` | Fetch full event detail including agenda, participants, and media links |
| `openstates_list_jurisdictions` | List all 56 jurisdictions (50 states, DC, and 5 US territories) covered by Open States with session identifiers and coverage metadata |
| `openstates_get_jurisdiction` | Fetch full metadata for a specific jurisdiction including all legislative sessions and their identifiers |
### `openstates_search_bills`
Search state legislative bills with rich filtering and inline related data.
- Full-text search across bill titles, abstracts, and text (`q`)
- Filter by jurisdiction (state name, two-letter abbreviation, or OCD-ID), session, chamber, classification, subject tags, and sponsor
- Sort by latest action, first action, or update time — use `sort=latest_action_desc` for bills currently moving through the legislature
- `include` parameter requests sponsorships, actions, votes, abstracts, versions, and related bills inline — eliminates follow-up `openstates_get_bill` calls for most research workflows
- Sponsors carry linked person records (OCD person ID + name) when available, so a sponsor chains onward by ID rather than by name match
- Every result carries `openstates_url` (citable page) and `updated_at` (the field the default `sort=updated_desc` orders by)
- `action_since`, `updated_since`, and `created_since` date filters for change-tracking
- Pagination up to 20 results per page
- Empty-result recovery: echoes applied filters and suggests how to broaden
---
### `openstates_get_bill`
Fetch complete bill detail by OCD ID or path lookup.
- Two lookup modes: `openstates_id` (OCD bill ID from search results, preferred) or the three-part path `jurisdiction + session + bill_id`
- Accepts bill identifiers in legislature format (e.g., `HB 1000`, `SB 42`)
- `include=votes` returns full vote tallies and per-legislator positions
- `include=versions,documents` provides links to bill text and fiscal notes
- Sponsors carry linked person records (OCD person ID + name) when available
---
### `openstates_search_people`
Search legislators and officials within one jurisdiction by name, chamber, or district.
- `jurisdiction` is required — a search spanning all 56 jurisdictions exceeds the upstream timeout, name-only searches included, so an omitted `jurisdiction` is rejected before any request is issued. Use `openstates_list_jurisdictions` to pick one, or `openstates_get_legislators_by_location` when you have coordinates but no state
- Case-insensitive substring matching on name
- `org_classification` targets a role type: `upper` (Senate), `lower` (House/Assembly), `executive` (governors and executive officials), `legislature` (every legislator — both chambers merged into one paginated set, all upper members then all lower)
- Omitting `org_classification` is not equivalent to `legislature` — it returns every officeholder, executive officials included
- `include=offices` returns phone, fax, and mailing address
- `include=links` returns website and social media links
- Every result carries the member's official headshot URL (`image`) when published, and the OCD division their district maps to (`current_role.division_id`)
---
### `openstates_get_legislators_by_location`
Find all state legislators representing a geographic coordinate.
- Pass decimal-degree latitude/longitude to get state senators and representatives for that location
- Useful for constituent-to-representative matching, address-based policy research, and electoral boundary analysis
- Does not geocode addresses — the caller must provide coordinates
- Returns a coverage note when no legislators are found (e.g., coordinates outside US boundaries)
---
### `openstates_list_jurisdictions` and `openstates_get_jurisdiction`
Discover and look up jurisdiction coverage metadata.
- `openstates_list_jurisdictions` returns all 56 jurisdictions (50 states, DC, and 5 US territories) in a single default call — the pages are merged server-side, since the upstream `per_page` ceiling of 52 no longer covers the full set
- `include=legislative_sessions` returns all historical and current session identifiers — required before filtering bill searches by session, since formats vary widely by state (e.g., `2025`, `2025-2026`, `2025rs`, `2025s1`)
- `openstates_get_jurisdiction` fetches one jurisdiction by OCD-ID, state name, or two-letter abbreviation
---
### Committee and event tools (experimental)
`openstates_search_committees`, `openstates_get_committee`, `openstates_search_events`, and `openstates_get_event` are experimental — Open States is actively working to restore committee support and most states do not publish event data. Empty results may indicate the state lacks data, not that no committees or events exist. The two search tools (`openstates_search_committees` and `openstates_search_events`) include a `coverageNote` field in their output documenting this limitation, and both require a `jurisdiction` — a request spanning all 56 exceeds the upstream timeout, so an omitted one is rejected before any request is issued.
## Resources and prompts
| Type | Name | Description |
|:---|:---|:---|
| Resource | `openstates://jurisdiction/{jurisdiction_id}` | Jurisdiction metadata including current sessions, coverage dates, and bill/people update timestamps |
| Prompt | `openstates_bill_research` | Structured framework for analyzing a state bill: summary, sponsors, committee referrals, action timeline, vote record, and related legislation |
| Prompt | `openstates_legislator_profile` | Research framework for profiling a legislator: sponsored bills, committee assignments, voting record, and contact details |
All resource data is also reachable via tools. Use `openstates_get_jurisdiction` for programmatic jurisdiction lookups; the resource is useful for injecting jurisdiction context as stable reference material.
## Features
Built on [`@cyanheads/mcp-ts-core`](https://www.npmjs.com/package/@cyanheads/mcp-ts-core):
- Declarative tool, resource, and prompt definitions — single file per primitive, framework handles registration and validation
- Unified error handling — handlers throw, framework catches, classifies, and formats
- Pluggable auth: `none`, `jwt`, `oauth`
- Swappable storage backends: `in-memory`, `filesystem`, `Supabase`, `Cloudflare KV/R2/D1`
- Structured logging with optional OpenTelemetry tracing
- STDIO and Streamable HTTP transports
Open What people ask about openstates-mcp-server
What is cyanheads/openstates-mcp-server?
+
cyanheads/openstates-mcp-server is mcp servers for the Claude AI ecosystem. Search bills, legislators, committees, and events across all 50 US states, DC, and Puerto Rico via MCP. STDIO or Streamable HTTP. It has 1 GitHub stars and was last updated today.
How do I install openstates-mcp-server?
+
You can install openstates-mcp-server by cloning the repository (https://github.com/cyanheads/openstates-mcp-server) or following the README instructions on GitHub. ClaudeWave also provides quick install blocks on this page.
Is cyanheads/openstates-mcp-server safe to use?
+
Our security agent has analyzed cyanheads/openstates-mcp-server and assigned a Trust Score of 87/100 (tier: Trusted). See the full breakdown of passed checks and flags on this page.
Who maintains cyanheads/openstates-mcp-server?
+
cyanheads/openstates-mcp-server is maintained by cyanheads. The last recorded GitHub activity is from today, with 0 open issues.
Are there alternatives to openstates-mcp-server?
+
Yes. On ClaudeWave you can browse similar mcp servers at /categories/mcp, sorted by popularity or recent activity.
Deploy openstates-mcp-server to your cloud
Ship this repo to production in minutes. Each platform spins up its own environment with editable env vars.
Maintain this repo? Add a badge to your README
Drop the badge into your GitHub README to show it's tracked on ClaudeWave. Each badge links back to this page and reflects the live Trust Score.
[](https://claudewave.com/repo/cyanheads-openstates-mcp-server)<a href="https://claudewave.com/repo/cyanheads-openstates-mcp-server"><img src="https://claudewave.com/api/badge/cyanheads-openstates-mcp-server" alt="Featured on ClaudeWave: cyanheads/openstates-mcp-server" width="320" height="64" /></a>More MCP Servers
Fair-code workflow automation platform with native AI capabilities. Combine visual building with custom code, self-host or cloud, 400+ integrations.
User-friendly AI Interface (Supports Ollama, OpenAI API, ...)
An open-source AI agent that brings the power of Gemini directly into your terminal.
The fastest path to AI-powered full stack observability, even for lean teams.
Real-time global intelligence dashboard. AI-powered news aggregation, geopolitical monitoring, and infrastructure tracking in a unified situational awareness interface
🕷️ An adaptive Web Scraping framework that handles everything from a single request to a full-scale crawl!