mcpbeat Sign in

Openstates MCP Server

answering

Openstates MCP Server is answering right now. Last checked moments ago. 730 installs a week from npm. It exposes 10 tools. Last commit 28 Oct 2026.

Search bills, legislators, committees, and events across all 50 US states, DC, and 5 US territories.

Installs per day peak 348 · avg 43 · +535% w/w
a month agotoday
Uptime history 91 days of history · worst day 0%
91 days agonow
100.0%
Uptime 24h
92 of 92 checks
10
Tools
read from the server
571 ms
Response time
average over 24h
730
Installs / week
npm and PyPI

What changed 20

Every tool that appeared, vanished or quietly changed what it asks for. Recorded since 25 August 2026. No other catalogue keeps this.

28 Oct 3 tools changed the parameters they ask for openstates_get_bill, openstates_search_committees, openstates_search_people
28 Oct 2 tool descriptions were rewritten openstates_search_events, openstates_search_people
28 Oct a tool changed version
25 Oct a tool changed version
9 Oct a tool changed version
20 Sep a tool changed version
25 Aug 10 tools changed the parameters they ask for openstates_get_bill, openstates_get_committee, openstates_get_event and 7 more
25 Aug a tool changed version

Nothing serious here today

Today is the operative word: we check Openstates MCP Server every 15 minutes and re-read its code on every release. Watch it and you find out the day that stops being true.

Three servers free · no card

Connect this server

Endpoint below is the one we actually reach during checks — not the one copied from a README. Last verified 0 min ago.

run in your terminal
claude mcp add openstates-mcp-server --transport http https://openstates.caseyjhand.com/mcp
Settings → Connectors → Add custom connector, then paste this address
https://openstates.caseyjhand.com/mcp
~/.codex/config.toml
[mcp_servers.openstates-mcp-server]
url = "https://openstates.caseyjhand.com/mcp"
.cursor/mcp.json
{
  "mcpServers": {
    "openstates-mcp-server": {
      "url": "https://openstates.caseyjhand.com/mcp"
    }
  }
}
.vscode/mcp.json
{
  "servers": {
    "openstates-mcp-server": {
      "type": "http",
      "url": "https://openstates.caseyjhand.com/mcp"
    }
  }
}

Available tools 10

Read directly from the server with tools/list, grouped by what they act on. If a tool disappears, we record the date.

openstates
openstates_get_bill
Fetch full detail for a specific state bill. Accepts either the three-part path (jurisdiction + session + bill_id) or a direct OCD bill ID (openstates_id from search results). Use include to request votes, actions, sponsorships, documents, and versions in one call rather than searching again. include=votes returns the full vote tally and per-legislator positions. include=actions returns the complete action history. Prefer openstates_id when available to avoid session identifier lookup.
openstates_get_committee
Fetch committee detail by OCD organization ID. Returns name, classification, and membership roster when include=memberships is requested. Experimental — not all states have committee data in Open States. Obtain the committee_id from openstates_search_committees.
openstates_get_event
Fetch full event detail by OCD event ID. Returns agenda, participants, media links, and associated documents when requested via include. Experimental — event coverage is limited in Open States. Obtain the event_id from openstates_search_events.
openstates_get_jurisdiction
Fetch full metadata for a specific jurisdiction including all legislative sessions, their identifiers, and coverage dates. Use when you need to know the exact session identifier for a state before filtering bill searches — session formats vary widely (e.g., "2025", "2025rs", "2025s1"). Jurisdiction IDs follow OCD format: ocd-jurisdiction/country:us/state:{abbr}/government (e.g., ocd-jurisdiction/country:us/state:wa/government). State names (e.g., "Washington") and two-letter abbreviations (e.g., "wa") are also accepted.
openstates_get_legislators_by_location
Find every legislator representing a geographic coordinate — both tiers. Pass latitude and longitude to get the state senators and representatives for that location (and potentially governor/executive officials), plus the coordinate's two US Senators and its US Representative. jurisdiction.classification separates the tiers: "state" is a state legislature, "country" is the US Congress. current_role.org_classification does not — it is "upper"/"lower" for a US Senator exactly as for a state senator. Useful for constituent-to-representative matching, address-based policy research, and electoral boundary analysis. This server does not geocode addresses — the caller must provide decimal-degree coordinates. Use include=offices to get contact information alongside the legislator list.
openstates_list_jurisdictions
List all jurisdictions covered by Open States — all 50 states, DC, and 5 US territories (American Samoa, Guam, Northern Mariana Islands, Puerto Rico, and the US Virgin Islands): 56 in total, returned complete in a single default call. Returns coverage metadata: latest bill update time, latest people update time, and optionally all legislative sessions with their identifiers. Use this when you need to discover valid session identifiers for a state before calling openstates_search_bills with a session filter. The legislative_sessions include option returns all historical and current sessions — always check valid session identifiers here before using them in bill searches, since formats vary widely by state (e.g., "2025", "2025-2026", "2025rs", "2025s1").
openstates_search_bills
Search state legislative bills across all covered US jurisdictions. Supports full-text search, jurisdiction/session filtering, subject tags, sponsor lookups, and sort order. Either jurisdiction or q (full-text) is required, and pairing them is the reliable form — a q-only search spans all 56 jurisdictions and exceeds the upstream timeout for a common term, though a distinctive one still returns quickly. include=sponsorships,actions returns sponsor and action history inline. sort=latest_action_desc surfaces bills currently moving. openstates_get_jurisdiction with include=legislative_sessions returns valid session identifiers for session filtering.
openstates_search_committees
List committees for a jurisdiction. jurisdiction is required — a request spanning all 56 jurisdictions exceeds the upstream timeout, so scope every call to a single state; use openstates_list_jurisdictions to pick one. Experimental — Open States is actively working to restore committee support and not all states have data. Use chamber to scope to upper (senate) or lower (house) committees. Use classification=subcommittee to find subcommittees of a parent. Use include=memberships to get the full roster with member roles. The coverageNote field in the output will always note the experimental coverage limitations.
openstates_search_events
Search hearings, floor sessions, and committee meetings. jurisdiction is required — the Open States events endpoint has no all-states search, so scope every call to a single state; use openstates_list_jurisdictions to pick one. Experimental — most states do not publish event data to Open States. Use after and before to scope to a date range. Set require_bills=true to filter to events with bills on the agenda, which is the most useful filter for tracking legislation through committee. Use include=agenda,participants for full meeting context. Empty results from an unfiltered search often indicate the state lacks event data rather than no events occurring.
openstates_search_people
Search state legislators and officials by name, jurisdiction, chamber, or district, or fetch specific people by OCD person ID. Party is reported on every result but cannot be filtered on — narrow by party after the call. Either jurisdiction or id is required — a search spanning all 56 jurisdictions exceeds the upstream timeout, including a name-only one, so scope every call to a single state or to specific person IDs. Use openstates_list_jurisdictions to pick a jurisdiction, or openstates_get_legislators_by_location when you have coordinates but no state. id takes the person IDs that openstates_get_bill sponsorships and openstates_get_committee memberships hand back, and resolves any number of them in one call. Supports name substring matching (case-insensitive). org_classification targets a role type: "upper" for Senate, "lower" for House/Assembly, "executive" for governors and executive officials, and "legislature" for every legislator — both chambers merged into one paginated set (all upper members, then all lower), or the single body in Nebraska and the DC Council, which excludes executive-branch officials. Omitting org_classification is not the same as "legislature": it returns every officeholder, executive officials included. include=offices adds phone, fax, and address. include=links adds website and social links.

