Cloudflare × Claude Code
zdtthaikovsky.org
写给赵德涛 · 从零到上线

Cloudflare 接进 Claude Code
然后让它替你把网站建起来

这份教程只有一个目标:让你从「有个 Claude Code、有个 Cloudflare 账号」,走到「我说一句话,站就上线了,域名也绑好了」。全程免费额度就够用,不用买服务器,不用配 Nginx,不用备案。

建议按顺序做一遍,全套大约 40 分钟。第 8 章往后是真正好玩的部分——前面 7 章都是为了让第 8 章能一句话搞定。

§这份教程给你什么

你最终会得到这么一套能力:

🌍
免费的全球托管

Cloudflare 在全球 300+ 城市有节点,你的站放上去自带 CDN、自带 HTTPS、自带防 DDoS,个人项目基本零成本。

🔌
Claude Code 直连 Cloudflare

通过 MCP 授权后,Claude 能直接读你的 Worker 列表、查日志、建数据库、查文档,不用你手动去后台点。

🚀
一句话上线

「帮我把这个项目部署到 Cloudflare,绑到 blog.你的域名」——剩下的它自己干完。

🧰
全家桶随手加

要数据库加 D1,要存图片加 R2,要缓存加 KV,要定时任务加 Cron,全在同一个账号同一套命令里。

先说清楚一件事:MCP 不是「部署工具」,它是让 Claude 看得见、查得到、改得动你 Cloudflare 账号的一根线。真正把代码推上去的是 wrangler(Cloudflare 官方命令行)。两者配合起来才是完整体验:MCP 负责「知道你账号里有什么、出错了怎么查」,wrangler 负责「把东西真的传上去」。理解这个分工,后面就不会迷路。

01注册 Cloudflare 账号

五分钟的事,但有两个地方值得提前知道。

  1. 打开注册页访问 dash.cloudflare.com/sign-up,填邮箱和密码。建议用 Gmail 或 Outlook,国内邮箱偶尔收不到 Cloudflare 的验证信。
  2. 去邮箱点验证链接没验证的账号很多功能是灰的,别跳过。
  3. 选 Free 计划它会引导你选套餐,一路选 Free($0)。免费版对个人项目非常够用,具体额度看第 12 章。
  4. 开启两步验证(强烈建议)右上角头像 → My Profile → Authentication → Two-Factor Authentication。这个账号后面会握着你的域名和线上服务,被盗很麻烦。
  5. 记下 Account ID进 dash 后随便点进一个产品页,右侧栏或者地址栏里那串 32 位十六进制就是你的 Account ID,后面 GitHub 自动部署要用。
注意:Cloudflare 注册和使用不需要绑卡,但有两个产品例外——R2 对象存储Workers 付费版要求先绑一张卡(绑了也不会自动扣,免费额度内是 $0)。如果你暂时不想绑卡,跳过 R2,其他全能用。

02把域名接进 Cloudflare

这一步的本质是:把域名的「解析权」从注册商交给 Cloudflare。交出去之后,你所有的 DNS 记录、CDN、证书、子域名都在 Cloudflare 后台管,Claude 也才能通过 MCP 看见它。

路线 A:你已经有域名

  1. 在 Cloudflare 里添加站点Dashboard 左上角 Add a domain,输入你的域名(只填 example.com,不要带 www 和 https)。
  2. 选 Free 计划然后它会自动扫描你现有的 DNS 记录,扫到的直接确认继续。
  3. 拿到两个 NS 地址形如 josephine.ns.cloudflare.com / nick.ns.cloudflare.com每个账号拿到的这一对都不一样,一定用你自己页面上显示的那一对。
  4. 回域名注册商改 NS登录你买域名的地方(Spaceship / Namesilo / 阿里云 / GoDaddy 均可),找到「DNS 服务器 / Nameservers / 域名解析服务器」,把原来的两条删掉换成 Cloudflare 给你的那两条。
  5. 等生效快则十几分钟,慢则几小时(极端情况 24 小时)。Cloudflare 后台的域名状态从 Pending 变成绿色 Active 就成了。
