cdgmcp
# cdgmcp
A [Model Context Protocol](https://modelcontextprotocol.io) (MCP) server that
exposes a Congress.gov-style legislative **GraphQL API** to MCP clients (such as
VS Code, Claude Desktop, or other agents). It provides high-level tools for
querying bills, actions, committee activities and cosponsors, plus a raw
GraphQL escape hatch for advanced queries.
## Features
### Tools
| Tool | Description |
| --- | --- |
| `search_bills` | Search/list bills with filters (congress, chamber, type, title, latest action, dates, sponsor). |
| `get_bill` | Fetch a single bill's full details, with optional actions, cosponsors, committee activities, titles and text versions. |
| `search_committee_activities` | Find committee referrals/activities and their related bills. |
| `search_actions` | Search the legislative action history (e.g. "Passed House", "Became Public Law"). |
| `search_cosponsors` | Search cosponsorship records across bills. |
| `get_node` | Fetch any object directly by its Relay global `id`. |
| `graphql_query` | Run an arbitrary read-only GraphQL query (mutations rejected). |
The API is built with Hot Chocolate 16.2.0 and follows Relay conventions. The
search tools are connection-based: each returns `pageInfo.endCursor`, which you
can pass back as the `after` argument to fetch the next page.
### Resources
| URI | Description |
| --- | --- |
| `cdg://schema` | The live GraphQL schema (SDL). |
| `cdg://guide` | Data model and usage guide. |
| `cdg://endpoint` | The configured GraphQL endpoint. |
## Example questions it can answer
- What bills have been recently introduced in the House or Senate?
- What bills have passed the House or Senate and became law recently?
- What bills have been referred to the Commerce Committee recently?
- Of the bills referred to the Agriculture Committee, which cosponsors recur
across them?
## Configuration
The GraphQL endpoint defaults to `http://dotnet10-dev:5208/graphql/`. Override
it with the `CDG_GRAPHQL_ENDPOINT` environment variable.
## Build & run
```bash
npm install
npm run build
npm start # or: node dist/index.js
```
For development (no build step) use:
```bash
npm run dev # runs src/index.ts via tsx
```
## Use with VS Code
Add to your `.vscode/mcp.json` (or user `mcp.json`):
```json
{
"servers": {
"cdgmcp": {
"command": "node",
"args": ["${workspaceFolder}/cdgmcp/dist/index.js"],
"env": {
"CDG_GRAPHQL_ENDPOINT": "http://dotnet10-dev:5208/graphql/"
}
}
}
}
```
The server communicates over stdio.
This is supposed to be a standalone testing something, but I haven't seen it work.
```
HOST=0.0.0.0 npx @modelcontextprotocol/inspector node dist/index.js
```
TDQS
Scored across 7 tools
Each tool targets a distinct entity or operation: bill lookup, generic node fetch, arbitrary GraphQL queries, and searches for actions, bills, committees, and cosponsors. No two tools have overlapping purposes.
Most tools follow a clear verb_noun pattern (e.g., get_bill, search_actions), but graphql_query breaks this by using a noun_noun format. Overall naming is still consistent and predictable.
Seven tools is well-scoped for the legislative domain, covering core entities (bills, actions, committees, cosponsors) plus a generic query tool. Not too many or too few.
The tool set covers bill retrieval, search, and relational data (actions, committees, cosponsors). The graphql_query tool fills any gaps, making the surface effectively complete for read-only legislative data access.