Skip to main content
Glama

congressgov-mcp-server

Congress.gov Amendment Lookup

congressgov_amendment_lookup
Read-onlyIdempotent

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.

Tool call template

Replace each placeholder with a value matching the input schema. Only required parameters are included; add optional parameters as needed.

{
  "id": 1,
  "jsonrpc": "2.0",
  "method": "tools/call",
  "params": {
    "arguments": {
      "operation": "<operation>",
      "congress": "<congress>"
    },
    "name": "congressgov_amendment_lookup"
  }
}

Input Schema

NameRequiredDescriptionDefault
limitNoResults per page (1-250).
orderNoSort order for 'list' (sorts by update date). 'recent' (default) is newest first; 'oldest' is ascending. Ignored by other operations.recent
offsetNoPagination offset.
congressYesCongress number (e.g., 118, 119).
operationYesWhich data to retrieve.
toDateTimeNoEnd of the update-date window for 'list' (ISO 8601). Same field semantics as fromDateTime.
fromDateTimeNoStart 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.
amendmentTypeNoAmendment type: 'hamdt' (House), 'samdt' (Senate), or 'suamdt' (Senate unprinted, 97th and 98th Congresses only). Optional on 'list'; required for every other operation.
characterLimitNoMaximum characters to return for 'content' (1-100000). Legislative documents run past a million characters, so a full bill takes several windows.
amendmentNumberNoAmendment 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.
characterOffsetNoFirst 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.
textVersionIndexNoWhich text version 'content' reads, 0-based against the order 'text' returns. Ignored by other operations.

Output Schema

NameRequiredDescriptionDefault
dataNoResult rows for `list` and the sub-resource operations.
errorNoPresent when the call failed. Absent on success.
noticeNoGuidance when results are empty, a page is past the end, or a caveat applies.
contentNoDynamic upstream JSON record.
amendmentNoDynamic upstream JSON record.
paginationNoPagination metadata: total count and next offset.
totalCountNoTotal results across all pages.
effectiveQueryNoThe browse scope and applied filters.

Schema Changelog

Changes observed during successful MCP inspections.

  1. Added

TDQS

A4.5/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnly/idempotent/openWorld, so the bar is lower, yet the description still adds real behavioral context: fromDateTime filters on update date rather than offer date, suamdt is limited to the 97th and 98th Congresses, and 'content' returns bounded character windows of a document that can exceed a million characters. The one gap is that it does not describe error or empty-result behavior beyond noting 'list' refuses amendmentNumber.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness3/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Purpose and the list/get/drill-in routing are correctly front-loaded, but the description is a single dense paragraph and the closing material on Congressional Record page markers ('SA {number}', '[[Page H3582]]', 'Amendment No. N Offered by') is lengthy and would scan far better as separate bullets or a short numbered list. The content earns its place, but the packing hurts retrievability.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a 12-parameter, 7-operation tool with an output schema already describing return shape, the description covers everything an agent needs: identifier provenance from three sibling tools, per-operation parameter applicability, the suamdt coverage limit, and the character-window traversal model. Nothing material for correct invocation is missing.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, so baseline would be 3, but the prose adds meaning the schema cannot: which operations honor fromDateTime/order/textVersionIndex, that either letter case is accepted, that amendmentNumber may arrive as a digit string from list rows, and that characterOffset is never snapped so nextOffset walks the document exactly once.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

Opens with a specific verb+resource ('Browse and retrieve U.S. congressional amendments from Congress.gov') and immediately delimits the three amendment types including the suamdt 97th/98th Congress restriction. It also distinguishes itself from siblings by naming exactly which outputs of congressgov_bill_lookup, congressgov_roll_votes, and congressgov_member_lookup supply the identifiers this tool consumes.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Gives explicit operation-by-operation routing: 'list' to browse one congress, 'get' for the full record, and a named set of drill-ins ('actions', 'cosponsors', 'amendments', 'text', 'content'). It also supplies prerequisites (amendmentType required except on 'list', amendmentNumber required by every other operation) and describes how to convert a rollVote from an 'actions' row into a congressgov_roll_votes call.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

Try in Browser

Glama MCP Gateway

Add one secure layer between your agents and this server.