将Mcp stdio托管为SE / StreamableHTTP实现方案

全部实现子进程 spawn,桥接原有 stdio MCP 服务,不用改原有 MCP 服务代码,支持 SSE、新版 StreamableHTTP(MCP 官方单端点 HTTP‑stream),可以直接拿来做托管部署GitHub。

1️⃣ supergateway(最推荐,社区活跃度最高,Node.js)

GitHub:https://github.com/supercorp-ai/supergateway

  • ✅支持:stdio → SSE / stdio → StreamableHTTP / stdio → WebSocket,双向转换
  • ✅自动管理子进程生命周期,消息帧处理,Docker 支持,直接 npx 一键运行
  • ✅支持多客户端连接,会话管理,符合 MCP 最新规范
  • 一行命令把你的 stdio MCP 暴露成StreamableHTTP(新版官方推荐)

bash

复制代码
# 将本地stdio命令 mcp‑server 转为 StreamableHTTP,监听8000端口
npx -y supergateway \
  --stdio "python your_mcp_server.py" \
  --outputTransport streamableHttp \
  --port 8000

访问端点:POST http://127.0.0.1:8000/mcp

输出 SSE 模式:

bash

复制代码
npx -y supergateway --stdio "python your_mcp_server.py" --outputTransport sse --port 8000

SSE 端点:GET /sse,消息 POST /messages

适合:快速原型、容器部署、企业托管测试;生产注意增加鉴权(API‑Key 中间件自己叠加)

2️⃣ mcp‑proxy(Python,成熟桥接工具)

GitHub:GitHub - sparfenyuk/mcp-proxy: A bridge between Streamable HTTP and stdio MCP transports · GitHub

  • ✅Python 实现;支持双向:stdio ↔ SSE / StreamableHTTP
  • ✅支持配置文件、docker‑compose 部署、会话管理
  • 安装

bash

复制代码
pip install mcp-proxy

注意:这个项目有两个同名仓库,认准 knaou/mcp‑proxy;另一款是 SSE→stdio(客户端侧),不要混淆。

3️⃣ mcpgate(Rust,单二进制网关,企业级多后端)

GitHub:https://github.com/mokeyish/mcpgate

  • ✅Rust编译单二进制,无运行时依赖;支持配置文件定义多个 stdio 后端 MCP 服务
  • ✅对外统一暴露 SSE / StreamableHTTP,多客户端接入
  • ✅支持进程管理、健康检查、docker,适合 K8s 部署
  • 通过config.json配置多个 stdio MCP 服务,网关对外统一提供网络 transport。

4️⃣ mcp‑stdio‑bridge(Python,生产向网关)

GitHub:https://github.com/hackagadget/mcp-stdio-bridge

  • ✅YAML 配置、配置热重载、完整测试用例,健壮的子进程管理、stderr 日志捕获
  • ✅仅做桥接:任意 stdio 可执行 MCP → SSE;支持 docker 镜像 amd64/arm64。

5️⃣ IBM mcpgateway.translate(IBM 官方开源工具)

文档:https://ibm.github.io/mcp-context-forge/using/mcpgateway-translate/

bash

复制代码
python3 -m mcpgateway.translate \
  --stdio "uvx mcp‑server‑git" \
  --expose‑sse \
  --port 9000

IBM 出品,协议兼容性很好,适合企业调研。

项目对比选型矩阵

表格

项目 语言 stdio→SSE stdio→StreamableHTTP 打包方式 适合场景
supergateway TS/Node.js npx / docker 快速上线,开发测试,容器托管【首选】
mcp‑proxy Python pip / docker Python 栈技术栈团队
mcpgate Go 单二进制 /docker 生产 K8s,多 MCP 后端,无依赖
mcp‑stdio‑bridge Python 部分支持 docker 追求稳定性,配置热重载
IBM mcpgateway.translate Python python 模块 企业调研,IBM 生态

⚠️生产托管必须补齐(开源 demo 都不带)

  1. 鉴权 :增加 Bearer Token / ApiKey HTTP header 校验;绝对不要裸暴露公网
  2. Nginx 反向代理配置

nginx

复制代码
proxy_http_version 1.1;
proxy_set_header Connection "";
proxy_buffering off; #关闭缓冲,SSE/stream http核心
chunked_transfer_encoding on;
  1. 会话与进程策略:
    • supergateway 默认每客户端连接 spawn 一个子进程;高并发要做进程池、空闲超时 kill 子进程,防止进程爆炸。
  2. 日志:捕获子进程 stderr,采集日志;增加 prometheus 指标。

两种部署模式

  1. 代理网关模式(上面所有开源项目) :不改原有 MCP 服务,网关 spawn 子进程运行 stdio 服务,对外 SSE/StreamableHTTP;推荐用于存量 MCP 服务托管
  2. 源码直改 transport:直接修改 MCP 服务代码,去掉 StdioTransport,使用 SDK 内置 SSEServerTransport / StreamableHttpServerTransport,不需要子进程桥接,适合你掌握源码的场景。

客户端连接示例(StreamableHTTP)

使用 MCP 官方 SDK:

typescript

复制代码
import { StreamableHttpClientTransport } from "@modelcontextprotocol/sdk/client/streamableHttp.js";
const transport = new StreamableHttpClientTransport(new URL("http://127.0.0.1:8000/mcp"));
await client.connect(transport);
相关推荐
VIP_CQCRE1 小时前
Cursor 接入 Ace Data Cloud MCP:把 AI 编程编辑器升级成全能创作工作台
ai·开发工具·cursor·mcp·ace data cloud
PPPCODE1 小时前
从零手写一个MCP Agent服务:stdio与SSE两种连接模式的踩坑实录
llm·agent·mcp
SpiderCodeJ2 小时前
【UE5】- UE MCP :在UE5.8编辑器中内置链接Codex
ue5·codex·智能体·mcp
xrlfreedom19 小时前
大厂 MCP 面试实录:Tool 调用身份认证、授权与最小权限落地实践
mcp·rag 知识库·java mcp sdk
xrlfreedom21 小时前
大厂 MCP 面试实录:调用异常排查与提示注入防护的工程实践
mcp·提示注入防护·typescript mcp sdk
Ticnix1 天前
MCP 工具拿不到 user_id?用 contextvars 做请求级用户隔离
python·agent·mcp
忧郁的橙子.1 天前
MCP 底层原理深入解析:小模型兼容、错误容错与 Trae 调用链路
fc·mcp·开发agent
SLD_Allen1 天前
MCP 的基本结构:Host、Client、Server、Tools、Resources、Prompts
prompts·mcp
xrlfreedom1 天前
大厂 MCP 面试实录:Java 远程服务异常排查与安全合规设计
结构化输出·mcp·oauth 2.1·java mcp sdk
Ticnix2 天前
MCP 实战:把工具层从 Agent 里彻底解耦
python·mcp