Model Context Protocol

Congressional Record MCP

Connect AI assistants to structured, primary-source congressional data with a clear tool surface and consistent filters.

Overview

The Congressional Record MCP gives AI assistants direct access to structured U.S. Congressional Record data — dates, topics, statements, and full-text search — through four tools with consistent parameters and typed responses.

Authentication

The MCP server uses Clerk OAuth for user authentication. An account is required. Once signed in, you can generate an API key from your Account page for manual clients, or use OAuth directly for connector-based clients (like Claude).

Manual clients (API key)

For MCP clients that support direct Bearer token auth, generate an API key from your Account and pass it as:

Header
Authorization: Bearer YOUR_API_KEY

Connectors (OAuth)

For tools like Claude that use OAuth-based connectors, you will be prompted to sign in and authorize access. No API key copy/paste is required.

Privacy note. We do not store your email address in our database. Account identity is managed by Clerk.

Claude Connector Setup

This is the fastest way to use the Congressional Record MCP with Claude. You add a custom connector once, sign in, and then toggle it on in any chat.

Account required. During setup you will be prompted to sign in (Clerk OAuth) and authorize the connector.

Step 1 — Open Connector Settings

In a new Claude chat, click +, then go to ConnectorsManage connectors.

Claude chat menu showing +, then Connectors, then Manage connectors
Opening Connectors from a new chat.

Step 2 — Add A Custom Connector

Click Add custom connector at the bottom. Enter a name (e.g. Second Congress MCP) and set the URL to https://mcp.secondcongress.com. You do not need to enter anything in Advanced settings. Click Add.

Claude settings Connectors page showing a custom connector and an Add custom connector button
In Claude settings, go to Connectors and click Add custom connector.
Add custom connector dialog with name field and URL field set to https://mcp.secondcongress.com
Set the name and URL. Leave Advanced settings blank.

Step 3 — Confirm It Appears In Your Custom Connectors

You should now see Second Congress MCP in your list of custom connectors.

Claude settings Connectors page showing Second Congress MCP under custom connectors
Once added, it shows up under Custom.

Step 4 (Optional) — Configure Tool Permissions

Click Configure next to the connector to adjust tool permissions.

Connector settings page showing tool permissions for Second Congress MCP
Optional: change when Claude is allowed to use each tool.

Step 5 — Toggle It On In Chats

In any chat, click +Connectors, and confirm the connector is toggled on.

Claude chat + menu showing Second Congress MCP toggled on under Connectors
Turn it on per-chat from the + menu.

If Claude prompts you to sign in and authorize access, complete the OAuth flow and then return to the chat.

Quickstart

Step Action
1 Sign in and generate an API key from your Account page (manual clients only).
2 Point your MCP client at https://mcp.secondcongress.com (or https://mcp.secondcongress.com/mcp) and authenticate (OAuth for connectors, API key for manual clients).
3 Start calling tools: list_dates, list_topics, get_statements, search_statements.

Tools

Tool Purpose Endpoint
list_datesDiscover dates with available congressional data/api/v1/dates
list_topicsList topics discussed on a given date or time range/api/v1/topics
get_statementsRetrieve statements for a specific topic/api/v1/statements
search_statementsKeyword or semantic search across all statements/api/v1/search

Shared Filters

These filter names are the same across every tool. All are optional unless noted otherwise in a specific tool's constraints.

Filter Type Description
chamberstring"House", "Senate", or "Extensions of Remarks"
statestringTwo-letter state code, e.g. "CA", "TX"
member_idstringUnique member identifier
yearintegerCalendar year, e.g. 2025
congress_numberintegerCongress session number, e.g. 119

Validation Rules

Certain tools require at least one scope parameter to keep queries fast and results meaningful:

Tool Requirement
list_topics At least one of date, year, or congress_number is required.
get_statements At least one of topic_id or topic_title is required.
get_statements If using topic_title without date, you must also provide year or congress_number.
search_statements query is always required.

Invalid calls return a structured error with a detail field explaining what's missing.

Examples

list_dates — Find available dates

