Spaceship MCP — Referência de ferramentas

Spaceship MCP conecta seu assistente de IA (como o Claude) à sua conta Spaceship. Por meio dele, o assistente pode verificar e registrar domínios, gerenciar contatos de domínio e ler ou editar registros DNS em seu nome — basta pedir em linguagem natural, e o assistente chama as ferramentas certas.

Primeiros passos

Você precisa de uma conta Spaceship. Spaceship MCP está disponível em https://mcp.spaceship.com/mcp.

Como você se conecta depende do seu assistente de IA:

  • Claude (web e desktop) — abra Configurações, escolha Connectors, encontre Spaceship no diretório de conectores e adicione-o. O Claude da Anthropic é atualmente o cliente com o qual verificamos que o Spaceship MCP funciona.

    NB: Embora o registro de domínios via Spaceship MCP seja totalmente compatível de modo geral, esse recurso ainda não está disponível especificamente por meio do conector Claude. Pesquisa, consulta de domínio, gerenciamento de contatos e gerenciamento de registros DNS já estão disponíveis e verificados para funcionar com Claude hoje.

  • Outros clientes MCP — adicione um servidor MCP remoto e aponte-o para https://mcp.spaceship.com/mcp. Outros clientes podem funcionar, mas ainda não os verificamos.

Ao se conectar, será solicitado que você faça login no Spaceship e conceda ao assistente acesso à sua conta. Quais ferramentas o assistente pode usar depende do acesso que você aprovar — se uma ferramenta for rejeitada porque o acesso não foi concedido, reconecte e aprove o acesso necessário.

Visão geral das ferramentas

  • Ferramenta: contacts_save

    O que faz: Salvar detalhes de contato e obter um ID de contato

  • Ferramenta: contacts_get

    O que faz: Lê um contato salvo pelo ID dele

  • Ferramenta: contacts_list

    O que faz: Lista todos os contatos salvos para encontrar e reutilizar um

  • Ferramenta: domains_list

    O que faz: Lista seus domínios ou consulta um domínio

  • Ferramenta: domains_check_availability

    O que faz: Verifica se domínios estão disponíveis para registro

  • Ferramenta: domain_register

    O que faz: Registra (compra) um domínio — gasta dinheiro

  • Ferramenta: domain_set_contacts

    O que faz: Atribui contatos a um domínio que você possui

  • Ferramenta: domain_set_nameservers

    O que faz: Alterna um domínio para nameservers básicos ou personalizados

  • Ferramenta: dns_records_get

    O que faz: Lê registros DNS de um domínio

  • Ferramenta: dns_records_save

    O que faz: Adiciona registros DNS ou atualiza seu TTL

  • Ferramenta: dns_records_delete

    O que faz: Exclui registros DNS

  • Ferramenta: async_operation_get

    O que faz: Verifica o status de uma operação de longa duração

Contatos: referenciados por id

Sempre que um contato for obrigatório (domain_register, domain_set_contacts), cada função recebe uma contactId string — nunca detalhes de contato inline. Salve primeiro o contato com contacts_save (que retorna seu contactId) e depois passe esse id onde o contato for aceito. Não há salvamento automático inline; uma função não pode receber um objeto de contato completo. Você também pode reutilizar um contactId de um resultado de contacts_list ou de um que você leu em um resultado de domains_list.

Um contactId é uma string de 27–32 caracteres alfanuméricos. Basta passá-la de volta onde um contato for aceito.

Fluxos de trabalho comuns

Várias ferramentas foram projetadas para serem usadas em conjunto: a saída de uma se torna a entrada da próxima.

