跳转到内容
Tutorial

已弃用 MCP SSE:在服务器崩溃之前迁移到 Streamable HTTP

| 8 min read

MCP SSE 传输已于 2026 年 4 月 1 日终止生命。迁移到具有无状态处理程序、每个请求新鲜实例和会话恢复路径的 Streamable HTTP; Node、Python 和 Cloudflare Workers 的代码。

Data center with network switches representing stateless MCP transport
Photo by Taylor Vick on Unsplash

MCP 服务器发送事件传输已于 2026 年 4 月 1 日终止。客户端库仍然存在 提供 SSE 支持以实现向后兼容性,但基础协议的下一个次要版本 删除它,公共 MCP 注册机构现在拒绝新的仅在 SSE 上市。 如果您的 MCP 服务器 仍然回答 /sse/messages,你有一个迁移窗口,而不是 永远的窗口。

SSE 为每个客户端打开一个 TCP 连接。 负载后面的 MCP 服务器的两个副本 平衡器产生裂脑会话; 水平缩放需要粘性路由,大多数 托管负载均衡器无法清晰地表达。 Streamable HTTP 使用标准请求-响应 具有可选可恢复流的循环,这意味着任何实例都可以响应任何请求并 世界上每个 CDN 都已经知道如何缓存和路由它。

这是完整的迁移路径:前后服务器代码,数据存储模式 有状态工具、Cloudflare Workers 实现、FastAPI 等效项以及 .well-known 元数据文件,以便客户端无需打开即可发现您的服务器 首先连接。

步骤 1:删除 SSE 处理程序

旧代码看起来像这样。 两条路线,一个进程内存中保存的会话映射,以及一个传输 保持响应打开,直到客户端断开连接:

SSE 的每个问题都显示在该片段中。 这 transports 地图仅 对一个进程可见; 重新启动服务器,每个打开的会话都会终止; 水平缩放和 您一半的客户访问了从未听说过的服务器。 把它撕下来。

第 2 步:安装 Streamable HTTP

新的处理程序更小。 一条路由同时响应 GET 和 POST; 每个请求都会产生一个新的 服务器和传输对; 当响应关闭时垃圾收集器会进行清理:

三个关键很重要。 sessionIdGenerator: undefined 选择退出会话固定 运输是完全无国籍的。 enableJsonResponse: true 返回单个 JSON 不发出进度的工具的主体,这使路径保持快速且可缓存。 这 res.on("close") 清理可防止客户端早期断开连接时套接字泄漏。

步骤 3:将会话状态移出进程内存

无状态处理程序并不意味着无状态产品。 长时间运行的工具仍需要报告 跨多个请求的进度。 将该状态放入 Redis、持久对象、DynamoDB 或 Postgres; 在入口处读取,在出口处写入:

Mcp-Session-Id 标头(如果存在)标识逻辑会话; 处理程序 将其用作数据存储密钥。 一个 Last-Event-Id 来自客户端的标头让 传输在断开连接后恢复流,而无需重新启动工具调用。 两个标题都是 可选; 无状态工具可以完全忽略它们。

第 4 步:部署无服务器

Streamable HTTP 解锁了 SSE 阻止的内容:在 Cloudflare Workers、AWS 上运行 MCP 服务器 Lambda、Vercel 函数或飞行器。 这是 40 小时内的完整 Cloudflare Workers 服务器 行,将 Botoi 的 IP Lookup 端点作为一个示例工具:

没有会话映射,没有后台计时器,没有保持活动状态的 ping。 Worker 按需旋转并给出答案 请求,然后关闭。 一个 Worker 可以处理任意数量的并行客户端,因为 没有共享的可变状态。 大多数情况下,Workers 上 MCP 服务器的冷启动时间不到 5 毫秒 工具表面; 在 Lambda 上,它们的冷度为 50 到 200 毫秒。

第 5 步:使用 FastAPI 进行 Python 迁移

Python 服务器具有相同的形状。 FastAPI 处理程序根据请求构造 MCP 服务器 交通运输部代表:

跨语言的模式是相同的:为每个请求构建服务器,将 HTTP 请求交给 运输,返回运输产生的任何东西。 语言运行时不同; 建筑 没有。

步骤 6:发布服务器卡以供发现

2026 年路线图弥补的差距之一是无连接的发现。 登记处和 爬虫过去需要实时握手才能了解您的服务器做了什么。 在以下位置提供 JSON 文档: /.well-known/mcp/server-card.json 客户端可以获知传输 URL, 连接前的身份验证方案和功能设置:

这是让代理平台索引您的服务器而无需探测它的部分。 Auth0 为 代理、Cloudflare Agent Cloud 和 MCP 公共注册表均使用此格式; 添加它 一旦你的服务器变得可列出。

