Spaceship MCP — 工具参考

Spaceship MCP 可将你的 AI 助手(例如 Claude)连接到你的 Spaceship 账户。通过它,助手可以代表你检查和注册域名、管理域名联系人,以及读取或编辑 DNS 记录——你只需用自然语言提出请求,助手就会调用正确的工具。

开始使用

你需要一个 Spaceship 账户。Spaceship MCP 可在 https://mcp.spaceship.com/mcp 使用。

如何连接取决于您的 AI 助手:

  • Claude(网页和桌面版) — 打开“设置”,选择“连接器”,在连接器目录中找到 Spaceship 并添加它。Anthropic 的 Claude 是我们目前已验证可与 Spaceship MCP 配合使用的客户端。

    注意:虽然通过 Spaceship MCP 进行域名注册在整体上已得到完全支持,但此功能目前尚无法通过 Claude 连接器本身使用。搜索、域名查询、联系人管理和 DNS 记录管理现已可用,并已验证当前可与 Claude 配合使用。

  • 其他 MCP 客户端 — 添加远程 MCP 服务器,并将其指向 https://mcp.spaceship.com/mcp。其他客户端可能也能使用,但我们尚未验证。

连接时,系统会要求你登录 Spaceship 并授予助手访问你账户的权限。助手可使用哪些工具取决于你批准的访问权限 — 如果某个工具因未授予访问权限而被拒绝,请重新连接并批准其所需的访问权限。

工具概览

  • 工具:contacts_save

    作用:保存联系人详细信息并获取联系人 ID

  • 工具: contacts_get

    作用: 通过 ID 读取已保存的联系人

  • 工具: contacts_list

    作用: 列出所有已保存的联系人,以便查找并重复使用其中一个

  • 工具: domains_list

    作用: 列出你的域名,或查找一个域名

  • 工具: domains_check_availability

    作用: 检查域名是否可注册

  • 工具: domain_register

    作用: 注册(购买)域名——会花费资金

  • 工具: domain_set_contacts

    作用: 为你拥有的域名分配联系人

  • 工具: domain_set_nameservers

    作用: 将域名切换为基础或自定义名称服务器

  • 工具:dns_records_get

    作用:读取域名的 DNS 记录

  • 工具:dns_records_save

    作用:添加 DNS 记录或更新其 TTL

  • 工具:dns_records_delete

    作用:删除 DNS 记录

  • 工具:async_operation_get

    作用:检查长时间运行操作的状态

联系人:通过 id 引用

凡是需要联系人的地方(domain_registerdomain_set_contacts),每个角色都接收一个 contactId 字符串——绝不能内联联系人详细信息。请先使用 contacts_save 保存联系人(它会返回其 contactId),然后在接受联系人的地方传入该 id。不存在内联自动保存;角色不能接收完整的联系人对象。您也可以重复使用来自 contacts_list 结果中的 contactId,或您从 domains_list 结果中读取到的 contactId。

一个 contactId 是由 27–32 个字母数字字符 组成的字符串。只需在接受联系人的地方将其传回即可。

常见工作流程

有几个工具被设计为配合使用:一个工具的输出会成为下一个工具的输入。

