返回 文章 apply CMS 文章

MCP 下一代:无状态协议革新,简化部署与扩展

了解 MCP 协议的重大升级:无状态化、简化引导、HTTP 头支持,以及如何迁移到新 SDK。

MCP无状态CloudflareAI代理
成长分 / 100 84 综合收获、行动、留存与影响

MCP 下一代:无状态协议革新,简化部署与扩展
为什么值得读MCP 协议迎来重大版本更新,从有状态变为无状态,大幅降低服务器部署和运维复杂度。

Cloudflare 作为早期采用者,提供了详细的迁移路径和实际生产案例,具有参考价值。

关键洞察
  1. 新 MCP 协议移除强制握手和会话 ID,每个请求自带版本和身份,服务器可无状态运行。
  2. 引导(elicitation)改为多轮往返请求(MRTR),无需开放流,简化操作。
  3. HTTP 请求新增 Mcp-Method 和 Mcp-Name 头,网关可基于头部决策,无需解析 JSON。
转成行动

深入阅读

正文与原文对照

原文保真覆盖:全文原文字符:18618

下一代 MCP

在过去一年半的时间里,模型上下文协议(MCP)已成为智能体与外部服务交互的通用标准。

但MCP的主要批评之一是该协议要求客户端和服务器之间保持有状态连接。这源于MCP的起源和首个为本地应用设计的STDIO传输。当MCP服务器转向远程时,它将本地运行良好的有状态连接转换并移植到Web基础设施上。构建一个行为良好的MCP服务器意味着管理请求路由到粘性会话、保持流打开、消息重放,以及比传统Web服务器更多的开销和复杂性。现在这改变了。

最新的MCP 2026-07-28规范于上周发布,同时更新了TypeScript、Python、Go和C# SDK。MCP现在是一个完全无状态的协议。规范、交互模型和SDK都已重写,以利用这一新协议并简化使用。这意味着MCP服务器现在可以在一个Worker中运行,无需有状态基础设施,客户受益于操作简单和更少活动部件的成本降低。

新的MCP

在Cloudflare,我们与MCP的旅程可以追溯到最初。2025年3月,我们发布了McpAgent原语,用于使用Cloudflare Agents SDK构建MCP服务器。两个月后,我们举办了

展示Asana、Atlassian、Block、Intercom、Linear、PayPal、Sentry、Stripe和Webflow等客户推出自己的MCP服务器以及

MCP演示日。一年前,我们发布了

13个Cloudflare产品特定的MCP服务器,以帮助企业在其组织中安全采用MCP。

MCP服务器门户 Cloudflare Durable Objects独特地定位于成为托管这些新应用的最佳场所。它们是有状态服务器,结合了计算、持久事务存储(通过嵌入式SQLite)和实时协调。它们按需扩展,不使用时休眠,并保持MCP所需的智能体与人类交互的有状态连接。

McpAgent

Workers OAuth Provider包结合,是托管远程MCP服务器的最佳场所。然而,很明显,MCP可以更简单、更高效、更易于托管,同时保持我们喜爱的所有功能。

这次MCP 2026-07-28规范的发布是整个MCP团队和SDK维护者数月工作的成果。在这篇文章中,我们将概述对开发人员最重要的协议变更,分享在生产环境中运行它的客户评价,并解释如何开始使用新规范进行构建。

MCP现在是无状态的

早期的MCP传输以initialize

initialized开始

启动会话的交换。服务器可以分配一个 Mcp-Session-Id 头,并且每个后续请求都必须找到与该会话关联的状态。在实践中,这意味着自动扩展基础设施必须保留活动会话,部署必须排空或迁移它们,并且失去活动实例可能迫使客户端重新连接或导致会话中断。无服务器平台可以运行 MCP 服务器,但只能通过为大多数交互甚至不需要的协议会话添加协调。

新协议从核心请求路径中移除了必需握手、Mcp-Session-Id 头和协议会话。每个请求携带其需要的协议版本、客户端身份和客户端能力。想要在发出另一个请求之前检查服务器的客户端可以调用 server/discover,但这是可选的。

这个简单的细节改变了 MCP 服务器的部署方式。请求可以到达服务器,调用工具、提示或资源,然后简单地返回结果。没有需要存储的协议会话。这消除了 MCP 的大部分复杂性,同时保留了其预期的所有功能,使 MCP 服务器更容易部署、扩展和长期维护。

因此,这个新规范也消除了对 McpAgent 的需求。虽然当应用程序本身需要状态时,Durable Objects 仍然是正确的原语,但 MCP 本身不再需要 Durable Object 来使用该协议。服务器可以在请求作用域的基础设施(如 Cloudflare Workers)上更快地扩展。

Cloudflare 的 Agents SDK 从第一天起就支持新规范。客户和合作伙伴在规范最终确定之前就在 Cloudflare 上使用了候选版本,这让我们相信从 from 迁移路径McpAgent 到新的 createMcpHandler(见下文)适用于生产流量。BLOG-3384 2.png

引导不再需要开放流

