/ 目录 / 演练场 / Cloudflare API
● 官方 cloudflare 🔑 需要你的密钥

Cloudflare API

作者 cloudflare · cloudflare/mcp

从 Claude 管理 Cloudflare DNS、zones、WAF、analytics 和 Workers —— 使用有作用域限制的 API token 和提前预览的习惯。

Cloudflare 的 API MCP 将完整的 Cloudflare REST API 转化为工具:zones、DNS 记录、页面规则、防火墙规则、analytics、SSL、Workers、R2、KV 等。使用有作用域的 API token(不要用 Global API Key),对所有写操作就像对待基础设施变更一样 —— 预览、应用、验证。

为什么要用

核心特性

实时演示

实际使用效果

cloudflare-api.replay ▶ 就绪
0/0

安装

选择你的客户端

~/Library/Application Support/Claude/claude_desktop_config.json  · Windows: %APPDATA%\Claude\claude_desktop_config.json
{
  "mcpServers": {
    "cloudflare-api": {
      "command": "npx",
      "args": [
        "-y",
        "@cloudflare/mcp"
      ]
    }
  }
}

打开 Claude Desktop → Settings → Developer → Edit Config。保存后重启应用。

~/.cursor/mcp.json · .cursor/mcp.json
{
  "mcpServers": {
    "cloudflare-api": {
      "command": "npx",
      "args": [
        "-y",
        "@cloudflare/mcp"
      ]
    }
  }
}

Cursor 使用与 Claude Desktop 相同的 mcpServers 格式。项目级配置优先于全局。

VS Code → Cline → MCP Servers → Edit
{
  "mcpServers": {
    "cloudflare-api": {
      "command": "npx",
      "args": [
        "-y",
        "@cloudflare/mcp"
      ]
    }
  }
}

点击 Cline 侧栏中的 MCP Servers 图标,然后选 "Edit Configuration"。

~/.codeium/windsurf/mcp_config.json
{
  "mcpServers": {
    "cloudflare-api": {
      "command": "npx",
      "args": [
        "-y",
        "@cloudflare/mcp"
      ]
    }
  }
}

格式与 Claude Desktop 相同。重启 Windsurf 生效。

~/.continue/config.json
{
  "mcpServers": [
    {
      "name": "cloudflare-api",
      "command": "npx",
      "args": [
        "-y",
        "@cloudflare/mcp"
      ]
    }
  ]
}

Continue 使用服务器对象数组,而非映射。

~/.config/zed/settings.json
{
  "context_servers": {
    "cloudflare-api": {
      "command": {
        "path": "npx",
        "args": [
          "-y",
          "@cloudflare/mcp"
        ]
      }
    }
  }
}

加入 context_servers。Zed 保存后热重载。

claude mcp add cloudflare-api -- npx -y @cloudflare/mcp

一行命令搞定。用 claude mcp list 验证,claude mcp remove 卸载。

使用场景

实战用法: Cloudflare API

审计所有 zone 的 DNS 记录,检查偏差

👤 平台 / SRE 团队 ⏱ ~25 min intermediate

何时使用: 你管理 40 个 zones,想知道哪些有异常的 TTL、缺失 SPF/DMARC 或悬挂的 CNAME。

前置条件
  • 具有 Zone:Zone:ReadZone:DNS:Read 权限的 API token — Cloudflare 仪表板 → 我的资料 → API 令牌 → 创建
步骤
  1. 列出所有 zones 并按类型计数记录
    列出我账户中的所有 zones。对每个 zone,按类型计数记录(A、CNAME、TXT、MX)。✓ 已复制
    → 清单矩阵
  2. 检查邮件认证卫生
    对于每个用于邮件的 zone,检查是否存在 SPF(包含 'v=spf1' 的 TXT)、_dmarc 处的 DMARC TXT 和 DKIM 选择器 TXT 记录。标记缺失的。✓ 已复制
    → 邮件认证缺口报告
  3. 找出悬挂的 CNAME
    对每个 zone 中的每个 CNAME,解析其目标。将 NXDOMAIN 或 SERVFAIL 标记为悬挂。✓ 已复制
    → 有风险的 CNAME 列表

结果: 一份按 zone 划分的 DNS 卫生报告,你可以将其交给负责每个域的团队。

注意事项
  • 悬挂的 CNAME 是子域接管风险 — 任何 NXDOMAIN CNAME 都要立即升级 —— 删除或修复
搭配使用: filesystem

添加或更新 DNS 记录,具有预览/应用工作流

👤 任何要进行让人紧张的 DNS 变更的人 ⏱ ~10 min beginner

何时使用: 切换邮件服务提供商、为服务添加新的 CNAME —— 高风险的 DNS 变更。