注册(购买)域名

  1. contacts_save — 保存注册人、管理员、技术和账单联系人(如果你还没有他们的 ID),并保留为每个联系人返回的 contactId。在注册之前,联系人必须已存在。

  2. domains_check_availability — 检查你想要的名称。仅当 resultavailable 时才继续。每个可用名称都包含以美元计的注册 price(标准和高级域名均适用),或者在无法确定时显示 priceUnavailableReason,以及 minRegisterPeriodInYearsmaxRegisterPeriodInYears — 即该 TLD 允许的期限。请注意,price 涵盖 price.pricedYears 年,这是该 TLD 允许的最短期限,并不总是 1 年。

  3. domain_register(预览)— 在 confirmationToken 未设置的情况下调用,以获取 status: confirmation_required、一个新的 confirmationToken,以及将被收取的 price。不会产生任何费用。该工具的响应文本是完整的确认信息 — 包括期限、价格明细、自动续费、WHOIS 隐私、付款来源,以及注册人/管理员/技术/账单联系人 — 请原样展示给用户。从第 2 步中选择介于 minRegisterPeriodInYearsmaxRegisterPeriodInYears 之间的 years — 超出范围的值会被直接拒绝。将每个联系人角色作为你在第 1 步中保存的 contactId 传递。

  4. domain_register(接受/拒绝)— 用户同意后,使用完全相同的参数再次调用,并额外传入该 confirmationTokenconfirmationResponse: "accept"。这将从账户的默认付款方式扣费,且不可撤销。它会立即返回 status: pending 和一个 operationId — 注册将在后台完成。若要取消,请使用相同的 confirmationTokenconfirmationResponse: "decline" 再次调用 — 不会产生任何费用。该令牌会在短时间后过期,并且与其签发时的精确参数和价格绑定;如果它缺失、已过期或不再匹配,调用将返回一个全新的确认,而不是错误 — 绝不会扣费。如果任一调用中无法确定价格,工具将返回 status: price_unavailable,且不会收取任何费用。

  5. async_operation_get — 传入第 4 步中的 operationId 以检查进度。重复调用,直到 status 变为 successfailed

contacts_save ──▶ domains_check_availability ──▶ domain_register ──▶ domain_register ──▶ async_operation_get
(contactId ID) (可用?+ 价格 + (token 未设置: (token + (pending →
min/maxRegisterPeriod) 确认、 accept: operationId, success/failed)
confirmationToken, pending)
不扣费)

更新你拥有的域名上的联系人

  1. domain_set_contacts — 通过 contactId 将联系人分配给域名(如有需要,先用 contacts_save 保存)。此操作会立即完成,并返回一个 verificationStatusverification 表示注册人必须先确认其电子邮件地址,更改才会完全生效(系统会向其发送电子邮件);success 表示已确认;null 表示该域名无需确认。

更改域名的名称服务器

  1. domains_list — 查找该域名并查看其当前的 nameservers{ provider, hosts })。

  2. domain_set_nameservers — 使用 provider: "basic" 将其切换为 Spaceship 的默认名称服务器(不带 hosts),或使用 provider: "custom" 和 2–12 个 hosts 的列表将其指向你自己的名称服务器。它会返回结果 { provider, hosts },随后再次调用 domains_list 将反映该更改。重新应用域名已处于的状态会返回验证错误,而不是无操作 — 这应视为预期结果,而不是需要重试的失败。

管理 DNS 记录

  1. domains_list — 找到你要管理的域名(如果你知道名称,也可以直接传入)。

  2. dns_records_get — 读取该域名当前的记录。

  3. dns_records_savedns_records_delete — 添加、更新或删除记录。由 dns_records_get 返回的记录,其结构与保存和删除工具接受的结构相同(删除时仅省略 ttl),因此助手可以读取、调整并写回。除 TXT 记录外,匹配均不区分大小写;TXT 记录区分大小写。

查看你的资产组合

  • domains_list — 通过排序分页查看你的所有域名,或按名称获取单个域名。每个域名都包含其到期日期、自动续费设置、状态、名称服务器、隐私保护以及已分配的联系人 ID。

  • contacts_list — 分页查看保存在你账户中的所有联系人,以查找并重用现有联系人(通过其联系人 ID),而不是创建重复项。

  • contacts_get — 查询你在域名上或 contacts_list 结果中看到的任何联系人 ID 的详细信息。

工具参考

每个工具都会以结构化 JSON 形式返回其结果。长时间运行的操作(目前仅 domain_register)会返回一个操作引用,可使用 async_operation_get 进行轮询;所有其他工具都会立即完成。

联系人

联系人是附加到域名注册上的个人或组织(注册人、管理员、技术、账单)。联系人在所有地方都通过其 联系人 ID 引用 — 这是一个不透明字符串。

contacts_save — 保存联系人

