【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。

posted @ 2025-07-04 20:20  十三山入秋  阅读(306)  评论(1)    收藏  举报