前置条件
  • 在目标 zone 上具有 Zone:DNS:Edit 权限的 token — 将 token 的作用域限制在你要修改的那个 zone
步骤
  1. 显示当前状态
    对于 zone <zone>,显示名称为 '<name>' 和类型为 <type> 的每条记录。代理状态和 TTL。✓ 已复制
    → 当前记录状态
  2. 提出变更建议,暂不应用
    提议一个补丁:<描述变更>。显示确切的 API 调用和变更前后。不要立即执行。✓ 已复制
    → 预览 diff
  3. 确认后应用
    我确认。应用变更。然后重新读取记录以确认。同时清除受影响名称的缓存。✓ 已复制
    → 记录已更新 + 缓存已清除 + 验证已读取

结果: 一个包含审查步骤和变更后验证的 DNS 变更 —— 没有意外。

注意事项
  • 代理的(橙色云)CNAME 指向邮件服务器会破坏邮件 — 对于 MX、与 SPF 相关的 CNAME 和非 HTTP 记录,始终使用 proxied:false

在流量突增期间部署紧急速率限制

👤 应对 L7 DDoS 或失控客户端的 SRE ⏱ ~15 min advanced

何时使用: 流量激增,源站在努力应对。你需要在几分钟内降低流量。

前置条件
  • 在 zone 上具有 Zone:Zone WAF:Edit 权限的 token — 保存在密码管理器中的专用事件响应 token
步骤
  1. 识别模式
    获取 zone <zone> 过去一小时的 analytics。按请求数排列的前 10 个路径、前 10 个用户代理、前 10 个国家。突出显示异常。✓ 已复制
    → 异常候选项
  2. 创建速率限制规则
    创建 WAF 速率限制规则:路径 /<hot path> 上每个 IP 每分钟 60 个请求,操作:challenge。2 分钟后记录匹配数。✓ 已复制
    → 规则已创建 + 匹配正在流式传输
  3. 安全时回滚
    一旦源站健康状态在 30 分钟内保持绿色,禁用(不删除)规则。留下一个标记为 'incident-<id>' 的描述用于审计。✓ 已复制
    → 规则已禁用;审计条目已保留

结果: 攻击通过一个可以重新启用或细化的规则得到缓解 —— 没有永久的配置偏差。

注意事项
  • 按国家大规模阻止会伤害合法用户 — 始终以 Challenge 或 JS-Challenge 开始,不要 Block;观察然后加强
搭配使用: sentry

部署后清除特定 URL 的 Cloudflare 缓存

👤 发布静态资源更新的前端开发者 ⏱ ~10 min beginner

何时使用: 部署后:CSS/JS 哈希值已更改,你希望用户立即获得新版本。

步骤
  1. 列出要清除的文件
    我的构建改变了这些 URL:[列表]。确认每一个都在 CF edge 上缓存(HEAD + cf-cache-status)。✓ 已复制
    → 每个 URL 的当前缓存命中/未命中
  2. 按 URL 清除
    在 zone <zone> 上清除这些 URL。不要进行清除一切。✓ 已复制
    → 清除任务已接受
  3. 验证新鲜获取
    10 秒后,重新 HEAD 每个 URL —— cf-cache-status 应该是 MISS 或 REVALIDATED。✓ 已复制
    → 新鲜缓存状态

结果: 有针对性的缓存清除,没有意外的全 zone 清除(这会在重新加载时杀死源站)。

注意事项
  • 清除一切会向源站发送羊群效应 — 永远不要调用 purge_all,除非你已经预热了备用路径;按 URL 清除几乎总是足够的
搭配使用: github

从本地 JSON 文件初始化 Workers KV

👤 部署基于 Workers 的 API 的工程师 ⏱ ~15 min intermediate

何时使用: 你在 KV 中维护配置/功能标志数据,并想从本地源数据同步。

前置条件
  • 具有 Workers KV Storage: Edit 权限的 token — 限定为特定命名空间 id
步骤
  1. 读取本地源
    读取 /config/kv.json。将其验证为 {key: value} 对象。✓ 已复制
    → 解析后的配置
  2. 与当前 KV 进行 diff
    列出命名空间 <id> 中的键。计算相对于我的本地文件的添加/更新/删除。✓ 已复制
    → 变更计划
  3. 通过批量写入应用
    对变更使用批量写入。删除只有在我确认的情况下 —— 先显示哪些键会被删除。✓ 已复制
    → 批量写入 ok;已审查删除

结果: KV 命名空间与源文件协调一致,足够原子化。

注意事项
  • KV 最终一致性意味着读者在约 60 秒内可能仍会看到旧值 — 如果需要强一致性,改用 D1 或 Durable Objects
搭配使用: filesystem

来自 Cloudflare Analytics 的每周流量和威胁摘要

