Spaceship MCP — Tools Reference

Spaceship MCP connects your AI assistant (such as Claude) to your Spaceship account. Through it, the assistant can check and register domains, manage domain contacts, and read or edit DNS records on your behalf — you just ask in plain language, and the assistant calls the right tools.

Getting started

You need a Spaceship account. When you add Spaceship MCP to your AI assistant, you'll be asked to sign in to Spaceship and grant the assistant access to your account. Which tools the assistant can use depends on the access you approve — if a tool is rejected because access wasn't granted, reconnect and approve the access it needs.

Tools at a glance

  • Tool: contacts_save

    What it does: Save contact details and get a contact ID

  • Tool: contacts_get

    What it does: Read a saved contact by its ID

  • Tool: domains_list

    What it does: List your domains, or look up one domain

  • Tool: domains_check_availability

    What it does: Check if domains are available to register

  • Tool: domain_register

    What it does: Register (buy) a domain — spends money

  • Tool: domain_set_contacts

    What it does: Assign contacts to a domain you own

  • Tool: dns_records_get

    What it does: Read DNS records for a domain

  • Tool: dns_records_save

    What it does: Add DNS records or update their TTL

  • Tool: dns_records_delete

    What it does: Delete DNS records

  • Tool: async_operation_get

    What it does: Check the status of a long-running operation

Common workflows

Several tools are designed to be used together: the output of one becomes the input of the next.

Register (buy) a domain

  1. domains_check_availability — check the name(s) you want. Only proceed when result is available; premium names include pricing in premiumPricing.

  2. contacts_save — save the contact details for the registration. Returns a contactId. Reuse one contactId for all roles or save several contacts.

  3. domain_register — register the domain, passing the contact ID(s) as contacts.registrant, contacts.admin, contacts.tech, and contacts.billing. This bills your account's default payment method and is irreversible. It returns immediately with an operationId and status: pending — registration finishes in the background.

  4. async_operation_get — pass the operationId from step 3 to check progress. Repeat until status becomes success or failed.

domains_check_availability ──▶ contacts_save ──▶ domain_register ──▶ async_operation_get
(available?) (contactId) (operationId) (pending → success/failed)

Update the contacts on a domain you own

  1. contacts_save — save the new contact details; returns a contactId (or reuse an existing one, readable via contacts_get).

  2. domain_set_contacts — assign the contact ID(s) to the domain. This completes immediately and returns a verificationStatus: verification means the registrant must confirm their email address before the change fully applies (an email is sent to them), success means it's already confirmed, and null means no confirmation is required for that domain.

Manage DNS records

  1. domains_list — find the domain you want to manage (or pass its name directly if you know it).

  2. dns_records_get — read the current records for the domain.

  3. dns_records_save or dns_records_delete — add, update, or remove records. Records returned by dns_records_get have the same shape the save and delete tools accept (delete just omits ttl), so the assistant can read, adjust, and write back. Matching is case-insensitive except for TXT records, which are case-sensitive.

Review your portfolio

  • domains_list — page through all your domains with sorting, or fetch a single domain by name. Each domain includes its expiration date, auto-renew setting, status, nameservers, privacy protection, and assigned contact IDs.

  • contacts_get — look up the details behind any contact ID you see on a domain.

Tool reference

Every tool returns its result as structured JSON. Long-running operations (currently only domain_register) return an operation ID to poll with async_operation_get; all other tools complete immediately.

Contacts

Contacts are the people or organizations attached to a domain registration (registrant, admin, tech, billing). A contact is referenced everywhere by its contact ID — a 27–32 character alphanumeric string.

contacts_save — Save Contact

