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.
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.
Os contratos e políticas que se aplicam ao Spaceship MCP e a qualquer coisa que você comprar por meio dele:
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
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.
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 mantenha o contactId retornado para cada um. Os contatos devem existir antes que você possa registrar.
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.
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.
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.
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.
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.
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.
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ê pagarmin/maxRegisterPeriod) cada; sem cobrança destachamada)
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.
domains_list — encontre o domínio e veja seus nameservers atuais ({ provider, hosts }).
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.
domains_list — encontre o domínio que deseja gerenciar (ou passe o nome 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.
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 consulta com async_operation_get; todas as outras ferramentas são concluídas imediatamente.
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 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 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 contatoLê 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 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 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}
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í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 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í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 é 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ínioRegistra (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.
domain_purchase_link — Obter links de compra de domínioPrepara 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í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); 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ínioAltera 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.
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 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 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 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 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.
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.
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.