building-mcp-server-on-cloudflare :从零到部署,一个 MCP 服务器的全球化之旅

MCP 协议火了之后,一个别扭的事实越来越明显:大部分 MCP 服务器还跑在本地。你在 Claude Desktop 里调用工具,背后是一个 Node 进程在你的笔记本上默默工作。关机就不灵了,换机器得重配,团队协作更是无从谈起。

Cloudflare 的 building-mcp-server-on-cloudflare 这个 Skill,试图把 MCP 服务器的部署图景从”本地小作坊”拉到”全球边缘网络”。它不是给你看一个 demo 然后让你自己琢磨,而是把从工具定义到 OAuth 认证到生产部署的完整链路拆成了可执行的步骤,跑在 Cloudflare Workers 。

说真的,这东西的野心比表面上看起来大得多。它不只是”教你怎么部署 MCP 服务器”,而是暗示了一整套新范式:MCP 服务器应该像 Web 应用一样部署,有域名、有认证、有自动扩缩,任何人都能在任意客户端调用。

换个角度讲,这个 Skill 在试图回答一个还没被充分讨论的问题:当你的 AI Agent 需要全天候访问一组工具时,这些工具应该住在哪里?Cloudflare 的回答简单直接,住 Workers 上。

环境准备

上手门槛不高,但有几样东西得先备好。

Cloudflare 账号是必需的,而且要开通 Workers 功能。免费套餐足够开发测试用,每天 10 万次请求的配额对个人 MCP 服务器来说绰绰有余。Node.js 18 以上,npm、pnpm 或 yarn 随便选一个你顺手的。

Wrangler CLI 是 Cloudflare Workers 的命令行工具,负责本地调试和部署。装一遍就行:

npm install -g wrangler

装完之后跑个 wrangler login 把 CLI 和你 Cloudflare 账号打通,整个链路就通了。这步没什么坑。

building-mcp-server-on-cloudflare :从零到部署,一个 MCP 服务器的全球化之旅

新手最容易卡在什么地方?Durable Objects 的概念。如果你的 MCP 服务器需要状态管理(比如会话记忆、数据持久化),Durable Objects 是绕不开的。好消息是,这个 Skill 提供的两个模板已经把 DO 的配置写死在 wrangler.toml 里了,你不需要手动配。但如果你的工具想访问 D1 数据库或 KV 存储,得在 wrangler.toml 里手动加 binding,不然运行时会找不到。

操作流程

整个流程从一行脚手架命令开始,五步走完。

第一步,选模板。Skill 给了两个入口:公共服务器模板(remote-mcp-authless)和 GitHub OAuth 认证模板(remote-mcp-github-oauth)。前者适合内部工具或公开 API,任何人拿到 URL 就能调。后者适合需要区分用户身份的场景,连接工具前先要用户登录授权。

npx create cloudflare@latest -- my-mcp-server --template=cloudflare/ai/demos/remote-mcp-authless

building-mcp-server-on-cloudflare :从零到部署,一个 MCP 服务器的全球化之旅

第二步,定义工具。这是整个流程的核心。tools 函数用 Zod 做参数校验,返回值走 MCP 协议的标准 format。一个天气查询工具长这样:

this.server.tool(
  "get_weather",
  { city: z.string() },
  async ({ city }) => {
    const response = await fetch(`https://api.weather.com/${city}`);
    const data = await response.json();
    return {
      content: [{ type"text"textJSON.stringify(data) }],
    };
  }
);

参数类型、校验规则、错误处理全部自动生成,不需要额外写胶水代码。值得留意的是,这里的 fetch 是 Cloudflare Workers 的原生 API,不需要额外 import。这意味着你在工具函数里可以调任何 HTTP API,不受 Node 生态的限制。

第三步,本地测试。起开发服务器后用 MCP Inspector 验证工具是否正常注册:

npm start
# 另一个终端
npx @modelcontextprotocol/inspector@latest

