openstates-mcp-server
Search bills, legislators, committees, and events across all 50 US states, DC, and Puerto Rico via MCP. STDIO or Streamable HTTP.
Install / Use
claude mcp add cyanheads -- npx -y github:cyanheads/openstates-mcp-serverIf the server publishes to npm under a different name, use that package instead — check the repo README.
MCP Server
Model Context Protocol server
Quality Score
Category
MarketingSupported Platforms
Tags
Our assessment of openstates-mcp-server
openstates-mcp-server scores 83/100 on our quality scale, 468th of 583 Marketing skills we index.
Its MCP Server is 21 KB long, well organised into 35 sections with 11 code examples: a thorough specification that gives an agent plenty to work with.
It has 3 GitHub stars, so there is little community track record yet; judge it on its content.
Maintenance, license and trust
- The repository was last updated 5 days ago, so openstates-mcp-server is actively maintained.
- It is released under the Apache-2.0 license, a permissive license that allows use, modification and commercial use with attribution.
- Its trust signals score 92/100, with 1 caution from licensing, adoption, age or documentation. These come from repository metadata, not a code audit — read the skill file before letting an agent act on it.
openstates-mcp-server compared with similar skills
All 4 of these similar skills score higher than openstates-mcp-server; compare them before choosing.
| Skill | Score | Stars | Updated | Format |
|---|---|---|---|---|
| openstates-mcp-server (this skill)by cyanheads | 83 | 3 | 5d ago | MCP Server |
| Agent-Reachby Panniantong | 100 | 108.1k | 2d ago | CLAUDE.md |
| headroomby headroomlabs-ai | 100 | 78.7k | today | CLAUDE.md |
| CowAgentby zhayujie | 100 | 47.8k | 1d ago | CLAUDE.md |
| Scraplingby D4Vinci | 100 | 93.4k | today | MCP Server |
Frequently asked questions
- How do I install openstates-mcp-server?
- Run
claude mcp add cyanheads -- npx -y github:cyanheads/openstates-mcp-server. The install tabs above show the steps for each supported agent. - Which AI agents does openstates-mcp-server work with?
- It is written for Claude Code and Claude Desktop, as a MCP Server file. Other agents that read the same format can often use it too.
- Is openstates-mcp-server safe to use?
- It is Apache-2.0-licensed and scores 92/100 on trust signals. Skills are instructions an agent will follow, so read the file before installing it and do not approve commands you do not understand.
- Is openstates-mcp-server still maintained?
- The repository was last updated 5 days ago, so openstates-mcp-server is actively maintained.
Skill content
View source on GitHubPublic Hosted Server: https://openstates.caseyjhand.com/mcp
</div>Overview
US state legislatures from Open States: all 50 states, DC, and 5 US territories. Search bills, legislators, committees, and events, and find who represents any location.
Tools
| 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, or district, or fetch specific people by OCD person ID |
| openstates_get_legislators_by_location | Find every legislator representing a geographic coordinate (latitude/longitude) — state legislators and the federal delegation |
| 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 |
Resources
| Resource | Description |
|:---|:---|
| openstates://jurisdiction/{+jurisdiction_id} | Jurisdiction metadata including current sessions, coverage dates, and bill/people update timestamps |
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.
Prompts
| Prompt | Description |
|:---|:---|
| openstates_bill_research | Structured framework for analyzing a state bill: summary, sponsors, committee referrals, action timeline, vote record, and related legislation |
| openstates_legislator_profile | Research framework for profiling a legislator: sponsored bills, committee assignments, voting record, and contact details |
Skills
| Skill | Description |
|:---|:---|
| openstates-guide | Identifier chains and gates for agents calling the tools: session pinning, reading vote events, committee roster scans, hearing searches, and the request budget |
Plugin installs and the .mcpb bundle pick it up from skills/; MCP clients that support the Skills extension receive it from the server.
Capability reference
openstates_search_bills <sub>tool</sub>
- Either
jurisdictionorqis required by the schema — aq-only search spans all 56 jurisdictions and exceeds the upstream timeout for a common term, so pairing them is the reliable form - Filters:
session,chamber(upper/lower),classification,subjecttags,sponsor,sponsor_classification, andaction_since/updated_since/created_sinceISO 8601 date filters includeinlines sponsorships, actions, votes, abstracts, versions, documents, and related bills — avoids follow-upopenstates_get_billcallssortdefaults toupdated_desc;sort=latest_action_descsurfaces bills currently moving; pagination up to 20 per page (default 10)- Empty-result notice echoes every applied filter and names the jurisdiction by name when it isn't recognized
openstates_get_bill <sub>tool</sub>
- Lookup by
openstates_id(preferred) or the three-part pathjurisdiction+session+bill_id; a call missing both fails withmissing_lookup_params openstates_idisocd-bill/<uuid>copied fromopenstates_search_bills(case and surrounding whitespace are normalized); a<jurisdiction>/<session>/<bill_id>path is also accepted. Any other value fails locally withinvalid_openstates_id, with no upstream call- Accepts legislature-format bill identifiers (e.g.,
HB 1000,SB 42) includeinlines sponsorships, actions, votes, versions, documents, abstracts, other titles/identifiers, and related billsnot_foundwhen a well-formed ID or a three-part path resolves to nothing
openstates_search_people <sub>tool</sub>
- Either
jurisdictionorid(OCD person IDs) is required — an unscoped search exceeds the upstream timeout even for a name-only query idresolves any number of specific OCD person IDs in one call — the IDs that bill sponsorships and committee memberships hand back — and needs no jurisdiction alongside itorg_classification:upper/lower/executive/legislature(every legislator — both chambers, or the single body in Nebraska and DC; executive officials excluded); omitting it returns every officeholder including executives- Case-insensitive substring
namematch, plusdistrict;includeadds offices, links, other_names, other_identifiers, sources - Party is reported on every result but cannot be filtered on
- Pagination up to 20 per page
openstates_get_legislators_by_location <sub>tool</sub>
- Pass decimal-degree
latitude/longitude; does not geocode addresses - Returns both government tiers in one call: state legislators plus the coordinate's two US Senators and one US Representative
jurisdiction.classification(statevscountry) is the tier discriminator —current_role.org_classificationis not, since it'supper/lowerfor a US Senator exactly as for a state senatorstateCount/federalCountenrichment fields report the tier split- Out-of-range coordinates fail as
invalid_coordinate; a location with no coverage returns an empty-result notice
openstates_search_committees <sub>tool</sub>
jurisdictionis required — the schema rejects an all-states request- Filter by
classification(committee/subcommittee) andchamber(a chamber filter omits joint committees);parentscopes to one committee's subcommittees include=membershipsreturns the full roster with member roles- Experimental: Open States is working to restore committee support and not all states have coverage — the output's
coverageNotefield always documents this - Pagination up to 20 per page
openstates_get_committee <sub>tool</sub>
- Fetch by OCD
committee_id(fromopenstates_search_committees) include=membershipsreturns the roster;include=links/sourcesadd reference URLs- Experimental — not all states have committee data;
not_foundwhen the ID doesn't exist
openstates_search_events <sub>tool</sub>
jurisdictionis required — the events endpoint has no all-states searchafter/beforescope to an ISO 8601 date range;require_bills=truefilters to events with a bill on the agendainclude=agenda,participantsreturns full meeting context- Experimental: most states don't publish event data — an empty unfiltered result may mean no coverage, not no events; an empty filtered result (
require_bills,after,before) names those filters in its notice - Pagination up to 20 per page
openstates_get_event <sub>tool</sub>
- Fetch by OCD
event_id(fromopenstates_search_events) includeadds agenda, participants, links, media, and documents- Experimental — event coverage is limited;
not_foundwhen the ID doesn't exist
openstates_list_jurisdictions <sub>tool</sub>
- Returns all 56 jurisdictions (50 states, DC, and 5 US territories) in one default call — pages are merged server-side, since the upstream
per_pageceiling of 52 no longer covers the full set classificationfilter defaults tostateinclude=legislative_sessionsreturns every historical and current session identifier — required before filtering bill searches by session, since formats vary by state (e.g.,2025,2025-2026,2025rs,2025s1)include=organizations/latest_runsadd chamber/executive-body and scraper-run metadata
openstates_get_jurisdiction <sub>tool</sub>
- Fetch one jurisdiction by OCD-ID, state name, or two-letter abbreviation
include=legislative_sessionsreturns all session identifiers with date rangesnot_foundwhen the identifier doesn't resolve
openstates://jurisdiction/{+jurisdiction_id} <sub>resource</sub>
jurisdiction_idaccepts the raw OCD ID (slashes intact) asopenstates_list_jurisdictionsreturns it, a state name (multi-word allowed), or a two-letter abbreviation; percent-encoded forms are decoded once, and a malformed escape is a validation error- Returns jurisdiction metadata as
application/json: current legislative sessions, coverage dates, bill/people update timestamps - Always includes
legislative_sessions— use to prime session identifiers without a tool call not_foundwhen the identifier doesn't resolve;rate_limitedwhen the shared key's request cap is reached
openstates_bill_research <sub>prompt</sub>
- Arguments:
jurisdiction,session,bill_id— all required - Returns one user message directing a structured research brief: overview, sponsors, legislative history, vote record, related legislation, bill text, and a passage assessment
openstates_legislator_profile <sub>prompt</sub>
Truncated for display — read the full file on GitHub.
Related Skills
Agent-Reach
108.1kGive your AI agent eyes to see the entire internet. Read & search Twitter, Reddit, YouTube, GitHub, Bilibili, XiaoHongShu — one CLI, zero API fees.
headroom
78.7kCompress tool outputs, logs, files, and RAG chunks before they reach the LLM. 20% fewer tokens for coding agents, 60-95% fewer tokens for JSON, same answers. Library, proxy, MCP server.
CowAgent
47.8kOpen-source personal AI assistant & Agent Harness. Plans tasks, runs tools and skills, self-evolves with memory and knowledge. Multi-agent, multi-model, multi-channel. Lightweight, extensible, one-line install.
Scrapling
93.4k🕷️ The BEST Web Scraping framework that handles everything from a single request to a full-scale crawl! Don't be shy, join here: https://discord.gg/EMgGbDceNQ and follow here for daily tips and tricks: https://x.com/Scrapling_dev
Languages
Trust signals
From repository metadata: license, adoption, age and documentation. Not a code audit — see the Safety scan above for what the skill file itself contains.