👤 产品/增长 + 安全 ⏱ ~20 min intermediate

何时使用: 周五摘要:我们的流量模式是什么,我们阻止了什么威胁?

步骤
  1. 获取总数
    对于 zone <zone> 过去 7 天:总请求数、带宽、阻止的威胁、前 10 个国家。✓ 已复制
    → 标题数字
  2. 热门路径和推荐来源
    按请求排列的前 20 个路径;前 10 个推荐来源。突出显示与上周相比的变化。✓ 已复制
    → 增长/回归表
  3. 防火墙事件摘要
    过去 7 天防火墙规则触发次数最多的。任何从未触发的规则 —— 清理候选项。✓ 已复制
    → 规则集健康报告

结果: 一份包含流量、威胁和规则健康的单页周报。

注意事项
  • 免费计划 analytics 是采样的 — 为获取精确数据,使用 Logpush / GraphQL Analytics API 与 Pro+ 计划
搭配使用: notion

组合

与其他 MCP 搭配,撬动十倍杠杆

cloudflare-api + github

合并到主分支时,清除已部署资源 URL 的缓存

PR #342 已合并;其 diff 改变了 /static/app.a1b2.js。在 zone <zone> 上清除该 URL,用 HEAD 验证。✓ 已复制
cloudflare-api + sentry

将 Sentry 流量激增与防火墙事件数据关联

Sentry 显示在 14:02 5xx 激增。为同一 zone 拉取 14:00-14:05 的 CF analytics;与防火墙事件关联。✓ 已复制
cloudflare-api + filesystem

将本地 zone 配置文件同步到 Cloudflare(GitOps-lite)

读取 /dns/mydomain.yaml;与当前 zone 状态协调;安全地应用并审查。✓ 已复制

工具

此 MCP 暴露的能力

工具输入参数何时调用成本
list_zones 发现账户中的 zones free
list_dns_records zone_id, type?, name? 在任何 DNS 编辑前 —— 检查当前状态 free
create_dns_record / update_dns_record / delete_dns_record zone_id, record DNS 变更(需要 Edit token) free
purge_cache zone_id, files?|tags?|hosts?|everything? 部署后缓存清除 free
list_firewall_rules / create_firewall_rule zone_id, ... 事件响应/加强 free
analytics_dashboard zone_id, since, until 流量报告 free
kv_list / kv_get / kv_put / kv_bulk namespace_id, key/value Workers KV 操作 metered beyond free tier
deploy_worker script name, script content, bindings? 部署 Worker free up to limits

成本与限制

运行它的成本

API 配额
每个用户每 5 分钟 1200 个请求(Cloudflare 全局速率限制)
每次调用 Token 数
DNS 列表:每页 200–1000 个 token。Analytics:最多 3000 个。
费用
API 免费。Workers 付费/KV 超出免费层需付费;计划从免费 / Pro $20/月 / Business $200/月 开始。
提示
优先使用列表 + 服务器端过滤(type、name),而不是客户端过滤,以节省 token 和分页。

安全

权限、密钥、影响范围

最小权限: Zone:Zone:Read Zone:DNS:Read(仅为需要写入的特定 zones 添加 :Edit)
凭据存储: 在环境变量中使用 CLOUDFLARE_API_TOKEN —— 永远不要使用 Global API Key
数据出站: 所有调用都发送到 api.cloudflare.com
切勿授予: Global API Key(完全账户控制) Account:Access:Edit 无需账户级审查

故障排查

常见错误与修复

10000 认证错误

Token 无效或缺少所需权限。用特定 zone + 权限重新创建。

验证: curl -H 'Authorization: Bearer $CLOUDFLARE_API_TOKEN' https://api.cloudflare.com/client/v4/user/tokens/verify
81057 记录已存在

具有该名称+类型+内容的记录已存在。按 id 更新现有记录,不要创建。

按 URL 清除返回成功,但缓存仍然命中

URL 必须完全匹配,包括查询字符串顺序。同时检查 cf-cache-status —— 'DYNAMIC' 表示它根本没有缓存。

速率限制(429)

达到 Cloudflare 的全局 API 速率限制。退避、批处理或将工作负载分散到多个 token 用于不同工作流。

替代方案

Cloudflare API 对比其他方案

替代方案何时用它替代权衡
Cloudflare 官方 MCP(其他)你更喜欢 Cloudflare 的文档/Workers 可观测性聚焦的 MCP更窄的 API 表面
Route 53 MCP你在 AWS 上并想要 Route53 DNS不同的生态系统;没有内置 CDN/WAF

更多

资源

📖 阅读 GitHub 上的官方 README

🐙 查看未解决的 issue

🔍 浏览全部 400+ MCP 服务器和 Skills