Inspector 打开后输入 http://localhost:8787/sse,能看到 “List Tools” 按钮就说明工具注册成功。这步可以省你很多排查时间,别跳过。

第四步,部署。一行命令推到生产环境:

npx wrangler deploy

MCP 服务器会分配一个 your-worker.your-account.workers.dev/sse 的全球域名。从部署完成到全球可用,通常不超过 30 秒。

第五步,连接客户端。Claude Desktop 是目前主流的 MCP 客户端,但它本身不支持远程 MCP 传输协议。Cloudflare 提供了 mcp-remote 代理来桥接,配置文件里加上这段就行:

{
  "mcpServers": {
    "my-server": {
      "command": "npx",
      "args": ["mcp-remote", "https://your-mcp.your-account.workers.dev/sse"]
    }
  }
}

重启 Claude Desktop 后就能调用你的远程工具了。整个过程从零到能用在 Claude 里调工具,不折腾的话 15 分钟够了。

关键设计

这个 Skill 最聪明的设计决策,是选了 McpAgent 作为核心基类而不是纯函数式的 createMcpHandler。

McpAgent 底层绑定了 Durable Objects,每个客户端连接对应一个独立的 DO 实例。这意味着你的 MCP 服务器天然具备会话状态管理能力。用户在对话中途断开重连,工具调用的上下文不会丢。对一个需要多轮交互的工具来说(比如逐页分析 PDF、逐步执行 CI/CD 流程),这个能力不是锦上添花,是刚需。

createMcpHandler 的方案更快更轻,适合查天气、做数学这种无状态工具。McpAgent 多了 DO 的开销,但换来了每个会话独立的作用域。从 SKILL.md 的结构来看,设计者明显把 McpAgent 当成了默认推荐路径,公共模板用的是它,认证模板用的也是它。

如果让我猜设计意图,这种选择暗示 Cloudflare 对 MCP 服务器的定位不只是”API 网关”,而是”会话感知的 Agent 工具服务”。这点跟 Anthropic 的 MCP 协议设计方向一致,但落地得更具体。

两个模式的 trade-off 也很清晰。公共模式部署快、零配置,但任何拿到 URL 的人都能调你的工具,适合内部测试或个人项目。OAuth 认证模式多了身份注入和权限范围控制,但附加的配置负担也不少:

  • OAuth App 注册和配置
  • 回调 URL 与 Worker 路由对齐
  • Client ID 和 Client Secret 管理
  • Token 刷新逻辑和过期处理

这些步骤每一个都不难,但加起来就是一段不短的调试时间。关键是报错信息往往不够明确,回调 URL 差一个斜杠就 401,排查起来很磨人。

building-mcp-server-on-cloudflare :从零到部署,一个 MCP 服务器的全球化之旅

这两条路径不是”先用公共模式,以后再加认证”那么简单。认证模式的代码结构(路由分发、token 校验、scope 检查)和公共模式差异不小,迁移有成本。

使用场景

最直接的使用场景:你写了一个内部工具链,想随时通过 Claude Desktop 调用它。

之前你得把工具跑在本地的 Docker 里,Node 进程常驻后台。换台电脑得重来一遍,团队里其他人想用还得每个人配一套。用这个 Skill 部署到 Workers 后,工具变成了一个全球可达的端点,你跟同事配同一个 mcp-remote 地址就行。

另一个容易被忽略的场景是构建公开 MCP 服务。比如你维护了一个开放数据 API,以前用户得翻你的文档、写 HTTP 请求、解析 JSON。现在你给这个 API 包一层 MCP 工具,用户直接用自然语言就能查询你的数据。这个 Skill 的公共模板恰好适合这种场景,一行命令部署,开箱即用。

Cloudflare 自己在文档里提到的做法更激进:把 Cloudflare 平台本身的 API 能力暴露成 MCP 工具。具体来说就是:

  • D1 数据库的 SQL 查询
  • KV 存储的键值读写
  • R2 对象存储的文件操作
  • Workers AI 的模型调用