最常踩的坑:改 NS 之后,域名的解析完全由 Cloudflare 接管,注册商那边原来的解析记录全部失效。如果这个域名上原本挂着邮箱(MX 记录)或者别的服务,务必在切换前把那些记录先在 Cloudflare 里补建一遍,否则邮件会直接断掉。新买的空域名没这个问题,放心切。

路线 B:你还没有域名

完全可以先不买。Cloudflare 会免费送你一个 你的用户名.workers.dev 的子域,部署上去就是 项目名.你的用户名.workers.dev,HTTPS 一样有,功能一模一样,只是网址长一点、不好记。先用它把整套流程跑通,喜欢了再买域名。

要买的话,.org / .com 一年几十到一百块。注册商推荐 SpaceshipNameSilo(便宜、改 NS 方便、不需要备案)。国外注册商 + Cloudflare 托管的组合不需要 ICP 备案,这也是为什么这条路适合个人练手。

你现在看的这个站就是这么来的:域名 zdtthaikovsky.org 在注册商改了 NS 指向 Cloudflare,站点本体是一个 Cloudflare Worker,从写完到上线不到十分钟。

03装好 Claude Code

如果你已经在用了,跳到第 4 章。没装的话:

终端 · 安装(macOS / Linux)
curl -fsSL https://claude.ai/install.sh | bash

Windows 用户建议在 WSL2(Ubuntu)里装,体验和 macOS 一致;纯 Windows 环境下 wrangler 和一堆 Node 工具链的坑会多不少。

装完在项目目录里敲 claude 启动,第一次会让你登录 Anthropic 账号。另外确认一下 Node 版本,Cloudflare 的工具链要 Node 20 以上

终端 · 检查环境
node -v      # 要 v20 或更高,低了去 nodejs.org 装 LTS
claude --version

04先搞懂 MCP 是什么

MCP 全称 Model Context Protocol(模型上下文协议),Anthropic 定的一个开放标准。一句话解释:

MCP 就是给 AI 装「插件」的统一插座。以前你要让 AI 操作某个平台,得自己写脚本、自己包 API;现在平台方(比如 Cloudflare)自己提供一个 MCP 服务器,你在 Claude Code 里连上、授权一次,Claude 就获得了一整套操作那个平台的能力。

具体到 Cloudflare,连上之后 Claude 就能做这些事,不用你复制粘贴任何东西给它

  • 列出你账号下所有 Worker、KV 命名空间、D1 数据库、R2 存储桶
  • 直接对 D1 数据库执行 SQL(建表、查数据)
  • 拉线上 Worker 的实时日志和报错,帮你定位 500 是怎么来的
  • 查 Cloudflare 官方文档的最新写法(这点比它凭记忆瞎写靠谱得多)
  • 看 CI 构建记录,构建失败时直接读构建日志
类比一下:wrangler 像是你的手,能把东西搬上去;MCP 像是眼睛和嘴,能看见服务器上现在是什么样、能问清楚官方文档怎么说。只有手没有眼睛,AI 就只能闭着眼睛猜,猜错了还不知道错哪。

05把 Cloudflare MCP 接进 Claude Code

Cloudflare 官方提供的是 远程 MCP 服务器(Remote MCP)——你不用在本地跑任何服务、不用装 Docker、不用手工填 API Token,连上去走浏览器 OAuth 授权就行。

最省事的一条:先接这三个

Cloudflare 一共开了十几个 MCP 服务器,不要一次全接(接太多会占掉 Claude 的上下文,反而变笨)。刚上手接下面三个就够:

终端 · 在任意目录执行一次即可
# 1. 官方文档:让 Claude 写 Cloudflare 代码时先查文档,别凭记忆瞎编
claude mcp add --scope user --transport http cf-docs https://docs.mcp.cloudflare.com/mcp

# 2. Workers 资源:列 Worker / 建 KV / 建 D1 / 建 R2 / 直接跑 SQL
claude mcp add --scope user --transport http cf-bindings https://bindings.mcp.cloudflare.com/mcp

# 3. 可观测性:拉线上日志和报错,排查线上 bug 全靠它
claude mcp add --scope user --transport http cf-observability https://observability.mcp.cloudflare.com/mcp

--scope user 的意思是装在你的用户级配置里,以后在任何项目目录打开 Claude Code 都能用,不用每个项目重接一遍。

全部可选的服务器

