一文搞懂:Anthropic发布MCP重要更新,告别长连接

🎉 1. 介绍

Anthropic近日宣布对Model Context Protocol (MCP)进行重大更新,推出全新的"Streamable HTTP"传输方式,替代现有的HTTP+SSE方案。 Github PR: github.com/modelcontex...

MCP协议最近因为通用智能体,而变得特别的火。近期,Anthropic又发布了对MCP的更新。

这次更新本质上是对MCP数据传输机制的重构,使协议变得更灵活、更易用且更具兼容性。打个比方,原来的MCP传输方式就像与客服通话时必须保持持续在线(SSE需要长连接),而新方案则类似于随时可以发送消息并等待回复(普通HTTP请求,但可选流式传输)。

此次更新主要包括五大核心变更:

  • 移除了专用的/sse端点,服务器不再单独维护SSE(Server-Sent Events)端点
  • 所有客户端到服务器的消息均通过统一的/message端点传输,不再依赖/sse
  • 服务器可根据需要动态将HTTP请求升级为SSE流,用于发送通知或请求
  • 客户端通过Header提供Mcp-Session-Id,服务器可自行决定是否存储会话信息
  • 支持完全无状态的服务器运行,不再需要维持长期连接

As compared with the current HTTP+SSE transport:

  1. We remove the /sse endpoint
  2. All client → server messages go through the /message (or similar) endpoint
  3. All client → server requests could be upgraded by the server to be SSE, and used to send notifications/requests
  4. Servers can choose to establish a session ID to maintain state
  5. Client can initiate an SSE stream with an empty GET to /message

This approach can be implemented backwards compatibly, and allows servers to be fully stateless if desired.

🤖 2. 从"持久电话"到"智能快递"的进化

在AI模型与应用交互的领域,数据传输协议就像神经系统的传导机制。原有MCP采用的HTTP+SSE方案,相当于要求用户和客服必须保持持续通话(SSE长连接)。这种机制存在三个致命缺陷:

  1. 通话中断即重置:就像电话掉线后必须从头复述问题,SSE断开后客户端需要重新建立完整会话。这对于需要长时间交互的AI应用(如持续对话模型)是灾难性的。

  2. 客服资源被独占:服务器需要为每个客户端维持专用线路,就像客服无法同时处理多个来电。这在Serverless架构中尤为明显,Cloudflare Workers等平台对长连接支持有限。

  3. 单向沟通的困境:SSE只允许服务器向客户端发送数据,形成了类似"客服单方面讲话"的模式。当需要双向协商(如动态调整传输格式)时,必须建立额外通道,增加了系统复杂度。

这些缺陷在AI应用规模化部署时愈发突出。以某智能客服系统为例,原有架构在用户量激增时,服务器维持的SSE连接数呈指数级增长,导致如AWS Lambda冷启动等问题,响应延迟从200ms飙升至5秒以上

📦 3. 新的"Streamable HTTP"传输方式(类似快递)

新方案的核心创新在于重新定义了HTTP协议的使用范式,实现了四个关键转变:

1. 连接模式的重构

  • 传统HTTP像一次性快递:发送请求→接收包裹→结束

  • 新方案赋予HTTP"智能快递柜"属性:客户端投递请求(Mcp-Session-Id作为取件码),服务器可选择:

    • 立即响应(普通HTTP)
    • 开启专用货柜持续投递(升级为SSE流)
    • 分批次投递(分块传输编码)

2. 状态管理的革新

通过Mcp-Session-Id头部实现"无状态中的有状态":

http 复制代码
POST /message HTTP/1.1
Mcp-Session-Id: 7x9b2f8c-动态令牌
Content-Type: application/mcp+json
{"prompt": "解释量子纠缠", "stream": true}

服务器无需维护会话状态,只需在需要时根据Session ID重建上下文。这类似于快递员通过运单号获取配送信息,而不必记住每个客户。

  • Stateless servers are now possible---eliminating the requirement for high availability long-lived connections
  • Plain HTTP implementation---MCP can be implemented in a plain HTTP server without requiring SSE
  • Infrastructure compatibility---it's "just HTTP," ensuring compatibility with middleware and infrastructure
  • Backwards compatibility---this is an incremental evolution of our current transport
  • Flexible upgrade path---servers can choose to use SSE for streaming responses when needed

