Skip to main content
Glama
amurshak

CongressMCP-full

by amurshak

CongressMCP

Live U.S. Congressional data for any MCP client — Claude Code, ChatGPT, Copilot, Codex, Cursor, OpenCode, Gemini CLI, Grok Build, and more.

Bills, full bill text, votes, members, committees, hearings, nominations, and the Congressional Record — queried in natural language through the Model Context Protocol. Runs locally on your machine against the free Congress.gov and GovInfo APIs. No account, no hosted service, no telemetry.

Quick Start

1. Get a free Congress.gov API key

Sign up at api.congress.gov/sign-up — takes 30 seconds. The same key also works for GovInfo (full bill text).

2. Install uv

CongressMCP is published on PyPI and launched with uvx, which ships with uv:

# macOS / Linux
curl -LsSf https://astral.sh/uv/install.sh | sh

# Windows (PowerShell)
powershell -ExecutionPolicy ByPass -c "irm https://astral.sh/uv/install.ps1 | iex"

(brew install uv, winget install astral-sh.uv, and pipx install uv also work.) Prefer pip? pip install congressmcp gives you a congressmcp command you can use in place of uvx congressmcp below.

3. Connect your client

Every client needs the same three facts: command uvx, args ["congressmcp"], env CONGRESS_API_KEY. Clients are listed roughly by how many professional developers use them today (JetBrains Developer Ecosystem survey, mid-2026, then Pragmatic Engineer's 2026 tooling survey), so the one you want is probably near the top:

Client

Where it's configured

Notes

Claude Code

claude mcp add … or .mcp.json

ChatGPT

Developer mode → connector URL

remote only — needs HTTP mode

VS Code / GitHub Copilot

.vscode/mcp.json

uses servers + inputs

OpenAI Codex CLI

codex mcp add … or ~/.codex/config.toml

TOML

Cursor

~/.cursor/mcp.json or .cursor/mcp.json

JetBrains AI Assistant / Junie

Settings → AI Assistant → MCP

paste the Claude Desktop JSON

OpenCode

opencode.jsonmcp

command is a single array

Gemini CLI

gemini mcp add … or ~/.gemini/settings.json

Claude.ai

Connectors → custom connector URL

remote only — needs HTTP mode

Claude Desktop

claude_desktop_config.json

Windsurf

~/.codeium/windsurf/mcp_config.json

Zed

settings.jsoncontext_servers

Cline / Roo Code

MCP settings panel → edit JSON

Goose

goose configure or ~/.config/goose/config.yaml

YAML

Grok Build

grok mcp add … or ~/.grok/config.toml

TOML; also auto-imports Claude Code / Cursor config

Hermes Agent

hermes mcp add … or ~/.hermes/config.yaml

YAML

OpenClaw

openclaw mcp add … or ~/.openclaw/openclaw.json

JSON5

Continue

~/.continue/config.yaml

YAML, agent mode only

Open WebUI

Admin → Integrations → MCP server URL

remote only — needs HTTP mode

LM Studio

Program tab → mcp.json

Cursor-style JSON

Anything not listed that speaks MCP over stdio will work with the same three values.

# just for you
claude mcp add congressmcp --env CONGRESS_API_KEY=your-api-key-here -- uvx congressmcp

# shared with your team via .mcp.json in the repo root
claude mcp add --scope project congressmcp --env CONGRESS_API_KEY='${CONGRESS_API_KEY}' -- uvx congressmcp

Put the server name before --env as shown — if --env comes first, the CLI tries to parse the name as another KEY=value pair. Equivalent .mcp.json:

{
  "mcpServers": {
    "congressmcp": {
      "type": "stdio",
      "command": "uvx",
      "args": ["congressmcp"],
      "env": { "CONGRESS_API_KEY": "${CONGRESS_API_KEY}" }
    }
  }
}

${VAR} / ${VAR:-default} are expanded from your environment, so the key never has to be committed.

Workspace: .vscode/mcp.json (or Command Palette → MCP: Add Server / MCP: Open User Configuration for user-level). VS Code uses servers rather than mcpServers, and inputs lets it prompt for the key and store it securely instead of writing it to disk:

{
  "inputs": [
    {
      "type": "promptString",
      "id": "congress-api-key",
      "description": "Congress.gov API key",
      "password": true
    }
  ],
  "servers": {
    "congressmcp": {
      "type": "stdio",
      "command": "uvx",
      "args": ["congressmcp"],
      "env": { "CONGRESS_API_KEY": "${input:congress-api-key}" }
    }
  }
}

VS Code shows a trust prompt the first time the server starts.

codex mcp add congressmcp --env CONGRESS_API_KEY=your-api-key-here -- uvx congressmcp

Or in ~/.codex/config.toml (also read by the Codex IDE extension and the ChatGPT desktop app; project-level .codex/config.toml works in trusted projects):

[mcp_servers.congressmcp]
command = "uvx"
args = ["congressmcp"]
env_vars = ["CONGRESS_API_KEY"]   # forward from your shell — nothing secret in the file

To inline the key instead, replace the env_vars line with a [mcp_servers.congressmcp.env] table containing CONGRESS_API_KEY = "…". Check with codex mcp list or /mcp inside a session.

Global: ~/.cursor/mcp.json. Per-project: .cursor/mcp.json.

{
  "mcpServers": {
    "congressmcp": {
      "command": "uvx",
      "args": ["congressmcp"],
      "env": { "CONGRESS_API_KEY": "${env:CONGRESS_API_KEY}" }
    }
  }
}

${env:NAME} reads from your shell environment; a literal key string works too.

AI Assistant: Settings → Tools → AI Assistant → Model Context Protocol (MCP) → Add → As JSON and paste the Claude Desktop block (there's also an Import from Claude button that reads claude_desktop_config.json).

Junie: Settings → Tools → Junie → MCP Settings, which edits ~/.junie/mcp/mcp.json (global) or .junie/mcp/mcp.json (project) — same mcpServers shape.

Global ~/.config/opencode/opencode.json or project-root opencode.json / opencode.jsonc (project overrides global). OpenCode puts the command and its args in one array and calls the env map environment:

{
  "$schema": "https://opencode.ai/config.json",
  "mcp": {
    "congressmcp": {
      "type": "local",
      "command": ["uvx", "congressmcp"],
      "environment": { "CONGRESS_API_KEY": "your-api-key-here" },
      "enabled": true
    }
  }
}

There's no opencode mcp add; edit the file, then check with opencode mcp list / opencode mcp debug congressmcp. Remote servers use "type": "remote", "url": "https://<host>/mcp".

gemini mcp add -s user -e CONGRESS_API_KEY=your-api-key-here congressmcp uvx congressmcp

(-s user makes it global; the default scope is the current project.) Or in ~/.gemini/settings.json / .gemini/settings.json:

{
  "mcpServers": {
    "congressmcp": {
      "command": "uvx",
      "args": ["congressmcp"],
      "env": { "CONGRESS_API_KEY": "$CONGRESS_API_KEY" }
    }
  }
}

Claude menu → Settings… → Developer → Edit Config, or edit the file directly:

  • macOS: ~/Library/Application Support/Claude/claude_desktop_config.json

  • Windows: %APPDATA%\Claude\claude_desktop_config.json

{
  "mcpServers": {
    "congressmcp": {
      "command": "uvx",
      "args": ["congressmcp"],
      "env": { "CONGRESS_API_KEY": "your-api-key-here" }
    }
  }
}

Restart Claude Desktop. If the server doesn't appear, use the absolute path to uvx (which uvx / where uvx) — GUI apps don't always inherit your shell PATH. Logs: ~/Library/Logs/Claude/mcp*.log or %APPDATA%\Claude\logs.

Cascade panel → MCPs icon → raw config, or edit ~/.codeium/windsurf/mcp_config.json:

{
  "mcpServers": {
    "congressmcp": {
      "command": "uvx",
      "args": ["congressmcp"],
      "env": { "CONGRESS_API_KEY": "${env:CONGRESS_API_KEY}" }
    }
  }
}

Windsurf caps total tools across all servers at 100; CongressMCP registers 24 (each bundling related operations), so it fits comfortably.

Settings → AI → MCP Servers → Add Local Server, or edit settings.json (macOS ~/Library/Application Support/Zed/settings.json, Linux ~/.config/zed/settings.json, Windows %APPDATA%\Zed\settings.json; project-level .zed/settings.json):

{
  "context_servers": {
    "congressmcp": {
      "command": "uvx",
      "args": ["congressmcp"],
      "env": { "CONGRESS_API_KEY": "your-api-key-here" }
    }
  }
}

Cline: MCP Servers icon → Configure → Configure MCP Servers (opens cline_mcp_settings.json; the Cline CLI uses ~/.cline/mcp.json). Roo Code: MCP Servers → Edit Global MCP, or per-project .roo/mcp.json.

Both use the Claude Desktop shape plus a couple of client-specific fields:

{
  "mcpServers": {
    "congressmcp": {
      "command": "uvx",
      "args": ["congressmcp"],
      "env": { "CONGRESS_API_KEY": "your-api-key-here" },
      "disabled": false,
      "autoApprove": []
    }
  }
}

On Windows, Roo's docs recommend wrapping the command: "command": "cmd", "args": ["/c", "uvx", "congressmcp"].

Interactive: goose configureAdd Extension → Command-line Extension (command uvx congressmcp, then add CONGRESS_API_KEY when prompted for env vars). One-off: goose session --with-extension "CONGRESS_API_KEY=your-api-key-here uvx congressmcp". Or in ~/.config/goose/config.yaml:

extensions:
  congressmcp:
    name: congressmcp
    type: stdio
    cmd: uvx
    args: [congressmcp]
    envs: { "CONGRESS_API_KEY": "your-api-key-here" }
    enabled: true
    timeout: 300

xAI's terminal coding agent. If you already configured CongressMCP for Claude Code (~/.claude.json / .mcp.json) or Cursor (.cursor/mcp.json), Grok Build picks it up automatically — nothing more to do. Otherwise:

grok mcp add congressmcp -- uvx congressmcp      # add --scope project for .grok/config.toml

then set the key in ~/.grok/config.toml (or project .grok/config.toml):

[mcp_servers.congressmcp]
command = "uvx"
args = ["congressmcp"]
env = { CONGRESS_API_KEY = "${CONGRESS_API_KEY}" }

grok mcp list / grok mcp doctor congressmcp to verify; /mcps in a session toggles servers. Tools appear as congressmcp__<tool>.

Nous Research's Hermes Agent. ~/.hermes/config.yaml:

mcp_servers:
  congressmcp:
    command: "uvx"
    args: ["congressmcp"]
    env:
      CONGRESS_API_KEY: "${CONGRESS_API_KEY}"   # or a literal key
    enabled: true

Or hermes mcp add congressmcp --command uvx --args congressmcp and then add the env: block by hand. hermes mcp test congressmcp checks the connection; /reload-mcp in a session reloads without restarting. Tools appear as mcp__congressmcp__<tool>.

openclaw mcp add congressmcp --command uvx --arg congressmcp --env CONGRESS_API_KEY=your-api-key-here

Or under mcp.servers in ~/.openclaw/openclaw.json (JSON5, so comments and trailing commas are fine):

{
  mcp: {
    servers: {
      congressmcp: {
        command: "uvx",
        args: ["congressmcp"],
        env: { CONGRESS_API_KEY: "your-api-key-here" },
      },
    },
  },
}

openclaw mcp status / openclaw mcp probe congressmcp to verify. OpenClaw does not read mcporter's registry — use mcp.servers. For a remote server, use url with an explicit transport: "streamable-http".

~/.continue/config.yaml, or one file per server under .continue/mcpServers/ in your workspace (Continue also accepts Claude/Cursor-style JSON files dropped in that folder). MCP tools are available in agent mode.

mcpServers:
  - name: congressmcp
    type: stdio
    command: uvx
    args:
      - congressmcp
    env:
      CONGRESS_API_KEY: ${{ secrets.CONGRESS_API_KEY }}

Program tab → Install → Edit mcp.json. LM Studio follows Cursor's mcp.json format, so the Cursor block works as-is — use a literal key string rather than ${env:…}. This gives any local model that supports tool calling access to congressional data.

These clients can't launch a local process; they connect to an MCP server at a URL. Run CongressMCP in HTTP mode and give them the URL:

  • ChatGPT (Plus/Pro/Business/Enterprise/Edu, web): Settings → Security and login → Developer mode, then add a connector with your server URL. Requires a public HTTPS endpoint (or a Secure MCP Tunnel).

  • Claude.ai (web; synced to mobile): Customize → Connectors → Add custom connector (Team/Enterprise: Organization settings → Connectors). Must be reachable over the public internet.

  • Open WebUI: Admin Settings → Integrations → + Add Server → MCP (Streamable HTTP). Streamable HTTP only; it can be on your LAN.

The endpoint in every case is https://<your-host>/mcp. Most of the local clients above (OpenCode, Grok Build, Hermes, OpenClaw, Codex, Claude Code, Cursor, VS Code) can also connect to that URL instead of launching uvx — useful for sharing one install across a team.

4. Start asking questions

"Find recent climate change bills in the 119th Congress" "Where in the FY2026 NDAA is the Coast Guard's icebreaker funding?" "How did senators from California vote on the latest defense bill?" "Who are the members of the Senate Judiciary Committee?" "What's the latest action on H.R. 1234?"

Related MCP server: OpenDiscourse MCP

Remote / HTTP mode

For clients that connect by URL (ChatGPT, Claude.ai connectors, Open WebUI, or several users sharing one install), run the server over Streamable HTTP:

CONGRESS_API_KEY=your-key congressmcp --transport streamable-http --host 0.0.0.0 --port 8000
# MCP endpoint: http://<host>:8000/mcp

CongressMCP has no built-in authentication. The server is designed to run on your own machine. If you expose it beyond localhost, put it behind something that does authenticate — a reverse proxy with an access policy, an HTTPS tunnel with an allow-list, or a VPN — and remember that anyone who can reach it is spending your Congress.gov quota. ChatGPT and Claude.ai additionally require HTTPS on a publicly resolvable hostname.

Tools

7 toolsets, 90+ operations covering the Congress.gov API, plus full-text bill retrieval from GovInfo:

Toolset

Operations

What it does

Bills

15

Search, details, text, actions, amendments, cosponsors, subjects

Laws

2

Enacted public/private laws by congress (get_laws, get_law_details)

Amendments

7

Search, details, actions, sponsors, text

Treaties & Summaries

5

Treaty search, actions, committees, text; bill summaries

Members & Committees

13

Member search by name/state/district, sponsored legislation, committee bills/reports/communications

Voting & Nominations

13

House/Senate votes, nominations, roll calls

Records & Hearings

10+

Congressional Record, hearings, CRS reports, committee prints

search_committees and search_summaries take an optional keywords argument — omit it to browse/list (committees can also be filtered by chamber/committee_type).

What changed: instead of proxying API responses, CongressMCP fetches the full Bill DTD XML from GovInfo, parses it locally, builds a segment-level SQLite FTS5 index per bill version, and returns targeted, addressable bill sections instead of raw multi-megabyte XML or whole rendered bill pages. Indexes are persisted on disk and reused across calls and restarts.

Tool

What it does

search_bill_text

Searches full bill text and returns ranked addressable chunks with snippets, match_contexts, and amendatory flags

get_bill_section

Retrieves a qualified section or chunk id, with max_bytes measured against UTF-8 bytes of the returned text field

get_bill_toc

Returns a shallow navigation tree for finding section ids

No new API key is needed. GovInfo and Congress.gov both sit behind api.data.gov, so CongressMCP reuses your existing CONGRESS_API_KEY for both; set GOVINFO_API_KEY only if you want a separate GovInfo key. (People assume a second key is required. It is not.)

Where data lives. One SQLite file per bill version (<package_id>.v<N>.db, e.g. BILLS-119s1071enr.v1.db) under packages/ in the cache root, plus a small manifest.db index. The cache root is CONGRESSMCP_CACHE_DIR if set, otherwise the platform default:

Platform

Path

Linux

$XDG_CACHE_HOME/congressmcp, else ~/.cache/congressmcp

macOS

~/Library/Caches/congressmcp

Windows

%LOCALAPPDATA%\congressmcp\Cache

How much disk. Capped at 500 MB by default (CONGRESSMCP_CACHE_MAX_BYTES, bytes), enforced by least-recently-used eviction after every index write. An NDAA-scale enrolled bill (S.1071/119, 1,448 indexed units) builds an 11 MB index; most bills are far smaller. Inspect or empty the cache from the command line — it is deliberately not an MCP tool:

congressmcp cache info          # path, cap, total bytes, one line per package
congressmcp cache clear --yes   # remove every package file and the manifest

Deleting the cache directory by hand is also safe at any time; the files are a cache, not a store.

First-call latency — measured, not estimated. Cold (nothing cached) on S.1071/119: 4.1–6.8 s end to end across runs, of which congress.gov version resolution + the GovInfo package summary took 3.0–3.4 s, the XML download 1.1–2.3 s, parse 0.75 s, and the FTS5 build 0.31 s — the network legs are the slow and variable part, and they are the part the cache removes. Warm (index and version resolution cached): 30–60 ms, no network. Every response carries a timing block (resolve_ms, download_ms, parse_ms, index_ms, search_ms, total_ms; a leg is null when it did not run) and a cache block (index_hit, version_hit), so you can see which case you got. Client-timeout implication: set your MCP client's per-call timeout to at least 30 s; a cold NDAA-scale call under a slow network can exceed a 10 s default and the partial work is not lost — the next call is warm.

Offline behavior. A version you have fetched explicitly (version="enr") is fully queryable offline for as long as it stays in the cache; explicitly cached versions are re-checked against GovInfo's lastModified only every CONGRESSMCP_REVALIDATE_DAYS (30) and rebuilt if the package was reissued. With version omitted, the "latest version" answer is cached for CONGRESSMCP_VERSION_TTL (86400 s = 1 day; version_resolution: "cached"); past the TTL it is re-resolved, and if the network is unavailable the last answer is served best-effort and labelled version_resolution: "cached_offline" with the resolution timestamp and a note that a newer version may exist. If nothing is cached and the network is down you get version_resolution_unavailable, listing the versions of that bill that are cached so you can pin one.

Network egress. Exactly two hosts: api.congress.gov (bill and text-version metadata) and api.govinfo.gov (bill content). Both independently rate-limited per api.data.gov (20,000/h and 36,000/h), so indexing cannot starve the other tools.

Setting CONGRESSMCP_CACHE_ENABLED=false turns all of this off: every call re-downloads, re-parses and re-indexes the full document in memory — NDAA-scale latency, every time. It exists for diagnosis, not for normal use.

The search response distinguishes matches in operative, quoted, and header segments. If quoted appears in match_contexts, the hit may include language the bill is removing, even when operative also appears; retrieve the section before drawing conclusions about strike-and-insert language.

Each hit also carries matched_queries — the subset of your queries that produced it. Read it before reasoning about retrieval behavior: in a multi-query call it attributes every hit to its originating query, so an unexpected result is explained by the field, not by guessing at tokenizer internals.

amends resolves U.S. Code citations only (the longhand Section {sec} of title {title}, United States Code form and the shorthand {title} U.S.C. {sec} form when an amendatory verb follows). It does not resolve named Acts, including the Internal Revenue Code cited by bare section number — so most Title VII tax units report is_amendatory: true with amends: []. Use is_amendatory and match_contexts to identify amendatory text; amends is a convenience, not a completeness guarantee.

Running from source

git clone https://github.com/amurshak/congressMCP
cd congressMCP
pip install -e .

# stdio (default — for MCP clients)
CONGRESS_API_KEY=your-key congressmcp

# HTTP (for self-hosting / remote access)
CONGRESS_API_KEY=your-key congressmcp --transport streamable-http --port 8000

Point a client at a source checkout by using "command": "congressmcp" (with the venv activated or its bin/ on PATH) or "command": "/path/to/venv/bin/congressmcp" in place of uvx.

Configuration

Variable

Required

Default

Description

CONGRESS_API_KEY

Yes

Your free Congress.gov API key

GOVINFO_API_KEY

No

Optional override for GovInfo; otherwise CONGRESS_API_KEY is reused

ENABLE_CACHING

No

false

Cache API responses in memory

CACHE_TIMEOUT

No

300

Cache TTL in seconds

LOG_LEVEL

No

WARNING

Logging verbosity on stderr (DEBUG, INFO, WARNING, ERROR)

CONGRESS_API_ENV

No

local

Set to development/staging/production to load the matching .env.* file; unset loads only a plain .env. Files never override exported variables

CONGRESSMCP_BILL_TEXT_ONLY

No

unset

If truthy, register only the three bill-text tools (standalone bill-text server)

CONGRESSMCP_TRACE_DIR

No

unset

If set to a directory, write one key-redacted JSONL record per bill-text tool call (debugging)

CONGRESSMCP_CACHE_DIR

No

Platform cache path (see Full Bill Text Search)

Bill-text package cache root

CONGRESSMCP_CACHE_MAX_BYTES

No

524288000

Bill-text cache cap (500 MB); LRU eviction after each index write

CONGRESSMCP_CACHE_ENABLED

No

true

false disables the persistent cache: every call re-fetches and re-parses the full document

CONGRESSMCP_VERSION_TTL

No

86400

Seconds a version-omitted "latest version" answer is reused without asking congress.gov

CONGRESSMCP_REVALIDATE_DAYS

No

30

Days before an explicitly cached version is re-checked against GovInfo's lastModified

Cache CLI (the cache is administered from the command line, never via an MCP tool):

congressmcp cache info          # exit 0
congressmcp cache clear --yes   # exit 0; without --yes in a non-interactive shell it refuses with exit 1

Troubleshooting

  • "command not found: uvx" in a GUI client (Claude Desktop, Zed, LM Studio, JetBrains): use the absolute path from which uvx (macOS/Linux) or where uvx (Windows) as the command.

  • Windows: if a client can't spawn uvx directly, use "command": "cmd", "args": ["/c", "uvx", "congressmcp"].

  • First start is slow: uvx downloads and caches the package on first run; subsequent starts are fast. Pin a version with uvx congressmcp@2.2.0 if you want reproducibility.

  • 401 / 403 from the API: the key is missing or wrong. Confirm it works with curl "https://api.congress.gov/v3/bill?api_key=YOUR_KEY&limit=1".

  • Tools missing in the client: most clients need a restart or an explicit MCP reload after editing config.

Contributing

See CONTRIBUTING.md for the full process: fork, branch, code style, commit conventions, and how to submit a pull request.

License

Sustainable Use License


Built for government transparency and accessible civic data.

Available Tools

24 tools
amendmentsCongressional Amendments - Comprehensive amendment operationsA
Comprehensive Amendments Tool - All amendment operations in one focused interface.

CORE OPERATIONS:
• Search & Discovery: get_amendments, search_amendments
• Details & Metadata: get_amendment_details, get_amendment_sponsors
• Legislative Process: get_amendment_actions, get_amendment_amendments
• Content: get_amendment_text

SEARCH OPERATIONS:
- get_amendments: Core amendments API access with filtering
- search_amendments: filters the 250 most recently updated amendments
  by purpose/description text (client-side; not full-text search)

DETAILS OPERATIONS:
- get_amendment_details: Complete amendment information and status
- get_amendment_sponsors: Sponsor and cosponsor information

PROCESS OPERATIONS:
- get_amendment_actions: Legislative actions and history
- get_amendment_amendments: Amendments to amendments (sub-amendments)

CONTENT OPERATIONS:
- get_amendment_text: Full amendment text and purpose

REQUIRED PARAMETERS (the schema marks every parameter optional because
one shared schema covers every operation -- these operations fail
without the values below):
• congress + amendment_type + amendment_number -- get_amendment_details,
  get_amendment_sponsors, get_amendment_actions, get_amendment_amendments,
  get_amendment_text (get_amendment_text also requires congress >= 117;
  text isn't available for earlier Congresses)
(get_amendments, search_amendments need none of the above)

Args:
    operation: Specific operation to perform (see list above)
    congress: Congress number (118 for current, 119 for next)
    amendment_type: hamdt (House) or samdt (Senate)
    amendment_number: Specific amendment number within type and congress
    keywords: Search keywords for amendment content
    limit: Results limit (max 250 for API compliance)
    sort: updateDate+desc (newest first) or updateDate+asc
    fromDateTime/toDateTime: Date range (YYYY-MM-DDTHH:MM:SSZ)
    
Returns:
    Formatted results specific to requested operation
ParametersJSON Schema
NameRequiredDescriptionDefault
sortNo
limitNo
formatNo
offsetNo
congressNo
keywordsNo
operationYes
toDateTimeNo
fromDateTimeNo
amendment_typeNo
amendment_numberNo

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A4.3/5.0
Behavior4/5

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

With no annotations, the description carries the full behavioral burden and does a good job: it discloses that search_amendments is not full-text search, that the limit is capped at 250 for API compliance, that operations fail without required values due to the shared schema, and that text is unavailable before the 117th Congress. It does not cover authentication, rate limits, or offset/format behavior, but the most operation-critical behaviors are disclosed.

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

Conciseness4/5

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

The description is long but well-structured with labeled sections, bolded operation groups, and bullet lists, making the information scannable. Some content is repeated between the operations list and the required-parameters note, but the redundancy serves clarity rather than harming it.

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

Completeness4/5

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

For a complex 11-parameter, multi-operation tool, the description covers operation selection, required parameter combinations, parameter semantics, and key API constraints. The only notable gaps are format and offset semantics and lack of default limit/pagination details; otherwise an agent has enough context to invoke the tool correctly.

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?

The schema has zero descriptions for its 11 parameters, but the Args section explains 9 of them with concrete formats and allowed values, such as hamdt/samdt for amendment_type, YYYY-MM-DDTHH:MM:SSZ for dates, and updateDate+desc/asc for sort. This strongly compensates for the schema gap, though format and offset are omitted from the Args list.

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?

The description clearly identifies the resource (congressional amendments) and enumerates seven concrete operations grouped by function, such as get_amendment_details, get_amendment_actions, and get_amendment_text. This goes far beyond the title and lets an agent understand exactly what operations are available without inspecting schemas.

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

Usage Guidelines4/5

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

The description gives explicit selection criteria within the tool, including which operations require congress, amendment_type, and amendment_number, and which do not. It also flags important limitations such as search_amendments being client-side and limited to 250 amendments, and get_amendment_text requiring congress >= 117. It does not explicitly contrast with sibling tools like bills or laws, so it stops short of a 5.

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

billsCongressional Bills - Comprehensive bill operationsA
Comprehensive Bills Tool - All bill operations in one focused interface.

FLEXIBLE BILL IDENTIFICATION (NEW):
Use bill_id for natural language references like 'HR 1234',
'H.R. 1234, 118th Congress', 'hr1234-118', 'S 456', etc. Always parses
to bill_type/bill_number; parses to congress too only when the
reference embeds one (see REQUIRED PARAMETERS below).

CORE OPERATIONS:
• Search & Discovery: search_bills, get_bills, get_recent_bills
• Details & Metadata: get_bill_details, get_bill_titles, get_bill_subjects
• Text & Content: get_bill_text, get_bill_text_versions
  (for FULL bill text search/retrieval use the dedicated search_bill_text,
  get_bill_section and get_bill_toc tools)
• Summaries: get_bill_summaries
• Relationships: get_bill_related_bills, get_bill_amendments
• Legislative Process: get_bill_actions, get_bill_committees, get_bill_cosponsors
• Date-Based: get_bills_by_date_range

SEARCH_BILLS (GovInfo full-text corpus search):
search_bills searches the full text of congressional bills -- every
version of every bill in the GovInfo BILLS collection -- ranked by
relevance. Parameters: keywords (required), congress, bill_type, limit,
page_token, fromDateTime, toDateTime. It does NOT take
offset/sort/format.
- Matching semantics: words are ANDed -- every term must appear in
  the SAME document, so each added word strictly shrinks the result
  set and can never grow it. Start with the distinctive minimum: the
  fewest words that name the thing, and add terms only to cut a set
  that came back too large. Do NOT add words describing the topic,
  category, or what the bill does -- that is the natural way to
  phrase a search and the usual cause of a starved result. Worked
  example: "Radiation Exposure Compensation Act amendments
  downwinders" returns 1 bill; dropping the two description words
  returns 26, including the enacted vehicle. A small count means the
  terms rarely co-occur, NOT that few such bills exist -- re-query
  narrower before concluding anything. Synonyms do NOT broaden here:
  unlike search_bill_text, which ORs its queries array and rewards
  adding alternate phrasings, an added synonym on this path
  intersects and discards.
- Do NOT quote bill names (quoted phrases measured to miss title
  text); title:"..." / shorttitle:"..." for exact titles; OR / NOT
  available; field operators pass through.
- keywords is required: blank or whitespace-only keywords are rejected
  (invalid_parameters), never sent.
- Version discovery: each hit fronts the most authoritative matched
  version (package_id, version, date_issued) and carries
  matched_versions -- ONLY the versions whose text matched this query,
  not the bill's complete version set. For a specific bill's COMPLETE
  version set, call search_bills with fielded terms and no text words,
  e.g. keywords="congress:119 billtype:s docnumber:1071" -- that
  returns exactly the bill's versions. A pinned version that does not
  exist still answers version_not_available (bill-text tools).
- Count semantics: total_version_matches counts matching VERSION
  PACKAGES upstream and can exceed the number of distinct bills;
  results_count counts the bills actually returned in this page.
- Pagination: pass next_page_token back verbatim as page_token; null
  means the result set is exhausted. Pages can legally run short of
  limit (version-heavy pages dedup below it). A bill whose version
  records straddle a page boundary can rarely reappear on the next
  page with the same identity -- dedup by congress/bill_type/
  bill_number if walking pages.
- Fallback: when search_source is "recency_window_fallback", GovInfo
  was unavailable (read fallback_trigger) and results are a
  title/policy-area filter over the most recently updated bills, NOT
  the corpus -- a zero there is not evidence a bill does not exist;
  the window metadata says what was scanned.
- Time-bounding: fromDateTime/toDateTime bound the VERSION'S
  PUBLICATION DATE on the corpus path (inclusive both ends; either
  side may be given alone; ISO date or datetime, datetimes truncated
  to the date) -- NOT congress.gov's update date. In fallback mode
  the same bounds filter updateDate over the window instead, and the
  response says so.

REQUIRED PARAMETERS (the schema marks every parameter optional because
one shared schema covers every operation -- these operations fail
without the values below):
• congress + bill_type + bill_number -- get_bill_details,
  get_bill_titles, get_bill_subjects, get_bill_text,
  get_bill_text_versions, get_bill_summaries, get_bill_related_bills,
  get_bill_amendments, get_bill_actions, get_bill_committees,
  get_bill_cosponsors. bill_id can substitute for bill_type +
  bill_number, but only supplies congress itself when the reference
  embeds one ('hr1234-118', 'HR 1234, 118th Congress') -- a bare
  'HR 1234' still needs an explicit congress or the call fails the
  same as if bill_id were omitted entirely.
• fromDateTime -- get_bills_by_date_range
• keywords -- search_bills (see SEARCH_BILLS above)
(get_bills, get_recent_bills need none of the above)

Args:
    operation: Specific operation to perform (see list above)
    bill_id: Flexible bill reference (e.g., 'HR 1234', 'H.R. 1234, 118th Congress', 'hr1234-118')
             Parsed to populate bill_type and bill_number always, and
             congress only if the reference embeds one -- pass congress
             explicitly otherwise
    keywords: search_bills: required full-text query (see
              SEARCH_BILLS above for matching semantics)
    congress: Congress number (118 for current, 119 for next)
    bill_type: hr, s, hjres, sjres, hconres, sconres, hres, sres
    bill_number: Specific bill number within type and congress
    limit: Results limit (max 250 for API compliance)
    page_token: search_bills only -- opaque pagination cursor from a
                previous response's next_page_token, passed back verbatim
    sort: updateDate+desc (newest first) or updateDate+asc (not for
          search_bills, which is relevance-ranked)
    fromDateTime/toDateTime: Date range (YYYY-MM-DDTHH:MM:SSZ;
          search_bills: inclusive bounds on version publication date,
          see SEARCH_BILLS above)
    
Returns:
    Formatted results specific to requested operation
    
Examples:
    Using flexible bill_id (congress embedded in the reference itself):
    {"operation": "get_bill_details", "bill_id": "H.R. 1234, 118th Congress"}
    {"operation": "get_bill_details", "bill_id": "hr1234-118"}

    bill_id without an embedded congress still needs one explicitly:
    {"operation": "get_bill_details", "bill_id": "HR 1234", "congress": 118}
    
    Traditional parameters still work:
    {"operation": "get_bill_details", "congress": 118, "bill_type": "hr", "bill_number": 1234}
ParametersJSON Schema
NameRequiredDescriptionDefault
sortNo
limitNo
formatNo
offsetNo
bill_idNo
congressNo
keywordsNo
bill_typeNo
days_backNo
operationYes
page_tokenNo
toDateTimeNo
bill_numberNo
fromDateTimeNo

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A4.8/5.0
Behavior5/5

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

With no annotations provided, the description carries the full behavioral burden, and it delivers exhaustively: the recency_window_fallback mode and what a zero result means there, pagination quirks (pages can run short, bills can reappear across page boundaries, dedup advice), count semantics (total_version_matches vs results_count), date-bound semantics (version publication date, not update date), error cases (invalid_parameters, version_not_available), and AND-matching gotchas with a worked example. This is exemplary disclosure of non-obvious behavior.

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?

The structure is exemplary — clear section headers, a bullet-taxonomy of operations, a worked search example, and a trailing examples block — but the description is over-long and repeats the same bill_id-embeds-congress rule at least four times (FLEXIBLE BILL IDENTIFICATION, REQUIRED PARAMETERS, the Args section, and the Examples block). A critical rule merits emphasis, but the near-verbatim repetition inflates length without adding information; the description would be equally effective at roughly two-thirds of its length.

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 14-parameter dispatcher tool with zero annotations and a schema that provides only titles, the description covers everything needed for correct invocation: per-operation parameter requirements, exhaustive search semantics, pagination behavior, fallback semantics, date handling, and complete worked examples. An output schema exists for return values, so the terse 'Formatted results specific to requested operation' line is acceptable. Nothing an agent needs to call this tool correctly is missing.

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

Parameters5/5

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

Schema description coverage is 0%, so the description must compensate for every parameter, and it does: bill_id parsing rules with examples, congress examples (118/119), the full bill_type enumeration, limit's 250 max, page_token as an opaque verbatim cursor, sort's two allowed values, and fromDateTime/toDateTime format and meaning. It even warns that search_bills does NOT accept offset/sort/format despite those fields appearing in the schema — precisely the kind of disambiguation an agent needs when the schema is misleading.

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?

The description clearly identifies this as the comprehensive bills interface and enumerates all operations in a structured taxonomy (Search & Discovery, Details & Metadata, Text & Content, Summaries, Relationships, Legislative Process, Date-Based). It explicitly names the sibling tools that own adjacent concerns — search_bill_text, get_bill_section, get_bill_toc — so an agent can immediately tell this tool apart from its siblings without opening their schemas.

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?

The description gives explicit routing guidance: 'for FULL bill text search/retrieval use the dedicated search_bill_text, get_bill_section and get_bill_toc tools' names the alternatives directly, and the SEARCH_BILLS section contrasts this tool's AND-matching semantics against search_bill_text's OR-matching semantics to steer the choice. The REQUIRED PARAMETERS section further specifies exactly which operation needs which parameters and what fails without them, leaving no when-to-use ambiguity.

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

committee_intelligenceCongressional Committee Intelligence - Committee documents and activitiesA
Congressional Committee Intelligence - Professional access to committee documents and activities.

COMMITTEE REPORTS (7 operations):
• get_latest/by_congress/by_type, get_report_details/text_versions/content
• search_committee_reports - Advanced analytics with chunking support

COMMITTEE PRINTS (6 operations):
• get_latest/by_congress/by_chamber, get_print_details/text_versions
• search_committee_prints - Document intelligence with filtering

COMMITTEE MEETINGS (6 operations):
• get_latest/by_congress/by_chamber/by_committee, get_meeting_details
• search_committee_meetings - Process intelligence with scheduling data

REQUIRED PARAMETERS (the schema marks every parameter optional because
one shared schema covers every operation -- these operations fail
without the values below):
• congress -- get_committee_reports_by_congress,
  get_committee_prints_by_congress, get_committee_meetings_by_congress
• congress + chamber -- get_committee_prints_by_congress_and_chamber,
  get_committee_meetings_by_congress_and_chamber
• congress + report_type -- get_committee_reports_by_congress_and_type
• congress + report_type + report_number -- get_committee_report_details,
  get_committee_report_text_versions, get_committee_report_content
• congress + chamber + jacket_number -- get_committee_print_details,
  get_committee_print_text_versions
• congress + chamber + committee_code --
  get_committee_meetings_by_committee
• congress + chamber + event_id -- get_committee_meeting_details
(get_latest_committee_reports/prints/meetings and every search_*
operation need none of the above)

Key params: operation, congress, chamber, committee_code, report_type, event_id
Returns structured committee data with enhanced metadata and content chunking.
ParametersJSON Schema
NameRequiredDescriptionDefault
sortNo
limitNo
offsetNo
chamberNo
congressNo
event_idNo
keywordsNo
operationYes
chunk_sizeNo
conferenceNo
report_typeNo
chunk_numberNo
scheduled_toNo
to_date_timeNo
jacket_numberNo
report_numberNo
committee_codeNo
from_date_timeNo
scheduled_fromNo

Output Schema

ParametersJSON Schema
NameRequiredDescription
errorNoPresent when success is false: the section-9 error envelope
successYesWhether the operation was successful
summaryYesHuman-readable summary of committee intelligence
insightsNoKey insights about committee activity
operationYesThe operation that was performed
activitiesNoCommittee activity results
results_countYesNumber of items returned (equals the populated list's length)

TDQS

A3.8/5.0
Behavior3/5

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

With no annotations, the description carries the full behavioral burden. It usefully discloses the shared-schema optionality trap and that operations will fail without required values, and it notes structured returns with metadata and chunking. It does not mention side effects, permissions, rate limits, or explicitly state that the operations are read-only.

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

Conciseness4/5

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

The description is long but well-organized with clear category headings, bullet lists, and a separated REQUIRED PARAMETERS section. Each section earns its place, and critical operational guidance is front-loaded. Some repetition of operation names exists, but it remains scannable.

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

Completeness4/5

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

Given the unusual design of one shared schema over 19 operations, the description provides essential context: operation-to-parameter combinations, the fact that schema optionality is misleading, and that search/latest operations have different requirements. It does not cover value formats or deeper filtering semantics, but the output schema covers return structure and the operation guidance is strong.

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 0%, so the description must compensate. The mapping of congress, chamber, report_type, jacket_number, committee_code, and event_id to specific operations adds substantial meaning beyond the schema. It still does not define allowed values or formats for parameters like chamber, report_type, or date range fields, but the operation-dispatch guidance is highly valuable.

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

Purpose4/5

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

The description clearly identifies the tool as providing congressional committee documents and activities, and enumerates the operations by category (reports, prints, meetings). It does not explicitly distinguish itself from sibling tools such as get_committee_reports, which also deals with committee documents, so it falls short of full differentiation.

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

Usage Guidelines4/5

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

The REQUIRED PARAMETERS section gives concrete operation-to-parameter mappings and warns that operations fail without the required values, which is strong usage guidance. It also clarifies that search and latest operations need none of those parameters. However, it does not address when to choose this tool over sibling tools like get_committee_reports.

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

get_bill_sectionRetrieve the full statutory text of a bill section (GovInfo)A
Retrieve the full statutory text of a single bill section -- or an addressable sub-section
chunk -- parsed from the bill's GovInfo Bill DTD XML.

Call this after search_bill_text or get_bill_toc to read a specific section by its section_id
(e.g. "D:H/T:I/S:3501"). Fully-qualified section ids and chunk ids resolve directly; a bare
section number (e.g. "101") resolves only when it is unique across the bill. Every id
get_bill_toc returns resolves here, including structural containers such as a division,
title, or subtitle ("D:C/T:XXXI/ST:B"), which return their heading plus child descriptors
when the subtree exceeds max_bytes. The returned text
carries operative and quoted (amendatory) language in reading order; when the section is
subdivided, child chunk descriptors are included. Text is capped at max_bytes, measured as
UTF-8 encoded bytes of the returned text field, clamped to 1,000-100,000.

is_amendatory and amends describe the returned text. For a single unit they are the same
values a search_bill_text hit reports for that section_id; when the response assembles
several units (a subdivided section or a container that fit max_bytes), is_amendatory is
true if ANY included unit amends and amends is the union of their targets. When
is_amendatory is true, quoted language in text is matter the section INSERTS INTO or
STRIKES FROM existing law -- an instruction to change another statute, not a freestanding
requirement of this bill -- so present it as an amendment to the cited target, not as the
bill's own rule. Each amends entry is {kind: "usc"|"public_law", cite}. amends is citations
found, never a complete list: it resolves no named Acts, no chapter- or title-level
amendments, and no non-U.S. Code targets, so a non-empty list can still be short. A
heading-plus-children-descriptors response (subtree too large for max_bytes) reports the
addressed unit's own values; each child's text arrives labeled when fetched.
ParametersJSON Schema
NameRequiredDescriptionDefault
numberYes
versionNo
congressYes
bill_typeYes
max_bytesNo
section_idYes

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A4.6/5.0
Behavior5/5

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

With no annotations, the description fully carries the burden of behavioral transparency. It discloses critical behaviors: the max_bytes cap with clamping range, handling of structural containers (heading plus child descriptors when subtree exceeds max_bytes), the semantics of is_amendatory and amends, including the union behavior for multiple units and the limitations of amends (e.g., not resolving named Acts). It also explains how to interpret quoted language as amendatory. This is exceptionally transparent.

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

Conciseness4/5

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

The description is long but dense, with every sentence contributing technical detail essential for correct usage. It is front-loaded with the primary purpose and then systematically covers id resolution, output behavior, and amendatory interpretation. The structure is logical, though the length is substantial. Slight deduction for not using shorter paragraphs or bullet-like separation, but it's not verbose.

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?

Given the tool's complexity (multiple id types, max_bytes semantics, amendatory flags, container handling), the description is remarkably complete. It explains the return behavior, field semantics, and edge cases (e.g., non-unique bare section numbers, incomplete amends lists). Since an output schema exists, the description doesn't need to outline the full return structure, but it covers all operational nuances. This is a comprehensive description for a complex tool.

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?

The input schema has 0% description coverage, so the description must compensate. It provides detailed semantics for section_id (how IDs resolve, examples) and max_bytes (UTF-8 bytes, clamping range, effect on output). It indirectly covers congress, bill_type, and number by framing them as part of bill identification, and version is not discussed but likely self-explanatory. While not all parameters are explicitly detailed, the most complex ones are thoroughly explained, providing solid added value beyond the schema.

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?

The description opens with a specific verb and resource: 'Retrieve the full statutory text of a single bill section -- or an addressable sub-section chunk.' It clearly differentiates from sibling tools by mentioning that it should be called after search_bill_text or get_bill_toc, and describes its role in the workflow. The purpose is unambiguous and distinct.

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

Usage Guidelines4/5

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

The description explicitly states when to call this tool: 'Call this after search_bill_text or get_bill_toc to read a specific section by its section_id.' It also explains ID resolution rules (fully-qualified, chunk IDs, bare section numbers) and describes behavior for containers. While it doesn't explicitly state when NOT to use it, the usage context is clear and directs the agent appropriately. Slight deduction for lacking explicit exclusions or alternative selection guidance.

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

get_bill_tocBill statutory-text table of contents for section navigation (GovInfo)A
Get a shallow table of contents -- divisions, titles, subtitles, and sections -- for a bill's
statutory text from GovInfo, as a navigation aid for discovering the section_id values to pass
to get_bill_section or search_bill_text.

This is a navigation aid, not the answer path: it returns structure and headers, never the
statutory text itself. depth is clamped to 1-5 (default 2) and total nodes are capped at 500.

Two different things can be incomplete, and they are reported separately. depth_reduced is
true when the node cap served a shallower tree than you asked for -- compare depth against
requested_depth to see by how much. toc_truncated is true when more exists below what you
got, which includes the case where your depth was honored in full; toc_note then gives the
depth needed to reveal the rest, or says so when no depth can.
ParametersJSON Schema
NameRequiredDescriptionDefault
depthNo
numberYes
versionNo
congressYes
bill_typeYes

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A4.6/5.0
Behavior5/5

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

With no annotations, the description carries the full burden. It fully discloses that the tool returns only structure, not text; explains depth clamping (1-5, default 2), the 500-node cap, and the two distinct incompleteness signals (depth_reduced and toc_truncated) along with the toc_note for depth needed. This is exceptionally transparent and goes beyond typical tool descriptions.

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

Conciseness5/5

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

The description is a single well-structured paragraph with no fluff. Every sentence contributes essential information: purpose, alternatives, behavior on depth/node cap, and the distinction between two incompleteness flags. It is front-loaded with the main purpose and then adds nuanced detail.

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?

The tool is moderately complex with 5 parameters and an output schema. The description fully explains the tool's behavior and edge cases (depth clamping, node cap, truncation flags). The existence of an output schema reduces the need to describe return structure, but the description covers the key aspects of how to interpret the returned flags, making it complete for its role.

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

Parameters2/5

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

Schema description coverage is 0%, so the description must compensate for all five parameters. It only meaningfully describes 'depth' (default, clamp range, and its relation to depth_reduced). It does not explain 'congress', 'bill_type', 'number', or 'version', relying on standard bill-identification context. This is insufficient given the low coverage.

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?

The description clearly states the tool returns a shallow table of contents (divisions, titles, subtitles, sections) for a bill's statutory text, and explicitly distinguishes it as a navigation aid for discovering section_id values to use with get_bill_section or search_bill_text. It also contrasts with other bill-related tools by specifying it returns only structure, never the text.

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?

The description explicitly says when to use this tool (as a navigation aid) and when not to use it (not the answer path). It names the alternative tools for retrieving sections or searching text, and explains the depth and node cap behavior with flags like depth_reduced and toc_truncated, giving clear guidance on interpreting results.

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

get_committee_billsGet Committee Bills - Bills referred to or reported by a specific committeeA
Get bills referred to or reported by a specific committee.

Args:
    ctx: Context for API requests
    committee_code: Official committee code (e.g., 'hsju', 'ssju')
    chamber: Chamber of Congress ("house", "senate", or "joint").
             If omitted, inferred automatically from the committee code prefix.
    limit: Maximum number of bills to return
    offset: Starting record (0-based) for explicit paging.
    most_recent: When True (default), return the newest referrals first.
                 The endpoint is oldest-first, so this fetches the final page.

Returns:
    List of bills associated with the committee
ParametersJSON Schema
NameRequiredDescriptionDefault
limitNo
offsetNo
chamberNo
most_recentNo
committee_codeYes

Output Schema

ParametersJSON Schema
NameRequiredDescription
errorNoPresent when success is false: the section-9 error envelope
itemsNoResults of other kinds (bills, reports, communications, nominations), as returned by Congress.gov
contextYesContext about the search or operation performed
membersNoMember results
successYesWhether the operation was successful
summaryYesHuman-readable summary of the results
item_kindNoWhat `items` contains (bill, committee_report, communication, nomination, ...)
operationYesThe operation that was performed
committeesNoCommittee results
results_countYesNumber of items returned (equals the populated list's length)

TDQS

A4.3/5.0
Behavior4/5

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

With no annotations, the description carries the burden of behavioral disclosure, and it does a good job: it explains that the endpoint is oldest-first and that most_recent works by fetching the final page. It also clearly describes pagination parameters. It does not mention permissions, rate limits, or error behavior, but the core call mechanics are transparent.

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

Conciseness5/5

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

The summary line is a single, precise sentence, and the Args section is a clean bullet-style list with no filler. Every sentence contributes actionable information, and the behavioral note about most_recent is economical.

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

Completeness4/5

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

The tool has an output schema, so the return format does not need explanation, and the description covers all parameters plus a non-obvious endpoint ordering quirk. The only gap is lack of guidance on how this relates to the many similar bill/committee tools, but that is more of a usage-optimization concern than a correctness blocker.

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

Parameters5/5

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

Schema description coverage is 0%, yet the description provides meaningful semantics for every parameter: committee_code gets an example, chamber gets allowed values and inference behavior, limit/offset get paging meaning, and most_recent gets a behavioral explanation. This fully compensates for the schema's lack of parameter descriptions.

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?

The description opens with a specific verb-resource pairing: 'Get bills referred to or reported by a specific committee.' This clearly distinguishes the tool from siblings like get_committee_reports or search_bill_text while still being immediately actionable.

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

Usage Guidelines3/5

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

The description gives useful invocation details such as committee_code format, chamber auto-inference, and pagination semantics, but it does not state when to prefer this tool over alternatives or when not to use it. It is clear enough for a straightforward database lookup, but lacks explicit routing guidance among the large sibling set.

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

get_committee_communicationsGet Committee Communications - Communications received by a specific committeeA
Get communications (letters, statements) from a specific committee.

Args:
    ctx: Context for API requests
    committee_code: Official committee code (e.g., 'hsju', 'ssju')
    chamber: Chamber of Congress ("house", "senate", or "joint").
             If omitted, inferred automatically from the committee code prefix.
    limit: Maximum number of communications to return
    offset: Starting record (0-based) for explicit paging.
    most_recent: When True (default), return the newest communications first.

Returns:
    List of communications from the committee
ParametersJSON Schema
NameRequiredDescriptionDefault
limitNo
offsetNo
chamberNo
most_recentNo
committee_codeYes

Output Schema

ParametersJSON Schema
NameRequiredDescription
errorNoPresent when success is false: the section-9 error envelope
itemsNoResults of other kinds (bills, reports, communications, nominations), as returned by Congress.gov
contextYesContext about the search or operation performed
membersNoMember results
successYesWhether the operation was successful
summaryYesHuman-readable summary of the results
item_kindNoWhat `items` contains (bill, committee_report, communication, nomination, ...)
operationYesThe operation that was performed
committeesNoCommittee results
results_countYesNumber of items returned (equals the populated list's length)

TDQS

A3.9/5.0
Behavior3/5

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

No annotations are provided, so the description carries the full burden of disclosing behavior. It does disclose pagination semantics (offset is 0-based), the default ordering behavior (most_recent=True returns newest first), and automatic chamber inference. However, it does not mention potential errors, data availability limitations, or whether the operation is strictly read-only, though 'Get' implies this.

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

Conciseness4/5

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

The description is well-structured with a one-sentence purpose statement followed by a compact Args list and Returns line. Each line adds useful information, and there is no padding or repetition of the schema.

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

Completeness4/5

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

With an output schema present, the description does not need to detail return fields. It covers all five parameters, provides defaults and inference behavior, and includes a clear return description. It is sufficiently complete for an agent to invoke the tool correctly, though it could add a small note about when the committee_code format may be invalid.

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 0%, so the description must compensate. It does so by explaining committee_code with concrete examples, describing chamber inference behavior, and clarifying limit, offset, and most_recent semantics beyond the bare schema definitions. This adds real meaning to every parameter.

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?

The description states a specific verb ('Get'), a clear resource ('communications (letters, statements)'), and a specific scope ('from a specific committee'). This distinguishes it from sibling committee tools like get_committee_bills and get_committee_reports, which target different resource types.

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

Usage Guidelines3/5

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

The intended use is implied by the title and description: call this when you need communications from a specific committee. However, the description does not explicitly mention alternatives or provide when-to-use versus when-not-to-use guidance against the many sibling committee tools.

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

get_committee_nominationsGet Committee Nominations - Nominations referred to a specific committeeA
Get nominations referred to a specific committee.

Args:
    ctx: Context for API requests
    committee_code: Official committee code (e.g., 'HSJU', 'SSJU')
    limit: Maximum number of nominations to return
    offset: Starting record (0-based) for explicit paging.
    most_recent: When True (default), return the newest nominations first.

Returns:
    List of nominations referred to the committee
ParametersJSON Schema
NameRequiredDescriptionDefault
limitNo
offsetNo
most_recentNo
committee_codeYes

Output Schema

ParametersJSON Schema
NameRequiredDescription
errorNoPresent when success is false: the section-9 error envelope
itemsNoResults of other kinds (bills, reports, communications, nominations), as returned by Congress.gov
contextYesContext about the search or operation performed
membersNoMember results
successYesWhether the operation was successful
summaryYesHuman-readable summary of the results
item_kindNoWhat `items` contains (bill, committee_report, communication, nomination, ...)
operationYesThe operation that was performed
committeesNoCommittee results
results_countYesNumber of items returned (equals the populated list's length)

TDQS

A3.6/5.0
Behavior3/5

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

With no annotations, the description carries the burden of explaining behavior. It does disclose that the tool returns a list, orders by most_recent by default, and supports offset-based paging, which is useful. However, it does not explicitly state read-only/no-side-effect behavior, authentication requirements, or failure modes, though 'Get' strongly implies a read operation.

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

Conciseness4/5

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

The description is compact and well-structured with Args and Returns sections. It front-loads the core purpose and every line adds useful information, with only minor boilerplate like 'ctx' being unnecessary for an agent.

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

Completeness4/5

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

Given the low complexity, existence of an output schema, and full parameter coverage, the description provides enough context for an agent to invoke the tool correctly. It could mention how to find valid committee codes or note API limits, but those are not essential gaps.

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

Parameters5/5

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

Schema description coverage is 0%, so the description is the only source of parameter meaning. It explains committee_code with concrete examples, limit as a maximum count, offset as 0-based paging, and most_recent default sorting behavior, fully compensating for the schema's lack of descriptions.

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

Purpose4/5

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

The description clearly states the action ('Get') and the resource ('nominations referred to a specific committee'), and the title reinforces the committee scope. However, it does not explicitly differentiate itself from sibling tools like get_committee_bills or voting_and_nominations, though the resource is distinct enough.

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

Usage Guidelines2/5

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

The description provides no guidance on when to use this tool vs alternatives, no exclusions, and no mention of related tools like search_committees for finding valid committee codes. Usage context is only implied by the tool's name and description.

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

get_committee_reportsGet Committee Reports - Reports published by a specific committeeA
Get reports issued by a specific committee.

Args:
    ctx: Context for API requests
    committee_code: Official committee code (e.g., 'hsju', 'ssju')
    chamber: Chamber of Congress ("house", "senate", or "joint").
             If omitted, inferred automatically from the committee code prefix.
    limit: Maximum number of reports to return
    offset: Starting record (0-based) for explicit paging.
    most_recent: When True (default), return the newest reports first.

Returns:
    List of reports issued by the committee
ParametersJSON Schema
NameRequiredDescriptionDefault
limitNo
offsetNo
chamberNo
most_recentNo
committee_codeYes

Output Schema

ParametersJSON Schema
NameRequiredDescription
errorNoPresent when success is false: the section-9 error envelope
itemsNoResults of other kinds (bills, reports, communications, nominations), as returned by Congress.gov
contextYesContext about the search or operation performed
membersNoMember results
successYesWhether the operation was successful
summaryYesHuman-readable summary of the results
item_kindNoWhat `items` contains (bill, committee_report, communication, nomination, ...)
operationYesThe operation that was performed
committeesNoCommittee results
results_countYesNumber of items returned (equals the populated list's length)

TDQS

A4.1/5.0
Behavior4/5

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

With no annotations provided, the description carries the burden of behavioral disclosure and does so well: it explains that chamber is inferred from the committee_code prefix when omitted, that most_recent defaults to True and returns newest reports first, and that offset is zero-based for paging. These details go beyond simply saying 'get reports'.

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

Conciseness4/5

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

The description is well structured into Args and Returns, with each parameter on its own line and no unnecessary prose. The inclusion of 'ctx' is slightly extraneous, but overall the description is economical and easy to scan.

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

Completeness4/5

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

For a tool with no annotations and zero schema description coverage, the description covers all parameters, defaults, and paging behavior, while the output schema handles return expectations. The main gap is the lack of explicit guidance on when to choose this tool over the committee-related siblings, and how to discover an official committee_code if unknown.

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 0%, and the description compensates strongly by explaining every input-schema parameter: committee_code with examples, chamber values and inference, limit, offset, and most_recent's default sorting behavior. However, the description also includes a 'ctx' argument that is not present in the input schema, which is a minor inconsistency.

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?

The description opens with 'Get reports issued by a specific committee,' a specific verb and resource, and the title reinforces that these are reports published by a committee. This clearly differentiates it from sibling tools like get_committee_bills, get_committee_communications, and get_committee_nominations by naming the distinct resource type.

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

Usage Guidelines3/5

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

The description gives a clear use case but does not explicitly mention when to prefer this tool over alternatives or when not to use it. With siblings like get_committee_bills and get_committee_communications nearby, the absence of any exclusion or alternative routing leaves the usage guidance implied rather than explicit.

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

get_member_cosponsored_legislationGet Member Cosponsored Legislation - Bills and resolutions cosponsored by a memberA
Get legislation cosponsored by a specific member of Congress.

Args:
    ctx: Context for API requests
    bioguide_id: Unique bioguide identifier for the member
    limit: Maximum number of cosponsored bills to return
    offset: Zero-based offset for pagination

Returns:
    List of bills and resolutions cosponsored by the member
ParametersJSON Schema
NameRequiredDescriptionDefault
limitNo
offsetNo
bioguide_idYes

Output Schema

ParametersJSON Schema
NameRequiredDescription
errorNoPresent when success is false: the section-9 error envelope
itemsNoResults of other kinds (bills, reports, communications, nominations), as returned by Congress.gov
contextYesContext about the search or operation performed
membersNoMember results
successYesWhether the operation was successful
summaryYesHuman-readable summary of the results
item_kindNoWhat `items` contains (bill, committee_report, communication, nomination, ...)
operationYesThe operation that was performed
committeesNoCommittee results
results_countYesNumber of items returned (equals the populated list's length)

TDQS

A4.1/5.0
Behavior3/5

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

No annotations are present, so the description carries more weight. It discloses the read-only nature through the verb 'Get' and the 'Returns' section, and it exposes pagination behavior via offset and limit. However, it does not explicitly confirm no side effects, mention permissions, or describe any error/rate-limit behavior.

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

Conciseness5/5

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

The description is compact, well-organized into Args and Returns sections, and the core purpose is front-loaded in the first sentence. Every section earns its place with no filler or repetition.

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

Completeness4/5

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

For a simple read-only lookup, the description is nearly complete: all user-supplied parameters are described and the output schema covers return shape. The main gap is that it doesn't explicitly route the agent to get_member_sponsored_legislation when sponsored bills are needed, and the mention of 'ctx' might be slightly confusing since it is not in the input schema.

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

Parameters5/5

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

The input schema has 0% property descriptions, but the description fully compensates by explaining all three parameters: bioguide_id is the unique member identifier, limit is the maximum number of bills, and offset is zero-based pagination. This adds meaningful semantics beyond the raw JSON schema.

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?

The description opens with 'Get legislation cosponsored by a specific member of Congress,' which names a specific verb, resource, and scope. The use of 'cosponsored' clearly distinguishes this from sibling tool get_member_sponsored_legislation.

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

Usage Guidelines3/5

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

The description implies the tool should be used when the agent needs bills/resolutions cosponsored by a particular member, but it does not explicitly state when to use this tool versus alternatives like get_member_sponsored_legislation. There are no exclusions or when-not-to-use conditions.

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

get_member_detailsGet Member Details - Detailed information about a specific member of CongressB
Get detailed information about a specific member of Congress.

Args:
    ctx: Context for API requests
    bioguide_id: Unique bioguide identifier for the member (e.g., 'B000944')

Returns:
    Detailed member information including biographical data, terms served, etc.
ParametersJSON Schema
NameRequiredDescriptionDefault
bioguide_idYes

Output Schema

ParametersJSON Schema
NameRequiredDescription
errorNoPresent when success is false: the section-9 error envelope
itemsNoResults of other kinds (bills, reports, communications, nominations), as returned by Congress.gov
contextYesContext about the search or operation performed
membersNoMember results
successYesWhether the operation was successful
summaryYesHuman-readable summary of the results
item_kindNoWhat `items` contains (bill, committee_report, communication, nomination, ...)
operationYesThe operation that was performed
committeesNoCommittee results
results_countYesNumber of items returned (equals the populated list's length)

TDQS

B3.2/5.0
Behavior3/5

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

With no annotations, the description carries the full burden. It does disclose the return behavior ('detailed member information including biographical data, terms served, etc.') and the 'Get' verb implies a read operation. However, it does not mention error behavior, data limitations, or any other non-obvious traits.

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

Conciseness4/5

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

The description is short and organized into Args and Returns sections, making the purpose easy to scan. The inclusion of 'ctx' as an argument is unnecessary and potentially confusing, and the Returns section repeats some of the opening phrasing, but overall there is little waste.

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

Completeness3/5

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

For a one-parameter read-only tool, the description is minimally adequate and an output schema is present. However, given the large sibling list, the description would benefit from explicit guidance on when this tool is the right choice versus get_members_by_congress, search_members, or other member-related tools.

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

Parameters3/5

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

The description adds useful meaning for bioguide_id by calling it 'Unique bioguide identifier' and providing an example, which goes beyond the bare schema. However, it also lists 'ctx' as an argument even though ctx is not in the input schema, which could mislead an agent into passing an invalid parameter.

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

Purpose4/5

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

The description clearly states a specific verb and resource: 'Get detailed information about a specific member of Congress.' The phrase 'specific member' helps distinguish it from list-oriented siblings like get_members_by_state or search_members, though it does not explicitly name or contrast them.

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

Usage Guidelines2/5

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

No guidance is given about when to use this tool vs. alternatives. There is no mention of using search_members if the bioguide_id is unknown, or using get_member_sponsored_legislation for sponsored bills. The intended use is only implied by the tool name and the required parameter.

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

get_members_by_congressGet Members by Congress - All members who served in a specific CongressA
Get members who served in a specific Congress.

Args:
    ctx: Context for API requests
    congress: Congress number (e.g., 118 for 118th Congress)
    current_member: Whether to only show current members
    limit: Maximum number of members to return

Returns:
    List of members who served in the specified Congress
ParametersJSON Schema
NameRequiredDescriptionDefault
limitNo
congressYes
current_memberNo

Output Schema

ParametersJSON Schema
NameRequiredDescription
errorNoPresent when success is false: the section-9 error envelope
itemsNoResults of other kinds (bills, reports, communications, nominations), as returned by Congress.gov
contextYesContext about the search or operation performed
membersNoMember results
successYesWhether the operation was successful
summaryYesHuman-readable summary of the results
item_kindNoWhat `items` contains (bill, committee_report, communication, nomination, ...)
operationYesThe operation that was performed
committeesNoCommittee results
results_countYesNumber of items returned (equals the populated list's length)

TDQS

A3.6/5.0
Behavior2/5

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

No annotations were provided, so the description carries the full burden of behavioral disclosure. It only says it returns a list and gives basic argument explanations; it does not clarify semantics like current_member=null vs false, pagination behavior, limit bounds, or the read-only nature of the operation.

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

Conciseness4/5

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

The description is compact and front-loads the core purpose before listing arguments and return type. The Args block partially duplicates the schema, but it adds useful explanatory text rather than just restating names, so the structure is appropriate and not bloated.

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

Completeness3/5

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

With an output schema present, the return value does not need more explanation. However, with no annotations and minimal behavioral guidance, the description is only minimally complete for a three-parameter tool; missing edge-case semantics and alternative routing keep it from being fully contextual.

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 0%, so the parameter explanations in the description are valuable: congress gets an example (118), current_member is clarified as filtering to only current members, and limit is defined as a maximum. This compensates well for the schema's lack of descriptions, though it adds little about defaults, bounds, or null behavior.

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?

The description states a specific verb ('Get'), a clear resource ('members'), and a precise scope ('served in a specific Congress'). This cleanly differentiates it from sibling tools that get members by state, district, or combined congress/state/district.

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

Usage Guidelines3/5

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

The usage context is implied by the name and description: use this when you need members for a particular Congress number. However, there is no explicit guidance about when to prefer this tool over nearby siblings, nor any conditions or exclusions, so it stays at the implied level.

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

get_members_by_congress_state_districtGet Member by Congress/State/District - Specific representative for a district in a CongressA
Get the member representing a specific congressional district in a specific Congress.

Args:
    ctx: Context for API requests
    congress: Congress number (e.g., 118 for 118th Congress)
    state_code: Two-letter state code (e.g., 'CA', 'TX', 'NY')
    district: Congressional district number within the state
    current_member: Whether to only include current members (default: True)

Returns:
    Member who represented the specified district in the specified Congress
ParametersJSON Schema
NameRequiredDescriptionDefault
congressYes
districtYes
state_codeYes
current_memberNo

Output Schema

ParametersJSON Schema
NameRequiredDescription
errorNoPresent when success is false: the section-9 error envelope
itemsNoResults of other kinds (bills, reports, communications, nominations), as returned by Congress.gov
contextYesContext about the search or operation performed
membersNoMember results
successYesWhether the operation was successful
summaryYesHuman-readable summary of the results
item_kindNoWhat `items` contains (bill, committee_report, communication, nomination, ...)
operationYesThe operation that was performed
committeesNoCommittee results
results_countYesNumber of items returned (equals the populated list's length)

TDQS

A4.2/5.0
Behavior3/5

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

With no annotations, the description carries the behavioral disclosure burden. It explains the current_member filter default and states that a single member is returned, which is useful. However, it does not describe behavior when current_member is false, potential error cases, or whether historical members are included by default.

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

Conciseness4/5

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

The description is well-structured with a clear one-sentence purpose, an Args block, and a Returns line. It is efficient, though the 'ctx' entry is an implementation detail not present in the schema and adds little for the agent.

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

Completeness4/5

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

For a straightforward lookup tool with an output schema available, the description covers purpose, parameters, defaults, and the return concept. It could be more complete with explicit guidance on choosing this over sibling get_members_by_* tools, but nothing essential to making the call is missing.

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

Parameters5/5

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

Schema description coverage is 0%, but the description fully compensates by explaining each parameter: congress with an example, state_code with example values, district as the district number within the state, and current_member with its default meaning. This is exactly the added semantic value the schema lacks.

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?

The description states a specific verb ('Get'), a clear resource ('the member representing a specific congressional district in a specific Congress'), and the exact combination of filters. This clearly distinguishes it from siblings like get_members_by_congress, get_members_by_state, and get_members_by_district, which each cover only a subset of these filters.

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

Usage Guidelines4/5

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

The first sentence communicates exactly when to use this tool: when a single representative for a specific district in a specific Congress is needed. It does not explicitly contrast with sibling tools, but the precise scope and the sibling names make the intended use case clear.

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

get_members_by_districtGet Members by District - Representatives who served a specific congressional districtA
Get the member representing a specific congressional district.

Args:
    ctx: Context for API requests
    state_code: Two-letter state code (e.g., 'CA', 'TX', 'NY')
    district: Congressional district number within the state
    current_member: Whether to only show current member (defaults to True)

Returns:
    Member(s) representing the specified district
ParametersJSON Schema
NameRequiredDescriptionDefault
districtYes
state_codeYes
current_memberNo

Output Schema

ParametersJSON Schema
NameRequiredDescription
errorNoPresent when success is false: the section-9 error envelope
itemsNoResults of other kinds (bills, reports, communications, nominations), as returned by Congress.gov
contextYesContext about the search or operation performed
membersNoMember results
successYesWhether the operation was successful
summaryYesHuman-readable summary of the results
item_kindNoWhat `items` contains (bill, committee_report, communication, nomination, ...)
operationYesThe operation that was performed
committeesNoCommittee results
results_countYesNumber of items returned (equals the populated list's length)

TDQS

A3.5/5.0
Behavior3/5

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

With no annotations, the description is the only source of behavioral disclosure. It does disclose the default current-member behavior and that the result may be 'Member(s)', implying multiple historical results are possible. It does not cover edge cases, ordering, or the semantic difference between current and historical results beyond that parameter.

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

Conciseness4/5

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

The description is compact and front-loaded with a clear one-line purpose. The Returns line is largely redundant with the first sentence and output schema, but the overall structure is efficient.

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

Completeness3/5

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

The tool is simple and has an output schema, so basic invocation is covered. The missing differentiation from get_members_by_congress_state_district and the ambiguity over historical 'served' members mean an agent may not know which tool to select for a specific Congress query.

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

Parameters5/5

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

Schema coverage is 0%, but the Args section supplies the missing meaning: state_code format with examples, district scope, and current_member semantics. Every non-context parameter is explained well enough to construct a correct call.

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

Purpose4/5

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

The description opens with a specific verb and resource: getting the member for a state_code/district pair. It is not a tautology and the scope is concrete. However, it never differentiates itself from sibling get_members_by_congress_state_district or explains whether historical members are included, so it stops short of full distinction.

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

Usage Guidelines2/5

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

There is no 'when to use' vs alternatives, and no mention of the sibling tool get_members_by_congress_state_district for congress-specific queries. The only contextual signal is the current_member default, which says little about choosing this tool over get_members_by_state or get_members_by_congress. This is effectively no routing guidance.

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

get_members_by_stateGet Members by State - Current or historical representatives from a specific stateA
Get members of Congress from a specific state.

Args:
    ctx: Context for API requests
    state_code: Two-letter state code (e.g., 'CA', 'TX', 'NY')
    current_member: Whether to only show current members (defaults to True)
    limit: Maximum number of members to return

Returns:
    List of members from the specified state
ParametersJSON Schema
NameRequiredDescriptionDefault
limitNo
state_codeYes
current_memberNo

Output Schema

ParametersJSON Schema
NameRequiredDescription
errorNoPresent when success is false: the section-9 error envelope
itemsNoResults of other kinds (bills, reports, communications, nominations), as returned by Congress.gov
contextYesContext about the search or operation performed
membersNoMember results
successYesWhether the operation was successful
summaryYesHuman-readable summary of the results
item_kindNoWhat `items` contains (bill, committee_report, communication, nomination, ...)
operationYesThe operation that was performed
committeesNoCommittee results
results_countYesNumber of items returned (equals the populated list's length)

TDQS

A4.2/5.0
Behavior4/5

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

With no annotations, the description carries the behavioral burden. It explains the current_member flag's effect (only show current members, defaulting to true) and that the call returns a list, giving the agent a clear read-only mental model. It does not discuss ordering, pagination, or invalid-state handling, but for a simple list endpoint this is adequate.

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

Conciseness5/5

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

The description is tight: a one-sentence summary, a labeled Args block with one line per parameter, and a one-line Returns note. No filler or duplicated schema noise.

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

Completeness4/5

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

For a simple three-parameter tool with an output schema, all parameters and the current/historical toggle are documented. The only notable omission is guidance on when to pick this over get_members_by_district or get_members_by_congress, but the state_code resource and sibling names make the distinction mostly recoverable.

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 coverage is 0%, so the description must compensate. It does: state_code is documented as a two-letter code with examples, current_member is given meaning and its default, and limit is clarified as the maximum number of returned members. The nullable current_member behavior is not elaborated, but the core semantics are clear.

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?

States a specific verb and resource: 'Get members of Congress from a specific state.' Title adds 'Current or historical representatives,' clarifying the main filtering dimension and distinguishing it from district- or congress-scoped siblings.

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

Usage Guidelines3/5

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

The description implies it should be used when members need to be retrieved by state_code, and the current_member parameter indicates a current-vs-historical choice. However, it never names or contrasts the many sibling member-lookup tools (by district, by congress, by congress+district), leaving the agent to infer when this tool is preferred.

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

get_member_sponsored_legislationGet Member Sponsored Legislation - Bills and resolutions sponsored by a memberA
Get legislation sponsored by a specific member of Congress.

Args:
    ctx: Context for API requests
    bioguide_id: Unique bioguide identifier for the member
    limit: Maximum number of sponsored bills to return
    offset: Zero-based offset for pagination

Returns:
    List of bills and resolutions sponsored by the member
ParametersJSON Schema
NameRequiredDescriptionDefault
limitNo
offsetNo
bioguide_idYes

Output Schema

ParametersJSON Schema
NameRequiredDescription
errorNoPresent when success is false: the section-9 error envelope
itemsNoResults of other kinds (bills, reports, communications, nominations), as returned by Congress.gov
contextYesContext about the search or operation performed
membersNoMember results
successYesWhether the operation was successful
summaryYesHuman-readable summary of the results
item_kindNoWhat `items` contains (bill, committee_report, communication, nomination, ...)
operationYesThe operation that was performed
committeesNoCommittee results
results_countYesNumber of items returned (equals the populated list's length)

TDQS

A4.2/5.0
Behavior3/5

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

There are no annotations, so the description carries the behavioral disclosure burden. It communicates that this is a read-only 'Get' operation and reveals pagination behavior through the limit and offset arguments, but it does not explain ordering, scope (e.g., all congresses or current congress), or any error/limit behavior.

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

Conciseness5/5

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

The description is tightly written: a one-sentence purpose, a brief argument list, and a short return note. No filler or redundant material appears, and the key distinction is front-loaded.

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

Completeness4/5

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

For a simple paginated list tool with an output schema, the description covers the essentials: the member identifier, pagination parameters, and the return type. It could be slightly more complete by explicitly routing users away from the cosponsored sibling or noting historical scope, but nothing critical 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 0%, but the description explains all three schema parameters: bioguide_id as a unique identifier, limit as maximum number of bills, and offset as zero-based pagination. This adds meaning beyond the bare input schema, though it lacks deeper format or boundary details.

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?

The description uses a specific verb and resource: 'Get legislation sponsored by a specific member of Congress.' This clearly distinguishes it from the sibling tool get_member_cosponsored_legislation by emphasizing 'sponsored' rather than 'cosponsored.'

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

Usage Guidelines4/5

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

The description gives clear context: use this when you need bills and resolutions sponsored by a specific member. It does not explicitly name alternatives or state when not to use it, but the purpose is unambiguous and the sibling tool name reinforces the sponsored-vs-cosponsored distinction.

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

lawsCongressional Laws - Enacted public and private lawsA
Congressional Laws - enacted public and private laws (the /law endpoint).

OPERATIONS:
• get_laws: list enacted laws for a congress. Optional law_type ('pub' or
  'priv') narrows to public or private laws.
• get_law_details: full detail for one law (needs congress, law_type, law_number).

Args:
    operation: 'get_laws' or 'get_law_details'
    congress: Congress number (e.g., 119) — required
    law_type: 'pub' (public) or 'priv' (private); optional for get_laws,
              required for get_law_details
    law_number: The law's sequential number (required for get_law_details)
    limit: Max results for get_laws (default 20)
    offset: Pagination offset for get_laws

Examples:
    {"operation": "get_laws", "congress": 119}
    {"operation": "get_laws", "congress": 119, "law_type": "pub", "limit": 10}
    {"operation": "get_law_details", "congress": 119, "law_type": "pub", "law_number": 1}
ParametersJSON Schema
NameRequiredDescriptionDefault
limitNo
offsetNo
congressNo
law_typeNo
operationYes
law_numberNo

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A3.6/5.0
Behavior2/5

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

No annotations are provided, and the description does not mention whether the tool is read-only, has side effects, rate limits, or error handling. While it implies retrieval, it does not explicitly state behavioral constraints.

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

Conciseness5/5

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

The description is concise, using a title, short summary, and then structured lists for operations, arguments, and examples. No redundant information is present, and all parts are relevant.

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

Completeness4/5

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

The description covers the available operations, all parameters with their roles, and provides examples for both operations. It does not explain output structure, but given the presence of an output schema, this is not critical. However, it lacks explicit notes on edge cases or error scenarios, so it is not fully complete.

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?

The description adds meaningful context to the parameters: it specifies which parameters are required for each operation (e.g., law_number required for get_law_details), explains the default for limit, and clarifies the purpose of offset. This goes beyond the schema's bare types and defaults.

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?

The description clearly states that the tool deals with enacted public and private laws, distinguishing it from sibling tools that handle bills, amendments, etc. The operations 'get_laws' and 'get_law_details' are clearly listed, making the purpose unmistakable.

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

Usage Guidelines2/5

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

The description does not provide guidance on when to use this tool over alternatives, such as when to retrieve laws versus bills or amendments. It gives examples but no contextual usage scenarios or decision criteria.

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

records_and_hearingsCongressional Records and Hearings - Legislative records, communications, and hearingsA
Congressional Records and Hearings - Access legislative records, communications, and hearings.

CONGRESSIONAL RECORDS (3 operations):
• search_congressional_record/daily/bound - Search legislative records by date/volume

COMMUNICATIONS (8 operations):
• House: search_house_communications/requirements, get_details/matching
• Senate: search_senate_communications, get_senate_communication_details
• Committee: get_committee_communication_details

HEARINGS (5 operations):
• search_hearings, get_hearings_by_congress/chamber, get_hearing_details/content

REQUIRED PARAMETERS (the schema marks every parameter optional because
one shared schema covers every operation -- these operations fail
without the values below):
• congress -- get_hearings_by_congress
• congress + chamber -- get_hearings_by_congress_and_chamber
• congress + chamber + jacket_number -- get_hearing_details,
  get_hearing_content
• congress + communication_type + communication_number --
  get_senate_communication_details, get_house_communication_details
• congress + chamber + communication_type + communication_number --
  get_committee_communication_details
• requirement_number -- get_house_requirement_details,
  get_house_requirement_matching_communications
(search_congressional_record/daily/bound and every other search_*
operation need none of the above)

Key params: operation, year/month/day, keywords, congress, chamber, jacket_number
Returns structured record/hearing data with full text content and metadata.
ParametersJSON Schema
NameRequiredDescriptionDefault
dayNo
sortNo
yearNo
limitNo
monthNo
chamberNo
congressNo
keywordsNo
operationYes
issue_numberNo
to_date_timeNo
jacket_numberNo
volume_numberNo
from_date_timeNo
communication_typeNo
requirement_numberNo
communication_numberNo

Output Schema

ParametersJSON Schema
NameRequiredDescription
errorNoPresent when success is false: the section-9 error envelope
itemsNoResults of other kinds (communications, requirements), as returned by Congress.gov
recordsNoCongressional Record results
successYesWhether the operation was successful
summaryYesHuman-readable summary of the results
hearingsNoHearing results
item_kindNoWhat `items` contains (communication, requirement, daily_record, bound_record, ...)
operationYesThe operation that was performed
results_countYesNumber of items returned (equals the populated list's length)

TDQS

A3.8/5.0
Behavior4/5

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

With no annotations, the description carries the behavioral disclosure burden. It explains the shared-schema quirk, states that operations fail without certain values, and mentions that it returns structured record/hearing data with full text content. It does not discuss pagination, authentication, or rate limits, but the read-only nature of the operations is strongly implied by the search/get operation names.

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

Conciseness4/5

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

The description is well-structured with clear section headers and bullet lists, and the required-parameters section earns its length because it resolves a critical schema inconsistency. It is longer than ideal and contains some redundancy and ambiguous shorthand, but the complexity of a multi-operation dispatcher tool justifies most of the detail.

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

Completeness3/5

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

The description covers operation families, required parameter combinations, and return data, which is substantial for a tool with 17 params and 16 operations. However, exact operation-name derivation is not fully unambiguous from the slash notation, and several parameters remain undocumented. An agent could still struggle to construct a valid operation string with confidence.

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

Parameters3/5

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

Schema description coverage is 0%, so the description must compensate. It does map required parameter combinations to specific operations and highlights key params, which is valuable. However, several schema params (sort, limit, from_date_time, to_date_time, issue_number, volume_number) are not explained, and the slash notation leaves exact operation string values ambiguous in places.

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

Purpose4/5

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

The description clearly identifies the tool as an access point for congressional records, communications, and hearings, and enumerates the operation families. It distinguishes this tool from bill/member/committee tools by its domain focus, though the slash-separated operation shorthand (e.g., search_congressional_record/daily/bound) creates some ambiguity about exact operation names.

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

Usage Guidelines4/5

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

The description gives explicit guidance on which parameters are required for which operations, and warns that operations fail without them despite the schema marking all parameters optional. It does not explicitly route users to sibling tools, but the operation-family breakdown and required-parameter table provide strong within-tool usage direction.

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

research_and_professionalCongressional Research and Professional - CRS reports and Congress analyticsB
Congressional Research and Professional - Access CRS reports and enhanced Congress analytics.

CONGRESS INFORMATION (3 operations):
• get_congress_info - Basic Congress information and metadata
• get_congress_info_enhanced - Advanced analytics with detailed insights
• search_congresses - Historical Congress search with trend analysis

PROFESSIONAL RESEARCH (1 operation):
• search_crs_reports - CRS reports: exact report_number lookup, or a
  title filter over the 250 most recently updated reports (not full-text)

REQUIRED PARAMETERS (the schema marks every parameter optional because
one shared schema covers every operation -- these operations fail
without the values below):
• keywords -- search_congresses
• keywords or report_number (at least one) -- search_crs_reports
(get_congress_info, get_congress_info_enhanced need none of the above)

Key params: operation, congress, keywords, report_number, start_year, end_year
Returns professional-grade research data with enhanced analytics and historical insights.
ParametersJSON Schema
NameRequiredDescriptionDefault
limitNo
currentNo
congressNo
detailedNo
end_yearNo
keywordsNo
operationYes
start_yearNo
format_typeNo
report_numberNo

Output Schema

ParametersJSON Schema
NameRequiredDescription
errorNoPresent when success is false: the section-9 error envelope
successYesWhether the operation was successful
summaryYesHuman-readable summary of research results
operationYesThe operation that was performed
results_countYesNumber of items returned (equals the populated list's length)
research_materialsNoResearch materials found
recommended_readingNoRecommended follow-up reading

TDQS

B3.4/5.0
Behavior4/5

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

With no annotations, the description carries the full behavioral burden. It discloses two important non-obvious behaviors: the schema falsely marks everything optional but operations actually require specific values, and search_crs_reports only searches 'the 250 most recently updated reports (not full-text)' unless an exact report_number is provided. This is genuinely useful context beyond the schema, although it does not cover every behavioral detail.

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?

The description is well-organized with headers and bullet lists, but it contains redundant filler: the first line repeats the tool title, and 'Returns professional-grade research data with enhanced analytics and historical insights' adds no operational value. It is readable but not every sentence earns its place.

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

Completeness2/5

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

For a 10-parameter dispatcher tool with no parameter descriptions in the schema and no annotations, the description is incomplete. It gives strong operation-level routing and flags the required-parameter trap, but the semantics of most parameters remain unexplained, making correct invocation uncertain for an agent.

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

Parameters2/5

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

Schema description coverage is 0%, so the description needed to compensate, but it only explains keywords and report_number for operation selection. The 'Key params' line names congress, start_year, and end_year without saying what they mean or how they affect results, and limit, current, detailed, and format_type are never explained at all.

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

Purpose4/5

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

The description clearly identifies the tool's domain: 'Access CRS reports and enhanced Congress analytics,' then enumerates the four supported operations with one-line behavioral summaries. It effectively distinguishes the sub-operations within the tool, though it does not explicitly contrast against the many sibling congressional tools.

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

Usage Guidelines4/5

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

The REQUIRED PARAMETERS section gives concrete invocation guidance, mapping operations to the parameters they need and warning that operations 'fail without the values below.' It provides clear context for choosing between the four operations, but it never explicitly states when a sibling tool should be used instead, stopping short of a 5.

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

search_bill_textSearch a bill's full statutory text by section (GovInfo)A
Full-text search of a bill's statutory text (bill text / legislative text), parsed from
GovInfo Bill DTD XML with segment-level FTS5, returning matching sections with the
U.S. Code and Public Law citations they amend.

Use this to answer "what does bill X say about Y" without reading the whole bill.

Queries match as LITERAL PHRASES WITH STEMMING -- not bag-of-words, and not semantically.
A query hits only where the bill contains that phrase verbatim, so a description of a topic
finds nothing: "Space Force end strength" returns zero against a bill containing both "End
strengths for active forces" and "Space Force". Prefer several short phrases you expect to
appear verbatim, plus synonyms, in one call, e.g. ["icebreaker", "polar security cutter"];
matched_queries reports which phrasing produced each hit, so you can drop the dead ones next call.

A query that matches nothing gets an entry in query_diagnostics saying why, so zero hits is
readable rather than ambiguous. verdict "phrasing" means every term IS in the bill but not as
this contiguous phrase -- rephrase, do not conclude the bill is silent. verdict "absent_term"
means absent_terms appear nowhere in the bill, so no rephrasing of them will help. terms shows
the stemmed tokens actually searched ("Force" -> "forc"), which is where a phrase stops
meaning what you typed.

Knowing a provision as codified law does NOT establish where it sits in THIS bill. Division,
title, and section numbers are properties of this document, and these tools are the only
source for them -- answering a bill-location question from prior knowledge produces a
confident, correctly-quoted, wrongly-cited answer. Call the tool instead.

If "quoted" appears in match_contexts, the hit may include language the bill is removing,
even when "operative" also appears; presence of "quoted" governs. Each amends entry is
{kind: "usc"|"public_law", cite}. amends is a convenience, never a complete list of what a
section amends: it resolves no named Acts (including the IRC by bare section number), no
chapter- or title-level amendments, and no non-U.S. Code targets. A NON-EMPTY amends can
still be short -- a populated list is not evidence it is the whole list, and nothing
distinguishes three-of-three from three-of-four. Treat it as citations found, not citations
present; use is_amendatory and match_contexts to identify amendatory text, and read the
section to enumerate its targets. max_hits is clamped to 1-50.
ParametersJSON Schema
NameRequiredDescriptionDefault
numberYes
queriesYes
versionNo
congressYes
max_hitsNo
bill_typeYes

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A4.9/5.0
Behavior5/5

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

No annotations are provided, so the description carries the full burden and excels: it discloses literal-phrase-with-stemming matching, zero-hit diagnostics (verdicts 'phrasing' vs 'absent_term'), the meaning of 'quoted' in match_contexts, and the incompleteness of the amends list. It even explains stemmed tokens in 'terms'.

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

Conciseness5/5

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

The description is long but each paragraph addresses a distinct nuance: matching semantics, diagnostics, bill-location trap, quoted/amends caveats, and max_hits clamping. It is well-structured, front-loaded with the core purpose, and every sentence earns its place.

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?

Despite having an output schema, the description thoroughly covers tool behavior, query semantics, output interpretation (match_contexts, query_diagnostics, amends), and parameter constraints. It preemptively addresses edge cases and likely agent mistakes, making it complete for a complex search tool.

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?

With 0% schema description coverage, the description adds critical semantics for 'queries' (literal phrases, stemming, synonyms) and 'max_hits' (clamped 1-50). However, 'congress', 'bill_type', 'number', and 'version' are not explicitly explained, though their names and context make them reasonably clear. It partially compensates but not fully.

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?

The description opens with 'Full-text search of a bill's statutory text', a specific verb and resource, and further explains it returns matching sections with U.S. Code and Public Law citations. This clearly distinguishes it from sibling tools like get_bill_section and get_bill_toc by its retrieval modality.

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?

It explicitly states 'Use this to answer "what does bill X say about Y" without reading the whole bill', providing a clear when-to-use. It also warns 'Call the tool instead' for bill-location questions, and gives detailed query-construction advice (literal phrases, synonyms), effectively communicating when not to rely on prior knowledge.

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

search_committeesSearch Committees - Find congressional committees by chamber and typeA
Search for / browse congressional committees.

Args:
    ctx: Context for API requests
    keywords: Optional keywords to search committee information. When omitted,
              lists committees (optionally filtered by chamber/type).
    chamber: Chamber ('House', 'Senate', or 'Joint')
    committee_type: Type of committee ('Standing', 'Select', etc.)
    congress: Optional Congress number (e.g., 119)
    limit: Maximum number of committees to return

Returns:
    List of matching committees with basic information
ParametersJSON Schema
NameRequiredDescriptionDefault
limitNo
chamberNo
congressNo
keywordsNo
committee_typeNo

Output Schema

ParametersJSON Schema
NameRequiredDescription
errorNoPresent when success is false: the section-9 error envelope
itemsNoResults of other kinds (bills, reports, communications, nominations), as returned by Congress.gov
contextYesContext about the search or operation performed
membersNoMember results
successYesWhether the operation was successful
summaryYesHuman-readable summary of the results
item_kindNoWhat `items` contains (bill, committee_report, communication, nomination, ...)
operationYesThe operation that was performed
committeesNoCommittee results
results_countYesNumber of items returned (equals the populated list's length)

TDQS

A4.2/5.0
Behavior4/5

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

With no annotations provided, the description takes on the full behavioral burden. It clearly states the search-or-list behavior, optional filtering, limit semantics, and that it returns 'a list of matching committees with basic information.' It could disclose more about pagination or sorting, but the core behavior is transparent.

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

Conciseness4/5

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

The description is well structured with a front-loaded purpose sentence and a compact Args/Returns format. The only minor waste is the 'ctx: Context for API requests' line, which is not an actual schema parameter and adds little value for an MCP agent.

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

Completeness4/5

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

For a 5-parameter search tool with an output schema present, the description covers the main usage modes and return shape. It lacks detail on sort order or pagination behavior, but the existing coverage is enough for an agent to select and call the tool correctly in most cases.

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

Parameters5/5

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

Schema description coverage is 0%, so the description must compensate, and it does. Every parameter is meaningfully explained: keywords behavior, chamber examples, committee_type examples, congress example with 119, and limit as a maximum count. This substantially exceeds what the bare schema provides.

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?

The description opens with a specific action and resource: 'Search for / browse congressional committees.' The title and parameter list further clarify that it finds committees by chamber and type, which cleanly separates it from sibling tools like search_bill_text and search_members.

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

Usage Guidelines3/5

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

The description gives useful behavior guidance such as 'When omitted, lists committees (optionally filtered by chamber/type),' which clarifies search vs browse usage. However, it does not explicitly mention when not to use this tool or name any alternative tools for different committee-related tasks.

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

search_membersSearch Members of Congress - Find representatives and senators by criteriaC
Search for members of Congress by various criteria.

Args:
    ctx: Context for API requests
    name: Member name to search for (partial matches supported)
    state: State code (e.g., 'CA', 'NY', 'TX')
    party: Political party ('D', 'R', 'I')
    chamber: Chamber ('House' or 'Senate')
    congress: Congress number (e.g., 117)
    current_member: Whether to only show current members (True/False)
    limit: Maximum number of results to return
    district: District number within the state (e.g., 10)

Returns:
    Structured response with member information and metadata
ParametersJSON Schema
NameRequiredDescriptionDefault
nameNo
limitNo
partyNo
stateNo
chamberNo
congressNo
districtNo
current_memberNo

Output Schema

ParametersJSON Schema
NameRequiredDescription
errorNoPresent when success is false: the section-9 error envelope
itemsNoResults of other kinds (bills, reports, communications, nominations), as returned by Congress.gov
contextYesContext about the search or operation performed
membersNoMember results
successYesWhether the operation was successful
summaryYesHuman-readable summary of the results
item_kindNoWhat `items` contains (bill, committee_report, communication, nomination, ...)
operationYesThe operation that was performed
committeesNoCommittee results
results_countYesNumber of items returned (equals the populated list's length)

TDQS

C2.9/5.0
Behavior2/5

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

No annotations are provided, so the description carries the full burden of behavioral disclosure. It does disclose partial name matching, a current_member filter, and a limit, which is useful. However, it omits important behavior such as how criteria combine, what happens when no criteria are supplied, pagination behavior, and what 'structured response' means in practice.

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?

The Args list is mostly earn-worthy and the overall structure is readable. However, it includes 'ctx: Context for API requests', which is not an actual input parameter and adds noise. The Returns section is generic but harmless. Slightly tighter editing would improve it.

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

Completeness2/5

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

For a tool with 8 optional parameters and a large sibling family, the description is incomplete. It does not explain when to prefer this search tool over the more specialized get_members_by_* siblings, nor does it explain behavioral nuances like empty searches or result ordering. The output schema covers return shape, but routing and invocation context remain underexplained.

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?

With schema description coverage at 0%, the description must compensate, and it does: each parameter is listed with a meaningful explanation, including examples for state codes, accepted party values, chamber names, and partial name matching. This adds real value beyond the bare schema. It could be improved by clarifying whether multiple criteria are ANDed or ORed.

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

Purpose4/5

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

The description clearly identifies the tool as searching for members of Congress using a verb and resource, and the title reinforces that it finds representatives and senators by criteria. It is reasonably distinct from the sibling get_members_by_* tools, though it does not explicitly name or contrast them.

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

Usage Guidelines2/5

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

The description gives no guidance on when to use search_members versus the many sibling tools like get_members_by_congress, get_members_by_state, or get_member_details. The phrase 'by various criteria' hints at flexibility, but the agent is left to infer the intended selection logic.

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

treaties_and_summariesTreaties and Summaries - Legislative treaties and bill summariesA
Treaties and Summaries Tool - Focused access to treaties and bill summaries.

TREATIES OPERATIONS:
• Search & Discovery: search_treaties
• Legislative Process: get_treaty_actions, get_treaty_committees
• Content: get_treaty_text

SUMMARIES OPERATIONS:
• Search & Discovery: search_summaries

TREATIES:
- search_treaties: Find treaties by congress and parameters
- get_treaty_actions: Legislative actions on treaties
- get_treaty_committees: Committee assignments for treaties
- get_treaty_text: Full treaty text and resolutions

SUMMARIES:
- search_summaries: Search bill summaries by keywords and congress

REQUIRED PARAMETERS (the schema marks every parameter optional because
one shared schema covers every operation -- these operations fail
without the values below):
• congress + treaty_number -- get_treaty_actions, get_treaty_committees,
  get_treaty_text
(search_treaties, search_summaries need none of the above)

Args:
    operation: Specific operation to perform (see list above)
    congress: Congress number (118 for current, 119 for next)
    treaty_number: Specific treaty number within congress
    treaty_suffix: Treaty suffix identifier
    keywords: Search keywords for content
    topic: Topic filter for summaries
    bill_type: Bill type filter for summaries (e.g., 'hr', 's')
    limit: Results limit (max 250 for API compliance)
    sort: updateDate+desc (newest first) or updateDate+asc
    fromDateTime/toDateTime: Date range (YYYY-MM-DDTHH:MM:SSZ)
    
Returns:
    Formatted results specific to requested operation
ParametersJSON Schema
NameRequiredDescriptionDefault
sortNo
limitNo
topicNo
formatNo
offsetNo
congressNo
keywordsNo
bill_typeNo
operationYes
toDateTimeNo
fromDateTimeNo
treaty_numberNo
treaty_suffixNo

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A3.5/5.0
Behavior4/5

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

With no annotations, the description carries the full burden and does usefully disclose that the schema marks every parameter optional while certain operations fail without congress and treaty_number. It also surfaces the max limit of 250 for API compliance and sort/date format expectations. It does not address read-only status, auth, or error behavior, but it adds substantive operational context.

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?

The description is well-structured and front-loaded with purpose, but the operation list is repeated almost verbatim in the 'TREATIES OPERATIONS' and 'TREATIES/SUMMARIES' sections. This redundancy adds length without new information, though the rest of the structure is organized and scannable.

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

Completeness4/5

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

For a complex 13-parameter, multi-operation router with an output schema, the description covers the operation dispatch model, required parameter combinations, API limits, and date formats. The main gaps are unmentioned format/offset parameters and lack of sibling routing guidance, but the core calling contract is well explained.

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 0%, so the description must compensate, and the Args section defines 11 of 13 parameters with concrete meaning, including congress numbering, keyword/topic/bill_type filters, limit, and date format. It omits format and offset and is vague on treaty_suffix, but overall it provides far more parameter context than the bare schema.

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

Purpose4/5

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

The description clearly identifies the tool as focused access to treaties and bill summaries and enumerates five specific sub-operations with one-line purposes. It is distinguishable from sibling bill, law, and member tools by its domain, though the verb 'access' is somewhat generic for a multi-operation router.

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

Usage Guidelines2/5

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

The description provides operation-specific parameter requirements but gives no explicit guidance about when to prefer this tool over siblings such as search_bill_text, bills, or laws. There are no when-to-use or when-not-to-use statements relative to alternatives, leaving routing decisions to inference.

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

voting_and_nominationsCongressional Voting and Nominations - House votes and presidential nominationsA
Congressional Voting and Nominations - Access House votes and presidential nominations.

HOUSE VOTING (6 operations):
• get_house_votes_by_congress/session, get_house_vote_details/enhanced
• get_house_vote_member_votes/xml - Individual member vote records

NOMINATIONS (7 operations):
• search_nominations, get_latest_nominations, get_nomination_details
• get_nomination_actions/committees/hearings/nominees, get_nominations_by_congress

REQUIRED PARAMETERS (the schema marks every parameter optional because
one shared schema covers every operation -- these operations fail
without the values below):
• congress -- get_house_votes_by_congress, get_nominations_by_congress
• congress + session -- get_house_votes_by_session
• congress + session + vote_number -- get_house_vote_details(_enhanced),
  get_house_vote_member_votes(_xml)
• congress + nomination_number -- get_nomination_details,
  get_nomination_actions, get_nomination_committees,
  get_nomination_hearings
• congress + nomination_number + ordinal -- get_nomination_nominees
(search_nominations, get_latest_nominations need none of the above)

Key params: operation, congress, session, vote_number, keywords, nomination_number
Returns structured vote/nomination data with member details and legislative actions.
ParametersJSON Schema
NameRequiredDescriptionDefault
sortNo
limitNo
ordinalNo
sessionNo
to_dateNo
congressNo
keywordsNo
from_dateNo
operationYes
vote_numberNo
nomination_numberNo

Output Schema

ParametersJSON Schema
NameRequiredDescription
errorNoPresent when success is false: the section-9 error envelope
itemsNoResults of other kinds (per-member votes), as parsed from the source data
votesNoVote results
successYesWhether the operation was successful
summaryYesHuman-readable summary of the results
item_kindNoWhat `items` contains (member_vote, ...)
operationYesThe operation that was performed
nominationsNoNomination results
results_countYesNumber of items returned (equals the populated list's length)

TDQS

A4.2/5.0
Behavior4/5

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

With no annotations, the description carries the full burden of behavioral disclosure. It warns that the schema marks all parameters optional but operations actually fail without required values, and it explains that operations return structured vote/nomination data. This is valuable beyond the schema, though it does not cover error conditions or pagination.

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

Conciseness5/5

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

The description is long but well-structured with sections, bullet lists, and bolded categories. Every section earns its place, and the critical warning about optional-looking required parameters is prominent. The format makes the 13 operations and their parameter requirements easy to scan.

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

Completeness4/5

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

For a tool with 11 parameters and no annotations, the description provides enough operational context to select an operation and know which parameters are required. The output schema exists, so return-value details do not need to be described. Minor gaps remain around exact parameter formats and operation string values, but overall this is a complete enough definition.

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

Parameters3/5

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

Schema description coverage is 0%, so the description must compensate. It lists key parameters and maps required parameter combinations to operations, which is genuinely helpful. However, it leaves several parameters (sort, limit, from_date, to_date, keywords) without any semantic detail beyond their names.

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?

The description explicitly states the tool provides access to House votes and presidential nominations, then enumerates all 13 operations by category. This clearly distinguishes it from sibling tools focused on bills, members, committees, and treaties.

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

Usage Guidelines4/5

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

The description gives clear context for when to use the tool ('Access House votes and presidential nominations') and provides operation-specific required parameter mappings. It does not explicitly name when to prefer a sibling tool over this one, but the scope is well-defined and the operation breakdown is practical.

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

TDQS

A3.5/5.0
Disambiguation3/5

Most tools map to clearly distinct domains, but there is real overlap: committee reports and communications appear both as standalone get_committee_* tools and inside committee_intelligence/records_and_hearings. The descriptions help disambiguate, but an agent must read carefully to avoid picking the wrong path.

Naming Consistency3/5

The verb_noun tools like search_members, get_bill_toc, and get_member_details are consistent, but the composite tools use bare domain nouns like bills, amendments, laws, and voting_and_nominations. This mixed convention is readable but not uniform.

Tool Count4/5

24 top-level tools is at the high end for a general MCP server, but the composite mega-tools bundle many related operations and keep the surface manageable for a comprehensive Congress API. Without the composite design, the count would be much larger and harder to navigate.

Completeness3/5

Coverage is broad across bills, members, committees, amendments, laws, treaties, records, hearings, and nominations. However, the voting tool explicitly handles House votes only, with no Senate roll-call vote access, which is a notable gap for a server calling itself 'full'.

Maintenance

ActivityActive
ResponsivenessSyncing

Resources

Unclaimed servers have limited discoverability.

Looking for Admin?

If you are the server author, to access and configure the admin panel.

Related MCP Connectors

Related MCP Servers

  • A
    license
    Not graded
    quality
    F
    maintenance
    An MCP server for the Congress.gov API that consolidates 91 operations into 6 comprehensive legislative tools that can be used by any MCP client (i.e. Claude Desktop), or MCP-compatible AI agent, to query and reason about congressional data.
    14
    1
    JavaScript
    MIT
  • F
    license
    Not graded
    quality
    D
    maintenance
    Enables access to comprehensive U.S. legislative and governmental data from GovInfo.gov and Congress.gov APIs, including bills, Congressional records, Federal Register documents, member information, and committee activities.
    1
  • A
    license
    A
    quality
    A
    maintenance
    The most comprehensive keyless federal-data MCP server. 36 tools for SAM.gov + USAspending + Federal Register + eCFR + Grants.gov. No API key, no registration, no signup. Works in Claude Desktop, Claude Code, Codex CLI, Cursor, Continue, Gemini CLI, and any MCP-aware host.
    36
    100
    107
    6
    MIT
  • A
    license
    Not graded
    quality
    D
    maintenance
    Enables querying U.S. legislative data from Congress.gov API using MCP resources for direct lookups and tools for searching and retrieving related data.
    8
    MIT

Latest Blog Posts

MCP directory API

We provide all the information about MCP servers via our MCP API.

curl -X GET 'https://glama.ai/api/mcp/v1/servers/amurshak/congressMCP'

If you have feedback or need assistance with the MCP directory API, please join our Discord server