mcpField
N
namecheap-domains

namecheap-domains

github.com/clasen云与 DevOps4069 次安装33 周前更新
代码仓库

关于 namecheap-domains

namecheap-domains 是通过 Namecheap API 管理账户域名的技能,适用于需要处理注册和域名设置的用户。它涵盖 DNS、名称服务器及域名转移,并说明 API 凭据与常见操作注意事项。

主要功能

  1. 01检查域名可用性并注册
  2. 02查看和更新域名联系人信息
  3. 03配置 DNS 主机记录及邮件转发
  4. 04管理名称服务器
  5. 05发起并跟踪域名转移

适用场景

  1. 01检查域名并完成注册
  2. 02更新 DNS 记录或名称服务器
  3. 03将域名转入 Namecheap
  4. 04查看账户域名及转移状态

安装

复制下面的命令,在终端中运行。

$npx skills add https://github.com/clasen/skills --skill namecheap-domains

安装后在 Claude Code 中输入/namecheap-domains确认已加载。

包含的文件

除 SKILL.md 外,安装时一起下载的参考资料和脚本。

references/
api-dns.md
api-domains.md
api-nameservers.md
api-transfers.md

详细介绍

Namecheap 域名

用于通过 Namecheap API 管理域名的技能。涵盖域名注册、DNS 配置、名称服务器管理和域名转移。

这些方法仅适用于在 Namecheap 注册且存在于用户账户中的域名。

先决条件

用户需要将以下凭据配置为环境变量:

变量描述
NAMECHEAP_API_USERAPI 用户名
NAMECHEAP_API_KEYNamecheap 账户中的 API 密钥
NAMECHEAP_USERNAMENamecheap 账户用户名(通常与 API 用户名相同)
NAMECHEAP_CLIENT_IP已加入白名单的 API 访问 IP 地址

如果缺少任何凭据,请让用户进行设置。必须在 Namecheap 账户控制面板中启用 API 访问,并将客户端 IP 加入白名单。

API 基础知识

基础 URL: https://api.namecheap.com/xml.response 沙盒 URL: https://api.sandbox.namecheap.com/xml.response

每个请求都需要以下全局参数:

参数描述
ApiUser访问 API 所需的用户名
ApiKeyAPI 密钥
UserName账户用户名(管理自己的账户时使用 ApiUser)
ClientIp已加入白名单的 IP 地址
Command要运行的 API 命令(例如,namecheap.domains.getList)
发起请求

读取操作使用 HTTP GET,写入操作使用 HTTP POST(尤其是参数较多的 domains.create)。

# GET example — list domains
curl -s "https://api.namecheap.com/xml.response?\
ApiUser=${NAMECHEAP_API_USER}&\
ApiKey=${NAMECHEAP_API_KEY}&\
UserName=${NAMECHEAP_USERNAME}&\
ClientIp=${NAMECHEAP_CLIENT_IP}&\
Command=namecheap.domains.getList"
# POST example — create domain
curl -s -X POST "https://api.namecheap.com/xml.response" \
  -d "ApiUser=${NAMECHEAP_API_USER}" \
  -d "ApiKey=${NAMECHEAP_API_KEY}" \
  -d "UserName=${NAMECHEAP_USERNAME}" \
  -d "ClientIp=${NAMECHEAP_CLIENT_IP}" \
  -d "Command=namecheap.domains.create" \
  -d "DomainName=example.com" \
  -d "Years=1" \
  # ... additional parameters
解析 XML 响应

所有响应均为 XML。请检查 ApiResponse 上的 Status 属性:

<ApiResponse Status="OK">    
<ApiResponse Status="ERROR"> 

使用 xmllint 提取值:

# Check response status
echo "$response" | xmllint --xpath "string(//ApiResponse/@Status)" -

# Extract error messages
echo "$response" | xmllint --xpath "//Errors/Error/text()" - 2>/dev/null

# Extract specific attributes
echo "$response" | xmllint --xpath "string(//DomainCreateResult/@Registered)" -

如果没有 xmllint,请使用 grep 和 sed 进行基本提取,或使用 Python 的 xml.etree.ElementTree。

API 快速参考

domains.*
命令描述
namecheap.domains.getList列出账户中的域名
namecheap.domains.getContacts获取域名的联系信息
namecheap.domains.create注册新域名
namecheap.domains.getTldList列出可用的 TLD
namecheap.domains.setContacts更新域名的联系信息
namecheap.domains.check检查域名是否可用
namecheap.domains.reactivate重新激活已过期的域名
namecheap.domains.renew续订即将到期的域名
namecheap.domains.getRegistrarLock获取锁定状态
namecheap.domains.setRegistrarLock设置锁定状态
namecheap.domains.getInfo获取域名详情

完整参数详情请参阅 references/api-domains.md。

