使用说明
Aliyun DNS MCP
阿里云 DNS 解析服务的 MCP (Model Context Protocol) 工具集,提供完整的域名和 DNS 记录管理功能。
功能特性
域名管理
- list_domains: 列出当前账户下所有可管理的域名
DNS 记录管理
- list_dns_records: 查询指定域名的所有解析记录
- add_dns_record: 添加新的 DNS 解析记录
- update_dns_record: 更新现有的 DNS 解析记录
- delete_dns_record: 删除指定的 DNS 解析记录
- enable_dns_record: 启用 DNS 解析记录
- disable_dns_record: 禁用 DNS 解析记录(暂停解析但不删除)
安装依赖
本项目使用 uv 的内联脚本依赖声明,无需手动安装依赖。首先确保已安装 uv:
# 安装 uv (如果尚未安装)
curl -LsSf https://astral.sh/uv/install.sh | sh
依赖已在 alidns_mcp.py 文件头部声明,运行时 uv 会自动管理:
# /// script
# dependencies = [
# "fastmcp",
# "alibabacloud_alidns20150109",
# ]
# ///
配置
1. 获取阿里云访问密钥
- 登录阿里云控制台
- 点击右上角头像,选择 "AccessKey 管理"
- 创建 AccessKey 或使用现有的 AccessKey
- 记录 AccessKey ID 和 AccessKey Secret(仅在创建时显示一次)
- 确保该 AccessKey 拥有 云解析 DNS(Alidns) 的管理权限
⚠️ 重要提示:
- AccessKey Secret 仅在创建时显示一次,请妥善保管
- 如果忘记 Secret,只能重新创建 AccessKey
- 不要将 AccessKey 提交到公开仓库
2. 设置环境变量
设置阿里云访问凭证环境变量:
# Linux/macOS
export ALIBABA_CLOUD_ACCESS_KEY_ID="your_access_key_id"
export ALIBABA_CLOUD_ACCESS_KEY_SECRET="your_access_key_secret"
# Windows PowerShell
$env:ALIBABA_CLOUD_ACCESS_KEY_ID="your_access_key_id"
$env:ALIBABA_CLOUD_ACCESS_KEY_SECRET="your_access_key_secret"
使用方法
作为 MCP 服务运行
直接运行服务(stdio 模式):
uv run alidns_mcp.py
在 Claude Desktop 中配置
编辑 Claude Desktop 配置文件,添加 MCP 服务:
macOS: ~/Library/Application Support/Claude/claude_desktop_config.json
Windows: %APPDATA%\Claude\claude_desktop_config.json
{
"mcpServers": {
"aliyun-dns": {
"command": "uv",
"args": ["run", "path/to/alidns_mcp.py"],
"env": {
"ALIBABA_CLOUD_ACCESS_KEY_ID": "your_access_key_id",
"ALIBABA_CLOUD_ACCESS_KEY_SECRET": "your_access_key_secret"
}
}
}
}
⚠️ 注意:
- 将
path/to/alidns_mcp.py替换为实际的绝对路径 - 将
your_access_key_id和your_access_key_secret替换为你的阿里云访问密钥 - 保存配置后需要重启 Claude Desktop
在其他 IDE 中配置(如 Cursor、Windsurf 等)
大多数支持 MCP 的 IDE 都提供图形化配置界面:
- 在 IDE 设置中找到 MCP 配置选项
- 添加新的 MCP 服务:
- 名称: Aliyun-DNS
- 描述: 用于管理阿里云 DNS 解析服务的工具
- 类型: 标准输入/输出 (stdio)
- 命令:
uv - 参数:
run E:/codes/aliyun_dns_mcp/alidns_mcp.py(使用你的实际路径) - 环境变量:
ALIBABA_CLOUD_ACCESS_KEY_ID: 你的 AccessKey IDALIBABA_CLOUD_ACCESS_KEY_SECRET: 你的 AccessKey Secret
常见问题排查
问题 1:启动失败,提示 "Connection closed"
可能原因:
- AccessKey 配置错误或不存在
- 环境变量未正确传递
- AccessKey 权限不足
解决方法:
- 确认 AccessKey ID 和 Secret 是否正确(注意不要有多余的空格)
- 登录阿里云控制台验证 AccessKey 是否存在且未被禁用
- 检查 AccessKey 是否具有 DNS 管理权限
- 运行调试脚本测试连接:
uv run debug_test.py
问题 2:提示 "InvalidAccessKeyId.NotFound"
原因:AccessKey ID 不正确或不存在
解决方法:
- 重新检查你在 IDE 配置中填写的 AccessKey ID
- 前往阿里云控制台确认 AccessKey 是否正确
- 如果忘记了 Secret,需要重新创建 AccessKey
问题 3:提示 "InvalidAccessKeySecret"
原因:AccessKey Secret 不正确
解决方法:
- 确认 AccessKey Secret 是否正确(注意大小写和特殊字符)
- 如果不确定,建议重新创建 AccessKey
运行测试
项目包含完整的自动化测试脚本,测试所有工具功能:
uv run test.py
测试脚本会:
- 列出所有可用工具
- 获取第一个可管理的域名
- 在该域名下创建测试记录
alidns_mcp_tool_test - 测试更新、禁用、启用、删除等操作
- 验证每个操作的结果
工具详细说明
list_domains
列出当前账户下所有可管理的域名。
返回示例:
[
{
"name": "example.com",
"id": "domain_id",
"records": 10,
"created": "2024-01-01T00:00:00Z"
}
]
list_dns_records
列出指定域名的所有 DNS 解析记录。
参数:
domain_name(string): 域名,如 "example.com"
返回示例:
[
{
"id": "record_id",
"rr": "www",
"type": "A",
"value": "192.168.1.1",
"status": "ENABLE"
}
]
add_dns_record
为域名添加一条新的解析记录。
参数:
domain_name(string): 域名,如 "example.com"rr(string): 主机记录,如 "www" 或 "@"type(string): 记录类型,如 "A", "CNAME", "TXT"value(string): 记录值,如 IP 地址或指向的域名
update_dns_record
更新现有的 DNS 解析记录。
参数:
record_id(string): 记录ID,可通过 list_dns_records 获取rr(string): 主机记录type(string): 记录类型value(string): 新的记录值
delete_dns_record
删除指定的 DNS 解析记录。
参数:
record_id(string): 记录ID
enable_dns_record
启用指定的 DNS 解析记录。
参数:
record_id(string): 记录ID
disable_dns_record
禁用指定的 DNS 解析记录(暂停解析但不删除)。
参数:
record_id(string): 记录ID
项目结构
aliyun_dns_mcp/
├── alidns_mcp.py # MCP 服务主文件(包含内联依赖声明)
├── test.py # 自动化测试脚本
├── README.md # 项目说明文档
└── .gitignore # Git 忽略配置
技术栈
- FastMCP: MCP 服务框架
- alibabacloud_alidns20150109: 阿里云 DNS SDK
- Python 3.8+: 运行环境
注意事项
- 确保阿里云账户具有 DNS 管理权限
- AccessKey 请妥善保管,不要泄露到公开仓库
- 测试脚本会在第一个域名下创建临时记录,测试完成后会自动清理
- DNS 记录变更可能需要一定时间生效(通常为几分钟)
License
MIT