MCP协议更新:从HTTP+SSE到Streamable HTTP,大模型通信的进化之路
本文较长,建议点赞收藏,以免遗失。更多AI大模型开发 学习视频/籽料/面试题 都在这>>Github<<
MCP 协议简介
在大模型技术飞速发展的当下,MCP 协议(Model Context Protocol,模型上下文协议)逐渐走进人们的视野,成为推动 AI 应用发展的关键力量。MCP 协议是一种开放协议,旨在实现大型语言模型(LLM)应用与外部数据源、工具和服务之间的无缝集成 ,就如同网络中的 HTTP 协议一样,为 AI 领域构建起标准化的交互桥梁。
大模型虽具备强大的语言理解和生成能力,但在与现实世界的数据和工具集成时,面临诸多挑战。传统方式下,连接 AI 模型与各种数据源需编写定制化代码,耗时且易错,不同模型和工具间的集成复杂性,阻碍了 AI 应用的广泛采用和系统间的互操作性。而 MCP 协议的出现,有效解决了这些问题。它通过标准化的接口和协议,让大模型能动态访问和集成外部数据源、工具,还能动态管理对话上下文,确保多轮对话的连贯性,极大提升了 LLM 应用的功能性、灵活性和可扩展性,为开发者提供了统一、高效且可互操作的开发环境。
HTTP+SSE:MCP 协议的旧基石
在 MCP 协议发展历程中,HTTP+SSE 曾是其重要的通信基础。SSE(Server-Sent Events)即服务器发送事件 ,是一种基于 HTTP 协议的轻量级技术,允许服务器向客户端推送实时更新的数据,通过持久化连接实现服务器到客户端的单向数据流。在 MCP 协议里,客户端与服务器借助 HTTP 和 SSE 两种技术协同工作,实现模型与外部工具、数据源的交互。
HTTP+SSE 工作原理
在 MCP 协议中,客户端与服务器通过不同端点和请求类型交互 。客户端首先向服务器的/sse
端点发起 GET 请求,建立一个长连接,这个连接使用connection keep-alive
,接受text/event-stream
,旨在持续接收服务器推送的数据。服务器响应该请求时,会返回一个包含sessionId
标识的 endpoint 节点,此后服务器向客户端推送的数据,都通过这个/sse
节点完成。接着,客户端向返回的 endpoint 节点发起 POST 请求,将问题以请求体的形式发送给 MCP Server。MCP Server 获取当前的endpoint+sessionId
,对请求体进行处理,并通过/sse
接口将结果推送到客户端 SDK 进行后续处理。
具体工作流程如下:
-
连接建立 :客户端请求
/sse
;服务端初始化SseEmitter
和McpServerSession
,返回可用的消息接口地址。 -
会话初始化 :客户端通过
/message
发送InitializeRequest
,告知自身能力与标识;服务端处理后通过 SSE 返回InitializeResponse
。 -
资源管理 :客户端发起如
tools/list
请求;服务端从会话中查找状态,调用工具处理器并通过 SSE 返回结果。 -
调用工具 :客户端拼接
prompt
后发起tools/call
;服务端查找处理器执行逻辑,并通过 SSE 返回执行结果。 -
连接维持 :客户端周期性发送
ping
;服务端返回pong
,用于保持连接活跃。 -
连接关闭:客户端主动断开;服务端清理对应的连接与会话状态。
HTTP+SSE 存在的缺陷
尽管 HTTP+SSE 在 MCP 协议应用初期发挥了重要作用,但在实际使用中,逐渐暴露出诸多问题。
-
连接不可恢复:SSE 连接一旦中断,会话状态便会丢失 ,客户端只能重新开始新连接,之前的上下文信息大概率会丢失。比如在进行多轮对话的 AI 交互时,如果网络突然波动导致 SSE 连接断开,用户不得不重新输入之前的问题,严重影响交互体验。
-
长连接压力大:服务器需为每个客户端维护长连接 ,当并发用户数量增多,服务器资源消耗显著增加。假设一个拥有大量用户的 AI 服务平台,使用 HTTP+SSE 模式,高并发时服务器需维持海量长连接,会极大消耗服务器的内存、CPU 等资源,甚至可能导致服务器性能下降,影响服务质量。
-
单向通信限制:服务器仅能通过 SSE 端点单向推送消息 ,无法灵活处理双向交互场景。在一些需要服务器主动向客户端发起请求的复杂业务场景中,HTTP+SSE 的单向通信特性就显得力不从心,例如服务器需要根据某些实时数据主动询问客户端下一步操作时,就无法实现。
-
基础设施兼容性差:CDN、防火墙等网络基础设施,可能会中断长连接 ,致使服务不可靠。在企业级应用中,网络架构复杂,中间存在多种网络设备,这些设备可能会对 SSE 长连接进行拦截或关闭,导致客户端与服务器通信异常。
Streamable HTTP 闪亮登场
为解决 HTTP+SSE 的诸多弊端,Streamable HTTP 应运而生,成为 MCP 协议通信方式的新选择。2025 年 3 月 26 日,MCP 协议引入这一关键更新,用 Streamable HTTP 替代 HTTP+SSE 作为默认传输方式 ,既解决了原有方案中连接不可恢复、服务端长连接压力大等问题,又保留了 SSE 带来的流式响应优势。
Streamable HTTP 的定义与特性
Streamable HTTP 并非传统意义上的流式 HTTP(Streaming HTTP),它是一种兼具多种特性的传输机制 。其以普通 HTTP 请求为基础,客户端可用 POST/GET 方法发送请求,这与常见的 HTTP 请求方式一致,便于开发者理解和使用。服务器可根据实际需求,选择性地将响应升级为 SSE 流,实现流式传输能力。当客户端请求的内容需要实时、逐块返回时,服务器就可将响应升级为 SSE 流,如在处理大文件传输或实时数据更新场景时。
Streamable HTTP 还具有去中心化、无强制要求持续连接的特点,支持 stateless(无状态)模式 。在这种模式下,服务器无需维持与客户端的持久连接,也无需保存每个客户端的会话状态,降低了服务器的资源消耗和实现复杂度。例如在一些简单的工具 API 服务中,服务器处理完客户端请求后,无需记住该客户端的任何信息,就能快速响应下一个请求。另外,客户端和服务端之间的消息传输更加灵活,同一个/message
端点可用于发起请求和接收 SSE 流 ,不再需要单独的/sse
端点,所有通信都通过统一的/message
协议层处理,简化了系统架构和通信流程。
与传统 HTTP+SSE 的差异对比
-
端点设置简化 :HTTP+SSE 需要
/sse
和/message
等多个端点协同工作 ,客户端和服务器之间的通信逻辑较为复杂。而 Streamable HTTP 移除了专门的/sse
端点 ,所有客户端到服务端的消息都通过/message
(或类似端点)发送,减少了端点数量,降低了系统复杂度和维护成本。 -
消息传输更灵活 :在 HTTP+SSE 中,服务器只能通过
/sse
端点发送消息 ,且只能进行单向推送。而 Streamable HTTP 允许服务器根据请求类型和内容,灵活选择返回标准 HTTP 响应或通过 SSE 流式返回 。对于简单的查询请求,服务器可直接返回标准 HTTP 响应;对于需要实时更新的内容,如实时日志监控场景,服务器则可将响应升级为 SSE 流,实时推送日志信息给客户端。 -
连接状态管理优化:HTTP+SSE 要求服务器保持高可用的长连接 ,一旦连接中断,会话状态易丢失。Streamable HTTP 支持无状态服务器模式 ,无需维持长连接,在连接中断时,客户端通过会话 ID 等机制恢复会话,提高了系统在不稳定网络环境下的可靠性。
Streamable HTTP 的显著优势
支持无状态服务器
Streamable HTTP 允许服务器以无状态模式运行 ,这是其区别于 HTTP+SSE 的重要特性之一。在 HTTP+SSE 模式下,服务器需维持长连接,保存每个客户端的会话状态,资源消耗大,且实现复杂。而 Streamable HTTP 下,服务器处理完客户端请求后,无需保留任何会话信息 ,就能立即释放资源,准备处理下一个请求。以一个提供简单文本处理工具的 MCP 服务器为例,当有多个客户端同时请求文本分词处理时,无状态的 Streamable HTTP 服务器可快速响应每个请求,无需在处理过程中记住每个客户端的信息,大大提高了服务器的并发处理能力和资源利用率,也降低了服务器的运维成本和复杂性。
纯 HTTP 实现
Streamable HTTP 基于纯 HTTP 实现 ,这使其在 MCP 协议中的应用更加便捷。开发者无需额外搭建和维护 SSE 服务器,只需利用现有的 HTTP 服务器,就能轻松支持 MCP 协议。无论是常见的 Nginx、Apache 等 Web 服务器,还是基于各种编程语言的 HTTP 框架,如 Python 的 Flask、Django ,Java 的 Spring Boot 等,都能无缝对接 Streamable HTTP,降低了开发门槛和成本。同时,纯 HTTP 实现也使得 MCP 与现有的技术栈兼容性更强,可轻松与 CDN、API 网关、负载均衡等网络基础设施集成,在复杂的企业级网络架构中稳定运行。
灵活的传输方式
服务器在 Streamable HTTP 中有了更多的传输选择 。它可根据请求的具体内容和场景,动态决定是返回普通的 HTTP 响应,还是将响应升级为 SSE 流。对于一些简单的查询请求,如查询当前天气信息、股票价格等 ,服务器可直接返回包含结果的标准 HTTP 响应,响应速度快,效率高。而在处理一些需要实时更新、持续反馈的任务时,如实时监控服务器性能指标、长时间运行的文件处理任务进度等 ,服务器就可将响应升级为 SSE 流,实时向客户端推送最新信息,让客户端及时了解任务进展,提升用户体验。这种灵活的传输方式,使 MCP 协议能更好地适应不同的业务需求和应用场景。
应用场景剖析
无状态服务器模式
在一些简单工具 API 服务场景中,Streamable HTTP 的无状态特性优势明显。以文本摘要工具 API 为例,当用户发送一篇长文章给服务器,请求生成摘要时 ,客户端向服务器的/message
端点发送 POST 请求,包含文章内容等参数。服务器接收请求后,立即调用文本摘要算法进行处理,处理完成后,直接返回包含摘要结果的 HTTP 200 响应 。整个过程中,服务器无需记录该用户的任何会话信息,处理完这个请求后,就能马上处理下一个用户的请求。这种极简部署方式,无需复杂的状态管理,特别适合无服务器架构和微服务架构,可有效降低系统复杂度和资源消耗,提高服务的并发处理能力。
流式进度反馈模式
在处理大文件上传并分析的任务时,就能很好地体现 Streamable HTTP 的流式进度反馈优势。当用户上传一个大型日志文件,并请求服务器分析其中的错误信息时 ,客户端首先向/message
端点发送 POST 请求,告知服务器任务内容。服务器接收到请求后,开始处理任务,先返回一个 HTTP 200 响应,标识 SSE 流开始 。随后,服务器在处理文件过程中,通过 SSE 流实时向客户端推送处理进度,如 "已处理 10%,发现 5 个错误""已处理 30%,累计发现 15 个错误" 等 。直到任务完成,服务器通过 SSE 流发送最终的分析结果和完成标识。这种方式能让用户实时了解任务进展,提升用户体验,且无需像 HTTP+SSE 那样维持永久连接状态,减少了资源占用。
复杂 AI 会话模式
以多轮对话的智能客服助手为例,Streamable HTTP 能很好地维护上下文和支持复杂交互 。当用户首次与智能客服交互时,客户端向/message
端点发送 POST 初始化请求,服务器处理后返回一个包含会话 ID(如abc123
)的 HTTP 200 响应 。之后,用户每次发送问题,客户端都带着这个会话 ID 向/message
端点发送 POST 请求 。服务器接收到问题后,根据会话 ID 查找之前的对话记录,理解上下文,生成回答,并通过 SSE 流返回给客户端,如先返回 "SSE: 思考中...",让用户知道客服正在处理问题,随后返回具体的回答内容 。在多轮对话中,这种方式能有效维持对话的连贯性,支持复杂的交互逻辑,同时允许服务器进行水平扩展,以应对大量用户的并发请求。
断线恢复模式
在网络不稳定的移动办公场景中,Streamable HTTP 的断线恢复模式能极大提高 AI 应用的可靠性和用户体验 。假设用户在使用移动设备通过 AI 应用进行文档翻译时 ,客户端先向/message
端点发送 POST 初始化请求,获取会话 ID(如xyz789
),并建立 SSE 流 。在翻译一个较长文档过程中,网络突然中断,导致 SSE 流断开。当网络恢复后,客户端通过之前的会话 ID 向/message
端点发送 GET 请求,重新建立 SSE 流 。服务器根据会话 ID 恢复之前的翻译进度,继续向客户端推送后续的翻译结果,如 "已翻译 60%,接下来的内容是...",最终完成整个文档的翻译 。这种断线恢复机制,确保用户在弱网环境下也能顺利使用 AI 应用,避免因网络问题导致任务中断和数据丢失,有效提升了用户体验。
技术展望与行业影响
对 MCP 协议生态发展的推动
Streamable HTTP 为 MCP 协议生态注入了新的活力,有力推动其进一步完善和发展。在协议层面,简化的端点设置和灵活的传输方式,降低了 MCP 协议的实现难度和复杂性,吸引更多开发者参与到 MCP 生态建设中 。这将促使更多类型的工具和数据源接入 MCP 协议,丰富 MCP 生态的资源种类和数量,使其更加繁荣。在服务器部署方面,支持无状态服务器运行模式,使 MCP 服务器的部署和扩展更加容易 ,无论是在传统的服务器架构,还是在新兴的 Serverless 架构中,都能高效运行,为 MCP 协议在不同场景下的应用提供了更坚实的基础。随着 Streamable HTTP 的普及,MCP 协议有望成为 AI 领域中更具影响力和通用性的标准协议,促进不同 AI 模型、工具和服务之间的互联互通。
对大模型应用开发的深远意义
对于开发者而言,Streamable HTTP 带来了诸多便利和广阔的创新空间。在开发过程中,基于纯 HTTP 实现的 Streamable HTTP,使开发者可利用现有的 HTTP 开发工具和技术栈 ,降低了技术门槛和学习成本,能更快速地开发和部署大模型应用。其灵活的传输方式,让开发者可根据应用的具体需求,定制化数据传输策略 ,提升应用性能和用户体验。在实现一个实时协作的 AI 文档编辑应用时,开发者可利用 Streamable HTTP 的流式传输能力,实时同步用户的编辑操作,让多个用户在不同终端上协同编辑文档时,感受到几乎无延迟的交互体验。Streamable HTTP 还为大模型应用的创新提供了更多可能性,如结合无状态服务器模式和流式进度反馈模式,开发出更高效、智能的自动化任务处理应用,推动大模型应用向更智能、更实时、更个性化的方向发展。