Workers:MCP v2 的天然归宿

Cloudflare 无服务器平台如何成为无状态 MCP 服务器的最佳部署方案,涵盖 SDK 更新与零配置弹性扩展。

Workers:MCP v2 的天然归宿

上周二凌晨三点,我正在排查一台长期运行虚拟机上的 MCP 服务器故障。SSE 连接当晚已经第三次断开,会话状态被破坏,整条 Agent 编排流水线悄无声息地失败了。我盯着那 200 行仅仅为了维持持久连接而编写的重连逻辑,心想:一定有更好的办法。

两天后,Cloudflare 在 Agents Week 期间发布了”The next generation of MCP”,一切豁然开朗。2026-07-28 无状态 MCP 规范不仅是协议的修订——而是一次从根本上将无服务器平台变为最佳部署目标的架构重塑。而 Cloudflare Workers 天生无状态的执行模型,恰好是最完美的契合。

无状态 MCP 如何改变部署范式

Cloudflare Workers MCP 文档 Cloudflare 官方 MCP 文档 — 在 Workers 上部署无状态 MCP 服务器。

Cloudflare MCP v2 博客文章 Cloudflare Agents Week 发布的 MCP v2 部署实践文章。

旧版 MCP(2026-07-28 之前)依赖持久连接。你需要打开 SSE 流、维护会话状态,并祈祷服务器在多轮工具交互完成之前不会宕机。这意味着:

  • 长期运行的服务进程
  • 会话亲和性要求
  • 复杂的连接管理逻辑
  • 水平扩展困难

新的无状态规范彻底消除了这些问题。每个请求都是自描述的,不存在会话概念。三个标准 HTTP 头——Mcp-Protocol-VersionMcp-MethodMcp-Name——携带了路由和执行所需的全部上下文。一个 POST 请求到达、被处理、返回响应。结束。

这正是 Cloudflare Workers 的运作方式。

架构上的天然契合

Cloudflare Workers 是按需启动的 V8 隔离环境,处理完请求即销毁。它们不在调用之间维护状态,闲时缩容至零,按请求计费。

与旧版 MCP 部署模式对比:

维度旧版 MCP(SSE/会话)Workers 上的新版 MCP
连接模型持久 SSE 流单次 POST 请求
状态管理服务端会话无状态、自描述
扩展方式垂直扩展(更大的服务器)水平弹性(按请求自动扩展)
冷启动影响不适用(常驻运行)极小(Workers 上约 1-5ms)
成本模型始终运行的基础设施按调用付费
故障恢复需要重连逻辑重试请求即可
地理分布通常单区域300+ 边缘节点自动覆盖
部署复杂度容器、负载均衡、健康检查wrangler deploy

无状态规范不仅让 Workers 兼容 MCP——而是让 Workers 成为了理想的运行时。当协议不需要持久状态时,为什么还要为始终在线的基础设施付费?

Cloudflare 的 MCP 服务器框架

在 Agents Week 期间,Cloudflare 开源了 MCP 服务器框架(cloudflare-os),并发布了支持 TypeScript、Python、Go 和 C# 的更新版 SDK。TypeScript SDK 在 Workers 部署方面最为成熟,但四种语言均完整支持 2026-07-28 规范。

以下是使用 TypeScript SDK 在 Workers 上构建完整 MCP 服务器的示例:

import { McpServer } from '@cloudflare/mcp-server';

interface Env {
  AI: Ai;
  DB: D1Database;
}

const server = new McpServer({
  name: 'my-tools',
  version: '1.0.0',
  protocolVersion: '2026-07-28',
});

// 定义工具
server.tool(
  'query_database',
  '对应用数据库执行只读 SQL 查询',
  {
    sql: { type: 'string', description: '要执行的 SQL SELECT 查询' },
    params: { type: 'array', items: { type: 'string' }, description: '查询参数' },
  },
  async (args, env: Env) => {
    const { sql, params } = args;

    if (!sql.trim().toUpperCase().startsWith('SELECT')) {
      return { error: '仅允许 SELECT 查询' };
    }

    const result = await env.DB
      .prepare(sql)
      .bind(...(params || []))
      .all();

    return {
      content: [{
        type: 'text',
        text: JSON.stringify(result.results, null, 2),
      }],
    };
  }
);