MCP 服务器有时在完成请求之前需要更多信息。例如,部署工具在发布到生产环境之前可能需要批准。设计工具可能需要用户选择颜色。计费工具在退款之前可能需要确认。MCP 将这种交互称为 引导

以前,服务器发起的请求(如 elicitation/create)依赖于开放流。部署这样的服务器需要平衡围绕流、成本和请求超时的复杂性。

新协议通过 多轮往返请求 (MRTR) 重新设计了这一点。服务器可以返回一个 input_required 结果,描述它需要什么。客户端收集答案并使用该输入重试操作。原始操作随后可以完成,而双方无需在这些请求之间保留传输会话。这是对旧引导方式的破坏性更改。然而,它在操作上实现起来简单得多,我们相信它将允许更多开发人员利用此功能构建丰富的代理应用程序。

BLOG-3384 3.png

HTTP 基础设施理解 MCP

MCP 请求是通过 HTTP 发送的 JSON-RPC 消息,但关于请求的信息以前只存在于 JSON 主体中。网关必须解析该主体才能了解请求是调用 tools/list、调用工具还是读取资源。

新规范要求在 Streamable HTTP 请求上包含 Mcp-MethodMcp-Name 头。例如,工具调用可以如下所示:

POST /mcp HTTP/1.1
MCP-Protocol-Version: 2026-07-28
Mcp-Method: tools/call
Mcp-Name: search
Content-Type: application/json
{
"jsonrpc": "2.0",
"id": 1,
"method": "tools/call",
"params": {
"name": "search",
"arguments": { "q": "otters" }
}
}

网关、限流器或 Web 应用防火墙现在可以根据请求头做出决策,而无需解析任意 JSON。操作员可以针对不同方法应用不同规则,或使用他们已在其他地方使用的相同 HTTP 原语记录工具级指标。

该规范还向 tools/listprompts/listresources/listresources/read 的结果添加了 ttlMscacheScope 提示。工具目录按确定性顺序排列,允许客户端重用它们,同时在重新连接时保持上游提示缓存稳定。

BLOG-3384 .png

授权持续演进

新规范还加强了 MCP 授权。当服务器和客户端已有关系时,MCP 现在优先使用预注册客户端,然后使用 客户端 ID 元数据文档 (CIMD) 进行动态注册,并以动态客户端注册 (DCR) 作为回退。DCR 已弃用,不适用于新实现,并计划在 2027 年夏季之后移除。

该规范还采用了 RFC 9207 颁发者标识。授权服务器通告 authorization_response_iss_parameter_supported: true,并在成功的授权响应中包含 iss。客户端将其与开始授权流程前发现的颁发者进行比较。这可以防止一个颁发者的授权响应与另一个颁发者的响应混淆。

还有一些不太明显的更改,弥补了生产部署中的差距。MCP 客户端现在在授权和令牌请求中发送规范服务器 URI 作为 RFC 8707 resource。令牌必须针对该受众颁发,并且仅由该受众接受。Workers OAuth Provider 为 Workers 上的 MCP 服务器实现了所有这些要求。只需像这样包装你的处理函数:

import { OAuthProvider } from "@cloudflare/workers-oauth-provider";
export default new OAuthProvider({
apiRoute: "/mcp",
apiHandler: mcpHandler,
defaultHandler: authorizationHandler,
authorizeEndpoint: "/authorize",
tokenEndpoint: "/oauth/token",
clientIdMetadataDocumentEnabled: true,
resourceMetadata: {
resource: "https://mcp.example.com/mcp",
authorization_servers: ["https://mcp.example.com"],
scopes_supported: ["mcp:read"],
},
});

成熟标准的生命周期

技术变更只是本次发布的一部分。MCP 2026-07-28 还引入了正式的功能生命周期。

功能被分类为活跃、弃用或移除。弃用的功能必须至少保留 12 个月才能被移除。根、采样、日志、动态客户端注册以及传统的 HTTP+SSE 传输在本次发布中被弃用,但现有实现有明确的迁移窗口。

该策略为团队提供了最少的时间来规划升级,而不是对突然的移除做出反应。它也为核心协议提供了稳定的空间。

新想法可以通过新的扩展框架更快地推进,而不会立即成为核心协议的一部分。 MCP 应用

已经是扩展,而

企业托管授权已被迁移过来,为可靠、长期运行的工作提供路径。实现者可以根据需要采用这些功能。

任务## 带有新 SDK 的新 MCP

2025 年 11 月,我们在 Agents SDK 中引入了 createMcpHandler,它基于 MCP TypeScript SDK 中的实验性无状态模式。这使得仅使用工具、提示和资源的 MCP 服务器可以部署到 Cloudflare Worker,以降低复杂性、成本和部署难度。

我们很高兴看到 createMcpHandler 随着本次发布升级到 官方 MCP TypeScript SDK

2026 年初,我们还与 MCP 维护者合作,将 MCP TypeScript SDK 从 Node.js 重新平台化到 Web 标准,帮助提高与 Bun、Deno 和 Cloudflare Workers 等替代 JavaScript 运行时的互操作性。我们贡献了打包、运行时垫片和拆分包,降低了部署规模,使整个生态系统受益。