需要哪个再加哪个,命令格式完全一样,只换名字和 URL:

用途名字建议URL
官方文档检索 推荐cf-docshttps://docs.mcp.cloudflare.com/mcp
Workers 资源与绑定 推荐cf-bindingshttps://bindings.mcp.cloudflare.com/mcp
日志 / 分析排障 推荐cf-observabilityhttps://observability.mcp.cloudflare.com/mcp
全量 API(2500+ 接口,包括 DNS)cf-apihttps://mcp.cloudflare.com/mcp
CI 构建记录与构建日志cf-buildshttps://builds.mcp.cloudflare.com/mcp
GraphQL 分析数据cf-graphqlhttps://graphql.mcp.cloudflare.com/mcp
无头浏览器抓网页 / 截图cf-browserhttps://browser.mcp.cloudflare.com/mcp
全球网络流量情报 Radarcf-radarhttps://radar.mcp.cloudflare.com/mcp
审计日志cf-auditlogshttps://auditlogs.mcp.cloudflare.com/mcp
AI Gateway 调用记录cf-ai-gatewayhttps://ai-gateway.mcp.cloudflare.com/mcp
想管 DNS、加子域名解析记录?那就再加一个 cf-api(全量 API 那个)。cf-bindings 只管 Workers 相关的存储和计算资源,动不了 DNS。

接错了怎么删

终端
claude mcp list                       # 看已经接了哪些、连上没有
claude mcp remove cf-radar --scope user   # 删掉不想要的

06授权:让 MCP 真正能动你的账号

上一步只是「把线插上了」,还没「通电」。第一次用之前必须走一次 OAuth 授权,把你的 Cloudflare 账号权限授给它。

  1. 启动 Claude Code在任意项目目录敲 claude
  2. 输入 /mcp会列出你刚才接的那几个服务器,状态多半是 needs authentication(需要认证)。
  3. 选中要授权的那个,回车Claude Code 会自动拉起浏览器,打开 Cloudflare 的授权页面。
  4. 在浏览器里确认页面会列出它要哪些权限(读 Worker、写 KV、读日志……),确认账号选对了(如果你有多个 Cloudflare 账号,这里一定看清楚选的是哪个),点 Approve / Allow
  5. 回到终端状态变成 connected 就成了。每个 MCP 服务器都要单独授权一次,三个就走三遍,之后长期有效,不用天天重来。

验证它真的通了

回到 Claude Code 的对话里,直接用大白话问它:

Claude Code 对话框
用 Cloudflare MCP 列一下我账号下现有的 Worker、KV 命名空间和 D1 数据库

如果它能报出你账号里的真实资源(新账号就是三个空列表,那也算通了——能返回空列表和「连不上」是两回事),说明整条链路打通了。

连不上的排查顺序:claude mcp list 看状态;② 确认 URL 结尾是 /mcp 没写成 /sse;③ 浏览器授权页如果一直转圈,多半是网络问题,挂个代理再试;④ 授权时选错账号了,用 claude mcp remove 删掉重接一遍即可。

07接上之后,具体能让它干什么

下面这些话可以直接原样发给 Claude Code,它会自己调 MCP 完成:

你说的话它背后干的事
「我账号里都有哪些 Worker,各自绑了什么域名?」调 workers_list,把结果整理成表
「建一个叫 my-blog-db 的 D1 数据库,建张 posts 表」d1_database_create + 直接执行建表 SQL
「我那个 Worker 刚才报 500,帮我看看日志」拉 observability 日志,定位到具体报错行
「Cloudflare 的 Cron 定时任务怎么写?给我最新写法」查官方文档,而不是凭记忆编一个过时 API
「给我建个 R2 桶叫 user-uploads,然后绑到这个 Worker 上」r2_bucket_create + 改 wrangler 配置
「把 blog.我的域名.com 解析到这个 Worker」走 cf-api 加 DNS 记录 / 加自定义域
它做不到的事,心里有数:MCP 不负责把你本地的代码传上去。「部署」这个动作永远是 wrangler deploy 干的(Claude 会在终端里替你敲,但那是命令行,不是 MCP)。所以下一章我们要先把 wrangler 配好。

08实战:十分钟上线你的第一个站

