使用说明
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代币
- 首选 Cloudflare API代币
- 点击 “创建令牌”
- 使用 “编辑区域DNS” 模板
- 复制生成的令牌
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 工具。要还原,请执行以下操作:
- 加载备份JSON文件
- 对于每个区域中的每条记录,使用
create_dns_record记录数据 - 这
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令牌
- 首选 Cloudflare Dashboard>API代币
- 点击 “创建令牌”
- 选择以下选项之一:
- “编辑区域DNS”模板 -预配置DNS管理(读取/编辑记录)
- 自定义令牌 具有以下权限:
Zone.Zone→ 阅读(列出和查看区域需要)Zone.DNS→ 编辑(DNS记录管理所需)Zone.Zone→ 编辑(仅需要add_zone工具)
- (可选)限制到特定区域以提高安全性
- 复制生成的令牌
注: 如果您只需要管理现有域的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中
- 验证路径
dist/index.js是绝对的(不是相对的) - 更改配置后重新启动Claude Desktop
- 检查构建是否成功完成(
npm run build) - 检查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-可能中断服务的不可逆操作
贡献
欢迎投稿!请随时提交拉取请求。
- 分叉存储库
- 创建功能分支(
git checkout -b feature/amazing-feature) - 提交您的更改(
git commit -m 'Add some amazing feature') - 推到分支(
git push origin feature/amazing-feature) - 打开拉取请求
开发指南
- 遵循现有代码样式
- 为新功能添加TypeScript类型
- 更新README以获取新工具或参数
- 使用Claude Desktop和Claude Code进行测试更改
许可证
此项目根据MIT许可证获得许可-请参阅 许可证 文件以获取详细信息。
致谢
相关项目
- 模型上下文协议 -MCP规范
- MCP 服务器 -官方MCP服务器实施
- Cloudflare API文档 -Cloudflare API文档