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, 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, encontra o Spaceship no diretório de conectores e adiciona-o. O Claude da Anthropic é atualmente o cliente com o qual verificámos que o Spaceship MCP funciona.
NB: Embora o registo de domínios através do Spaceship MCP seja totalmente suportado no geral, esta capacidade ainda não está disponível especificamente através do conector Claude. A pesquisa, a consulta de domínios, a gestão de contactos e a gestão de registos DNS já estão disponíveis e verificadas como funcionais com o Claude hoje.
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 no 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 precisa.
Ferramenta: contacts_save
O que faz: Guardar os detalhes do contacto e obter um ID de contacto
Ferramenta: contacts_get
O que faz: Lê um contacto guardado pelo respetivo ID
Ferramenta: contacts_list
O que faz: Lista todos os contactos guardados para encontrares e reutilizares um
Ferramenta: domains_list
O que faz: Lista os teus domínios ou procura um domínio
Ferramenta: domains_check_availability
O que faz: Verifica 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_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: Elimina registos DNS
Ferramenta: async_operation_get
O que faz: Verifica o estado de uma operação de longa duração
Sempre que um contacto é obrigatório (domain_register, 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 é 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 caracteres alfanuméricos. Basta passá-la de volta onde um contacto é aceite.
Várias ferramentas foram concebidas para serem usadas em conjunto: o resultado de uma torna-se a entrada da seguinte.
contacts_save — guardar os contactos do titular, admin, técnico e faturação (se ainda não tiveres os respetivos IDs) e manter 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. Tem em conta 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 não definido para obteres status: confirmation_required, um confirmationToken novo e o price que será cobrado. Nada é faturado. 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 do 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 predefinido da conta e é irreversível. Devolve imediatamente status: pending e um operationId — o registo termina em segundo plano. Para cancelar em vez disso, chama novamente com o mesmo confirmationToken e confirmationResponse: "decline" — nada é cobrado. O token expira após pouco tempo e está associado exatamente aos argumentos e ao preço para os quais foi emitido; se estiver em falta, tiver expirado ou já não corresponder, a chamada devolve antes 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.
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 não definido: (token + (pending →min/maxRegisterPeriod) confirmação, accept: operationId, success/failed)confirmationToken, pending)sem cobrança)
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 seu 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 do Spaceship com provider: "basic" (sem hosts), ou aponta-o para os teus próprios 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 o nome diretamente 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 a mesma estrutura que as ferramentas de guardar e eliminar aceitam (a eliminação 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 distinguem maiúsculas de 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.
Cada ferramenta devolve o seu 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 cadeia 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: Cadeia, 1–64 caracteres. Pode incluir hífenes e apóstrofos.
Parâmetro: lastName
Obrigatório: Sim
Tipo e restrições: Cadeia, 1–64 caracteres. Pode incluir hífenes e apóstrofos.
Parâmetro: email
Obrigatório: Sim
Tipo e restrições: Endereço de email válido, máximo de 254 caracteres.
Parâmetro: address1
Obrigatório: Sim
Tipo e restrições: Linha de endereço 1. Cadeia, 1–128 caracteres.
Parâmetro: city
Obrigatório: Sim
Tipo e restrições: Cadeia, 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áximo de 32 caracteres.
Parâmetro: organization
Obrigatório: Não
Tipo e restrições: Nome da organização/empresa. 1–128 caracteres.
Parâmetro: address2
Obrigatório: Não
Tipo e restrições: Linha de endereço 2. 1–128 caracteres.
Parâmetro: stateProvince
Obrigatório: Não
Tipo e restrições: Nome do estado/província, 1–64 caracteres. Pode ser obrigatório dependendo do país.
Parâmetro: postalCode
Obrigatório: Não
Tipo e restrições: 1–16 caracteres. Pode ser obrigatório dependendo do país.
Parâmetro: phoneExt
Obrigatório: Não
Tipo e restrições: 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 a domain_register, 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 (pelo 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 contactos sem uma chamada adicional. 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 a contacts_get, domain_register 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) — de qualquer forma, a ferramenta normaliza automaticamente o nome para punycode antes da utilização. domains_check_availability e domain_register exigem adicionalmente um TLD que o 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 o rejeitam com base no suporte do TLD.
domains_list — Listar domíniosObtém uma lista paginada dos teus domínios. Passa domain para obteres antes um único domínio pelo nome (a paginação e a ordenação são então ignoradas, e o resultado inclui uma note a indicá-lo, caso tenham 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 de domínio em formato ASCII e Unicode.
Campo: isPremium
Significado: Indica se o domínio é um nome premium.
Campo: autoRenew
Significado: Indica 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 (podem 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 a obtenção de um único domínio.
domains_check_availability — Verificar disponibilidade do 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 por o 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 anterior ao 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 o método de pagamento predefinido da tua conta 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ê primeiro minRegisterPeriodInYears/maxRegisterPeriodInYears de domains_check_availability 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, 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 registrant/admin/tech/billing (um contacto idêntico ao registrant é mostrado como "same as registrant") — e devolve status: "confirmation_required" com esse price e um novo confirmationToken. 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 e ao preço indicado 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.
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 em 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 na expiração 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 registrant 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 estendidos (até 5); obrigatório apenas para determinados TLDs, caso contrário omite ou usa null.
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 está associado aos argumentos exatos e ao preço 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) apresentado nessa confirmação; "decline" cancela-o sem cobrança. Omite na primeira chamada.
Devolve — após a primeira chamada (nada cobrado):
{"domain": "example.com","years": 1,"status": "confirmation_required","price": {"amount": 9.08,"currency": "USD","pricedYears": 1,"pricePerYear": 9.08,"icannFee": 0.2,"isPremium": false},"confirmationToken": "v1.eyJ2IjoxLCJwIjoi...aWQiOjF9.9F3q7z_5c8Vb...","note": "Nothing has been charged yet. Show the confirmation to the user and, once they agree, call domain_register again with this confirmationToken and confirmationResponse=\"accept\" to complete the purchase, or confirmationResponse=\"decline\" to cancel."}
Juntamente com este JSON, o texto da resposta da ferramenta é a confirmação completa a mostrar ao utilizador — repete o domínio, o período e o preço acima, além de linhas para Auto-renew: on/off, WHOIS privacy: on/off, Payment source: Spaceship account funds, e para 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 período de vários anos, price.amount é o total para todo o período e price.pricePerYear é esse total dividido pelo período — por exemplo, years: 5 em .com devolve { "amount": 48.52, "pricedYears": 5, "pricePerYear": 9.70 }, e example.ai com years: 2 devolve { "amount": 159.96, "pricedYears": 2, "pricePerYear": 79.98 }.
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."}
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 atuais — nunca como 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 foi feita qualquer cobrança. Tenta novamente mais tarde.
operationId é uma string simples — passa-a a async_operation_get, que indica 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 período e price.pricedYears indica o período, 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 montante da taxa para que possa ser explicado.
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 estendidos (até 5); obrigatório apenas para determinados 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á é basic) devolve um erro de validação em vez de um sucesso sem efeito — trata isso como um resultado esperado, não como uma falha a repetir.
O domainName que estas ferramentas aceitam suporta 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 — ver 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 bem-sucedida significa que todos os registos foram aceites; se algum registo falhar, toda a chamada devolve antes 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 em 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.
Cada registo tem:
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 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 caracteres).
Tipo: ALIAS
Campos: aliasName — nome de domínio canónico; comportamento semelhante a CNAME para o apex, onde CNAME não é permitido.
Tipo: NS
Campos: nameserver — nome do nameserver.
Tipo: PTR
Campos: pointer — nome de domínio para o endereço IP indicado.
Tipo: TXT
Campos: value — valor de texto (correspondido com distinção entre maiúsculas e minúsculas).
Tipo: MX
Campos: exchange — servidor de email; preference — prioridade (0–65535, menor é preferível).
Tipo: CAA
Campos: flag — 0 ou 128 (bit crítico); tag — issue, issuewild, ou iodef; value — identificador de CA com parâmetros opcionais.
Tipo: SRV
Campos: service (por exemplo _sip); protocol (por exemplo _tcp); priority e weight (0–65535); port (1–65535); target — nome de domínio do servidor.
Tipo: TLSA
Campos: usage, selector, matching (cada um 0–255); port — * ou _<1–65535>; protocol (por exemplo _tcp); associationData — hash do certificado ou dados.
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: Cadeia alfanumérica, máximo de 36 caracteres, 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 à mesma, volta a ligar o Spaceship MCP e aprova o acesso que ele pedir.