客户可以迁移到新规范,同时保持与旧规范的向后兼容性。/mcp 端点同时接受新协议和来自 2025 Streamable HTTP 客户端的无状态请求,因此大多数客户端无需更改配置即可重新连接。

例如,2 月份我们使用这种非官方无状态模式和(朗朗上口的)WebStandardsStreamableHTTPServerTransport 发布了我们的 Code Mode 适用于整个 Cloudflare API 的 MCP 服务器。此后,它已扩展到每秒数千个请求,并服务了数十亿次工具调用。以下是使用官方 SDK 和 Cloudflare Agents SDK 的最小服务器示例:

import { McpServer } from "@modelcontextprotocol/server";
import { createMcpHandler } from "agents/mcp/server";
import { z } from "zod";
function createServer() {
const server = new McpServer({
name: "hello-server",
version: "1.0.0",
});
server.registerTool(
"hello",
{
description: "Return a greeting",
inputSchema: { name: z.string().optional() },
},
async ({ name }) => ({
content: [
{
type: "text",
text: `Hello, ${name ?? "World"}!`,
},
],
}),
);
return server;
}
export default {
fetch(request, env, ctx) {
return createMcpHandler(createServer)(request, env, ctx);
},
}

真正依赖传统协议会话、服务器到客户端请求或独立流的服务器需要更谨慎的迁移。它们可以在现有会话路由旁边运行严格的无状态路由,逐步迁移功能,允许活动会话排空,然后在弃用期内移除旧路径。我们的 MCP SDK v2 迁移指南 涵盖了该过程。对于 MCP 客户端,过程甚至更简单:只需升级你的 agents 版本,它就能正常工作。

createMcpHandler

API 始于 Agents SDK,并将继续保留在那里。我们还将继续包装上游处理器,以提供面向 Worker 的接口,具有实用的默认值和比底层 MCP TypeScript SDK 更丰富的交互模式。

下一代 MCP 已投入生产

David Cramer, Sentry 的联合创始人兼首席产品官,是

及其

MCP 承诺的知名声音。在他早期的实际经验中,最新的 MCP 规范兑现了这一承诺,同时解决了早期的批评。

早期改进机会“我们在 Cloudflare 的 SDK 上构建了 Sentry 的 MCP。非常喜欢,”Cramer 告诉我们。“我们在 7-28 规范最终确定之前就上线了这个新版本,它没有破坏生产环境。对此也非常喜欢。这个新规范清理了围绕认证和工具的一些混乱,这正是我想要的。只有当管道不再是全部时,代理才会变得有用。”

Linear 构建了一个快速、现代的问题跟踪和项目管理工具。他们采用 MCP 让代理以简单安全的方式访问 Linear 数据。

“MCP 是开放标准重要性的一个明显例子,”Linear 工程主管 Tom Moor 说。“最新版本的规范是一个巨大的改进,使得托管 MCP 服务器更容易、更可靠,同时增加了急需的功能。我仍然认为 MCP 被严重低估了——我们基于标准构建了一次服务器,它就能与用户想带来的任何 AI 客户端配合使用。Linear 的立场一直是让你的 Linear 数据在你需要的地方可访问,而共享规范使得这成为可能,无需构建数百个集成。”

Anthropic 创建了 MCP 并将其捐赠给

。对于发起该协议的团队来说,新规范衡量了它已经走了多远,以及社区现在如何推动它前进。

Agentic AI 基金会“我们将 MCP 捐赠给 Agentic AI 基金会,以便它成为整个生态系统的开放、供应商中立的基础设施。MCP 现在是代理软件的基础。它是应用程序构建的层,用于连接人们日常依赖的工具和数据,这是自发布以来对协议最重要的进步。客户端以最少的工程工作获得显著的性能。

安全性遵循与保护互联网其他部分相同的成熟标准。来自社区的维护者和贡献者,利用企业规模的实际生产经验,使这成为可能。我们迫不及待地想看到开发者在 MCP 上构建什么。”MCP 的联合创建者兼首席维护者、Anthropic 技术团队成员 David Soria Parra 说。

MCP 万岁

新的 MCP 规范现已适用于 Cloudflare 上的客户端和服务器。您可以在 Cloudflare Worker 中运行无状态 MCP 服务器,并使用 Workers OAuth Provider 进行保护,然后连接到 Agent 中的 MCP 客户端。当您的应用程序确实需要协调状态时,请使用 Cloudflare Durable Objects,并在用户迁移期间从同一路由服务新的和旧的无状态客户端。安装最新的 Agents SDK 和 MCP TypeScript 服务器 SDK,按照 迁移指南 操作,或从 createMcpHandler 文档 开始。您还可以连接到 Cloudflare 的 MCP 服务器,这些服务器已经支持新规范。MCP 不再需要状态基础设施来执行有用的交互式工作。服务器可以作为普通 HTTP 工作负载在 Workers 上运行,靠近用户,并具备开发人员用于 Web 其余部分的规模、安全性和可观测性原语。