Endpoints

URLTransportStateLatencyChecked
https://openstates.caseyjhand.com/mcp streamable-http answering 555 ms 0 min ago

Alternatives to Openstates MCP Server

same job, measured the same way
Gavelin
by gavelin

Search bills and speaker-attributed hearing transcripts across all 50 US state legislatures.

answering
Openstates
by pipeworx-io

OpenStates MCP — bills, legislators, votes in all 50 US states

391 installs/wk 48 tools answering
Legislation
by delilahusa

U.S. bills, roll-call votes, legislators and 2026 elections for all 50 states, D.C. and Congress.

43 tools answering
CongressMCP
by congressmcp

Federal and 50-state legislative data for AI: bills, text, votes, members, and committees.

6 tools answering
Bill Commons
by billcommons

Search 209k+ US state bills, all 50 states + DC: full text, sponsors, votes, status. Free.

13 tools answering
Board And Stable MCP
by kevindarstnbb

Search horse boarding facilities and trainers across 44 US states.

local only
UK Legal Research
by paulieb89

UK legal research — case law, legislation, Hansard, bills, votes, committees, HMRC, citations

1 735 installs/wk 37 tools answering
BeachClubs.ae
by beachclubs

Search UAE beach clubs, day pass prices, amenities, opening hours and events across all 7 emirates.

4 tools answering

Openstates MCP Server — questions

Answers built from our own checks of this server.

What can Openstates MCP Server do?
It exposes 10 tools, read directly from the server on our last check. Among them: openstates_get_bill, openstates_get_committee, openstates_get_event, openstates_get_jurisdiction, openstates_get_legislators_by_location, openstates_list_jurisdictions and 4 more. The full list with descriptions is on this page — we take it from the server itself via tools/list, not from a README. How MCP servers expose tools in the first place →
Is Openstates MCP Server working right now?
We send a real MCP handshake every 15 minutes. Over the last 24 hours 92 of 92 checks got a reply (100.0%), average response time 571 ms. The bar chart above shows every period we have measured.
How do I connect Openstates MCP Server?
Copy the ready config from this page. We generate it for Claude Code, Claude Desktop, Codex, Cursor and VS Code, each in the form that client actually reads. It is a remote server, so there is nothing to install — the client connects to the address.
Does Openstates MCP Server need an API key?
No. Openstates MCP Server completed a full MCP handshake with us as an anonymous client and listed its tools without asking for anything. All 10 of them are readable on this page. This is what we observed, not what the docs claim.
How fast is Openstates MCP Server?
It answers our handshake in 571 ms on average, which is faster than 20% of all working MCP servers we measure. That is on the slow side — worth knowing if the tool sits inside an interactive loop. The comparison comes from our own checks across the whole registry, every 15 minutes.
How many people use Openstates MCP Server?
The npm package @cyanheads/openstates-mcp-server was installed 730 times in the last week. Week over week that is +535%. We show installs rather than GitHub stars on purpose: a star is a bookmark, an install is someone actually running it.
Is Openstates MCP Server open source?
The code is open source: it is published under the Apache-2.0 licence, written in TypeScript, 3 stars on GitHub and 3 open issues. The licence covers the code in the repository, not the hosted service at openstates.caseyjhand.com, which runs on its operator's own terms.