返回市场
MCP会议政务服务器

MCP会议政务服务器

作者:bsmi0214 星标更新:2025-06-02

项目介绍

CongressMCPServer

Congress.gov API MCP 服务器

这是一个使用混合方法提供对官方 Congress.gov API(v3)访问的 Model Context Protocol (MCP) 服务器:

  • 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-nodenodemon)。

使用 MCP 客户端

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

    • 目的: 找到您需要的具体法案、成员、委员会等,并提取其唯一标识符(例如,memberId,或法案 URI 的 congressbillTypebillNumber)。

    • 工具: 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. 步骤 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 lint
  • 格式化: npm run format

代码将在提交时通过 Husky 和 lint-staged 自动进行检查和格式化。