DNS管理服务

一个基于Model Context Protocol的Cloudflare DNS记录管理服务器,支持通过自然语言命令进行DNS记录的查询、创建、更新和删除操作。

  • by daniil-shumko
  • TypeScript
  • 本地部署
  • 2 星标
  • 更新于
在 GitHub 查看 daniil-shumko/cloudflare-dns-mcp

使用说明

Cloudflare DNS MCP服务器

注: 这是一个非官方的MCP服务器,不隶属于Cloudflare或得到Cloudflare的认可。

⚠️ 安全警告

此MCP服务器严重“振动编码”,应谨慎使用。使用前:

  • 检查代码 -此工具可以通过API令牌访问您的Cloudflare帐户
  • 克隆存储库 -为了安全起见,克隆此仓库并运行本地副本,而不是使用npx
  • 使用最小权限 -只使用您需要的权限创建API令牌
  • 使用前审核 -代码很简单,可以在大约30分钟内查看
  • 先备份DNS -使用 backup_dns_records 在进行任何修改之前导出DNS设置的工具
git clone https://github.com/daniil-shumko/cloudflare-dns-mcp
cd cloudflare-dns-mcp && npm install && npm run build

A. 模型上下文协议(MCP) 用于管理Cloudflare DNS记录的服务器。使用自然语言与Claude Desktop或Claude Code一起列出域、查看DNS记录和进行DNS更改。

什么是MCP?

模型上下文协议(MCP)是一个开放标准,允许像Claude这样的人工智能助手安全地连接到外部工具和数据源。此服务器实现了MCP,使Claude能够与您的Cloudflare DNS设置进行交互。

特性

  • 列出和搜索域 -查看Cloudflare帐户上的所有区域
  • 完整DNS管理 -创建、读取、更新和删除DNS记录
  • 备份和导出 -将DNS记录导出为JSON以进行备份或迁移
  • 广泛的记录类型支持 -常见类型(A、AAAA、CNAME、TXT、MX、NS、SRV) content,加上结构化类型(CAA、HTTPS、SVCB、TLSA、SSHFP、URI等) data 领域
  • 灵活的识别 -使用区域ID或域名
  • Cloudflare代理支持 -在记录上切换橙色云(代理)状态

快速开始

1.安装

选项A:从npm安装(推荐)

npm install -g cloudflare-dns-mcp

选项B:在本地克隆和构建(用于代码审查)

git clone https://github.com/daniil-shumko/cloudflare-dns-mcp.git
cd cloudflare-dns-mcp
npm install
npm run build

2.创建Cloudflare API代币

  1. 首选 Cloudflare API代币
  2. 点击 “创建令牌”
  3. 使用 “编辑区域DNS” 模板
  4. 复制生成的令牌

3.配置克劳德桌面

添加到您的Claude Desktop配置中:

macOS: ~/Library/Application Support/Claude/claude_desktop_config.json 视窗: %APPDATA%\Claude\claude_desktop_config.json

如果通过npm安装(选项A):

{
  "mcpServers": {
    "cloudflare-dns": {
      "command": "npx",
      "args": ["cloudflare-dns-mcp"],
      "env": {
        "CLOUDFLARE_API_TOKEN": "your_token_here"
      }
    }
  }
}

如果本地安装(选项B):

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

4.重新启动克劳德桌面

服务器现在将可用。试着问克劳德:

“列出我的所有Cloudflare域”


可用工具

此MCP服务器提供10个DNS管理工具:

工具 说明
add_zone 将新域添加到您的Cloudflare帐户
list_zones 列出您帐户上的所有域
get_zone_details 获取有关域的详细信息
list_dns_records 列出域的DNS记录
get_dns_record 按ID获取特定记录
find_dns_records 按名称搜索记录
create_dns_record 创建新的DNS记录
update_dns_record 修改现有记录
delete_dns_record 删除DNS记录
backup_dns_records 将记录导出为JSON

工具参考

add_zone

将新域(区域)添加到您的Cloudflare帐户。添加后,必须在您的注册商处更新域名服务器,以指向Cloudflare的域名服务器。

参数:

参数 类型 必填 说明
name string Yes 要添加的域名(例如。, example.com)
account_id string Yes 您的Cloudflare帐户ID(可在仪表板URL或API中找到)
type string 否 区域类型: full (默认), partial, secondary,或 internal

查找您的帐户ID:

  • 在Cloudflare仪表板URL中: https://dash.cloudflare.com/<ACCOUNT_ID>/...
  • 通过API:使用 list_zones 并检查 account.id 区域详细信息中的字段

示例提示:

  • “将example.com添加到我的Cloudflare帐户”
  • “使用帐户ID abc123为mydomain.io创建一个新区域”