Registrar (comprar) um domínio

  1. contacts_save — salve os contatos do registrante, admin, técnico e cobrança (se você ainda não tiver os IDs deles) e guarde o contactId retornado para cada um. Os contatos devem existir antes que você possa registrar.

  2. domains_check_availability — verifique o(s) nome(s) que você deseja. Prossiga apenas quando result for available. Cada nome disponível inclui o price em USD para registrá-lo (padrão e premium igualmente), ou priceUnavailableReason quando isso não puder ser determinado, além de minRegisterPeriodInYears e maxRegisterPeriodInYears — o período que o TLD permite. Observe que o price cobre price.pricedYears anos, que é o menor período permitido pelo TLD e nem sempre é 1.

  3. domain_register (preview) — chame com confirmationToken não definido para obter status: confirmation_required, um novo confirmationToken e o price que será cobrado. Nada é cobrado. O texto de resposta da ferramenta é uma confirmação completa — período, detalhamento do preço, renovação automática, privacidade WHOIS, fonte de pagamento e os contatos de registrante/admin/técnico/cobrança — mostre-o ao usuário exatamente como está. Escolha years entre minRegisterPeriodInYears e maxRegisterPeriodInYears da etapa 2 — um valor fora do intervalo é rejeitado imediatamente. Passe cada função de contato como o contactId que você salvou na etapa 1.

  4. domain_register (aceitar/recusar) — depois que o usuário concordar, chame novamente com exatamente os mesmos argumentos mais esse confirmationToken e confirmationResponse: "accept". Isso cobra o método de pagamento padrão da conta e é irreversível. Retorna imediatamente com status: pending e um operationId — o registro é concluído em segundo plano. Para cancelar, em vez disso, chame novamente com o mesmo confirmationToken e confirmationResponse: "decline" — nada é cobrado. O token expira após pouco tempo e está vinculado aos argumentos exatos e ao preço para os quais foi emitido; se estiver ausente, expirado ou não corresponder mais, a chamada retorna uma confirmação totalmente nova em vez de um erro — nunca uma cobrança. Se o preço não puder ser determinado em qualquer uma das chamadas, a ferramenta retornará status: price_unavailable em vez disso, e nada será cobrado.

  5. async_operation_get — passe o operationId da etapa 4 para verificar o progresso. Repita até que status se torne success ou failed.

contacts_save ──▶ domains_check_availability ──▶ domain_register ──▶ domain_register ──▶ async_operation_get
(IDs de contactId) (disponível? + preço + (token não definido: (token + (pending →
min/maxRegisterPeriod) confirmação, accept: operationId, success/failed)
confirmationToken, pending)
sem cobrança)

Atualize os contatos de um domínio que você possui

  1. domain_set_contacts — atribua contatos ao domínio por contactId (salve-os primeiro com contacts_save, se necessário). Isso é concluído imediatamente e retorna um verificationStatus: verification significa que o registrante deve confirmar seu endereço de e-mail antes que a alteração seja totalmente aplicada (um e-mail é enviado a ele), success significa que já foi confirmado, e null significa que nenhuma confirmação é necessária para esse domínio.

Alterar os nameservers de um domínio

  1. domains_list — encontre o domínio e veja seus nameservers atuais ({ provider, hosts }).

  2. domain_set_nameservers — altere para os nameservers padrão do Spaceship com provider: "basic" (sem hosts) ou aponte para os seus próprios com provider: "custom" e uma lista de 2–12 hosts. Retorna o { provider, hosts } resultante, e uma chamada subsequente a domains_list reflete a alteração. Reaplicar o estado em que um domínio já se encontra retorna um erro de validação em vez de uma não operação — trate isso como esperado, não como uma falha para tentar novamente.

Gerenciar registros DNS

  1. domains_list — encontre o domínio que deseja gerenciar (ou passe o nome dele diretamente, se você o souber).

  2. dns_records_get — leia os registros atuais do domínio.

  3. dns_records_save ou dns_records_delete — adicione, atualize ou remova registros. Os registros retornados por dns_records_get têm o mesmo formato que as ferramentas de salvar e excluir aceitam (excluir apenas omite ttl), então o assistente pode ler, ajustar e gravar de volta. A correspondência não diferencia maiúsculas de minúsculas, exceto para registros TXT, que diferenciam maiúsculas de minúsculas.

Revise seu portfólio

  • domains_list — percorra todos os seus domínios com ordenação ou busque um único domínio pelo nome. Cada domínio inclui sua data de expiração, configuração de renovação automática, status, nameservers, proteção de privacidade e IDs de contato atribuídos.

  • contacts_list — percorra todos os contatos salvos na sua conta para encontrar e reutilizar um existente (pelo ID de contato) em vez de criar um duplicado.

  • contacts_get — consulte os detalhes por trás de qualquer ID de contato que você veja em um domínio ou em um resultado de contacts_list.

Referência de ferramentas

Toda ferramenta retorna seu resultado como JSON estruturado. Operações de longa duração (atualmente apenas domain_register) retornam uma referência de operação para consultar com async_operation_get; todas as outras ferramentas são concluídas imediatamente.

Contatos

Contatos são as pessoas ou organizações vinculadas a um registro de domínio (registrante, admin, técnico, cobrança). Um contato é referenciado em todos os lugares pelo seu ID de contato — uma string opaca.

contacts_save — Salvar contato