Saves contact details and returns the generated contact ID. Validation of some fields (such as stateProvince and postalCode) depends on the selected country.

  • Parameter: firstName

    Required: Yes

    Type & constraints: String, 1–64 chars. May include hyphens and apostrophes.

  • Parameter: lastName

    Required: Yes

    Type & constraints: String, 1–64 chars. May include hyphens and apostrophes.

  • Parameter: email

    Required: Yes

    Type & constraints: Valid email address, max 254 chars.

  • Parameter: address1

    Required: Yes

    Type & constraints: Address line 1. String, 1–128 chars.

  • Parameter: city

    Required: Yes

    Type & constraints: String, 1–64 chars.

  • Parameter: country

    Required: Yes

    Type & constraints: Two-letter country code (ISO 3166-1 alpha-2), e.g. US.

  • Parameter: phone

    Required: Yes

    Type & constraints: International format +CountryCode.Number, e.g. +1.2025551234. Max 32 chars.

  • Parameter: organization

    Required: No

    Type & constraints: Organization/company name. 1–128 chars.

  • Parameter: address2

    Required: No

    Type & constraints: Address line 2. 1–128 chars.

  • Parameter: stateProvince

    Required: No

    Type & constraints: State/province name, 1–64 chars. May be required depending on the country.

  • Parameter: postalCode

    Required: No

    Type & constraints: 1–16 chars. May be required depending on the country.

  • Parameter: phoneExt

    Required: No

    Type & constraints: Phone extension, 1–16 chars.

  • Parameter: fax

    Required: No

    Type & constraints: Fax number, same +CountryCode.Number format, max 32 chars.

  • Parameter: faxExt

    Required: No

    Type & constraints: Fax extension, 1–16 chars.

  • Parameter: taxNumber

    Required: No

    Type & constraints: Tax number, 1–32 chars.

Returns

{ "contactId": "..." }

contactId (27–32 alphanumeric characters) is what you pass to domain_register, domain_set_contacts, and contacts_get.

contacts_get — Get Contact

Reads the details of a saved contact by its contact ID. (There is no list-all-contacts tool — contact IDs come from contacts_save or from the contacts field of domains_list results.)

  • Parameter: contactId

    Required: Yes

    Type & constraints: Contact ID, 27–32 alphanumeric characters.

Returns{ contact } with:

  • Field: firstName, lastName, email, address1, city, country, phone, postalCode

    Type: String

  • Field: organization, address2, stateProvince, phoneExt, fax, faxExt, taxNumber

    Type: String or null

Domains

domains_list — List Domains

Retrieves a paginated list of your domains. Pass domain to fetch a single domain by name instead (pagination and ordering are then ignored, and the result includes a note saying so if they were supplied).

  • Parameter: domain

    Required: No

    Type & constraints: Fully qualified domain name (ASCII/A-label) to fetch a single domain.

  • Parameter: take

    Required: No

    Type & constraints: Items per page, 1–100. Default 10.

  • Parameter: skip

    Required: No

    Type & constraints: Items to skip, 0 or more. Default 0.

  • Parameter: orderBy

    Required: No

    Type & constraints: Up to 8 sort keys: name, unicodeName, registrationDate, expirationDate; prefix with - for descending (e.g. -expirationDate).

Returns{ items, total } where each item describes a domain:

  • Field: name / unicodeName

    Meaning: Domain name in ASCII and Unicode form.

  • Field: isPremium

    Meaning: Whether the domain is a premium name.

  • Field: autoRenew

    Meaning: Whether auto-renew is enabled.

  • Field: registrationDate / expirationDate

    Meaning: Registration and expiration timestamps.

  • Field: lifecycleStatus

    Meaning: creating, registered, grace1, grace2, or redemption.

  • Field: verificationStatus

    Meaning: verification, success, failed, or null when not applicable.

  • Field: eppStatuses

    Meaning: Registry status codes (e.g. transfer locks).

  • Field: suspensions

    Meaning: Active suspensions, each with a reasonCode.

  • Field: privacyProtection

    Meaning: { level: "public" | "high", contactForm: boolean }.

  • Field: nameservers

    Meaning: { provider: "basic" | "custom", hosts: [...] }.

  • Field: contacts

    Meaning: Contact IDs: registrant, plus admin/tech/billing/attributes (may be null). Readable via contacts_get.