保存联系人详细信息并返回生成的联系人 ID。某些字段(例如 stateProvincepostalCode)的验证取决于所选国家/地区。

  • 参数:firstName

    必填:

    类型和约束:字符串,1–64 个字符。可包含连字符和撇号。

  • 参数:lastName

    必填:

    类型和约束:字符串,1–64 个字符。可包含连字符和撇号。

  • 参数:email

    必填:

    类型和约束:有效的电子邮件地址,最多 254 个字符。

  • 参数:address1

    必填:

    类型和约束:地址第 1 行。字符串,1–128 个字符。

  • 参数:city

    必填:

    类型和约束:字符串,1–64 个字符。

  • 参数:country

    必填:

    类型和约束:两位国家/地区代码(ISO 3166-1 alpha-2),例如 US

  • 参数:phone

    必填:

    类型和约束:国际格式 +CountryCode.Number,例如 +1.2025551234。最多 32 个字符。

  • 参数:organization

    必填:

    类型和约束:组织/公司名称。1–128 个字符。

  • 参数:address2

    必填:

    类型和约束:地址第 2 行。1–128 个字符。

  • 参数:stateProvince

    必填:

    类型和约束:州/省名称,1–64 个字符。根据国家/地区不同,可能为必填项。

  • 参数:postalCode

    必填:

    类型和约束:1–16 个字符。根据国家/地区不同,可能为必填项。

  • 参数:phoneExt

    必填:

    类型和约束:电话分机号,1–16 个字符。

  • 参数:fax

    必填:

    类型和限制: 传真号码,格式同 +CountryCode.Number,最多 32 个字符。

  • 参数: faxExt

    必填:

    类型和限制: 传真分机,1–16 个字符。

  • 参数: taxNumber

    必填:

    类型和限制: 税号,1–32 个字符。

返回

{ "contactId": "..." }

contactId(27–32 个字母数字字符)是你传递给 domain_registerdomain_set_contactscontacts_get 的值。

contacts_get — 获取联系人

通过联系人 ID 读取已保存联系人的详细信息。联系人 ID 来自 contacts_savecontacts_list,或 domains_list 结果中的 contacts 字段。

  • 参数: contactId

    必填:

    类型和限制: 联系人 ID,27–32 个字母数字字符。

返回{ contact },包含:

  • 字段: firstNamelastNameemailaddress1citycountryphonepostalCode

    类型: 字符串

  • 字段: organizationaddress2stateProvincephoneExtfaxfaxExttaxNumber

    类型: 字符串或 null

contacts_list — 列出联系人

列出你账户下保存的所有联系人,这样你就可以找到并重复使用现有联系人(通过其联系人 ID),而不必创建重复项或在你的域名中逐个查找。该列表支持分页和排序,并与 domains_list 保持一致。

  • 参数: take

    必填:

    类型和限制: 每页项目数,1–100。默认值为 10

  • 参数: skip

    必填:

    类型和限制: 要跳过的项目数,0 或更多。默认值为 0

  • 参数: orderBy

    必填:

    类型和限制: 最多 8 个排序键: nameemailorganization;降序请加前缀 -(例如 -name)。

返回{ items, total },其中 total 是账户中唯一联系人的数量(按联系人 ID 去重,而不是页面大小),并且每个项目都包含足够的信息来区分联系人,而无需后续调用。如果账户中同一联系人 ID 存在重复条目,它们会折叠为一个,因此 total 统计的是不同联系人,而不是服务器端原始行数:

  • 字段: contactId

    类型: 字符串(27–32 个字母数字字符)。传递给 contacts_getdomain_registerdomain_set_contacts

  • 字段: name

    类型: 字符串 — 联系人的姓名。

  • 字段: email

    类型: 字符串或 null,当联系人没有记录电子邮件时。

  • 字段: organization

    类型: 字符串或 null,当联系人没有记录组织时。

{
"items": [
{ "contactId": "1anq5bsl9haBy21rOV9aeDWrARBsV", "name": "Ada Lovelace", "email": "ada@example.com", "organization": "Analytical Engines" }
],
"total": 1
}

域名

域名输入(domain/domainName)接受 Unicode(IDN)或 ASCII(A-label)——无论哪种方式,工具都会在使用前自动将名称规范化为 punycode。 domains_check_availabilitydomain_register 还要求 TLD 是 Spaceship 支持注册的:如果域名的 TLD 不受支持,则会被视为不可用,而不会被检查或收费。其他域名工具(domains_listdomain_set_contactsdomain_set_nameservers)以及 DNS 工具只会规范化名称,绝不会因 TLD 支持情况而拒绝。

