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, obter links de pagamento para comprar domínios no seu navegador, gerenciar contatos de domínio e ler ou editar registros DNS em seu nome — basta pedir em linguagem simples, e o assistente chama as ferramentas certas.

Primeiros passos

Você precisa de uma conta Spaceship. O 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, adicione um conector personalizado e aponte para https://mcp.spaceship.com/mcp. O Claude da Anthropic é atualmente o cliente com o qual verificamos que o Spaceship MCP funciona.

  • Outros clientes MCP — adicione um servidor MCP remoto e aponte 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 na 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 de que ela precisa.

Termos e privacidade

Os contratos e políticas que se aplicam ao Spaceship MCP e a qualquer coisa que você comprar por meio dele:

Visão geral das ferramentas

  • Ferramenta: contacts_save

    O que faz: Salva detalhes de contato e obtém um ID de contato

  • Ferramenta: contacts_get

    O que faz: Lê um contato salvo pelo ID

  • 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: Registrar (comprar) um domínio — gasta dinheiro

  • Ferramenta: domain_purchase_link

    O que faz: Obtém links de pagamento para comprar domínios na página de pagamento do Spaceship — nada é cobrado pela chamada

  • 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: Excluir registros DNS

  • Ferramenta: async_operation_get

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

Contatos: referenciados por id

Sempre que um contato for necessário (domain_register, domain_purchase_link, domain_set_contacts), cada função recebe uma contactId string — nunca detalhes de contato embutidos. 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 embutido; 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 um que você leu em um resultado de domains_list.

Um contactId é uma string de 27–32 caracteres alfanuméricos. Basta passá-lo 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 mantenha o contactId retornado para cada um. Os contatos devem existir antes que você possa registrar.

  2. domains_check_availability — verifique o(s) nome(s) desejado(s). Só prossiga quando result for available. Cada nome disponível inclui o price em USD para registrá-lo (tanto padrão quanto premium), ou priceUnavailableReason quando isso não puder ser determinado, além de minRegisterPeriodInYears e maxRegisterPeriodInYears — o prazo que o TLD permite. Observe que o price cobre price.pricedYears anos, que é o menor prazo permitido pelo TLD e nem sempre é 1.

  3. domain_register (prévia) — chame com confirmationToken não definido para obter status: confirmation_required, um confirmationToken novo e o price que será cobrado. Nada é cobrado. Omita paymentMethodId para deixar a ferramenta propor o método de pagamento padrão da conta (ou fundos quando não houver um padrão utilizável) — a resposta então também inclui paymentMethods para que outro possa ser escolhido; passe um id específico como paymentMethodId para cobrar esse método em vez disso. O texto de resposta da ferramenta é uma confirmação completa — prazo, detalhamento do preço, renovação automática, privacidade WHOIS, origem do 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 resolvido e é irreversível. Retorna imediatamente com status: pending e um operationId — o registro é concluído em segundo plano. Para cancelar, chame novamente com o mesmo confirmationToken e confirmationResponse: "decline" — nada é cobrado. O token expira após pouco tempo e está vinculado aos argumentos exatos, preço e método de pagamento 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 e nada será cobrado. Se nenhum método de pagamento puder ser usado, ela retornará status: payment_unavailable com os métodos salvos da conta 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)

Use isto em vez de domain_register quando você pedir um link de pagamento, quando a compra direta no chat falhar ou quando quiser pagar com um método de pagamento que a compra pelo chat não pode usar.

  1. domains_check_availability — verifique o(s) nome(s) desejado(s). Só prossiga quando result for available e leia minRegisterPeriodInYears/maxRegisterPeriodInYears para escolher um years válido.

  2. domain_purchase_link — passe os domínios como items e os contatos a serem aplicados a eles como contacts — IDs de contato de contacts_list, ou salve novos detalhes primeiro com contacts_save — com years e autoRenew compartilhados no nível superior e substituições por domínio onde forem diferentes. Essa chamada não cobra nada. Ela retorna um link por grupo de até 10 domínios, com um preço estimado para cada um; você abre cada link e paga na página de pagamento da Spaceship, onde escolhe o método de pagamento (os fundos da conta são pré-selecionados quando você os tem). A privacidade WHOIS não pode ser definida dessa forma.

  3. domains_list — depois de pagar, chame-o para o domínio para confirmar que ele está registrado. Não trate o link como prova de compra.

Não peça um segundo link para uma compra que talvez já tenha sido concluída. Se uma tentativa de domain_register puder ter sido cobrada, ou se você seguiu um link anterior, chame domains_list primeiro e peça um novo link apenas para domínios que realmente não estejam registrados. Os links não expiram e podem ser reutilizados, então não os compartilhe com mais ninguém.

