@cyanheads/congressgov-mcp-server

v0.3.21 pre-1.0

U.S. legislative data — bills, votes, members, committees — via MCP.

@cyanheads/congressgov-mcp-server
claude mcp add --transport http congressgov-mcp-server https://congressgov.caseyjhand.com/mcp
codex mcp add congressgov-mcp-server --url https://congressgov.caseyjhand.com/mcp
{
  "mcpServers": {
    "congressgov-mcp-server": {
      "url": "https://congressgov.caseyjhand.com/mcp"
    }
  }
}
gemini mcp add --transport http congressgov-mcp-server https://congressgov.caseyjhand.com/mcp
{
  "mcpServers": {
    "congressgov-mcp-server": {
      "command": "bunx",
      "args": [
        "@cyanheads/congressgov-mcp-server@latest"
      ]
    }
  }
}
{
  "mcpServers": {
    "congressgov-mcp-server": {
      "type": "http",
      "url": "https://congressgov.caseyjhand.com/mcp"
    }
  }
}
curl -X POST https://congressgov.caseyjhand.com/mcp \
  -H "Content-Type: application/json" \
  -H "MCP-Protocol-Version: 2025-11-25" \
  -d '{"jsonrpc":"2.0","id":1,"method":"initialize","params":{"protocolVersion":"2025-11-25","capabilities":{},"clientInfo":{"name":"curl","version":"1.0.0"}}}'

Tools

10

congressgov_bill_lookup

open-world

Browse and retrieve U.S. legislative bill data from Congress.gov. Discover bills by filtering on congress, bill type, and date range — there is no keyword search. Use 'list' to browse (requires congress, defaults to most-recently-updated first), 'get' for full bill detail (sponsor, policy area, CBO estimates, law info), or drill into a specific bill with 'actions', 'amendments', 'cosponsors', 'committees', 'subjects', 'summaries', 'text', 'titles', or 'related' (each requires congress + billType + billNumber).

read
invocation
{
  "jsonrpc": "2.0",
  "id": 1,
  "method": "tools/call",
  "params": {
    "name": "congressgov_bill_lookup",
    "arguments": {
      "operation": "<operation>",
      "congress": "<congress>"
    }
  }
}
schema
{
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "type": "object",
  "properties": {
    "operation": {
      "type": "string",
      "enum": [
        "list",
        "get",
        "actions",
        "amendments",
        "cosponsors",
        "committees",
        "subjects",
        "summaries",
        "text",
        "titles",
        "related"
      ],
      "description": "Which data to retrieve."
    },
    "congress": {
      "type": "integer",
      "exclusiveMinimum": 0,
      "maximum": 9007199254740991,
      "description": "Congress number (e.g., 118, 119)."
    },
    "billType": {
      "description": "Bill type code. Required for get and sub-resource operations.",
      "type": "string",
      "enum": [
        "hr",
        "s",
        "hjres",
        "sjres",
        "hconres",
        "sconres",
        "hres",
        "sres"
      ]
    },
    "billNumber": {
      "description": "Bill number. Required for get and sub-resource operations.",
      "type": "integer",
      "exclusiveMinimum": 0,
      "maximum": 9007199254740991
    },
    "fromDateTime": {
      "description": "Start of date range filter (ISO 8601). Filters by the bill's update date — when Congress.gov last touched the record — not by the bill's latest legislative action.",
      "type": "string"
    },
    "toDateTime": {
      "description": "End of date range filter (ISO 8601). Same field semantics as fromDateTime.",
      "type": "string"
    },
    "order": {
      "default": "recent",
      "description": "Sort order for 'list' (sorts by update date). 'recent' (default) is newest first; 'oldest' is ascending. Ignored by other operations.",
      "type": "string",
      "enum": [
        "recent",
        "oldest"
      ]
    },
    "limit": {
      "default": 20,
      "description": "Results per page (1-250).",
      "type": "integer",
      "minimum": 1,
      "maximum": 250
    },
    "offset": {
      "default": 0,
      "description": "Pagination offset.",
      "type": "integer",
      "minimum": 0,
      "maximum": 9007199254740991
    }
  },
  "required": [
    "operation",
    "congress",
    "order",
    "limit",
    "offset"
  ],
  "additionalProperties": false
}
view source ↗

congressgov_enacted_laws

open-world

Browse enacted public and private laws from Congress.gov by congress and law type ('pub' for public laws, 'priv' for private). 'list' filters by enactment status and law type — the discovery path 'bill_lookup' does not offer. 'get' returns the origin bill record (sponsor, actions, summaries, text), with the public/private law citation on the bill's 'laws' array (e.g. {"number":"118-2","type":"Public Law"}).

read
invocation
{
  "jsonrpc": "2.0",
  "id": 1,
  "method": "tools/call",
  "params": {
    "name": "congressgov_enacted_laws",
    "arguments": {
      "operation": "<operation>",
      "congress": "<congress>"
    }
  }
}
schema
{
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "type": "object",
  "properties": {
    "operation": {
      "type": "string",
      "enum": [
        "list",
        "get"
      ],
      "description": "Which data to retrieve."
    },
    "congress": {
      "type": "integer",
      "exclusiveMinimum": 0,
      "maximum": 9007199254740991,
      "description": "Congress number."
    },
    "lawType": {
      "description": "Law type — 'pub' (public laws, general application, most common) or 'priv' (private laws, specific individuals or entities). Required for 'get'.",
      "type": "string",
      "enum": [
        "pub",
        "priv"
      ]
    },
    "lawNumber": {
      "description": "Law number. Required for 'get'.",
      "type": "integer",
      "exclusiveMinimum": 0,
      "maximum": 9007199254740991
    },
    "limit": {
      "default": 20,
      "description": "Results per page (1-250).",
      "type": "integer",
      "minimum": 1,
      "maximum": 250
    },
    "offset": {
      "default": 0,
      "description": "Pagination offset.",
      "type": "integer",
      "minimum": 0,
      "maximum": 9007199254740991
    }
  },
  "required": [
    "operation",
    "congress",
    "limit",
    "offset"
  ],
  "additionalProperties": false
}
view source ↗

congressgov_member_lookup

open-world

Discover congressional members and their legislative activity. No name search. For 'list', filter by stateCode (optionally with district), by congress, or by both together (e.g., 118th Congress + CA, or CA district 12 in the 118th). Add currentMember=true to restrict to currently serving members. Once you have a bioguideId, use 'get' for full profile or 'sponsored'/'cosponsored' for their legislative portfolio.

read
invocation
{
  "jsonrpc": "2.0",
  "id": 1,
  "method": "tools/call",
  "params": {
    "name": "congressgov_member_lookup",
    "arguments": {
      "operation": "<operation>"
    }
  }
}
schema
{
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "type": "object",
  "properties": {
    "operation": {
      "type": "string",
      "enum": [
        "list",
        "get",
        "sponsored",
        "cosponsored"
      ],
      "description": "Which data to retrieve."
    },
    "bioguideId": {
      "description": "Unique member identifier (e.g., 'P000197'). Required for get/sponsored/cosponsored.",
      "type": "string"
    },
    "congress": {
      "description": "Congress number to filter by.",
      "type": "integer",
      "exclusiveMinimum": 0,
      "maximum": 9007199254740991
    },
    "stateCode": {
      "description": "Two-letter state code (e.g., 'CA', 'TX').",
      "type": "string",
      "minLength": 2,
      "maxLength": 2
    },
    "district": {
      "description": "Congressional district number. Requires stateCode. Use 0 for at-large.",
      "type": "integer",
      "minimum": 0,
      "maximum": 9007199254740991
    },
    "currentMember": {
      "description": "Filter to currently serving members. Omit to include both current and former members.",
      "type": "boolean"
    },
    "limit": {
      "default": 20,
      "description": "Results per page (1-250).",
      "type": "integer",
      "minimum": 1,
      "maximum": 250
    },
    "offset": {
      "default": 0,
      "description": "Pagination offset.",
      "type": "integer",
      "minimum": 0,
      "maximum": 9007199254740991
    }
  },
  "required": [
    "operation",
    "limit",
    "offset"
  ],
  "additionalProperties": false
}
view source ↗

congressgov_committee_lookup

open-world

Browse congressional committees and their legislation, reports, and nominations. Committee codes follow the pattern chamber-prefix (h/s/j) + abbreviation + number — use 'list' to discover codes, then 'get' or drill into 'bills', 'reports', or 'nominations' ('nominations' is Senate-only). 'get' and sub-resources only need committeeCode (chamber is inferred from the prefix); pass chamber explicitly to override. The 'bills' sub-resource defaults to 'recent' order (newest update-date first); pass order='oldest' for ascending update-date order. Upstream omits bill titles from the 'bills' sub-resource — rows carry only {congress, billType, billNumber, actionDate, relationshipType, url}; chain 'congressgov_bill_lookup get' per row to retrieve titles and policy area.

read
invocation
{
  "jsonrpc": "2.0",
  "id": 1,
  "method": "tools/call",
  "params": {
    "name": "congressgov_committee_lookup",
    "arguments": {
      "operation": "<operation>"
    }
  }
}
schema
{
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "type": "object",
  "properties": {
    "operation": {
      "type": "string",
      "enum": [
        "list",
        "get",
        "bills",
        "reports",
        "nominations"
      ],
      "description": "Which data to retrieve."
    },
    "congress": {
      "description": "Congress number.",
      "type": "integer",
      "exclusiveMinimum": 0,
      "maximum": 9007199254740991
    },
    "chamber": {
      "description": "Chamber filter for 'list', or override for 'get' and sub-resources (otherwise inferred from committeeCode prefix).",
      "type": "string",
      "enum": [
        "house",
        "senate",
        "joint"
      ]
    },
    "committeeCode": {
      "description": "Committee system code (e.g., 'hsju00'). Required for get and sub-resources.",
      "type": "string"
    },
    "limit": {
      "default": 20,
      "description": "Results per page (1-250).",
      "type": "integer",
      "minimum": 1,
      "maximum": 250
    },
    "offset": {
      "default": 0,
      "description": "Pagination offset.",
      "type": "integer",
      "minimum": 0,
      "maximum": 9007199254740991
    },
    "order": {
      "default": "recent",
      "description": "Sort order for the 'bills' sub-resource. 'recent' (default) returns newest update-date first; 'oldest' returns ascending update-date order. Ignored by other operations.",
      "type": "string",
      "enum": [
        "recent",
        "oldest"
      ]
    }
  },
  "required": [
    "operation",
    "limit",
    "offset",
    "order"
  ],
  "additionalProperties": false
}
view source ↗

congressgov_roll_votes

open-world

Retrieve House roll call vote data and individual member voting positions — House-only, as Senate vote data is not yet in the Congress.gov API. Use 'list' to find votes by congress and session (defaults to most-recently-updated first), 'get' for vote details (question, result, associated bill), or 'members' for how each representative voted.

read
invocation
{
  "jsonrpc": "2.0",
  "id": 1,
  "method": "tools/call",
  "params": {
    "name": "congressgov_roll_votes",
    "arguments": {
      "operation": "<operation>",
      "congress": "<congress>",
      "session": "<session>"
    }
  }
}
schema
{
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "type": "object",
  "properties": {
    "operation": {
      "type": "string",
      "enum": [
        "list",
        "get",
        "members"
      ],
      "description": "Which data to retrieve."
    },
    "congress": {
      "type": "integer",
      "exclusiveMinimum": 0,
      "maximum": 9007199254740991,
      "description": "Congress number."
    },
    "session": {
      "type": "integer",
      "minimum": 1,
      "maximum": 2,
      "description": "Session number (1 or 2). Odd years are session 1, even years session 2."
    },
    "voteNumber": {
      "description": "Roll call vote number. Required for 'get' and 'members'.",
      "type": "integer",
      "exclusiveMinimum": 0,
      "maximum": 9007199254740991
    },
    "order": {
      "default": "recent",
      "description": "Sort order for 'list', by vote update date. 'recent' (default) returns newest first; 'oldest' returns ascending. With 'recent', offset=0 always returns the strictly newest page. Ignored by 'get' and 'members'.",
      "type": "string",
      "enum": [
        "recent",
        "oldest"
      ]
    },
    "limit": {
      "default": 20,
      "description": "Results per page (1-250).",
      "type": "integer",
      "minimum": 1,
      "maximum": 250
    },
    "offset": {
      "default": 0,
      "description": "Pagination offset.",
      "type": "integer",
      "minimum": 0,
      "maximum": 9007199254740991
    }
  },
  "required": [
    "operation",
    "congress",
    "session",
    "order",
    "limit",
    "offset"
  ],
  "additionalProperties": false
}
view source ↗

congressgov_senate_nominations

open-world

Browse presidential nominations to federal positions and track the Senate confirmation process. Use 'list' to browse, 'get' for nomination detail, 'actions'/'committees'/'hearings' for confirmation pipeline data, or 'nominees' to retrieve individual appointees in a multi-nominee batch. Nominations use 'PN' (Presidential Nomination) numbering. Most nominations carry confirmation activity on the parent (e.g., PN1000); multi-part parents (e.g., PN851) carry no activity of their own — their actions, committees, hearings, and nominees live on partitioned children (PN851-1, PN851-2, …). 'get' on a parent that has no `nominees` array signals the partitioned form is needed for everything below it.

read
invocation
{
  "jsonrpc": "2.0",
  "id": 1,
  "method": "tools/call",
  "params": {
    "name": "congressgov_senate_nominations",
    "arguments": {
      "operation": "<operation>",
      "congress": "<congress>"
    }
  }
}
schema
{
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "type": "object",
  "properties": {
    "operation": {
      "type": "string",
      "enum": [
        "list",
        "get",
        "nominees",
        "actions",
        "committees",
        "hearings"
      ],
      "description": "Which data to retrieve."
    },
    "congress": {
      "type": "integer",
      "exclusiveMinimum": 0,
      "maximum": 9007199254740991,
      "description": "Congress number."
    },
    "nominationNumber": {
      "description": "Nomination number. Use the bare form (e.g. '1000') for nominations whose activity sits on the parent; use the partitioned form (e.g. '851-1') for sub-resources of a multi-part nomination. Required for detail operations.",
      "type": "string"
    },
    "ordinal": {
      "description": "Batch ordinal within a multi-nominee nomination. Each ordinal addresses a group of nominees; the 'nominees' operation returns every individual in that batch. Use 'get' first to see available ordinals on the nomination's `nominees` array (multi-part parents have no nominees array — use a partitioned form like '851-1' instead).",
      "type": "integer",
      "exclusiveMinimum": 0,
      "maximum": 9007199254740991
    },
    "limit": {
      "default": 20,
      "description": "Results per page (1-250).",
      "type": "integer",
      "minimum": 1,
      "maximum": 250
    },
    "offset": {
      "default": 0,
      "description": "Pagination offset.",
      "type": "integer",
      "minimum": 0,
      "maximum": 9007199254740991
    }
  },
  "required": [
    "operation",
    "congress",
    "limit",
    "offset"
  ],
  "additionalProperties": false
}
view source ↗

congressgov_bill_summaries

open-world

