【mcp 的三种协议】
让我帮你详细解释MCP服务器的三种传输机制的区别。
Search files...
Ran tool
Read file: openai-agents-js/docs/src/content/docs/guides/mcp.mdx
Ran tool
Read file: openai-agents-js/examples/docs/mcp/streamableHttp.ts
Read file: openai-agents-js/examples/docs/mcp/stdio.ts
很好的问题!让我详细解释这三种MCP服务器传输机制的区别:
三种MCP服务器传输机制对比
1. MCPServerStdio - 标准输入输出
工作原理:
- 通过标准输入输出(stdin/stdout)与本地子进程通信
- 启动一个本地进程作为MCP服务器
- 使用JSON-RPC协议进行通信
使用场景:
const mcpServer = new MCPServerStdio({
name: 'Filesystem MCP Server',
fullCommand: 'npx -y @modelcontextprotocol/server-filesystem /path/to/files'
});
特点:
- ✅ 最简单:直接运行本地命令
- ✅ 低延迟:进程间通信很快
- ✅ 易调试:可以直接在终端运行命令测试
- ❌ 仅限本地:无法连接远程服务器
- ❌ 进程管理:需要管理子进程生命周期
2. MCPServerSse - HTTP + Server-Sent Events
工作原理:
- 使用HTTP协议连接远程服务器
- 通过Server-Sent Events (SSE) 接收流式数据
- 双向通信:HTTP POST发送请求 + SSE接收响应
使用场景:
from agents.mcp import MCPServerSse
server = MCPServerSse(
params={
"url": "https://api.example.com/mcp",
"headers": {"Authorization": "Bearer token"},
"timeout": 10,
"sse_read_timeout": 300
}
)
特点:
- ✅ 远程访问:可连接任何远程MCP服务器
- ✅ 流式处理:支持实时数据流
- ✅ HTTP标准:使用标准HTTP协议,防火墙友好
- ✅ 简单实现:服务端实现相对简单
- ❌ 连接限制:SSE有浏览器连接数限制
- ❌ 单向流:SSE只能服务器到客户端
3. MCPServerStreamableHttp - 新型流式HTTP
工作原理:
- 使用MCP规范中定义的Streamable HTTP传输协议
- 支持双向流式通信
- 更高效的消息传输和会话管理
使用场景:
const mcpServer = new MCPServerStreamableHttp({
url: 'https://gitmcp.io/openai/codex',
name: 'GitMCP Documentation Server',
authProvider: myAuthProvider, // 支持OAuth
reconnectionOptions: { // 自动重连
maxRetries: 3,
retryDelay: 1000
}
});
特点:
- ✅ 最先进:专为MCP设计的现代协议
- ✅ 双向流:支持高效的双向流式通信
- ✅ 会话管理:内置会话恢复和重连机制
- ✅ 高性能:针对MCP用例优化
- ✅ 企业级:支持OAuth、自定义认证等
- ❌ 较新:生态系统还在发展中
- ❌ 复杂性:服务端实现更复杂
选择指南
| 需求 | 推荐方案 | 原因 |
|---|---|---|
| 本地文件系统操作 | MCPServerStdio | 简单、快速、本地安全 |
| 连接现有HTTP MCP服务器 | MCPServerSse | 广泛支持、稳定可靠 |
| 新项目,需要高性能远程连接 | MCPServerStreamableHttp | 现代设计、最佳性能 |
| 需要OAuth认证 | MCPServerStreamableHttp | 内置企业级认证支持 |
| 简单的远程API调用 | MCPServerSse | 实现简单、调试容易 |
| 大量数据流传输 | MCPServerStreamableHttp | 流式传输优化 |
实际代码对比
Stdio (本地):
# 启动本地文件系统服务器
server = MCPServerStdio(
params={"command": "npx", "args": ["-y", "@modelcontextprotocol/server-filesystem", "/data"]}
)
SSE (远程HTTP + 事件流):
# 连接远程SSE MCP服务器
server = MCPServerSse(
params={"url": "https://api.example.com/mcp/sse"}
)
StreamableHttp (新协议):
# 连接支持Streamable HTTP的现代MCP服务器
server = MCPServerStreamableHttp(
params={
"url": "https://api.example.com/mcp/streamable",
"terminate_on_close": True
}
)
总结
- MCPServerStdio: 本地最简单,适合开发和本地工具
- MCPServerSse: 远程标准方案,适合现有HTTP服务器
- MCPServerStreamableHttp: 未来趋势,适合新项目和高性能需求
选择哪种主要看你的MCP服务器在哪里运行以及它支持什么协议。大多数情况下,如果是本地用Stdio,远程用StreamableHttp(如果支持)或SSE。

浙公网安备 33010602011771号