DNS解析管理MCP工具

这是阿里云 DNS 解析服务的 MCP 工具集,提供域名与 DNS 记录的全生命周期管理能力,适用于在 Claude Desktop 等 AI 客户端中通过自然语言完成域名解析配置与运维。

  • by coofly
  • Python
  • 本地部署
  • 1 星标
  • 更新于
在 GitHub 查看 coofly/aliyun_dns_mcp

使用说明

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 管理页面:

  1. 登录阿里云控制台
  2. 点击右上角头像,选择 "AccessKey 管理"
  3. 创建 AccessKey 或使用现有的 AccessKey
  4. 记录 AccessKey ID 和 AccessKey Secret(仅在创建时显示一次)
  5. 确保该 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 都提供图形化配置界面:

  1. 在 IDE 设置中找到 MCP 配置选项
  2. 添加新的 MCP 服务:
    • 名称: Aliyun-DNS
    • 描述: 用于管理阿里云 DNS 解析服务的工具
    • 类型: 标准输入/输出 (stdio)
    • 命令: uv
    • 参数: run E:/codes/aliyun_dns_mcp/alidns_mcp.py (使用你的实际路径)
    • 环境变量:
      • ALIBABA_CLOUD_ACCESS_KEY_ID: 你的 AccessKey ID
      • ALIBABA_CLOUD_ACCESS_KEY_SECRET: 你的 AccessKey Secret

常见问题排查

问题 1:启动失败,提示 "Connection closed"

可能原因:

  • AccessKey 配置错误或不存在
  • 环境变量未正确传递
  • AccessKey 权限不足

解决方法:

  1. 确认 AccessKey ID 和 Secret 是否正确(注意不要有多余的空格)
  2. 登录阿里云控制台验证 AccessKey 是否存在且未被禁用
  3. 检查 AccessKey 是否具有 DNS 管理权限
  4. 运行调试脚本测试连接:
    uv run debug_test.py
    

问题 2:提示 "InvalidAccessKeyId.NotFound"

原因:AccessKey ID 不正确或不存在

解决方法:

  1. 重新检查你在 IDE 配置中填写的 AccessKey ID
  2. 前往阿里云控制台确认 AccessKey 是否正确
  3. 如果忘记了 Secret,需要重新创建 AccessKey

问题 3:提示 "InvalidAccessKeySecret"

原因:AccessKey Secret 不正确

解决方法:

  1. 确认 AccessKey Secret 是否正确(注意大小写和特殊字符)
  2. 如果不确定,建议重新创建 AccessKey

运行测试

项目包含完整的自动化测试脚本,测试所有工具功能:

uv run test.py

测试脚本会:

  1. 列出所有可用工具
  2. 获取第一个可管理的域名
  3. 在该域名下创建测试记录 alidns_mcp_tool_test
  4. 测试更新、禁用、启用、删除等操作
  5. 验证每个操作的结果

工具详细说明

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+: 运行环境

注意事项

  1. 确保阿里云账户具有 DNS 管理权限
  2. AccessKey 请妥善保管,不要泄露到公开仓库
  3. 测试脚本会在第一个域名下创建临时记录,测试完成后会自动清理
  4. DNS 记录变更可能需要一定时间生效(通常为几分钟)

License

MIT