关于 congressgov-mcp-server
congressgov-mcp-server 为国会研究者和政策分析人员提供来自 Congress.gov 与参议院投票源的美国立法记录。它涵盖法案、议员、委员会、投票、提名和报告,并可浏览文件正文及跟踪确认程序。
主要功能
- 01浏览法案、法律和立法行动
- 02查询议员与委员会
- 03获取众议院和参议院唱名表决
- 04跟踪提名及确认程序
- 05阅读 CRS 和委员会报告
适用场景
- 01查看法案正文和立法历史
- 02核查议员提出的法案
- 03比较唱名表决中议员的立场
- 04跟进提名的参议院确认过程
MCP 相关
向 MCP 客户端提供 11 个工具、5 个资源和 2 个提示词。支持 STDIO 与 Streamable HTTP 传输。
配置
远程服务无需本地安装。选择你使用的客户端,复制配置或使用一键安装。
https://congressgov.caseyjhand.com/mcpclaude mcp add --transport http cyanheads-congressgov https://congressgov.caseyjhand.com/mcp{"mcpServers":{"cyanheads-congressgov":{"type":"http","url":"https://congressgov.caseyjhand.com/mcp"}}}在 Cursor 中打开{"servers":{"cyanheads-congressgov":{"type":"http","url":"https://congressgov.caseyjhand.com/mcp"}}}在 VS Code 中打开{"mcpServers":{"cyanheads-congressgov":{"type":"http","url":"https://congressgov.caseyjhand.com/mcp"}}}{"mcpServers":{"cyanheads-congressgov":{"serverUrl":"https://congressgov.caseyjhand.com/mcp"}}}命令在终端中运行;JSON 粘贴到对应客户端的 MCP 配置后重启。需要授权的服务会在首次连接时提示登录。
工具
10| 参数 | 类型 | 必填 | 说明 |
|---|---|---|---|
| limit | integer | 否 | 每页结果数(1-250)。 |
| order | enum | 否 | 'list' 的排序顺序(按更新时间排序)。'recent'(默认)为最新优先;'oldest' 为升序。其他操作会忽略此项。recent | oldest |
| format | enum | 否 | 'content' 的文档格式。'text' 是 GPO 的 Formatted Text,即纯文本、预格式化的打印输出,适用于所有已检查的文档。'xml' 优先使用 United States Legislative Markup,若不可用则回退到 Formatted XML;它仅存在于部分法案文本版本中,不适用于委员会报告或 Congressional Record 文章。不检索 PDF——请通过 'text'/'articles' 返回的格式 URL 读取。text | xml |
| offset | integer | 否 | 分页偏移量。 |
| billType | enum | 否 | 法案类型代码。get 和子资源操作必需。hr | s | hjres | sjres | hconres | sconres | hres | sres |
| congress | integer | 是 | 国会届次(例如 118、119)。 |
| operation | enum | 是 | 要检索的数据。list | get | actions | amendments | cosponsors | committees | subjects | summaries | text | titles | related | content |
| billNumber | any | 否 | 法案编号。get 和子资源操作必需。接受 list 行中的数字字符串形式(例如 "9479")以及数字。 |
| toDateTime | string | 否 | 日期范围筛选的结束时间(ISO 8601)。字段语义与 fromDateTime 相同。 |
| versionCode | string | 否 | 'summaries' 返回的摘要版本——即摘要行中包含的 versionCode('00' 表示提出,'49' 表示公法)。选择范围涵盖法案的整个摘要列表;Congress.gov 不提供筛选功能,之后可通过 limit/offset 对匹配行分页。省略则返回所有版本。其他操作会忽略此项。 |
| fromDateTime | string | 否 | 日期范围筛选的开始时间(ISO 8601)。按法案更新时间筛选——即 Congress.gov 上次更新记录的时间,而不是法案最近一次立法行动的时间。 |
| characterLimit | integer | 否 | 返回的最大字符数(1-100000)——适用于 'content' 的文档窗口,以及 'summaries' 中每行的摘要文本。立法文档可能超过一百万个字符,已颁布法案的摘要可能超过二十万个字符,因此两者都需要分多个窗口读取。 |
| characterOffset | integer | 否 | 要返回的第一个字符,偏移量从 0 开始——适用于 'content' 中的文档,以及 'summaries' 中每个返回行的摘要文本。偏移量精确定位,不会调整到章节或段落边界,因此传入响应中的 nextOffset(或摘要行的 textNextOffset)即可遍历全文,确保每个字符恰好返回一次。 |
| textVersionIndex | integer | 否 | 'content' 读取的文本版本,按 'text' 返回的相同顺序从 0 开始索引——0 为最新版本。其他操作会忽略此项。 |
详细介绍
@cyanheads/congressgov-mcp-server
通过 MCP 访问美国国会数据(法案、投票、议员、委员会)。支持 STDIO 或 Streamable HTTP。
概述
来自 Congress.gov 和参议院官方投票源的美国国会数据:法案、已颁布法律、议员、委员会、唱名投票、提名、国会研究处(CRS)报告和委员会报告,以及《国会记录》。浏览立法活动,阅读法案和报告正文,并追踪提名的参议院确认进程。
工具
| 工具 | 说明 |
|---|---|
congressgov_bill_lookup | 浏览和检索法案:行动、提案人、摘要、正文、相关法案 |
congressgov_enacted_laws | 按届次浏览已颁布的公法和私法 |
congressgov_member_lookup | 按州、选区或届次查找议员,并检索其立法履历 |
congressgov_committee_lookup | 浏览委员会及其立法、报告和提名 |
congressgov_roll_votes | 检索众议院和参议院的唱名投票,以及每位议员的立场 |
congressgov_senate_nominations | 浏览总统提名并追踪参议院确认进程 |
congressgov_bill_summaries | 浏览最近更新的 CRS 法案摘要 |
congressgov_crs_reports | 浏览和检索 CRS 的无党派政策报告 |
congressgov_committee_reports | 浏览和阅读随立法附上的委员会报告 |
congressgov_daily_record | 浏览和阅读每日《国会记录》 |
congressgov_search_bills | 通过本地全文镜像按关键词搜索法案标题和 CRS 摘要(可选启用) |
资源
| 资源 | 描述 |
|---|---|
congress://current | 当前国会届次、会期日期、议院信息 |
congress://bill-types | 有效法案类型代码的参考表 |
congress://member/{bioguideId} | 按 bioguide ID 查询议员简介 |
congress://bill/{congress}/{billType}/{billNumber} | 按国会届次、类型和编号查询法案详情 |
congress://committee/{committeeCode} | 按委员会代码查询委员会详情 |
法案、议员和委员会数据也可通过 congressgov_bill_lookup、congressgov_member_lookup 和 congressgov_committee_lookup(操作 get)访问,因为许多 MCP 客户端仅支持工具,不会显示资源。
提示词
| 提示词 | 描述 |
|---|---|
congressgov_bill_analysis | 用于分析法案的结构化框架 |
congressgov_legislative_research | 用于研究跨届国会某个政策领域的框架 |
功能参考
congressgov_bill_lookup 工具
list可浏览一个congress,按billType和记录更新日期的fromDateTime/toDateTime范围缩小结果;默认按最新优先排序,除非指定order: 'oldest';get、actions、amendments、cosponsors、committees、subjects、summaries、text、titles、related和content需要congress+billType+billNumber- 法案条目中的
type和number可分别用作billType和billNumber;法案类型代码不区分大小写。每个字段仅传入一个名称,因为同时提供规范键和别名键会被拒绝 content会读取textVersionIndex指定的文本版本(0 表示最新版本),并在content.text中返回一个字符窗口,同时提供totalCharacters、truncated和nextOffsetsummaries接受可选的versionCode(00表示提出版本,49表示公法版本),并像congressgov_bill_summaries一样分页,使用characterOffset/characterLimit
congressgov_enacted_laws 工具
list可浏览一个congress,并可按lawType(pub或priv)筛选;这是congressgov_bill_lookup不具备的颁布筛选条件;get需要lawType+lawNumber,可从列表条目的laws[].number(118-90)或其纯编号(90)中获取get返回起源法案记录,法案引文位于其laws[]数组中
congressgov_member_lookup 工具
- 不支持按姓名搜索:
list可按stateCode(以及district;若为单一选区,则为0,且需要stateCode)、congress和currentMember筛选 get返回指定bioguideId的议员简介(例如P000197);sponsored和cosponsored返回该议员提出或共同提出的立法
congressgov_committee_lookup 工具
committeeCode由议院前缀(h/s/j)、字母和 2 位后缀组成(例如hsju00);get、bills、reports和仅限参议院的nominations会根据前缀推断chamber- 如果
committeeCode中的委员会名称仅匹配一个委员会,则会解析该名称;否则会返回候选条目并附带提示;list搭配filter时会在范围内匹配所有委员会名称,模糊匹配结果带有approximate: true bills默认按最新优先排序(order),其条目不包含标题,因此需要为每个条目接续调用congressgov_bill_lookup的get
congressgov_roll_votes 工具
chamber可设为house(默认,Congress.gov API)或senate(参议院的 LIS 数据源);每次调用都需要congress+session(1 或 2),而get/members还需要voteNumber;该编号在每个会期重新计数,并且仅适用于一个议院list默认按最新优先排序,除非指定order: 'oldest';get返回问题、结果、票数统计和党派细分,members返回每位议员的立场- 参议院投票记录始于第 101 届国会(1989 年);参议院条目会将数据源中不含年份的
voteDate与推导出的voteDateIso配对
congressgov_senate_nominations 工具
list浏览一个congress;get、actions、committees、hearings和nominees需要nominationNumber(PN1000 对应1000),而nominees还需要get返回的nominees数组中的ordinal- 多部分提名(例如 PN851)的活动分别记录在分区子项中(
851-1、851-2等);对未分区的编号调用空子资源时,会返回指向这些子项的提示
congressgov_bill_summaries 工具
congress和billType均为可选(billType需要同时提供congress);fromDateTime/toDateTime按摘要的更新时间筛选,而非法案的行动日期;两者均省略时,默认涵盖最近 7 天- 单页在序列化字符数达到 50,000 时停止添加行(始终至少返回一行,且可通过
pagination.nextOffset继续);超过 25,000 个字符的摘要会分段返回,并附带textTotalCharacters、textTruncated和textNextOffset - 若要查看某项法案的摘要,或读完分段摘要,请使用
congressgov_bill_lookup的summaries
congressgov_crs_reports 工具
list浏览目录;get接受reportNumber,例如R40097、RL33612或IF12345id、reportId和report_id均可作为reportNumber;仅发送一个标识符键get返回作者、主题、摘要和下载格式
congressgov_committee_reports 工具
list浏览一个congress,可按reportType筛选(hrpt为众议院,srpt为参议院,erpt为行政部门);get、text和content需要reportType+reportNumberget返回引文、标题、委员会和关联法案;text列出{type, url}格式的链接,content以一个字符窗口读取报告
congressgov_daily_record 工具
- 导航流程为
list(卷)→issues(按volumeNumber)→articles(按volumeNumber+issueNumber) content以一个字符窗口读取articleIndex(从 0 开始,在期内计数)对应的文章;《国会记录》文章仅提供格式化文本和 PDF,因此format: 'xml'会因format_unavailable失败
congressgov_search_bills 工具
query对法案标题和 CRS 摘要中的关键词执行 AND 组合搜索,并可按congress、billType和originChamber缩小范围;limit为 1–100,offset用于分页- 按 BM25 排序的行包含
billId以及供congressgov_bill_lookup使用的congress/billType/billNumber,还有summaryPreview;政策领域和完整法案文本未编入索引 - 仅当
CONGRESS_MIRROR_ENABLED=true时才会列出;在bun run mirror:init建立索引之前,它会返回空结果和提示
congress://current 资源
- 当前国会届数、会期日期和两院信息,是其他查询的基准
- 公开缓存 1 小时
congress://bill-types 资源
- 8 种法案类型代码(
hr、s、hjres、sjres、hconres、sconres、hres、`sres),附带说明、所属院和引文示例 - 静态资源,不调用上游;公开缓存 24 小时
congress://member/{bioguideId} 资源
bioguideId为一个大写字母加 6 位数字(例如P000197)- 返回议员档案:姓名、州、党派、任期、领导职务、办公室和立法数量
congress://bill/{congress}/{billType}/{billNumber} 资源
congress和billNumber均为正整数;billType为 8 种法案类型代码之一- 返回法案详情:发起人、状态、政策领域、委员会和最新行动
congress://committee/{committeeCode} 资源
committeeCode由h/s/j开头,后接 3–8 个小写字母数字字符(例如hsju00);所属院由首字母确定- 返回委员会详情:名称、所属院、分委员会、历史记录和立法数量
congressgov_bill_analysis 提示词
- 参数:
congress、billType和billNumber,均为必填项 - 返回一条用户消息,按七个部分构建分析框架,从摘要到展望,并列出每个部分要调用的工具
congressgov_legislative_research 提示词
- 必填参数:
topic;可选参数:congress,默认为当前届国会 - 启用
CONGRESS_MIRROR_ENABLED时,计划以congressgov_search_bills开头;未启用时,提示词会要求提供一项种子法案、议员、委员会或 CRS 报告 ID,因为没有其他工具接受主题作为参数
功能
基于 @cyanheads/mcp-ts-core 构建:支持 stdio 和 Streamable HTTP 传输、可插拔身份验证(none / jwt / oauth)、可切换存储(in-memory、filesystem、Supabase、Cloudflare KV/R2/D1)、结构化日志记录以及可选的 OpenTelemetry 追踪。
Congress.gov 专属功能:
- 用于 Congress.gov REST API v3 的类型安全客户端,以及用于支持参议院唱名表决的参议院 LIS XML 源客户端
- Congress.gov API 不支持关键词搜索,因此工具会按国会届次、类型、日期范围、议院、州和选区浏览;列表操作支持分页,
limit为 1–250(默认值为 20),并提供offset - 法案文本、委员会报告和《国会记录》文章的
content可读取formattext(默认值)或xml,并通过characterOffset/characterLimit指定窗口(1–100,000 个字符,默认值为 25,000);仅从www.congress.gov获取内容,大小上限为 25 MB,截止时间为 30s - 可选的 api.data.gov API 密钥:
DEMO_KEY按 IP 地址每小时允许 30 次请求、每天允许 50 次;注册密钥每小时允许 5,000 次请求 - 可选择启用本地 SQLite FTS5 镜像(
CONGRESS_MIRROR_ENABLED),以便按关键词搜索法案标题和 CRS 摘要
便于 Agent 使用的输出:
- 每个列表响应都包含
effectiveQuery和totalCount;无匹配结果时会包含notice list会拒绝仅用于详情查询的标识符(billNumber、voteNumber、nominationNumber、reportNumber、volumeNumber),并返回incompatible_identity错误,指出应改用的操作content会返回offset、truncated和nextOffset,因此遍历数 MB 的法案时不会跳过或重复任何字符- 类型化错误(
document_unavailable、format_unavailable、document_fetch_failed、document_too_large、offset_past_end、not_found、rate_limited、invalid_request、upstream_error、upstream_timeout),每种错误都附带恢复提示
开始使用
公共托管实例
可使用公共实例 https://congressgov.caseyjhand.com/mcp,无需安装。该实例提供 Streamable HTTP 传输;各客户端的配置格式各不相同。
适用于 Claude Code:
claude mcp add --transport http congressgov-mcp-server https://congressgov.caseyjhand.com/mcp
适用于 Cline(cline_mcp_settings.json):
{
"mcpServers": {
"congressgov-mcp-server": {
"type": "streamableHttp",
"url": "https://congressgov.caseyjhand.com/mcp"
}
}
}
适用于 Cursor(mcp.json):
{
"mcpServers": {
"congressgov-mcp-server": {
"url": "https://congressgov.caseyjhand.com/mcp"
}
}
}
Claude Desktop 可在 Settings → Connectors 下添加远程服务。
自托管 / 本地
将以下内容添加到 MCP 客户端配置文件中。
{
"mcpServers": {
"congressgov-mcp-server": {
"type": "stdio",
"command": "bunx",
"args": ["@cyanheads/congressgov-mcp-server@latest"],
"env": {
"MCP_TRANSPORT_TYPE": "stdio",
"MCP_LOG_LEVEL": "info",
"CONGRESS_API_KEY": "your-api-key"
}
}
}
}
也可使用 npx(无需 Bun):
{
"mcpServers": {
"congressgov-mcp-server": {
"type": "stdio",
"command": "npx",
"args": ["-y", "@cyanheads/congressgov-mcp-server@latest"],
"env": {
"MCP_TRANSPORT_TYPE": "stdio",
"MCP_LOG_LEVEL": "info",
"CONGRESS_API_KEY": "your-api-key"
}
}
}
}
或使用 Docker:
{
"mcpServers": {
"congressgov-mcp-server": {
"type": "stdio",
"command": "docker",
"args": [
"run", "-i", "--rm",
"-e", "MCP_TRANSPORT_TYPE=stdio",
"-e", "CONGRESS_API_KEY=your-api-key",
"ghcr.io/cyanheads/congressgov-mcp-server:latest"
]
}
}
}
如需使用 Streamable HTTP,请设置传输方式并启动服务:
MCP_TRANSPORT_TYPE=http MCP_HTTP_PORT=3010 CONGRESS_API_KEY=your-api-key bun run start:http
# Server listens at http://localhost:3010/mcp
前提条件
- Bun v1.4.0 或更高版本(或 Node.js v24+)。
- 可选:免费的 api.data.gov key 可将请求限额从演示密钥的每小时 30 次、每个 IP 地址每天 50 次,提高到每小时 5,000 次。
安装
- 克隆代码库:
git clone https://github.com/cyanheads/congressgov-mcp-server.git
- 进入目录:
cd congressgov-mcp-server
- 安装依赖项:
bun install
- 配置环境:
cp .env.example .env
# edit .env and set CONGRESS_API_KEY (and the mirror vars, if you want keyword search)
配置
| 变量 | 说明 | 默认值 |
|---|---|---|
CONGRESS_API_KEY | 来自 api.data.gov 的 API 密钥。 | DEMO_KEY |
CONGRESS_API_BASE_URL | Congress.gov API 基础 URL。 | https://api.congress.gov/v3 |
CONGRESS_MIRROR_ENABLED | 启用本地法案搜索镜像和 congressgov_search_bills 工具。 | false |
CONGRESS_MIRROR_PATH | SQLite 镜像索引的文件系统路径。 | .mirror/bills.sqlite3 |
CONGRESS_MIRROR_REFRESH_CRON | 进程内镜像刷新的 Cron 计划(仅限 HTTP 传输)。未设置时,需自行运行 mirror:refresh。 | — |
CONGRESS_MIRROR_CONGRESSES | 要镜像的国会届次编号,以逗号分隔(例如 118,119)。 | 当前届次 + 前一届 |
MCP_TRANSPORT_TYPE | 传输方式:stdio 或 http。 | stdio |
MCP_HTTP_PORT | HTTP 服务端口。 | 3010 |
MCP_SESSION_MODE | HTTP 会话模式:stateless、stateful 或 auto;auto 将解析为 stateful。 | stateless |
MCP_AUTH_MODE | 身份验证方式:none、jwt 或 oauth。 | none |
MCP_LOG_LEVEL | 日志级别(debug、info、notice、warning、error 等)。 | info |
LOGS_DIR | 日志文件目录(仅限 Node.js)。 | <project-root>/logs |
OTEL_ENABLED | 启用 OpenTelemetry。 | false |
OTEL_EXPORTER_OTLP_ENDPOINT | 用于追踪和指标的 OTLP 基础端点。 | — |
OTEL_EXPORTER_OTLP_LOGS_ENDPOINT | 显式指定的 OTLP 日志端点;基础端点不会启用日志导出。 | — |
LOG_TOOL_FAILURE_PAYLOADS | 记录失败调用的输入和输出,并按键进行脱敏;自由格式值中的密钥不会脱敏。 | false |
LOG_TOOL_FAILURE_PAYLOAD_MAX_BYTES | 每条失败调用输入或输出记录的最大字节数。 | 16384 |
完整的可选覆盖项列表请参阅 .env.example。
运行服务
本地开发
-
构建并运行生产版本:
bun run rebuild bun run start:http # or start:stdio -
从此检出版本构建法案搜索镜像(设置
CONGRESS_MIRROR_ENABLED=true):bun run mirror:init # full build bun run mirror:refresh # incremental refresh bun run mirror:verify # readiness and integrity check镜像 CLI 需要使用此检出版本或 Docker 镜像的路径映射;npm 安装无法运行这些脚本。
-
运行检查和测试:
bun run devcheck # Lint, format, typecheck, security bun run test # Vitest test suite bun run lint:mcp # Validate MCP definitions against spec
Docker
docker build -t congressgov-mcp-server .
docker run --rm -e CONGRESS_API_KEY=your-api-key -p 3010:3010 congressgov-mcp-server
Dockerfile 默认使用 HTTP 传输、无状态会话模式,并将日志写入 /var/log/congressgov-mcp-server。默认会安装 OpenTelemetry 对等依赖;构建时添加 --build-arg OTEL_ENABLED=false 可省略这些依赖。镜像包含镜像脚本,因此 docker exec <container> bun run mirror:init 会在原地构建索引。
项目结构
| 目录 | 用途 |
|---|---|
src/index.ts | createApp() 入口:注册工具、资源和提示词,初始化服务,并安排镜像刷新。 |
src/config/ | 使用 Zod 解析并验证特定于服务的环境变量。 |
src/mcp-server/tools/ | 工具定义(definitions/*.tool.ts),以及共享的输入、格式化和摘要窗口辅助工具。 |
src/mcp-server/resources/definitions/ | 资源定义(*.resource.ts)。 |
src/mcp-server/prompts/definitions/ | 提示词定义(*.prompt.ts)。 |
src/services/congress-api/ | Congress.gov API 客户端:身份验证、分页、速率限制。 |
src/services/congress-documents/ | 有界文档文本抓取:主机白名单、字节上限、字符窗口。 |
src/services/congress-mirror/ | 本地 SQLite FTS5 法案搜索镜像:导入、规范化、模式。 |
src/services/senate-lis/ | 用于参议院唱名表决的 Senate LIS XML 客户端。 |
src/utils/ | HTML/XML 字符引用解码。 |
scripts/ | 构建、开发检查和发布工具,以及 mirror:init / mirror:refresh / mirror:verify CLI。 |
tests/ | 单元测试和集成测试,结构与 src/ 对应。 |
开发指南
有关开发指南和架构规则,请参阅 CLAUDE.md。简要来说:
- 处理器抛出异常,框架负责捕获——工具逻辑中不要使用
try/catch - 使用
ctx.log记录请求范围的日志,使用ctx.state存储租户范围的数据 - 所有工具均为只读工具,并带有
readOnlyHint: true和idempotentHint: true注解 - 封装外部 API 调用:校验原始数据 → 规范化为领域类型 → 返回输出架构;绝不伪造缺失字段
参与贡献
欢迎提交问题。提交前请运行检查和测试:
bun run devcheck
bun run test
许可证
Apache-2.0——详情请参阅 LICENSE。
评论
一个开放协议,规定了 AI 应用如何以统一方式连接外部工具与数据源。客户端负责与模型对话,MCP 服务负责提供工具、资源和提示模板,两者通过标准消息通信,同一个服务可以被不同客户端复用。