domains.dns.*
命令描述
namecheap.domains.dns.setDefault使用 Namecheap 默认 DNS 服务器
namecheap.domains.dns.setCustom使用自定义 DNS 服务器
namecheap.domains.dns.getList获取域名的 DNS 服务器
namecheap.domains.dns.getHosts获取 DNS 主机记录
namecheap.domains.dns.getEmailForwarding获取电子邮件转发设置
namecheap.domains.dns.setEmailForwarding设置电子邮件转发
namecheap.domains.dns.setHosts设置 DNS 主机记录

完整参数详情请参阅 references/api-dns.md。

domains.ns.*
命令描述
namecheap.domains.ns.create创建名称服务器
namecheap.domains.ns.delete删除名称服务器
namecheap.domains.ns.getInfo获取名称服务器信息
namecheap.domains.ns.update更新名称服务器 IP

完整参数详情请参阅 references/api-nameservers.md。

domains.transfer.*
命令描述
namecheap.domains.transfer.create将域名转入 Namecheap
namecheap.domains.transfer.getStatus检查转移状态
namecheap.domains.transfer.updateStatus更新/重新提交转移
namecheap.domains.transfer.getList列出域名转移记录

完整参数详情请参阅 references/api-transfers.md。

常见工作流

1. 检查可用性并注册域名
# Step 1: Check availability
curl -s "https://api.namecheap.com/xml.response?\
ApiUser=${NAMECHEAP_API_USER}&ApiKey=${NAMECHEAP_API_KEY}&\
UserName=${NAMECHEAP_USERNAME}&ClientIp=${NAMECHEAP_CLIENT_IP}&\
Command=namecheap.domains.check&DomainList=example.com,example.net"

# Look for: <DomainCheckResult Domain="example.com" Available="true" />

# Step 2: Register (use POST)
curl -s -X POST "https://api.namecheap.com/xml.response" \
  -d "ApiUser=${NAMECHEAP_API_USER}" \
  -d "ApiKey=${NAMECHEAP_API_KEY}" \
  -d "UserName=${NAMECHEAP_USERNAME}" \
  -d "ClientIp=${NAMECHEAP_CLIENT_IP}" \
  -d "Command=namecheap.domains.create" \
  -d "DomainName=example.com" \
  -d "Years=1" \
  -d "RegistrantFirstName=John" \
  -d "RegistrantLastName=Smith" \
  -d "RegistrantAddress1=123 Main St" \
  -d "RegistrantCity=San Francisco" \
  -d "RegistrantStateProvince=CA" \
  -d "RegistrantPostalCode=94102" \
  -d "RegistrantCountry=US" \
  -d "RegistrantPhone=+1.4155551234" \
  -d "[email protected]" \
  -d "TechFirstName=John" \
  -d "TechLastName=Smith" \
  -d "TechAddress1=123 Main St" \
  -d "TechCity=San Francisco" \
  -d "TechStateProvince=CA" \
  -d "TechPostalCode=94102" \
  -d "TechCountry=US" \
  -d "TechPhone=+1.4155551234" \
  -d "[email protected]" \
  -d "AdminFirstName=John" \
  -d "AdminLastName=Smith" \
  -d "AdminAddress1=123 Main St" \
  -d "AdminCity=San Francisco" \
  -d "AdminStateProvince=CA" \
  -d "AdminPostalCode=94102" \
  -d "AdminCountry=US" \
  -d "AdminPhone=+1.4155551234" \
  -d "[email protected]" \
  -d "AuxBillingFirstName=John" \
  -d "AuxBillingLastName=Smith" \
  -d "AuxBillingAddress1=123 Main St" \
  -d "AuxBillingCity=San Francisco" \
  -d "AuxBillingStateProvince=CA" \
  -d "AuxBillingPostalCode=94102" \
  -d "AuxBillingCountry=US" \
  -d "AuxBillingPhone=+1.4155551234" \
  -d "[email protected]" \
  -d "AddFreeWhoisguard=yes" \
  -d "WGEnabled=yes"

# Step 3: Verify
# Check response for: <DomainCreateResult Registered="true" />

用户提供一次联系信息后,除非用户指定不同联系人,否则将其用于全部四种联系人类型(注册人、技术联系人、管理员、辅助账单联系人)。

2. 配置 DNS 记录
# Step 1: Verify domain uses Namecheap DNS
curl -s "https://api.namecheap.com/xml.response?\
ApiUser=${NAMECHEAP_API_USER}&ApiKey=${NAMECHEAP_API_KEY}&\
UserName=${NAMECHEAP_USERNAME}&ClientIp=${NAMECHEAP_CLIENT_IP}&\
Command=namecheap.domains.dns.getList&SLD=example&TLD=com"

# If using custom nameservers, switch to default first (required for host records)
# Command=namecheap.domains.dns.setDefault&SLD=example&TLD=com

