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号法案:
congress-server
congress-gov://bill/117/hr/3076
- 联系佩洛西议员:
congress-server
congress-gov://member/P000197
- 获取第118届国会信息:
congress-server
congress-gov://congress/118
- 获取API概述:
congress-server
congress-gov://info/overview
使用工具
使用 use_mcp_tool 命令/方法。
!!!关键工具工作流:查找实体和获取相关数据!!!
许多常见任务需要 强制性两步流程 使用这两种工具:
- 步骤1:使用以下命令查找实体ID
congress_search
- 目的: 找到您需要的特定法案、成员、委员会等,并提取其唯一标识符(例如。, memberId,或 congress, billType, billNumber 用于账单URI)。
- 工具: congress_search
- 例子: 查找成员“John Kennedy”(可能返回多个需要选择的结果):
congress-server
congress_search
{
"collection": "member",
"query": "John Kennedy"
}
- 输出: 寻找 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:
congress-server
congress_getSubResource
{
"parentUri": "congress-gov://member/K000393",
"subResource": "sponsored-legislation",
"limit": 5
}
- !!!保证错误警告!!! 你 必须 使用一个 subResource 字符串是 严格有效 为了 parentUri 类型(例如。, 'sponsored-legislation' 对于会员, 'actions' 账单)。提供无效组合 意志 导致错误。检查工具说明中的有效组合。
遵循这两个步骤对于可靠地获取相关信息至关重要。
工具示例:
- 搜索包含“气候”的账单(限制5):
congress-server
congress_search
{
"collection": "bill",
"query": "climate",
"limit": 5
}
- 列出成员(此处无法进行国会筛选):
- *注:如上所述,过滤方式为 congress 直接在 congress_search API不支持'member'集合。*
congress-server
congress_search
{
"collection": "member",
"limit": 10
// Add "query" or other filters like "type" if needed
}
- 获取法案H.R.3076(第117条)的操作(需要来自搜索或已知信息的URI):
congress-server
congress_getSubResource
{
"parentUri": "congress-gov://bill/117/hr/3076",
"subResource": "actions",
"limit": 10
}
- 获得会员P000197赞助的立法:
congress-server
congress_getSubResource
{
"parentUri": "congress-gov://member/P000197",
"subResource": "sponsored-legislation",
"limit": 5
}
装订和格式化
- 棉绒:
npm run lint - 格式:
npm run format
代码将在通过Husky和lint-stage提交时自动进行lint和格式化。
