使用说明
项目简介
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,方便客户端集成。
安装步骤
- 确保已安装 Node.js 和 npm。
- 克隆仓库到本地:
git clone https://github.com/MCP-Mirror/acehoss_mcp-gateway.git cd acehoss_mcp-gateway - 安装项目依赖:
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 访问的根目录。
- 'filesystem': 自定义的服务器名称,将用于 REST API 路径 '/api/filesystem' 和 SSE 连接路径 '/filesystem'。
注意: 你需要根据你要桥接的 MCP 服务器类型,修改 'args' 中的 npm 包名和服务器所需的参数。例如,如果要桥接 'git' 服务器,可以将 'args' 修改为 '["-y", "@modelcontextprotocol/server-git"]'。
基本使用方法
-
启动 Gateway 服务器:
npm start或者指定配置文件路径启动:
CONFIG_PATH=/path/to/my/config.yaml npm start -
获取 Session ID (REST API): 使用 'curl' 或其他 HTTP 客户端发送 GET 请求到 '/api/sessionid' 接口获取会话 ID:
curl "http://localhost:3000/api/sessionid"响应示例:
{"sessionId": "<generated-id>"} -
调用工具 (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进行构造。
-
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