Salva os detalhes do contato e retorna o ID de contato gerado. A validação de alguns campos (como stateProvince e postalCode) depende do país selecionado.

  • Parâmetro: firstName

    Obrigatório: Sim

    Tipo e restrições: String, 1–64 caracteres. Pode incluir hífens e apóstrofos.

  • Parâmetro: lastName

    Obrigatório: Sim

    Tipo e restrições: String, 1–64 caracteres. Pode incluir hífens e apóstrofos.

  • Parâmetro: email

    Obrigatório: Sim

    Tipo e restrições: Endereço de e-mail válido, máx. 254 caracteres.

  • Parâmetro: address1

    Obrigatório: Sim

    Tipo e restrições: Linha de endereço 1. String, 1–128 caracteres.

  • Parâmetro: city

    Obrigatório: Sim

    Tipo e restrições: String, 1–64 caracteres.

  • Parâmetro: country

    Obrigatório: Sim

    Tipo e restrições: Código de país de duas letras (ISO 3166-1 alpha-2), por exemplo US.

  • Parâmetro: phone

    Obrigatório: Sim

    Tipo e restrições: Formato internacional +CountryCode.Number, por exemplo +1.2025551234. Máx. 32 caracteres.

  • Parâmetro: organization

    Obrigatório: Não

    Tipo e restrições: Nome da organização/empresa. 1–128 caracteres.

  • Parâmetro: address2

    Obrigatório: Não

    Tipo e restrições: Linha de endereço 2. 1–128 caracteres.

  • Parâmetro: stateProvince

    Obrigatório: Não

    Tipo e restrições: Nome do estado/província, 1–64 caracteres. Pode ser obrigatório dependendo do país.

  • Parâmetro: postalCode

    Obrigatório: Não

    Tipo e restrições: 1–16 caracteres. Pode ser obrigatório dependendo do país.

  • Parâmetro: phoneExt

    Obrigatório: Não

    Tipo e restrições: Ramal telefônico, 1–16 caracteres.

  • Parâmetro: fax

    Obrigatório: Não

    Tipo & restrições: Número de fax, mesmo formato +CountryCode.Number, máx. 32 caracteres.

  • Parâmetro: faxExt

    Obrigatório: Não

    Tipo & restrições: Ramal de fax, 1–16 caracteres.

  • Parâmetro: taxNumber

    Obrigatório: Não

    Tipo & restrições: Número fiscal, 1–32 caracteres.

Retorna

{ "contactId": "..." }

contactId (27–32 caracteres alfanuméricos) é o que você passa para domain_register, domain_set_contacts e contacts_get.

contacts_get — Obter contato

Lê os detalhes de um contato salvo pelo ID de contato. Os IDs de contato vêm de contacts_save, contacts_list ou do campo contacts dos resultados de domains_list.

  • Parâmetro: contactId

    Obrigatório: Sim

    Tipo & restrições: ID de contato, 27–32 caracteres alfanuméricos.

Retorna{ contact } com:

  • Campo: firstName, lastName, email, address1, city, country, phone, postalCode

    Tipo: String

  • Campo: organization, address2, stateProvince, phoneExt, fax, faxExt, taxNumber

    Tipo: String ou null

contacts_list — Listar contatos

Lista todos os contatos salvos na sua conta, para que você possa encontrar e reutilizar um contato existente (pelo ID de contato) em vez de criar uma duplicata ou procurar entre seus domínios. A lista é paginada e ordenável, de forma consistente com domains_list.

  • Parâmetro: take

    Obrigatório: Não

    Tipo & restrições: Itens por página, 1–100. Padrão 10.

  • Parâmetro: skip

    Obrigatório: Não

    Tipo & restrições: Itens a ignorar, 0 ou mais. Padrão 0.

  • Parâmetro: orderBy

    Obrigatório: Não

    Tipo & restrições: Até 8 chaves de ordenação: name, email, organization; prefixe com - para ordem decrescente (ex.: -name).

Retorna{ items, total } em que total é o número de contatos únicos na conta (sem duplicação por ID de contato, não o tamanho da página), e cada item traz informações suficientes para diferenciar os contatos sem uma chamada adicional. Se a conta tiver entradas duplicadas para o mesmo ID de contato, elas serão consolidadas em uma só, então total conta contatos distintos em vez de linhas brutas do servidor:

  • Campo: contactId

    Tipo: String (27–32 alfanuméricos). Passe para contacts_get, domain_register ou domain_set_contacts.

  • Campo: name

    Tipo: String — o nome do contato.

  • Campo: email

    Tipo: String ou null quando o contato não tiver e-mail registrado.

  • Campo: organization

    Tipo: String ou null quando o contato não tiver organização registrada.

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