Tool Call
{
  "name": "list_dates",
  "arguments": {}
}
Response
[
  { "date": "2025-03-15" },
  { "date": "2025-03-14" },
  { "date": "2025-03-13" },
  { "date": "2025-03-12" }
]
Tool Call — scoped to Senate in 2025
{
  "name": "list_dates",
  "arguments": {
    "chamber": "Senate",
    "year": 2025
  }
}

list_topics — Browse topics on a date

Tool Call
{
  "name": "list_topics",
  "arguments": {
    "date": "2025-03-15"
  }
}
Response
[
  {
    "topic_id": "a1b2c3d4-5678-9abc-def0-123456789abc",
    "topic_title": "PROVIDING FOR CONSIDERATION OF H.R. 1234",
    "date": "2025-03-15",
    "chamber": "House",
    "statement_count": 8
  },
  {
    "topic_id": "b2c3d4e5-6789-abcd-ef01-23456789abcd",
    "topic_title": "NATIONAL DEFENSE AUTHORIZATION ACT",
    "date": "2025-03-15",
    "chamber": "Senate",
    "statement_count": 14
  }
]
Tool Call — House topics for a full year
{
  "name": "list_topics",
  "arguments": {
    "year": 2025,
    "chamber": "House"
  }
}

get_statements — Retrieve statements for a topic

Tool Call — by topic ID
{
  "name": "get_statements",
  "arguments": {
    "topic_id": "a1b2c3d4-5678-9abc-def0-123456789abc",
    "limit": 20
  }
}
Response
{
  "items": [
    {
      "id": "f1e2d3c4-9876-5432-abcd-fedcba987654",
      "name": "Rep. Maria Torres",
      "chamber": "House",
      "date": "2025-03-15",
      "title": "PROVIDING FOR CONSIDERATION OF H.R. 1234",
      "topic_group_id": "a1b2c3d4-5678-9abc-def0-123456789abc",
      "text": "Mr. Speaker, I rise today to speak on the importance of...",
      "word_count": 342,
      "audio_url": null,
      "video_clip_url": null
    },
    {
      "id": "e2d3c4b5-8765-4321-bcde-edcba9876543",
      "name": "Rep. James Chen",
      "chamber": "House",
      "date": "2025-03-15",
      "title": "PROVIDING FOR CONSIDERATION OF H.R. 1234",
      "topic_group_id": "a1b2c3d4-5678-9abc-def0-123456789abc",
      "text": "I thank the gentlelady for yielding. This legislation...",
      "word_count": 518,
      "audio_url": null,
      "video_clip_url": null
    }
  ],
  "total_count": 8,
  "next_offset": 20
}
Tool Call — by topic title + date, with media
{
  "name": "get_statements",
  "arguments": {
    "topic_title": "PROVIDING FOR CONSIDERATION OF H.R. 1234",
    "date": "2025-03-15",
    "include_media": true
  }
}
Tool Call — by topic title + year (no date)
{
  "name": "get_statements",
  "arguments": {
    "topic_title": "NATIONAL DEFENSE AUTHORIZATION ACT",
    "year": 2025,
    "chamber": "Senate",
    "limit": 50
  }
}

search_statements — Keyword search

Tool Call
{
  "name": "search_statements",
  "arguments": {
    "query": "tariff",
    "mode": "keyword",
    "chamber": "House",
    "page_size": 20
  }
}
Response (keyword)
{
  "results": [
    {
      "id": "c4d5e6f7-1234-5678-abcd-123456789abc",
      "name": "Rep. Kevin Walsh",
      "chamber": "House",
      "date": "2025-02-20",
      "title": "TRADE AND TARIFF REFORM ACT",
      "text": "The impact of these tariffs on American manufacturing...",
      "word_count": 612,
      "political_party": "Republican",
      "state": "Ohio"
    }
  ],
  "total_count": 84,
  "page": 1,
  "page_size": 20,
  "total_pages": 5
}

search_statements — Semantic search

