Skip to main content
Glama
SquarePiSigma5

cloudflare-dns-mcp-server

cloudflare-dns-mcp-server

一个 Model Context Protocol (MCP) 服务器,允许任何兼容 MCP 的 LLM 客户端(Claude Code、Claude Desktop、claude.ai 自定义连接器、Cursor 等)读取和编辑你 Cloudflare 账户上的 DNS 记录。它以流式 HTTP 服务器(无状态 JSON 模式,当前远程服务器的 MCP 标准)方式运行,同时为那些启动本地子进程服务器的客户端提供 stdio 模式。

工具

工具

功能

cloudflare_verify_token

确认 API 令牌有效且处于活动状态

cloudflare_list_zones

列出该令牌可以管理的域名

cloudflare_list_dns_records

列出/筛选某个区域中的记录(记录 ID 的来源)

cloudflare_get_dns_record

按 ID 获取单条记录

cloudflare_create_dns_record

创建 A/AAAA/CNAME/MX/TXT/SRV/CAA 等记录

cloudflare_update_dns_record

部分更新;返回修改前后的状态,以便可以还原修改

cloudflare_delete_dns_record

删除(需要 confirm=true);返回一个快照,以便重新创建

cloudflare_export_zone

将区域导出为 BIND 文件——在批量修改之前先进行一次备份

Related MCP server: cloudflare-dns-mcp-server

设置

需要 Node.js 20 或更高版本。

1. 创建一个受限范围的 Cloudflare API 令牌。 在 Cloudflare 控制台中,进入 My Profile → API Tokens → Create Token → 使用 Edit zone DNS 模板,并在 Zone Resources 下将其限制为你希望模型管理的特定区域。不要使用 Global API Key——使用受限范围的令牌意味着最坏情况下的影响范围仅限于这些区域上的 DNS。

2. 安装并构建:

npm install
npm run build

3. 配置并运行:

cp .env.example .env   # fill in tokens, then either export them or use a loader
export CLOUDFLARE_API_TOKEN="cf_..."
export MCP_AUTH_TOKEN="$(openssl rand -hex 24)"   # protects the MCP endpoint itself
npm start

MCP 端点现在位于 http://127.0.0.1:8787/mcp(健康检查页面位于 /healthz)。环境变量:HOST(默认 127.0.0.1)、PORT(默认 8787)、TRANSPORT(默认 http,或 stdio)、ALLOWED_ORIGINS(额外的浏览器来源,以逗号分隔)。

4. 冒烟测试:

MCP_AUTH_TOKEN="<same token>" npm run smoke

这会使用真实的 MCP 客户端进行连接,列出 8 个工具,并调用 cloudflare_verify_token。你也可以将 MCP Inspector 指向该 URL:npx @modelcontextprotocol/inspector。

连接客户端

Claude Code:

claude mcp add --transport http cloudflare-dns http://127.0.0.1:8787/mcp \
  --header "Authorization: Bearer $MCP_AUTH_TOKEN"

Cursor / 其他使用 JSON 配置的客户端——任何支持自定义标头的流式 HTTP 的客户端都可以采用相同的方式工作:

{
  "mcpServers": {
    "cloudflare-dns": {
      "url": "http://127.0.0.1:8787/mcp",
      "headers": { "Authorization": "Bearer <MCP_AUTH_TOKEN>" }
    }
  }
}

只能启动本地子进程服务器的客户端:

{
  "mcpServers": {
    "cloudflare-dns": {
      "command": "node",
      "args": ["/path/to/cloudflare-dns-mcp-server/dist/index.js"],
      "env": { "CLOUDFLARE_API_TOKEN": "cf_...", "TRANSPORT": "stdio" }
    }
  }
}

claude.ai / Claude 移动端自定义连接器需要公网 HTTPS URL——它们无法访问 localhost。最快捷的方式是从运行服务器的机器上创建一个 Cloudflare Tunnel:

cloudflared tunnel --url http://127.0.0.1:8787

重要提醒:claude.ai 自定义连接器界面通过 OAuth 进行身份验证,或者干脆不进行任何身份验证——它没有静态 bearer header 的字段。这意味着远程使用有两种方案:将 tunnel 置于 Cloudflare Access(服务认证)之后并在那里终止认证,或者保持 MCP_AUTH_TOKEN 未设置,仅依赖 tunnel URL 的保密性——但对于一个可以编辑 DNS 的工具来说,这种保护的强度明显弱得多。使用 Cloudflare Tunnel 时,服务器仍然只绑定 127.0.0.1,因此无需显式开启;但如果你直接暴露端口而不是走 tunnel,未认证的非 localhost 绑定仍需要 ALLOW_UNAUTHENTICATED=true。在选择之前,请查看当前 claude.ai 连接器的认证选项;随着时间推移会发生变化,这些选项会随时间而变化。

安全说明

服务器默认绑定 127.0.0.1,并且没有 CLOUDFLARE_API_TOKEN 时拒绝启动。如果在未设置 MCP_AUTH_TOKEN 的情况下绑定任何其他地址,它会拒绝启动——因为任何能访问该端口的人都可以编辑你的 DNS——除非你设置 ALLOW_UNAUTHENTICATED=true,这仅在认证终止于上游(如 Cloudflare Access)时才合适。来自浏览器来源的请求都会被拒绝,除非来源是 localhost 或者在 ALLOWED_ORIGINS 中(防止 DNS 重绑定)。令牌从环境中读取,绝不会被记录,也绝不会被任何工具返回。

在模型安全方面:删除必须明确传入 confirm=true 参数,更新会返回修改前和修改后的状态,因此任何更改都可以回滚,而 cloudflare_export_zone 提供了一次调用的 BIND 备份——在进行批量修改之前,值得让模型先运行一次。DNS 编辑会传播到真实的互联网;一条错误的记录可能导致网站或邮件离线,因此在生产环境运行之前,请先仔细审查模型提出的建议,再让它去碰生产环境。

开发

npm run build    # compile TypeScript → dist/
npm start        # run HTTP server
npm run smoke    # end-to-end client test against the running server

源代码布局:src/index.ts(传输层、认证中间件)、src/cloudflare.ts(API 客户端、区域解析、格式化)、src/tools.ts(工具注册)。

开源协议

MIT

Related MCP Connectors

Related MCP Servers