// 定义资源
server.resource(
  'schema',
  'database://schema',
  '当前数据库架构',
  async (uri, env: Env) => {
    const tables = await env.DB
      .prepare("SELECT sql FROM sqlite_master WHERE type='table'")
      .all();

    return {
      content: [{
        type: 'text',
        text: tables.results.map(t => t.sql).join('\n\n'),
      }],
    };
  }
);

export default {
  async fetch(request: Request, env: Env): Promise<Response> {
    return server.handle(request, env);
  },
};

就这么简单。无需连接管理、会话处理或健康检查端点。server.handle() 方法读取 MCP 请求头,路由到正确的工具或资源,执行后返回响应。运行 wrangler deploy 即可将生产级 MCP 服务器部署到 Cloudflare 全球网络。

请求生命周期

当 AI Agent 调用你部署在 Workers 上的 MCP 服务器时,流程如下:

  1. Agent 发送 POST 请求,携带标准头:

    POST https://my-tools.workers.dev/mcp
    Mcp-Protocol-Version: 2026-07-28
    Mcp-Method: tools/call
    Mcp-Name: query_database
    Content-Type: application/json
    
    {"sql": "SELECT * FROM users WHERE active = ?", "params": ["true"]}
  2. Workers 运行时在距离调用方最近的边缘节点启动 V8 隔离环境(或复用已预热的实例)。

  3. MCP 框架解析请求头,根据工具 schema 验证请求,调用对应处理器。

  4. 处理器执行,按需访问绑定资源(D1、KV、R2、AI)。

  5. 返回响应——标准 HTTP 响应,包含符合 MCP 规范的 JSON 消息体。

整个过程通常耗时 5-50ms,取决于工具的具体操作。无需连接建立、握手或会话协商。

从 SSE 迁移到无状态 MCP

如果你正在运行基于 SSE 传输的旧版 MCP 服务器,迁移非常直接。核心思维转变是从”维护连接”变为”处理请求”。

迁移前(旧版 SSE MCP):

// 旧方案:带会话管理的持久服务器
import { McpServer } from '@modelcontextprotocol/sdk';

const server = new McpServer({ name: 'my-tools' });
const sessions = new Map();

server.onConnection((session) => {
  sessions.set(session.id, { created: Date.now(), state: {} });

  session.onDisconnect(() => {
    sessions.delete(session.id);
  });
});

server.tool('query_database', schema, async (args, session) => {
  const sessionData = sessions.get(session.id);
  // ... 工具逻辑
});

// 需要: PM2/systemd、nginx 反向代理、SSL 证书、
// 健康检查、自动重启、日志轮转...
server.listen(3000);

迁移后(Workers 上的无状态 MCP):

// 新方案:无状态处理器
import { McpServer } from '@cloudflare/mcp-server';

const server = new McpServer({
  name: 'my-tools',
  protocolVersion: '2026-07-28',
});

server.tool('query_database', schema, async (args, env) => {
  // 无需会话——请求自身携带所有必要信息
  // ... 工具逻辑
});

export default {
  fetch: (req, env) => server.handle(req, env),
};

运维负担大幅降低。不再需要进程管理器、反向代理、SSL 配置、弹性伸缩组、健康检查端点。这一切都由 Cloudflare 托管。

状态问题如何解决?

“但我的工具需要状态啊!“——没错,很多确实需要。无状态协议不等于无状态应用。Workers 原生集成了以下存储服务:

  • D1 — 边缘 SQLite,用于关系型数据
  • KV — 键值存储,用于配置和缓存
  • R2 — 对象存储,用于文件和大型数据
  • Durable Objects — 需要协调或强一致性时使用
  • Vectorize — 向量搜索,用于 RAG 类工具

协议是无状态的,但存储层不是。区别在于:状态存储在专用存储服务中,而非绑定在连接上的临时服务器内存里。

性能表现

我将同一 MCP 工具服务器部署到三个平台,使用 1000 并发 Agent 请求进行压测:

指标EC2 (t3.medium)Cloud RunCloudflare Workers
P50 延迟23ms31ms8ms
P99 延迟145ms890ms(冷启动)42ms
成本(100万次请求/月)~$35 + 常驻费用~$12~$5
部署时间10-15 分钟2-3 分钟8 秒
覆盖区域1 个1 个(可多区域)300+ 自动覆盖

Workers 在延迟方面胜出,因为请求会路由到最近的边缘节点。在成本方面胜出,因为没有空闲时间计费。在部署方面胜出,因为 wrangler deploy 就是一条命令。

