下一代 MCP

发布于

在过去一年半的时间里,[Model Context Protocol](https://modelcontextprotocol.io/)(MCP)已经成为代理与外部服务交互的通用标准。

但MCP的主要批评之一是,该协议要求客户端和服务器之间保持有状态连接。这是由于MCP的起源以及为本地应用程序设计的[第一个STDIO传输](https://modelcontextprotocol.info/blog/transport-future/)。当MCP服务器变为远程时,它将在本地良好工作的有状态连接转移到了网络基础设施上。构建一个良好的MCP服务器意味着管理请求路由、保持会话、消息重放,以及比传统网页服务器更多的开销和复杂性。这种现象现在也发生了变化。

最新的MCP [2026-07-28 规格](https://blog.modelcontextprotocol.io/posts/2026-07-28)上周发布,同时发布了更新的TypeScript、Python、Go和C# SDK。MCP现在是一个完全无状态的协议。规范、交互模型和SDK都经过重写,以利用这个新协议并简化使用。这意味着MCP服务器现在可以仅在Worker中运行,不再需要有状态的基础设施,客户也因此受益于操作的简化和减少的成本。

## 一个新的MCP

在Cloudflare,我们与MCP的旅程始于一开始。2025年3月,我们发布了用于[使用Cloudflare Agents SDK构建MCP服务器](https://blog.cloudflare.com/remote-model-context-protocol-servers-mcp/)的McpAgent原语。两个月后,我们举办了一场[MCP演示日](https://blog.cloudflare.com/mcp-demo-day/),展示了Asana、Atlassian、Block、Intercom、Linear、PayPal、Sentry、Stripe和Webflow等客户如何推出自己的MCP服务器,以及[13个特定于Cloudflare产品的MCP服务器](https://blog.cloudflare.com/remote-model-context-protocol-servers-mcp/)。一年前,我们发布了[MCP服务器门户](https://blog.cloudflare.com/zero-trust-mcp-server-portals/),以帮助企业安全地在其组织中采用MCP。

[Cloudflare Durable Objects](https://developers.cloudflare.com/durable-objects/)被独特地定位为托管这些新应用的最佳场所。它们是有状态服务器,结合了计算、持久的事务存储(通过嵌入的SQLite)和实时协调。它们根据需要进行动态扩展,在不使用时进入休眠,并保持MCP所需的有状态连接以实现代理与人的交互。

McpAgent与[Workers OAuth Provider](https://github.com/cloudflare/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自发布之初就支持新规范](https://developers.cloudflare.com/changelog/post/2026-07-27-agents-sdk-v0.20.0-mcp-sdk-v2/)。客户和合作伙伴在新规范最终确定之前就已在Cloudflare上使用发布候选版本,使我们有信心[McpAgent](https://developers.cloudflare.com/agents/model-context-protocol/guides/migrate-to-mcp-sdk-v2/)到新`createMcpHandler`(见下文)的迁移路径在生产流量中有效。

## 引导不再需要开放流

有时,MCP服务器需要更多信息才能完成请求。例如,部署工具可能需要在发布到生产之前获得批准。设计工具可能需要用户选择颜色。账单工具可能需要在发放退款之前获得确认。MCP将这种交互称为[引导](https://modelcontextprotocol.io/specification/2026-07-28/client/elicitation)。

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

新协议通过[多轮交互请求(MRTR)](https://modelcontextprotocol.io/specification/draft/basic/patterns/mrtr)进行了重新设计。服务器可以返回一个`input_required`结果,描述它所需的内容。客户端收集答案并带着该输入重试操作。原始操作可以完成,而双方之间并不需要保留传输会话。

这是与旧的引导方式的重大变化。然而,从操作的角度来看,这使得实现更简单,我们相信这将允许更多开发人员利用这个功能来构建丰富的代理应用程序。

## HTTP基础设施理解MCP

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

新规范要求在可流媒体的HTTP请求中使用`Mcp-Method`和`Mcp-Name`头。例如,工具调用可以如下所示:

网关、速率限制器或Web应用防火墙现在可以根据头部做出决策,无需解析任意JSON。操作人员可以对不同的方法应用不同的规则,或使用相同的HTTP原语记录工具级别的指标。

该规范还向来自`tools/list`、`prompts/list`、`resources/list`和`resources/read`的结果添加了`ttlMs`和`cacheScope`的提示。工具目录被确定性排序,允许客户端重用它们,同时保持上游提示缓存在重新连接时的稳定性。

## 授权的演变

新规范还强化了MCP授权。当服务器和客户端已有关系时,MCP现在更倾向于使用预注册的客户端,然后使用[客户端ID元数据文档](https://modelcontextprotocol.io/specification/2026-07-28/basic/authorization/client-registration#client-id-metadata-documents)(CIMD)进行动态注册,动态客户端注册(DCR)作为备用。DCR不再推荐用于新实施,并计划在2027年夏季之后删除。

该规范还采用了[RFC 9207](https://datatracker.ietf.org/doc/html/rfc9207)版本标识。授权服务器宣传`authorization_response_iss_parameter_supported: true`并在成功的授权响应中包含iss。客户端将其与在开始授权流程之前发现的发证方进行比较。这可以防止一个发证方的授权响应与另一个发证方的响应相混淆。

还有几个不那么明显的变化填补了生产部署中的空白。MCP客户端现在在授权和令牌请求中发送RFC 8707 [resource](https://datatracker.ietf.org/doc/html/rfc8707)的规范服务器URI。令牌必须为该受众发放,并且仅被接受。
[Workers OAuth Provider](https://github.com/cloudflare/workers-oauth-provider)实现了这些MCP服务器的所有要求。只需这样包装您的处理程序函数:

## 成熟标准的生命周期

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

功能被分类为活动、弃用或移除。弃用的功能必须至少保持12个月的可用性,然后才能移除。在此次发布中,根、采样、日志记录、动态客户端注册和传统的HTTP+SSE传输被弃用,但现有实现有定义的迁移窗口。

这一政策给予团队最低的时间来计划升级,而不是对突然的移除作出反应。它还为核心协议留出了稳定的空间。

新思路可以通过新的扩展框架更快地流转,而不必立即成为核心协议的一部分。[MCP应用](https://modelcontextprotocol.io/extensions/apps/overview)和[企业管理授权](https://modelcontextprotocol.io/extensions/auth/enterprise-managed-authorization)已经是扩展,而[任务](https://modelcontextprotocol.io/extensions/tasks/overview)已被转移以提供可靠、长期工作的路径。实施者可以在需要时采用这些功能。

## 新的MCP与新的SDK

2025年11月,我们在Agents SDK中引入了`createMcpHandler`,构建于MCP TypeScript SDK中的实验性无状态模式之上。这允许仅使用工具、提示和资源的MCP服务器部署到Cloudflare Worker,从而降低复杂性、成本并简化部署。

我们很高兴看到`createMcpHandler`在此次发布中顺利过渡到[官方MCP TypeScript SDK](https://github.com/modelcontextprotocol/typescript-sdk/blob/main/packages/server/src/server/createMcpHandler.ts#L604)!

在2026年初,我们还与MCP维护者合作,将MCP TypeScript SDK从Node.js重新平台移植到Web标准,帮助改善与Bun、Deno和Cloudflare Workers等替代JavaScript运行时的互操作性。我们为TypeScript SDK贡献了打包、运行时shim和拆分包,降低了部署大小,并造福整个生态系统。

客户可以在保持向后兼容旧规范的同时迁移到新规范。`/mcp`端点同时接受新协议和来自2025流媒体HTTP客户端的无状态请求,因此大多数客户端可以在不更改配置的情况下重新连接。

例如,在2月份,我们发布了我们的代码模式[整个Cloudflare API的MCP服务器](https://blog.cloudflare.com/code-mode-mcp/),采用了这种非官方的无状态模式和(朗朗上口的)`WebStandardsStreamableHTTPServerTransport`。自那以来,它已扩展至每秒数千个请求,并提供数十亿次工具调用。

这是使用官方SDK和[Cloudflare Agents SDK](https://developers.cloudflare.com/agents/)构建最小服务器的形态:

真正依赖传统协议会话、服务端到客户端请求或独立流的服务器需要更为谨慎的迁移。它们可以在现有会话的路由旁边运行严格的无状态路由,转移功能,允许活动会话排空,然后在弃用期内删除传统路径。我们的[MCP SDK v2迁移指南](https://developers.cloudflare.com/agents/model-context-protocol/guides/migrate-to-mcp-sdk-v2/)涵盖了这一过程。对于MCP客户端,该过程甚至更简单:只需升级代理版本,它就会正常工作。

`createMcpHandler`API自Agents SDK开始,将继续保留在那里。我们还将继续包裹上游处理程序,以提供专注于Worker的接口,具有功能默认值和比较低级的MCP TypeScript SDK更丰富的交互模式。

## 下一代MCP已经在生产中

Sentry的联合创始人兼首席产品官David Cramer,是[MCP的潜力](https://cra.mr/mcp-skills-and-agents/)和其[早期改进机会](https://cra.mr/mcp-is-not-good-yet/)的知名发声者。在他早期的实际经验中,最新的MCP规格兑现了这一承诺,同时解决了早期的批评。

"我们在Cloudflare的SDK上构建了Sentry的MCP。我们是大粉丝,”Cramer告诉我们。“在7-28规格最终确定之前,我们就已经上线了这个新版本,并且没有破坏生产。对此我们也很满意。这个新规格清理了关于身份验证和工具的一些无用繁琐,这正是我想要的。只有当管道不再是整个故事时,代理才能真正有用。"

[Linear](https://linear.app/)建立了一个快速、现代的事件追踪和项目管理工具。他们采用MCP以便代理能够以简单、安全的方式访问Linear数据。

“ MCP是开放标准重要性的明确例证,” Linear的工程负责人Tom Moor表示。“最新版本的大幅改进使得托管MCP服务器变得更容易、更可靠,同时也增加了所需的许多功能。我仍然认为MCP被严重低估 - 我们根据标准构建了一次服务器,它与用户希望引入的任何AI客户端都能正常工作。Linear的立场一直是使你的Linear数据在你需要的地方可访问,而共享的规范使这一切变为可能,而不必构建数百个集成。”

[Anthropic](https://www.anthropic.com/)创建了MCP并将其捐赠给[Agentic AI Foundation](https://aaif.io/)。对于启动了该协议的团队来说,新规范是它经历的一个里程碑,也是整个社区继续推动它向前发展的一个标志。

"我们将MCP捐赠给Agentic AI Foundation,以使之成为整个生态系统的开放、供应商中立的基础设施。MCP现在是代理软件的基础层。它是应用程序构建的基础,连接人们日常所依赖的工具和数据,这是自发布以来协议的最重要进展。客户可以获得良好的性能,几乎不需要进行工程工作。

安全性遵循与保护互联网其余部分相同的成熟标准。来自各个社区的维护者和贡献者,基于企业级的真实生产经验,使这一切成为可能。我们迫不及待想看看开发人员在MCP上构建什么。”、MCP的联合创建者和首席维护者David Soria Parra如是说。

## MCP万岁

新的MCP规范今天已在Cloudflare上的客户端和服务器上可用。您可以在[Cloudflare Worker](https://developers.cloudflare.com/workers/)中运行一个无状态的MCP服务器,使用[Workers OAuth Provider](https://github.com/cloudflare/workers-oauth-provider)进行安全连接,并连接到在`Agent`中的MCP客户端。使用[Cloudflare Durable Objects](https://developers.cloudflare.com/durable-objects/)当您的应用程序确实需要协调状态时,并从同一路由为新客户端和传统客户端提供服务,同时用户进行迁移。

安装最新的[Agents SDK](https://developers.cloudflare.com/agents/)和MCP TypeScript服务器SDK,按照[迁移指南](https://developers.cloudflare.com/agents/model-context-protocol/guides/migrate-to-mcp-sdk-v2/),或者从`createMcpHandler` [文档](https://developers.cloudflare.com/agents/model-context-protocol/apis/handler-api/)开始。您还可以连接Cloudflare的[MCP服务器](https://developers.cloudflare.com/agents/model-context-protocol/cloudflare/servers-for-cloudflare/#product-specific-mcp-servers),这些服务器已经支持新的规范。

MCP不再需要有状态的基础设施来进行有用的交互工作。服务器可以作为普通的HTTP工作负载在Workers上运行,靠近用户,利用开发人员在其余网络上使用的规模、安全性和可观察性原语。

---

原文链接:[点击查看](https://blog.cloudflare.com/mcp-v2/)

评论

暂无评论。

0.048786s