Domínios

As entradas de nome de domínio (domain/domainName) aceitam Unicode (IDN) ou ASCII (A-label) — de qualquer forma, a ferramenta normaliza o nome para punycode automaticamente antes do uso. domains_check_availability e domain_register exigem adicionalmente um TLD compatível com registro pela Spaceship: um domínio cujo TLD não seja compatível é tratado como indisponível em vez de ser verificado ou cobrado. As outras ferramentas de domínio (domains_list, domain_set_contacts, domain_set_nameservers) e as ferramentas de DNS apenas normalizam o nome e nunca rejeitam com base no suporte ao TLD.

domains_list — Listar domínios

Recupera uma lista paginada dos seus domínios. Passe domain para buscar um único domínio pelo nome em vez disso (a paginação e a ordenação são então ignoradas, e o resultado inclui uma note informando isso, caso tenham sido fornecidas).

  • Parâmetro: domain

    Obrigatório: Não

    Tipo & restrições: Nome de domínio totalmente qualificado para buscar um único domínio. Aceita Unicode (IDN) ou ASCII (A-label) — normalizado para punycode automaticamente.

  • Parâmetro: take

    Obrigatório: Não

    Tipo & restrições: Itens por página, 1–100. Padrão 10.

  • Parâmetro: skip

    Obrigatório: Não

    Tipo & restrições: Itens a ignorar, 0 ou mais. Padrão 0.

  • Parâmetro: orderBy

    Obrigatório: Não

    Tipo & restrições: Até 8 chaves de ordenação: name, unicodeName, registrationDate, expirationDate; prefixe com - para ordem decrescente (ex.: -expirationDate).

Retorna{ items, total } em que cada item descreve um domínio:

  • Campo: name / unicodeName

    Significado: Nome do domínio em formato ASCII e Unicode.

  • Campo: isPremium

    Significado: Se o domínio é um nome premium.

  • Campo: autoRenew

    Significado: Se a renovação automática está ativada.

  • Campo: registrationDate / expirationDate

    Significado: Carimbos de data e hora de registro e expiração.

  • Campo: lifecycleStatus

    Significado: creating, registered, grace1, grace2 ou redemption.

  • Campo: verificationStatus

    Significado: verification, success, failed ou null quando não aplicável.

  • Campo: eppStatuses

    Significado: Códigos de status do registro (ex.: bloqueios de transferência).

  • Campo: suspensions

    Significado: Suspensões ativas, cada uma com um reasonCode.

  • Campo: privacyProtection

    Significado: { level: "public" | "high", contactForm: boolean }.

  • Campo: nameservers

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

  • Campo: contacts

    Significado: IDs de contato: registrant, além de admin/tech/billing (podem ser null) e attributes (uma lista de IDs de contato de atributos estendidos, ou null). Legível via contacts_get.

Spaceship MCP preenche todos os campos acima — incluindo contacts, eppStatuses, suspensions, verificationStatus, nameservers, um autoRenew real e um unicodeName distinto quando o domínio tiver um — tanto para a lista com vários itens quanto para buscas de um único domínio.

domains_check_availability — Verificar disponibilidade de domínio

Verifica se um ou mais nomes de domínio estão disponíveis para registro. Usa o endpoint de domínio único para um nome e o endpoint em massa para vários. Um domínio cujo TLD não seja compatível com registro não é enviado para a verificação de disponibilidade — ele é retornado imediatamente como tldNotSupported.

  • Parâmetro: domains

    Obrigatório: Sim

    Tipo & restrições: 1–20 nomes de domínio totalmente qualificados. Cada um aceita Unicode (IDN) ou ASCII (A-label) — normalizado para punycode automaticamente.

Retorna{ results }, uma entrada por nome solicitado:

  • Campo: domain

    Significado: O nome verificado.

  • Campo: result

    Significado: available, taken, invalidDomainName, tldNotSupported ou unexpectedError.

  • Campo: premiumPricing

    Significado: Para nomes premium: lista de { operation, price, currency } em que operation é register, transfer, renew ou restore. Vazio para nomes regulares.

  • Campo: price

    Significado: Para nomes available (padrão e premium): o preço em USD para registrar o domínio pelo menor prazo que o TLD permite{ amount, currency: "USD", pricedYears?, pricePerYear?, icannFee?, isPremium }. amount é o total pagável por todo esse prazo; pricedYears informa quantos anos ele cobre. Nenhum preço anterior ao desconto ou preço "de" é informado. icannFee é a taxa da ICANN (USD) já incluída em amount, retornada separadamente para que a composição possa ser explicada; ela aparece apenas quando o TLD tem uma taxa.

  • Campo: pricePerYear

    Significado: Dentro de price: amount dividido por pricedYears, para que um valor anual esteja sempre disponível para comparação. Quando pricedYears é 1, esse é o preço real de um ano; acima disso, é uma média anual do prazo, não um prazo que você poderia comprar.

  • Campo: minRegisterPeriodInYears / maxRegisterPeriodInYears

    Significado: Para nomes available: o menor e o maior período de registro que esse TLD realmente permite, como dois números simples. Use-os para escolher um years válido para domain_register. Ambos são omitidos quando não foi possível determinar o período permitido.

  • Campo: priceUnavailableReason

    Significado: Presente em vez de price quando não foi possível determinar o preço de um nome disponível. A verificação em si ainda é bem-sucedida.

