这是一个使用混合方法提供对官方 Congress.gov API(v3)访问的 Model Context Protocol (MCP) 服务器:
congress_search)和检索相关数据列表(congress_getSubResource)。该服务器充当桥梁,允许 MCP 客户端(如AI助手或开发工具)轻松查询和利用美国立法数据。
/src: 包含所有源代码。
/config: 配置管理(ConfigurationManager.ts)。/services: 与 Congress.gov API 交互的核心逻辑(CongressApiService.ts, RateLimitService.ts)。/tools: MCP 工具定义(search/, subresource/, index.ts)。/types: TypeScript 接口和 Zod 模式。/utils: 共享实用函数(日志记录、错误处理等)。resourceHandlers.ts: 处理核心实体资源请求的逻辑。createServer.ts: 创建服务器实例,注册资源和工具。server.ts: 主应用程序入口点。/dist: 编译后的 JavaScript 输出(由 npm run build 生成)。/docs: 项目文档(PRD、特性规格、RFC)。package.json: 项目元数据和依赖项。tsconfig.json: TypeScript 编译选项。.eslintrc.json, .prettierrc.json: 代码检查和格式化规则。.env: (不提交)用于存储 CONGRESS_GOV_API_KEY。安装依赖项:
npm install
设置 API 密钥: 在项目根目录创建一个 .env 文件,并添加您的 Congress.gov API 密钥:
CONGRESS_GOV_API_KEY=YOUR_API_KEY_HERE
(从 https://api.data.gov/signup/ 获取密钥)
构建服务器:
npm run build
运行服务器:
npm start
(这会运行 node dist/server.js)
或者,使用 npm run dev 在开发模式下运行(使用 ts-node 和 nodemon)。
将您的 MCP 客户端连接到正在运行的服务器(例如,如果本地运行,则通过 stdio 连接)。
使用适当的 URI 的 access_mcp_resource 命令/方法。
示例:
获取第 117 届国会的 H.R. 3076 法案:
<access_mcp_resource>
<server_name>congress-server</server_name>
<uri>congress-gov://bill/117/hr/3076</uri>
</access_mcp_resource>
获取佩洛西议员的信息:
<access_mcp_resource>
<server_name>congress-server</server_name>
<uri>congress-gov://member/P000197</uri>
</access_mcp_resource>
获取关于第 118 届国会的信息:
<access_mcp_resource>
<server_name>congress-server</server_name>
<uri>congress-gov://congress/118</uri>
</access_mcp_resource>
获取 API 概览:
<access_mcp_resource>
<server_name>congress-server</server_name>
<uri>congress-gov://info/overview</uri>
</access_mcp_resource>
使用 use_mcp_tool 命令/方法。
!!! 关键工具工作流程:查找实体并获取相关数据 !!!
许多常见任务需要使用两个工具的强制两步过程:
步骤 1:使用 congress_search 查找实体 ID
目的: 找到您需要的具体法案、成员、委员会等,并提取其唯一标识符(例如,memberId,或法案 URI 的 congress、billType、billNumber)。
工具: congress_search
示例: 查找成员“约翰·肯尼迪”(可能会返回多个结果,需要选择):
<use_mcp_tool>
<server_name>congress-server</server_name>
<tool_name>congress_search</tool_name>
<arguments>
{
"collection": "member",
"query": "John Kennedy"
}
</arguments>
</use_mcp_tool>
输出: 查找结果中的 memberId(例如,K000393)或其他必要的标识符。
!!! 警告 !!! 搜索可能返回多个结果。您必须识别正确的实体并使用其特定 ID 进行下一步。
!!! API 限制 !!! 使用 filters 参数按 congress 过滤通用搜索(例如,对于 /v3/bill 或 /v3/member)是不受支持的,并且会被忽略。国会特定过滤通常需要使用特定的 API 路径(例如,/v3/bill/117),而此工具不会构造这些路径。
步骤 2:使用 congress_getSubResource 获取相关数据
目的: 使用在步骤 1 中找到的标识符构建 parentUri 并获取相关细节(行动、发起人、文本等)。
工具: congress_getSubResource
前提条件: 您必须有来自步骤 1 的正确 parentUri(例如,congress-gov://member/K000393)。
示例: 获取成员 K000393 发起的立法:
<use_mcp_tool>
<server_name>congress-server</server_name>
<tool_name>congress_getSubResource</tool_name>
<arguments>
{
"parentUri": "congress-gov://member/K000393",
"subResource": "sponsored-legislation",
"limit": 5
}
</arguments>
</use_mcp_tool>
!!! 错误警告 !!! 您必须使用严格的有效的 subResource 字符串(例如,成员的 'sponsored-legislation',法案的 'actions')。提供无效组合将会导致错误。请检查工具描述以获取有效组合。
遵循这个两步过程对于可靠地获取相关信息至关重要。
工具示例:
搜索包含“气候”的法案(限制为 5 条):
<use_mcp_tool>
<server_name>congress-server</server_name>
<tool_name>congress_search</tool_name>
<arguments>
{
"collection": "bill",
"query": "climate",
"limit": 5
}
</arguments>
</use_mcp_tool>
列出成员(这里无法直接过滤国会):
注意:如上所述,直接在 congress_search 中按 congress 过滤“成员”集合是不受 API 支持的。
<use_mcp_tool>
<server_name>congress-server</server_name>
<tool_name>congress_search</tool_name>
<arguments>
{
"collection": "member",
"limit": 10
// 如需其他筛选,可添加 "query" 或其他筛选条件如 "type"
}
</arguments>
</use_mcp_tool>
获取第 117 届国会 H.R. 3076 法案的行动(需要从搜索或已知信息中获得 URI):
<use_mcp_tool>
<server_name>congress-server</server_name>
<tool_name>congress_getSubResource</tool_name>
<arguments>
{
"parentUri": "congress-gov://bill/117/hr/3076",
"subResource": "actions",
"limit": 10
}
</arguments>
</use_mcp_tool>
获取成员 P000197 发起的立法:
<use_mcp_tool>
<server_name>congress-server</server_name>
<tool_name>congress_getSubResource</tool_name>
<arguments>
{
"parentUri": "congress-gov://member/P000197",
"subResource": "sponsored-legislation",
"limit": 5
}
</arguments>
</use_mcp_tool>
npm run lintnpm run format代码将在提交时通过 Husky 和 lint-staged 自动进行检查和格式化。