domains_list — 列出域名

检索你的域名分页列表。改为传递 domain 可按名称获取单个域名(此时会忽略分页和排序,如果提供了这些参数,结果中会包含一个说明此情况的 note)。

  • 参数: domain

    必填:

    类型和限制: 用于获取单个域名的完全限定域名。接受 Unicode(IDN)或 ASCII(A-label)——会自动规范化为 punycode。

  • 参数: take

    必填:

    类型和限制: 每页项目数,1–100。默认值为 10

  • 参数: skip

    必填:

    类型和限制: 要跳过的项目数,0 或更多。默认值为 0

  • 参数: orderBy

    必填:

    类型和限制: 最多 8 个排序键: nameunicodeNameregistrationDateexpirationDate;降序请加前缀 -(例如 -expirationDate)。

返回{ items, total },其中每个项目描述一个域名:

  • 字段: name / unicodeName

    含义: ASCII 和 Unicode 形式的域名。

  • 字段: isPremium

    含义: 该域名是否为高级域名。

  • 字段: autoRenew

    含义: 是否启用了自动续费。

  • 字段: registrationDate / expirationDate

    含义: 注册和到期时间戳。

  • 字段: lifecycleStatus

    含义: creatingregisteredgrace1grace2redemption

  • 字段: verificationStatus

    含义: verificationsuccessfailed,或在不适用时为 null

  • 字段: eppStatuses

    含义: 注册局状态代码(例如转移锁)。

  • 字段: suspensions

    含义: 活动中的暂停项,每项都带有一个 reasonCode

  • 字段: privacyProtection

    含义: { level: "public" | "high", contactForm: boolean }

  • 字段: nameservers

    含义: { provider: "basic" | "custom", hosts: [...] }

  • 字段: contacts

    含义: 联系人 ID: registrant,以及 admin/tech/billing(可能为 null)和 attributes(扩展属性联系人 ID 列表,或 null)。可通过 contacts_get 读取。

对于多项列表和单域名获取,Spaceship MCP 都会填充上述每个字段——包括 contactseppStatusessuspensionsverificationStatusnameservers、真实的 autoRenew,以及当域名存在时单独的 unicodeName

domains_check_availability — 检查域名可用性

检查一个或多个域名是否可供注册。单个名称使用单域名端点,多个名称使用批量端点。对于 TLD 不支持注册的域名,根本不会发送到可用性检查——而是立即返回为 tldNotSupported

  • 参数: domains

    必填:

    类型和限制: 1–20 个完全限定域名。每个都接受 Unicode(IDN)或 ASCII(A-label)——会自动规范化为 punycode。

返回{ results },每个请求的名称对应一个条目:

  • 字段: domain

    含义: 已检查的名称。

  • 字段: result

    含义: availabletakeninvalidDomainNametldNotSupportedunexpectedError

  • 字段: premiumPricing

    含义: 对于高级域名: { operation, price, currency } 的列表,其中 operationregistertransferrenewrestore。普通域名则为空。

  • 字段: price

    含义: 对于 available 的名称(标准和高级):按 该 TLD 允许的最短期限 注册域名的 USD 价格 — { amount, currency: "USD", pricedYears?, pricePerYear?, icannFee?, isPremium }amount 是整个期限的应付总额;pricedYears 说明其覆盖的年数。不报告折扣前价格或“原价”。 icannFee已包含amount 中的 ICANN 费用(USD),单独返回以便解释价格明细;仅当该 TLD 带有费用时才会出现。

  • 字段: pricePerYear

    含义: price 内: amount 除以 pricedYears,因此始终可获得年度对比数值。当 pricedYears 为 1 时,它就是真实的一年价格;大于 1 时,它是该期限的年均价格,而不是你可以购买的期限。

  • 字段: minRegisterPeriodInYears / maxRegisterPeriodInYears

    含义: 对于 available 的名称:该 TLD 实际允许的最短和最长注册期限,以两个纯数字表示。使用它们为 years 选择一个有效值,以用于 domain_register。如果无法确定允许期限,则两者都会省略。

  • 字段: priceUnavailableReason

    含义: 当可用名称的价格无法确定时,会显示此字段而不是 price。检查本身仍然成功。

