Spaceship MCP — Referência de ferramentas

O Spaceship MCP liga o teu assistente de IA (como o Claude) à tua conta Spaceship. Através dele, o assistente pode verificar e registar domínios, obter links de pagamento para comprares domínios no teu navegador, gerir contactos de domínios e ler ou editar registos DNS em teu nome — basta pedires em linguagem simples, e o assistente chama as ferramentas certas.

Como começar

Precisas de uma conta Spaceship. O Spaceship MCP está disponível em https://mcp.spaceship.com/mcp.

A forma como te ligas depende do teu assistente de IA:

  • Claude (web e desktop) — abre as Definições, escolhe Connectors, adiciona um conector personalizado e aponta-o para https://mcp.spaceship.com/mcp. O Claude da Anthropic é atualmente o cliente com o qual verificámos que o Spaceship MCP funciona.

  • Outros clientes MCP — adiciona um servidor MCP remoto e aponta-o para https://mcp.spaceship.com/mcp. Outros clientes podem funcionar, mas ainda não os verificámos.

Quando te ligares, ser-te-á pedido que inicies sessão na Spaceship e concedas ao assistente acesso à tua conta. As ferramentas que o assistente pode usar dependem do acesso que aprovares — se uma ferramenta for rejeitada porque o acesso não foi concedido, volta a ligar-te e aprova o acesso de que ela precisa.

Termos e privacidade

Os acordos e políticas que se aplicam ao Spaceship MCP e a tudo o que comprares através dele:

Ferramentas num relance

  • Ferramenta: contacts_save

    O que faz: Guardar detalhes de contacto e obter um ID de contacto

  • Ferramenta: contacts_get

    O que faz: Ler um contacto guardado através do respetivo ID

  • Ferramenta: contacts_list

    O que faz: Listar todos os contactos guardados para encontrares e reutilizares um

  • Ferramenta: domains_list

    O que faz: Listar os teus domínios ou procurar um domínio

  • Ferramenta: domains_check_availability

    O que faz: Verificar se os domínios estão disponíveis para registo

  • Ferramenta: domain_register

    O que faz: Regista (compra) 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 da Spaceship — a chamada não cobra nada

  • Ferramenta: domain_set_contacts

    O que faz: Atribui contactos a um domínio que possuis

  • Ferramenta: domain_set_nameservers

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

  • Ferramenta: dns_records_get

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

  • Ferramenta: dns_records_save

    O que faz: Adiciona registos DNS ou atualiza o respetivo TTL

  • Ferramenta: dns_records_delete

    O que faz: Eliminar registos DNS

  • Ferramenta: async_operation_get

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

Contactos: referenciados por id

Sempre que é necessário um contacto (domain_register, domain_purchase_link, domain_set_contacts), cada função recebe uma contactId string — nunca detalhes de contacto inline. Guarda primeiro o contacto com contacts_save (que devolve o respetivo contactId) e depois passa esse id onde o contacto for aceite. Não existe gravação automática inline; uma função não pode receber um objeto de contacto completo. Também podes reutilizar um contactId de um resultado de contacts_list ou de um resultado de domains_list.

Um contactId é uma string de 27–32 carateres alfanuméricos. Basta voltares a passá-lo onde um contacto for aceite.

Fluxos de trabalho comuns

Várias ferramentas foram concebidas para serem usadas em conjunto: o resultado de uma torna-se a entrada da seguinte.

