DNS简单MCP服务器
用于DNSimple API交互的MCP服务器,提供用于域管理、DNS配置、定价查询和域传输的工具。
特性
- 域管理:列出域、获取定价、检查续订成本
- 名称服务器委派:读取并更新注册商级域名服务器
- DNS配置:创建、更新、列出和删除DNS记录
- 自动续订控制:禁用域的自动续订
- 域名转移:启动向DNSimple的域传输
- Whois隐私:检查并启用域的whois隐私(域隐私)
安装
cd execution/mcp-servers/dnsimple
pip install -r requirements.txt配置
认证
服务器支持多种身份验证方法(按优先级顺序检查):
- 环境变量 (推荐,最高优先级):
export DNSIMPLE_API_TOKEN="your-token-here"- 配置目录
.env文件 (便携式,用户特定):
- 地点: ~/.config/dnsimple-mcp/.env - 格式: DNSIMPLE_API_TOKEN=your-token-here - 首次使用时会自动创建配置目录
- 1密码集成 (可选,为了向后兼容):
- 仅当父存储库结构存在时才可用 - 配置标题为“DNSimple”或URL为“DNSimple.com”的1Password项 - 添加字段:“访问令牌”、“api_token”或“令牌”与您的DNSimple api令牌 - 从以下位置获取您的API令牌:https://dnsimple.com/user
注: MCP服务器是独立的、可移植的。它不需要任何特定的存储库结构,可以在任何项目中使用。
光标配置
添加到光标MCP设置(通常 ~/.cursor/mcp.json 或光标设置):
选项1:使用环境变量(推荐):
{
"mcpServers": {
"dnsimple": {
"command": "python3",
"args": [
"/path/to/dnsimple_mcp_server.py"
],
"env": {
"DNSIMPLE_API_TOKEN": "your-token-here"
}
}
}
}选项2:使用配置目录(~/.config/dnsimple-mcp/.env中的标记):
{
"mcpServers": {
"dnsimple": {
"command": "python3",
"args": [
"/path/to/dnsimple_mcp_server.py"
],
"env": {}
}
}
}注: 替换 /path/to/dnsimple_mcp_server.py 以及服务器文件的实际路径。服务器是便携式的,可以放置在任何地方。
Claude桌面配置
添加 claude_desktop_config.json (通常 ~/Library/Application Support/Claude/claude_desktop_config.json 在macOS上):
{
"mcpServers": {
"dnsimple": {
"command": "python3",
"args": [
"/path/to/dnsimple_mcp_server.py"
],
"env": {
"DNSIMPLE_API_TOKEN": "your-token-here"
}
}
}
}注: 替换 /path/to/dnsimple_mcp_server.py 以及服务器文件的实际路径。
可用工具
list_domains
列出DNSimple帐户中的所有域。
参数: 无
退货:
account_id:DNS简单帐户IDcount:域名数量domains:具有name、expires_at、auto_renew等的域对象数组。
例子:
{
"account_id": "12345",
"count": 5,
"domains": [
{
"id": 123456,
"name": "example.com",
"expires_at": "2026-12-31",
"auto_renew": true,
"registrant_id": 789
}
]
}get_domain_nameservers
在注册商处获取域的当前委派名称服务器设置。
参数:
domain_name(必填):域名(例如“example.com”)
退货:
domain:域名nameservers:当前委派的名称服务器delegation:原始DNS简单委派有效负载
例子:
{
"domain_name": "example.com"
}update_domain_nameservers
在注册商级别替换域的委派名称服务器。
参数:
domain_name(必填):域名(例如“example.com”)nameservers(必需):名称服务器主机名数组(至少2个)
退货:
success:布尔值表示成功domain:域名nameservers:更新了委派的名称服务器delegation:原始DNS简单委派有效负载
例子:
{
"domain_name": "example.com",
"nameservers": [
"kipp.ns.cloudflare.com",
"mona.ns.cloudflare.com"
]
}get_domain_costs
获取域名的定价信息。退还注册和续订费用。
参数:
domain_names(可选):要获取定价的域名数组。如果为空,则返回帐户中所有域的定价。
退货:
account_id:DNS简单帐户IDdomains:域定价对象数组
例子:
{
"domain_names": ["example.com", "test.org"]
}答复:
{
"account_id": "12345",
"domains": [
{
"domain": "example.com",
"domain_info": {
"id": 123456,
"name": "example.com",
"expires_at": "2026-12-31"
},
"prices": [
{
"operation": "register",
"price": "15.00",
"currency": "USD"
},
{
"operation": "renew",
"price": "15.00",
"currency": "USD"
}
]
}
]
}get_renewal_costs
获取域的续订费用。返回年度续订总成本和每个域的细分。
参数:
domain_names(可选):用于获取续订成本的域名数组。如果为空,则返回帐户中所有域的成本。
退货:
account_id:DNS简单帐户IDtotal_domains:域名数量total_annual_renewal_cost:所有续费费用之和domains:域续订详细信息数组
例子:
{
"domain_names": ["example.com", "test.org"]
}答复:
{
"account_id": "12345",
"total_domains": 2,
"total_annual_renewal_cost": 30.00,
"domains": [
{
"domain": "example.com",
"expires_at": "2026-12-31",
"auto_renew": true,
"renewal_price": 15.00,
"currency": "USD"
},
{
"domain": "test.org",
"expires_at": "2026-06-15",
"auto_renew": false,
"renewal_price": 15.00,
"currency": "USD"
}
]
}list_dns_records
列出域的DNS记录。
参数:
domain_name(必填):域名(例如“example.com”)name(可选):按记录名称筛选type(可选):按记录类型筛选(A、AAAA、CNAME、MX、TXT、NS、SRV、ALIAS)
退货:
domain:域名count:记录数records:DNS记录对象数组
例子:
{
"domain_name": "example.com",
"type": "A"
}答复:
{
"domain": "example.com",
"count": 2,
"records": [
{
"id": 123456,
"name": "www",
"type": "A",
"content": "192.0.2.1",
"ttl": 3600,
"priority": null
},
{
"id": 123457,
"name": "@",
"type": "A",
"content": "192.0.2.1",
"ttl": 3600,
"priority": null
}
]
}configure_dns_record
创建或更新DNS记录。如果存在具有相同名称和类型的记录,它将被更新。
参数:
domain_name(必填):域名(例如“example.com”)name(必填):记录名称(例如,根域为“www”或“@”)type(必填):DNS记录类型(A、AAAA、CNAME、MX、TXT、NS、SRV、ALIAS、URL)。使用 统一资源定位符 用于DNSimple的重定向(顶点或子域→ 目标URL)。content(必填):记录内容(A/AAAA的IP地址、CNAME的主机名等)ttl(可选):TTL(秒)(默认值:3600)priority(可选):MX记录的优先级
退货:
success:布尔值表示成功action:“已创建”或“已更新”record:DNS记录对象
示例(创建记录):
{
"domain_name": "example.com",
"name": "www",
"type": "A",
"content": "192.0.2.1",
"ttl": 3600
}示例(创建MX记录):
{
"domain_name": "example.com",
"name": "@",
"type": "MX",
"content": "mail.example.com",
"priority": 10,
"ttl": 3600
}示例(创建CNAME记录):
{
"domain_name": "example.com",
"name": "blog",
"type": "CNAME",
"content": "example.github.io",
"ttl": 3600
}示例(顶点域的URL重定向):
{
"domain_name": "example.com",
"name": "",
"type": "URL",
"content": "https://github.com/username/repo",
"ttl": 3600
}使用空 name 顶点;DNSimple提供301重定向到 content。需要DNSimple名称服务器(如果该区域被委派到其他地方,例如Cloudflare,则不适用)。
delete_dns_record
按ID删除DNS记录。
参数:
domain_name(必填):域名(例如“example.com”)record_id(必填):要删除的DNS记录ID
退货:
success:布尔值表示成功message:成功消息
例子:
{
"domain_name": "example.com",
"record_id": "123456"
}disable_autorenew
禁用一个或多个域的自动续订。
参数:
domain_names(必需):用于禁用自动续订的域名数组
退货:
results:操作结果数组
例子:
{
"domain_names": ["example.com", "test.org"]
}答复:
{
"results": [
{
"domain": "example.com",
"status": "disabled",
"error": null
},
{
"domain": "test.org",
"status": "disabled",
"error": null
}
]
}transfer_domain
启动向DNSimple的域传输。需要当前注册商的授权码。
参数:
domain_name(必填):要转移的域名auth_code(必填):来自当前注册商的授权码(EPP码)registrant_id(可选):注册人ID(如果未提供,则使用帐户默认值)
退货:
success:布尔值表示成功transfer:传输具有ID和状态的对象
例子:
{
"domain_name": "example.com",
"auth_code": "ABC123XYZ789"
}答复:
{
"success": true,
"transfer": {
"id": 123456,
"domain_id": 789012,
"state": "new",
"auto_renew": false,
"whois_privacy": false
}
}注: 在启动转移之前,必须在当前注册商处解锁域名。
get_whois_privacy
获取域的whois隐私(域隐私)状态。
参数:
domain_name(必填):域名(例如“example.com”)
退货:
domain:域名enabled:布尔值,指示是否启用了whois隐私whois_privacy:Whois隐私对象及其详细信息expires_on:whois隐私的到期日期(如果启用)
例子:
{
"domain_name": "example.com"
}答复:
{
"domain": "example.com",
"enabled": true,
"whois_privacy": {
"id": 123456,
"domain_id": 789012,
"enabled": true,
"expires_on": "2026-12-31"
},
"expires_on": "2026-12-31"
}enable_whois_privacy
为域启用whois隐私(域隐私)。这将购买并启用whois隐私(如果尚未启用)。
参数:
domain_name(必填):域名(例如“example.com”)
退货:
success:布尔值表示成功domain:域名status:状态消息(“already_enabled”或“enabled”)message:人类可读的信息whois_privacy:Whois隐私对象及其详细信息
例子:
{
"domain_name": "example.com"
}响应(已启用):
{
"domain": "example.com",
"status": "already_enabled",
"message": "Whois privacy is already enabled for this domain",
"whois_privacy": {
"id": 123456,
"domain_id": 789012,
"enabled": true,
"expires_on": "2026-12-31"
}
}响应(新启用):
{
"success": true,
"domain": "example.com",
"status": "enabled",
"message": "Whois privacy has been enabled for this domain",
"whois_privacy": {
"id": 123456,
"domain_id": 789012,
"enabled": true,
"expires_on": "2026-12-31"
}
}注: 根据您的DNSimple计划和TLD,启用whois隐私可能会产生费用。
错误处理
当操作失败时,服务器以JSON格式返回结构化错误消息。常见错误包括:
- 身份验证错误:缺少API令牌或令牌无效
- 帐户错误:未找到帐户或帐户访问问题
- 域错误:找不到或无法访问域
- API错误:DNSimple API错误,包含状态代码和消息
错误响应示例:
{
"error": "Failed to get account ID: Invalid API response: missing 'data' key"
}安全说明
- API令牌从不记录或暴露在错误消息中
- 令牌可以存储在环境变量中,
~/.config/dnsimple-mcp/.env,或1Password - 所有API请求都使用HTTPS
- 配置目录
.env文件具有受限权限(仅限所有者读/写) - 环境变量是最安全的方法(不持久化到磁盘)
故障排除
- 身份验证失败
- 验证API令牌是否正确 - 检查令牌尚未过期 - 确保1Password集成配置正确 - 从以下位置获取新令牌:https://dnsimple.com/user
- 未找到帐户
- 验证DNSimple中是否存在帐户 - 检查帐户权限 - 确保API令牌具有帐户访问权限
- 未找到域名
- 验证DNSimple帐户中是否存在域 - 检查域拼写 - 确保域已通过DNSimple注册(用于注册商操作)
- DNS记录操作失败
- 验证域是否使用DNS简单名称服务器 - 检查记录名称和类型是否有效 - 确保TTL在有效范围内(60-604800秒)
备注
- 服务器自动从DNSimple API中查找帐户ID
- DNS记录更新将替换具有相同名称和类型的现有记录
- 域名转移需要在当前注册商处解锁域名
- 所有日期字段均以ISO格式字符串返回
- 服务器以stdio模式运行,用于MCP通信
许可证
麻省理工学院
支持
-
