MCP 支持三种传输协议:stdio,http,sse详解,小学生一看都能懂

169 阅读6分钟

stdiohttpsse这三种传输协议在MCP框架下的工作原理、特点以及各自的最佳适用场景。

核心比喻:AI总指挥的三种“通讯设备”

我们把大模型比作“AI总指挥”,把各种MCP服务(TTS、图像等)比作“专家工程师”。这三种传输协议,就相当于总指挥与工程师之间进行沟通时,可以选用的三种不同的**“通讯设备”**。

  1. stdio (标准输入/输出): 就像是**“对讲机”**。
  2. http (HTTP/HTTPS): 就像是**“发邮件”**。
  3. sse (Server-Sent Events): 就像是**“订阅报纸/RSS源”**。

下面我们来详细解析每一种设备的工作方式。


1. stdio (Standard Input/Output) - 对讲机模式

  • 工作原理:

    这是最底层、最直接的通信方式。在这种模式下,你的应用程序(客户端)会直接启动一个MCP服务的子进程。然后,你的主程序通过写入这个子进程的**标准输入流(stdin)来发送指令,并通过读取其标准输出流(stdout)**来接收结果。数据在父子进程之间通过操作系统的管道(Pipe)直接传输。

  • 数据格式:

    通常是行分隔的JSON。你发送一个JSON指令,后面跟一个换行符;服务处理完,也返回一个JSON结果,后面跟一个换行符。

  • 优点:

    • 极致的低延迟: 数据无需经过网络协议栈的层层封装,直接在内存和操作系统管道中传输,延迟是最低的。
    • 资源占用少: 没有网络端口监听、HTTP头解析等额外开销,非常轻量。
    • 易于管理: 父进程可以完全控制子进程的生命周期(启动、关闭)。
  • 缺点:

    • 仅限本地通信: stdio 模式只能用于在同一台物理机器上的两个进程间通信。你无法通过它与另一台服务器上的MCP服务对话。
    • 并发处理复杂: 如果要同时与多个服务交互,需要管理多个子进程和它们的输入输出流,比网络请求更复杂。
  • 适用场景:

    • 本地开发与调试: 在本地开发机上快速测试MCP服务功能时,stdio是最便捷的方式。
    • 桌面应用集成: 当你开发一个桌面客户端软件(例如,一个视频剪辑工具),需要内嵌一个本地的AI模型(如TTS)时,通过stdio来调用这个模型进程是最理想的选择。
    • 对延迟要求极高的嵌入式或边缘计算场景。

2. http (HTTP/HTTPS) - 邮件模式

  • 工作原理:

    这是最通用、最标准的网络通信方式。MCP服务会作为一个标准的Web服务器运行,监听一个HTTP端口(如8080)。你的应用程序(客户端)通过向这个服务的特定URL(如 http://localhost:8080/v1/chat) 发送一个HTTP POST请求来提交任务。服务处理完毕后,通过HTTP响应(Response)将完整的结果一次性返回。

  • 数据格式:

    请求和响应的主体(Body)都是标准的JSON格式。

  • 优点:

    • 通用性与跨平台: 几乎所有的编程语言和平台都原生支持HTTP客户端,接入极其方便。
    • 支持网络通信: 可以轻松地与部署在任何地方(本地、局域网、云端)的MCP服务进行通信,是分布式部署的基础。
    • 生态成熟: 可以直接利用现有的网络负载均衡、反向代理(Nginx)、API网关等成熟技术。
  • 缺点:

    • 请求-响应模式的局限: 客户端必须等待服务器完全处理完任务后,才能收到完整的响应。对于耗时较长的任务(如生成一段长音频或视频),客户端会长时间处于等待状态。
    • 延迟相对较高: 相比stdio,有额外的TCP握手和HTTP协议头的开销。
  • 适用场景:

    • 绝大多数Web应用和后端服务集成: 当你的业务逻辑部署在一个Web服务器上,需要调用AI能力时,HTTP是最自然、最标准的集成方式。
    • 需要横向扩展的分布式系统: 你可以部署多个MCP服务实例,并通过一个负载均衡器来分发HTTP请求。
    • 适用于“一问一答”式的、响应时间较短的AI任务,例如文本分类、情感分析、短文本生成等。

3. sse (Server-Sent Events) - 订阅报纸模式

  • 工作原理:

    这是一种流式通信协议,专门解决http模式下“长时间等待”的问题。客户端向服务器发起一个请求后,会建立一个持久的单向连接。服务器可以随时、多次通过这个连接,将数据块(事件)“推送”给客户端,而无需关闭连接。

  • 数据格式:

    一种特殊的、基于文本的流式格式。每个事件块都以 data: 开头,以 \n\n 结尾。

  • 优点:

    • 流式响应,体验极佳: 对于生成式任务,用户可以立刻看到第一个字或第一段音频,而不是等待几十秒看到全部结果。这极大地提升了用户体验,就像ChatGPT打字机一样的效果。
    • 实现简单: 相比WebSocket,SSE是基于标准HTTP的,实现更简单,且能自动处理重连。
    • 高效: 建立一次连接后,可以持续接收数据,避免了反复建立HTTP连接的开销。
  • 缺点:

    • 单向通信: 数据流只能从服务器到客户端。客户端无法通过已建立的SSE连接向服务器发送新消息(但可以在发起连接时通过URL参数或请求头传递初始信息)。
  • 适用场景:

    • 所有耗时较长的生成式AI任务: 这是大模型聊天、长文本生成、语音合成(TTS)、代码生成等场景的最佳协议
    • 实时通知与更新: 例如,向Web前端推送实时日志、股票价格更新、体育比分等。

总结与选择建议

协议通信模式延迟核心优势最佳场景
stdio本地进程间极低性能最高,资源占用最少本地开发、桌面应用内嵌
http网络请求-响应中等通用性最强,跨平台,生态成熟分布式部署,快速、一次性返回结果的AI任务
sse网络流式推送首包延迟低流式响应,用户体验好所有生成式AI任务(聊天、TTS、代码生成等)

给您的建议:

  • 如果你在本地开发或做一个需要打包AI模型的桌面应用,请使用 stdio
  • 如果你的应用是标准的Web后端服务,需要调用的AI任务能很快返回结果,请使用 http
  • 如果你的应用需要调用任何生成式的、耗时可能超过一秒的AI能力,并且你想提供最佳的用户体验,请务必选择 sse。在现代大模型应用中,sse 正在成为事实上的标准,主流的AI编码工具像cursor都是使用sse。