news 2026/4/19 4:38:23

从 SSE 到 Streamable HTTP:MCP Server 的现代化改造之旅

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
从 SSE 到 Streamable HTTP:MCP Server 的现代化改造之旅

在之前的博客中,我们分享了如何通过 FastAPI 包装器来解决 MCP Server 的鉴权和路径重写问题。然而,随着项目的发展,我们发现传统的SSE (Server-Sent Events)模式在复杂的云原生网络环境(GCP LB + Envoy)中显得越来越力不从心。

今天,我们将分享一次重大的架构升级:迁移到 Streamable HTTP 模式


为什么要迁移?SSE 的阿喀琉斯之踵

SSE (Server-Sent Events) 是 MCP 协议早期的默认传输方式。它通过一个 GET 长连接接收事件,再通过 POST 请求发送指令。

痛点 1:复杂的路径依赖
SSE 模式下,Server 需要告诉 Client 一个“回调地址” (endpoint)。如果 Server 躲在层层代理(Envoy, Nginx)后面,它很难知道自己对外的真实 URL 是什么。我们之前为了解决这个问题,不得不引入了复杂的root_pathmount逻辑,结果还是在 URL 拼接上栽了跟头。

痛点 2:长连接的脆弱性
负载均衡器(Load Balancer)通常不喜欢长连接。如果没有心跳包,或者网络稍有波动,连接就会断开。

什么是 Streamable HTTP?

Streamable HTTP(JSON-RPC over HTTP) 是 MCP 协议的现代化传输方式。

  • 单一连接:所有的通信(请求和响应)都通过标准的 HTTP POST 请求完成。
  • 无状态:不需要维护一个长连接,每个请求都是独立的(虽然为了性能可以复用 TCP 连接)。
  • 简单:Client 只需要知道一个 URL (e.g.,/mcp),不需要 Server 返回回调地址。

这简直就是为无服务器架构(Serverless, 如 Cloud Run)量身定做的!


代码改造:做减法

我们的迁移策略不是增加代码,而是删除代码。我们废弃了复杂的 FastAPI 包装层,回归 FastMCP 原生支持。

1. 升级 FastMCP

Streamable HTTP 是新特性,首先要确保依赖包是最新的。

fastmcp>=2.14.3

2. Server 代码重构 (mcp_github_tool_server.py)

我们移除了 FastAPI,直接使用fastmcp启动。

旧代码 (FastAPI Wrapper):

app=FastAPI()mcp_app=mcp.sse_app()app.mount("/mcp",mcp_app)# ... 还有复杂的 Middleware 和 uvicorn 启动逻辑

新代码 (Streamable HTTP):

fromstarlette.middlewareimportMiddlewarefromstarlette.middleware.baseimportBaseHTTPMiddleware# 定义鉴权中间件 (依然可以使用!)classAuthMiddleware(BaseHTTPMiddleware):asyncdefdispatch(self,request,call_next):token=request.headers.get("X-Github-Token")iftoken:user_token_ctx.set(token)returnawaitcall_next(request)if__name__=="__main__":# 直接使用 mcp.run,指定 transport="http"mcp.run(transport="http",host="0.0.0.0",port=8000,middleware=[Middleware(AuthMiddleware)],# 关键:指定监听路径,匹配 Envoy 的转发规则path="/mcp-github-tools-svc/mcp")

3. Client 测试代码更新 (test_client.py)

客户端也需要切换到 HTTP 传输层。

fromfastmcp.client.transportsimportStreamableHttpTransport# 注意这里不是 SSETransport 了# URL 直接指向端点,不需要 /sse 后缀url="https://www.jpgcp.cloud/mcp-github-tools-svc/mcp"transport=StreamableHttpTransport(url=url,headers={"X-Github-Token":"sk-xxxx"# Header 鉴权依然完美支持})

鉴权黑科技:Header 传递

迁移到 Streamable HTTP 后,我们最担心的就是鉴权功能会丢失。
好消息是:FastMCP 的 HTTP 模式底层依然是 Starlette,它允许我们在run()方法中注入 Middleware。

我们保留了ContextVars的设计,中间件从 Header 提取 Token,存入 ContextVar,Tool 函数再从 ContextVar 读取。

效果

  • 用户在 Cline 配置里填入 Token。
  • Token 随 HTTP 请求头发送。
  • Server 自动捕获并使用。
  • 全程无感,且并发安全。

总结

通过这次迁移,我们获得了一个更简单、更健壮、更符合云原生理念的系统。

  1. 代码量减少了 50%:删除了server.py
  2. 部署更自信:不再担心 Envoy 的路径重写会导致回调 URL 错误。
  3. 兼容性更好:HTTP 协议是互联网的通用语言,穿透任何防火墙和代理都不在话下。

如果你的 MCP Server 也要上云,Streamable HTTP绝对是你的首选。

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/4/12 20:41:58

终极指南:如何快速处理DXF文件的完整解决方案

终极指南:如何快速处理DXF文件的完整解决方案 【免费下载链接】libdxfrw C library to read and write DXF/DWG files 项目地址: https://gitcode.com/gh_mirrors/li/libdxfrw 在CAD设计和工程领域,DXF文件格式已成为行业标准的数据交换格式。lib…

作者头像 李华
网站建设 2026/4/18 7:46:18

终极缓存清理指南:提升开发效率的5个关键策略

终极缓存清理指南:提升开发效率的5个关键策略 【免费下载链接】go-cursor-help 解决Cursor在免费订阅期间出现以下提示的问题: Youve reached your trial request limit. / Too many free trial accounts used on this machine. Please upgrade to pro. We have thi…

作者头像 李华
网站建设 2026/4/12 0:26:28

Bili.Uwp:重新定义你的Windows哔哩体验

Bili.Uwp:重新定义你的Windows哔哩体验 【免费下载链接】Bili.Uwp 适用于新系统UI的哔哩 项目地址: https://gitcode.com/GitHub_Trending/bi/Bili.Uwp 在众多B站第三方客户端中,Bili.Uwp作为一款专为Windows平台打造的UWP应用,以其原…

作者头像 李华
网站建设 2026/4/16 1:44:01

GSE游戏宏编辑器完整指南:7天掌握自动化操作精髓

GSE游戏宏编辑器完整指南:7天掌握自动化操作精髓 【免费下载链接】GSE-Advanced-Macro-Compiler GSE is an alternative advanced macro editor and engine for World of Warcraft. It uses Travis for UnitTests, Coveralls to report on test coverage and the Cu…

作者头像 李华
网站建设 2026/4/16 2:42:08

Qwen3-Embedding-4B实战:法律案例检索系统

Qwen3-Embedding-4B实战:法律案例检索系统 1. 引言 在法律领域,案例检索是律师、法官和法务人员日常工作中不可或缺的一环。传统关键词检索方式难以捕捉语义相似性,导致大量相关判例被遗漏。随着大模型技术的发展,基于语义向量的…

作者头像 李华
网站建设 2026/4/17 10:55:48

VSCode Mermaid插件终极指南:一键解锁文档可视化新境界

VSCode Mermaid插件终极指南:一键解锁文档可视化新境界 【免费下载链接】vscode-markdown-mermaid Adds Mermaid diagram and flowchart support to VS Codes builtin markdown preview 项目地址: https://gitcode.com/gh_mirrors/vs/vscode-markdown-mermaid …

作者头像 李华