Somente nomes disponíveis recebem preço; resultados taken/inválidos não trazem nem price nem priceUnavailableReason.

A maioria dos TLDs permite um ano, mas alguns não..ai, por exemplo, tem um mínimo de dois anos. Nesses casos, price.amount é o total para o prazo mínimo — não um preço de um ano sobre o qual você possa agir — e price.pricedYears informa isso:

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

pricePerYear está presente aqui — 159.96 dividido pelos dois anos que cobre resulta em 79.98. Esse é o total dividido pelo prazo, não um preço que você poderia pagar por um único ano (um registro de .ai por um ano não pode ser comprado). Sempre mostre amount junto com pricedYears ("US$159.96 por 2 anos"), nunca amount sozinho. Para um TLD comum, pricedYears é 1 e pricePerYear é igual a amount.

domain_register — Registrar domínio

Registra (compra) um domínio. Isso cobra o método de pagamento padrão da sua conta e é irreversível. Sequência recomendada: domains_check_availabilitydomain_register. Um domínio cujo TLD não seja compatível com registro é rejeitado imediatamente — antes de qualquer verificação de disponibilidade, precificação ou cobrança.

years deve estar dentro do próprio período permitido do TLD. O limite 110 abaixo é o limite externo entre todos os TLDs; cada TLD é mais restrito. .ai permite 2–10, .co e .io permitem 1–5, .sg 1–2, .fr exatamente 1. Um valor de years fora desse intervalo é rejeitado com um erro de validação informando o intervalo permitido — antes de qualquer verificação de disponibilidade, precificação ou cobrança — e o valor não é ajustado silenciosamente para você:

.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.

Leia minRegisterPeriodInYears/maxRegisterPeriodInYears de domains_check_availability primeiro e escolha um years dentro desse intervalo. A mesma verificação é executada novamente na chamada de confirmação (confirmationResponse: "accept"), portanto nunca pode ser ignorada por meio da confirmação.