domains_check_availability — Check Domain Availability

Checks whether one or more domain names are available to register.

  • Parameter: domains

    Required: Yes

    Type & constraints: 1–20 fully qualified domain names (ASCII/A-label).

Returns{ results }, one entry per requested name:

  • Field: domain

    Meaning: The checked name.

  • Field: result

    Meaning: available, taken, invalidDomainName, tldNotSupported, or unexpectedError.

  • Field: premiumPricing

    Meaning: For premium names: list of { operation, price, currency } where operation is register, transfer, renew, or restore. Empty for regular names.

domain_register — Register Domain

Registers (buys) a domain. This bills your account's default payment method and is irreversible. Recommended sequence: domains_check_availabilitycontacts_savedomain_register. The tool returns immediately with a pending status; the registration itself finishes in the background — check it with async_operation_get.

  • Parameter: domain

    Required: Yes

    Type & constraints: Fully qualified domain name to register, e.g. example.com.

  • Parameter: years

    Required: Yes

    Type & constraints: Registration period in years, 1–10.

  • Parameter: autoRenew

    Required: Yes

    Type & constraints: Boolean. When true, the domain renews automatically at expiration using the account's default payment method.

  • Parameter: privacy.level

    Required: Yes

    Type & constraints: high hides the registrant's contact details from public WHOIS; public publishes them.

  • Parameter: privacy.userConsent

    Required: Yes

    Type & constraints: Boolean. Must confirm you agree to the selected privacy setting.

  • Parameter: contacts.registrant

    Required: Yes

    Type & constraints: Contact ID (from contacts_save).

  • Parameter: contacts.admin

    Required: Yes

    Type & constraints: Contact ID.

  • Parameter: contacts.tech

    Required: Yes

    Type & constraints: Contact ID.

  • Parameter: contacts.billing

    Required: Yes

    Type & constraints: Contact ID.

  • Parameter: contacts.attributes

    Required: No

    Type & constraints: Up to 5 extra contact IDs, required only for certain TLDs.

Returns

{
"operationId": "...",
"domain": "example.com",
"years": 1,
"status": "pending",
"note": "Registration of example.com submitted. ..."
}

Pass operationId to async_operation_get to check whether the registration succeeded.

domain_set_contacts — Set Domain Contacts

Changes the contacts assigned to a domain you own. Completes immediately (no operation ID).

  • Parameter: domainName

    Required: Yes

    Type & constraints: Fully qualified domain name (ASCII/A-label).

  • Parameter: registrant

    Required: Yes

    Type & constraints: Contact ID.

  • Parameter: admin

    Required: No

    Type & constraints: Contact ID, or null.

  • Parameter: tech

    Required: No

    Type & constraints: Contact ID, or null.

  • Parameter: billing

    Required: No

    Type & constraints: Contact ID, or null.

  • Parameter: attributes

    Required: No

    Type & constraints: Up to 5 contact IDs, or null.

Returns

{ "verificationStatus": "verification" }

verification — the registrant must confirm their email address (a confirmation email is sent); success — already confirmed; null — confirmation is not required for this domain.

DNS records

dns_records_get — Get DNS Records

Retrieves a paginated list of DNS resource records for a domain.

  • Parameter: domainName

    Required: Yes

    Type & constraints: The domain whose records to fetch.

  • Parameter: take

    Required: No

    Type & constraints: Items per page, 1–500. Default 100.

  • Parameter: skip

    Required: No

    Type & constraints: Items to skip, 0 or more. Default 0.

  • Parameter: orderBy

    Required: No

    Type & constraints: Up to 8 sort keys: type, -type, name, -name.

Returns{ items, total }. Each item is a record as described in Record shapes, plus an optional group field indicating where the record comes from (custom — created by you, product — managed by a Spaceship product, personalNs — personal nameservers).