Registar (comprar) um domínio

  1. contacts_save — guarda os contactos do titular, admin, técnico e faturação (se ainda não tiveres os respetivos ids) e conserva o contactId devolvido para cada um. Os contactos têm de existir antes de poderes registar.

  2. domains_check_availability — verifica o(s) nome(s) que queres. Só deves avançar quando result for available. Cada nome disponível inclui o price em USD para o registar (tanto standard como premium), ou priceUnavailableReason quando não pode ser determinado, além de minRegisterPeriodInYears e maxRegisterPeriodInYears — o período que o TLD permite. Nota que o price cobre price.pricedYears anos, que é o período mínimo permitido pelo TLD e nem sempre é 1.

  3. domain_register (pré-visualização) — chama com confirmationToken por definir para obteres status: confirmation_required, um confirmationToken novo e o price que será cobrado. Nada é faturado. Omite paymentMethodId para deixares a ferramenta propor o método de pagamento predefinido da conta (ou fundos, quando não houver uma predefinição utilizável) — a resposta inclui então também paymentMethods para que possas escolher outro; passa um id específico como paymentMethodId para cobrar esse método em vez disso. O texto de resposta da ferramenta é uma confirmação completa — período, discriminação do preço, renovação automática, privacidade WHOIS, origem do pagamento e os contactos de titular/admin/técnico/faturação — mostra-o ao utilizador tal como está. Escolhe years entre minRegisterPeriodInYears e maxRegisterPeriodInYears do passo 2 — um valor fora do intervalo é rejeitado de imediato. Passa cada função de contacto como o contactId que guardaste no passo 1.

  4. domain_register (aceitar/recusar) — depois de o utilizador concordar, chama novamente com exatamente os mesmos argumentos mais esse confirmationToken e confirmationResponse: "accept". Isto cobra o método de pagamento resolvido e é irreversível. Devolve imediatamente status: pending e um operationId — o registo termina em segundo plano. Para cancelar, chama novamente com o mesmo confirmationToken e confirmationResponse: "decline" — nada é faturado. O token expira após pouco tempo e está associado aos argumentos exatos, ao preço e ao método de pagamento para os quais foi emitido; se estiver em falta, tiver expirado ou já não corresponder, a chamada devolve 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 devolve antes status: price_unavailable e nada é cobrado. Se não puder ser usado nenhum método de pagamento, devolve status: payment_unavailable com os métodos guardados na conta e nada é cobrado.

  5. async_operation_get — passa o operationId do passo 4 para verificar o progresso. Repete até que status passe a success ou failed.

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

Usa isto em vez de domain_register quando pedires uma ligação de pagamento, quando a compra direta no chat falhar ou quando quiseres pagar com um método de pagamento que a compra no chat não consegue usar.

  1. domains_check_availability — verifica o(s) nome(s) que queres. Só deves avançar quando result for available e lê minRegisterPeriodInYears/maxRegisterPeriodInYears para escolheres um years válido.

  2. domain_purchase_link — passa os domínios como items e os contactos a associar-lhes como contacts — IDs de contacto de contacts_list, ou guarda primeiro novos dados com contacts_save — com years e autoRenew partilhados ao nível superior e substituições por domínio onde forem diferentes. Esta chamada não cobra nada. Devolve uma ligação por grupo de até 10 domínios, com um preço estimado para cada um; abres cada ligação e pagas na página de pagamento da Spaceship, onde escolhes o método de pagamento (os fundos da conta são pré-selecionados quando os tens). A privacidade WHOIS não pode ser definida desta forma.

  3. domains_list — depois de pagares, chama-a para o domínio para confirmares que está registado. Não trates a ligação como prova de compra.

Não peças uma segunda ligação para uma compra que possa já ter sido concluída. Se uma tentativa de domain_register puder ter sido cobrada, ou se seguiste uma ligação anterior, chama primeiro domains_list e pede uma nova ligação apenas para domínios que genuinamente não estejam registados. As ligações não expiram e podem ser reutilizadas, por isso não as partilhes com mais ninguém.

domains_check_availability ──▶ domain_purchase_link ──▶ (domains_list para confirmar)
(disponível? + preço + (ligações, até 10 domínios depois de pagares
min/maxRegisterPeriod) cada; sem cobrança desta
chamada)

Atualizar os contactos de um domínio que te pertence

  1. domain_set_contacts — atribui contactos ao domínio por contactId (guarda-os primeiro com contacts_save se necessário). Isto conclui-se imediatamente e devolve um verificationStatus: verification significa que o titular tem de confirmar o respetivo endereço de email antes de a alteração ser totalmente aplicada (é-lhe enviado um email), success significa que já está confirmado e null significa que não é necessária confirmação para esse domínio.

