使用说明

项目简介

MCP Gateway 旨在解决 MCP 服务器通常为本地执行而设计的问题,它作为一个桥梁,使得可以通过 HTTP+SSE 和 REST API 访问和控制远程运行的基于 STDIO 的 MCP 服务器。这对于在容器化环境中部署 LLM 应用,并需要访问如 Puppeteer 等 MCP 服务器的场景尤其有用。

主要功能点

  • STDIO to HTTP 桥接:将基于 STDIO 协议的 MCP 服务器转换为可通过 HTTP+SSE 和 REST API 访问的服务。
  • 多实例支持:允许运行同一 MCP 服务器类型的多个实例,并进行灵活配置。
  • REST API 接口:提供 REST API 接口,方便集成到支持 OpenAPI/Swagger 规范的客户端,例如 OpenAI 的自定义 GPTs。
  • 会话管理:通过会话 ID 清晰地隔离不同客户端的服务实例,并在连接关闭时自动清理资源。
  • 安全性:支持 Basic 认证和 Bearer Token 认证,保障服务访问安全。
  • OpenAPI Schema 生成:可以为配置的所有工具生成 OpenAPI Schema,方便客户端集成。

安装步骤

  1. 确保已安装 Node.js 和 npm。
  2. 克隆仓库到本地:
    git clone https://github.com/MCP-Mirror/acehoss_mcp-gateway.git
    cd acehoss_mcp-gateway
  3. 安装项目依赖:
    npm install

服务器配置

MCP Gateway 通过 YAML 配置文件 'config.yaml' 进行配置。你需要配置 'servers' 部分来指定要桥接的 MCP 服务器。以下是一个配置示例,用于桥接一个 'filesystem' 类型的 MCP 服务器:

servers:
  filesystem: # 服务器名称,可以自定义,用于API路径
    command: npx  # 启动 MCP 服务器的命令,通常使用 npx 运行 npm 包
    args: # 传递给命令的参数列表
      - -y
      - "@modelcontextprotocol/server-filesystem" #  filesystem MCP 服务器的 npm 包名
      - "/path/to/root" #  filesystem 服务器的根路径参数,根据实际情况修改

配置说明:

  • 'servers': 配置要桥接的 MCP 服务器列表。
    • 'filesystem': 自定义的服务器名称,将用于 REST API 路径 '/api/filesystem' 和 SSE 连接路径 '/filesystem'。
      • 'command': 启动 MCP 服务器的命令,例如 'npx'。
      • 'args': 传递给 'command' 的参数列表。
        • '-y': 'npx' 的参数,用于自动确认安装 npm 包。
        • '"@modelcontextprotocol/server-filesystem"': 要运行的 MCP 服务器 npm 包,这里是文件系统服务器。
        • '"/path/to/root"': 文件系统服务器的根目录,你需要根据实际情况修改为你想让 LLM 访问的根目录。

注意: 你需要根据你要桥接的 MCP 服务器类型,修改 'args' 中的 npm 包名和服务器所需的参数。例如,如果要桥接 'git' 服务器,可以将 'args' 修改为 '["-y", "@modelcontextprotocol/server-git"]'。

基本使用方法

  1. 启动 Gateway 服务器:

    npm start

    或者指定配置文件路径启动:

    CONFIG_PATH=/path/to/my/config.yaml npm start
  2. 获取 Session ID (REST API): 使用 'curl' 或其他 HTTP 客户端发送 GET 请求到 '/api/sessionid' 接口获取会话 ID:

    curl "http://localhost:3000/api/sessionid"

    响应示例:

    {"sessionId": "<generated-id>"}
  3. 调用工具 (REST API): 使用 POST 请求调用 MCP 服务器提供的工具。URL 格式为 '/api/{serverName}/{toolName}?sessionId={session-id}'。 例如,调用 'filesystem' 服务器的 'directory_tree' 工具:

    SESSION_ID=$(curl -s "http://localhost:3000/api/sessionid" | jq -r .sessionId)
    curl -X POST "http://localhost:3000/api/filesystem/directory_tree?sessionId=$SESSION_ID" \
      -H "Content-Type: application/json" \
      -d '{"path": "/some/path"}'

    请求体 ('-d' 后面的 JSON) 需要根据工具的输入参数Schema进行构造。

  4. SSE 连接: 客户端可以通过 SSE 协议连接到 Gateway 服务器,URL 格式为 'http://localhost:3000/{serverName}'。 例如,连接到 'filesystem' 服务器的 SSE 端点: 'http://localhost:3000/filesystem'。 连接后,服务器会推送 MCP 服务器的消息到客户端,客户端也可以通过 POST 请求向 '/filesystem?sessionId={sessionId}' 发送消息。

通过 MCP Gateway,你可以方便地将本地的 STDIO MCP 服务器转换为可以通过 HTTP 访问的服务,从而在更广泛的场景中使用 MCP 协议。

信息

分类

网页与API