Google Developers Blog

Scaling AI Agent Infrastructure with the MCP Stateless updates

8.5内容质量

TL;DR · AI 摘要

Google通过MCP协议无状态更新实现AI代理基础设施的云原生扩展,移除会话管理后支持HTTP负载均衡,提升百万级并发处理能力。

核心要点

  • MCP协议2026年更新移除会话管理,实现无状态通信
  • 新协议支持HTTP负载均衡,解决云原生水平扩展瓶颈
  • Google与Hugging Face合作推动MCP协议标准化

结构提纲

按章节快速跳转。

  1. 介绍MCP协议在云原生部署中的扩展瓶颈问题

  2. 分析旧版MCP协议依赖会话ID导致的扩展性缺陷

  3. 描述2026版MCP移除会话管理后的通信模型

  4. 说明Google与合作伙伴推动协议标准化的过程

  5. 新协议支持百万级并发查询的云原生部署

思维导图

用一张图看清主题之间的关系。

查看大纲文本(无障碍 / 无 JS 友好)
  • MCP协议无状态更新
    • 旧协议问题
      • 会话ID绑定容器
      • 负载均衡失效
    • 解决方案
      • 移除会话管理
      • HTTP负载均衡支持
    • 技术影响
      • 百万级并发处理
      • 云原生标准化

金句 / Highlights

值得收藏与分享的关键句。

#MCP协议#云原生#AI代理#HTTP负载均衡
打开原文

使用MCP无状态更新扩展AI代理基础设施 - Google Developers Blog

Google Tag Manager (noscript)

结束Google Tag Manager (noscript)

HTML

使用MCP无状态更新扩展AI代理基础设施

2026年8月5日

Kurtis Van Gent

高级软件工程师

Google Cloud Data

Alan Blount

技术产品经理

Google Cloud AI

分享

  • Facebook
  • Twitter
  • LinkedIn
  • 邮件

随着您部署智能体工作流并扩展用户规模,系统瓶颈会发生变化。当Model Context Protocol (MCP)于2024年底首次推出时,它提供了一个优雅的面向会话的框架,使大型语言模型能够协商能力、调用外部工具并检索上下文资源。这种设计非常适合本地机器上单个客户端与单个服务器的通信场景,并针对stdio进行了优化。

但当我们在Google开始将MCP服务器部署到云原生基础设施时,遇到了难以逾越的障碍。原始协议层的会话模型需要持久化状态、握手和会话绑定。简而言之,它基于有状态传输构建,违背了现代云原生可扩展性的核心原则。

为了解决这个问题,Google率先推动将协议与有状态传输限制解耦。我们的团队需要MCP在Google Cloud上处理数百万个并发查询,我们也深知你们需要MCP做好应对真实企业级规模的准备。通过与Hugging Face及其他行业合作伙伴的紧密协作,我们共同成立了MCP传输工作组。

今天,我们非常高兴地宣布这项工作的成果:2026-07-28版Model Context Protocol规范候选版本已发布,该版本正在被广泛采用。这一里程碑式发布彻底移除了传输层会话管理,为您提供了可在普通HTTP负载均衡基础设施上扩展的无状态协议核心。这是自MCP发布以来最大的一次规范变更,如果您没有继续阅读本文,也请放心,这是一次重大改进——可扩展性更强、安全性更高,同时使用难度保持不变。

为何会话成为生产瓶颈

在原始协议模型(规范版本2025-11-25)[392]中,通过HTTP连接到MCP服务器需要一个有状态的初始化过程:

code
// POST /mcp - Legacy 2025-11-25 Handshake
{
  "jsonrpc": "2.0",
  "id": 1,
  "method": "initialize",
  "params": {
    "protocolVersion": "2025-11-25",
    "capabilities": {},
    "clientInfo": {
      "name": "my-app",
      "version": "1.0"
    }
  }
}

JSON

已复制

服务器会返回一个Mcp-Session-Id头。为了进行后续的工具调用或资源查询,客户端必须在每个请求中包含该唯一会话ID,这会将客户端绑定到存储其内存会话状态的特定容器或Pod上。

这种有状态限制打破了云原生工程师依赖的水平扩展模型:

  • 负载均衡开销:标准的轮询负载均衡器不知道哪个容器保存了哪个内存会话。在部署于包含三个Pod的Kubernetes集群后,客户端的第二次请求可能会随机命中另一个Pod,导致返回400 Session Not Found错误。
  • 粘性路由开销:开发人员被迫在负载均衡器级别配置粘性会话亲和性规则,这会阻碍流量的均匀分布,并使自动扩展变得极不高效。
  • 零容错能力:如果容器重启或崩溃,会话状态会立即丢失,导致活跃客户端聊天中出现瞬时错误,破坏用户体验。
  • 复杂的基础设施需求:运行远程MCP服务器需要共享的Redis会话存储或复杂的网关级数据包检查,引入大量延迟和运营成本。

