使用说明
Congress.gov API MCP服务器
这是一个模型上下文协议(MCP)服务器,旨在使用混合方法提供对官方Congress.gov API(v3)的访问:
- MCP资源: 用于使用标准化URI直接查找核心立法实体(法案、议员、国会、委员会、一般信息)。
- 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客户端
将MCP客户端连接到正在运行的服务器(例如,如果在本地运行,则通过stdio)。
访问资源
使用 access_mcp_resource 带有适当URI的命令/方法。
示例:
-
第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:使用以下命令查找实体ID
congress_search-
目的: 找到您需要的特定法案、成员、委员会等,并提取其唯一标识符(例如。,
memberId,或congress,billType,billNumber用于账单URI)。 -
工具:
congress_search -
例子: 查找成员“John Kennedy”(可能返回多个需要选择的结果):
<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限制!!! 按以下方式筛选常规搜索
congress使用filters参数为 不支持 由底层API(例如/v3/bill或/v3/member)并且将被忽略。国会特定过滤通常需要使用特定的API路径(例如。,/v3/bill/117),该工具没有构造。
-
-
步骤2:使用以下方法获取相关数据
congress_getSubResource-
目的: 使用步骤1中找到的标识符构建
parentUri并获取相关详细信息(操作、赞助商、文本等)。 -
工具:
congress_getSubResource -
先决条件: 你 必须 有正确的
parentUri(例如。,congress-gov://member/K000393)从步骤1开始。 -
例子: 获得会员赞助的立法
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字符串是 严格有效 为了parentUri类型(例如。,'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直接在congress_searchAPI不支持'member'集合。<use_mcp_tool> <server_name>congress-server</server_name> <tool_name>congress_search</tool_name> <arguments> { "collection": "member", "limit": 10 // Add "query" or other filters like "type" if needed } </arguments> </use_mcp_tool>
-
-
获取法案H.R.3076(第117条)的操作(需要来自搜索或已知信息的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 lint - 格式:
npm run format
代码将在通过Husky和lint-stage提交时自动进行lint和格式化。