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?"
- "Compare Senator Sanders' voting record to Senator Murkowski's on cloture votes in the most recent 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. |
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
Version 0.1.0 ships three foundational tools: a GraphQL passthrough
(execute_graphql) and two narrow schema-discovery tools (list_types,
describe_type). Curated higher-level tools (find_legislator,
get_voting_record, compare_voters, etc.) are planned for subsequent
releases — see
design.md
for the roadmap.
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.1.0.tar.gz.
File metadata
- Download URL: govql_mcp_server-0.1.0.tar.gz
- Upload date:
- Size: 116.1 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: uv/0.11.17 {"installer":{"name":"uv","version":"0.11.17","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"macOS","version":null,"id":null,"libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":null}
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
b7d9d7f00951554ed51106c8ac4a29499839064aff43bfe19b00aa0e347f32dc
|
|
| MD5 |
ba2bf3c7088a88d101a4c43971dbe011
|
|
| BLAKE2b-256 |
ab0fdfb65d63248a17b533d29579d38e25b8eeae606f4b63e0ddaf1c04d24480
|
File details
Details for the file govql_mcp_server-0.1.0-py3-none-any.whl.
File metadata
- Download URL: govql_mcp_server-0.1.0-py3-none-any.whl
- Upload date:
- Size: 12.9 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: uv/0.11.17 {"installer":{"name":"uv","version":"0.11.17","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"macOS","version":null,"id":null,"libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":null}
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
82a7406f3aa74cf479fcda01d95144475e8d071727e96a6aef04f379bbd6b9e9
|
|
| MD5 |
e7e4dd54983d6a3050fed4dabacc0b89
|
|
| BLAKE2b-256 |
50ce40aac8a7016ccde8a90e3162a43ff5723d5d45b1ae7e3b46fd99fbffdd95
|