Confirmação em duas etapas antes da cobrança. Chame primeiro com confirmationToken não definido: a ferramenta recalcula o preço do domínio, monta uma confirmação completa — prazo, detalhamento do preço (incluindo qualquer taxa ICANN e se o domínio é premium), renovação automática, privacidade WHOIS, fonte de pagamento e os contatos registrant/admin/tech/billing (um contato idêntico ao registrante é mostrado como "same as registrant") — e retorna status: "confirmation_required" com esse price e um novo confirmationToken. Nada é registrado nem cobrado nesta chamada. A confirmação completa é o texto de resposta da ferramenta; mostre-o ao usuário como está. Quando ele concordar, chame novamente com exatamente os mesmos argumentos mais este confirmationToken e confirmationResponse: "accept" para enviar a compra, ou confirmationResponse: "decline" para cancelá-la — nada é cobrado em caso de recusa. O token está vinculado a esses argumentos exatos e ao preço cotado e expira após pouco tempo: um token ausente, expirado, adulterado ou que não corresponda mais na chamada de confirmação simplesmente retorna uma confirmação totalmente nova com um token novo — nunca um erro, nunca uma cobrança. Se o preço não puder ser determinado em qualquer uma das chamadas, a ferramenta retorna status: "price_unavailable" em vez de um token e nunca cobra; tente novamente mais tarde. Uma chamada confirmada retorna imediatamente com status: "pending" e um operationId — o registro é concluído em segundo plano; verifique-o com async_operation_get.

  • Parâmetro: domain

    Obrigatório: Sim

    Tipo & restrições: Nome de domínio totalmente qualificado para registrar, por exemplo example.com. Aceita Unicode (IDN) ou ASCII (A-label) — normalizado para punycode automaticamente.

  • Parâmetro: years

    Obrigatório: Sim

    Tipo & restrições: Período de registro em anos. 110 é o limite externo; o intervalo aceito é o próprio do TLD — veja minRegisterPeriodInYears/maxRegisterPeriodInYears em domains_check_availability. Valores fora do intervalo são rejeitados, não ajustados.

  • Parâmetro: autoRenew

    Obrigatório: Sim

    Tipo & restrições: Booleano. Quando true, o domínio é renovado automaticamente no vencimento usando o método de pagamento padrão da conta.

  • Parâmetro: privacy.level

    Obrigatório: Sim

    Tipo & restrições: high oculta os dados de contato do registrante do WHOIS público; public os publica.

  • Parâmetro: privacy.userConsent

    Obrigatório: Sim

    Tipo & restrições: Booleano. Deve confirmar que você concorda com a configuração de privacidade selecionada.

  • Parâmetro: contacts.registrant

    Obrigatório: Sim

    Tipo & restrições: contactId string (27–32 alfanuméricos), de contacts_save.

  • Parâmetro: contacts.admin

    Obrigatório: Sim

    Tipo & restrições: contactId string (27–32 alfanuméricos), de contacts_save.

  • Parâmetro: contacts.tech

    Obrigatório: Sim

    Tipo e restrições: contactId string (27–32 alfanuméricos), de contacts_save.

  • Parâmetro: contacts.billing

    Obrigatório: Sim

    Tipo e restrições: contactId string (27–32 alfanuméricos), de contacts_save.

  • Parâmetro: contacts.attributes

    Obrigatório: Não

    Tipo e restrições: Array de IDs de contato de atributos estendidos (até 5); obrigatório apenas para certos TLDs, caso contrário omita ou use null.

  • Parâmetro: confirmationToken

    Obrigatório: Não

    Tipo e restrições: String, até 4096 caracteres. Token emitido pelo servidor retornado por uma chamada anterior de domain_register para estes argumentos exatos. Omita na primeira chamada para uma nova tentativa de registro. Expira após pouco tempo e está vinculado aos argumentos exatos e ao preço para os quais foi emitido — reenvie-o sem alterações, junto com confirmationResponse, para agir sobre ele.

  • Parâmetro: confirmationResponse

    Obrigatório: Condicional

    Tipo e restrições: "accept" ou "decline". Só faz sentido junto com um confirmationToken válido. "accept" envia o registro (cobrado) mostrado nessa confirmação; "decline" o cancela sem cobrança. Omita na primeira chamada.

Retorna — após a primeira chamada (nada cobrado):

{
"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."
}

Junto com este JSON, o texto da resposta da ferramenta é a confirmação completa a ser mostrada ao usuário — ele repete o domínio, o período e o preço acima, além de linhas para Auto-renew: on/off, WHOIS privacy: on/off, Payment source: Spaceship account funds e cada um dos contatos de registrante/admin/tech/billing (nome, e-mail, país — um contato que corresponda ao registrante aparece como "same as registrant"), seguido de instruções para a próxima chamada. Para um período de vários anos, price.amount é o total para todo o período e price.pricePerYear é esse total dividido pelo período — por exemplo, years: 5 em .com retorna { "amount": 48.52, "pricedYears": 5, "pricePerYear": 9.70 }, e example.ai com years: 2 retorna { "amount": 159.96, "pricedYears": 2, "pricePerYear": 79.98 }.

Retorna — após confirmationResponse: "accept" (registro enviado):

{
"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."
}

Retorna — após confirmationResponse: "decline" (nada cobrado):

{
"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."
}

Retorna — se o preço não puder ser determinado, em qualquer uma das chamadas:

