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.
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.
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
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.
Várias ferramentas foram projetadas para serem usadas em conjunto: a saída de uma se torna a entrada da próxima.
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.
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.
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.
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.
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)
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.
domains_list — encontre o domínio e veja seus nameservers atuais ({ provider, hosts }).
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.
domains_list — encontre o domínio que deseja gerenciar (ou passe o nome dele diretamente, se você o souber).
dns_records_get — leia os registros atuais do domínio.
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.
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.
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 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 contatoSalva 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 contatoLê 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 contatosLista 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}
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íniosRecupera 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ínioVerifica 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ínioRegistra (compra) um domínio. Isso cobra o método de pagamento padrão da sua conta e é irreversível. Sequência recomendada: domains_check_availability → domain_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 1–10 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 2–10 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. 1–10 é 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ínioAltera 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ínioAltera 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.
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 DNSRecupera 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 DNSAdiciona 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 DNSExclui 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.
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: flag — 0 ou 128 (bit crítico); tag — issue, 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 _<1–65535>; protocol (por exemplo, _tcp); associationData — hash ou dados do certificado.
Tipo: HTTPS
Campos: svcPriority (0–65535; 0 = AliasMode); targetName — FQDN ou .; opcional port (* ou _<1–65535>), 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.
async_operation_get — Obter status da operação assíncronaVerifica 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).
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.