答复包括:

  • 未来操作的区域ID
  • 在注册商处配置已分配的名称服务器
  • 区域状态(通常 pending 直到名称服务器更新)

⚠️ 许可说明: 此工具在每次使用前都需要确认,不能永久自动批准。这是一种安全措施,因为添加区域会影响您的Cloudflare帐户配置。


list_zones

列出您Cloudflare帐户上的所有域(区域)。

参数:

参数 类型 必填 说明
page number No 页码(默认值:1)
per_page number 否 每页结果数,5-50(默认值:50)
name string 否 按域名筛选(部分匹配)
status string 否 按状态筛选: active, pending, initializing, moved

示例提示:

  • “列出我的所有域名”
  • “显示我的活动Cloudflare区域”
  • “查找包含'示例'的域”

get_zone_details

获取特定域的详细信息,包括名称服务器、计划和设置。

参数:

参数 类型 必填 说明
zone_id string 否* 区域ID(32个字符的十六进制字符串)
domain_name string 否* 域名(例如。, example.com)

*其中之一 zone_id 或 domain_name 是必需的。

示例提示:

  • “显示example.com的详细信息”
  • “mysite.com使用什么名称服务器?”
  • “example.com上有什么计划?”

list_dns_records

列出域的所有DNS记录。

参数:

参数 类型 必填 说明
zone_id string 否* 区域ID
domain_name string 否* 域名
type string 否 按记录类型筛选: A, AAAA, CNAME, TXT, MX, NS, SRV, CAA, PTR, HTTPS, SVCB,以及其他标准类型
name string 否 按记录名筛选
page number No 页码(默认值:1)
per_page number 否 每页最多100个结果(默认值:100)

*其中之一 zone_id 或 domain_name 是必需的。

示例提示:

  • “example.com有哪些DNS记录?”
  • “显示mysite.com的所有A记录”
  • “列出我的电子邮件域的MX记录”

get_dns_record

通过ID获取特定DNS记录的详细信息。

参数:

参数 类型 必填 说明
zone_id string 是 区域ID
record_id string 是 DNS记录ID

find_dns_records

按名称搜索DNS记录。可用于在更新或删除之前查找记录ID。

参数:

参数 类型 必填 说明
zone_id string 否* 区域ID
domain_name string 否* 域名
record_name string Yes 要搜索的记录名称(例如。, www.example.com)
type string 否 按记录类型筛选

*其中之一 zone_id 或 domain_name 是必需的。

示例提示:

  • “查找www.example.com的记录ID”
  • “查找api.example.com的A记录”
  • “mail.example.com的记录ID是什么?”

create_dns_record

创建新的DNS记录。

参数:

参数 类型 必填 说明
zone_id string 否* 区域ID
domain_name string 否* 域名
type string 是 记录类型: A, AAAA, CNAME, TXT, MX, NS, SRV, CAA, HTTPS, SVCB, TLSA, SSHFP, URI,以及其他标准类型
name string 是 记录名称(使用 @ 或根域名)
content string 否** 简单记录的记录内容(IP、主机名或文本)
data object 否** 内容为只读的记录的结构化数据,例如CAA { flags, tag, value }、SRV或HTTPS/SVCB参数
ttl number No TTL(秒): 1 =自动(默认),否则 60–86400 (最小值 30 企业区)
proxied boolean 否 启用Cloudflare代理(默认值:false)
priority number No MX和URI记录的优先级
comment string 否 可选注释
tags string[] 否 可选自定义标记

*其中之一 zone_id 或 domain_name 是必需的。 **其中之一 content (简单记录)或 data (CAA等结构化记录)是必需的。

示例提示:

  • “为www.example.com添加一条指向192.168.1.1的A记录”
  • “为blog.example.com创建一个指向myblog.netlify.app的CNAME”
  • “为_dmarc.example.com添加一个TXT记录,值为'v=DMARC1;p=none'”
  • “为example.com设置一个优先级为10的MX记录,指向mail.example.com”
  • “在启用Cloudflare代理的情况下为api.example.com添加A记录”

update_dns_record

更新现有DNS记录。仅指定要更改的字段。

参数:

参数 类型 必填 说明
zone_id string 是 区域ID
record_id string 是 要更新的DNS记录ID
type string 否 新记录类型
name string 否 新记录名称
content string 否 新内容
ttl number 否 新TTL(1 =自动,否则 60–86400;最小值 30 企业区)
proxied boolean 否 新代理状态
priority number No 新优先级(适用于MX和URI记录)
comment string 否 新评论
tags string[] 否 新的自定义标记
data object 否 新的结构化数据(CAA/SRV/HTTPS/SVCB)