验证迁移

在翻转 DNS 之前,请针对新端点运行检查器或curl。 第一表面a 每个工具和资源都公开的 UI; 第二个确认有线格式正确:

一个成功的 tools/list 响应您的完整工具目录意味着服务器正在 住。 如果响应返回为 text/event-stream 当您期望 JSON 时, 交通有 enableJsonResponse 残疾人; 翻转旗帜。

切换后,让两个传输在不同的路径上运行一周: /sse 作为老听众, /mcp 作为新的。 每隔一段时间发出一条日志行 客户端连接的时间 /sse 及其用户代理。 当日志安静下来时,您 可以删除旧的处理程序。 大多数客户端库都提供了 Streamable HTTP 支持 2025年12月和2026年2月; 预计旧的 Cursor 和 Claude Desktop 安装会有长尾。

什么保持不变,什么改变

忧虑 上交所运输 流式 HTTP
连接型号 每个客户一个长寿 请求-响应,可选流
负载均衡 需要粘性会话 任何实例响应任何请求
会话状态 进程内内存 以会话 ID 为关键的数据存储
无服务器适配 因连接持续时间限制而被阻止 本国的
进度流 默认 通过 Accept 标头选择加入
发现 现场握手 /.well-known/mcp/server-card.json
工具调用 基于 SSE 框架的 JSON-RPC JSON-RPC over HTTP 主体

要点

  • SSE 已被弃用,而不是被删除。 到 2026 年,客户仍然接受它,但新的 服务器和注册表列表需要可流式 HTTP。
  • 根据要求构建新鲜的。 没有进程内会话映射; 让服务器反对 仅在 RPC 持续时间内存在。
  • 将状态推送到数据存储。 Redis、持久对象或 Postgres Mcp-Session-Id 标头。
  • 无服务器又回到桌面上。 Cloudflare Workers、Lambda、Vercel 功能; 他们都没有很好地支持长期存在的 SSE。
  • 发布服务器卡。 /.well-known/mcp/server-card.json 使 无需连接即可发现您的服务器。

Botoi 的 MCP 服务器采用 Streamable HTTP,位于 api.botoi.com/mcp 拥有 49 个精选工具,涵盖 IP 查找、电子邮件验证、DNS、哈希、JWT 签名和 QR 一代。 来源是麻省理工学院许可的,反映了上述模式; 阅读 设置文档 为了 Claude Desktop、Claude Code、光标、VS Code 和 Windsurf 配置。

FAQ

MCP SSE 是否被删除或只是被弃用?
自 2026 年 4 月 1 日起已弃用; 为了向后兼容,客户端库中仍然存在运行时支持,但新的 MCP 服务器和注册表列表需要 Streamable HTTP。 2026 年路线图在下一个小版本中将 SSE 从基础协议中完全删除; 现在就开始迁移,而不是在删除时开始。
为什么 MCP 放弃 SSE?
SSE 为每个客户端打开一个 TCP 连接,这使得水平扩展变得痛苦。 循环负载均衡器后面的两个相同的 SSE 服务器产生了裂脑会话:存储在服务器 A 上的工具状态对于服务器 B 来说是不可见的。可流式 HTTP 使用带有可选可恢复流的短请求响应周期,因此负载均衡器和 CDN 会路由每个请求,而无需将客户端固定到实例。
什么是每次请求新鲜实例?
每个传入请求都会构造一个新的 MCP 服务器对象,处理 RPC,然后丢弃该实例。 请求之间没有内存状态。 需要持久化的状态(进度标记、工具会话)位于处理程序在进入时读取并在退出时写入的数据存储中。 这使您可以在 Cloudflare Workers 或 AWS Lambda 等无服务器平台上运行同一服务器,而无需遵守 15 分钟的连接持续时间限制。
我还需要 WebSocket 来进行流工具输出吗?
不会。可流式 HTTP 在标准 POST 响应内包含一个可选的 SSE 样式流,用于发出部分结果的工具。 与旧 SSE 的区别在于,流存在于一个 HTTP 请求中,并以工具调用结束。 您不会在工具调用之间保持套接字打开。
如何在本地测试 Streamable HTTP 服务器?
使用官方 MCP 检查器 (npx @modelcontextprotocol/inspector),它现在可以使用两种传输方式。 或者使用 JSON-RPC 主体和 Accept: text/event-stream 标头卷曲端点; 您将看到单个 JSON 响应或事件流,具体取决于工具是否发出进度。 会话恢复可使用 Mcp-Session-Id 和 Last-Event-Id 标头进行测试。

开始使用 botoi 构建

150+ 个 API 端点,涵盖查询、文本处理、图片生成和开发者工具。免费套餐,无需信用卡。