只有可用名称才会定价;taken/无效结果既不包含 price,也不包含 priceUnavailableReason

大多数 TLD 允许一年,但有些不允许。.ai 例如,最短期限为两年。对于这些 TLD,price.amount 是最短期限的总价——而不是你可以按一年购买的价格——并且 price.pricedYears 会说明这一点:

{
"domain": "example.ai",
"result": "available",
"premiumPricing": [],
"price": { "amount": 159.96, "currency": "USD", "pricedYears": 2, "pricePerYear": 79.98, "isPremium": false },
"minRegisterPeriodInYears": 2,
"maxRegisterPeriodInYears": 10
}

pricePerYear 在这里存在—— 159.96 除以其覆盖的两年得到 79.98。这是总价除以期限,而不是你可以为单年支付的价格(无法购买一年期的 .ai 注册)。始终将 amountpricedYears 一起显示(“2 年 $159.96”),绝不要只显示 amount。对于普通 TLD,pricedYears1,且 pricePerYear 等于 amount

domain_register — 注册域名

注册(购买)域名。 这会向你账户的默认付款方式收费,且不可撤销。 推荐顺序: domains_check_availabilitydomain_register。如果域名的 TLD 不支持注册,则会立即被拒绝——在任何可用性检查、定价或收费之前。

years 必须在该 TLD 自身允许的期限范围内。 下方的 110 是所有 TLD 的外部上限;每个 TLD 的范围都更窄。 .ai 允许 2–10,.co.io 允许 1–5,.sg 允许 1–2,.fr 则只能为 1。超出该范围的 years以指明允许范围的验证错误被拒绝——在任何可用性检查、定价或收费之前——并且该值 不会 被悄悄替你调整:

.ai domains cannot be registered for 1 year: this TLD allows 210 years. Call domains_check_availability for this domain to see its allowed registration period.

先从 domains_check_availability 读取 minRegisterPeriodInYears/maxRegisterPeriodInYears,然后选择一个在该范围内的 years。在确认调用(confirmationResponse: "accept")时会再次运行相同检查,因此无法通过确认来绕过它。

收费前的两步确认。 首次调用时不要设置 confirmationToken:工具会重新获取域名价格,构建完整确认信息——期限、价格明细(包括任何 ICANN 费用以及域名是否为高级域名)、自动续费、WHOIS 隐私、付款来源,以及 registrant/admin/tech/billing 联系人(与 registrant 相同的联系人会显示为 “same as registrant”)——并返回 status: "confirmation_required",同时附带该 price 和一个新的 confirmationToken此次调用不会注册任何内容,也不会收费。 完整确认信息就是工具的响应文本;请原样展示给用户。一旦他们同意,请使用完全相同的参数再次调用,并额外传入此 confirmationTokenconfirmationResponse: "accept" 以提交购买,或传入 confirmationResponse: "decline" 以取消——拒绝时不会收费。该令牌绑定到这些完全相同的参数和所报价,并会在短时间后过期:如果在确认调用中令牌缺失、过期、被篡改或不再匹配,系统只会返回一个带有新令牌的全新确认——绝不会报错,也绝不会收费。如果任一调用中无法确定价格,工具会返回 status: "price_unavailable" 而不是令牌,并且绝不会收费;请稍后重试。已确认的调用会立即返回 status: "pending" 和一个 operationId——注册会在后台完成;请使用 async_operation_get 检查其状态。

  • 参数: domain

    必填:

    类型和限制: 要注册的完全限定域名,例如 example.com。接受 Unicode(IDN)或 ASCII(A-label)——会自动规范化为 punycode。

  • 参数: years

    必填:

    类型和限制: 注册年限。 110 是外部范围;可接受范围取决于该 TLD 本身——请参见 domains_check_availability 中的 minRegisterPeriodInYears/maxRegisterPeriodInYears。超出范围的值会被拒绝,不会被调整。

  • 参数: autoRenew

    必填:

    类型和限制: 布尔值。当为 true 时,域名会在到期时使用账户的默认付款方式自动续费。

  • 参数: privacy.level

    必填:

    类型和限制: high 会在公开 WHOIS 中隐藏注册人的联系信息;public 则会公开这些信息。

  • 参数: privacy.userConsent

    必填:

    类型和限制: 布尔值。必须确认你同意所选的隐私设置。

  • 参数: contacts.registrant

    必填:

    类型和限制: contactId 字符串(27–32 个字母数字字符),来自 contacts_save

  • 参数: contacts.admin

    必填:

    类型和限制: contactId 字符串(27–32 个字母数字字符),来自 contacts_save

  • 参数:contacts.tech

    必填:

    类型和约束:contactId 字符串(27–32 个字母数字字符),来自 contacts_save

  • 参数:contacts.billing

    必填:

    类型和约束:contactId 字符串(27–32 个字母数字字符),来自 contacts_save

  • 参数:contacts.attributes

    必填:

    类型和约束:扩展属性联系人 ID 数组(最多 5 个);仅某些 TLD 需要,否则省略或使用 null

  • 参数:confirmationToken

    必填:

    类型和约束:字符串,最多 4096 个字符。服务器签发的令牌,由之前一次针对这些完全相同参数的 domain_register 调用返回。首次为新的注册尝试调用时请省略。它会在短时间后过期,并且与签发时的精确参数和价格绑定——请将其与 confirmationResponse 一起原样重新发送,以对其执行操作。

  • 参数:confirmationResponse

    必填:有条件

    类型和约束:"accept""decline"。仅与有效的 confirmationToken 一起使用时才有意义。"accept" 会提交该确认中显示的(将被计费的)注册;"decline" 会取消该注册且不收费。首次调用时请省略。