Alterar os nameservers de um domínio

  1. domains_list — encontra o domínio e vê os seus nameservers atuais ({ provider, hosts }).

  2. domain_set_nameservers — muda-o para os nameservers predefinidos da Spaceship com provider: "basic" (sem hosts), ou aponta-o para os teus com provider: "custom" e uma lista de 2–12 hosts. Devolve o resultado { provider, hosts } e uma chamada subsequente a domains_list reflete a alteração. Voltar a aplicar o estado em que um domínio já se encontra devolve um erro de validação em vez de uma não operação — trata isso como esperado, não como uma falha que exija nova tentativa.

Gerir registos DNS

  1. domains_list — encontra o domínio que queres gerir (ou passa diretamente o nome, se o souberes).

  2. dns_records_get — lê os registos atuais do domínio.

  3. dns_records_save ou dns_records_delete — adiciona, atualiza ou remove registos. Os registos devolvidos por dns_records_get têm o mesmo formato que as ferramentas de guardar e eliminar aceitam (eliminar apenas omite ttl), por isso o assistente pode ler, ajustar e voltar a escrever. A correspondência não distingue maiúsculas de minúsculas, exceto nos registos TXT, que são sensíveis a maiúsculas e minúsculas.

Rever o teu portefólio

  • domains_list — percorre todos os teus domínios com ordenação, ou obtém um único domínio pelo nome. Cada domínio inclui a data de expiração, a definição de renovação automática, o estado, os nameservers, a proteção de privacidade e os IDs de contacto atribuídos.

  • contacts_list — percorre todos os contactos guardados na tua conta para encontrares e reutilizares um já existente (pelo respetivo ID de contacto) em vez de criares um duplicado.

  • contacts_get — consulta os detalhes por trás de qualquer ID de contacto que vejas num domínio ou num resultado de contacts_list.

Referência das ferramentas

Todas as ferramentas devolvem o respetivo resultado como JSON estruturado. As operações de longa duração (atualmente apenas domain_register) devolvem uma referência de operação para consultar com async_operation_get; todas as outras ferramentas concluem-se imediatamente.

Contactos

Os contactos são as pessoas ou organizações associadas a um registo de domínio (titular, admin, técnico, faturação). Um contacto é referenciado em todo o lado pelo seu ID de contacto — uma string opaca.

contacts_save — Guardar contacto

Guarda os detalhes do contacto e devolve o ID de contacto 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 carateres. Pode incluir hífenes e apóstrofos.

  • Parâmetro: lastName

    Obrigatório: Sim

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

  • Parâmetro: email

    Obrigatório: Sim

    Tipo e restrições: Endereço de email válido, máx. 254 carateres.

  • Parâmetro: address1

    Obrigatório: Sim

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

  • 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 consoante o país.

  • Parâmetro: postalCode

    Obrigatório: Não

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

  • Parâmetro: phoneExt

    Obrigatório: Não

    Tipo e restrições: Extensão telefónica, 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: Extensão de fax, 1–16 caracteres.

  • Parâmetro: taxNumber

    Obrigatório: Não

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

Devolve

{ "contactId": "..." }

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

contacts_get — Obter contacto

Lê os detalhes de um contacto guardado através do respetivo ID de contacto. Os IDs de contacto 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 contacto, 27–32 caracteres alfanuméricos.