示例提示:

  • “将www.example.com的IP更改为10.0.0.1”
  • “将MX记录的优先级更改为20”
  • “为example.com上的www记录启用Cloudflare代理”
  • “将api.example.com的TTL更新为300秒”

delete_dns_record

删除DNS记录。 这一行动是不可逆转的。

参数:

参数 类型 必填 说明
zone_id string 是 区域ID
record_id string 是 要删除的DNS记录ID

示例提示:

  • “删除legacy.example.com的旧CNAME记录”
  • “从example.com中删除TXT验证记录”

backup_dns_records

将DNS记录备份为JSON格式。可以备份帐户上的单个域或所有域。

参数:

参数 类型 必填 说明
zone_id string 否 要备份的区域ID(对所有域省略)
domain_name string 否 要备份的域(对所有域省略)

如果两个参数都没有提供, 所有域 将得到备份。

示例提示:

  • “备份所有DNS记录,例如.com”
  • “创建我所有域的DNS记录的备份”
  • “导出mysite.com的DNS设置并保存到DNS backup.json”

备份JSON格式:

{
  "version": "1.0",
  "created_at": "2024-01-15T10:30:00.000Z",
  "backup_type": "single_zone",
  "zones": [
    {
      "zone_id": "abc123def456...",
      "zone_name": "example.com",
      "records": [
        {
          "type": "A",
          "name": "example.com",
          "content": "192.168.1.1",
          "ttl": 1,
          "proxied": true
        },
        {
          "type": "CNAME",
          "name": "www.example.com",
          "content": "example.com",
          "ttl": 1,
          "proxied": true
        },
        {
          "type": "MX",
          "name": "example.com",
          "content": "mail.example.com",
          "ttl": 3600,
          "proxied": false,
          "priority": 10
        }
      ],
      "record_count": 3
    }
  ],
  "total_zones": 1,
  "total_records": 3
}

从备份还原

备份格式旨在与 create_dns_record 工具。要还原,请执行以下操作:

  1. 加载备份JSON文件
  2. 对于每个区域中的每条记录,使用 create_dns_record 记录数据
  3. 这 zone_name 字段标识要还原到哪个域

还原提示示例:

“读取备份文件dns-backup.json并重新创建所有dns记录,例如.com”


配置

克劳德桌面版

配置文件位置:

  • macOS: ~/Library/Application Support/Claude/claude_desktop_config.json
  • 视窗: %APPDATA%\Claude\claude_desktop_config.json
  • Linux: ~/.config/Claude/claude_desktop_config.json

使用npx(推荐):

{
  "mcpServers": {
    "cloudflare-dns": {
      "command": "npx",
      "args": ["cloudflare-dns-mcp"],
      "env": {
        "CLOUDFLARE_API_TOKEN": "your_token_here"
      }
    }
  }
}

使用本地安装:

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

Claude 代码

使用npx(推荐):

添加到您的项目 .mcp.json:

{
  "mcpServers": {
    "cloudflare-dns": {
      "command": "npx",
      "args": ["cloudflare-dns-mcp"],
      "env": {
        "CLOUDFLARE_API_TOKEN": "your_token_here"
      }
    }
  }
}

或者使用CLI:

claude mcp add cloudflare-dns --env CLOUDFLARE_API_TOKEN=your_token_here -- npx cloudflare-dns-mcp

使用本地安装:

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

环境变量

变量 必填 描述
CLOUDFLARE_API_TOKEN 是 您的Cloudflare API代币

创建Cloudflare API令牌

  1. 首选 Cloudflare Dashboard>API代币
  2. 点击 “创建令牌”
  3. 选择以下选项之一:
    • “编辑区域DNS”模板 -预配置DNS管理(读取/编辑记录)
    • 自定义令牌 具有以下权限:
      • Zone.Zone → 阅读(列出和查看区域需要)
      • Zone.DNS → 编辑(DNS记录管理所需)
      • Zone.Zone → 编辑(仅需要 add_zone 工具)
  4. (可选)限制到特定区域以提高安全性
  5. 复制生成的令牌

注: 如果您只需要管理现有域的DNS记录,则不需要 Zone.Zone → Edit。仅当您想使用时才添加此权限 add_zone 添加新域的工具。


发展

先决条件

  • Node.js 20或更高版本(建议使用Node 22+——Node 20于2026年4月达到生命周期终点)
  • npm或纱线

设置

# Clone the repository
git clone https://github.com/daniil-shumko/cloudflare-dns-mcp.git
cd cloudflare-dns-mcp

# Install dependencies
npm install

# Build the project
npm run build

可用脚本