# Step 2: Get current records
curl -s "https://api.namecheap.com/xml.response?\
ApiUser=${NAMECHEAP_API_USER}&ApiKey=${NAMECHEAP_API_KEY}&\
UserName=${NAMECHEAP_USERNAME}&ClientIp=${NAMECHEAP_CLIENT_IP}&\
Command=namecheap.domains.dns.getHosts&SLD=example&TLD=com"

# Step 3: Set all records (setHosts replaces ALL records — include existing ones)
curl -s -X POST "https://api.namecheap.com/xml.response" \
  -d "ApiUser=${NAMECHEAP_API_USER}" \
  -d "ApiKey=${NAMECHEAP_API_KEY}" \
  -d "UserName=${NAMECHEAP_USERNAME}" \
  -d "ClientIp=${NAMECHEAP_CLIENT_IP}" \
  -d "Command=namecheap.domains.dns.setHosts" \
  -d "SLD=example" \
  -d "TLD=com" \
  -d "HostName1=@" \
  -d "RecordType1=A" \
  -d "Address1=1.2.3.4" \
  -d "TTL1=1800" \
  -d "HostName2=www" \
  -d "RecordType2=CNAME" \
  -d "Address2=example.com" \
  -d "TTL2=1800"

重要: setHosts 会替换所有现有记录。务必先用 getHosts 获取当前记录,然后在调用 setHosts 时将它们与新记录一并传入。省略现有记录会导致它们被删除。

3. 将域名转入 Namecheap
# Step 1: Initiate transfer
curl -s "https://api.namecheap.com/xml.response?\
ApiUser=${NAMECHEAP_API_USER}&ApiKey=${NAMECHEAP_API_KEY}&\
UserName=${NAMECHEAP_USERNAME}&ClientIp=${NAMECHEAP_CLIENT_IP}&\
Command=namecheap.domains.transfer.create&\
DomainName=example.com&Years=1&EPPCode=AUTH_CODE_HERE"

# Step 2: Monitor transfer status
curl -s "https://api.namecheap.com/xml.response?\
ApiUser=${NAMECHEAP_API_USER}&ApiKey=${NAMECHEAP_API_KEY}&\
UserName=${NAMECHEAP_USERNAME}&ClientIp=${NAMECHEAP_CLIENT_IP}&\
Command=namecheap.domains.transfer.getStatus&TransferID=TRANSFER_ID"

可转移的 TLD:.biz、.ca、.cc、.co、.co.uk、.com、.com.es、.com.pe、.es、.in、.info、.me、.me.uk、.mobi、.net、.net.pe、.nom.es、.org、.org.es、.org.pe、.org.uk、.pe、.tv、.us

重要说明

  • SLD/TLD 拆分: 许多端点要求将 SLD 和 TLD 作为单独参数。对于 example.com,SLD=example,TLD=com。对于 example.co.uk,SLD=example,TLD=co.uk。
  • 电话格式: 始终使用 +NNN.NNNNNNNNNN(例如 +1.4155551234)。
  • IDN 域名: 以 Punycode 格式发送域名(例如 xn--sdkhjsdhfkdh.com),并包含 IdnCode 参数。
  • 高级域名: 设置 IsPremiumDomain=True,并提供 PremiumPrice,还可选择提供 EapFee。
  • 速率限制: Namecheap 可能会限制请求频率。如果收到错误,请等待一段时间后重试。
  • 沙盒: 使用沙盒 URL 进行测试。沙盒凭据与生产环境凭据不同。

错误处理

XML 响应中的常见错误模式:

<ApiResponse Status="ERROR">
  <Errors>
    <Error Number="2016166">Domain is not associated with your account</Error>
  </Errors>
</ApiResponse>

处理结果前,务必检查 Status="OK"。如果 Status="ERROR":

  1. 提取错误编号和消息
  2. 查看相关参考文件中列出的错误代码
  3. 常见问题:
    • 身份验证错误: 验证凭据和已列入白名单的 IP
    • 未找到域名(2019166): 检查域名和账户关联情况
    • 电话号码无效(2015182): 使用格式 +NNN.NNNNNNNNNN
    • 域名不可用(3019166/4019166): 域名已被注册
    • 不支持的 TLD(2030280): 检查受支持的 TLD

故障排除

错误:连接被拒绝或超时 原因:客户端 IP 未列入白名单,或未启用 API 访问权限。 解决方案:检查 Namecheap 控制面板 → 个人资料 → 工具 → API 访问权限。确认该 IP 与 NAMECHEAP_CLIENT_IP 一致。

错误:响应为空或格式错误 原因:缺少必需参数。 解决方案:确认所有全局参数均已提供。检查 Command 值的拼写是否正确。

错误:DNS 更改未生效 原因:域名可能使用的是自定义名称服务器,而非 Namecheap 默认名称服务器。 解决方案:先调用 domains.dns.setDefault,然后设置主机记录。URL 转发、邮件转发和动态 DNS 仅在使用 Namecheap 默认名称服务器时有效。

评论

支持 Markdown