mcpField
C
Congress.gov API MCP Server

Congress.gov API MCP Server

本地服务
github.com/bsmi021开发工具882 周前更新

关于 Congress.gov API MCP Server

Congress.gov API MCP Server 将官方 Congress.gov API v3 接入 MCP,面向需要查询美国国会立法数据的 MCP 客户端。它结合标准 URI 资源与搜索、子资源工具,覆盖实体查找和相关数据获取。

主要功能

  1. 01查询法案、议员、国会及委员会资源
  2. 02跨集合搜索立法数据
  3. 03获取实体相关子资源
  4. 04使用标准 URI 访问核心实体

适用场景

  1. 01查找法案或议员的唯一标识
  2. 02检索法案的行动记录
  3. 03查询议员提出的立法
  4. 04读取特定届国会信息

MCP 相关

向 MCP 客户端提供 Congress.gov 数据资源,以及搜索和获取相关子资源的工具。

配置

本地服务的配置在各客户端中通用,复制后粘贴到客户端的 MCP 配置文件即可。

暂未收录安装方式

我们还没有获取到这个服务的安装包或远程地址,请按项目 README 中的说明安装。

代码仓库

工具

还没有获取到工具列表

本地服务需要在你的电脑上运行后才能读取工具,维护者暂未提供工具列表。

详细介绍

CongressMCPServer

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。

开始使用

  1. 安装依赖项:

    npm install
    
  2. 设置 API 密钥: 在项目根目录创建一个 .env 文件,并添加你的 Congress.gov API 密钥:

    CONGRESS_GOV_API_KEY=YOUR_API_KEY_HERE
    

    (从 https://api.data.gov/signup/ 获取密钥)

  3. 构建服务:

    npm run build
    
  4. 运行服务:

    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>
    
  • 获取议员 Pelosi 的信息:

    <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. 第 1 步:使用 congress_search 查找实体 ID

    • 目的: 找到所需的特定法案、议员、委员会等,并提取其唯一标识符(例如 memberId,或者法案 URI 所需的 congress、billType、billNumber)。

    • 工具: 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 限制 !!! 底层 API 不支持使用 filters 参数按 congress 过滤常规搜索(例如 /v3/bill 或 /v3/member),并且会忽略该参数。按 Congress 过滤通常需要使用特定的 API 路径(例如 /v3/bill/117),而此工具不会构造此类路径。

  2. 步骤 2:使用 congress_getSubResource 获取相关数据

    • **目的:**使用在步骤 1 中找到的标识符构造 parentUri,并获取相关详细信息(操作、提案人、文本等)。

    • 工具:congress_getSubResource

    • 前提条件:你必须拥有正确的 parentUri(例如,步骤 1 中的 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>
      
    • !!! 必定报错警告 !!! 你必须使用与 parentUri 类型严格匹配的有效 subResource 字符串(例如,议员使用 'sponsored-legislation',法案使用 'actions')。提供无效的组合将导致错误。请查看工具说明,了解有效的组合。

遵循这两个步骤对于可靠地获取相关信息至关重要。

工具示例:

  • 搜索包含“climate”的法案(限制为 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 过滤):

    • 注意:如上所述,API 不支持在 congress_search 中直接按 congress 过滤 '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 届 Congress)的操作(需要搜索结果中的 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-staged 会自动对代码进行检查和格式化。

评论

支持 Markdown

第一次接触 MCP?

从协议是什么,到在客户端里装上第一个服务,这几条回答覆盖了大多数入门问题。

一个开放协议,规定了 AI 应用如何以统一方式连接外部工具与数据源。客户端负责与模型对话,MCP 服务负责提供工具、资源和提示模板,两者通过标准消息通信,同一个服务可以被不同客户端复用。