npm run build         # Build for production
npm run dev           # Watch mode (rebuild on changes)
npm run typecheck     # Run TypeScript type checking
npm run test          # Run test suite
npm run test:watch    # Run tests in watch mode
npm run test:coverage # Run tests with coverage report
npm run start         # Run the built server

项目结构

cloudflare-dns-mcp/
├── src/
│   ├── index.ts              # MCP server entry point
│   ├── globals.d.ts          # Build-time globals (__SERVER_VERSION__)
│   ├── cloudflare/
│   │   ├── client.ts         # Cloudflare API client
│   │   └── types.ts          # TypeScript type definitions
│   ├── tools/
│   │   ├── index.ts          # Tools module exports
│   │   ├── schemas.ts        # Zod validation schemas
│   │   ├── definitions.ts    # MCP tool definitions
│   │   ├── handlers.ts       # Tool implementations
│   │   └── types.ts          # Tool-specific types
│   └── utils/
│       ├── config.ts         # Configuration loader
│       └── errors.ts         # Error handling utilities
├── tests/                    # Test suite
├── dist/                     # Compiled JavaScript (generated)
├── package.json
├── tsconfig.json
├── tsup.config.ts            # Build config (injects the package version)
├── vitest.config.ts
└── README.md

测试

运行测试套件:

npm test

手动测试服务器:

# Set your API token
export CLOUDFLARE_API_TOKEN="your_token_here"

# Test server startup
node dist/index.js

# Test with JSON-RPC (list tools)
echo '{"jsonrpc":"2.0","id":1,"method":"tools/list","params":{}}' | node dist/index.js

故障排除

“需要CLOUDFLARE_API_TOKEN环境变量”

未设置API令牌。确保已将其添加到MCP配置中 env 块。

“未找到区域”

  • 您的Cloudflare帐户中可能不存在该域
  • 您的API令牌可能无法访问此区域
  • 检查域名中的拼写错误

“权限被拒绝”错误

您的API令牌需要两种权限:

  • Zone.Zone:阅读
  • Zone.DNS:编辑

服务器未出现在Claude Desktop中

  1. 验证路径 dist/index.js 是绝对的(不是相对的)
  2. 更改配置后重新启动Claude Desktop
  3. 检查构建是否成功完成(npm run build)
  4. 检查Claude Desktop日志是否有错误

速率限制

Cloudflare API有速率限制。如果你提出了很多请求,你可能会看到错误。请稍等,然后重试。


安全最佳实践

  • 永远不要提交您的API令牌 到版本控制
  • 使用环境变量 用于令牌存储
  • 创建最小权限令牌 -只授予区域。区域:阅读和区域。DNS:编辑
  • 将令牌作用于特定区域 如果您只需要管理某些域
  • 定期旋转令牌 为了更好的安全性
  • 查看审核日志 在API活动的Cloudflare仪表盘中

工具权限级别

此MCP服务器使用 MCP工具注释 指示工具行为和权限要求:

工具 只读 破坏性 行为
list_zones ✅ - 自动审批安全
get_zone_details ✅ - 自动审批安全
list_dns_records ✅ - 自动审批安全
get_dns_record ✅ - 自动审批安全
find_dns_records ✅ - 自动审批安全
backup_dns_records ✅ - 自动审批安全
create_dns_record - - 可以自动批准(仅限添加剂)
update_dns_record - ⚠️ 仅限会话审批 (可以破坏DNS)
delete_dns_record - ⚠️ 仅限会话审批 (不可逆)
add_zone - ⚠️ 仅限会话审批 (帐户级别更改)

标记有的工具 destructiveHint: true (更新、删除、添加区域):

  • 每次使用前都需要确认
  • 无法在会话之间永久自动批准
  • 必须在新的Claude Code会议中重新批准

为什么这些工具需要额外的确认:

  • add_zone -修改帐户配置,可能会影响计费
  • update_dns_record -可能会错误配置关键DNS设置(电子邮件、网站)
  • delete_dns_record -可能中断服务的不可逆操作

贡献

欢迎投稿!请随时提交拉取请求。

  1. 分叉存储库
  2. 创建功能分支(git checkout -b feature/amazing-feature)
  3. 提交您的更改(git commit -m 'Add some amazing feature')
  4. 推到分支(git push origin feature/amazing-feature)
  5. 打开拉取请求

开发指南

  • 遵循现有代码样式
  • 为新功能添加TypeScript类型
  • 更新README以获取新工具或参数
  • 使用Claude Desktop和Claude Code进行测试更改

许可证

此项目根据MIT许可证获得许可-请参阅 许可证 文件以获取详细信息。


致谢


相关项目