模型上下文协议 (MCP) 中的传输层为客户端和服务器之间的通信提供了基础。传输层处理消息发送和接收的底层机制。

通信机制

MCP 目前主要有三种通信机制:

  1. 标准输入输出流(stdio)
  2. 可流式HTTP(Streamable HTTP)
  3. 服务器发送事件(Server-Sent Events, SSE)

1. 标准输入/输出 (stdio)

stdio 传输支持通过标准输入/输出流进行通信。这对于本地集成和命令行工具尤其有用。

使用场景

在以下情况下使用 stdio:

  • 构建命令行工具
  • 实现本地集成
  • 需要简单的进程通信
  • 使用 Shell 脚本

配置示例

拿github的mcp服务配置为例,配置文件如下所示:

{
"mcpServers": {
"github": {
"command": "npx",
"args": ["-y", "@modelcontextprotocol/server-github"],
"env": {
"GITHUB_PERSONAL_ACCESS_TOKEN": "<YOUR_TOKEN>"
}
}
}
}

2. 可流式 HTTP (Streamable HTTP)

可流式HTTP利用HTTP协议的分块传输编码(chunked transfer encoding)特性,允许服务器在生成完整响应前开始发送数据块。

使用场景

  • 构建基于 Web 的集成,比如在在浏览器中显示AI生成内容的应用
  • 需要通过 HTTP 进行客户端与服务器通信,比如进行AI模型的文本扩写等类似功能,需要实时反馈的流式UI更新
  • 需要有状态会话,比如在多轮对话系统中保持上下文连贯性,此时可以使用基于HTTP的会话管理机制。
  • 支持多个并发客户端,比如在大规模部署的AI服务中,需要同时处理来自不同用户的请求,或者需要跨多台服务器的AI处理。
  • 实现可断点续传连接,比如在网络不稳定环境下确保大型AI模型生成任务的连续性。

配置示例

以代码安全扫描MCP服务为例,需要注意的是type配置为http,配置如下:

{
"mcpServers": {
"qihoo-code-security2": {
"type": "http",
"url": "http://code-security.mcp.qihoo.net:8887/mcp"
}
}
}

3. 服务器发送事件(Server-Sent Events, SSE)

SSE也是一种基于HTTP的服务器推送技术,允许服务器向客户端推送数据。SSEHTML5规范的一部分,使用EventSource API实现。传统的 SSE 传输支持服务器到客户端的流式处理,其中包含用于客户端到服务器通信的 HTTP POST 请求。 SSE 作为独立传输自协议版本 2024-11-05 起已弃用。它已被 Streamable HTTP 取代,后者将 SSE 作为可选的流机制。

配置示例

以代码安全扫描MCP服务为例,需要注意的是type配置为sse,配置如下:

{
"mcpServers": {
"qihoo-code-security": {
"type": "sse",
"url": "http://code-security.mcp.qihoo.net:8888/sse",
"timeout": 300
}
}
}

三种通信机制的对比分析

针对三种通信机制从通信方向、扩展性、安全性等多个特性进行对比分析,具体细节见下表:

特性stdioStreamable HTTPSSE
概念标准输入输出流可流式HTTP服务器发送事件
通信方向双向 (基于进程)双向 (请求-响应)单向 (server→client)
部署复杂度
网络支持仅本地全面支持网络通信支持网络通信
断线重连不支持需手动实现内置支持
流式能力有限,本地高性能,协议灵活强大,双向流式,协议通用,流控能力强有限,仅适合轻量级Web推送
扩展性差 (局限于本地)极强 (可自定义transport)有限
浏览器兼容性不适用广泛支持大多数现代浏览器
安全机制依赖运行环境和权限隔离协议层集成多种安全手段,可通过HTTPS加密需手动实现,可通过HTTPS加密
双向通信支持 (需自定义协议)支持 (设计更完善)客户端到服务端需额外HTTP POST
标准化非网络标准正在标准化,未来主推非正式Web标准
性能本地高性能良好,支持HTTP/1/2一般,仅支持HTTP/1
适用场景本地开发、CLI工具、容器、无网络环境微服务、API、Web应用、云服务、高并发场景简单Web推送、页面实时更新
未来发展稳定,本地场景持续使用持续发展,主流解决方案逐渐被淘汰

选择建议

  • Stdio: 本地进程间通信,简单高效
  • Streamable HTTP: 现代 Web 应用、高性能 API 和网络服务(支持HTTP/2),以及安全敏感场景的最佳流式通信解决方案,也是 SSE 实现迁移的理想目标。
  • SSE: 适合于 Web 应用,将逐步被Streamable HTTP 替代。