返回 — 首次调用后(未收费):

{
"domain": "example.com",
"years": 1,
"status": "confirmation_required",
"price": {
"amount": 9.08,
"currency": "USD",
"pricedYears": 1,
"pricePerYear": 9.08,
"icannFee": 0.2,
"isPremium": false
},
"confirmationToken": "v1.eyJ2IjoxLCJwIjoi...aWQiOjF9.9F3q7z_5c8Vb...",
"note": "Nothing has been charged yet. Show the confirmation to the user and, once they agree, call domain_register again with this confirmationToken and confirmationResponse=\"accept\" to complete the purchase, or confirmationResponse=\"decline\" to cancel."
}

除了此 JSON 之外,该工具响应中的 文本 还是要向用户显示的完整确认内容——它会重述上面的域名、期限和价格,并附加 Auto-renew: on/offWHOIS privacy: on/offPayment source: Spaceship account funds 以及每个 registrant/admin/tech/billing 联系人(姓名、电子邮件、国家——若联系人与 registrant 相同,则显示为 "same as registrant")的各行信息,最后附上下次调用的说明。对于多年期限,price.amount 是整个期限的总价,而 price.pricePerYear 是总价除以期限——例如,years: 5.com 会返回 { "amount": 48.52, "pricedYears": 5, "pricePerYear": 9.70 },而 example.ai 搭配 years: 2 会返回 { "amount": 159.96, "pricedYears": 2, "pricePerYear": 79.98 }

返回 — 在 confirmationResponse: "accept" 之后(注册已提交):

{
"domain": "example.com",
"years": 1,
"status": "pending",
"operationId": "...",
"price": {
"amount": 9.08,
"currency": "USD",
"pricedYears": 1,
"pricePerYear": 9.08,
"icannFee": 0.2,
"isPremium": false
},
"note": "Registration of example.com submitted. Ask again, or call async_operation_get with this operationId, to check status."
}

返回 — 在 confirmationResponse: "decline" 之后(未收费):

{
"domain": "example.com",
"years": 1,
"status": "cancelled",
"price": { "amount": 9.08, "currency": "USD", "pricedYears": 1, "pricePerYear": 9.08, "icannFee": 0.2, "isPremium": false },
"note": "Registration of example.com was not submitted because the purchase was not confirmed."
}

返回 — 如果无法确定价格,在任一调用中:

{
"domain": "example.com",
"years": 1,
"status": "price_unavailable",
"priceUnavailableReason": "Price is currently unavailable for this domain.",
"note": "Registration of example.com could not be priced right now, so nothing was confirmed or charged. Try again shortly."
}