Devolve — { 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 contactos

Lista todos os contactos guardados na tua conta, para que possas encontrar e reutilizar um contacto existente (através do respetivo ID de contacto) em vez de criares um duplicado ou andares à procura nos teus 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. Predefinição 10.

  • Parâmetro: skip

    Obrigatório: Não

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

  • Parâmetro: orderBy

    Obrigatório: Não

    Tipo e restrições: Até 8 chaves de ordenação: name, email, organization; prefixa com - para ordem descendente (por exemplo, -name).

Devolve — { items, total } em que total é o número de contactos únicos na conta (sem duplicados por ID de contacto, não o tamanho da página), e cada item inclui informação suficiente para distinguir os contactos sem uma chamada de seguimento. Se a conta tiver entradas duplicadas para o mesmo ID de contacto, estas são reduzidas a uma só, pelo que total conta contactos distintos em vez de linhas brutas do lado do servidor:

  • Campo: contactId

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

  • Campo: name

    Tipo: String — o nome do contacto.

  • Campo: email

    Tipo: String ou null quando o contacto não tem email registado.

  • Campo: organization

    Tipo: String ou null quando o contacto não tem organização registada.

{
"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) — em qualquer dos casos, a ferramenta normaliza automaticamente o nome para punycode antes da utilização. domains_check_availability e domain_register exigem adicionalmente um TLD que a Spaceship suporte para registo: um domínio cujo TLD não seja suportado é 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 DNS apenas normalizam o nome e nunca rejeitam com base no suporte do TLD.

domains_list — Listar domínios

Obtém uma lista paginada dos teus domínios. Passa domain para obteres um único domínio pelo nome; nesse caso, a paginação e a ordenação são ignoradas, e o resultado inclui uma note a indicar isso, se tiverem sido fornecidas.

  • Parâmetro: domain

    Obrigatório: Não

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

  • Parâmetro: take

    Obrigatório: Não

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

  • Parâmetro: skip

    Obrigatório: Não

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

  • Parâmetro: orderBy

    Obrigatório: Não

    Tipo e restrições: Até 8 chaves de ordenação: name, unicodeName, registrationDate, expirationDate; prefixa com - para ordem descendente (por exemplo, -expirationDate).

Devolve — { 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 temporais de registo e expiração.

  • Campo: lifecycleStatus

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

  • Campo: verificationStatus

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

  • Campo: eppStatuses

    Significado: Códigos de estado do registo (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 contacto: registrant, mais admin/tech/billing (pode ser null) e attributes (uma lista de IDs de contacto de atributos alargados, ou null). Legível através de contacts_get.

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

domains_check_availability — Verificar disponibilidade de domínio

Verifica se um ou mais nomes de domínio estão disponíveis para registo. Usa o endpoint de domínio único para um nome e o endpoint em massa para vários. Um domínio cujo TLD não seja suportado para registo não é sequer enviado para a verificação de disponibilidade — é devolvido 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 automaticamente para punycode.

Devolve — { results }, uma entrada por cada nome pedido:

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

  • Campo: price

    Significado: Para nomes available (normais e premium): o preço em USD para registar o domínio pelo prazo mais curto que o TLD permite — { amount, currency: "USD", pricedYears?, pricePerYear?, icannFee?, isPremium }. amount é o total a pagar por todo esse prazo; pricedYears indica quantos anos cobre. Não é comunicado qualquer preço antes de desconto nem preço "anterior". icannFee é a taxa ICANN (USD) já incluída em amount, devolvida separadamente para que a discriminação possa ser explicada; só aparece quando o TLD tem uma taxa.

  • Campo: pricePerYear

    Significado: Dentro de price: amount dividido por pricedYears, para que exista sempre um valor anual para comparação. Quando pricedYears é 1, é o preço real de um ano; acima disso, é uma média anual do prazo, não um prazo que possas comprar.

  • Campo: minRegisterPeriodInYears / maxRegisterPeriodInYears

    Significado: Para nomes available: o período de registo mais curto e mais longo que esse TLD realmente permite, como dois números simples. Usa-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 continua a ser bem-sucedida.

Só os nomes disponíveis têm preço; resultados taken/inválidos não incluem price nem priceUnavailableReason.

A maioria dos TLDs permite um ano, mas alguns não..ai, por exemplo, tem um mínimo de dois anos. Nesses casos, price.amount é o total para o prazo mínimo — não um preço de um ano que possas usar — e price.pricedYears indica 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 dá 79.98. Este é o total dividido pelo prazo, não um preço que possas pagar por um único ano (não é possível comprar um registo .ai de um ano). Mostra sempre amount juntamente com pricedYears ("$159.96 por 2 anos"), nunca amount sozinho. Para um TLD comum, pricedYears é 1 e pricePerYear é igual a amount.

domain_register — Registar domínio

Regista (compra) um domínio. Isto cobra um método de pagamento — o teu método guardado predefinido, fundos da conta ou um que escolhas — e é irreversível. Sequência recomendada: domains_check_availability → domain_register. Um domínio cujo TLD não seja suportado para registo é rejeitado imediatamente — antes de qualquer verificação de disponibilidade, preço ou cobrança.

years tem de estar dentro do período permitido pelo próprio TLD. O limite 1–10 abaixo é o limite externo em 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 que indica o intervalo permitido — antes de qualquer verificação de disponibilidade, preço ou cobrança — e o valor não é ajustado silenciosamente por ti:

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

Lê minRegisterPeriodInYears/maxRegisterPeriodInYears de domains_check_availability primeiro e escolhe um years dentro desse intervalo. A mesma verificação é executada novamente na chamada de confirmação (confirmationResponse: "accept"), pelo que nunca pode ser contornada através da confirmação.

Confirmação em duas etapas antes da cobrança. Chama primeiro com confirmationToken sem valor definido: a ferramenta calcula novamente o preço do domínio, resolve o método de pagamento, cria uma confirmação completa — prazo, discriminação do preço (incluindo qualquer taxa ICANN e se o domínio é premium), renovação automática, privacidade WHOIS, origem do pagamento e os contactos de registrante/admin/tech/billing (um contacto idêntico ao registrante é mostrado como "same as registrant") — e devolve status: "confirmation_required" com esse price e um confirmationToken novo. Nada é registado nem cobrado nesta chamada. A confirmação completa é o texto de resposta da ferramenta; mostra-o ao utilizador tal como está. Quando ele concordar, chama novamente com exatamente os mesmos argumentos mais este confirmationToken e confirmationResponse: "accept" para submeter a compra, ou confirmationResponse: "decline" para a cancelar — nada é cobrado em caso de recusa. O token está associado a estes argumentos exatos, ao preço apresentado e ao método de pagamento resolvido, e expira após pouco tempo: um token em falta, expirado, adulterado ou que já não corresponda na chamada de confirmação devolve simplesmente uma confirmação totalmente nova com um token novo — nunca um erro, nunca uma cobrança. Se não for possível determinar o preço em qualquer uma das chamadas, a ferramenta devolve status: "price_unavailable" em vez de um token e nunca cobra; tenta novamente mais tarde. Uma chamada confirmada devolve imediatamente status: "pending" e um operationId — o registo termina em segundo plano; verifica-o com async_operation_get.

Escolher um método de pagamento. Omite paymentMethodId para cobrar o método de pagamento guardado predefinido da conta, ou fundos da conta quando não existir uma predefinição utilizável — a confirmação indica a origem resolvida em paymentSource e no respetivo texto de resposta. Quando é omitido, a resposta também inclui paymentMethods: os métodos guardados da conta, cada um com um id e uma label de apresentação (por exemplo, "Card ···2584" ou "Account funds (USD 17.29)"), para que o cliente possa escolher outro — passa esse id de volta como paymentMethodId na chamada seguinte para o cobrar em vez disso. Um método expirado, ou um que não possa ser cobrado para esta compra (por exemplo, assinalado como não utilizável para uma cobrança não assistida), é rejeitado com um erro de validação que indica o motivo — não é gerado qualquer token e nada é cobrado. Se não puder ser usado qualquer método de pagamento — nenhum método guardado é utilizável e os fundos da conta não cobrem o preço, ou não foi possível ler os métodos guardados — a ferramenta devolve status: "payment_unavailable" com o motivo e os métodos guardados da conta, e nunca cobra; o cliente tem de 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 a registar, por exemplo example.com. Aceita Unicode (IDN) ou ASCII (A-label) — normalizado automaticamente para punycode.

  • Parâmetro: years

    Obrigatório: Sim

    Tipo e restrições: Período de registo em anos. 1–10 é o limite externo; o intervalo aceite é o do próprio TLD — vê 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 renova-se automaticamente no vencimento usando o método de pagamento predefinido da conta.

  • Parâmetro: privacy.level

    Obrigatório: Sim

    Tipo e restrições: high oculta os dados de contacto do registante do WHOIS público; public publica-os.

  • Parâmetro: privacy.userConsent

    Obrigatório: Sim

    Tipo e restrições: Booleano. Tem de confirmar que concordas com a definiçã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 contacto de atributos alargados (até 5); obrigatório apenas para certos TLDs, caso contrário omite ou usa null.

  • Parâmetro: paymentMethodId

    Obrigatório: Não

    Tipo e restrições: ID de um método de pagamento guardado a cobrar, obtido da lista paymentMethods de uma chamada anterior. Omite para aceitar o método de pagamento predefinido da conta (ou fundos quando não houver nenhuma predefinição utilizável).

  • Parâmetro: confirmationToken

    Obrigatório: Não

    Tipo e restrições: String, até 4096 caracteres. Token emitido pelo servidor devolvido por uma chamada anterior a domain_register para estes argumentos exatos. Omite na primeira chamada para uma nova tentativa de registo. Expira após pouco tempo e fica associado aos argumentos, preço e método de pagamento exatos para os quais foi emitido — reenvia-o sem alterações, juntamente com confirmationResponse, para agir sobre ele.

  • Parâmetro: confirmationResponse

    Obrigatório: Condicional

    Tipo e restrições: "accept" ou "decline". Só faz sentido juntamente com um confirmationToken válido. "accept" submete o registo (cobrado) mostrado nessa confirmação; "decline" cancela-o sem cobrar. Omite na primeira chamada.

Devolve — após a primeira chamada (nada cobrado), quando o cliente tem uma predefinição utilizável e não precisa de 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."
}

Devolve — após a primeira chamada com paymentMethodId omitido, incluindo adicionalmente os métodos guardados 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."
}

Juntamente com este JSON, o texto da resposta da ferramenta é a confirmação completa a mostrar ao utilizador — repete o domínio, o prazo e o preço acima, mais linhas para Auto-renew: on/off, WHOIS privacy: on/off, Payment source: <resolved method label>, e cada um dos contactos de registante/admin/tech/billing (nome, email, país — um contacto que corresponda ao registante aparece como "same as registrant"), seguido de instruções para a chamada seguinte. Para um prazo de vários anos, price.amount é o total para todo o prazo e price.pricePerYear é esse total dividido pelo prazo — por exemplo years: 5 em .com devolve { "amount": 48.52, "pricedYears": 5, "pricePerYear": 9.70 }, e example.ai com years: 2 devolve { "amount": 159.96, "pricedYears": 2, "pricePerYear": 79.98 }.

Uma entrada paymentMethods nunca inclui números de cartão, nomes do titular do cartão nem quaisquer detalhes de faturação/emissor para além de label — isExpired/offSessionForbidden (quando true) assinalam um método como não utilizável neste momento, e availableBalance/balanceCurrency só estão presentes na entrada Funds.

Devolve — após confirmationResponse: "accept" (registo submetido):

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

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

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

Devolve — se não puder ser usado nenhum método de pagamento, 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:

  • Estado: confirmation_required

    Significado: Pré-visualização — nada cobrado. Mostra o texto da resposta ao utilizador e depois volta a chamar com este confirmationToken e confirmationResponse. Também devolvido, com um token novo, quando um confirmationToken submetido está em falta, expirou, foi adulterado ou já não corresponde aos argumentos/preço/método de pagamento atuais — nunca é um erro.

  • Estado: cancelled

    Significado: A compra foi recusada (confirmationResponse: "decline"), por isso nada foi submetido.

  • Estado: pending

    Significado: Submetido; o registo está a ser concluído em segundo plano. Consulta async_operation_get com o operationId.

  • Estado: price_unavailable

    Significado: Não foi possível determinar o preço, por isso não foi emitido nenhum token nem cobrado nada. Tenta novamente mais tarde.

  • Estado: payment_unavailable

    Significado: Não existe nenhum método de pagamento utilizável para esta compra — nenhum método guardado pode ser cobrado e os fundos da conta não cobrem o preço (ou não foi possível ler os métodos guardados). Não foi emitido nenhum token nem cobrado nada. A note indica a causa real quando o cliente pode agir sobre ela — o saldo de fundos face 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 mantém-se genérica apenas quando não foi possível ler os métodos guardados; paymentMethods lista os métodos guardados da conta para que o cliente possa escolher, adicionar um método ou adicionar fundos.

operationId é uma string simples — passa-a para async_operation_get, que informa se o registo acaba por ser bem-sucedido ou falha. 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 indica o prazo, por isso mostra sempre os dois em conjunto. Quando o TLD inclui uma taxa ICANN, price.amount já a inclui e price.icannFee indica o valor da taxa para que possa ser explicado.

Prepara um ou mais links de pagamento da Spaceship para que possas comprar domínios na própria página de pagamento da Spaceship no teu navegador em vez de no chat. Nada é registado nem cobrado por esta chamada — revês e pagas na página, que é a etapa de confirmação. Usa isto quando pedes um link de pagamento, quando a compra direta no chat falhou, ou quando queres pagar com um método de pagamento que a compra no chat não consegue usar. Se uma tentativa de compra já puder ter sido concluída, verifica primeiro domains_list e pede um link apenas para domínios que realmente não estejam registados, ou arriscas-te a pagar duas vezes. Requer o acesso domains:billing.

As definições dadas no nível superior (years, autoRenew, contacts) aplicam-se a todos os itens. Um item que defina o seu próprio years, autoRenew ou contacts substitui-os apenas para esse domínio, e tudo o que deixar de fora é herdado (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 contactos acompanham o link e já ficam preenchidos como contactos do domínio quando o abres. Cada domínio só pode ser listado uma vez, e não existem entradas de pagamento, moeda ou privacidade WHOIS — a privacidade WHOIS mantém-se na predefiniçã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 única vez.

  • Parâmetro: items[].domain

    Obrigatório: Sim

    Tipo e restrições: Nome de domínio totalmente qualificado a 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: Contactos apenas para este domínio, como strings contactId (registrant, admin, tech, billing, attributes opcional); 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 definam o seu próprio valor. Tem de estar dentro do prazo permitido pelo TLD (minRegisterPeriodInYears/maxRegisterPeriodInYears de domains_check_availability); valores fora do intervalo são rejeitados com um erro que indica o intervalo permitido, não são ajustados. Quando nem este nem o item o definem, é usado o prazo mais curto do TLD.

  • Parâmetro: autoRenew

    Obrigatório: Não

    Tipo e restrições: Booleano, aplicado a todos os itens que não definam o seu próprio valor. A predefinição é true.

  • Parâmetro: contacts

    Obrigatório: Sim

    Tipo e restrições: Contactos como strings contactId, aplicados a todos os itens que não definam os seus próprios: registrant (obrigatório), admin, tech e billing (cada um assume por predefinição registrant), e attributes opcional (uma lista de até 5 IDs de contacto de atributos alargados, obrigatória apenas para certos TLDs). Obtém os IDs de contacts_list, ou guarda primeiro os dados com contacts_save.

Links por chamada. Um único link contém no máximo 10 domínios, por isso uma lista maior devolve vários links pela ordem do pedido — por exemplo, 15 domínios produzem dois links de 10 e 5. links[].domains indica que domínios cada link cobre.

Preço. Cada domínio inclui um preço estimadoprice (o preço final é mostrado na página de pagamento) ou um priceUnavailableReason quando não pode ser determinado. A ausência de uma 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 tem.

Os links são reutilizáveis. Um link não expira e pode ser aberto mais do que uma vez, por isso não o partilhes com mais ninguém.

Devolve

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

  • estado: links_ready

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

  • estado: partial

    Significado: Alguns domínios estão cobertos; os restantes são listados em failed, cada um com uma reason (por exemplo, indisponível, extensão não suportada, prazo não permitido, problema de contactos ou um link que não pôde ser criado).

  • estado: no_links

    Significado: Não foi possível preparar nenhum link. O resultado é assinalado como erro, failed indica porquê, e nada foi cobrado.

Depois de o cliente dizer que pagou, chama domains_list para o domínio para confirmar que está registado — não trates o link, por si só, como prova de compra.

domain_set_contacts — Definir contactos do domínio

Altera os contactos atribuídos a um domínio que possuis. 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 contacto de atributos alargados (até 5); obrigatório apenas para certos TLDs, caso contrário omite ou usa null.

Devolve

{ "verificationStatus": "verification" }

O verificationStatus devolvido reflete a verificação de email ICANN RAA: verification — o registante tem de confirmar o seu endereço de email (é enviado um email de confirmação); 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 um domínio ao nível do registrador. 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 predefinidos da Spaceship) ou custom (os teus próprios hosts).

  • Parâmetro: hosts

    Obrigatório: Condicional

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

Devolve

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

Voltar a aplicar o estado em que um domínio já se encontra (por exemplo, definir basic quando já está em basic) devolve um erro de validação em vez de um sucesso sem operação — trata isso como um resultado esperado, não como uma falha que exija nova tentativa.

Registos DNS

O domainName que estas ferramentas aceitam pode usar Unicode (IDN) ou ASCII (A-label) e é normalizado automaticamente para punycode; o suporte de TLD não é imposto aqui.

dns_records_get — Obter registos DNS

Obtém uma lista paginada de registos de recursos DNS de um domínio.

  • Parâmetro: domainName

    Obrigatório: Sim

    Tipo e restrições: O domínio cujos registos devem ser obtidos.

  • Parâmetro: take

    Obrigatório: Não

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

  • Parâmetro: skip

    Obrigatório: Não

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

  • Parâmetro: orderBy

    Obrigatório: Não

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

Devolve — { items, total }. Cada item é um registo conforme descrito em Formatos de registo, mais um campo opcional group que indica de onde vem o registo (custom — criado por ti, product — gerido por um produto Spaceship, personalNs — nameservers pessoais).

dns_records_save — Guardar registos DNS

Adiciona registos DNS personalizados ou atualiza o TTL dos existentes. Os registos são correspondidos sem distinção entre maiúsculas e minúsculas, exceto os registos TXT (sensíveis a maiúsculas e minúsculas).

  • Parâmetro: domainName

    Obrigatório: Sim

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

  • Parâmetro: records

    Obrigatório: Sim

    Tipo e restrições: 1–500 registos — vê Formatos de registo. 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.

Devolve — { "saved": <number> }, a contagem dos registos submetidos. Uma resposta com sucesso significa que todos os registos foram aceites; se algum falhar, toda a chamada devolve um erro.

dns_records_delete — Eliminar registos DNS

Elimina registos DNS personalizados. As eliminações não podem ser anuladas. Os registos são correspondidos sem distinção entre maiúsculas e minúsculas, exceto os registos TXT (sensíveis a maiúsculas e minúsculas).

  • Parâmetro: domainName

    Obrigatório: Sim

    Tipo e restrições: O domínio cujos registos devem ser eliminados.

  • Parâmetro: records

    Obrigatório: Sim

    Tipo e restrições: 1–500 registos que identificam registos existentes — os mesmos formatos que guardar, mas sem ttl.

Devolve — { "deleted": <number> }, a contagem dos registos submetidos. Se algum registo não puder ser correspondido, toda a chamada falha e nada é eliminado.

Formatos de registo

Todos os registos têm:

  • type — um dos 13 tipos suportados abaixo.

  • name — o nome do registo excluindo o domínio: usa @ para o próprio domínio (apex) e * para um wildcard.

  • ttl (apenas ao guardar, 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 carateres).

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

  • Tipo: TXT

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

  • Tipo: MX

    Campos: exchange — servidor de correio; preference — prioridade (0–65535, menor valor 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 .; opcional port (* ou _<1–65535>), scheme (tem de ser _https quando port está definido), svcParams.

  • Tipo: SVCB

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

Operações assíncronas

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

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

  • Parâmetro: operationId

    Obrigatório: Sim

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

Devolve

  • 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 extra 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 devolve um erro com um código e um detail legível por humanos a explicar o que correu mal — por exemplo, entrada inválida (um nome de domínio ou ID de contacto malformado), um domínio ou contacto 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, volta a ligar o Spaceship MCP e aprova o acesso que ele pedir.

É necessário um email válido