MCP server for GovQL — query US Congressional data via GraphQL from any MCP client.
Project description
govql-mcp-server
An MCP (Model Context Protocol) server for GovQL — gives AI clients like Claude Desktop, Claude Code, and Cursor direct access to the US Congressional GraphQL API at api.govql.us/graphql without bespoke HTTP wiring.
For the design rationale (why FastMCP-Python, the passthrough+curated philosophy, roadmap through v0.4), see design.md.
What you can do with it
Ask an agent questions like:
- "How did Vermont's two senators vote on the most recent nomination?"
- "Which legislators in the 118th Congress switched parties during their service?"
- "Who represents Arizona's 3rd congressional district?"
- "Compare Senator Sanders' voting record to Senator Murkowski's on cloture votes in the most recent Congress."
- "Which Democrats most often voted with Republicans in the current Congress?"
The agent picks the right tool, writes the GraphQL query against the live schema, and parses the response — no manual API wrangling.
Install
The server runs as a per-client subprocess over stdio. Pick your client:
Claude Desktop
Edit claude_desktop_config.json (Settings → Developer → Edit Config):
{
"mcpServers": {
"govql": {
"command": "uvx",
"args": ["govql-mcp-server"]
}
}
}
Restart Claude Desktop. The govql tools appear in the tools panel.
Claude Code
Add to .mcp.json in your project (or ~/.mcp.json for global):
{
"mcpServers": {
"govql": {
"command": "uvx",
"args": ["govql-mcp-server"]
}
}
}
Cursor
Settings → MCP → Add Server. Use the same command / args as above.
Other clients
Any MCP-compatible client that supports stdio servers will work. The command
is uvx govql-mcp-server with no required arguments.
Tools
| Tool | Purpose |
|---|---|
execute_graphql |
Run any GraphQL query against the GovQL endpoint. Returns the result plus an last_ingest timestamp so the agent can reason about data freshness. |
list_types |
Returns the names and kinds of every type in the GovQL schema. Optional kind filter ("OBJECT", "INPUT_OBJECT", "ENUM", etc.) to narrow further. Start here when you don't know what's queryable. |
describe_type |
Returns one type's full details — fields, arg signatures, input fields, enum values. Call after list_types to learn the shape of a specific type before writing a query. |
find_legislator |
Find members by name, party, state, chamber, or district when you don't know a bioguide id. Party/state/chamber/district match the member's terms (district is House-only); current_only (default) restricts to sitting members. Returns a compact list — each member's bioguideId plus current party/state/chamber/district. |
find_vote |
Browse roll-call votes by category, chamber, or congress (newest first), or keyword-search the vote question. topic matches the question text (which includes bill short titles) — not a full subject index, so it misses procedural votes, and bill subjects aren't populated yet. Returns a compact list with each voteId. |
get_legislator |
Full detail for one member by bioguide id: names, bio, and complete term history (party/state/chamber/district over time) with a current block. |
get_vote_with_positions |
One vote by id with tallies and per-party breakdown; optionally the individual member positions (filter by party/state/position). |
get_voting_record |
A member's voting behavior per congress: participation rate and party-loyalty rate, from the precomputed summaries. |
compare_voters |
How often two members voted the same way, per congress+chamber, with an agreement rate. |
find_party_defectors |
Members who least often voted with their own party's majority in a congress; optional party/chamber filters. |
Configuration
All env vars are optional — the package is zero-config for end users.
| Env var | Default | Purpose |
|---|---|---|
GOVQL_ENDPOINT |
https://api.govql.us/graphql |
Endpoint to query. Override to point at a local dev stack. |
GOVQL_TIMEOUT_MS |
30000 |
Per-request HTTP timeout. |
LOG_LEVEL |
INFO |
Logging level. Logs go to stderr only (stdout is reserved for the MCP transport). |
Limits (enforced by the upstream API)
- Max query depth: 10
- Max query complexity: ~10 billion points (
first: Nmultiplies child cost by N — keep page sizes reasonable on deeply nested queries) - Rate limit: 100 requests / 60 s per source IP
A depth or complexity violation surfaces as a GraphQL errors entry in the
tool response so the agent can adjust and retry.
Data freshness
Every execute_graphql response includes a last_ingest ISO timestamp.
Vote data refreshes hourly; legislator data refreshes daily.
Status
As of 0.4.0, the server provides the three foundational tools (execute_graphql,
list_types, describe_type) plus the curated discovery tools
(find_legislator, find_vote), per-entity detail tools (get_legislator,
get_vote_with_positions), and analysis tools (get_voting_record,
compare_voters, find_party_defectors) — the curated discovery/detail/analysis
set is now complete. The remaining most_agreeing_pairs and bill/committee
tools are post-v0.4: the bill/committee tools await GovQL data population, and
most_agreeing_pairs awaits a server-side cross-party ranking aggregate — see
design.md.
Links
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file govql_mcp_server-0.4.0.tar.gz.
File metadata
- Download URL: govql_mcp_server-0.4.0.tar.gz
- Upload date:
- Size: 91.3 kB
- Tags: Source
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/6.1.0 CPython/3.13.12
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
f675ab87cc9f1c30cdf68006d08dcd1905c2585baff933253cb59b62746801cc
|
|
| MD5 |
0e004759a6753d3f058cb1da38f31c14
|
|
| BLAKE2b-256 |
23c5c90c1f4041165ff1eb657a4a931a3ac4b608f4597487c2a7506c74dabbc5
|
Provenance
The following attestation bundles were made for govql_mcp_server-0.4.0.tar.gz:
Publisher:
mcp-server-release.yml on govql/govql
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
govql_mcp_server-0.4.0.tar.gz -
Subject digest:
f675ab87cc9f1c30cdf68006d08dcd1905c2585baff933253cb59b62746801cc - Sigstore transparency entry: 2191967806
- Sigstore integration time:
-
Permalink:
govql/govql@20c041f540d3a963a064f524c57dc758cbcb72d2 -
Branch / Tag:
refs/tags/govql-mcp-server-v0.4.0 - Owner: https://github.com/govql
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
mcp-server-release.yml@20c041f540d3a963a064f524c57dc758cbcb72d2 -
Trigger Event:
push
-
Statement type:
File details
Details for the file govql_mcp_server-0.4.0-py3-none-any.whl.
File metadata
- Download URL: govql_mcp_server-0.4.0-py3-none-any.whl
- Upload date:
- Size: 29.3 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/6.1.0 CPython/3.13.12
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
eec5f07ebd942db4456750f64996f7ae21f685d0e89542b61e1fe6223ce0ed46
|
|
| MD5 |
e08a9476f68ab64f41df7723d2e37d05
|
|
| BLAKE2b-256 |
d74a0f597aaa82add5688086b517f5117684e5d9c70ebe41be3053e00930c85c
|
Provenance
The following attestation bundles were made for govql_mcp_server-0.4.0-py3-none-any.whl:
Publisher:
mcp-server-release.yml on govql/govql
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
govql_mcp_server-0.4.0-py3-none-any.whl -
Subject digest:
eec5f07ebd942db4456750f64996f7ae21f685d0e89542b61e1fe6223ce0ed46 - Sigstore transparency entry: 2191967854
- Sigstore integration time:
-
Permalink:
govql/govql@20c041f540d3a963a064f524c57dc758cbcb72d2 -
Branch / Tag:
refs/tags/govql-mcp-server-v0.4.0 - Owner: https://github.com/govql
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
mcp-server-release.yml@20c041f540d3a963a064f524c57dc758cbcb72d2 -
Trigger Event:
push
-
Statement type: