Koskamo

congressgov-mcp-server

An open-source MCP server that provides access to U.S. legislative data from Congress.gov, including bills, votes, members, committees, amendments, enacted laws, and the Congressional Record. It supports browsing, searching, and retrieving detailed information about legislative activities and member positions.

Endpoint and access

No sign-in to connect and list tools. Individual tools may still need a vendor account, credentials, or permissions; check the documented prerequisites.

congressgov-mcp-server logo, by cyanheadsCommunity listingStreamable HTTPNo sign-inEndpoint checked 2026-11-07Published by cyanheads
MCP endpoint (Streamable HTTP)
https://congressgov.caseyjhand.com/mcp
Vendor documentation

What its tools do

12 tools, grouped by the hints the server advertises. Hints are self-declared, not verified behavior.

12 of 12 have a description · 12 of 12 declare behavior hints · 12 of 12 with parameters document them all

Checks and signals

Each line is separate evidence, not a trust score.

  • Passed Endpoint answered the live check ·
  • Availability 1 of 1 checks passed in 30 days

What you can do with it

  • Browse and retrieve U.S. legislative bill data
  • Retrieve House and Senate roll call votes
  • Find members by state or district
  • Browse committees and their legislation

Source and maintenance

Community listingRegistry 0.10.0
Maintenance checked

Protocol and capabilities

Server
congressgov-mcp-server 0.10.0
MCP protocol negotiated in check
2025-11-25
Tools
12 advertised
Resources
3 advertised
Resource templates
4 advertised
Prompts
2 advertised
Server-advertised capabilities
{
  "tools": {
    "listChanged": true
  },
  "logging": {},
  "prompts": {
    "listChanged": true
  },
  "resources": {
    "subscribe": true,
    "listChanged": true
  },
  "extensions": {
    "io.modelcontextprotocol/skills": {
      "directoryRead": true
    }
  }
}

Server-provided instructions

Untrusted server output shown for inspection. It is not Koskamo guidance and is excluded from knowledge search.

Use the congressgov_* tools to access U.S. legislative data via the Congress.gov API v3: bills, amendments, enacted laws, members, committees, roll call votes, presidential nominations, CRS reports, and the daily Congressional Record. The Congress.gov API itself has no keyword search — browse by congress number, bill/report type, date range, chamber, state, and district. An optional local FTS mirror adds congressgov_search_bills (keyword search over bill titles and summaries) when CONGRESS_MIRROR_ENABLED is set; it is off by default, and the tool is not offered at all unless that flag is set. Bills are addressed by congress + billType + billNumber (e.g. 118/hr/1234), amendments by congress + amendmentType + amendmentNumber (e.g. 118/hamdt/255), members by bioguideId, committees by chamber-prefix codes. congressgov_roll_votes serves both chambers via its 'chamber' parameter — House votes come from the Congress.gov API, Senate votes from the Senate's official LIS feed, or Voteview's published vote files when that feed can't be read.

Tools

12 advertised

congressgov_bill_lookup — Congress.gov Bill Lookup
Advertised by the server during the last successful anonymous check.
Advertised read-onlyOpen-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). 'text' lists the published versions and their format URLs; 'content' then reads one version's actual text, a bounded character window at a time. 'summaries' takes an optional versionCode selector and returns each row's text a bounded character window at a time — a row past the window carries textTotalCharacters/textTruncated/textNextOffset, and characterOffset reads on from there. An 'actions' row that records a roll call vote carries rollVote — the chamber, congress, session, and voteNumber congressgov_roll_votes takes to return that vote and each member's position. An 'amendments' row's type and number, with congress, are the amendmentType and amendmentNumber congressgov_amendment_lookup takes to return that amendment's sponsor, actions, cosponsors, and text.

congressgov_bill_lookup input schema
{
  "type": "object",
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "required": [
    "operation",
    "congress"
  ],
  "properties": {
    "limit": {
      "type": "integer",
      "default": 20,
      "maximum": 250,
      "minimum": 1,
      "description": "Results per page (1-250)."
    },
    "order": {
      "enum": [
        "recent",
        "oldest"
      ],
      "type": "string",
      "default": "recent",
      "description": "Sort order for 'list' (sorts by update date). 'recent' (default) is newest first; 'oldest' is ascending. Ignored by other operations."
    },
    "format": {
      "enum": [
        "text",
        "xml"
      ],
      "type": "string",
      "default": "text",
      "description": "Document format for 'content'. 'text' is GPO's Formatted Text — plain, pre-formatted print output, published for every document checked. 'xml' prefers United States Legislative Markup and falls back to Formatted XML; it exists on some bill text versions and on no committee report or Congressional Record article. PDF is not retrieved — read one at the format URLs 'text'/'articles' return."
    },
    "offset": {
      "type": "integer",
      "default": 0,
      "maximum": 9007199254740991,
      "minimum": 0,
      "description": "Pagination offset."
    },
    "billType": {
      "enum": [
        "hr",
        "s",
        "hjres",
        "sjres",
        "hconres",
        "sconres",
        "hres",
        "sres"
      ],
      "type": "string",
      "description": "Bill type code. Required for get and sub-resource operations."
    },
    "congress": {
      "type": "integer",
      "maximum": 9007199254740991,
      "description": "Congress number (e.g., 118, 119).",
      "exclusiveMinimum": 0
    },
    "operation": {
      "enum": [
        "list",
        "get",
        "actions",
        "amendments",
        "cosponsors",
        "committees",
        "subjects",
        "summaries",
        "text",
        "titles",
        "related",
        "content"
      ],
      "type": "string",
      "description": "Which data to retrieve."
    },
    "billNumber": {
      "anyOf": [
        {
          "type": "integer",
          "maximum": 9007199254740991,
          "description": "Positive integer form.",
          "exclusiveMinimum": 0
        },
        {
          "type": "string",
          "pattern": "^0*[1-9]\\d*$",
          "description": "Digit-string form, as list rows carry it."
        }
      ],
      "description": "Bill number. Required for get and sub-resource operations. Accepts the digit-string form list rows carry (e.g. \"9479\") as well as a number."
    },
    "toDateTime": {
      "type": "string",
      "description": "End of date range filter (ISO 8601), for 'list' only. Same field semantics as fromDateTime."
    },
    "versionCode": {
      "type": "string",
      "description": "Which summary version 'summaries' returns — the versionCode a summary row carries ('00' introduced, '49' public law). Selection runs over the bill's whole summary list, which Congress.gov publishes no filter for, and limit/offset then page the matching rows. Omit to return every version. Ignored by other operations."
    },
    "fromDateTime": {
      "type": "string",
      "description": "Start of date range filter (ISO 8601), for 'list' only. Filters by the bill's update date — when Congress.gov last touched the record — not by the bill's latest legislative action. Other operations ignore it and say so in the notice."
    },
    "characterLimit": {
      "type": "integer",
      "default": 25000,
      "maximum": 100000,
      "minimum": 1,
      "description": "Maximum characters to return (1-100000) — for the document window on 'content', and for each row's summary text on 'summaries'. Legislative documents run past a million characters and an enacted bill's summary past two hundred thousand, so either takes several windows."
    },
    "characterOffset": {
      "type": "integer",
      "default": 0,
      "maximum": 9007199254740991,
      "minimum": 0,
      "description": "First character to return, 0-based — of the document on 'content', and of every returned row's summary text on 'summaries'. Offsets are exact and are never snapped to a section or paragraph break, so feeding back the response's nextOffset (or a summary row's textNextOffset) walks the whole text with every character returned exactly once."
    },
    "textVersionIndex": {
      "type": "integer",
      "default": 0,
      "maximum": 9007199254740991,
      "minimum": 0,
      "description": "Which text version 'content' reads, 0-based against the same order 'text' returns — 0 is the most recent version. Ignored by other operations."
    }
  },
  "additionalProperties": false
}
congressgov_bill_lookup output schema
{
  "type": "object",
  "anyOf": [
    {
      "not": {
        "required": [
          "error"
        ]
      },
      "required": [
        "effectiveQuery",
        "totalCount"
      ]
    },
    {
      "required": [
        "error"
      ]
    }
  ],
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "properties": {
    "bill": {
      "type": "object",
      "properties": {},
      "description": "Dynamic upstream JSON record.",
      "additionalProperties": {}
    },
    "data": {
      "type": "array",
      "items": {
        "type": "object",
        "properties": {
          "rollVote": {
            "type": "object",
            "required": [
              "chamber",
              "congress",
              "session",
              "voteNumber"
            ],
            "properties": {
              "chamber": {
                "enum": [
                  "house",
                  "senate"
                ],
                "type": "string",
                "description": "Chamber the vote was cast in. Pass it: congressgov_roll_votes defaults to 'house', and roll call numbers are specific to one chamber."
              },
              "session": {
                "type": "integer",
                "maximum": 2,
                "minimum": 1,
                "description": "Session the vote was cast in (1 or 2); roll call numbers restart each session."
              },
              "congress": {
                "type": "integer",
                "maximum": 9007199254740991,
                "description": "Congress the vote was cast in.",
                "exclusiveMinimum": 0
              },
              "voteNumber": {
                "type": "integer",
                "maximum": 9007199254740991,
                "description": "Roll call vote number.",
                "exclusiveMinimum": 0
              }
            },
            "description": "Arguments for congressgov_roll_votes that retrieve the roll call vote this action records — its one recordedVotes entry. Absent when the action records no vote or several, and for a vote that tool has no data for: Congress.gov publishes House roll call votes from the 115th Congress (2017) onward, and the Senate publishes roll call votes from the 101st Congress (1989) onward.",
            "additionalProperties": false
          }
        },
        "description": "Upstream JSON record: a bill (`list`) or a sub-resource row. An `actions` row carries `rollVote` when it records one roll call vote congressgov_roll_votes serves.",
        "additionalProperties": {}
      },
      "description": "Result rows for `list` and the sub-resource operations."
    },
    "error": {
      "type": "object",
      "required": [
        "code",
        "message"
      ],
      "properties": {
        "code": {
          "type": "integer",
          "maximum": 9007199254740991,
          "minimum": -9007199254740991,
          "description": "JSON-RPC error code for this failure."
        },
        "data": {
          "type": "object",
          "properties": {
            "reason": {
              "type": "string",
              "examples": [
                "not_found",
                "rate_limited",
                "invalid_request",
                "api_key_rejected",
                "upstream_error",
                "upstream_timeout",
                "document_unavailable",
                "format_unavailable",
                "document_fetch_failed",
                "document_too_large",
                "offset_past_end",
                "incompatible_identity"
              ],
              "description": "Machine-readable failure mode. Declared by this tool: `not_found`: A requested bill, member, committee, report, vote, or nomination does not exist in Congress.gov. `rate_limited`: A process-local attempt budget or the shared upstream credential/IP quota was reached; upstream hourly limits vary and DEMO_KEY also has a daily quota. On a Senate vote the LIS feed could not answer, Voteview answering HTTP 429 is reported the same way. `invalid_request`: Congress.gov rejected the request as malformed — a bad date range or an identifier with an unexpected shape. `api_key_rejected`: The api.data.gov gateway rejected the server's configured CONGRESS_API_KEY (missing, invalid, disabled, unauthorized, or unverified); the gateway code is in data.upstreamCode. No change to the call's arguments can fix it. `upstream_error`: Congress.gov returned an unexpected error (5xx or another non-2xx status) or could not be reached, or a Senate vote could be read from neither the Senate LIS feed nor its Voteview fallback (before the 101st Congress there is no fallback, and there a senate.gov HTTP 403 refusal carries retryable: false). `upstream_timeout`: A Congress.gov request or a congress.gov document fetch timed out or returned an HTTP timeout response, or the call's upstream requests could not finish inside its 50-second budget. `document_unavailable`: The 'content' selection resolves to no retrievable document — the text version or article index is past the end of the list, the record publishes no formats at all, or Congress.gov does not hold the file its own metadata names. `format_unavailable`: The document exists but publishes nothing in a format this server reads — some text versions and committee reports ship PDF only, no Congressional Record article publishes XML, and the oldest CRS reports publish a PDF but no HTML. `document_fetch_failed`: www.congress.gov did not return a readable document — a non-2xx status, a network failure, an empty body, or a content type that is not text or XML. `document_too_large`: The document is larger than the byte ceiling this server retrieves, so no character window can be served from it. `offset_past_end`: characterOffset is at or beyond the last character of every text the call would window — the document on 'content', or every returned row's summary text on 'summaries' — so the window would be empty. `incompatible_identity`: A list operation carries an entity identifier that only a detail operation uses. Other values are possible when a failure originates below the handler."
            },
            "recovery": {
              "type": "object",
              "required": [
                "hint"
              ],
              "properties": {
                "hint": {
                  "type": "string"
                }
              },
              "description": "Actionable next step for the caller.",
              "additionalProperties": {}
            },
            "retryable": {
              "type": "boolean",
              "description": "Whether retrying may succeed."
            }
          },
          "additionalProperties": {}
        },
        "message": {
          "type": "string",
          "description": "Human-readable description of what went wrong."
        }
      },
      "description": "Present when the call failed. Absent on success.",
      "additionalProperties": {}
    },
    "notice": {
      "type": "string",
      "description": "Guidance when results are empty, a page is past the end, or a caveat applies."
    },
    "content": {
      "type": "object",
      "properties": {},
      "description": "Dynamic upstream JSON record.",
      "additionalProperties": {}
    },
    "pagination": {
      "type": "object",
      "required": [
        "count"
      ],
      "properties": {
        "count": {
          "type": "integer",
          "maximum": 9007199254740991,
          "minimum": 0,
          "description": "Total result count across all pages."
        },
        "nextOffset": {
          "anyOf": [
            {
              "type": "integer",
              "maximum": 9007199254740991,
              "minimum": 0
            },
            {
              "type": "null"
            }
          ],
          "description": "Offset to pass for the next page, or null when there are no more pages."
        }
      },
      "description": "Pagination metadata: total count and next offset.",
      "additionalProperties": false
    },
    "totalCount": {
      "type": "number",
      "description": "Total results across all pages."
    },
    "effectiveQuery": {
      "type": "string",
      "description": "The browse scope and applied filters."
    }
  },
  "additionalProperties": {}
}
congressgov_bill_lookup annotations
{
  "readOnlyHint": true,
  "openWorldHint": true,
  "idempotentHint": true
}
congressgov_amendment_lookup — Congress.gov Amendment Lookup
Advertised by the server during the last successful anonymous check.
Advertised read-onlyOpen-world

Browse and retrieve U.S. congressional amendments from Congress.gov — House (hamdt), Senate (samdt), and Senate unprinted (suamdt, 97th and 98th Congresses only). An amendment is addressed by congress + amendmentType + amendmentNumber, the identifiers other tools return: congressgov_bill_lookup 'amendments' rows (type and number), House votes from congressgov_roll_votes (amendmentType and amendmentNumber), and amendment rows from congressgov_member_lookup 'sponsored'/'cosponsored' (amendmentNumber, with the type in the row's url); either letter case is accepted. Use 'list' to browse one congress, optionally one amendmentType (newest update first; fromDateTime/toDateTime filter on update date), 'get' for the record (sponsor, purpose, description, the bill or amendment it amends, latest action), or drill in with 'actions', 'cosponsors', 'amendments' (amendments to this amendment), or 'text'. 'text' lists the published text versions — the Congressional Record pages that print the amendment, often alongside the surrounding floor proceedings — and 'content' reads one version's HTML as plain text, a bounded character window at a time. On that page a Senate amendment is printed under 'SA {number}' or 'Amendment No. {number}'; a House amendment is not printed under its HAMDT number — find it at the Record page its 'actions' rows cite ('text: CR H3582-3583' is the '[[Page H3582]]' marker) or under 'Amendment No. N Offered by', where N is the number the description from 'get' gives it ('An amendment numbered 64 printed in House Report 118-142'). An 'actions' row that records a roll call vote carries rollVote — the chamber, congress, session, and voteNumber congressgov_roll_votes takes to return that vote and each member's position.

congressgov_amendment_lookup input schema
{
  "type": "object",
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "required": [
    "operation",
    "congress"
  ],
  "properties": {
    "limit": {
      "type": "integer",
      "default": 20,
      "maximum": 250,
      "minimum": 1,
      "description": "Results per page (1-250)."
    },
    "order": {
      "enum": [
        "recent",
        "oldest"
      ],
      "type": "string",
      "default": "recent",
      "description": "Sort order for 'list' (sorts by update date). 'recent' (default) is newest first; 'oldest' is ascending. Ignored by other operations."
    },
    "offset": {
      "type": "integer",
      "default": 0,
      "maximum": 9007199254740991,
      "minimum": 0,
      "description": "Pagination offset."
    },
    "congress": {
      "type": "integer",
      "maximum": 9007199254740991,
      "description": "Congress number (e.g., 118, 119).",
      "exclusiveMinimum": 0
    },
    "operation": {
      "enum": [
        "list",
        "get",
        "actions",
        "cosponsors",
        "amendments",
        "text",
        "content"
      ],
      "type": "string",
      "description": "Which data to retrieve."
    },
    "toDateTime": {
      "type": "string",
      "description": "End of the update-date window for 'list' (ISO 8601). Same field semantics as fromDateTime."
    },
    "fromDateTime": {
      "type": "string",
      "description": "Start of the update-date window for 'list' (ISO 8601, e.g. 2026-10-01T00:00:00Z): when Congress.gov last touched the record, not when the amendment was offered. Other operations ignore it and say so in the notice."
    },
    "amendmentType": {
      "enum": [
        "hamdt",
        "samdt",
        "suamdt"
      ],
      "type": "string",
      "description": "Amendment type: 'hamdt' (House), 'samdt' (Senate), or 'suamdt' (Senate unprinted, 97th and 98th Congresses only). Optional on 'list'; required for every other operation."
    },
    "characterLimit": {
      "type": "integer",
      "default": 25000,
      "maximum": 100000,
      "minimum": 1,
      "description": "Maximum characters to return for 'content' (1-100000). Legislative documents run past a million characters, so a full bill takes several windows."
    },
    "amendmentNumber": {
      "anyOf": [
        {
          "type": "integer",
          "maximum": 9007199254740991,
          "description": "Positive integer form.",
          "exclusiveMinimum": 0
        },
        {
          "type": "string",
          "pattern": "^0*[1-9]\\d*$",
          "description": "Digit-string form, as list rows carry it."
        }
      ],
      "description": "Amendment number. Required for every operation but 'list', which refuses it. Accepts the digit-string form rows carry (e.g. \"255\") as well as a number."
    },
    "characterOffset": {
      "type": "integer",
      "default": 0,
      "maximum": 9007199254740991,
      "minimum": 0,
      "description": "First character to return for 'content', 0-based. Offsets are exact and are never snapped to a section or paragraph break, so feeding the response's nextOffset back walks the whole document with every character returned exactly once."
    },
    "textVersionIndex": {
      "type": "integer",
      "default": 0,
      "maximum": 9007199254740991,
      "minimum": 0,
      "description": "Which text version 'content' reads, 0-based against the order 'text' returns. Ignored by other operations."
    }
  },
  "additionalProperties": false
}
congressgov_amendment_lookup output schema
{
  "type": "object",
  "anyOf": [
    {
      "not": {
        "required": [
          "error"
        ]
      },
      "required": [
        "effectiveQuery",
        "totalCount"
      ]
    },
    {
      "required": [
        "error"
      ]
    }
  ],
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "properties": {
    "data": {
      "type": "array",
      "items": {
        "type": "object",
        "properties": {
          "rollVote": {
            "type": "object",
            "required": [
              "chamber",
              "congress",
              "session",
              "voteNumber"
            ],
            "properties": {
              "chamber": {
                "enum": [
                  "house",
                  "senate"
                ],
                "type": "string",
                "description": "Chamber the vote was cast in. Pass it: congressgov_roll_votes defaults to 'house', and roll call numbers are specific to one chamber."
              },
              "session": {
                "type": "integer",
                "maximum": 2,
                "minimum": 1,
                "description": "Session the vote was cast in (1 or 2); roll call numbers restart each session."
              },
              "congress": {
                "type": "integer",
                "maximum": 9007199254740991,
                "description": "Congress the vote was cast in.",
                "exclusiveMinimum": 0
              },
              "voteNumber": {
                "type": "integer",
                "maximum": 9007199254740991,
                "description": "Roll call vote number.",
                "exclusiveMinimum": 0
              }
            },
            "description": "Arguments for congressgov_roll_votes that retrieve the roll call vote this action records — its one recordedVotes entry. Absent when the action records no vote or several, and for a vote that tool has no data for: Congress.gov publishes House roll call votes from the 115th Congress (2017) onward, and the Senate publishes roll call votes from the 101st Congress (1989) onward.",
            "additionalProperties": false
          }
        },
        "description": "Upstream JSON record: an amendment (`list`, `amendments`) or a sub-resource row. An `actions` row carries `rollVote` when it records one roll call vote congressgov_roll_votes serves.",
        "additionalProperties": {}
      },
      "description": "Result rows for `list` and the sub-resource operations."
    },
    "error": {
      "type": "object",
      "required": [
        "code",
        "message"
      ],
      "properties": {
        "code": {
          "type": "integer",
          "maximum": 9007199254740991,
          "minimum": -9007199254740991,
          "description": "JSON-RPC error code for this failure."
        },
        "data": {
          "type": "object",
          "properties": {
            "reason": {
              "type": "string",
              "examples": [
                "not_found",
                "rate_limited",
                "invalid_request",
                "api_key_rejected",
                "upstream_error",
                "upstream_timeout",
                "document_unavailable",
                "format_unavailable",
                "document_fetch_failed",
                "document_too_large",
                "offset_past_end",
                "incompatible_identity"
              ],
              "description": "Machine-readable failure mode. Declared by this tool: `not_found`: A requested bill, member, committee, report, vote, or nomination does not exist in Congress.gov. `rate_limited`: A process-local attempt budget or the shared upstream credential/IP quota was reached; upstream hourly limits vary and DEMO_KEY also has a daily quota. On a Senate vote the LIS feed could not answer, Voteview answering HTTP 429 is reported the same way. `invalid_request`: Congress.gov rejected the request as malformed — a bad date range or an identifier with an unexpected shape. `api_key_rejected`: The api.data.gov gateway rejected the server's configured CONGRESS_API_KEY (missing, invalid, disabled, unauthorized, or unverified); the gateway code is in data.upstreamCode. No change to the call's arguments can fix it. `upstream_error`: Congress.gov returned an unexpected error (5xx or another non-2xx status) or could not be reached, or a Senate vote could be read from neither the Senate LIS feed nor its Voteview fallback (before the 101st Congress there is no fallback, and there a senate.gov HTTP 403 refusal carries retryable: false). `upstream_timeout`: A Congress.gov request or a congress.gov document fetch timed out or returned an HTTP timeout response, or the call's upstream requests could not finish inside its 50-second budget. `document_unavailable`: The 'content' selection resolves to no retrievable document — the text version or article index is past the end of the list, the record publishes no formats at all, or Congress.gov does not hold the file its own metadata names. `format_unavailable`: The document exists but publishes nothing in a format this server reads — some text versions and committee reports ship PDF only, no Congressional Record article publishes XML, and the oldest CRS reports publish a PDF but no HTML. `document_fetch_failed`: www.congress.gov did not return a readable document — a non-2xx status, a network failure, an empty body, or a content type that is not text or XML. `document_too_large`: The document is larger than the byte ceiling this server retrieves, so no character window can be served from it. `offset_past_end`: characterOffset is at or beyond the last character of every text the call would window — the document on 'content', or every returned row's summary text on 'summaries' — so the window would be empty. `incompatible_identity`: A list operation carries an entity identifier that only a detail operation uses. Other values are possible when a failure originates below the handler."
            },
            "recovery": {
              "type": "object",
              "required": [
                "hint"
              ],
              "properties": {
                "hint": {
                  "type": "string"
                }
              },
              "description": "Actionable next step for the caller.",
              "additionalProperties": {}
            },
            "retryable": {
              "type": "boolean",
              "description": "Whether retrying may succeed."
            }
          },
          "additionalProperties": {}
        },
        "message": {
          "type": "string",
          "description": "Human-readable description of what went wrong."
        }
      },
      "description": "Present when the call failed. Absent on success.",
      "additionalProperties": {}
    },
    "notice": {
      "type": "string",
      "description": "Guidance when results are empty, a page is past the end, or a caveat applies."
    },
    "content": {
      "type": "object",
      "properties": {},
      "description": "Dynamic upstream JSON record.",
      "additionalProperties": {}
    },
    "amendment": {
      "type": "object",
      "properties": {},
      "description": "Dynamic upstream JSON record.",
      "additionalProperties": {}
    },
    "pagination": {
      "type": "object",
      "required": [
        "count"
      ],
      "properties": {
        "count": {
          "type": "integer",
          "maximum": 9007199254740991,
          "minimum": 0,
          "description": "Total result count across all pages."
        },
        "nextOffset": {
          "anyOf": [
            {
              "type": "integer",
              "maximum": 9007199254740991,
              "minimum": 0
            },
            {
              "type": "null"
            }
          ],
          "description": "Offset to pass for the next page, or null when there are no more pages."
        }
      },
      "description": "Pagination metadata: total count and next offset.",
      "additionalProperties": false
    },
    "totalCount": {
      "type": "number",
      "description": "Total results across all pages."
    },
    "effectiveQuery": {
      "type": "string",
      "description": "The browse scope and applied filters."
    }
  },
  "additionalProperties": {}
}
congressgov_amendment_lookup annotations
{
  "readOnlyHint": true,
  "openWorldHint": true,
  "idempotentHint": true
}
congressgov_enacted_laws — Congress.gov Enacted Laws
Advertised by the server during the last successful anonymous check.
Advertised read-onlyOpen-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"}).

congressgov_enacted_laws input schema
{
  "type": "object",
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "required": [
    "operation",
    "congress"
  ],
  "properties": {
    "limit": {
      "type": "integer",
      "default": 20,
      "maximum": 250,
      "minimum": 1,
      "description": "Results per page (1-250)."
    },
    "offset": {
      "type": "integer",
      "default": 0,
      "maximum": 9007199254740991,
      "minimum": 0,
      "description": "Pagination offset."
    },
    "lawType": {
      "enum": [
        "pub",
        "priv"
      ],
      "type": "string",
      "description": "Law type — 'pub' (public laws, general application, most common) or 'priv' (private laws, specific individuals or entities). Required for 'get'."
    },
    "congress": {
      "type": "integer",
      "maximum": 9007199254740991,
      "description": "Congress number.",
      "exclusiveMinimum": 0
    },
    "lawNumber": {
      "anyOf": [
        {
          "type": "integer",
          "maximum": 9007199254740991,
          "description": "Positive integer form (e.g. 90).",
          "exclusiveMinimum": 0
        },
        {
          "type": "string",
          "pattern": "^(?:\\d+-)?0*[1-9]\\d*$",
          "description": "String form — the law number (\"90\") or the full citation (\"118-90\")."
        }
      ],
      "description": "Law number, as carried by a 'list' row's `laws[].number` — either the full citation ('118-90', rendered as 'Public Law 118-90') or the portion after the hyphen ('90'); the prefix is the congress and must match `congress`. Not the row's own `number`, which is the origin bill. Required for 'get'; 'list' refuses it."
    },
    "operation": {
      "enum": [
        "list",
        "get"
      ],
      "type": "string",
      "description": "Which data to retrieve."
    }
  },
  "additionalProperties": false
}
congressgov_enacted_laws output schema
{
  "type": "object",
  "anyOf": [
    {
      "not": {
        "required": [
          "error"
        ]
      },
      "required": [
        "effectiveQuery",
        "totalCount"
      ]
    },
    {
      "required": [
        "error"
      ]
    }
  ],
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "properties": {
    "law": {
      "type": "object",
      "properties": {},
      "description": "Dynamic upstream JSON record.",
      "additionalProperties": {}
    },
    "data": {
      "type": "array",
      "items": {
        "type": "object",
        "properties": {},
        "description": "Upstream JSON record. Per-tool item shape is rendered in the markdown body.",
        "additionalProperties": {}
      },
      "description": "Result rows. Per-tool item shape is rendered in the markdown body."
    },
    "error": {
      "type": "object",
      "required": [
        "code",
        "message"
      ],
      "properties": {
        "code": {
          "type": "integer",
          "maximum": 9007199254740991,
          "minimum": -9007199254740991,
          "description": "JSON-RPC error code for this failure."
        },
        "data": {
          "type": "object",
          "properties": {
            "reason": {
              "type": "string",
              "examples": [
                "not_found",
                "rate_limited",
                "invalid_request",
                "api_key_rejected",
                "upstream_error",
                "upstream_timeout",
                "incompatible_identity"
              ],
              "description": "Machine-readable failure mode. Declared by this tool: `not_found`: A requested bill, member, committee, report, vote, or nomination does not exist in Congress.gov. `rate_limited`: A process-local attempt budget or the shared upstream credential/IP quota was reached; upstream hourly limits vary and DEMO_KEY also has a daily quota. On a Senate vote the LIS feed could not answer, Voteview answering HTTP 429 is reported the same way. `invalid_request`: Congress.gov rejected the request as malformed — a bad date range or an identifier with an unexpected shape. `api_key_rejected`: The api.data.gov gateway rejected the server's configured CONGRESS_API_KEY (missing, invalid, disabled, unauthorized, or unverified); the gateway code is in data.upstreamCode. No change to the call's arguments can fix it. `upstream_error`: Congress.gov returned an unexpected error (5xx or another non-2xx status) or could not be reached, or a Senate vote could be read from neither the Senate LIS feed nor its Voteview fallback (before the 101st Congress there is no fallback, and there a senate.gov HTTP 403 refusal carries retryable: false). `upstream_timeout`: A Congress.gov request or a congress.gov document fetch timed out or returned an HTTP timeout response, or the call's upstream requests could not finish inside its 50-second budget. `incompatible_identity`: A list operation carries an entity identifier that only a detail operation uses. Other values are possible when a failure originates below the handler."
            },
            "recovery": {
              "type": "object",
              "required": [
                "hint"
              ],
              "properties": {
                "hint": {
                  "type": "string"
                }
              },
              "description": "Actionable next step for the caller.",
              "additionalProperties": {}
            },
            "retryable": {
              "type": "boolean",
              "description": "Whether retrying may succeed."
            }
          },
          "additionalProperties": {}
        },
        "message": {
          "type": "string",
          "description": "Human-readable description of what went wrong."
        }
      },
      "description": "Present when the call failed. Absent on success.",
      "additionalProperties": {}
    },
    "notice": {
      "type": "string",
      "description": "Guidance when results are empty, a page is past the end, or a caveat applies."
    },
    "pagination": {
      "type": "object",
      "required": [
        "count"
      ],
      "properties": {
        "count": {
          "type": "integer",
          "maximum": 9007199254740991,
          "minimum": 0,
          "description": "Total result count across all pages."
        },
        "nextOffset": {
          "anyOf": [
            {
              "type": "integer",
              "maximum": 9007199254740991,
              "minimum": 0
            },
            {
              "type": "null"
            }
          ],
          "description": "Offset to pass for the next page, or null when there are no more pages."
        }
      },
      "description": "Pagination metadata: total count and next offset.",
      "additionalProperties": false
    },
    "totalCount": {
      "type": "number",
      "description": "Total results across all pages."
    },
    "effectiveQuery": {
      "type": "string",
      "description": "The browse scope and applied filters."
    }
  },
  "additionalProperties": {}
}
congressgov_enacted_laws annotations
{
  "readOnlyHint": true,
  "openWorldHint": true,
  "idempotentHint": true
}
congressgov_member_lookup — Congress.gov Member Lookup
Advertised by the server during the last successful anonymous check.
Advertised read-onlyOpen-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. A 'sponsored'/'cosponsored' row that is an amendment carries amendmentNumber, with its amendment type in the row's url (/amendment/{congress}/{type}/{number}); pass congress, amendmentType, and amendmentNumber to congressgov_amendment_lookup for its sponsor, actions, and text.

congressgov_member_lookup input schema
{
  "type": "object",
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "required": [
    "operation"
  ],
  "properties": {
    "limit": {
      "type": "integer",
      "default": 20,
      "maximum": 250,
      "minimum": 1,
      "description": "Results per page (1-250)."
    },
    "offset": {
      "type": "integer",
      "default": 0,
      "maximum": 9007199254740991,
      "minimum": 0,
      "description": "Pagination offset."
    },
    "congress": {
      "type": "integer",
      "maximum": 9007199254740991,
      "description": "Congress number to filter by, for 'list' only — Congress.gov offers no congress filter on a member's sponsored or cosponsored legislation.",
      "exclusiveMinimum": 0
    },
    "district": {
      "type": "integer",
      "maximum": 9007199254740991,
      "minimum": 0,
      "description": "Congressional district number, for 'list' only. Requires stateCode. Use 0 for at-large."
    },
    "operation": {
      "enum": [
        "list",
        "get",
        "sponsored",
        "cosponsored"
      ],
      "type": "string",
      "description": "Which data to retrieve."
    },
    "stateCode": {
      "type": "string",
      "pattern": "^[A-Za-z]{2}$",
      "description": "Two-letter state code (e.g., 'CA', 'TX'), for 'list' only."
    },
    "bioguideId": {
      "type": "string",
      "pattern": "^[A-Za-z]\\d{6}$",
      "description": "Unique member identifier (e.g., 'P000197'). Required for get/sponsored/cosponsored; 'list' refuses it."
    },
    "currentMember": {
      "type": "boolean",
      "description": "Filter to currently serving members, for 'list' only. Omit to include both current and former members."
    }
  },
  "additionalProperties": false
}
congressgov_member_lookup output schema
{
  "type": "object",
  "anyOf": [
    {
      "not": {
        "required": [
          "error"
        ]
      },
      "required": [
        "effectiveQuery",
        "totalCount"
      ]
    },
    {
      "required": [
        "error"
      ]
    }
  ],
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "properties": {
    "data": {
      "type": "array",
      "items": {
        "type": "object",
        "properties": {},
        "description": "Upstream JSON record. Per-tool item shape is rendered in the markdown body.",
        "additionalProperties": {}
      },
      "description": "Result rows. Per-tool item shape is rendered in the markdown body."
    },
    "error": {
      "type": "object",
      "required": [
        "code",
        "message"
      ],
      "properties": {
        "code": {
          "type": "integer",
          "maximum": 9007199254740991,
          "minimum": -9007199254740991,
          "description": "JSON-RPC error code for this failure."
        },
        "data": {
          "type": "object",
          "properties": {
            "reason": {
              "type": "string",
              "examples": [
                "not_found",
                "rate_limited",
                "invalid_request",
                "api_key_rejected",
                "upstream_error",
                "upstream_timeout",
                "incompatible_identity"
              ],
              "description": "Machine-readable failure mode. Declared by this tool: `not_found`: A requested bill, member, committee, report, vote, or nomination does not exist in Congress.gov. `rate_limited`: A process-local attempt budget or the shared upstream credential/IP quota was reached; upstream hourly limits vary and DEMO_KEY also has a daily quota. On a Senate vote the LIS feed could not answer, Voteview answering HTTP 429 is reported the same way. `invalid_request`: Congress.gov rejected the request as malformed — a bad date range or an identifier with an unexpected shape. `api_key_rejected`: The api.data.gov gateway rejected the server's configured CONGRESS_API_KEY (missing, invalid, disabled, unauthorized, or unverified); the gateway code is in data.upstreamCode. No change to the call's arguments can fix it. `upstream_error`: Congress.gov returned an unexpected error (5xx or another non-2xx status) or could not be reached, or a Senate vote could be read from neither the Senate LIS feed nor its Voteview fallback (before the 101st Congress there is no fallback, and there a senate.gov HTTP 403 refusal carries retryable: false). `upstream_timeout`: A Congress.gov request or a congress.gov document fetch timed out or returned an HTTP timeout response, or the call's upstream requests could not finish inside its 50-second budget. `incompatible_identity`: A list operation carries an entity identifier that only a detail operation uses. Other values are possible when a failure originates below the handler."
            },
            "recovery": {
              "type": "object",
              "required": [
                "hint"
              ],
              "properties": {
                "hint": {
                  "type": "string"
                }
              },
              "description": "Actionable next step for the caller.",
              "additionalProperties": {}
            },
            "retryable": {
              "type": "boolean",
              "description": "Whether retrying may succeed."
            }
          },
          "additionalProperties": {}
        },
        "message": {
          "type": "string",
          "description": "Human-readable description of what went wrong."
        }
      },
      "description": "Present when the call failed. Absent on success.",
      "additionalProperties": {}
    },
    "member": {
      "type": "object",
      "properties": {},
      "description": "Dynamic upstream JSON record.",
      "additionalProperties": {}
    },
    "notice": {
      "type": "string",
      "description": "Guidance when results are empty, a page is past the end, or a caveat applies."
    },
    "pagination": {
      "type": "object",
      "required": [
        "count"
      ],
      "properties": {
        "count": {
          "type": "integer",
          "maximum": 9007199254740991,
          "minimum": 0,
          "description": "Total result count across all pages."
        },
        "nextOffset": {
          "anyOf": [
            {
              "type": "integer",
              "maximum": 9007199254740991,
              "minimum": 0
            },
            {
              "type": "null"
            }
          ],
          "description": "Offset to pass for the next page, or null when there are no more pages."
        }
      },
      "description": "Pagination metadata: total count and next offset.",
      "additionalProperties": false
    },
    "totalCount": {
      "type": "number",
      "description": "Total results across all pages."
    },
    "effectiveQuery": {
      "type": "string",
      "description": "The browse scope and applied filters."
    }
  },
  "additionalProperties": {}
}
congressgov_member_lookup annotations
{
  "readOnlyHint": true,
  "openWorldHint": true,
  "idempotentHint": true
}
congressgov_committee_lookup — Congress.gov Committee Lookup
Advertised by the server during the last successful anonymous check.
Advertised read-onlyOpen-world

Browse congressional committees and their legislation, reports, and nominations. Committee codes follow the pattern chamber-prefix (h/s/j) + abbreviation + 2-digit number — use 'list' (with optional 'filter' for name→code resolution) 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, or read from the committee roster when the prefix's chamber does not hold the code); 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.

congressgov_committee_lookup input schema
{
  "type": "object",
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "required": [
    "operation"
  ],
  "properties": {
    "limit": {
      "type": "integer",
      "default": 20,
      "maximum": 250,
      "minimum": 1,
      "description": "Results per page (1-250)."
    },
    "order": {
      "enum": [
        "recent",
        "oldest"
      ],
      "type": "string",
      "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."
    },
    "filter": {
      "type": "string",
      "description": "Filter committee-list results by name (e.g., 'transportation', 'armed services'), for 'list' only; fuzzy-matched rows are labeled approximate."
    },
    "offset": {
      "type": "integer",
      "default": 0,
      "maximum": 9007199254740991,
      "minimum": 0,
      "description": "Pagination offset."
    },
    "chamber": {
      "enum": [
        "house",
        "senate",
        "joint"
      ],
      "type": "string",
      "description": "Chamber filter for 'list'. For 'get' and sub-resources, the committee's chamber, inferred when omitted; set it to resolve a committee name given as committeeCode among that chamber's committees only."
    },
    "congress": {
      "type": "integer",
      "maximum": 9007199254740991,
      "description": "Congress number, for 'list' only — Congress.gov offers no congress filter on a committee's bills, reports, or nominations.",
      "exclusiveMinimum": 0
    },
    "operation": {
      "enum": [
        "list",
        "get",
        "bills",
        "reports",
        "nominations"
      ],
      "type": "string",
      "description": "Which data to retrieve."
    },
    "committeeCode": {
      "type": "string",
      "pattern": "[A-Za-z0-9]",
      "description": "Committee system code, e.g. 'hsju00'. Required for 'get' and sub-resources; 'list' refuses it. Codes are letters + a 2-digit suffix and are matched case-insensitively. Any other value with a letter or digit is treated as a committee name and resolved automatically — single-word names ('Judiciary') included — or use operation:'list' with filter to browse."
    }
  },
  "additionalProperties": false
}
congressgov_committee_lookup output schema
{
  "type": "object",
  "anyOf": [
    {
      "not": {
        "required": [
          "error"
        ]
      },
      "required": [
        "effectiveQuery",
        "totalCount"
      ]
    },
    {
      "required": [
        "error"
      ]
    }
  ],
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "properties": {
    "data": {
      "type": "array",
      "items": {
        "type": "object",
        "properties": {},
        "description": "Upstream JSON record. Per-tool item shape is rendered in the markdown body.",
        "additionalProperties": {}
      },
      "description": "Result rows. Per-tool item shape is rendered in the markdown body."
    },
    "error": {
      "type": "object",
      "required": [
        "code",
        "message"
      ],
      "properties": {
        "code": {
          "type": "integer",
          "maximum": 9007199254740991,
          "minimum": -9007199254740991,
          "description": "JSON-RPC error code for this failure."
        },
        "data": {
          "type": "object",
          "properties": {
            "reason": {
              "type": "string",
              "examples": [
                "not_found",
                "rate_limited",
                "invalid_request",
                "api_key_rejected",
                "upstream_error",
                "upstream_timeout",
                "incompatible_identity"
              ],
              "description": "Machine-readable failure mode. Declared by this tool: `not_found`: A requested bill, member, committee, report, vote, or nomination does not exist in Congress.gov. `rate_limited`: A process-local attempt budget or the shared upstream credential/IP quota was reached; upstream hourly limits vary and DEMO_KEY also has a daily quota. On a Senate vote the LIS feed could not answer, Voteview answering HTTP 429 is reported the same way. `invalid_request`: Congress.gov rejected the request as malformed — a bad date range or an identifier with an unexpected shape. `api_key_rejected`: The api.data.gov gateway rejected the server's configured CONGRESS_API_KEY (missing, invalid, disabled, unauthorized, or unverified); the gateway code is in data.upstreamCode. No change to the call's arguments can fix it. `upstream_error`: Congress.gov returned an unexpected error (5xx or another non-2xx status) or could not be reached, or a Senate vote could be read from neither the Senate LIS feed nor its Voteview fallback (before the 101st Congress there is no fallback, and there a senate.gov HTTP 403 refusal carries retryable: false). `upstream_timeout`: A Congress.gov request or a congress.gov document fetch timed out or returned an HTTP timeout response, or the call's upstream requests could not finish inside its 50-second budget. `incompatible_identity`: A list operation carries an entity identifier that only a detail operation uses. Other values are possible when a failure originates below the handler."
            },
            "recovery": {
              "type": "object",
              "required": [
                "hint"
              ],
              "properties": {
                "hint": {
                  "type": "string"
                }
              },
              "description": "Actionable next step for the caller.",
              "additionalProperties": {}
            },
            "retryable": {
              "type": "boolean",
              "description": "Whether retrying may succeed."
            }
          },
          "additionalProperties": {}
        },
        "message": {
          "type": "string",
          "description": "Human-readable description of what went wrong."
        }
      },
      "description": "Present when the call failed. Absent on success.",
      "additionalProperties": {}
    },
    "notice": {
      "type": "string",
      "description": "Guidance when results are empty, a page is past the end, or a caveat applies."
    },
    "committee": {
      "type": "object",
      "properties": {},
      "description": "Dynamic upstream JSON record.",
      "additionalProperties": {}
    },
    "pagination": {
      "type": "object",
      "required": [
        "count"
      ],
      "properties": {
        "count": {
          "type": "integer",
          "maximum": 9007199254740991,
          "minimum": 0,
          "description": "Total result count across all pages."
        },
        "nextOffset": {
          "anyOf": [
            {
              "type": "integer",
              "maximum": 9007199254740991,
              "minimum": 0
            },
            {
              "type": "null"
            }
          ],
          "description": "Offset to pass for the next page, or null when there are no more pages."
        }
      },
      "description": "Pagination metadata: total count and next offset.",
      "additionalProperties": false
    },
    "totalCount": {
      "type": "number",
      "description": "Total results across all pages."
    },
    "effectiveQuery": {
      "type": "string",
      "description": "The browse scope and applied filters."
    }
  },
  "additionalProperties": {}
}
congressgov_committee_lookup annotations
{
  "readOnlyHint": true,
  "openWorldHint": true,
  "idempotentHint": true
}
congressgov_roll_votes — Congress.gov Roll Votes
Advertised by the server during the last successful anonymous check.
Advertised read-onlyOpen-world

Retrieve U.S. congressional roll call votes and individual member voting positions for either chamber. Set 'chamber' to 'house' (default, from the Congress.gov API — Congress.gov publishes House roll call votes from the 115th Congress (2017) onward) or 'senate' (from the Senate's official LIS feed — the Senate publishes roll call votes from the 101st Congress (1989) onward). When the LIS feed can't be read (senate.gov refuses automated requests), Senate calls are answered from Voteview's published vote files instead, and 'source' names Voteview and its latest vote; a later vote is not found until Voteview adds it. Use 'list' to find votes by congress and session (newest first by default), 'get' for vote details (question, result, tallies, party breakdown, associated bill/nomination/amendment), or 'members' for how each member voted. 'members' narrows the roster by bioguideId (House only), stateCode, and party before paging, so one member's or one delegation's position takes one call. A bill action that records a roll call carries rollVote in congressgov_bill_lookup 'actions' — pass its chamber, congress, session, and voteNumber here. A House vote on an amendment carries amendmentType and amendmentNumber; pass them, with congress, to congressgov_amendment_lookup for the amendment's sponsor, actions, cosponsors, and text.

congressgov_roll_votes input schema
{
  "type": "object",
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "required": [
    "operation",
    "congress",
    "session"
  ],
  "properties": {
    "limit": {
      "type": "integer",
      "default": 20,
      "maximum": 250,
      "minimum": 1,
      "description": "Results per page (1-250)."
    },
    "order": {
      "enum": [
        "recent",
        "oldest"
      ],
      "type": "string",
      "default": "recent",
      "description": "Sort order for 'list'. 'recent' (default) returns newest first; 'oldest' returns ascending. House sorts by vote update date (with 'recent', offset=0 always returns the strictly newest page); Senate sorts by roll call number. Ignored by 'get' and 'members'."
    },
    "party": {
      "anyOf": [
        {
          "type": "string",
          "const": ""
        },
        {
          "type": "string",
          "pattern": "^[A-Za-z]{1,2}$",
          "description": "A one- or two-letter party code."
        }
      ],
      "description": "For 'members': return only the positions of one party, by the code the roster carries (e.g. 'D', 'R', 'I'), in any letter case. Combined filters must all match; they apply before limit and offset, and pagination.count counts the matching positions. Ignored by 'list' and 'get'."
    },
    "offset": {
      "type": "integer",
      "default": 0,
      "maximum": 9007199254740991,
      "minimum": 0,
      "description": "Pagination offset."
    },
    "chamber": {
      "enum": [
        "house",
        "senate"
      ],
      "type": "string",
      "default": "house",
      "description": "Chamber whose votes to query, in any letter case. 'house' (default) draws from the Congress.gov API; 'senate' draws from the Senate's official LIS roll-call feed, or from Voteview's published vote files when that feed can't be read. Roll call numbers reset each session and are specific to one chamber."
    },
    "session": {
      "type": "integer",
      "maximum": 2,
      "minimum": 1,
      "description": "Session number (1 or 2). A congress's first year is session 1 and its second year session 2; a second session can run into January 1–3 of the following year (the 116th Congress's second session voted on 2021-01-01)."
    },
    "congress": {
      "type": "integer",
      "maximum": 9007199254740991,
      "description": "Congress number.",
      "exclusiveMinimum": 0
    },
    "operation": {
      "enum": [
        "list",
        "get",
        "members"
      ],
      "type": "string",
      "description": "Which data to retrieve."
    },
    "stateCode": {
      "anyOf": [
        {
          "type": "string",
          "const": ""
        },
        {
          "type": "string",
          "pattern": "^[A-Za-z]{2}$",
          "description": "A two-letter state or territory code."
        }
      ],
      "description": "For 'members': return only the positions of one state's or territory's members, by two-letter code (e.g. 'WA'), in any letter case. Ignored by 'list' and 'get'."
    },
    "bioguideId": {
      "anyOf": [
        {
          "type": "string",
          "const": ""
        },
        {
          "type": "string",
          "pattern": "^[A-Za-z]\\d{6}$",
          "description": "A bioguide ID: one letter and six digits."
        }
      ],
      "description": "For 'members' on a House vote: return only the position of the member with this bioguide ID (e.g. 'J000298', as congressgov_member_lookup returns it), in any letter case. The Senate's LIS feed identifies senators by its own IDs, so a Senate 'members' call rejects it — filter by stateCode instead. Ignored by 'list' and 'get'."
    },
    "voteNumber": {
      "type": "integer",
      "maximum": 9007199254740991,
      "description": "Roll call vote number. Required for 'get' and 'members'.",
      "exclusiveMinimum": 0
    }
  },
  "additionalProperties": false
}
congressgov_roll_votes output schema
{
  "type": "object",
  "anyOf": [
    {
      "not": {
        "required": [
          "error"
        ]
      },
      "required": [
        "effectiveQuery",
        "totalCount"
      ]
    },
    {
      "required": [
        "error"
      ]
    }
  ],
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "properties": {
    "data": {
      "type": "array",
      "items": {
        "type": "object",
        "properties": {},
        "description": "Upstream JSON record. Per-tool item shape is rendered in the markdown body.",
        "additionalProperties": {}
      },
      "description": "Result rows. Per-tool item shape is rendered in the markdown body."
    },
    "vote": {
      "type": "object",
      "properties": {},
      "description": "Dynamic upstream JSON record.",
      "additionalProperties": {}
    },
    "error": {
      "type": "object",
      "required": [
        "code",
        "message"
      ],
      "properties": {
        "code": {
          "type": "integer",
          "maximum": 9007199254740991,
          "minimum": -9007199254740991,
          "description": "JSON-RPC error code for this failure."
        },
        "data": {
          "type": "object",
          "properties": {
            "reason": {
              "type": "string",
              "examples": [
                "not_found",
                "rate_limited",
                "invalid_request",
                "api_key_rejected",
                "upstream_error",
                "upstream_timeout",
                "incompatible_identity",
                "unsupported_filter"
              ],
              "description": "Machine-readable failure mode. Declared by this tool: `not_found`: A requested bill, member, committee, report, vote, or nomination does not exist in Congress.gov. `rate_limited`: A process-local attempt budget or the shared upstream credential/IP quota was reached; upstream hourly limits vary and DEMO_KEY also has a daily quota. On a Senate vote the LIS feed could not answer, Voteview answering HTTP 429 is reported the same way. `invalid_request`: Congress.gov rejected the request as malformed — a bad date range or an identifier with an unexpected shape. `api_key_rejected`: The api.data.gov gateway rejected the server's configured CONGRESS_API_KEY (missing, invalid, disabled, unauthorized, or unverified); the gateway code is in data.upstreamCode. No change to the call's arguments can fix it. `upstream_error`: Congress.gov returned an unexpected error (5xx or another non-2xx status) or could not be reached, or a Senate vote could be read from neither the Senate LIS feed nor its Voteview fallback (before the 101st Congress there is no fallback, and there a senate.gov HTTP 403 refusal carries retryable: false). `upstream_timeout`: A Congress.gov request or a congress.gov document fetch timed out or returned an HTTP timeout response, or the call's upstream requests could not finish inside its 50-second budget. `incompatible_identity`: A list operation carries an entity identifier that only a detail operation uses. `unsupported_filter`: A Senate 'members' call filters by bioguideId — the Senate's LIS roll call feed identifies senators by its own member IDs, never by bioguide ID. Other values are possible when a failure originates below the handler."
            },
            "recovery": {
              "type": "object",
              "required": [
                "hint"
              ],
              "properties": {
                "hint": {
                  "type": "string"
                }
              },
              "description": "Actionable next step for the caller.",
              "additionalProperties": {}
            },
            "retryable": {
              "type": "boolean",
              "description": "Whether retrying may succeed."
            }
          },
          "additionalProperties": {}
        },
        "message": {
          "type": "string",
          "description": "Human-readable description of what went wrong."
        }
      },
      "description": "Present when the call failed. Absent on success.",
      "additionalProperties": {}
    },
    "notice": {
      "type": "string",
      "description": "Guidance when results are empty, a page is past the end, or a caveat applies."
    },
    "source": {
      "type": "object",
      "required": [
        "name",
        "url",
        "congress",
        "latestVote",
        "citation"
      ],
      "properties": {
        "url": {
          "type": "string",
          "description": "Voteview's home page."
        },
        "name": {
          "type": "string",
          "const": "Voteview",
          "description": "The source that answered: Voteview (UCLA)."
        },
        "citation": {
          "type": "string",
          "description": "The citation Voteview asks its users to give."
        },
        "congress": {
          "type": "integer",
          "maximum": 9007199254740991,
          "description": "Congress the latest vote belongs to.",
          "exclusiveMinimum": 0
        },
        "latestVote": {
          "type": "object",
          "required": [
            "session",
            "voteNumber",
            "date"
          ],
          "properties": {
            "date": {
              "type": "string",
              "description": "Date of the latest vote, YYYY-MM-DD."
            },
            "session": {
              "type": "integer",
              "maximum": 9007199254740991,
              "minimum": -9007199254740991,
              "description": "Session of the latest vote."
            },
            "voteNumber": {
              "type": "integer",
              "maximum": 9007199254740991,
              "minimum": -9007199254740991,
              "description": "Roll call number of the latest vote."
            }
          },
          "description": "Voteview's newest Senate roll call for this congress. Voteview adds votes after the Senate takes them, so a later vote is not found until it does.",
          "additionalProperties": false
        }
      },
      "description": "Present only on Senate calls the Senate's LIS feed could not answer (senate.gov refusing automated requests, or the feed unavailable), which Voteview's published vote files answered instead. Absent when the LIS feed answered.",
      "additionalProperties": false
    },
    "pagination": {
      "type": "object",
      "required": [
        "count"
      ],
      "properties": {
        "count": {
          "type": "integer",
          "maximum": 9007199254740991,
          "minimum": 0,
          "description": "Total result count across all pages."
        },
        "nextOffset": {
          "anyOf": [
            {
              "type": "integer",
              "maximum": 9007199254740991,
              "minimum": 0
            },
            {
              "type": "null"
            }
          ],
          "description": "Offset to pass for the next page, or null when there are no more pages."
        }
      },
      "description": "Pagination metadata: total count and next offset.",
      "additionalProperties": false
    },
    "totalCount": {
      "type": "number",
      "description": "Total results across all pages."
    },
    "memberFilter": {
      "type": "object",
      "required": [
        "rosterCount"
      ],
      "properties": {
        "party": {
          "type": "string",
          "description": "The party filter, uppercased."
        },
        "stateCode": {
          "type": "string",
          "description": "The stateCode filter, uppercased."
        },
        "bioguideId": {
          "type": "string",
          "description": "The bioguideId filter, uppercased."
        },
        "rosterCount": {
          "type": "integer",
          "maximum": 9007199254740991,
          "minimum": 0,
          "description": "Member positions the vote records before filtering. pagination.count counts the ones the filters match."
        }
      },
      "description": "The filters a 'members' call applied to the vote's roster — a position is returned only when it matches every one. Absent when the call supplied none.",
      "additionalProperties": false
    },
    "effectiveQuery": {
      "type": "string",
      "description": "The browse scope and applied filters."
    }
  },
  "additionalProperties": {}
}
congressgov_roll_votes annotations
{
  "readOnlyHint": true,
  "openWorldHint": true,
  "idempotentHint": true
}
congressgov_senate_nominations — Congress.gov Senate Nominations
Advertised by the server during the last successful anonymous check.
Advertised read-onlyOpen-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. nominationNumber takes either form bare or as its citation (1000 or PN1000, 730-2 or PN730-2). 'list' runs newest update first and takes fromDateTime/toDateTime, which filter on the date Congress.gov last updated a nomination record — not its received date or latest action date. An action that cites its own Senate record vote — an `actions` row, or `latestAction` on `list` and `get` — carries `rollVote`, the congressgov_roll_votes arguments for that vote.

congressgov_senate_nominations input schema
{
  "type": "object",
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "required": [
    "operation",
    "congress"
  ],
  "properties": {
    "limit": {
      "type": "integer",
      "default": 20,
      "maximum": 250,
      "minimum": 1,
      "description": "Results per page (1-250)."
    },
    "offset": {
      "type": "integer",
      "default": 0,
      "maximum": 9007199254740991,
      "minimum": 0,
      "description": "Pagination offset."
    },
    "ordinal": {
      "type": "integer",
      "maximum": 9007199254740991,
      "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).",
      "exclusiveMinimum": 0
    },
    "congress": {
      "type": "integer",
      "maximum": 9007199254740991,
      "description": "Congress number.",
      "exclusiveMinimum": 0
    },
    "operation": {
      "enum": [
        "list",
        "get",
        "nominees",
        "actions",
        "committees",
        "hearings"
      ],
      "type": "string",
      "description": "Which data to retrieve."
    },
    "toDateTime": {
      "type": "string",
      "description": "End of the update-date window for 'list' (ISO 8601). Same field semantics as fromDateTime. Ignored by other operations."
    },
    "fromDateTime": {
      "type": "string",
      "description": "Start of the update-date window for 'list' (ISO 8601, e.g. 2026-10-01T00:00:00Z): the date Congress.gov last updated a nomination record, not its received or latest action date. Ignored by other operations."
    },
    "nominationNumber": {
      "type": "string",
      "pattern": "^\\s*(?:(?:[Pp][Nn])?\\d+(?:-\\d+)?\\s*)?$",
      "description": "Nomination number, bare or as the citation list rows carry (e.g. 'PN730-2'). Use the parent 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. Case and surrounding whitespace are ignored. Required for detail operations."
    }
  },
  "additionalProperties": false
}
congressgov_senate_nominations output schema
{
  "type": "object",
  "anyOf": [
    {
      "not": {
        "required": [
          "error"
        ]
      },
      "required": [
        "effectiveQuery",
        "totalCount"
      ]
    },
    {
      "required": [
        "error"
      ]
    }
  ],
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "properties": {
    "data": {
      "type": "array",
      "items": {
        "type": "object",
        "properties": {
          "rollVote": {
            "type": "object",
            "required": [
              "chamber",
              "congress",
              "session",
              "voteNumber"
            ],
            "properties": {
              "chamber": {
                "type": "string",
                "const": "senate",
                "description": "Always 'senate'. Pass it: congressgov_roll_votes defaults to 'house', whose vote with the same number is a different vote."
              },
              "session": {
                "type": "integer",
                "maximum": 2,
                "minimum": 1,
                "description": "Session the vote was cast in, from the action date: the congress's first year is session 1; its second year, and January 1–3 of the year after, session 2."
              },
              "congress": {
                "type": "integer",
                "maximum": 9007199254740991,
                "description": "Congress the vote was cast in.",
                "exclusiveMinimum": 0
              },
              "voteNumber": {
                "type": "integer",
                "maximum": 9007199254740991,
                "description": "Senate roll call number the action cites.",
                "exclusiveMinimum": 0
              }
            },
            "description": "Arguments for congressgov_roll_votes that retrieve the Senate roll call vote this action cites as its own. Absent when the action cites no vote of its own (a back-reference such as \"(Record Vote No. 318)\" names another action's vote), and for votes before the feed starts — the Senate publishes roll call votes from the 101st Congress (1989) onward.",
            "additionalProperties": false
          },
          "latestAction": {
            "anyOf": [
              {
                "type": "object",
                "properties": {
                  "rollVote": {
                    "type": "object",
                    "required": [
                      "chamber",
                      "congress",
                      "session",
                      "voteNumber"
                    ],
                    "properties": {
                      "chamber": {
                        "type": "string",
                        "const": "senate",
                        "description": "Always 'senate'. Pass it: congressgov_roll_votes defaults to 'house', whose vote with the same number is a different vote."
                      },
                      "session": {
                        "type": "integer",
                        "maximum": 2,
                        "minimum": 1,
                        "description": "Session the vote was cast in, from the action date: the congress's first year is session 1; its second year, and January 1–3 of the year after, session 2."
                      },
                      "congress": {
                        "type": "integer",
                        "maximum": 9007199254740991,
                        "description": "Congress the vote was cast in.",
                        "exclusiveMinimum": 0
                      },
                      "voteNumber": {
                        "type": "integer",
                        "maximum": 9007199254740991,
                        "description": "Senate roll call number the action cites.",
                        "exclusiveMinimum": 0
                      }
                    },
                    "description": "Arguments for congressgov_roll_votes that retrieve the Senate roll call vote this action cites as its own. Absent when the action cites no vote of its own (a back-reference such as \"(Record Vote No. 318)\" names another action's vote), and for votes before the feed starts — the Senate publishes roll call votes from the 101st Congress (1989) onward.",
                    "additionalProperties": false
                  }
                },
                "additionalProperties": {}
              },
              {
                "type": "null"
              }
            ],
            "description": "Most recent action (`actionDate`, `text`), with `rollVote` when its text cites its own Senate record vote. Null or absent on a multi-part parent (e.g. PN730)."
          }
        },
        "description": "Upstream JSON record: a nomination (`list`), an action (`actions`), a committee, a hearing, or a nominee. A `list` row's `latestAction` and an `actions` row carry `rollVote` when they cite their own Senate record vote.",
        "additionalProperties": {}
      },
      "description": "Result rows for `list` and the sub-resource operations."
    },
    "error": {
      "type": "object",
      "required": [
        "code",
        "message"
      ],
      "properties": {
        "code": {
          "type": "integer",
          "maximum": 9007199254740991,
          "minimum": -9007199254740991,
          "description": "JSON-RPC error code for this failure."
        },
        "data": {
          "type": "object",
          "properties": {
            "reason": {
              "type": "string",
              "examples": [
                "not_found",
                "rate_limited",
                "invalid_request",
                "api_key_rejected",
                "upstream_error",
                "upstream_timeout",
                "incompatible_identity"
              ],
              "description": "Machine-readable failure mode. Declared by this tool: `not_found`: A requested bill, member, committee, report, vote, or nomination does not exist in Congress.gov. `rate_limited`: A process-local attempt budget or the shared upstream credential/IP quota was reached; upstream hourly limits vary and DEMO_KEY also has a daily quota. On a Senate vote the LIS feed could not answer, Voteview answering HTTP 429 is reported the same way. `invalid_request`: Congress.gov rejected the request as malformed — a bad date range or an identifier with an unexpected shape. `api_key_rejected`: The api.data.gov gateway rejected the server's configured CONGRESS_API_KEY (missing, invalid, disabled, unauthorized, or unverified); the gateway code is in data.upstreamCode. No change to the call's arguments can fix it. `upstream_error`: Congress.gov returned an unexpected error (5xx or another non-2xx status) or could not be reached, or a Senate vote could be read from neither the Senate LIS feed nor its Voteview fallback (before the 101st Congress there is no fallback, and there a senate.gov HTTP 403 refusal carries retryable: false). `upstream_timeout`: A Congress.gov request or a congress.gov document fetch timed out or returned an HTTP timeout response, or the call's upstream requests could not finish inside its 50-second budget. `incompatible_identity`: A list operation carries an entity identifier that only a detail operation uses. Other values are possible when a failure originates below the handler."
            },
            "recovery": {
              "type": "object",
              "required": [
                "hint"
              ],
              "properties": {
                "hint": {
                  "type": "string"
                }
              },
              "description": "Actionable next step for the caller.",
              "additionalProperties": {}
            },
            "retryable": {
              "type": "boolean",
              "description": "Whether retrying may succeed."
            }
          },
          "additionalProperties": {}
        },
        "message": {
          "type": "string",
          "description": "Human-readable description of what went wrong."
        }
      },
      "description": "Present when the call failed. Absent on success.",
      "additionalProperties": {}
    },
    "notice": {
      "type": "string",
      "description": "Guidance when results are empty, a page is past the end, or a caveat applies."
    },
    "nomination": {
      "type": "object",
      "properties": {
        "latestAction": {
          "anyOf": [
            {
              "type": "object",
              "properties": {
                "rollVote": {
                  "type": "object",
                  "required": [
                    "chamber",
                    "congress",
                    "session",
                    "voteNumber"
                  ],
                  "properties": {
                    "chamber": {
                      "type": "string",
                      "const": "senate",
                      "description": "Always 'senate'. Pass it: congressgov_roll_votes defaults to 'house', whose vote with the same number is a different vote."
                    },
                    "session": {
                      "type": "integer",
                      "maximum": 2,
                      "minimum": 1,
                      "description": "Session the vote was cast in, from the action date: the congress's first year is session 1; its second year, and January 1–3 of the year after, session 2."
                    },
                    "congress": {
                      "type": "integer",
                      "maximum": 9007199254740991,
                      "description": "Congress the vote was cast in.",
                      "exclusiveMinimum": 0
                    },
                    "voteNumber": {
                      "type": "integer",
                      "maximum": 9007199254740991,
                      "description": "Senate roll call number the action cites.",
                      "exclusiveMinimum": 0
                    }
                  },
                  "description": "Arguments for congressgov_roll_votes that retrieve the Senate roll call vote this action cites as its own. Absent when the action cites no vote of its own (a back-reference such as \"(Record Vote No. 318)\" names another action's vote), and for votes before the feed starts — the Senate publishes roll call votes from the 101st Congress (1989) onward.",
                  "additionalProperties": false
                }
              },
              "additionalProperties": {}
            },
            {
              "type": "null"
            }
          ],
          "description": "Most recent action (`actionDate`, `text`), with `rollVote` when its text cites its own Senate record vote. Null or absent on a multi-part parent (e.g. PN730)."
        }
      },
      "description": "Nomination record for `get` (description, dates, nominees array, sub-resource counts); absent for `list` and sub-resources.",
      "additionalProperties": {}
    },
    "pagination": {
      "type": "object",
      "required": [
        "count"
      ],
      "properties": {
        "count": {
          "type": "integer",
          "maximum": 9007199254740991,
          "minimum": 0,
          "description": "Total result count across all pages."
        },
        "nextOffset": {
          "anyOf": [
            {
              "type": "integer",
              "maximum": 9007199254740991,
              "minimum": 0
            },
            {
              "type": "null"
            }
          ],
          "description": "Offset to pass for the next page, or null when there are no more pages."
        }
      },
      "description": "Pagination metadata: total count and next offset.",
      "additionalProperties": false
    },
    "totalCount": {
      "type": "number",
      "description": "Total results across all pages."
    },
    "effectiveQuery": {
      "type": "string",
      "description": "The browse scope and applied filters."
    }
  },
  "additionalProperties": {}
}
congressgov_senate_nominations annotations
{
  "readOnlyHint": true,
  "openWorldHint": true,
  "idempotentHint": true
}
congressgov_bill_summaries — Congress.gov Bill Summaries
Advertised by the server during the last successful anonymous check.
Advertised read-onlyOpen-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. A page returns limit rows, and a summary longer than the per-row window arrives as an exact character window carrying textTotalCharacters/textTruncated/textNextOffset; pagination.nextOffset continues the page and a row's textNextOffset continues its text. For summaries of one specific bill — and to read a windowed summary to the end — use congressgov_bill_lookup with operation='summaries' instead.

congressgov_bill_summaries input schema
{
  "type": "object",
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "properties": {
    "limit": {
      "type": "integer",
      "default": 20,
      "maximum": 250,
      "minimum": 1,
      "description": "Results per page (1-250)."
    },
    "offset": {
      "type": "integer",
      "default": 0,
      "maximum": 9007199254740991,
      "minimum": 0,
      "description": "Pagination offset."
    },
    "billType": {
      "enum": [
        "hr",
        "s",
        "hjres",
        "sjres",
        "hconres",
        "sconres",
        "hres",
        "sres"
      ],
      "type": "string",
      "description": "Bill type filter. Requires 'congress'."
    },
    "congress": {
      "type": "integer",
      "maximum": 9007199254740991,
      "description": "Congress number. Optional — omit for summaries across all congresses.",
      "exclusiveMinimum": 0
    },
    "toDateTime": {
      "type": "string",
      "description": "End of date range (ISO 8601), filtered on the summary update time. Defaults to now."
    },
    "fromDateTime": {
      "type": "string",
      "description": "Start of date range (ISO 8601), filtered on the summary update time. Defaults to 7 days ago if neither date param is set."
    }
  },
  "additionalProperties": false
}
congressgov_bill_summaries output schema
{
  "type": "object",
  "anyOf": [
    {
      "not": {
        "required": [
          "error"
        ]
      },
      "required": [
        "data",
        "pagination",
        "effectiveQuery",
        "totalCount"
      ]
    },
    {
      "required": [
        "error"
      ]
    }
  ],
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "properties": {
    "data": {
      "type": "array",
      "items": {
        "type": "object",
        "properties": {},
        "description": "Upstream JSON record. Per-tool item shape is rendered in the markdown body.",
        "additionalProperties": {}
      },
      "description": "Result rows. Per-tool item shape is rendered in the markdown body."
    },
    "error": {
      "type": "object",
      "required": [
        "code",
        "message"
      ],
      "properties": {
        "code": {
          "type": "integer",
          "maximum": 9007199254740991,
          "minimum": -9007199254740991,
          "description": "JSON-RPC error code for this failure."
        },
        "data": {
          "type": "object",
          "properties": {
            "reason": {
              "type": "string",
              "examples": [
                "not_found",
                "rate_limited",
                "invalid_request",
                "api_key_rejected",
                "upstream_error",
                "upstream_timeout"
              ],
              "description": "Machine-readable failure mode. Declared by this tool: `not_found`: A requested bill, member, committee, report, vote, or nomination does not exist in Congress.gov. `rate_limited`: A process-local attempt budget or the shared upstream credential/IP quota was reached; upstream hourly limits vary and DEMO_KEY also has a daily quota. On a Senate vote the LIS feed could not answer, Voteview answering HTTP 429 is reported the same way. `invalid_request`: Congress.gov rejected the request as malformed — a bad date range or an identifier with an unexpected shape. `api_key_rejected`: The api.data.gov gateway rejected the server's configured CONGRESS_API_KEY (missing, invalid, disabled, unauthorized, or unverified); the gateway code is in data.upstreamCode. No change to the call's arguments can fix it. `upstream_error`: Congress.gov returned an unexpected error (5xx or another non-2xx status) or could not be reached, or a Senate vote could be read from neither the Senate LIS feed nor its Voteview fallback (before the 101st Congress there is no fallback, and there a senate.gov HTTP 403 refusal carries retryable: false). `upstream_timeout`: A Congress.gov request or a congress.gov document fetch timed out or returned an HTTP timeout response, or the call's upstream requests could not finish inside its 50-second budget. Other values are possible when a failure originates below the handler."
            },
            "recovery": {
              "type": "object",
              "required": [
                "hint"
              ],
              "properties": {
                "hint": {
                  "type": "string"
                }
              },
              "description": "Actionable next step for the caller.",
              "additionalProperties": {}
            },
            "retryable": {
              "type": "boolean",
              "description": "Whether retrying may succeed."
            }
          },
          "additionalProperties": {}
        },
        "message": {
          "type": "string",
          "description": "Human-readable description of what went wrong."
        }
      },
      "description": "Present when the call failed. Absent on success.",
      "additionalProperties": {}
    },
    "notice": {
      "type": "string",
      "description": "Guidance when results are empty, a page is past the end, or a caveat applies."
    },
    "pagination": {
      "type": "object",
      "required": [
        "count"
      ],
      "properties": {
        "count": {
          "type": "integer",
          "maximum": 9007199254740991,
          "minimum": 0,
          "description": "Total result count across all pages."
        },
        "nextOffset": {
          "anyOf": [
            {
              "type": "integer",
              "maximum": 9007199254740991,
              "minimum": 0
            },
            {
              "type": "null"
            }
          ],
          "description": "Offset to pass for the next page, or null when there are no more pages."
        }
      },
      "description": "Pagination metadata: total count and next offset.",
      "additionalProperties": false
    },
    "totalCount": {
      "type": "number",
      "description": "Total results across all pages."
    },
    "effectiveQuery": {
      "type": "string",
      "description": "The browse scope and applied filters."
    }
  },
  "additionalProperties": {}
}
congressgov_bill_summaries annotations
{
  "readOnlyHint": true,
  "openWorldHint": true,
  "idempotentHint": true
}
congressgov_crs_reports — Congress.gov CRS Reports
Advertised by the server during the last successful anonymous check.
Advertised read-onlyOpen-world

Browse, retrieve, and read 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 are letters then digits (R40097, RL33612, IF12345) or, for older reports, two digit groups joined by a hyphen (96-548). Use 'list' to browse available reports, newest update first, 'get' for full detail (authors, topics, summary, download formats), or 'content' to read the report itself — its HTML version as plain text, a bounded character window at a time; feed nextOffset back as characterOffset to read on. The oldest reports publish only a PDF, which 'content' cannot read; the error names its URL. 'list' takes fromDateTime/toDateTime, which filter on the date Congress.gov last updated a report — not its publication date — so a window finds reports added or revised in it.

congressgov_crs_reports input schema
{
  "type": "object",
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "required": [
    "operation"
  ],
  "properties": {
    "limit": {
      "type": "integer",
      "default": 20,
      "maximum": 250,
      "minimum": 1,
      "description": "Results per page (1-250)."
    },
    "offset": {
      "type": "integer",
      "default": 0,
      "maximum": 9007199254740991,
      "minimum": 0,
      "description": "Pagination offset."
    },
    "operation": {
      "enum": [
        "list",
        "get",
        "content"
      ],
      "type": "string",
      "description": "Which data to retrieve."
    },
    "toDateTime": {
      "type": "string",
      "description": "End of the update-date window for 'list' (ISO 8601). Same field semantics as fromDateTime. Ignored by other operations."
    },
    "fromDateTime": {
      "type": "string",
      "description": "Start of the update-date window for 'list' (ISO 8601, e.g. 2026-10-01T00:00:00Z): the date Congress.gov last updated a report, not its publication date. Ignored by other operations."
    },
    "reportNumber": {
      "type": "string",
      "pattern": "^\\s*(?:(?:[A-Za-z]+\\d+|\\d+-\\d+)\\s*)?$",
      "description": "CRS report ID — letters then digits (e.g. 'R40097', 'IF12345') or two digit groups joined by a hyphen (e.g. '96-548'). Case and surrounding whitespace are ignored. Required for 'get' and 'content'."
    },
    "characterLimit": {
      "type": "integer",
      "default": 25000,
      "maximum": 100000,
      "minimum": 1,
      "description": "Maximum characters to return for 'content' (1-100000). Legislative documents run past a million characters, so a full bill takes several windows."
    },
    "characterOffset": {
      "type": "integer",
      "default": 0,
      "maximum": 9007199254740991,
      "minimum": 0,
      "description": "First character to return for 'content', 0-based. Offsets are exact and are never snapped to a section or paragraph break, so feeding the response's nextOffset back walks the whole document with every character returned exactly once."
    }
  },
  "additionalProperties": false
}
congressgov_crs_reports output schema
{
  "type": "object",
  "anyOf": [
    {
      "not": {
        "required": [
          "error"
        ]
      },
      "required": [
        "effectiveQuery",
        "totalCount"
      ]
    },
    {
      "required": [
        "error"
      ]
    }
  ],
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "properties": {
    "data": {
      "type": "array",
      "items": {
        "type": "object",
        "properties": {},
        "description": "Upstream JSON record. Per-tool item shape is rendered in the markdown body.",
        "additionalProperties": {}
      },
      "description": "Result rows. Per-tool item shape is rendered in the markdown body."
    },
    "error": {
      "type": "object",
      "required": [
        "code",
        "message"
      ],
      "properties": {
        "code": {
          "type": "integer",
          "maximum": 9007199254740991,
          "minimum": -9007199254740991,
          "description": "JSON-RPC error code for this failure."
        },
        "data": {
          "type": "object",
          "properties": {
            "reason": {
              "type": "string",
              "examples": [
                "not_found",
                "rate_limited",
                "invalid_request",
                "api_key_rejected",
                "upstream_error",
                "upstream_timeout",
                "document_unavailable",
                "format_unavailable",
                "document_fetch_failed",
                "document_too_large",
                "offset_past_end",
                "incompatible_identity"
              ],
              "description": "Machine-readable failure mode. Declared by this tool: `not_found`: A requested bill, member, committee, report, vote, or nomination does not exist in Congress.gov. `rate_limited`: A process-local attempt budget or the shared upstream credential/IP quota was reached; upstream hourly limits vary and DEMO_KEY also has a daily quota. On a Senate vote the LIS feed could not answer, Voteview answering HTTP 429 is reported the same way. `invalid_request`: Congress.gov rejected the request as malformed — a bad date range or an identifier with an unexpected shape. `api_key_rejected`: The api.data.gov gateway rejected the server's configured CONGRESS_API_KEY (missing, invalid, disabled, unauthorized, or unverified); the gateway code is in data.upstreamCode. No change to the call's arguments can fix it. `upstream_error`: Congress.gov returned an unexpected error (5xx or another non-2xx status) or could not be reached, or a Senate vote could be read from neither the Senate LIS feed nor its Voteview fallback (before the 101st Congress there is no fallback, and there a senate.gov HTTP 403 refusal carries retryable: false). `upstream_timeout`: A Congress.gov request or a congress.gov document fetch timed out or returned an HTTP timeout response, or the call's upstream requests could not finish inside its 50-second budget. `document_unavailable`: The 'content' selection resolves to no retrievable document — the text version or article index is past the end of the list, the record publishes no formats at all, or Congress.gov does not hold the file its own metadata names. `format_unavailable`: The document exists but publishes nothing in a format this server reads — some text versions and committee reports ship PDF only, no Congressional Record article publishes XML, and the oldest CRS reports publish a PDF but no HTML. `document_fetch_failed`: www.congress.gov did not return a readable document — a non-2xx status, a network failure, an empty body, or a content type that is not text or XML. `document_too_large`: The document is larger than the byte ceiling this server retrieves, so no character window can be served from it. `offset_past_end`: characterOffset is at or beyond the last character of every text the call would window — the document on 'content', or every returned row's summary text on 'summaries' — so the window would be empty. `incompatible_identity`: A list operation carries an entity identifier that only a detail operation uses. Other values are possible when a failure originates below the handler."
            },
            "recovery": {
              "type": "object",
              "required": [
                "hint"
              ],
              "properties": {
                "hint": {
                  "type": "string"
                }
              },
              "description": "Actionable next step for the caller.",
              "additionalProperties": {}
            },
            "retryable": {
              "type": "boolean",
              "description": "Whether retrying may succeed."
            }
          },
          "additionalProperties": {}
        },
        "message": {
          "type": "string",
          "description": "Human-readable description of what went wrong."
        }
      },
      "description": "Present when the call failed. Absent on success.",
      "additionalProperties": {}
    },
    "notice": {
      "type": "string",
      "description": "Guidance when results are empty, a page is past the end, or a caveat applies."
    },
    "report": {
      "type": "object",
      "properties": {},
      "description": "Dynamic upstream JSON record.",
      "additionalProperties": {}
    },
    "content": {
      "type": "object",
      "properties": {},
      "description": "Dynamic upstream JSON record.",
      "additionalProperties": {}
    },
    "pagination": {
      "type": "object",
      "required": [
        "count"
      ],
      "properties": {
        "count": {
          "type": "integer",
          "maximum": 9007199254740991,
          "minimum": 0,
          "description": "Total result count across all pages."
        },
        "nextOffset": {
          "anyOf": [
            {
              "type": "integer",
              "maximum": 9007199254740991,
              "minimum": 0
            },
            {
              "type": "null"
            }
          ],
          "description": "Offset to pass for the next page, or null when there are no more pages."
        }
      },
      "description": "Pagination metadata: total count and next offset.",
      "additionalProperties": false
    },
    "totalCount": {
      "type": "number",
      "description": "Total results across all pages."
    },
    "effectiveQuery": {
      "type": "string",
      "description": "The browse scope and applied filters."
    }
  },
  "additionalProperties": {}
}
congressgov_crs_reports annotations
{
  "readOnlyHint": true,
  "openWorldHint": true,
  "idempotentHint": true
}
congressgov_committee_reports — Congress.gov Committee Reports
Advertised by the server during the last successful anonymous check.
Advertised read-onlyOpen-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). 'list' is not ordered by date; it takes fromDateTime/toDateTime, which filter on the date Congress.gov last updated a report record, and conference, which selects conference reports — list rows carry no conference field. 'text' lists the published format URLs; 'content' then reads the report's actual text, a bounded character window at a time. A multi-part report (Part 2, Book 3) is filed as one record per part under one report number: 'get', 'text', and 'content' serve Part 1 unless part names another, and list every part number in parts.

congressgov_committee_reports input schema
{
  "type": "object",
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "required": [
    "operation",
    "congress"
  ],
  "properties": {
    "part": {
      "type": "integer",
      "maximum": 9007199254740991,
      "description": "Which part of a multi-part report 'get', 'text', and 'content' serve; Part 1 when omitted. A multi-part response lists the report's part numbers in parts. 'list' does not take it.",
      "exclusiveMinimum": 0
    },
    "limit": {
      "type": "integer",
      "default": 20,
      "maximum": 250,
      "minimum": 1,
      "description": "Results per page (1-250)."
    },
    "format": {
      "enum": [
        "text",
        "xml"
      ],
      "type": "string",
      "default": "text",
      "description": "Document format for 'content'. 'text' is GPO's Formatted Text — plain, pre-formatted print output, published for every document checked. 'xml' prefers United States Legislative Markup and falls back to Formatted XML; it exists on some bill text versions and on no committee report or Congressional Record article. PDF is not retrieved — read one at the format URLs 'text'/'articles' return."
    },
    "offset": {
      "type": "integer",
      "default": 0,
      "maximum": 9007199254740991,
      "minimum": 0,
      "description": "Pagination offset."
    },
    "congress": {
      "type": "integer",
      "maximum": 9007199254740991,
      "description": "Congress number.",
      "exclusiveMinimum": 0
    },
    "operation": {
      "enum": [
        "list",
        "get",
        "text",
        "content"
      ],
      "type": "string",
      "description": "Which data to retrieve."
    },
    "conference": {
      "type": "boolean",
      "description": "For 'list': true returns only conference reports, false only the others; omit for both. Ignored by other operations."
    },
    "reportType": {
      "enum": [
        "hrpt",
        "srpt",
        "erpt"
      ],
      "type": "string",
      "description": "Report type. Required for get, text, and content operations."
    },
    "toDateTime": {
      "type": "string",
      "description": "End of the update-date window for 'list' (ISO 8601). Same field semantics as fromDateTime. Ignored by other operations."
    },
    "fromDateTime": {
      "type": "string",
      "description": "Start of the update-date window for 'list' (ISO 8601, e.g. 2025-06-01T00:00:00Z): the date Congress.gov last updated a report record, not its publication date. Ignored by other operations."
    },
    "reportNumber": {
      "type": "integer",
      "maximum": 9007199254740991,
      "description": "Committee report number. Required for get, text, and content operations.",
      "exclusiveMinimum": 0
    },
    "characterLimit": {
      "type": "integer",
      "default": 25000,
      "maximum": 100000,
      "minimum": 1,
      "description": "Maximum characters to return for 'content' (1-100000). Legislative documents run past a million characters, so a full bill takes several windows."
    },
    "characterOffset": {
      "type": "integer",
      "default": 0,
      "maximum": 9007199254740991,
      "minimum": 0,
      "description": "First character to return for 'content', 0-based. Offsets are exact and are never snapped to a section or paragraph break, so feeding the response's nextOffset back walks the whole document with every character returned exactly once."
    }
  },
  "additionalProperties": false
}
congressgov_committee_reports output schema
{
  "type": "object",
  "anyOf": [
    {
      "not": {
        "required": [
          "error"
        ]
      },
      "required": [
        "effectiveQuery",
        "totalCount"
      ]
    },
    {
      "required": [
        "error"
      ]
    }
  ],
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "properties": {
    "data": {
      "type": "array",
      "items": {
        "type": "object",
        "properties": {},
        "description": "Upstream JSON record. Per-tool item shape is rendered in the markdown body.",
        "additionalProperties": {}
      },
      "description": "Result rows. Per-tool item shape is rendered in the markdown body."
    },
    "text": {
      "type": "array",
      "items": {
        "type": "object",
        "properties": {},
        "description": "Dynamic upstream JSON record.",
        "additionalProperties": {}
      },
      "description": "Dynamic upstream JSON records."
    },
    "error": {
      "type": "object",
      "required": [
        "code",
        "message"
      ],
      "properties": {
        "code": {
          "type": "integer",
          "maximum": 9007199254740991,
          "minimum": -9007199254740991,
          "description": "JSON-RPC error code for this failure."
        },
        "data": {
          "type": "object",
          "properties": {
            "reason": {
              "type": "string",
              "examples": [
                "not_found",
                "rate_limited",
                "invalid_request",
                "api_key_rejected",
                "upstream_error",
                "upstream_timeout",
                "document_unavailable",
                "format_unavailable",
                "document_fetch_failed",
                "document_too_large",
                "offset_past_end",
                "incompatible_identity"
              ],
              "description": "Machine-readable failure mode. Declared by this tool: `not_found`: A requested bill, member, committee, report, vote, or nomination does not exist in Congress.gov. `rate_limited`: A process-local attempt budget or the shared upstream credential/IP quota was reached; upstream hourly limits vary and DEMO_KEY also has a daily quota. On a Senate vote the LIS feed could not answer, Voteview answering HTTP 429 is reported the same way. `invalid_request`: Congress.gov rejected the request as malformed — a bad date range or an identifier with an unexpected shape. `api_key_rejected`: The api.data.gov gateway rejected the server's configured CONGRESS_API_KEY (missing, invalid, disabled, unauthorized, or unverified); the gateway code is in data.upstreamCode. No change to the call's arguments can fix it. `upstream_error`: Congress.gov returned an unexpected error (5xx or another non-2xx status) or could not be reached, or a Senate vote could be read from neither the Senate LIS feed nor its Voteview fallback (before the 101st Congress there is no fallback, and there a senate.gov HTTP 403 refusal carries retryable: false). `upstream_timeout`: A Congress.gov request or a congress.gov document fetch timed out or returned an HTTP timeout response, or the call's upstream requests could not finish inside its 50-second budget. `document_unavailable`: The 'content' selection resolves to no retrievable document — the text version or article index is past the end of the list, the record publishes no formats at all, or Congress.gov does not hold the file its own metadata names. `format_unavailable`: The document exists but publishes nothing in a format this server reads — some text versions and committee reports ship PDF only, no Congressional Record article publishes XML, and the oldest CRS reports publish a PDF but no HTML. `document_fetch_failed`: www.congress.gov did not return a readable document — a non-2xx status, a network failure, an empty body, or a content type that is not text or XML. `document_too_large`: The document is larger than the byte ceiling this server retrieves, so no character window can be served from it. `offset_past_end`: characterOffset is at or beyond the last character of every text the call would window — the document on 'content', or every returned row's summary text on 'summaries' — so the window would be empty. `incompatible_identity`: A list operation carries an entity identifier that only a detail operation uses. Other values are possible when a failure originates below the handler."
            },
            "recovery": {
              "type": "object",
              "required": [
                "hint"
              ],
              "properties": {
                "hint": {
                  "type": "string"
                }
              },
              "description": "Actionable next step for the caller.",
              "additionalProperties": {}
            },
            "retryable": {
              "type": "boolean",
              "description": "Whether retrying may succeed."
            }
          },
          "additionalProperties": {}
        },
        "message": {
          "type": "string",
          "description": "Human-readable description of what went wrong."
        }
      },
      "description": "Present when the call failed. Absent on success.",
      "additionalProperties": {}
    },
    "parts": {
      "type": "array",
      "items": {
        "type": "integer",
        "maximum": 9007199254740991,
        "description": "A part number.",
        "exclusiveMinimum": 0
      },
      "description": "Every part number the report is filed in, ascending, on 'get', 'text', and 'content' for a report Congress.gov files in more than one part; absent for a single-part report. The response describes the part the part input selected."
    },
    "notice": {
      "type": "string",
      "description": "Guidance when results are empty, a page is past the end, or a caveat applies."
    },
    "report": {
      "type": "object",
      "properties": {},
      "description": "Dynamic upstream JSON record.",
      "additionalProperties": {}
    },
    "content": {
      "type": "object",
      "properties": {},
      "description": "Dynamic upstream JSON record.",
      "additionalProperties": {}
    },
    "pagination": {
      "type": "object",
      "required": [
        "count"
      ],
      "properties": {
        "count": {
          "type": "integer",
          "maximum": 9007199254740991,
          "minimum": 0,
          "description": "Total result count across all pages."
        },
        "nextOffset": {
          "anyOf": [
            {
              "type": "integer",
              "maximum": 9007199254740991,
              "minimum": 0
            },
            {
              "type": "null"
            }
          ],
          "description": "Offset to pass for the next page, or null when there are no more pages."
        }
      },
      "description": "Pagination metadata: total count and next offset.",
      "additionalProperties": false
    },
    "totalCount": {
      "type": "number",
      "description": "Total results across all pages."
    },
    "effectiveQuery": {
      "type": "string",
      "description": "The browse scope and applied filters."
    }
  },
  "additionalProperties": {}
}
congressgov_committee_reports annotations
{
  "readOnlyHint": true,
  "openWorldHint": true,
  "idempotentHint": true
}
congressgov_daily_record — Congress.gov Daily Record
Advertised by the server during the last successful anonymous check.
Advertised read-onlyOpen-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. 'articles' lists each article and its format URLs; 'content' then reads one article's actual text, a bounded character window at a time.

congressgov_daily_record input schema
{
  "type": "object",
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "required": [
    "operation"
  ],
  "properties": {
    "limit": {
      "type": "integer",
      "default": 20,
      "maximum": 250,
      "minimum": 1,
      "description": "Results per page (1-250)."
    },
    "format": {
      "enum": [
        "text",
        "xml"
      ],
      "type": "string",
      "default": "text",
      "description": "Document format for 'content'. 'text' is GPO's Formatted Text — plain, pre-formatted print output, published for every document checked. 'xml' prefers United States Legislative Markup and falls back to Formatted XML; it exists on some bill text versions and on no committee report or Congressional Record article. PDF is not retrieved — read one at the format URLs 'text'/'articles' return."
    },
    "offset": {
      "type": "integer",
      "default": 0,
      "maximum": 9007199254740991,
      "minimum": 0,
      "description": "Pagination offset."
    },
    "operation": {
      "enum": [
        "list",
        "issues",
        "articles",
        "content"
      ],
      "type": "string",
      "description": "Which data to retrieve."
    },
    "issueNumber": {
      "anyOf": [
        {
          "type": "integer",
          "maximum": 9007199254740991,
          "description": "Positive integer form.",
          "exclusiveMinimum": 0
        },
        {
          "type": "string",
          "pattern": "^0*[1-9]\\d*$",
          "description": "Digit-string form, as list rows carry it."
        }
      ],
      "description": "Issue number within a volume. Required for 'articles' and 'content'. List rows carry this as a string (e.g. \"109\") — both forms are accepted."
    },
    "articleIndex": {
      "type": "integer",
      "default": 0,
      "maximum": 9007199254740991,
      "minimum": 0,
      "description": "Which article 'content' reads, 0-based against the issue's whole article sequence — the same absolute position 'articles' pages through with offset. Ignored by other operations."
    },
    "volumeNumber": {
      "anyOf": [
        {
          "type": "integer",
          "maximum": 9007199254740991,
          "description": "Positive integer form.",
          "exclusiveMinimum": 0
        },
        {
          "type": "string",
          "pattern": "^0*[1-9]\\d*$",
          "description": "Digit-string form, as list rows carry it."
        }
      ],
      "description": "Volume number. Required for 'issues', 'articles', and 'content'. Accepts a number or the digit-string form list rows carry."
    },
    "characterLimit": {
      "type": "integer",
      "default": 25000,
      "maximum": 100000,
      "minimum": 1,
      "description": "Maximum characters to return for 'content' (1-100000). Legislative documents run past a million characters, so a full bill takes several windows."
    },
    "characterOffset": {
      "type": "integer",
      "default": 0,
      "maximum": 9007199254740991,
      "minimum": 0,
      "description": "First character to return for 'content', 0-based. Offsets are exact and are never snapped to a section or paragraph break, so feeding the response's nextOffset back walks the whole document with every character returned exactly once."
    }
  },
  "additionalProperties": false
}
congressgov_daily_record output schema
{
  "type": "object",
  "anyOf": [
    {
      "not": {
        "required": [
          "error"
        ]
      },
      "required": [
        "effectiveQuery",
        "totalCount"
      ]
    },
    {
      "required": [
        "error"
      ]
    }
  ],
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "properties": {
    "data": {
      "type": "array",
      "items": {
        "type": "object",
        "properties": {},
        "description": "Upstream JSON record. Per-tool item shape is rendered in the markdown body.",
        "additionalProperties": {}
      },
      "description": "Result rows. Per-tool item shape is rendered in the markdown body."
    },
    "error": {
      "type": "object",
      "required": [
        "code",
        "message"
      ],
      "properties": {
        "code": {
          "type": "integer",
          "maximum": 9007199254740991,
          "minimum": -9007199254740991,
          "description": "JSON-RPC error code for this failure."
        },
        "data": {
          "type": "object",
          "properties": {
            "reason": {
              "type": "string",
              "examples": [
                "not_found",
                "rate_limited",
                "invalid_request",
                "api_key_rejected",
                "upstream_error",
                "upstream_timeout",
                "document_unavailable",
                "format_unavailable",
                "document_fetch_failed",
                "document_too_large",
                "offset_past_end",
                "incompatible_identity"
              ],
              "description": "Machine-readable failure mode. Declared by this tool: `not_found`: A requested bill, member, committee, report, vote, or nomination does not exist in Congress.gov. `rate_limited`: A process-local attempt budget or the shared upstream credential/IP quota was reached; upstream hourly limits vary and DEMO_KEY also has a daily quota. On a Senate vote the LIS feed could not answer, Voteview answering HTTP 429 is reported the same way. `invalid_request`: Congress.gov rejected the request as malformed — a bad date range or an identifier with an unexpected shape. `api_key_rejected`: The api.data.gov gateway rejected the server's configured CONGRESS_API_KEY (missing, invalid, disabled, unauthorized, or unverified); the gateway code is in data.upstreamCode. No change to the call's arguments can fix it. `upstream_error`: Congress.gov returned an unexpected error (5xx or another non-2xx status) or could not be reached, or a Senate vote could be read from neither the Senate LIS feed nor its Voteview fallback (before the 101st Congress there is no fallback, and there a senate.gov HTTP 403 refusal carries retryable: false). `upstream_timeout`: A Congress.gov request or a congress.gov document fetch timed out or returned an HTTP timeout response, or the call's upstream requests could not finish inside its 50-second budget. `document_unavailable`: The 'content' selection resolves to no retrievable document — the text version or article index is past the end of the list, the record publishes no formats at all, or Congress.gov does not hold the file its own metadata names. `format_unavailable`: The document exists but publishes nothing in a format this server reads — some text versions and committee reports ship PDF only, no Congressional Record article publishes XML, and the oldest CRS reports publish a PDF but no HTML. `document_fetch_failed`: www.congress.gov did not return a readable document — a non-2xx status, a network failure, an empty body, or a content type that is not text or XML. `document_too_large`: The document is larger than the byte ceiling this server retrieves, so no character window can be served from it. `offset_past_end`: characterOffset is at or beyond the last character of every text the call would window — the document on 'content', or every returned row's summary text on 'summaries' — so the window would be empty. `incompatible_identity`: A list operation carries an entity identifier that only a detail operation uses. Other values are possible when a failure originates below the handler."
            },
            "recovery": {
              "type": "object",
              "required": [
                "hint"
              ],
              "properties": {
                "hint": {
                  "type": "string"
                }
              },
              "description": "Actionable next step for the caller.",
              "additionalProperties": {}
            },
            "retryable": {
              "type": "boolean",
              "description": "Whether retrying may succeed."
            }
          },
          "additionalProperties": {}
        },
        "message": {
          "type": "string",
          "description": "Human-readable description of what went wrong."
        }
      },
      "description": "Present when the call failed. Absent on success.",
      "additionalProperties": {}
    },
    "notice": {
      "type": "string",
      "description": "Guidance when results are empty, a page is past the end, or a caveat applies."
    },
    "content": {
      "type": "object",
      "properties": {},
      "description": "Dynamic upstream JSON record.",
      "additionalProperties": {}
    },
    "pagination": {
      "type": "object",
      "required": [
        "count"
      ],
      "properties": {
        "count": {
          "type": "integer",
          "maximum": 9007199254740991,
          "minimum": 0,
          "description": "Total result count across all pages."
        },
        "nextOffset": {
          "anyOf": [
            {
              "type": "integer",
              "maximum": 9007199254740991,
              "minimum": 0
            },
            {
              "type": "null"
            }
          ],
          "description": "Offset to pass for the next page, or null when there are no more pages."
        }
      },
      "description": "Pagination metadata: total count and next offset.",
      "additionalProperties": false
    },
    "totalCount": {
      "type": "number",
      "description": "Total results across all pages."
    },
    "effectiveQuery": {
      "type": "string",
      "description": "The browse scope and applied filters."
    }
  },
  "additionalProperties": {}
}
congressgov_daily_record annotations
{
  "readOnlyHint": true,
  "openWorldHint": true,
  "idempotentHint": true
}
congressgov_search_bills — Congress.gov Bill Search
Advertised by the server during the last successful anonymous check.
Advertised read-only

Keyword-search U.S. bills by title and CRS summary text — the discovery path the Congress.gov API itself lacks (it has no keyword search). Backed by a local full-text index over a bounded window of congresses, which every response names in mirroredCongresses; title and summary are indexed, but policy area and full bill text are not. Returns BM25-ranked matches, each with the bill's derived id (congress/billType/billNumber) for follow-up congressgov_bill_lookup calls and a truncated summary preview. Narrow with the optional congress, billType, and originChamber filters; a congress outside mirroredCongresses returns an empty result with a notice, not a no-match. Searches the local mirror, not the live API — if the mirror has not finished its initial build it returns an empty result with a notice, not an error.

congressgov_search_bills input schema
{
  "type": "object",
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "required": [
    "query"
  ],
  "properties": {
    "limit": {
      "type": "integer",
      "default": 20,
      "maximum": 100,
      "minimum": 1,
      "description": "Results per page (1–100, default 20)."
    },
    "query": {
      "type": "string",
      "pattern": "[\\p{L}\\p{N}]",
      "description": "Free-text keywords matched against bill titles and summaries (e.g. \"semiconductor export controls\"). Tokens are AND-combined."
    },
    "offset": {
      "type": "integer",
      "default": 0,
      "maximum": 9007199254740991,
      "minimum": 0,
      "description": "Pagination offset."
    },
    "billType": {
      "enum": [
        "hr",
        "s",
        "hjres",
        "sjres",
        "hconres",
        "sconres",
        "hres",
        "sres"
      ],
      "type": "string",
      "description": "Restrict to a bill type (hr, s, hjres, sjres, hconres, sconres, hres, sres)."
    },
    "congress": {
      "type": "integer",
      "maximum": 9007199254740991,
      "description": "Restrict to a single congress (e.g. 119), one of the mirroredCongresses every response reports. Omit to search the whole mirrored window.",
      "exclusiveMinimum": 0
    },
    "originChamber": {
      "enum": [
        "House",
        "Senate"
      ],
      "type": "string",
      "description": "Restrict to the originating chamber."
    }
  },
  "additionalProperties": false
}
congressgov_search_bills output schema
{
  "type": "object",
  "anyOf": [
    {
      "not": {
        "required": [
          "error"
        ]
      },
      "required": [
        "data",
        "pagination",
        "effectiveQuery",
        "totalCount",
        "mirroredCongresses"
      ]
    },
    {
      "required": [
        "error"
      ]
    }
  ],
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "properties": {
    "data": {
      "type": "array",
      "items": {
        "type": "object",
        "properties": {},
        "description": "Upstream JSON record. Per-tool item shape is rendered in the markdown body.",
        "additionalProperties": {}
      },
      "description": "Result rows. Per-tool item shape is rendered in the markdown body."
    },
    "error": {
      "type": "object",
      "required": [
        "code",
        "message"
      ],
      "properties": {
        "code": {
          "type": "integer",
          "maximum": 9007199254740991,
          "minimum": -9007199254740991,
          "description": "JSON-RPC error code for this failure."
        },
        "data": {
          "type": "object",
          "properties": {
            "reason": {
              "type": "string",
              "description": "Machine-readable failure mode."
            },
            "recovery": {
              "type": "object",
              "required": [
                "hint"
              ],
              "properties": {
                "hint": {
                  "type": "string"
                }
              },
              "description": "Actionable next step for the caller.",
              "additionalProperties": {}
            },
            "retryable": {
              "type": "boolean",
              "description": "Whether retrying may succeed."
            }
          },
          "additionalProperties": {}
        },
        "message": {
          "type": "string",
          "description": "Human-readable description of what went wrong."
        }
      },
      "description": "Present when the call failed. Absent on success.",
      "additionalProperties": {}
    },
    "notice": {
      "type": "string",
      "description": "Guidance when results are empty, a page is past the end, or a caveat applies."
    },
    "pagination": {
      "type": "object",
      "required": [
        "count"
      ],
      "properties": {
        "count": {
          "type": "integer",
          "maximum": 9007199254740991,
          "minimum": 0,
          "description": "Total result count across all pages."
        },
        "nextOffset": {
          "anyOf": [
            {
              "type": "integer",
              "maximum": 9007199254740991,
              "minimum": 0
            },
            {
              "type": "null"
            }
          ],
          "description": "Offset to pass for the next page, or null when there are no more pages."
        }
      },
      "description": "Pagination metadata: total count and next offset.",
      "additionalProperties": false
    },
    "totalCount": {
      "type": "number",
      "description": "Total results across all pages."
    },
    "effectiveQuery": {
      "type": "string",
      "description": "The browse scope and applied filters."
    },
    "mirroredCongresses": {
      "type": "array",
      "items": {
        "type": "integer",
        "maximum": 9007199254740991,
        "exclusiveMinimum": 0
      },
      "description": "Congress numbers the local mirror holds bills for, ascending — the congresses this tool can search. Empty while the mirror has not finished its initial build."
    }
  },
  "additionalProperties": {}
}
congressgov_search_bills annotations
{
  "readOnlyHint": true,
  "openWorldHint": false,
  "idempotentHint": true
}

Prompts

2 advertised

congressgov_bill_analysis

Advertised by the server during the last successful anonymous check.

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

congress
Congress number (e.g., 118). (required)
billType
Bill type code (e.g., hr, s). (required)
billNumber
Bill number (e.g., 3076). (required)
congressgov_legislative_research

Advertised by the server during the last successful anonymous check.

Research framework for investigating a policy area across Congress: relevant bills, key members, committee activity, and legislative status. The discovery plan reflects whether this deployment can search by keyword.

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

Resources

3 advertised

current-congress — current-congress

Advertised by the server during the last successful anonymous check.

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

current-congress URI
congress://current

MIME type: application/json

bill-types — bill-types

Advertised by the server during the last successful anonymous check.

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

bill-types URI
congress://bill-types

MIME type: application/json

congressgov-guide

Advertised by the server during the last successful anonymous check.

Use congressgov_* tools for legislative research across bills, amendments, enacted laws, members, committees, votes, and Congressional Record documents. Resolve linked identifiers, select the relevant document version, and check discovery coverage before reporting absence.

congressgov-guide URI
skill://congressgov-guide/SKILL.md

MIME type: text/markdown

member-profile — member-profile

Advertised by the server during the last successful anonymous check.

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

member-profile URI template
congress://member/{bioguideId}

MIME type: application/json

bill-detail — bill-detail

Advertised by the server during the last successful anonymous check.

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

bill-detail URI template
congress://bill/{congress}/{billType}/{billNumber}

MIME type: application/json

committee-detail — committee-detail

Advertised by the server during the last successful anonymous check.

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

committee-detail URI template
congress://committee/{committeeCode}

MIME type: application/json

io.modelcontextprotocol/skills

Advertised by the server during the last successful anonymous check.

io.modelcontextprotocol/skills URI template
skill://{+path}

30-day availability

Aggregated from read-only remote checks; this is not a tool-execution or security guarantee.

Successful checks
1 of 1 (100%)
Average latency
686 ms
95th percentile latency
686 ms

Maintenance history

Public check and source-refresh events. Editorial and ownership records remain private.

  • · probe · passed · 686 ms · metadata changed · 12 tool(s), 3 resource(s), 4 resource template(s), 2 prompt(s)

Connect from your client

Each snippet registers the same endpoint; pick the client you use.

This server is operated by the named third party. Listing and endpoint checks are not an endorsement or a security audit. Review the operator's permissions, terms, and data handling before connecting. How listings are checked and corrected.

Claude Code

Run this once in a terminal. It registers the remote server. Use --scope project to write .mcp.json for the repo.
Claude Code configuration
claude mcp add --transport http congressgov-mcp-server-caseyjhand https://congressgov.caseyjhand.com/mcp

Codex

Run this once. Codex stores MCP servers in ~/.codex/config.toml (or .codex/config.toml in a trusted project).
Codex configuration
codex mcp add congressgov-mcp-server-caseyjhand --url https://congressgov.caseyjhand.com/mcp

Cursor

Merge this server into .cursor/mcp.json in your project, then enable congressgov-mcp-server-caseyjhand in your MCP settings.
Cursor configuration
{
  "mcpServers": {
    "congressgov-mcp-server-caseyjhand": {
      "url": "https://congressgov.caseyjhand.com/mcp"
    }
  }
}

Cline

Merge this into cline_mcp_settings.json (Cline → MCP Servers → Configure).
Cline configuration
{
  "mcpServers": {
    "congressgov-mcp-server-caseyjhand": {
      "type": "streamableHttp",
      "url": "https://congressgov.caseyjhand.com/mcp",
      "disabled": false
    }
  }
}

VS Code

Merge this server into .vscode/mcp.json. Use MCP: List Servers to start congressgov-mcp-server-caseyjhand and inspect its tools.
VS Code configuration
{
  "servers": {
    "congressgov-mcp-server-caseyjhand": {
      "type": "http",
      "url": "https://congressgov.caseyjhand.com/mcp"
    }
  }
}

Gemini CLI

Run this once. It writes .gemini/settings.json in the current project; pass --scope user for ~/.gemini/settings.json.
Gemini CLI configuration
gemini mcp add --transport http congressgov-mcp-server-caseyjhand https://congressgov.caseyjhand.com/mcp

Claude Desktop

Open Claude Settings > Connectors > Add custom connector, enter this server URL and enable it for the conversation. This is a manual remote-connector handoff, not a desktop JSON configuration.
Claude Desktop configuration
https://congressgov.caseyjhand.com/mcp

Windsurf

Merge this into ~/.codeium/windsurf/mcp_config.json, then refresh MCP in Cascade. Windsurf remote servers use serverUrl, not url.
Windsurf configuration
{
  "mcpServers": {
    "congressgov-mcp-server-caseyjhand": {
      "serverUrl": "https://congressgov.caseyjhand.com/mcp"
    }
  }
}

Let your agent find its tools

Find servers like congressgov-mcp-server from your agent. Add Koskamo once to search the index for endpoints, access requirements, and client setup. Public discovery needs no key.