Model Context Protocol (MCP) 规范定义了三种标准的传输机制 ↗,用于客户端和服务器之间的通信:
- stdio,通过标准输入和标准输出进行通信 — 专为本地 MCP 连接设计。
- Server-Sent Events (SSE) — 目前被大多数远程 MCP 客户端支持,但预计随时间推移将被 Streamable HTTP 替代。它需要两个端点:一个用于发送请求,另一个用于接收流式响应。
- Streamable HTTP — 2025年3月引入 ↗的新传输方法。它通过使用单个 HTTP 端点进行双向消息传递来简化通信。目前在远程 MCP 客户端中正在获得采用,预计将成为未来的标准传输方式。
使用 Agents SDK 构建的 MCP 服务器可以支持两种远程传输方法(SSE 和 Streamable HTTP),McpAgent
类 ↗会自动处理传输配置。
如果您正在构建新的 MCP 服务器或在 Cloudflare 上升级现有服务器,我们建议同时支持两种远程传输方法(SSE 和 Streamable HTTP),以确保与所有 MCP 客户端的兼容性。
您可以使用 "Deploy to Cloudflare" 按钮创建一个自动支持 SSE 和 Streamable HTTP 传输方法的远程 MCP 服务器。
如果您手动配置 MCP 服务器,以下是如何使用 McpAgent
类来处理两种传输方法:
export default { fetch(request: Request, env: Env, ctx: ExecutionContext) { const { pathname } = new URL(request.url);
if (pathname.startsWith('/sse')) { return MyMcpAgent.serveSSE('/sse').fetch(request, env, ctx); }
if (pathname.startsWith('/mcp')) { return MyMcpAgent.serve('/mcp').fetch(request, env, ctx); } },};
export default { fetch( request: Request, env: Env, ctx: ExecutionContext, ): Response | Promise<Response> { const { pathname } = new URL(request.url);
if (pathname.startsWith("/sse")) { return MyMcpAgent.serveSSE("/sse").fetch(request, env, ctx); }
if (pathname.startsWith("/mcp")) { return MyMcpAgent.serve("/mcp").fetch(request, env, ctx); }
// Handle case where no path matches return new Response("Not found", { status: 404 }); },};
const app = new Hono()
app.mount('/sse', MyMCP.serveSSE('/sse').fetch, { replaceRequest: false })app.mount('/mcp', MyMCP.serve('/mcp').fetch, { replaceRequest: false )
export default app
如果您的 MCP 服务器使用 Workers OAuth Provider ↗ 库实现身份验证和授权,那么您可以使用 apiHandlers
属性将其配置为支持两种传输方法。
export default new OAuthProvider({ apiHandlers: { "/sse": MyMCP.serveSSE("/sse"), "/mcp": MyMCP.serve("/mcp"), }, // ... other OAuth configuration});
如果您已经使用 Cloudflare Agents SDK 构建了远程 MCP 服务器,请进行以下更改以支持新的 Streamable HTTP 传输,同时保持与使用 SSE 的远程 MCP 客户端的兼容性:
- 对现有的 SSE 传输使用
MyMcpAgent.serveSSE('/sse')
。以前,这会是MyMcpAgent.mount('/sse')
,它已被保留作为别名。 - 使用
MyMcpAgent.serve('/mcp')
添加新路径以支持新的 Streamable HTTP 传输。
如果您有一个使用 Workers OAuth Provider 进行身份验证/授权的 MCP 服务器,请更新配置以使用 apiHandlers
属性,它替代了 apiRoute
和 apiHandler
。
通过这些少量更改,您的 MCP 服务器将支持两种传输方法,使其与现有和新客户端兼容。
虽然大多数 MCP 客户端尚未采用新的 Streamable HTTP 传输,但您可以使用 mcp-remote
↗ 立即开始测试,这是一个适配器,让原本只支持本地连接的 MCP 客户端可以与远程 MCP 服务器协作。
按照此指南获取如何使用 mcp-remote
本地代理 ↗从 Claude Desktop、Cursor、Windsurf 和其他本地 MCP 客户端连接到远程 MCP 服务器的说明。
- @2025 Cloudflare Ubitools
- Cf Repo