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

Primeiros passos

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.

Resumo das ferramentas

  • 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

Contactos: referenciados por ID

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.

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

  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. Tem em conta 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 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.

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

  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 não definido: (token + (pending →
min/maxRegisterPeriod) confirmação, accept: operationId, success/failed)
confirmationToken, pending)
sem cobrança)

Atualiza os contactos de um domínio que possuis

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

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

Gerir registos DNS

  1. domains_list — encontra o domínio que queres gerir (ou passa o nome diretamente 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 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.

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

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.

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 cadeia 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: 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 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 (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
}

Domínios

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ínios

Obté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í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 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ínio

Regista (compra) um domínio. Isto cobra o método de pagamento predefinido da tua conta e é irreversível. Sequência recomendada: domains_check_availabilitydomain_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 110 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 210 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. 110 é 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í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 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í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á é 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.

Registos DNS

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

Formatos de registo

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: flag0 ou 128 (bit crítico); tagissue, 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 _<165535>; protocol (por exemplo _tcp); associationData — hash do certificado ou dados.

  • Tipo: HTTPS

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

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 à mesma, volta a ligar o Spaceship MCP e aprova o acesso que ele pedir.

É necessário um email válido