💯 4. 使用例子

4.1 无状态服务

一个仅提供LLM工具且不使用其他功能的服务可以按如下方式实现:

  1. 始终确认初始化(但无需持久化任何状态)
  2. 对任何传入的ToolListRequest返回一个JSON-RPC响应
  3. 处理任何CallToolRequest,通过执行工具,等待其完成,然后发送一个CallToolResponse作为HTTP响应体

4.2 无状态服务与流式传输

一个完全无状态的、不支持长连接的服务器仍然可以利用流式传输。 例如,在工具调用期间发出进度通知:

例如,在工具调用期间发出进度通知:

  1. 当传入的POST请求是CallToolRequest时,服务指示响应将是SSE
  2. 服务开始执行工具
  3. 在工具执行期间,服务通过SSE发送任意数量的ProgressNotifications
  4. 当工具执行完成时,服务通过SSE发送CallToolResponse
  5. 服务关闭SSE流

4.3 有状态服务

MCP服务需要生成一个会话ID(Mcp-Session-Id),而客户端需要在每次请求时传递该ID。 然后,服务器可以使用会话ID进行路由匹配或在消息总线上进行路由消息------也就是说,一个POST消息可以到达水平扩展部署中的任何服务节点,但必须通过像Redis这样的代理进行路由。

📖 5. 总结

对开发者而言,这一更新带来诸多便利:

  • 实现MCP服务器变得更加简单,只需普通HTTP服务器即可支持MCP,无需再搭建专门的SSE服务器;
  • 部署到Vercel、Cloudflare、AWS Lambda等不支持长连接的云平台变得更加容易
  • 兼容性大幅提升,新方案作为标准HTTP可与CDN、API网关、负载均衡无缝集成
  • 扩展性显著增强,支持无状态模式运行,且可在需要时动态升级到SSE

在基础设施和服务器架构方面,新方案同样带来了革命性变化

  • 无状态服务器成为可能,服务器不再需要持续存储客户端会话信息
  • 更适合微服务架构,可轻松与REST API、GraphQL、负载均衡、CDN等系统集成
  • 服务器资源利用率更高,处理完请求后即可释放资源,适合高并发场景

总体而言,此次更新使

  • MCP变得更加轻量级且灵活,服务器可自主决定是否支持流式传输
  • 部署流程显著简化,适用于Serverless架构
  • 兼容性大幅提升,可与各种网络基础设施无缝协作
  • 服务器资源利用率更高,支持更大规模的并发请求

这一创新性变更使MCP服务器变得更简单、更高效、更灵活,能够支持更大规模的分布式部署,彻底摆脱了SSE的限制,为AI模型与应用间的通信开辟了新篇章。

相关推荐
京东零售技术1 小时前
在京东做技术是种什么体验?| 13位零售人告诉你答案
前端·后端·面试
bobz9651 小时前
strongswan ipsec 支持多个 子网 cidr
后端
不修×蝙蝠1 小时前
SpringBoot 第二课(Ⅰ) 整合springmvc(详解)
java·spring boot·后端·spring·整合springmvc
uhakadotcom1 小时前
Prompt Flow 入门:简化 AI 应用开发流程
后端·面试·github
uhakadotcom1 小时前
ONNX Runtime入门:高效深度学习推理框架
后端·面试·github
uhakadotcom2 小时前
PyTorch FSDP:大规模深度学习模型的数据并行策略
后端·面试·github
程序员阿明2 小时前
spring boot maven一栏引入本地包
spring boot·后端·maven
uhakadotcom2 小时前
Foreign Function Interface (FFI)入门:跨语言调用技术
后端·面试·github
uhakadotcom2 小时前
AI助力数据可视化:Data Formulator工具解析
后端·面试·github
co松柏2 小时前
到底 MCP 有什么魅力?10分钟让 AI 直接操作数据库!
人工智能·后端·程序员