status 可以是:

  • 状态:confirmation_required

    含义:预览——未收费。向用户显示响应文本,然后使用此 confirmationTokenconfirmationResponse 再次调用。当提交的 confirmationToken 缺失、过期、被篡改,或不再与当前参数/价格匹配时,也会返回此状态,并附带一个 令牌——这绝不是错误。

  • 状态:cancelled

    含义:购买已被拒绝(confirmationResponse: "decline"),因此未提交任何内容。

  • 状态:pending

    含义:已提交;注册局正在后台完成处理。使用 operationId 轮询 async_operation_get

  • 状态:price_unavailable

    含义:无法确定价格,因此未签发令牌,也未计费。请稍后重试。

operationId 是一个扁平字符串——将其传给 async_operation_get,它会报告注册最终是成功还是失败。在 confirmation_required 时显示的 price,正是执行 confirmationResponse: "accept" 时将收取的金额——price.amount 是整个期限的总价,而 price.pricedYears 表示期限,因此务必同时显示这两者。当 TLD 带有 ICANN 费用时,price.amount 已包含该费用,而 price.icannFee 则说明费用金额,以便进行解释。

domain_set_contacts — 设置域名联系人

更改分配给您所拥有域名的联系人。立即完成(无需轮询操作)。

  • 参数:domainName

    必填:

    类型和约束:完全限定域名。接受 Unicode(IDN)或 ASCII(A-label)——会自动规范化为 punycode。

  • 参数:registrant

    必填:

    类型和约束:contactId 字符串(27–32 个字母数字字符),来自 contacts_save

  • 参数:admin

    必填:

    类型和约束:contactId 字符串(27–32 个字母数字字符)或 null

  • 参数:tech

    必填:

    类型和约束:contactId 字符串(27–32 个字母数字字符)或 null

  • 参数:billing

    必填:

    类型和约束:contactId 字符串(27–32 个字母数字字符)或 null

  • 参数:attributes

    必填:

    类型和约束:扩展属性联系人 ID 数组(最多 5 个);仅某些 TLD 需要,否则省略或使用 null

返回

{ "verificationStatus": "verification" }

返回的 verificationStatus 反映 ICANN RAA 电子邮件验证状态:verification — 注册人必须确认其电子邮件地址(将发送确认邮件);success — 已确认;null — 此域名不适用 RAA 验证。

domain_set_nameservers — 设置域名名称服务器

更改域名在注册商层级的名称服务器。立即完成(无需轮询操作)。更改之后会反映在 domains_list 中。

  • 参数:domainName

    必填:

    类型和约束:完全限定域名。接受 Unicode(IDN)或 ASCII(A-label)——会自动规范化为 punycode。

  • 参数:provider

    必填:

    类型和约束:basic(Spaceship 的默认名称服务器)或 custom(您自己的主机)。

  • 参数:hosts

    必填:有条件

    类型和约束:providercustom 时必填:2–12 个名称服务器主机名(每个都必须是有效的 FQDN,4–255 个字符)。当 providerbasic 时必须省略。

返回

{ "provider": "custom", "hosts": ["ns1.example.com", "ns2.example.com"] }

重新应用域名当前已处于的状态(例如,在已经是 basic 时再次设置为 basic)会返回验证错误,而不是无操作成功——请将其视为预期结果,而不是需要重试的失败。

DNS 记录

这些工具接受的 domainName 支持 Unicode(IDN)或 ASCII(A-label),并会自动规范化为 punycode;此处不强制执行 TLD 支持。

dns_records_get — 获取 DNS 记录

检索域名的 DNS 资源记录分页列表。

  • 参数:domainName

    必填:

    类型和约束:要获取其记录的域名。

  • 参数:take

    必填:

    类型和约束:每页项目数,1–500。默认值为 100

  • 参数:skip

    必填:

    类型和约束:要跳过的项目数,0 或更多。默认值为 0

  • 参数:orderBy

    必填:

    类型和约束:最多 8 个排序键:type-typename-name

返回{ items, total }。每个项目都是 Record shapes 中描述的记录,外加一个可选的 group 字段,用于指示记录来源(custom — 由您创建,product — 由 Spaceship 产品管理,personalNs — 个人名称服务器)。

dns_records_save — 保存 DNS 记录