目标:把一个纯静态网页(HTML/CSS/JS,或者 Vite、Next、Astro 构建出来的产物)变成一个真实可访问的网址。

第一步:装并登录 wrangler

终端
npx wrangler login    # 会拉起浏览器授权,点 Allow 即可
npx wrangler whoami   # 显示出你的邮箱和账号就是登录成功了

npx wrangler 而不是全局安装,这样每个项目用自己 package.json 里锁定的版本,不会因为版本漂移出奇怪的问题。

第二步:项目结构

最小可用的静态站就三个文件:

目录结构
my-site/
├── public/
│   └── index.html      # 你的网页放这里
├── package.json
└── wrangler.jsonc      # Cloudflare 的部署配置
wrangler.jsonc
{
  "name": "my-site",
  "compatibility_date": "2026-08-19",
  "assets": {
    "directory": "./public",
    "not_found_handling": "single-page-application"
  }
}

assets 这一段是关键,意思是「把 public 目录当静态资源直接对外服务」。not_found_handling 设成 single-page-application 的话,找不到的路径会回落到 index.html——React/Vue 这类前端路由必须这么配,否则刷新子页面会 404。

第三步:本地预览 + 部署

终端
npx wrangler dev      # 本地起服务,浏览器开 localhost:8787 看效果
npx wrangler deploy   # 一条命令上线

部署完终端会直接打印出网址,形如 https://my-site.你的用户名.workers.dev点开就是全球可访问的线上站,HTTPS 已经配好了。到这里你已经有一个真实上线的网站了。

用 Claude Code 的话,这一整章其实是一句话:
「把当前这个项目部署到 Cloudflare Workers,用 static assets 的方式,帮我把 wrangler 配置也写好」——它会建配置、跑命令、遇到报错自己改。你要做的是wrangler login 一次,把授权给它。

09绑上你自己的子域名

workers.dev 的网址能用但不好看。既然域名已经托管在 Cloudflare(第 2 章做完的话),绑子域名只要改配置文件加两行:

wrangler.jsonc · 加一段 routes
{
  "name": "my-site",
  "compatibility_date": "2026-08-19",
  "assets": { "directory": "./public" },

  "routes": [
    { "pattern": "blog.你的域名.com", "custom_domain": true }
  ]
}

然后再 npx wrangler deploy。就这样——不用去 DNS 后台手动加 CNAME 记录custom_domain: true 会让 Cloudflare 自动建好解析、自动签发证书。等一两分钟证书就绪,https://blog.你的域名.com 就能打开了。

想绑根域名(不带 www 的那个)也一样,pattern 直接写 你的域名.com。想两个都要就写两条。

前提是这个域名已经整域托管在 Cloudflare(第 2 章那步 NS 改完、状态 Active)。如果域名还在别处解析,custom_domain 会直接报错说找不到 zone。
一个域名可以挂无数个子域名、每个子域名一个独立项目。blog.x.com 一个 Worker、api.x.com 另一个 Worker、demo.x.com 第三个——互不干扰,全部免费。这就是「用一个域名养一堆项目」的玩法。

10加后端:Cloudflare 全家桶怎么用

静态站上线之后,真正的乐趣是加后端。Cloudflare 的做法叫 绑定(bindings):在配置文件里声明你要用哪个资源,代码里就能通过一个变量直接访问,不需要连接串、不需要密码、不需要装 SDK

Workers:写后端接口

在项目根目录建 src/index.js,配置里加 "main": "src/index.js"

src/index.js
export default {
  async fetch(request, env) {
    const url = new URL(request.url);

    // 一个最简单的 API 接口
    if (url.pathname === "/api/hello") {
      return Response.json({ msg: "你好,我是跑在全球边缘节点上的后端" });
    }

    // 其他路径交给静态资源处理
    return env.ASSETS.fetch(request);
  }
};

D1:SQLite 数据库

终端 + 配置 + 代码
# 1. 建库(也可以直接让 Claude 通过 MCP 建)
npx wrangler d1 create my-db

# 2. 把它给你的 database_id 填进 wrangler.jsonc:
#    "d1_databases": [{ "binding": "DB", "database_name": "my-db", "database_id": "xxx" }]