新的请求模型:完全无状态化

2026-07-28规范通过使协议核心完全无状态解决了这些问题。握手机制已被移除,初始化/已初始化握手(SEP-2575)和逻辑Mcp-Session-Id头(SEP-2567)已完全删除。

现在,每个请求都具备自描述性和独立性。过去在连接建立时一次性交换的协议版本、客户端信息和客户端能力,现在以_meta字段的形式内联在每个请求中。

以下是新2026-07-28规范下无状态工具调用的示例:

code
POST /mcp HTTP/1.1
Host: mcp-server.example
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"
    },
    "_meta": {
      "io.modelcontextprotocol/protocolVersion": "2026-07-28",
      "io.modelcontextprotocol/clientCapabilities": {},
      "io.modelcontextprotocol/clientInfo": {
        "name": "my-app",
        "version": "1.0"
      }
    }
  }
}

纯文本

无状态核心的架构优势

  • 标准的轮询路由:由于任何容器实例都能处理任何请求,您可以将有状态的MCP服务器部署在标准的轮询负载均衡器后方。
  • 无缝的无服务器部署:现在可以将MCP服务器作为无服务器函数部署在Google Cloud Run或Google Cloud Functions等平台上。由于无需维护持久连接,服务器在空闲时可完全关闭,大幅降低成本。
  • 透明的故障转移:容器重启、滚动部署和自动扩展事件对客户端完全透明。如果容器崩溃,负载均衡器会将下一个请求无缝路由到健康节点,不会中断会话。
  • 无需Redis会话:GitHub MCP Server等主要生产服务器已升级到此规范,完全移除了Redis会话存储,消除了每次调用的数据库读写操作,使交互更加流畅。

HTTP标准化:可路由、可缓存、可追踪

在没有协议会话的情况下,我们需要标准化机制来高效路由和管理流量。在传输工作组的协作下,我们参与设计了SEP-2243(HTTP标准化)[302, 542]。

可流式处理的HTTP POST请求现在携带特定HTTP头:

  • Mcp-Protocol-Version:协议版本。
  • Mcp-Method:正在执行的JSON-RPC方法(如tools/call)。
  • Mcp-Name:正在调用的具体工具、提示或资源名称。

这些头信息会镜像到JSON-RPC正文。如果信息不一致,服务器会以-32020头信息不匹配代码拒绝请求。

无需深度数据包检查

通过将这些值提升为标准 HTTP 头部,代理、网关和负载均衡器可以在不检查请求体的情况下实现流量路由、速率限制和审计。对安全和日志团队而言,这极大地降低了网关层的延迟和处理开销。

基于 ttlMs 的智能缓存(SEP-2549)

为避免仅为了监控工具或提示列表是否发生变化而需要维持长期的服务器发送事件(SSE)连接,该规范引入了基于 HTTP Cache-Control 的缓存字段。工具和资源结果现在可以返回 ttlMs(毫秒级生存时间)和 cacheScope 字段。客户端可以明确知道工具/列表响应的有效时长,以及是否可以在多个用户之间安全缓存。

多往返请求(MRTR):无状态地处理引导请求

在无状态世界中,我们面临的最复杂挑战之一是服务器到客户端请求的处理。在之前的版本中,如果 MCP 服务器需要用户澄清(“引导提示”)或在工具调用期间需要确认,就必须保持 SSE 连接开启以向客户端推送请求。

多往返请求(SEP-2322)通过将交互生命周期重构为自包含步骤,优雅地解决了这个问题:

服务器不再阻塞线程或保持连接开启,而是立即返回一个包含序列化上下文 [398] 的 requestState 载荷的 InputRequiredResult:

code
// 服务器返回的 InputRequiredResult
{
  "resultType": "inputRequired",
  "inputRequests": {
    "confirm": {
      "type": "elicitation",
      "message": "确定要删除这三个文件吗?",
      "schema": {
        "type": "boolean"
      }
    }
  },
  "requestState": "eyJzdGVwIjoxLCJmaWxlcyI6WyJhIiwiYiIsImMiXX0="
}

客户端提示用户,收集布尔答案后,使用 inputResponses 和回显的 requestState 重新发起调用。由于 requestState 包含了恢复任务所需的所有信息,负载均衡器后端的任意服务器实例都可以处理重试请求!

任务扩展(SEP-2663):无阻塞的异步工作

有时工具调用本身就需要很长时间。数据库备份、CRM 同步或通过支付网关退款可能需要 10 到 60 秒不等。保持客户端连接开启会阻塞客户对话并造成大量连接队列。