domains_check_availability ──▶ domain_purchase_link ──▶ (domains_list para confirmar)
(disponível? + preço + (links, até 10 domínios depois que você pagar
min/maxRegisterPeriod) cada; sem cobrança desta
chamada)

Atualizar 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 ela já foi confirmada 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 da 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 de domains_list reflete a alteração. Reaplicar o estado em que um domínio já está retorna um erro de validação em vez de uma operação sem efeito — 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 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.

Revisar 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 consulta com async_operation_get; todas as outras ferramentas são concluídas imediatamente.

Contatos

Contatos são as pessoas ou organizações associadas a um registro de domínio (registrante, admin, técnico, cobrança). Um contato é referenciado em todos os lugares por 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 e restrições: Número de fax, mesmo formato +CountryCode.Number, máximo de 32 caracteres.

  • Parâmetro: faxExt

    Obrigatório: Não

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

  • Parâmetro: taxNumber

    Obrigatório: Não

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

Retorna

{ "contactId": "..." }

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

contacts_get — Obter contato

Lê os detalhes de um contato salvo pelo seu 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 e 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 e restrições: Itens por página, 1–100. Padrão 10.

  • 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: name, email, organization; prefixe com - para ordem decrescente (por exemplo, -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 reduzidas a 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, domain_purchase_link 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 que a Spaceship ofereça suporte para registro: 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 e 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 e restrições: Itens por página, 1–100. Padrão 10.

  • 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: name, unicodeName, registrationDate, expirationDate; prefixe com - para ordem decrescente (por exemplo, -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 se aplicar.

  • Campo: eppStatuses

    Significado: Códigos de status do registro (por exemplo, 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 domínio único.

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 é compatível para registro não é enviado para a verificação de disponibilidade — ele é retornado imediatamente como tldNotSupported.

  • Parâmetro: domains

    Obrigatório: Sim

    Tipo e 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 a pagar 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 do preç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 do 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 um método de pagamento — seu método salvo padrão, fundos da conta ou um que você escolher — e é irreversível. Sequência recomendada: domains_check_availability → domain_register. Um domínio cujo TLD não seja compatível para registro é rejeitado imediatamente — antes de qualquer verificação de disponibilidade, precificação ou cobrança.

years deve estar dentro do período permitido pelo próprio 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, resolve o método de pagamento, 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, origem do pagamento e os contatos de registrante/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 exatamente 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, ao preço cotado e ao método de pagamento resolvido, 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.

Escolhendo um método de pagamento. Omita paymentMethodId para cobrar o método de pagamento salvo padrão da conta, ou os fundos da conta quando não houver um padrão utilizável — a confirmação nomeia a origem resolvida em paymentSource e em seu texto de resposta. Quando ele é omitido, a resposta também traz paymentMethods: os métodos salvos da conta, cada um com um id e um label de exibição (por exemplo, "Card ···2584" ou "Account funds (USD 17.29)"), para que o cliente possa escolher outro — passe esse id de volta como paymentMethodId na próxima chamada para cobrá-lo em vez disso. Um método expirado, ou um que não possa ser cobrado para esta compra (por exemplo, marcado como não utilizável para uma cobrança sem supervisão), é rejeitado com um erro de validação informando o motivo — nenhum token é gerado e nada é cobrado. Se nenhum método de pagamento puder ser usado — nenhum método salvo for utilizável e os fundos da conta não cobrirem o preço, ou não for possível ler os métodos salvos — a ferramenta retorna status: "payment_unavailable" com o motivo e os métodos salvos da conta, e nunca cobra; o cliente precisa escolher outro método, adicionar um ou adicionar fundos.

  • Parâmetro: domain

    Obrigatório: Sim

    Tipo e 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 e restrições: Período de registro em anos. 1–10 é o limite externo; o intervalo aceito é o do próprio TLD — veja minRegisterPeriodInYears/maxRegisterPeriodInYears de domains_check_availability. Valores fora do intervalo são rejeitados, não ajustados.

  • Parâmetro: autoRenew

    Obrigatório: Sim

    Tipo e 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 e 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 e restrições: Booleano. Deve confirmar que você concorda com a configuração de privacidade selecionada.

  • Parâmetro: contacts.registrant

    Obrigatório: Sim

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

  • Parâmetro: contacts.admin

    Obrigatório: Sim

    Tipo e 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); exigido apenas para certos TLDs, caso contrário omita ou use null.

  • Parâmetro: paymentMethodId

    Obrigatório: Não

    Tipo e restrições: ID de um método de pagamento salvo a ser cobrado, obtido da lista paymentMethods de uma chamada anterior. Omita para aceitar o método de pagamento padrão da conta (ou fundos quando não houver um padrão utilizável).

  • 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 fica vinculado aos argumentos exatos, preço e método de pagamento 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), quando o cliente tem um padrão utilizável e não precisa escolher:

{
"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": "<opaque confirmation token>",
"paymentSource": "Card ···2584",
"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."
}

Retorna — após a primeira chamada com paymentMethodId omitido, trazendo adicionalmente os métodos salvos da conta para que o cliente possa escolher outro:

{
"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": "<opaque confirmation token>",
"paymentSource": "Account funds (USD 17.29)",
"paymentMethods": [
{ "id": "pm_9f2c1a7e", "type": "Funds", "order": 1, "label": "Account funds (USD 17.29)" },
{ "id": "pm_4b6e2d90", "type": "CreditCard", "order": 2, "label": "MasterCard ···2584" }
],
"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 prazo e o preço acima, além de linhas para Auto-renew: on/off, WHOIS privacy: on/off, Payment source: <resolved method label> e cada um dos contatos de registrante/admin/tech/billing (nome, e-mail, país — um contato igual ao do registrante aparece como "same as registrant"), seguido de instruções para a próxima chamada. Para um prazo de vários anos, price.amount é o total do prazo inteiro e price.pricePerYear é esse total dividido pelo prazo — 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 }.

Uma entrada de paymentMethods nunca traz números de cartão, nomes de titulares ou qualquer detalhe de cobrança/emissor além de label — isExpired/offSessionForbidden (quando true) sinalizam um método como atualmente inutilizável, e availableBalance/balanceCurrency estão presentes apenas na entrada Funds.

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

Retorna — se nenhum método de pagamento puder ser usado, em qualquer uma das chamadas:

{
"domain": "example.com",
"years": 1,
"status": "payment_unavailable",
"price": {
"amount": 9.08,
"currency": "USD",
"pricedYears": 1,
"pricePerYear": 9.08,
"icannFee": 0.2,
"isPremium": false
},
"paymentMethods": [
{ "id": "pm_4b6e2d90", "type": "CreditCard", "order": 2, "label": "MasterCard ···2584", "isExpired": true }
],
"note": "example.com was not registered and nothing was charged. None of the saved payment methods can be charged for this purchase and the account funds cannot be used. Add a payment method or add funds to the account, then try again."
}

status pode ser:

  • Status: confirmation_required

    Significado: Pré-visualização — 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/método de pagamento 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á sendo concluído 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.

  • Status: payment_unavailable

    Significado: Não existe método de pagamento utilizável para esta compra — nenhum método salvo pode ser cobrado e os fundos da conta não cobrem o preço (ou os métodos salvos não puderam ser lidos). Nenhum token foi emitido e nada foi cobrado. A note informa a causa real quando o cliente pode agir sobre ela — o saldo de fundos em relação ao preço, uma moeda de fundos que não pode pagar o preço ou uma carteira sem nada que possa ser cobrado — e permanece genérica apenas quando os métodos salvos não puderam ser lidos; paymentMethods lista os métodos salvos da conta para que o cliente possa escolher, adicionar um método ou adicionar fundos.

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

Prepara um ou mais links de pagamento do Spaceship para que você possa comprar domínios na própria página de pagamento do Spaceship no navegador em vez de no chat. Nada é registrado nem cobrado por esta chamada — você revisa e paga na página, que é a etapa de confirmação. Use quando pedir um link de pagamento, quando a compra direta no chat falhar ou quando quiser pagar com um método de pagamento que a compra no chat não pode usar. Se uma tentativa de compra talvez já tenha sido concluída, verifique domains_list primeiro e peça um link apenas para domínios que realmente não estejam registrados, ou você corre o risco de pagar duas vezes. Requer o acesso domains:billing.

As configurações fornecidas no nível superior (years, autoRenew, contacts) se aplicam a todos os itens. Um item que define seu próprio years, autoRenew ou contacts os substitui apenas para esse domínio, e qualquer coisa que ele omita é herdada (os contacts de um item substituem os contacts do nível superior como um todo). Os contacts do nível superior são obrigatórios: os contatos acompanham o link e já são preenchidos como os contatos do domínio quando você o abre. Cada domínio pode ser listado apenas uma vez, e não há entradas de pagamento, moeda ou privacidade WHOIS — a privacidade WHOIS permanece no padrão da plataforma na página de pagamento.

  • Parâmetro: items

    Obrigatório: Sim

    Tipo e restrições: Array de 1–20 itens, cada um listado uma vez.

  • Parâmetro: items[].domain

    Obrigatório: Sim

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

  • Parâmetro: items[].years

    Obrigatório: Não

    Tipo e restrições: Inteiro 1–10; substitui o years do nível superior para este domínio.

  • Parâmetro: items[].autoRenew

    Obrigatório: Não

    Tipo e restrições: Booleano; substitui o autoRenew do nível superior para este domínio.

  • Parâmetro: items[].contacts

    Obrigatório: Não

    Tipo e restrições: Contatos apenas para este domínio, como strings contactId (registrant, admin, tech, billing, opcional attributes); substituem os contacts do nível superior como um todo.

  • Parâmetro: years

    Obrigatório: Não

    Tipo e restrições: Inteiro 1–10, aplicado a todos os itens que não definem o seu próprio. Deve estar dentro do prazo permitido pelo TLD (minRegisterPeriodInYears/maxRegisterPeriodInYears de domains_check_availability); valores fora do intervalo são rejeitados com um erro informando o intervalo permitido, não ajustados. Quando nem este nem o item o definem, é usado o menor prazo do TLD.

  • Parâmetro: autoRenew

    Obrigatório: Não

    Tipo e restrições: Booleano, aplicado a todos os itens que não definem o seu próprio. O padrão é true.

  • Parâmetro: contacts

    Obrigatório: Sim

    Tipo e restrições: Contatos como strings contactId, aplicados a todos os itens que não definem os seus próprios: registrant (obrigatório), admin, tech e billing (cada um assume registrant por padrão), e attributes opcional (uma lista de até 5 IDs de contato de atributos estendidos, exigida apenas para certos TLDs). Obtenha os IDs de contacts_list ou salve os detalhes primeiro com contacts_save.

Links por chamada. Um único link comporta no máximo 10 domínios, então uma lista maior retorna vários links na ordem da solicitação — por exemplo, 15 domínios produzem dois links de 10 e 5. links[].domains informa quais domínios cada link cobre.

Preço. Cada domínio traz um preçoestimado (o preço final é mostrado na página de pagamento) ou um priceUnavailableReason quando ele não pode ser determinado. A ausência de estimativa nunca impede a emissão de um link.

Pagamento. O método de pagamento é escolhido na página. Os fundos da conta são pré-selecionados quando a conta os possui.

Os links são reutilizáveis. Um link não expira e pode ser aberto mais de uma vez, então não o compartilhe com mais ninguém.

Retorna

{
"status": "links_ready",
"links": [
{
"url": "https://example.spaceship.com/pay/abc123",
"domains": [
{
"domain": "example.com",
"years": 1,
"autoRenew": true,
"price": { "amount": 9.08, "currency": "USD", "pricedYears": 1, "pricePerYear": 9.08, "icannFee": 0.2, "isPremium": false }
},
{
"domain": "example.ai",
"years": 2,
"autoRenew": false,
"priceUnavailableReason": "Price is currently unavailable for this domain."
}
]
}
],
"failed": [],
"note": "Nothing has been charged. ..."
}

  • status: links_ready

    Significado: Todos os domínios estão cobertos por um link.

  • status: partial

    Significado: Alguns domínios estão cobertos; o restante está listado em failed, cada um com um reason (por exemplo, indisponível, extensão não suportada, prazo não permitido, problema de contatos ou um link que não pôde ser criado).

  • status: no_links

    Significado: Nenhum link pôde ser preparado. O resultado é sinalizado como erro, failed informa o motivo, e nada foi cobrado.

Depois que o cliente disser que pagou, chame domains_list para o domínio para confirmar que ele está registrado — não trate apenas o link como prova de compra.

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); exigido 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 de nível de 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 do 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 nomes de host 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 que essas ferramentas aceitam pode ser 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 os 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 os 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 identificando registros existentes — mesmos formatos do salvamento, mas sem ttl.

Retorna — { "deleted": <number> }, a contagem de registros enviados. Se algum registro não puder ser correspondido, a chamada inteira falhará e nada será 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 salvamento, 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 AC 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 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 .; port opcional (* ou _<1–65535>), scheme (deve ser _https quando port estiver definido), svcParams.

  • Tipo: SVCB

    Campos: svcPriority (0–65535; 0 = AliasMode); targetName — FQDN ou .; port, scheme opcionais (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