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.
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.
Os acordos e políticas que se aplicam ao Spaceship MCP e a tudo o que comprares através dele:
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
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.
Várias ferramentas foram concebidas para serem usadas em conjunto: o resultado de uma torna-se a entrada da seguinte.
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.
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.
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.
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.
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.
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.
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.
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 pagaresmin/maxRegisterPeriod) cada; sem cobrança destachamada)
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.
domains_list — encontra o domínio e vê os seus nameservers atuais ({ provider, hosts }).
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.
domains_list — encontra o domínio que queres gerir (ou passa diretamente o nome, se o souberes).
dns_records_get — lê os registos atuais do domínio.
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.
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.
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.
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 contactoGuarda 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 contactoLê 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 contactosLista 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}
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íniosObté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ínioVerifica 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ínioRegista (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.
domain_purchase_link — Obter links de compra de domíniosPrepara 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ínioAltera 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ínioAltera 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.
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 DNSObté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 DNSAdiciona 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 DNSElimina 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.
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.
async_operation_get — Obter estado da operação assíncronaVerifica 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).
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.