项目简介

mcp-gateway-go 是一个基于 Go 语言开发的网关服务,它基于 mcp-go 库构建,主要作用是将一个通过标准输入/输出 (stdio) 进行通信的 MCP 服务器,转换成可以通过 HTTP Server-Sent Events (SSE) 协议访问的接口。这使得 Web 浏览器或 AI Agent 等客户端能够通过 HTTP+SSE 与 MCP 服务器进行实时的双向通信。

简单来说,如果你已经有一个基于 stdio 的 MCP 服务器(例如使用 Node.js 开发的 '@modelcontextprotocol/server-filesystem'),但希望让 Web 应用也能方便地与之交互,那么 'mcp-gateway-go' 就是一个桥梁,它可以将 stdio 转换为 Web 应用友好的 SSE 接口。

主要功能点

  • stdio MCP 服务器支持: 通过标准输入/输出与现有的 MCP 服务器进行通信,无需修改现有 MCP 服务器的实现。
  • SSE 接口转换: 将 MCP 服务器的输出转换为 SSE 格式,实现与 Web 客户端的实时通信。
  • 命令行工具集成: 支持通过命令行启动 MCP 服务器,例如 Node.js 环境下的 MCP 服务器。
  • 自定义 Base URL: 允许设置 SSE 接口的基础 URL,方便部署和配置。
  • 会话管理: 支持 MCP 会话管理,为每个客户端连接创建独立的会话。
  • 消息代理: 负责在 HTTP SSE 客户端和 stdio MCP 服务器之间传递 JSON-RPC 消息。

安装步骤

  1. 安装 Go 环境: 确保你的系统中已经安装了 Go 语言环境。
  2. 获取项目依赖: 使用 'go get' 命令获取 'mcp-gateway-go' 及其依赖库:
    go get github.com/mark3labs/mcp-go
    go get github.com/zhengkunwang223/mcp-gateway-go

服务器配置

MCP 客户端需要配置连接的 MCP 服务器信息,这里指的是 实际提供 MCP 服务的后端服务器 的启动配置,而不是 'mcp-gateway-go' 本身。'mcp-gateway-go' 作为一个网关,需要知道如何启动并连接到后端的 MCP 服务器。

以下是一个示例配置,用于连接到一个基于 '@modelcontextprotocol/server-filesystem' 的文件系统 MCP 服务器。这个配置信息需要提供给 'mcp-gateway-go' 网关服务,让网关知道如何启动后端的 MCP 服务器。

{
  "serverName": "SSE Demo",
  "serverVersion": "1.0.0",
  "gateway": {
    "command": "npx",  // 启动 MCP 服务器的命令,这里使用 npx 执行 npm 包
    "args": [           // 命令参数
      "-y",             // npx 参数,自动确认安装包
      "@modelcontextprotocol/server-filesystem", // 要执行的 npm 包,即文件系统 MCP 服务器
      "/tmp"            // 文件系统 MCP 服务器的根目录,这里设置为 /tmp
    ],
    "baseUrl": "http://127.0.0.1:7979" // (可选) SSE 网关的基础 URL,客户端连接此地址
  }
}

配置说明:

  • '"command"': 指定启动后端 MCP 服务器的命令。例如,如果你的 MCP 服务器是通过 Node.js 编写的,并且使用 npm 包管理,那么可以使用 'npx' 或 'node' 命令来执行。
  • '"args"': 命令的参数列表。这些参数会传递给 '"command"' 指定的命令。参数需要根据你实际使用的 MCP 服务器的要求进行配置。例如,'@modelcontextprotocol/server-filesystem' 服务器需要指定一个根目录作为参数。
  • '"baseUrl"': (可选) 指定 SSE 网关服务的基础 URL。客户端将连接到这个 URL 来建立 SSE 连接和发送消息。如果未指定,则默认为 'http://127.0.0.1:7979'。

注意: 上述 JSON 配置 不是 MCP 客户端直接使用的配置。MCP 客户端通常只需要知道 SSE 网关的地址(baseUrl)。这里的配置是 'mcp-gateway-go' 网关服务 启动时需要的信息,用来启动和连接后端的 MCP 服务器。

基本使用方法

  1. 创建 'main.go' 文件: 复制仓库 'examples/main.go' 中的代码到你本地的 'main.go' 文件中。你可以根据需要修改 'mcpCommand' 中的 'Command' 和 'Args' 来配置你要连接的 MCP 服务器。

  2. 运行 'mcp-gateway-go': 在 'main.go' 文件所在的目录下,执行以下命令启动网关服务:

    go run main.go

    网关服务默认会在 'http://127.0.0.1:7979' 启动,并尝试启动你配置的 MCP 服务器。

  3. MCP 客户端连接: 使用 MCP 客户端连接到 'mcp-gateway-go' 提供的 SSE 接口地址,通常是 'http://127.0.0.1:7979/sse'。 客户端可以通过 SSE 连接接收来自 MCP 服务器的事件通知,并通过 HTTP POST 请求向 '/message' 接口发送 JSON-RPC 消息。

  4. 发送 JSON-RPC 消息: MCP 客户端需要向 'http://127.0.0.1:7979/message?sessionId={session_id}' 发送 POST 请求来与 MCP 服务器进行交互。 '{session_id}' 需要替换为建立 SSE 连接后,服务器通过 'endpoint' 事件返回的会话 ID。 请求 body 中包含符合 MCP 协议的 JSON-RPC 消息。

示例流程:

  • 客户端连接 'http://127.0.0.1:7979/sse' 建立 SSE 连接。
  • 服务器通过 SSE 连接发送 'endpoint' 事件,包含消息接口地址,例如 'http://127.0.0.1:7979/message?sessionId=xxxx'。
  • 客户端解析 'endpoint' 事件,获取消息接口地址。
  • 客户端向消息接口地址发送 POST 请求,携带 JSON-RPC 请求消息。
  • 网关将消息转发给后端的 stdio MCP 服务器。
  • 后端 MCP 服务器处理请求,并将响应通过 stdio 返回给网关。
  • 网关将响应通过 SSE 连接发送给客户端。

总结

'mcp-gateway-go' 提供了一个方便的方式,将基于 stdio 的 MCP 服务器桥接到 Web 环境,使得 Web 应用能够利用 MCP 协议提供的上下文管理和功能扩展能力。通过简单的配置和启动,即可将现有的 MCP 服务器转换为支持 SSE 实时通信的接口,降低了 Web 应用集成 MCP 服务的门槛。

信息

分类

网页与API