当前位置: 首页 > news >正文

【大模型理论篇】MCP协议中sse、stdio、streamable_http含义

1. 背景

在 MCP(Model Context Protocol)中,stdio、SSE、Streamable HTTP 是三种不同的 传输(transport)机制,用于在客户端(agent)与 MCP 服务器之间传递 JSON-RPC 消息、通知、响应等。不过,在最新协议版本中,MCP 协议定义了两种标准传输(standard transport):stdio 和 Streamable HTTP。 旧版的 HTTP + SSE 传输在这个版本被 弃用 / 替代,不再作为标准机制,而作为兼容选项保留。 在 Streamable HTTP 中,服务器可以 可选地使用 SSE(Server-Sent Events)来进行流式推送。也就是说,SSE 在新的传输机制里变为一种手段,而不是独立的标准机制。

2. stdio 传输标准

使用场景:客户端以子进程方式启动 MCP 服务器。

通信方式:服务器从 stdin 读取 JSON-RPC 消息,从 stdout 输出 JSON-RPC 消息(批消息 / 请求 / 通知 / 响应)。

消息格式要求:

        用换行分隔各条消息;

        消息本身 不得包含嵌入换行

stderr:服务器可以写 UTF-8 字符串到 stderr 用于日志,客户端可以选择捕获或忽略。

限制:本地进程间通信,无法直接用于远程 / 网络场景。

3. Streamable HTTP 传输(MCP 推荐标准)

这是目前官方规范中被定义为标准的网络传输方案。

基本结构

服务器必须提供一个单一的 HTTP 端点(称为 MCP endpoint),支持 POST 和 GET 方法。

客户端通过 HTTP POST 向该端点发送 JSON-RPC 消息(请求 / 通知 / 批量消息)。请求头中必须带上 Accept: application/json, text/event-stream

如果 POST 请求中包含 JSON-RPC 请求(即客户端希望得到响应),服务器必须在响应中选择一种方式:

  •  返回标准 application/json(整体响应一次性返回)
  •  或者返回 Content-Type: text/event-stream(即 SSE 流式响应)

若采用 SSE 流式响应:

  • 在 SSE 流中,服务器可逐渐发送 JSON-RPC 通知、请求以及最终响应。
  • 流关闭前,服务器应确保对每个客户端请求至少发送一次对应的响应。
  • 中断重连支持:服务器可分配 SSE 事件 id 字段,客户端重连时使用 Last-Event-ID 请求续流。

客户端也可以发起 HTTP GET 请求到同一端点,以建立一个 SSE 流,供服务器用于主动推送通知 / 请求。

在 GET 请求中,如果服务器支持 SSE 推送,返回 Content-Type: text/event-stream;否则可以返回 405 Method Not Allowed

会话管理
  • 在初始化阶段(第一次 InitializeRequest / 响应)中,服务器 可选择在响应 header 中返回 Mcp-Session-Id

  • 若给出 Mcp-Session-Id,客户端后续所有请求必须包含该 header,否则服务器可返回 400 错误。

  • 会话可被服务器终止(之后任何持有该 session id 的请求都应当被拒绝返回 404)。

  • 客户端在无需会话时,可发 HTTP DELETE 请求(带 Mcp-Session-Id)以显式结束会话(服务器可以支持也可以拒绝,返回 405 表示不支持)。

多连接 / 并发 / 重发

  • 客户端可同时维持多个 SSE 流(多个连接)用于接收消息,但服务器必须保证每条 JSON-RPC 消息只在 一个 SSE 流上发送。

  • 若连接意外中断,客户端重连时可以使用 Last-Event-ID 来请求服务器重发漏掉的事件(基于事件 ID)— 但服务器并非强制必须支持续流。

向后兼容(旧 HTTP + SSE 机制)
​​​​
  • 尽管 HTTP+SSE 已被替代为旧机制,服务器若希望兼容老客户端,可以同时保留旧 SSE 端点与 MCP endpoint。客户端在 POST 初始化失败时,可以退回使用旧模式。
  • 客户端设计时应对两种情况做兼容处理。

4. 总结

        基于官方规范,总结如下:

  • SSE 不再是 MCP 的独立标准传输
    在新规范里,SSE 只是 Streamable HTTP 机制中的一种可选响应方式,而不是与 stdio / streamable_http 平级的传输方式。

  • HTTP + SSE 机制已被 “弃用 / 替代”
    过去的版本中把 HTTP + SSE 当做标准方案,但在最新版本里,已经改为被淘汰状态,仅作为兼容机制被保留。

  • Streamable HTTP 更为灵活
    它允许对每个请求选择 “一次性 JSON 响应” 或 “升级为 SSE 流式响应”;不仅仅是 “总是 SSE” 或 “总是 JSON”。

  • 会话管理机制 是这个版本的一个新增 / 强化点
    之前我提到 session ID 的概念,但在新的规范里这个机制更为明确、强制性更高。

  • 断线续流 / 重发机制 在规范里被制度化(使用 SSE event id + Last-Event-ID)作为可选支持。

5. 参考

【1】https://modelcontextprotocol.io/specification/2025-03-26/basic/transports

http://www.dtcms.com/a/461750.html

相关文章:

  • Git 小白超详细指南
  • 深度学习基础:从原理到实践——第二章神经网络(上)
  • 企业网站制作报价单哈尔滨视频剪辑培训机构
  • SOME/IP车载服务的形式化安全分析和防护
  • TCP三次握手与四次挥手状态解析
  • 网站想换空间invoker wordpress
  • Eureka注册中心
  • 网站建设销售总结房屋装修在线设计网站
  • 机器学习基本概念
  • Buffer:Node.js 里处理二进制数据的 “小工具”
  • 网站开发博客大前端d8扁平化wordpress模板
  • Go 语言环境安装指南
  • UiPath2025笔记第六节:java调试API触发器
  • Python实现自动化巡检ESXi6.7并输出excel报告
  • wordpress手机显示不了图片关键词优化计划
  • Python学习之基础篇
  • 手机app开发 网站建设描述网站开发的广告词
  • 24届-Python面经(华为OD)
  • JavaSpring项目之连接,并使用redis
  • 前端核心框架vue之(vue状态核心案例篇4/5)
  • 前端请求优化进阶:并发控制、缓存优化与错误重试实战教程
  • 网站建设的主要特征一个网址需要多少钱
  • 多模态医疗大模型Python编程合规前置化与智能体持续学习研究(上)
  • Transformer 面试题及详细答案120道(71-80)-- 应用场景
  • 官方网站内容可做证据吗百度软件推广联盟
  • 做网站的好处网站开发课设
  • 解决:谷歌浏览器提示“此扩展程序已停用,因为它已不再受支持”已解决
  • 【小程序】微信开发者工具上调用api接口可以,到了线上调用发现提示wx.request调用报错,原来是https协议问题
  • 智能指针三部曲:unique·shared·weak 的三角恋
  • gps的时间比实际晚8小时怎么办