Congress[.]gov MCP Server
# <span>Congress.gov</span> MCP server
[](https://smithery.ai/server/@AshwinSundar/congress_gov_mcp)
Ever wonder what our (US) Congress is up to? Tired of reading the news to find out? Ask the US Congress API yourself.
Unofficial MCP server for the [Congress.gov API](https://api.congress.gov)
## Installation
### Installing via Smithery
To install congress_gov_mcp for Claude Desktop automatically via [Smithery](https://smithery.ai/server/@AshwinSundar/congress_gov_mcp):
```bash
npx -y @smithery/cli install @AshwinSundar/congress_gov_mcp --client claude
```
### Manual Installation
#### Prerequisites
1. Install [uv](https://docs.astral.sh/uv/getting-started/installation/). The easiest way on macOS and Linux is:
```
curl -LsSf https://astral.sh/uv/install.sh | sh
```
2. Get a [Congress.gov API key](https://api.congress.gov/sign-up/).
3. Install Claude Desktop, Claude Code, or another client that supports [MCP Integrations](https://modelcontextprotocol.io/clients)
#### Initial Setup
1. Complete [Prerequisites](#Prerequisites)
2. Clone this repository, and `cd` in:
```
git clone http://github.com/AshwinSundar/congress_gov_mcp
```
```
cd congress_gov_mcp
```
3. Install dependencies:
```
uv sync
```
3. Create a `.env` file from the template:
```
cp .env.template .env
```
4. Add your Congress.gov API key to the `.env` file:
><u>congress_gov_mcp/.env</u>
>```
>CONGRESS_GOV_API_KEY="your-api-key-here"
>```
### Client Configuration
#### Claude Desktop
1. Complete [Prerequisites](#Prerequisites)
2. Copy the absolute path to your `uv` installation:
```
which uv
```
2. Add the following to your Claude Desktop configuration file, inside the `mcpServers` block:
**macOS**: `~/Library/Application Support/Claude/claude_desktop_config.json`
**Windows**: `%APPDATA%\Claude\claude_desktop_config.json`
```json
{
"mcpServers": {
"congress_gov_mcp": {
"command": "/absolute_path/to/uv",
"args": [
"run",
"/absolute_path_to/congress_gov_mcp/server.py"
]
}
}
}
````
#### Claude Code
1. Complete [Prerequisites](#Prerequisites)
2. Add the following to `.mcp.json` in the directory you are running Claude Code in, inside the `mcpServers` block:
```json
{
"mcpServers": {
"congress_gov_mcp": {
"command": "uv",
"args": [
"run",
"/absolute_path_to/congress_gov_mcp/server.py"
]
}
}
}
````
## Roadmap
- [x] api.congress.gov
- [x] /bill
- [x] /{congress}
- [x] /{congress}/{billType}
- [x] /{congress}/{billType}/{billNumber}
- [ ] /actions
- [ ] /amendments
- [ ] /committees
- [ ] /cosponsors
- [ ] /relatedbills
- [ ] /subjects
- [ ] /summaries
- [ ] /text
- [ ] /titles
- [x] /amendment
- [x] /{congress}
- [x] /{congress}/{amendmentType}
- [x] /{congress}/{amendmentType}/{amendmentNumber}
- [ ] /actions
- [ ] /cosponsors
- [ ] /amendments
- [ ] /text
- [x] /summaries
- [x] /{congress}
- [x] /{congress}/{billType}
- [x] /congress
- [x] /{congress}
- [ ] /current
- [x] /member
- [x] /{bioguideId}
- [ ] /sponsored-legislation
- [ ] /cosponsored-legislation
- [x] /committee
- [x] /{systemCode}
- [ ] /bills
- [ ] /reports
- [ ] /nominations
- [ ] /meetings
- [ ] /hearings
- [ ] /house-communication
- [ ] /senate-communication
- [x] /committee-report
- [x] /{congress}
- [x] /{congress}/{reportType}
- [x] /{congress}/{reportType}/{reportNumber}
- [ ] /text
- [x] /committee-print
- [x] /{congress}
- [x] /{congress}/{printType}
- [x] /{congress}/{printType}/{printNumber}
- [ ] /text
- [x] /committee-meeting
- [x] /{congress}
- [x] /{congress}/{chamber}
- [ ] /meetings
- [x] /hearing
- [x] /{congress}
- [x] /{congress}/{chamber}
- [x] /{congress}/{chamber}/{hearingNumber}
- [x] /house-vote
- [x] /{congress}
- [x] /{congress}/{session}
- [x] /{congress}/{session}/{rollCallNumber}
- [x] /congressional-record
- [x] /{volume}
- [x] /{volume}/{pagePrefix}
- [x] /{volume}/{pagePrefix}/{pageNumber}
- [x] /daily-congressional-record
- [x] /{volume}
- [x] /{volume}/{issue}
- [x] /bound-congressional-record
- [x] /{year}
- [x] /{year}/{month}
- [x] /{year}/{month}/{day}
- [x] /house-communication
- [x] /{congress}
- [x] /{congress}/{communicationType}
- [x] /{congress}/{communicationType}/{communicationNumber}
- [x] /house-requirement
- [x] /{congress}
- [x] /{congress}/{requirementNumber}
- [x] /senate-communication
- [x] /{congress}
- [x] /{congress}/{communicationType}
- [x] /{congress}/{communicationType}/{communicationNumber}
- [x] /nomination
- [x] /{congress}
- [x] /{congress}/{nominationNumber}
- [ ] /actions
- [ ] /hearings
- [x] /crsreport
- [x] /{productCode}
- [x] /treaty
- [x] /{congress}
- [x] /{congress}/{treatyNumber}
- [ ] /actions
- [ ] /committees
TDQS
Scored across 21 tools
Each tool targets a distinct resource type within the Congress.gov domain, such as amendments, bills, committees, members, etc. The descriptions clearly differentiate the data each tool retrieves, with no overlap in purpose or functionality.
All tools follow a consistent 'get_' prefix with snake_case naming, clearly indicating retrieval operations. The pattern is uniform across all 21 tools, making them predictable and easy to understand.
With 21 tools, the count is on the higher side for a single server, but it aligns with the comprehensive scope of the Congress.gov API covering many legislative entities. It feels slightly heavy but is reasonable given the domain complexity.
The tool set provides broad coverage of legislative data types, including bills, amendments, committees, members, votes, and more. Minor gaps may exist, such as lack of update or delete operations, but this is typical for a read-only API wrapper and agents can work effectively with the provided retrieval tools.