# 3. 代码里直接用,不需要连接串:
#    const { results } = await env.DB.prepare("SELECT * FROM posts").all();

其余几件套

🗄️
KV

键值存储。适合放配置、缓存、会话。读极快,写有几秒延迟——不要拿它当强一致数据库用

🪣
R2

对象存储,放图片、视频、备份。接口兼容 S3,流量出站免费,这是它相对 S3 最大的优势。需要先绑卡。

Cron Triggers

定时任务。配置里写一条 cron 表达式,Worker 就会定点自己醒来跑一次。适合每日抓取、定时推送。

🧠
Workers AI

直接在边缘跑开源模型(文本、图像、向量),按调用计费,每天有免费额度,不用自己配 GPU。

🔗
Durable Objects

有状态的对象,做多人协作、聊天室、实时同步用。搭配 WebSocket 很顺手。

🛡️
Turnstile

免费的人机验证,替代 reCAPTCHA。前端加一个组件,后端校验一下 token,防刷立刻上线。

这一章最好的用法是:不要背。直接跟 Claude 说「给我这个 Worker 加一个 D1 数据库,建一张留言表,写一个 POST 接口存留言、GET 接口读留言」,它会调 MCP 建库、改配置、写代码、跑部署,你负责验收。

11让它 push 一次就自动部署

手动敲 wrangler deploy 久了会烦,而且容易忘。正确姿势是接 GitHub Actions:你只管 push 到 main,剩下自动完成。

  1. 准备一个 API TokenCloudflare 后台 → 右上角头像 → API Tokens → Create Token,选 Edit Cloudflare Workers 模板,生成后立刻复制保存,页面关掉就再也看不到了
  2. 写进 GitHub 仓库的 Secrets仓库 → Settings → Secrets and variables → Actions → New repository secret,建两条:CLOUDFLARE_API_TOKEN(刚才那串)和 CLOUDFLARE_ACCOUNT_ID(第 1 章记下的那串)。
  3. 加工作流文件把下面这段存成 .github/workflows/deploy.yml
  4. push 到 main去仓库 Actions 页签看它跑,绿了就是上线了。
.github/workflows/deploy.yml
name: Deploy to Cloudflare Workers

on:
  push:
    branches: [main]
  workflow_dispatch: {}

jobs:
  deploy:
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v4
      - uses: actions/setup-node@v4
        with:
          node-version: 22
      - run: npm install
      - uses: cloudflare/wrangler-action@v3
        with:
          apiToken: ${{ secrets.CLOUDFLARE_API_TOKEN }}
          accountId: ${{ secrets.CLOUDFLARE_ACCOUNT_ID }}
          command: deploy
坑:wrangler-action@v3 要求项目里的 wrangler 是 4.x 及以上。如果 package.json 里还锁着 "wrangler": "^3.x",构建会报一堆莫名其妙的错。升上去就好。
构建失败的时候,把 cf-builds 那个 MCP 接上,直接问 Claude「我最近这次构建失败了,读一下日志告诉我为什么」,它能直接拉到构建日志。

12全家桶速查表与免费额度

免费版对个人项目的实际感受是:只要你不是做爆款产品,基本一辈子花不到钱。

产品干什么用免费额度(大致)
Workers跑你的代码,静态站和后端接口都靠它10 万次请求/天,单次 10ms CPU 时间
Static Assets托管 HTML/CSS/JS/图片带宽和请求不额外计费
D1SQLite 数据库,存结构化数据5GB 总量,单库 500MB;读写有每日额度
KV键值缓存,存配置和会话1GB 存储,10 万读/天,1000 写/天
R2 需绑卡对象存储,图片视频文件10GB 存储/月,出站流量全免费
Queues消息队列,异步任务需付费版
Durable Objects有状态服务、WebSocket、协作免费版可用(SQLite 后端)
Workers AI边缘跑开源模型每天有固定免费调用量
Cron Triggers定时任务免费,最多 5 条触发器
Turnstile人机验证完全免费,100 万次/月
Pages老一代静态托管新项目别用了,官方在往 Workers 迁
Zero Trust给站加登录门禁免费版 50 个用户
额度数字 Cloudflare 会调整,官方定价页 为准。想省事就直接问 Claude:「查一下 Cloudflare Workers 免费版现在的额度」,它会走 cf-docs MCP 拿最新的。
免费版最硬的一条限制是 CPU 时间 10ms。它算的是纯计算时间,等待数据库和外部 API 返回的时间不算在内。所以普通网站、API、爬虫全都没问题,但别在 Worker 里做大图片处理、视频转码、跑复杂算法,那种会直接超时。

