Skip to main content

传输层

MCP支持两种官方传输方式,同时允许自定义传输实现。

3.1 stdio传输

原理: 通过标准输入(stdin)和标准输出(stdout)流通信。Host启动Server子进程,通过管道交换JSON-RPC消息。每条消息以换行符分隔。 适用场景: Server和Client在同一台机器上运行。 优势:
  • 零网络开销,延迟最低
  • 无需配置端口、证书
  • 安全(不暴露网络接口)
  • 实现简单
劣势:
  • 只能本地使用
  • 一个Server进程只服务一个Client
配置示例 (Claude Desktop):
Host会启动 node /path/to/my-server/index.js 子进程,通过stdin/stdout通信。Server的stderr可以用于日志输出,不会干扰协议。

3.2 Streamable HTTP传输

状态: 当前推荐的远程传输方式(协议版本 2025-11-25)。 原理: Client和Server通过单一HTTP端点通信。Client用POST发送JSON-RPC请求,Server可以用Server-Sent Events (SSE)实现流式响应和主动推送。 适用场景: Server部署在远程(云服务器、SaaS服务等)。

核心机制

单一MCP端点: Server暴露一个端点(如 /mcp),处理两种HTTP方法:
  • POST: Client发送JSON-RPC请求。Server可以返回单个JSON响应,或以SSE流返回多个消息。
  • GET: Client建立SSE连接,用于接收Server的主动推送(通知、请求等)。
会话管理: 通过 Mcp-Session-Id HTTP头管理有状态会话:
协议版本头: 请求必须包含 MCP-Protocol-Version 头:
可恢复性: 支持SSE的 Last-Event-ID 机制实现断线重连。Client在重连时发送上次收到的事件ID,Server从该点继续推送:

优势

  • 支持远程访问
  • 一个Server可服务多个Client(通过Session ID区分)
  • 支持标准HTTP认证(OAuth 2.1、API Key等)
  • 支持负载均衡和水平扩展
  • 支持断线重连和消息恢复

劣势

  • 有网络延迟
  • 需要配置HTTPS、认证

配置示例

3.3 已弃用:HTTP+SSE传输

协议版本 2024-11-05 中定义的 HTTP+SSE 传输方式已被弃用。该方式使用两个独立端点(一个SSE端点用于Server推送,一个POST端点用于Client请求),设计较复杂且不支持会话恢复。所有新实现应使用 Streamable HTTP。
已弃用的HTTP+SSE与当前Streamable HTTP的区别:

3.4 自定义传输

MCP允许实现自定义传输层,只要满足JSON-RPC 2.0消息交换的基本要求:双向消息传递、请求-响应匹配、通知推送。例如,可以基于WebSocket、gRPC或自定义TCP协议实现。

3.5 选型指南

3.6 OAuth 2.1认证

远程MCP Server的认证基于 OAuth 2.1(draft-ietf-oauth-v2-1-13),这是MCP规范推荐的标准认证机制。详细内容见第7章:安全与认证 认证流程概览:
MCP规范不发明新的认证机制,而是完全基于现有的OAuth标准和RFC规范。
下一章: 构建MCP Server — TypeScript和Python的完整开发指南