国会数据API服务器

一个基于Model Context Protocol (MCP)的服务器,提供对美国国会数据的访问,包括法案、议员、委员会等核心立法实体的查询和复杂操作。

  • by bsmi021
  • TypeScript
  • 本地部署
  • 8 星标
  • 更新于
在 GitHub 查看 bsmi021/mcp-congress_gov_server

使用说明



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>
    
  • 联系佩洛西议员:

    <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:使用以下命令查找实体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. 步骤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_search API不支持'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和格式化。