# openstates-mcp-server MCP server

Search bills, legislators, committees, and events across all 50 US states, DC, and Puerto Rico.

## Links
- Registry page: https://www.getdrio.com/mcp/io-github-cyanheads-openstates-mcp-server
- Repository: https://github.com/cyanheads/openstates-mcp-server

## Install
- Command: `npx -y @cyanheads/openstates-mcp-server`
- Endpoint: https://openstates.caseyjhand.com/mcp
- Auth: Auth required by registry metadata

## Setup notes
- Package: Npm @cyanheads/openstates-mcp-server v0.1.7
- Environment variable: OPENSTATES_API_KEY (required)
- Environment variable: MCP_LOG_LEVEL (default info)
- Package: Npm @cyanheads/openstates-mcp-server v0.1.7
- Environment variable: OPENSTATES_API_KEY (required)
- Environment variable: MCP_HTTP_HOST (default 127.0.0.1)
- Environment variable: MCP_HTTP_PORT (default 3010)
- Environment variable: MCP_HTTP_ENDPOINT_PATH (default /mcp)
- Environment variable: MCP_AUTH_MODE (default none)
- Environment variable: MCP_LOG_LEVEL (default info)
- The upstream registry signals required auth or secrets.
- Remote endpoint: https://openstates.caseyjhand.com/mcp

## Tools
- openstates_search_bills (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 — combining both narrows results. 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. Endpoint: https://openstates.caseyjhand.com/mcp
- openstates_get_bill (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. Endpoint: https://openstates.caseyjhand.com/mcp
- openstates_search_people (Search People) - Search state legislators and officials by name, jurisdiction, chamber, district, or party. Supports name substring matching (case-insensitive). org_classification targets a specific chamber: "upper" for Senate, "lower" for House/Assembly, "legislature" for all legislators, "executive" for governors and executive officials. include=offices adds phone, fax, and address. include=links adds website and social links. Omitting jurisdiction searches across all states and may return a large result set. Endpoint: https://openstates.caseyjhand.com/mcp
- openstates_get_legislators_by_location (Get Legislators by Location) - Find all state legislators representing a geographic coordinate. Pass latitude and longitude to get state senators and representatives (and potentially governor/executive officials) for that location. 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. Endpoint: https://openstates.caseyjhand.com/mcp
- openstates_search_committees (Search Committees) - List committees for a jurisdiction. 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 coverage_note field in the output will always note the experimental coverage limitations. Endpoint: https://openstates.caseyjhand.com/mcp
- openstates_get_committee (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. Endpoint: https://openstates.caseyjhand.com/mcp
- openstates_search_events (Search Events) - Search hearings, floor sessions, and committee meetings. 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 often indicate the state lacks event data rather than no events occurring. Endpoint: https://openstates.caseyjhand.com/mcp
- openstates_get_event (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. Endpoint: https://openstates.caseyjhand.com/mcp
- openstates_list_jurisdictions (List Jurisdictions) - List all jurisdictions covered by Open States — all 50 states, DC, and Puerto Rico. 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"). Endpoint: https://openstates.caseyjhand.com/mcp
- openstates_get_jurisdiction (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. Endpoint: https://openstates.caseyjhand.com/mcp

## Resources
- openstates://jurisdiction/wa - Jurisdiction Metadata Washington State jurisdiction metadata MIME type: application/json
- openstates://jurisdiction/ca - Jurisdiction Metadata California jurisdiction metadata MIME type: application/json
- openstates://jurisdiction/ny - Jurisdiction Metadata New York jurisdiction metadata MIME type: application/json
- openstates://jurisdiction/tx - Jurisdiction Metadata Texas jurisdiction metadata MIME type: application/json

## Prompts
- openstates_bill_research - Structured framework for analyzing a state bill: summary, sponsors, committee referrals, action timeline, vote record, and related legislation. Produces a comprehensive research brief. Arguments: jurisdiction, session, bill_id
- openstates_legislator_profile - Research framework for profiling a legislator: sponsored bills, committee assignments, voting record, and contact details. Produces a structured profile for constituent research, advocacy, or journalistic purposes. Arguments: name, jurisdiction

## Metadata
- Owner: io.github.cyanheads
- Version: 0.1.7
- Runtime: Npm
- Transports: STDIO, HTTP
- License: Not captured
- Language: Not captured
- Stars: Not captured
- Updated: Jun 4, 2026
- Source: https://registry.modelcontextprotocol.io