dns_records_save — Save DNS Records

Adds custom DNS records or updates the TTL of existing ones. Records are matched case-insensitively, except TXT records (case-sensitive).

  • Parameter: domainName

    Required: Yes

    Type & constraints: The domain whose records to update.

  • Parameter: records

    Required: Yes

    Type & constraints: 1–500 records — see Record shapes. Each may include an optional ttl.

  • Parameter: force

    Required: No

    Type & constraints: Boolean. Skips the conflict-resolution check and forces the zone update.

Returns{ "saved": <number> }, the count of submitted records. A successful response means all records were accepted; if any record fails, the whole call returns an error instead.

dns_records_delete — Delete DNS Records

Deletes custom DNS records. Deletions cannot be undone. Records are matched case-insensitively, except TXT records (case-sensitive).

  • Parameter: domainName

    Required: Yes

    Type & constraints: The domain whose records to delete.

  • Parameter: records

    Required: Yes

    Type & constraints: 1–500 records identifying existing records — same shapes as save, but without ttl.

Returns{ "deleted": <number> }, the count of submitted records.

Record shapes

Every record has:

  • type — one of the 13 supported types below.

  • name — the record name excluding the domain: use @ for the domain itself (apex) and * for a wildcard.

  • ttl (save only, optional) — cache time in seconds, 60–3600.

Type-specific fields:

  • Type: A

    Fields: address — IPv4 address.

  • Type: AAAA

    Fields: address — IPv6 address.

  • Type: CNAME

    Fields: cname — canonical domain name (max 253 chars).

  • Type: ALIAS

    Fields: aliasName — canonical domain name; CNAME-like behavior for the apex, where CNAME isn't allowed.

  • Type: NS

    Fields: nameserver — nameserver name.

  • Type: PTR

    Fields: pointer — domain name for the given IP address.

  • Type: TXT

    Fields: value — text value (matched case-sensitively).

  • Type: MX

    Fields: exchange — mail server; preference — priority (0–65535, lower preferred).

  • Type: CAA

    Fields: flag0 or 128 (critical bit); tagissue, issuewild, or iodef; value — CA identifier with optional parameters.

  • Type: SRV

    Fields: service (e.g. _sip); protocol (e.g. _tcp); priority and weight (0–65535); port (1–65535); target — server domain name.

  • Type: TLSA

    Fields: usage, selector, matching (each 0–255); port* or _<165535>; protocol (e.g. _tcp); associationData — certificate hash or data.

  • Type: HTTPS

    Fields: svcPriority (0–65535; 0 = AliasMode); targetName — FQDN or .; optional port (* or _<165535>), scheme (must be _https when port is set), svcParams.

  • Type: SVCB

    Fields: svcPriority (0–65535; 0 = AliasMode); targetName — FQDN or .; optional port, scheme (e.g. _tcp), svcParams.

Async operations

async_operation_get — Get Async Operation Status

Checks a long-running operation started by another tool (currently domain_register). Call it with the operationId that tool returned, and repeat until status is success or failed.

  • Parameter: operationId

    Required: Yes

    Type & constraints: Alphanumeric string, max 36 chars, returned by the tool that started the operation.

Returns

  • Field: operationId

    Meaning: The polled operation.

  • Field: status

    Meaning: pending, success, or failed.

  • Field: type

    Meaning: Operation type, or null.

  • Field: details

    Meaning: Extra details about the operation, or null.

  • Field: createdAt / modifiedAt

    Meaning: When the operation was created / last updated (modifiedAt may be null).

Errors

When a call fails, the tool returns an error with a code and a human-readable detail explaining what went wrong — for example invalid input (a malformed domain name or contact ID), a domain or contact that doesn't exist, or a conflict with the current state. If a tool is rejected because the assistant wasn't granted access to it, reconnect Spaceship MCP and approve the access it asks for.

A valid email is required