任务扩展从实验性功能升级为成熟的一等协议扩展。现在,当客户端调用长时间运行的工具时,服务器会立即返回 taskId 并在后台启动执行:

code
// 示例:在 TypeScript 服务器中启动异步任务
server.tool(
  "process_refund",
  { orderId: z.string(), amount: z.number() },
  async ({ orderId, amount }) => {
    const taskId = randomUUID();
    
    // 将初始任务状态存储在共享数据存储中(例如 Redis)
    await setTaskState(taskId, { status: "working" });
    
    // 在后台异步处理退款
    processRefundAsync(taskId, orderId, amount);
    
    // 立即返回以保持对话流畅
    return {
      content: [
        {
          type: "text",
          text: JSON.stringify({
            taskId,
            status: "working",
            message: `订单 ${orderId} 的 $${amount} 退款正在处理中。任务 ID: ${taskId}`
          })
        }
      ]
    };
  }
);

JavaScript

客户端继续对话,告知用户其请求正在处理中,并可以使用标准的 tasks/get 和 tasks/update 原语进行轮询或订阅,以监控进度并获取最终结果。

明确的安全性与能力边界

当状态管理的责任从传输层转移到应用层时,安全性变得至关重要。2026-07-28 规范带来了多项关键的安全增强:

  • 颁发者验证(RFC 9207):公共客户端必须在授权响应中验证 iss 参数,防止多服务器架构中的会话劫持和基于重定向的攻击。
  • 资源指示器(RFC 8707):客户端明确指定令牌的适用 MCP 服务器,解决了“困惑副手”的委托问题。
  • 工具的完整 JSON Schema 2020-12:输入模式现在可以使用高级组合结构(如 oneOf、anyOf、allOf)和本地 $ref 定义,使参数高度描述性并严格验证。

废弃与可预测的未来(SEP-2577)

首次,MCP 现在有了正式的弃用政策。功能通过结构化的 Active -> 已弃用 -> 已移除生命周期进行过渡,且至少有 12 个月的过渡窗口。今天有三个功能进入弃用阶段:

  • Roots:被显式工具参数、资源 URI 或服务器配置取代。
  • 采样:被直接调用 LLM 提供商 API 取代。
  • 日志:被标准 stderr 用于 stdio 连接,或使用 OpenTelemetry 用于结构化云可观测性取代。

入门与迁移

所有四个 Tier-1 SDK(TypeScript、Python、Go 和 C#)现已提供支持 2026-07-28 规范的测试版发布。我们强烈建议您今天就在测试环境中开始测试这些版本。

Python(mcp v2)

在 Python 中,MCPServer 装饰器 API 完全兼容 [303]。您可以直接通过以下命令安装测试版:

code
pip install "mcp[cli]==2.0.0b1"

Shell

TypeScript(拆分包)

TypeScript v2 用模块化、专注的库取代了单体的 @modelcontextprotocol/sdk 包,以保持您的依赖项轻量。安装方式如下:

code
npm install @modelcontextprotocol/server@beta
npm install @modelcontextprotocol/client@beta

提供了一个便捷的 codemod 工具,用于处理标准 API 重命名(如将 .tool() 重命名为 registerTool):

code
npx @modelcontextprotocol/codemod@beta v1-to-v2 .

结论

2026-07-28 规范标志着 Model Context Protocol 的重要转折点,使其从一个有前景的本地集成层,转变为构建企业级 AI 应用的基础性开放基础设施。

感谢 MCP Transports 工作组及其他跨公司团队的巨大努力,使这一切成为可能。同时感谢 Google 团队维护 Go MCP SDK 并于 7 月 28 日发布 v1.7.0 版本,该版本在发布当天即已就绪,支持包括 GitHub MCP Server 在内的关键集成。

Google 推动无状态传输的初衷源于实际需求。我们需要一种足够强大的协议来应对全球开发者群体的庞大体量,同时希望确保每位开发者(无论使用 Google Cloud 还是其他平台)都能获得高度可靠、安全且可无限扩展的智能代理基础设施。

通过将状态从传输层解耦,我们使负载均衡变得简单,自动扩展无缝衔接,无服务器部署成为现实。我们迫不及待想看到大家基于这一全新无状态基础构建出的极具扩展性的 AI 代理!

了解更多:

发布分类:

  • AI
  • Cloud
  • Announcements
  • Learn

上一篇 下一篇

相关文章

列表

AI Cloud Community Business and Leadership

[为什么 Go 是 AI 辅助软件工程的理想语言](#) 2026 年 8 月 11 日

Announcements Learn

[Agent Plugins:打包你的技能、工具等](#) 2026 年 8 月 6 日

Web How-To Guides

[使用 LiteRT 和 Gemma 掌握树莓派边缘 AI](#)

导航点 /