Browse recent CRS (Congressional Research Service) bill summaries — plain-language summaries of bills at each legislative stage, useful for answering "what's happening in Congress?". The fromDateTime/toDateTime filters apply to the summary's update time, not the bill's action date, so results include recently rewritten summaries of older bills. Defaults to summaries updated in the last 7 days. Each item shows both the bill's action date and the summary update date. For summaries of one specific bill, use congressgov_bill_lookup with operation='summaries' instead.

read
invocation
{
  "jsonrpc": "2.0",
  "id": 1,
  "method": "tools/call",
  "params": {
    "name": "congressgov_bill_summaries",
    "arguments": {}
  }
}
schema
{
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "type": "object",
  "properties": {
    "congress": {
      "description": "Congress number. Optional — omit for summaries across all congresses.",
      "type": "integer",
      "exclusiveMinimum": 0,
      "maximum": 9007199254740991
    },
    "billType": {
      "description": "Bill type filter. Requires 'congress'.",
      "type": "string",
      "enum": [
        "hr",
        "s",
        "hjres",
        "sjres",
        "hconres",
        "sconres",
        "hres",
        "sres"
      ]
    },
    "fromDateTime": {
      "description": "Start of date range (ISO 8601), filtered on the summary update time. Defaults to 7 days ago if neither date param is set.",
      "type": "string"
    },
    "toDateTime": {
      "description": "End of date range (ISO 8601), filtered on the summary update time. Defaults to now.",
      "type": "string"
    },
    "limit": {
      "default": 20,
      "description": "Results per page (1-250).",
      "type": "integer",
      "minimum": 1,
      "maximum": 250
    },
    "offset": {
      "default": 0,
      "description": "Pagination offset.",
      "type": "integer",
      "minimum": 0,
      "maximum": 9007199254740991
    }
  },
  "required": [
    "limit",
    "offset"
  ],
  "additionalProperties": false
}
view source ↗

congressgov_crs_reports

open-world

Browse and retrieve CRS (Congressional Research Service) reports — nonpartisan policy analyses by subject-matter experts at the Library of Congress, covering policy areas, legislative proposals, and legal questions. Report IDs use letter-number codes (e.g., R40097, RL33612, IF12345). Use 'list' to browse available reports or 'get' for full detail (authors, topics, summary, download formats).

read
invocation
{
  "jsonrpc": "2.0",
  "id": 1,
  "method": "tools/call",
  "params": {
    "name": "congressgov_crs_reports",
    "arguments": {
      "operation": "<operation>"
    }
  }
}
schema
{
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "type": "object",
  "properties": {
    "operation": {
      "type": "string",
      "enum": [
        "list",
        "get"
      ],
      "description": "Which data to retrieve."
    },
    "reportNumber": {
      "description": "CRS report ID (e.g., 'R40097'). Required for 'get'.",
      "type": "string"
    },
    "limit": {
      "default": 20,
      "description": "Results per page (1-250).",
      "type": "integer",
      "minimum": 1,
      "maximum": 250
    },
    "offset": {
      "default": 0,
      "description": "Pagination offset.",
      "type": "integer",
      "minimum": 0,
      "maximum": 9007199254740991
    }
  },
  "required": [
    "operation",
    "limit",
    "offset"
  ],
  "additionalProperties": false
}
view source ↗

congressgov_committee_reports

open-world

Browse and retrieve committee reports from Congress.gov — reports accompany legislation reported out of committee and explain the bill's purpose, committee amendments, dissenting views, and the committee vote. Report types are 'hrpt' (House), 'srpt' (Senate), and 'erpt' (Executive).