添加自定义 DNS 记录或更新现有记录的 TTL。记录以不区分大小写的方式匹配,但 TXT 记录除外(区分大小写)。

  • 参数:domainName

    必填:

    类型和约束:要更新其记录的域名。

  • 参数:records

    必填:

    类型和约束:1–500 条记录——参见 Record shapes。每条记录都可以包含一个可选的 ttl

  • 参数:force

    必填:

    类型和约束:布尔值。跳过冲突解决检查并强制更新区域。

返回{ "saved": <number> },即已提交记录的数量。成功响应表示所有记录都已被接受;如果任一记录失败,则整个调用会返回错误。

dns_records_delete — 删除 DNS 记录

删除自定义 DNS 记录。删除后无法撤销。记录以不区分大小写的方式匹配,但 TXT 记录除外(区分大小写)。

  • 参数:domainName

    必填:

    类型和约束:要删除其记录的域名。

  • 参数:records

    必填:

    类型和约束:1–500 条用于标识现有记录的记录——与保存时的形状相同,但不包含 ttl

返回{ "deleted": <number> },即已提交记录的数量。如果任一记录无法匹配,则整个调用失败,且不会删除任何记录。

记录形状

每条记录都具有:

  • type — 以下 13 种受支持类型之一。

  • name不含域名 的记录名称:对域名本身(根域)使用 @,对通配符使用 *

  • ttl(仅保存时,可选)— 以秒为单位的缓存时间,60–3600。

特定类型字段:

  • 类型:A

    字段:address — IPv4 地址。

  • 类型:AAAA

    字段:address — IPv6 地址。

  • 类型:CNAME

    字段:cname — 规范域名(最多 253 个字符)。

  • 类型:ALIAS

    字段:aliasName — 规范域名;用于根域的类似 CNAME 的行为,在该处不允许使用 CNAME。

  • 类型:NS

    字段:nameserver — 名称服务器名称。

  • 类型:PTR

    字段:pointer — 给定 IP 地址对应的域名。

  • 类型:TXT

    字段:value — 文本值(区分大小写匹配)。

  • 类型:MX

    字段:exchange — 邮件服务器;preference — 优先级(0–65535,数值越小优先级越高)。

  • 类型:CAA

    字段:flag0128(关键位);tagissueissuewildiodefvalue — 带可选参数的 CA 标识符。

  • 类型:SRV

    字段:service(例如 _sip);protocol(例如 _tcp);priorityweight(0–65535);port(1–65535);target — 服务器域名。

  • 类型:TLSA

    字段:usageselectormatching(每个为 0–255);port*_<165535>protocol(例如 _tcp);associationData — 证书哈希或数据。

  • 类型:HTTPS

    字段:svcPriority(0–65535;0 = AliasMode);targetName — FQDN 或 .;可选 port*_<165535>)、scheme(当设置了 port 时必须为 _https)、svcParams

  • 类型:SVCB

    字段:svcPriority(0–65535;0 = AliasMode);targetName — FQDN 或 .;可选 portscheme(例如 _tcp)、svcParams

异步操作

async_operation_get — 获取异步操作状态

检查由其他工具启动的长时间运行操作(当前为 domain_register)。调用时将 operationId 设置为该工具返回的 operationId,并重复调用,直到 statussuccessfailed

  • 参数:operationId

    必填:

    类型和约束:字母数字字符串,最多 36 个字符,由启动该操作的工具返回。

返回

  • 字段:operationId

    含义:被轮询的操作。

  • 字段:status

    含义:pendingsuccessfailed

  • 字段:type

    含义:操作类型,或 null

  • 字段:details

    含义:有关该操作的额外详细信息,或 null

  • 字段:createdAt / modifiedAt

    含义:操作创建时间 / 上次更新时间(modifiedAt 可能为 null)。

错误

当调用失败时,工具会返回一个带有代码和人类可读 detail 的错误,用于说明出了什么问题 — 例如无效输入(格式错误的域名或联系人 ID)、不存在的域名或联系人,或与当前状态冲突。如果某个工具因未授予助手访问权限而被拒绝,请重新连接 Spaceship MCP 并批准其请求的访问权限。

需要提供有效的电子邮箱