一个 Agent 通过 MCP 协议直接操作这些资源,所有动作都发生在 Workers 的边缘节点上。这意味着你的 AI Agent 不再是”调用外部 API 的工具人”,而是”可以直接操控基础设施的 operator”。

这个方向一旦跑通,MCP 服务器就不只是”你能调的工具”,而是”你能直接操控的基础设施”。从 Skill 的架构选择来看(McpAgent + DO + Cloudflare Bindings),这条路径是技术上行得通的。社区里已经有人在讨论用 MCP 工具替代部分 CI/CD 步骤的可行性了。

洞察与反思

MCP 服务器的远程化部署是个明显的趋势,但这个 Skill 让我意识到它的推动力比我想象中更具体。

之前大家讨论 MCP 的未来,更多聚焦在协议层面的几个议题:

  • Streamable HTTP 替代 SSE 的时间表
  • 工具发现机制的设计方案
  • 动态注册的标准化推进

但基础设施层面的问题其实更迫切:如果 MCP 要成为 AI Agent 的标准工具接口,它必须像 REST API 一样可部署、可发现、可治理。只靠本地进程是走不到那一步的。

从这个角度看,Cloudflare 在这个 Skill 上的投入不只是”做个教程”。Workers 的无服务器架构天然适合 MCP 服务器的特性:请求驱动(按调用计费)、全球低延迟(边缘节点就近响应)、状态管理(Durable Objects)。这些能力恰好是运行生产级 MCP 服务所需的基础。

但我有一个保留意见:OAuth 认证的复杂度。Skill 提供的 GitHub OAuth 模板是一个起点,但实际部署中你会发现 OAuth Provider 的接入不是”换个配置文件”就能搞定的事。Token 刷新、权限细粒度控制、多 Provider 并存,这些在文档里要么一笔带过,要么指向 references 让你自己看。对于一个 Skill 来说这不算缺陷,因为”指导”和”代劳”的边界本来就模糊。

另一个值得关注的点是生态锁定。用 McpAgent 类构建的工具只能在 Cloudflare Workers 上运行。如果你以后想把服务器迁移到 AWS Lambda 或自建 Node 服务,重写是跑不掉的。当然,反过来说,Workers 的全球部署能力和边缘计算优势也是其他平台短期追不上的。选择权在开发者自己手上。

资源 地址
Skill 主页 https://smithery.ai/skills/cloudflare/building-mcp-server-on-cloudflare
GitHub(Cloudflare Skills) https://github.com/cloudflare/skills
Cloudflare MCP 文档 https://developers.cloudflare.com/agents/model-context-protocol/
MCP Inspector https://github.com/modelcontextprotocol/inspector

总结

把这个 Skill 从头到尾走一遍,我对 MCP 服务器的部署方式的认知确实变了。之前默认就是本地跑,现在觉得远程部署才是正确的默认选项。

MCP 协议本身还在快速迭代,但基础设施层面的探索已经跑在前面了。building-mcp-server-on-cloudflare 把这整套流程做成了可复用的操作路径:

  • 模板创建:两行命令选好服务器类型
  • 工具定义:Zod 校验加异步函数,写业务逻辑就够了
  • 本地测试:Inspector 验证,跑通再部署
  • 生产部署:一行 wrangler deploy,全球分发

每一步都省掉了反复查文档和试错的时间。

如果你已经在用 MCP 工具但还在本地跑,或者想把自己开发的能力暴露给 AI Agent 调用,花 15 分钟跑一遍这个 Skill 的流程,比你想象的值。

skills资源

Cloudflare Sandbox SDK:在 Worker 里起一个沙箱,跑完就销毁

2026-8-1 13:42:32

行业动态

又获2亿美元融资、月下载超千万,AI搜索工具也要建立用户内容生态?

2025-9-16 19:49:50

0 条回复 A文章作者 M管理员
    暂无讨论,说说你的看法吧