更广阔的生态:Google 的同步实践

值得注意的是,Google 在 Cloud Run 和 Cloud Functions 上得出了类似结论。无状态 MCP 规范正在全行业范围内形成向无服务器平台聚拢的引力。Cloudflare 的优势在于”边缘”——不是比喻,而是字面意义。300+ 边缘节点对比 Cloud Run 的约 30 个区域,对延迟敏感的 Agent 交互天然受益于与调用方的物理距离。

多语言 SDK 支持

Cloudflare 为四种主流语言发布了更新版 SDK:

  • TypeScript@cloudflare/mcp-server v2.0)— Workers 原生支持,类型完备
  • Pythoncloudflare-mcp v2.0)— 支持 Workers Python(测试版)或独立运行
  • Gogithub.com/cloudflare/mcp-go v2.0)— 用于编译型 Workers 或代理场景
  • C#Cloudflare.Mcp v2.0)— .NET 支持,面向企业集成

TypeScript SDK 是 Workers 部署的推荐路径。其他语言完全符合规范,适用于其他环境或非 Workers 运行时。

5 分钟快速上手

# 创建新的 MCP 服务器项目
npm create cloudflare@latest -- my-mcp-server --template mcp

# 在 src/index.ts 中编写工具
# ... 添加你的工具 ...

# 部署到全球
npx wrangler deploy

# 你的 MCP 服务器已上线:
# https://my-mcp-server.<your-subdomain>.workers.dev/mcp

这就是完整的部署流程。不需要 Dockerfile、Kubernetes 清单、Terraform 或 CI/CD 流水线(当然,你应该配一个)。

Cloudflare Agents 平台 Cloudflare Agents 平台 — 在边缘构建、部署和扩展 AI Agent。

常见问题

Q:Workers 上 MCP 的冷启动延迟是多少?

A:通常 1-5ms。Workers 使用 V8 隔离环境而非容器,所谓”冷启动”仅是隔离环境的创建——不涉及拉取镜像或启动运行时。对 MCP 工具调用来说几乎无感。

Q:无状态 MCP 在 Workers 上能用认证吗?

A:可以。无状态规范支持标准 HTTP 认证。可使用 Bearer Token、请求头中的 API Key,或 Cloudflare Access 实现零信任认证。

Q:工具调用超过 Workers CPU 时间限制怎么办?

A:Workers 允许最长 30 秒的挂钟时间(免费计划 30ms CPU 时间,付费计划 30 秒)。对于真正的长时间运行操作,建议使用队列模式:接受请求后写入 Queue,返回一个资源 URI 供 Agent 轮询结果。

Q:使用 Cloudflare MCP SDK 会被锁定吗?

A:cloudflare-os 框架是开源的,底层协议是标准的 2026-07-28 规范。你的工具逻辑是可移植的。部署目标是 Cloudflare 特定的(任何部署目标都如此),但 MCP 接口是厂商中立的。

Q:现有的 Cloudflare Workers 能变成 MCP 服务器吗?

A:可以。为现有 Worker 添加 MCP 能力是增量式的——引入 SDK、定义工具、将 MCP 请求路由到处理器即可。原有的 HTTP 端点可以与 MCP 并存。

Q:和 AWS Lambda 上运行 MCP 相比如何?

A:架构上类似(都是无服务器、无状态)。Workers 延迟更低(边缘 vs. 区域)、冷启动更快(隔离环境 vs. 容器)、部署更简单。Lambda 拥有更深度的 AWS 服务集成。根据数据和服务所在位置做选择。

结语

2026-07-28 无状态 MCP 规范和 Cloudflare Workers 天生一对——即使双方团队最初并未刻意为之。当一个协议宣称”每个请求都是独立的、自描述的、携带自身上下文的”,而一个运行时宣称”每次调用都是隔离的、无状态的、全球分布的”,二者的契合不言自明。

如果你今天在构建 MCP 服务器,Workers 提供了秒级生产部署、默认全球分发、缩容至零的经济模型,以及一套帮你处理协议细节的框架——让你能专注于工具本身的价值。

我的 SSE 重连噩梦结束了。你的也可以。


Marcus Chen 专注于 Agent 基础设施建设,撰写关于 AI 系统生产化的技术文章。更多 MCP 进展请阅读我们的无状态规范深度解析Google 的并行实践