摘要:本文基于building-mcp-server-on-cloudflare Skill,完整梳理了在Cloudflare Workers上部署MCP服务器的技术路径——从环境准备、工具定义、本地测试到生产部署,覆盖公开与OAuth认证两种模式。MCP服务器跑在Cloudflare全球边缘网络,部署即全球可达。

MCP(Model Context Protocol)正在成为AI Agent连接外部工具的标准协议。但把MCP服务器跑起来是一回事,把它部署到生产环境、让全球用户都能用、还要考虑认证和安全,是另一回事。

building-mcp-server-on-cloudflare 这个Skill要解决的,就是这件事——把MCP服务器的整个生命周期,从本地开发到全球部署,压缩成一条可重复的流水线。

20260731112102436.png

为什么选Cloudflare Workers?

MCP服务器本质上是暴露一组工具接口供AI客户端调用。传统部署方式需要自己管服务器、配负载均衡、处理全球延迟。Workers跑在Cloudflare的全球边缘网络上,部署即全球可达。

更重要的是成本结构。一个Workers免费版每天有10万次请求额度,对大多数MCP服务器的调用量来说完全够用。按量付费模式的边际成本几乎为零——这对个人开发者和小团队来说,意味着可以把MCP服务器当成基础设施来用,而不是省着用。

20260731112309449.png

两种部署路径:公开与认证

Cloudflare为MCP服务器提供了两条部署路径。

路径一:无认证公开服务器。这是最快的上手方式。一条命令就能拉起一个可用的MCP服务器:

npm create cloudflare@latest -- my-mcp-server --template=cloudflare/ai/demos/remote-mcp-authless
cd my-mcp-server
npm start

服务器跑在 http://localhost:8788/mcp,本地验证通过后一行 npx wrangler deploy 就能推上生产。

路径二:OAuth认证服务器。如果需要控制谁可以调用你的工具,可以用带认证的模板:

npm create cloudflare@latest -- my-mcp-server --template=cloudflare/ai/demos/remote-mcp-github-oauth

支持GitHub、Google、Auth0等多种OAuth提供商-4。用户需要登录才能访问工具,且可以基于用户权限控制具体工具的可调用范围。

三个核心选型决策

Agents SDK提供了三种构建MCP服务器的方式,选哪个取决于你的需求:

  • createMcpHandler():无状态、最快上手。适合工具不需要跨会话保持状态、不需要持久化存储的场景。没有额外的依赖,一行代码处理所有MCP协议细节。
  • McpAgent:有状态,基于Durable Objects。每个会话对应一个持久化对象,支持会话级状态管理、进度提示(elicitation),同时支持SSE和Streamable HTTP两种传输方式。适合需要跨多轮对话保持上下文的复杂Agent场景。
  • 原始传输层:完全控制,不依赖Agents SDK。适合需要高度定制化或已有MCP SDK代码库的场景。

20260731112416638.png

定义工具:核心是写函数

MCP服务器的核心是工具(Tools)——AI客户端可以调用的函数。定义方式很直接:

import { McpAgent } from "agents/mcp";
import { z } from "zod";

export class MyMCP extends McpAgent {
  server = new Server({ name: "my-mcp", version: "1.0.0" });
  
  async init() {
    // 简单工具:加法
    this.server.tool(
      "add",
      { a: z.number(), b: z.number() },
      async ({ a, b }) => ({
        content: [{ type: "text", text: String(a + b) }]
      })
    );
    
    // 调用外部API的工具
    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", text: JSON.stringify(data) }] };
      }
    );
  }
}

工具用Zod定义参数类型,MCP客户端调用时自动完成参数校验。每个工具就是一个async函数,返回值会序列化成MCP协议格式返回给客户端。

部署与连接

部署只需要一行命令:

npx wrangler deploy

部署完成后,服务器会有一个公开的workers.dev域名。部署即全球可达——Cloudflare的边缘网络会自动把请求路由到离用户最近的节点。

连接MCP客户端同样简单。可以用Cloudflare AI Playground做快速测试,也可以用MCP Inspector做本地调试-。Claude Code、OpenAI Codex、Cursor等支持MCP协议的客户端都可以直接接入。

一点实践经验

这套流程走下来,有几个点值得注意。

工具粒度:MCP工具应该做得小而精。一个工具只做一件事,AI客户端更容易理解什么时候该调用它。把多个功能塞进一个工具里,反而增加了调用的复杂度。

错误处理:工具函数里一定要处理异常。MCP客户端调用工具时如果遇到未捕获的错误,整个会话可能会中断。在工具内部try-catch,返回有意义的错误信息给客户端。

本地测试:部署之前先用 npm start 跑本地服务器,用MCP Inspector连上 localhost:8788/mcp 测试每个工具的行为。一次部署失败的重试成本虽然不高,但本地验证能省下不少时间。

从零到部署,一条命令的距离

building-mcp-server-on-cloudflare 这个Skill把MCP服务器的搭建流程标准化了——从环境准备、工具定义、本地测试到生产部署,每一步都有清晰的路径。

资源

地址

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

最终你得到的,是一个跑在全球边缘网络上的MCP服务器,支持OAuth认证,可以被任何支持MCP协议的AI客户端调用。从零到部署,核心路径上需要你写的代码,其实就是那几个工具函数。