{
"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 pode ser:

  • Status: confirmation_required

    Significado: Prévia — nada cobrado. Mostre o texto da resposta ao usuário e depois chame novamente com este confirmationToken e confirmationResponse. Também retornado, com um token novo, quando um confirmationToken enviado estiver ausente, expirado, adulterado ou não corresponder mais aos argumentos/preço atuais — nunca é um erro.

  • Status: cancelled

    Significado: A compra foi recusada (confirmationResponse: "decline"), então nada foi enviado.

  • Status: pending

    Significado: Enviado; o registro está finalizando em segundo plano. Consulte async_operation_get com o operationId.

  • Status: price_unavailable

    Significado: O preço não pôde ser determinado, então nenhum token foi emitido e nada foi cobrado. Tente novamente mais tarde.

operationId é uma string simples — passe-a para async_operation_get, que informa se o registro acaba tendo sucesso ou falha. O price mostrado em confirmation_required é exatamente o que será cobrado em confirmationResponse: "accept"price.amount é o total para todo esse período e price.pricedYears informa o período, então sempre mostre os dois juntos. Quando o TLD tiver uma taxa ICANN, price.amount já a inclui e price.icannFee informa o valor da taxa para que ela possa ser explicada.

domain_set_contacts — Definir contatos do domínio

Altera os contatos atribuídos a um domínio que você possui. Conclui imediatamente (sem operação para consultar).

  • Parâmetro: domainName

    Obrigatório: Sim

    Tipo e restrições: Nome de domínio totalmente qualificado. Aceita Unicode (IDN) ou ASCII (A-label) — normalizado automaticamente para punycode.

  • Parâmetro: registrant

    Obrigatório: Sim

    Tipo e restrições: contactId string (27–32 alfanuméricos), de contacts_save.

  • Parâmetro: admin

    Obrigatório: Não

    Tipo e restrições: contactId string (27–32 alfanuméricos) ou null.

  • Parâmetro: tech

    Obrigatório: Não

    Tipo e restrições: contactId string (27–32 alfanuméricos) ou null.

  • Parâmetro: billing

    Obrigatório: Não

    Tipo e restrições: contactId string (27–32 alfanuméricos) ou null.

  • Parâmetro: attributes

    Obrigatório: Não

    Tipo e restrições: Array de IDs de contato de atributos estendidos (até 5); obrigatório apenas para certos TLDs, caso contrário omita ou use null.

Retorna

{ "verificationStatus": "verification" }

O verificationStatus retornado reflete a verificação de e-mail ICANN RAA: verification — o registrante deve confirmar seu endereço de e-mail (um e-mail de confirmação é enviado); success — já confirmado; null — a verificação RAA não se aplica a este domínio.

domain_set_nameservers — Definir nameservers do domínio

Altera os nameservers no nível do registrador de um domínio. Conclui imediatamente (sem operação para consultar). A alteração é refletida por domains_list depois.

  • Parâmetro: domainName

    Obrigatório: Sim

    Tipo e restrições: Nome de domínio totalmente qualificado. Aceita Unicode (IDN) ou ASCII (A-label) — normalizado automaticamente para punycode.

  • Parâmetro: provider

    Obrigatório: Sim

    Tipo e restrições: basic (nameservers padrão da Spaceship) ou custom (seus próprios hosts).

  • Parâmetro: hosts

    Obrigatório: Condicional

    Tipo e restrições: Obrigatório quando provider for custom: 2–12 hostnames de nameserver (cada um um FQDN válido, 4–255 caracteres). Deve ser omitido quando provider for basic.

Retorna

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

Reaplicar o estado em que um domínio já está (por exemplo, definir basic quando ele já é basic) retorna um erro de validação em vez de um sucesso sem operação — trate isso como um resultado esperado, não como uma falha para tentar novamente.

Registros DNS

O domainName aceito por estas ferramentas aceita Unicode (IDN) ou ASCII (A-label) e é normalizado automaticamente para punycode; o suporte a TLD não é aplicado aqui.

dns_records_get — Obter registros DNS

Recupera uma lista paginada de registros de recursos DNS de um domínio.

  • Parâmetro: domainName

    Obrigatório: Sim

    Tipo e restrições: O domínio cujos registros devem ser buscados.

  • Parâmetro: take

    Obrigatório: Não

    Tipo e restrições: Itens por página, 1–500. Padrão 100.

  • Parâmetro: skip

    Obrigatório: Não

    Tipo e restrições: Itens a ignorar, 0 ou mais. Padrão 0.

  • Parâmetro: orderBy

    Obrigatório: Não

    Tipo e restrições: Até 8 chaves de ordenação: type, -type, name, -name.

Retorna{ items, total }. Cada item é um registro conforme descrito em Formatos de registro, além de um campo opcional group indicando de onde o registro vem (custom — criado por você, product — gerenciado por um produto Spaceship, personalNs — nameservers pessoais).

dns_records_save — Salvar registros DNS

Adiciona registros DNS personalizados ou atualiza o TTL dos existentes. Os registros são correspondidos sem diferenciar maiúsculas de minúsculas, exceto registros TXT (sensíveis a maiúsculas e minúsculas).

  • Parâmetro: domainName

    Obrigatório: Sim

    Tipo e restrições: O domínio cujos registros devem ser atualizados.

  • Parâmetro: records

    Obrigatório: Sim

    Tipo e restrições: 1–500 registros — veja Formatos de registro. Cada um pode incluir um ttl opcional.

  • Parâmetro: force

    Obrigatório: Não

    Tipo e restrições: Booleano. Ignora a verificação de resolução de conflitos e força a atualização da zona.

Retorna{ "saved": <number> }, a contagem de registros enviados. Uma resposta bem-sucedida significa que todos os registros foram aceitos; se algum registro falhar, a chamada inteira retornará um erro.

dns_records_delete — Excluir registros DNS

Exclui registros DNS personalizados. As exclusões não podem ser desfeitas. Os registros são correspondidos sem diferenciar maiúsculas de minúsculas, exceto registros TXT (sensíveis a maiúsculas e minúsculas).

  • Parâmetro: domainName

    Obrigatório: Sim

    Tipo e restrições: O domínio cujos registros devem ser excluídos.

  • Parâmetro: records

    Obrigatório: Sim

    Tipo e restrições: 1–500 registros que identificam registros existentes — mesmos formatos do save, mas sem ttl.

Retorna{ "deleted": <number> }, a contagem de registros enviados. Se algum registro não puder ser correspondido, a chamada inteira falha e nada é excluído.

Formatos de registro

Todo registro tem:

  • type — um dos 13 tipos compatíveis abaixo.

  • name — o nome do registro excluindo o domínio: use @ para o próprio domínio (apex) e * para um curinga.

  • ttl (somente save, opcional) — tempo de cache em segundos, 60–3600.

Campos específicos por tipo:

  • Tipo: A

    Campos: address — endereço IPv4.

  • Tipo: AAAA

    Campos: address — endereço IPv6.

  • Tipo: CNAME

    Campos: cname — nome de domínio canônico (máx. 253 caracteres).

  • Tipo: ALIAS

    Campos: aliasName — nome de domínio canônico; comportamento semelhante a CNAME para o apex, onde CNAME não é permitido.

  • Tipo: NS

    Campos: nameserver — nome do nameserver.

  • Tipo: PTR

    Campos: pointer — nome de domínio para o endereço IP fornecido.

  • Tipo: TXT

    Campos: value — valor de texto (correspondido com distinção entre maiúsculas e minúsculas).

  • Tipo: MX

    Campos: exchange — servidor de e-mail; preference — prioridade (0–65535, menor é preferido).

  • Tipo: CAA

    Campos: flag0 ou 128 (bit crítico); tagissue, issuewild ou iodef; value — identificador da CA com parâmetros opcionais.

  • Tipo: SRV

    Campos: service (por exemplo, _sip); protocol (por exemplo, _tcp); priority e weight (0–65535); port (1–65535); target — nome de domínio do servidor.

  • Tipo: TLSA

    Campos: usage, selector, matching (cada um de 0–255); port* ou _<165535>; protocol (por exemplo, _tcp); associationData — hash ou dados do certificado.

  • Tipo: HTTPS

    Campos: svcPriority (0–65535; 0 = AliasMode); targetName — FQDN ou .; opcional port (* ou _<165535>), scheme (deve ser _https quando port estiver definido), svcParams.

  • Tipo: SVCB

    Campos: svcPriority (0–65535; 0 = AliasMode); targetName — FQDN ou .; opcional port, scheme (por exemplo, _tcp), svcParams.

Operações assíncronas

async_operation_get — Obter status da operação assíncrona

Verifica uma operação de longa duração iniciada por outra ferramenta (atualmente domain_register). Chame-a com operationId definido como o operationId retornado por essa ferramenta e repita até que status seja success ou failed.

  • Parâmetro: operationId

    Obrigatório: Sim

    Tipo e restrições: String alfanumérica, máx. 36 caracteres, retornada pela ferramenta que iniciou a operação.

Retorna

  • Campo: operationId

    Significado: A operação consultada.

  • Campo: status

    Significado: pending, success ou failed.

  • Campo: type

    Significado: Tipo de operação ou null.

  • Campo: details

    Significado: Detalhes extras sobre a operação ou null.

  • Campo: createdAt / modifiedAt

    Significado: Quando a operação foi criada / atualizada pela última vez (modifiedAt pode ser null).

Erros

Quando uma chamada falha, a ferramenta retorna um erro com um código e um detail legível por humanos explicando o que deu errado — por exemplo, entrada inválida (um nome de domínio ou ID de contato malformado), um domínio ou contato que não existe, ou um conflito com o estado atual. Se uma ferramenta for rejeitada porque o assistente não recebeu acesso a ela, reconecte o Spaceship MCP e aprove o acesso solicitado.

É necessário um e-mail válido