13会浪费你半天的十个坑

这些都是实打实踩过的,提前看一眼能省很多时间。

  1. 绑自定义域名必须先迁 NS。只在 Cloudflare 加一条 CNAME 记录是不够的——整个域名的 NS 必须指向 Cloudflare,域名状态是 Active,custom_domain 才认。
  2. R2 必须绑卡才能开。免费额度内不扣钱,但不绑卡这个产品对你完全不可见,会让你以为是自己配置错了。
  3. 免费版不能对外发邮件。Workers 里 fetch 不到 SMTP 端口,Email Routing 只能收和转发。要发邮件走 Resend / Postmark 这类第三方 API。
  4. 脚本大小上限 3MB(压缩后)。塞了大依赖(比如整包的图表库、Puppeteer)会直接部署失败。解决办法是把大资源丢 R2 或走 CDN,别打进 bundle。
  5. wrangler 必须 4.x。配 GitHub Actions 时用 wrangler-action@v3 搭 3.x 的 wrangler,报错信息会指向完全无关的地方。
  6. Actions 的 paths-ignore 别顺手忽略 **/*.md如果你的站内容本身就是 Markdown 写的,这一条会导致「改了内容 push 上去却不部署」,排查半天。
  7. TypeScript 项目要把 Worker 入口排除出前端的 tsconfig。否则前端构建会因为找不到 Cloudflare 的类型定义而报错,反之亦然。两套运行时,两套类型。
  8. 静态资源默认对 .html 会去尾。访问 /about.html 可能被重定向到 /about。如果你的站是一堆手写 HTML 互相链接的,注意统一写法,或者显式配置 html_handling
  9. 缓存有时候咬人。部署完发现页面没变,先强刷(Cmd+Shift+R),还不行去 Cloudflare 后台 Caching → Purge Everything。给静态资源加内容哈希是根治办法。
  10. 别把 API Token 提交进仓库。Cloudflare 会扫描公开仓库并自动吊销泄露的 Token,但你的账号在被吊销之前是裸奔的。Token 一律进 GitHub Secrets 或本地 .dev.vars(记得 gitignore)。

14可以直接抄的提示词

把这些原样发给 Claude Code,配合已经接好的 MCP,基本就是「说完等结果」。

① 从零建一个站并上线

复制到 Claude Code
我要做一个个人主页,纯静态就行,深色风格,放我的简介、项目列表和联系方式。
做完部署到 Cloudflare Workers,用 static assets 方式,
然后绑到 me.我的域名.com 这个子域名上。
配置文件里的注释用中文写。

② 给现有项目加后端和数据库

复制到 Claude Code
给这个项目加一个留言板功能:
用 Cloudflare D1 建库建表(通过 MCP 建,别让我手动去后台点),
写好 POST 提交和 GET 读取两个接口,前端加个简单的表单,
加上 Turnstile 人机验证防刷,最后部署上去。

③ 线上出问题时排查

复制到 Claude Code
我的 Worker 叫 xxx,刚才访问返回 500。
用 Cloudflare 的 observability MCP 拉最近的日志,
定位到具体是哪一行出的问题,然后直接改掉并重新部署。

④ 接 GitHub 自动部署

复制到 Claude Code
把这个项目接上 GitHub Actions 自动部署到 Cloudflare:
建仓库、写 workflow 文件、告诉我需要去 GitHub 配哪几个 Secret,
以后我 push 到 main 就自动上线,不用再手动 deploy。

⑤ 让它先查文档再动手

复制到 Claude Code
先用 cf-docs MCP 查一下 Cloudflare 官方现在推荐的写法,
确认清楚 API 没变之后再动手写,别凭记忆写过时的用法。
最后一条最值钱。Cloudflare 的 API 这两年改得比较快,模型记忆里的写法经常是旧的。养成「让它先查 cf-docs 再写」的习惯,能省掉一大半来回调试。