使用说明
项目简介
MCP网关是一个反向代理服务器,旨在为MCP客户端提供一个统一的入口来访问和管理多个后端的MCP服务器。通过该网关,客户端无需直接与每个MCP服务器交互,而是通过网关进行统一的请求转发和响应处理,从而简化了客户端的配置和管理,并支持对多个MCP服务器的集中监控和操作。
主要功能点
- 多MCP服务器部署与管理:支持通过API动态部署和管理多个MCP服务器实例,可以方便地添加、移除或重启后端MCP服务器。
- 统一入口:客户端通过单一网关地址即可访问所有后端MCP服务器,降低了客户端集成的复杂性。
- 请求转发:网关接收客户端请求后,根据请求路径或消息内容,智能地将请求转发到相应的后端MCP服务器进行处理。
- SSE流聚合:网关可以聚合来自所有后端MCP服务器的SSE(Server-Sent Events)流,为客户端提供实时的、统一的事件订阅服务。
- 工具列表聚合:支持获取所有后端MCP服务器的工具列表,方便客户端了解所有可用功能。
- 会话管理:网关支持全局会话管理,可以为客户端提供跨多个后端MCP服务器的会话上下文。
安装步骤
-
构建Docker镜像
在仓库根目录下,使用Docker命令构建镜像:
docker build -t mcp-gateway . -
运行Docker容器
使用以下命令运行构建好的Docker镜像,将容器的8080端口映射到宿主机的8080端口:
docker run -d --name mcp-gateway -p 8080:8080 mcp-gateway成功运行后,MCP网关服务器将在 'http://localhost:8080' 启动。
服务器配置
MCP网关本身并不直接提供资源、工具或Prompt模板,而是作为代理管理后端的MCP服务器。因此,配置主要用于告知网关需要管理哪些MCP服务器。
通过向网关的 '/deploy' 接口发送POST请求,可以部署和配置需要管理的MCP服务器。请求体为JSON格式,示例如下:
{ "mcpServers": { "time": { // server name,客户端使用时需要用到 "command": "uvx", // MCP 服务器的启动命令,例如 "uvx" 或 "npx"。 需要确保环境中已安装 uvx 或 npx "args": ["mcp-server-time", "--local-timezone=America/New_York"] // 启动命令的参数,根据 MCP 服务器实际情况配置 }, "weather": { // server name,客户端使用时需要用到 "url": "http://mcp-server-weather:8080" // 已运行的 MCP 服务器的 URL,如果 MCP 服务器已独立运行,可以使用 URL 方式接入 } } }
配置参数说明:
- 'mcpServers': 一个JSON对象,包含了需要部署和管理的MCP服务器的配置信息。
- 'server name': MCP服务器的名称,例如示例中的 "time" 和 "weather"。客户端在调用网关API时需要使用此名称来指定目标MCP服务器。
- 'url': (可选)已运行的MCP服务器的URL地址。如果MCP服务器已经独立运行,可以直接配置URL让网关代理请求。'url' 和 'command' 必须二选一。
- 'command': (可选)MCP服务器的启动命令。网关可以通过命令启动并管理MCP服务器进程。'command' 和 'url' 必须二选一。
- 'args': (可选)启动命令的参数,以字符串数组形式提供。根据MCP服务器的需要配置启动参数。
- 'env': (可选)环境变量,以JSON对象形式提供。可以为MCP服务器设置需要的环境变量。
- 'server name': MCP服务器的名称,例如示例中的 "time" 和 "weather"。客户端在调用网关API时需要使用此名称来指定目标MCP服务器。
配置方式:
客户端需要构造上述JSON格式的配置信息,并通过HTTP POST请求发送到 'http://localhost:8080/deploy' 接口。Content-Type设置为 'application/json'。
基本使用方法
-
部署MCP服务器
按照 服务器配置 章节的说明,通过POST请求 '/deploy' 接口部署和配置需要管理的MCP服务器。
-
直接访问MCP服务器 (通过网关)
客户端可以通过以下URL格式直接访问特定的MCP服务器:
- SSE订阅: 'http://localhost:8080/{mcp-server-name}/sse'
- 发送消息: 'http://localhost:8080/{mcp-server-name}/message' (POST 请求,消息体为 JSON-RPC 格式)
例如,要访问名为 "time" 的MCP服务器的SSE流,可以使用URL 'http://localhost:8080/time/sse'。
-
通过网关统一访问所有MCP服务器
客户端也可以通过网关的统一入口访问所有已部署的MCP服务器:
- 全局SSE订阅: 'http://localhost:8080/sse' (网关会聚合所有后端MCP服务器的SSE流)
- 全局消息: 'http://localhost:8080/message?sessionId={sessionId}' (POST 请求,消息体为 JSON-RPC 格式,需要 URL 参数 'sessionId',sessionId 通过全局SSE的 'endpoint' 事件获取)
使用全局消息接口时,需要在JSON-RPC请求的 'method' 字段前加上 '{mcpServerName}-' 前缀,以指定目标MCP服务器。例如,要调用 "time" 服务器的 "get_current_time" 工具,'method' 应设置为 '"time-tools/call"'。
获取 'sessionId': 当客户端订阅全局SSE流 ('/sse') 时,网关会首先发送一个 'endpoint' 事件,其中包含 '/message?sessionId={sessionId}' 形式的URL。客户端需要保存这个 'sessionId',并在后续调用全局消息接口时作为URL参数传递。
-
获取网关下所有工具
向 '/message' 接口发送 'tools/list' 消息,可以获取所有已部署的MCP服务器的工具列表。
POST /message HTTP/1.1 Host: localhost:8080 Content-Type: application/json { "method": "tools/list", "jsonrpc": "2.0", "id": 1 }网关会在SSE响应中返回所有工具的列表,工具名称会带有 '{mcpServerName}-' 前缀。
通过以上步骤,客户端可以方便地通过MCP网关管理和访问多个后端的MCP服务器,实现更灵活和可扩展的LLM应用架构。
信息
分类
网页与API