Tool Call
{
  "name": "search_statements",
  "arguments": {
    "query": "arguments for and against federal student loan forgiveness",
    "mode": "semantic",
    "chamber": "Senate",
    "page_size": 10
  }
}
Response (semantic)
{
  "results": [
    {
      "id": "d5e6f7a8-2345-6789-bcde-23456789abcd",
      "name": "Sen. Patricia Moore",
      "chamber": "Senate",
      "date": "2025-03-10",
      "title": "HIGHER EDUCATION AFFORDABILITY ACT",
      "text": "The question before us is whether the federal government...",
      "word_count": 891,
      "political_party": "Democrat",
      "state": "Virginia",
      "similarity": 0.87,
      "matched_chunk": "The burden of student loan debt affects over 43 million Americans. Proponents argue that forgiveness stimulates economic growth..."
    }
  ],
  "total_count": 42,
  "page": 1,
  "page_size": 10,
  "total_pages": 5
}

search_statements — Filtered by state and date range

Tool Call
{
  "name": "search_statements",
  "arguments": {
    "query": "immigration reform",
    "mode": "keyword",
    "state": "TX",
    "date_from": "2025-01-01",
    "date_to": "2025-06-30",
    "page_size": 50
  }
}

Tool Schema Reference

Full JSON Schema for each tool, for MCP client configuration:

list_dates schema
{
  "name": "list_dates",
  "description": "List dates with available Congressional Record data",
  "inputSchema": {
    "type": "object",
    "properties": {
      "chamber": { "type": "string", "enum": ["House", "Senate", "Extensions of Remarks"] },
      "state": { "type": "string", "description": "Two-letter state code" },
      "member_id": { "type": "string" },
      "year": { "type": "integer" },
      "congress_number": { "type": "integer" }
    }
  }
}
list_topics schema
{
  "name": "list_topics",
  "description": "List topics discussed in the Congressional Record",
  "inputSchema": {
    "type": "object",
    "properties": {
      "date": { "type": "string", "description": "YYYY-MM-DD" },
      "chamber": { "type": "string", "enum": ["House", "Senate", "Extensions of Remarks"] },
      "state": { "type": "string" },
      "member_id": { "type": "string" },
      "year": { "type": "integer" },
      "congress_number": { "type": "integer" },
      "include_counts": { "type": "boolean", "default": true }
    }
  }
}
get_statements schema
{
  "name": "get_statements",
  "description": "Retrieve congressional statements for a specific topic",
  "inputSchema": {
    "type": "object",
    "properties": {
      "topic_id": { "type": "string" },
      "topic_title": { "type": "string" },
      "date": { "type": "string", "description": "YYYY-MM-DD" },
      "chamber": { "type": "string", "enum": ["House", "Senate", "Extensions of Remarks"] },
      "state": { "type": "string" },
      "member_id": { "type": "string" },
      "year": { "type": "integer" },
      "congress_number": { "type": "integer" },
      "limit": { "type": "integer", "default": 50, "maximum": 1000 },
      "offset": { "type": "integer", "default": 0 },
      "include_media": { "type": "boolean", "default": false },
      "include_artifacts": { "type": "boolean", "default": false },
      "include_crec_pages": { "type": "boolean", "default": false }
    }
  }
}
search_statements schema
{
  "name": "search_statements",
  "description": "Keyword or semantic search across congressional statements",
  "inputSchema": {
    "type": "object",
    "properties": {
      "query": { "type": "string", "description": "Search query text" },
      "mode": { "type": "string", "enum": ["keyword", "semantic"], "default": "keyword" },
      "chamber": { "type": "string", "enum": ["House", "Senate", "Extensions of Remarks"] },
      "state": { "type": "string" },
      "member_id": { "type": "string" },
      "year": { "type": "integer" },
      "congress_number": { "type": "integer" },
      "date_from": { "type": "string", "description": "YYYY-MM-DD" },
      "date_to": { "type": "string", "description": "YYYY-MM-DD" },
      "search_in": { "type": "string", "enum": ["title", "statement", "both"], "default": "both" },
      "page": { "type": "integer", "default": 1 },
      "page_size": { "type": "integer", "default": 50, "maximum": 100 }
    },
    "required": ["query"]
  }
}