read
invocation
{
  "jsonrpc": "2.0",
  "id": 1,
  "method": "tools/call",
  "params": {
    "name": "congressgov_committee_reports",
    "arguments": {
      "operation": "<operation>",
      "congress": "<congress>"
    }
  }
}
schema
{
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "type": "object",
  "properties": {
    "operation": {
      "type": "string",
      "enum": [
        "list",
        "get",
        "text"
      ],
      "description": "Which data to retrieve."
    },
    "congress": {
      "type": "integer",
      "exclusiveMinimum": 0,
      "maximum": 9007199254740991,
      "description": "Congress number."
    },
    "reportType": {
      "description": "Report type. Required for get and text operations.",
      "type": "string",
      "enum": [
        "hrpt",
        "srpt",
        "erpt"
      ]
    },
    "reportNumber": {
      "description": "Committee report number. Required for get and text operations.",
      "type": "integer",
      "exclusiveMinimum": 0,
      "maximum": 9007199254740991
    },
    "limit": {
      "default": 20,
      "description": "Results per page (1-250).",
      "type": "integer",
      "minimum": 1,
      "maximum": 250
    },
    "offset": {
      "default": 0,
      "description": "Pagination offset.",
      "type": "integer",
      "minimum": 0,
      "maximum": 9007199254740991
    }
  },
  "required": [
    "operation",
    "congress",
    "limit",
    "offset"
  ],
  "additionalProperties": false
}
view source ↗

congressgov_daily_record

open-world

Browse the daily Congressional Record — floor speeches, debates, and legislative text published each day Congress is in session. Navigation is hierarchical: volumes (via 'list') → issues (via 'issues') → articles (via 'articles'). Use 'list' to find recent volumes, 'issues' to see what's in a volume, and 'articles' to access individual speeches and debate sections.

read
invocation
{
  "jsonrpc": "2.0",
  "id": 1,
  "method": "tools/call",
  "params": {
    "name": "congressgov_daily_record",
    "arguments": {
      "operation": "<operation>"
    }
  }
}
schema
{
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "type": "object",
  "properties": {
    "operation": {
      "type": "string",
      "enum": [
        "list",
        "issues",
        "articles"
      ],
      "description": "Which data to retrieve."
    },
    "volumeNumber": {
      "description": "Volume number. Required for 'issues' and 'articles'.",
      "type": "integer",
      "exclusiveMinimum": 0,
      "maximum": 9007199254740991
    },
    "issueNumber": {
      "description": "Issue number within a volume. Required for 'articles'.",
      "type": "integer",
      "exclusiveMinimum": 0,
      "maximum": 9007199254740991
    },
    "limit": {
      "default": 20,
      "description": "Results per page (1-250).",
      "type": "integer",
      "minimum": 1,
      "maximum": 250
    },
    "offset": {
      "default": 0,
      "description": "Pagination offset.",
      "type": "integer",
      "minimum": 0,
      "maximum": 9007199254740991
    }
  },
  "required": [
    "operation",
    "limit",
    "offset"
  ],
  "additionalProperties": false
}
view source ↗

Resources

5

Current congress number, session dates, and chamber info. Baseline context for queries.

uri congress://current mime application/json

Reference table of valid bill type codes (hr, s, hjres, etc.) with descriptions.

uri congress://bill-types mime application/json

Member profile: name, state, party, terms, leadership, office, legislation counts.

uri congress://member/{bioguideId} mime application/json

Bill detail: sponsor, status, policy area, committees, latest action.

uri congress://bill/{congress}/{billType}/{billNumber} mime application/json

Committee detail: name, chamber, subcommittees, history, legislation counts.

uri congress://committee/{committeeCode} mime application/json

Prompts

2

Structured framework for analyzing a bill: summary, sponsors, committee referrals, action timeline, related legislation, policy implications, and outlook.

  • congressrequired — Congress number (e.g., 118).
  • billTyperequired — Bill type code (e.g., hr, s).
  • billNumberrequired — Bill number (e.g., 3076).

Research framework for investigating a policy area across Congress: relevant bills, key members, committee activity, CRS reports, and floor activity.

  • topicrequired — Policy topic or area to research (e.g., "AI regulation", "immigration reform").
  • congress — Congress number to focus on. Defaults to current congress.