spaceship-mcp
An MCP server that lets AI clients manage a Spaceship account — domains, DNS, contacts, nameservers, SellerHub listings, and async operations — through natural language.
List and inspect domains, check availability/pricing, and view registration, expiration, privacy, nameserver, and contact details.
Register, renew, restore, and transfer domains; poll async operations and transfer status.
List, bulk save/delete, and create type-specific DNS records: A, AAAA, ALIAS, CAA, CNAME, HTTPS, MX, NS, PTR, SRV, SVCB, TLSA, TXT.
Compare expected vs actual DNS records with DNS alignment checks.
Update nameservers, auto-renew, transfer lock, auth/EPP codes, WHOIS privacy, email protection, and domain contacts.
Create/read contact profiles and save/read TLD-specific contact attributes.
Manage personal/vanity nameservers and glue records.
Manage SellerHub marketplace listings, pricing, checkout links, and verification records.
Use guided MCP prompts and toolset filtering to limit exposed capabilities.
Provides tools for interacting with the Spaceship API to manage domains, DNS records, contacts, WHOIS privacy, marketplace listings, SellerHub sale listings, and domain lifecycle operations such as registration, renewal, transfer, and restoration.
Click on "Deploy Server".
Wait a few minutes for the server to deploy. Once ready, it will show a "Started" state.
In the chat, type
@followed by the MCP server name and your instructions, e.g., "@spaceship-mcp add a TXT record at _vercel.example.com with value vc-domain-verify=abc123"
That's it! The server will respond to your query, and you can continue using it as needed.
Here is a step-by-step guide with screenshots.
spaceship-mcp
A community-built Model Context Protocol (MCP) server for the Spaceship API. Manage domains, DNS records, contacts, marketplace listings, and more — all through natural language via any MCP-compatible AI client.
Note: This is an unofficial, community-maintained project and is not affiliated with or endorsed by Spaceship.
This repo started from BartWaardenburg/spaceship-mcp (MIT) and isn't published to npm. The npx -y spaceship-mcp commands further down install the upstream package, which doesn't have the changes below, so run this one from source instead (see Run From Source).
Change from upstream | Why |
| Upstream replaced every TXT at the name, so adding a second Vercel |
A save that the API rejects after the old records were deleted puts those records back | Upstream left the name empty when the write failed |
| Keeps the key out of client config files, and the server still starts without a 1Password prompt |
No npm update check at startup | The check pointed at the upstream package |
Run From Source
git clone https://github.com/bearded-giant/spaceship-mcp.git
cd spaceship-mcp
pnpm install
pnpm buildThen register it with your client. For Claude Code, with the key stored in 1Password and only the DNS tools turned on:
claude mcp add -s user spaceship \
-e SPACESHIP_API_KEY=op://<vault>/spaceship-api/username \
-e SPACESHIP_API_SECRET=op://<vault>/spaceship-api/credential \
-e SPACESHIP_TOOLSETS=dns \
-- node <repo-root>/dist/index.jsPlain key values work too if you don't use 1Password. Or export SPACESHIP_API_KEY and SPACESHIP_API_SECRET in the shell that launches Claude Code and leave them out of the -e flags; the server inherits the client's environment, and an -e value overrides the shell's.
Related MCP server: spaceship-mcp
Add To Your Editor
CLI one-liners — the fastest way to get started. Pick your tool:
Claude Code
claude mcp add --scope user spaceship-mcp \
--env SPACESHIP_API_KEY=your-key \
--env SPACESHIP_API_SECRET=your-secret \
-- npx -y spaceship-mcpCodex CLI (OpenAI)
codex mcp add spaceship-mcp \
--env SPACESHIP_API_KEY=your-key \
--env SPACESHIP_API_SECRET=your-secret \
-- npx -y spaceship-mcpGemini CLI (Google)
gemini mcp add spaceship-mcp -- npx -y spaceship-mcpSet environment variables SPACESHIP_API_KEY and SPACESHIP_API_SECRET separately via ~/.gemini/settings.json.
VS Code (Copilot)
Open the Command Palette (Cmd+Shift+P / Ctrl+Shift+P) > MCP: Add Server > select Command (stdio).
Or add to .vscode/mcp.json in your project directory:
{
"servers": {
"spaceship-mcp": {
"type": "stdio",
"command": "npx",
"args": ["-y", "spaceship-mcp"],
"env": {
"SPACESHIP_API_KEY": "your-key",
"SPACESHIP_API_SECRET": "your-secret"
}
}
}
}Cursor
Add to .cursor/mcp.json (project-level) or ~/.cursor/mcp.json (global):
{
"mcpServers": {
"spaceship-mcp": {
"command": "npx",
"args": ["-y", "spaceship-mcp"],
"env": {
"SPACESHIP_API_KEY": "your-key",
"SPACESHIP_API_SECRET": "your-secret"
}
}
}
}Supported Clients
This MCP server works with any client that supports the Model Context Protocol, including:
Client | Easiest install |
One-liner: | |
Codex CLI (OpenAI) | One-liner: |
Gemini CLI (Google) | One-liner: |
VS Code (Copilot) | Command Palette: |
JSON config file | |
JSON config file | |
JSON config file | |
UI settings | |
JSON settings file |
Claude Desktop / Cowork
Cowork runs inside Claude Desktop and uses the same connected MCP servers and permissions. Configure once in Claude Desktop, then the server is available in Cowork.
Add the following to your Claude Desktop config file:
Platform | Config file |
macOS |
|
Windows |
|
{
"mcpServers": {
"spaceship-mcp": {
"command": "npx",
"args": ["-y", "spaceship-mcp"],
"env": {
"SPACESHIP_API_KEY": "your-key",
"SPACESHIP_API_SECRET": "your-secret"
}
}
}
}Windsurf / Cline / Zed
Windsurf — add to ~/.codeium/windsurf/mcp_config.json:
{
"mcpServers": {
"spaceship-mcp": {
"command": "npx",
"args": ["-y", "spaceship-mcp"],
"env": {
"SPACESHIP_API_KEY": "your-key",
"SPACESHIP_API_SECRET": "your-secret"
}
}
}
}Cline — open Settings > MCP Servers > Edit, then add the same mcpServers block shown above.
Zed — add to your Zed settings (~/.zed/settings.json on macOS, ~/.config/zed/settings.json on Linux):
{
"context_servers": {
"spaceship-mcp": {
"command": "npx",
"args": ["-y", "spaceship-mcp"],
"env": {
"SPACESHIP_API_KEY": "your-key",
"SPACESHIP_API_SECRET": "your-secret"
}
}
}
}Docker
docker build -t spaceship-mcp .
docker run -i --rm \
-e SPACESHIP_API_KEY=your-key \
-e SPACESHIP_API_SECRET=your-secret \
spaceship-mcpop:// references don't resolve inside the container, since it has no 1Password CLI, so pass plain values here.
Generic MCP Server Config
Use this as the baseline in any host:
Command:
npxArgs:
["-y", "spaceship-mcp"]Required env vars:
SPACESHIP_API_KEY,SPACESHIP_API_SECRETOptional env vars:
SPACESHIP_CACHE_TTL,SPACESHIP_MAX_RETRIES,SPACESHIP_TOOLSETS(see Configuration)
Host key mapping:
Host | Top-level key | Notes |
VS Code |
| Add |
Claude Desktop / Cursor / Windsurf / Cline |
| Same command/args/env block |
Zed |
| Same command/args/env block |
Codex CLI (TOML) |
| Uses TOML, shown below |
Codex CLI (TOML config alternative)
If you prefer editing ~/.codex/config.toml directly:
[mcp_servers.spaceship-mcp]
command = "npx"
args = ["-y", "spaceship-mcp"]
env = { "SPACESHIP_API_KEY" = "your-key", "SPACESHIP_API_SECRET" = "your-secret" }Other MCP Clients
For any MCP-compatible client, use this server configuration:
Command:
npxArgs:
["-y", "spaceship-mcp"]Environment variables:
SPACESHIP_API_KEYandSPACESHIP_API_SECRET
Claude Ecosystem Notes
Claude currently has multiple MCP-related concepts that are easy to mix up:
Local MCP servers (Claude Desktop): defined in
claude_desktop_config.jsonand started on your machine (docs).Cowork: reuses the MCP servers connected in Claude Desktop (docs).
Connectors: remote MCP integrations managed in Claude (docs).
Cowork plugins: Claude-specific workflow packaging (instructions + tools/data integrations) (docs). Useful in Claude, but not portable as a generic MCP server config for other agent clients.
Verified against vendor docs on 2026-03-05.
Terminology
What is portable across hosts:
MCP server runtime settings (
command,args,env)Transport model (
stdiocommand server)Tool names and tool schemas exposed by this server
What is host/vendor-specific (not portable as-is):
Host config key names (
servers,mcpServers,context_servers,mcp_servers)Host UX/workflows for adding servers (CLI commands, UI menus, settings paths)
Anthropic-specific concepts such as Claude Desktop local MCP servers, Claude Connectors via remote MCP, and Claude Code plugins used in Cowork workflows
Features
48 tools across 8 categories covering the full Spaceship API
13 DNS record types with dedicated, type-safe creation tools (A, AAAA, ALIAS, CAA, CNAME, HTTPS, MX, NS, PTR, SRV, SVCB, TLSA, TXT)
Complete domain lifecycle — register, renew, transfer, and restore domains
SellerHub integration — list domains for sale and generate checkout links
DNS alignment analysis — compare expected vs actual records to catch misconfigurations
WHOIS privacy and contact management with TLD-specific attribute support
Input validation via Zod schemas on every tool for safe, predictable operations
8 MCP Prompts — 5 guided workflows and 3 with argument auto-complete
Response caching with configurable TTL and automatic invalidation on writes
Rate limit handling with exponential backoff and
Retry-Afterheader supportToolset filtering to expose only the tool categories you need
Actionable error messages with context-aware recovery suggestions
Docker support for containerized deployment
Unit tests covering the API client and every tool
Configuration
Required
Variable | Description |
| Your Spaceship API key, or a 1Password reference like |
| Your Spaceship API secret, or a 1Password reference like |
Generate your credentials in the Spaceship API Manager.
Values starting with op:// are read through the 1Password CLI (op read) on the first API call, not at startup, so the server starts without a 1Password prompt and only asks once a tool actually hits the API. You need op installed and signed in.
Optional
Variable | Description | Default |
| Response cache lifetime in seconds, applied to every cached endpoint. Set to |
|
| Maximum retry attempts for rate-limited (429) requests with exponential backoff. |
|
| Comma-separated list of tool categories to enable (see Toolset Filtering). | All toolsets |
API Key Setup
Creating Your API Key
Log in to your Spaceship account
Navigate to API Manager (direct link)
Click New API key
Give the key a descriptive name (e.g. "MCP Server")
Select the scopes you need (see below)
Copy both the API key and API secret — the secret is only shown once
Available Scopes
Each scope controls access to a specific part of the Spaceship API. When creating your key, enable only the scopes you need.
Scope | Access |
| List domains, check availability, view domain details and settings |
| Modify domain settings (nameservers, auto-renew, contacts, privacy) |
| Register, renew, restore, and transfer domains (financial operations) |
| Transfer lock, auth codes, and transfer status |
| Read saved contact profiles and attributes |
| Create and update contact profiles and attributes |
| List DNS records for your domains |
| Create, update, and delete DNS records |
| View marketplace listings and verification records |
| List/delist domains for sale, update pricing, generate checkout links |
| Poll status of async operations (registration, renewal, transfer) |
Scopes Per Feature
The table below shows which scopes are required for each group of tools.
Feature | Tools | Required scopes |
DNS Records |
|
|
|
| |
Domain Info |
|
|
Domain Settings |
|
|
Domain Lifecycle |
|
|
Transfer |
|
|
Contacts |
|
|
|
| |
Personal NS |
|
|
|
| |
SellerHub |
|
|
|
| |
Async Operations |
|
|
Analysis |
|
|
Recommended Scope Presets
Full access — enable everything for unrestricted use:
domains:read domains:write domains:billing domains:transfer
contacts:read contacts:write
dnsrecords:read dnsrecords:write
sellerhub:read sellerhub:write
asyncoperations:readDNS management only — just read/write DNS records:
dnsrecords:read dnsrecords:writeRead-only — browse domains and records without making changes:
domains:read contacts:read dnsrecords:read sellerhub:read asyncoperations:readAvailable Tools
DNS Records
Tool | Description |
| List all DNS records for a domain with pagination |
| Save (upsert) DNS records — replaces records with the same name and type |
| Delete DNS records by name and type |
Type-Specific Record Creation
Each DNS record type has a dedicated tool with type-safe parameters and validation.
Tool | Description |
| Create an A record (IPv4 address) |
| Create an AAAA record (IPv6 address) |
| Create an ALIAS record (CNAME flattening at zone apex) |
| Create a CAA record (Certificate Authority Authorization) |
| Create a CNAME record (canonical name) |
| Create an HTTPS record (SVCB-compatible) |
| Create an MX record (mail exchange) |
| Create an NS record (nameserver delegation) |
| Create a PTR record (reverse DNS) |
| Create an SRV record (service locator) |
| Create an SVCB record (general service binding) |
| Create a TLSA record (DANE/TLS certificate association) |
| Create a TXT record (text data) |
Domain Management
Tool | Description |
| List all domains in the account with pagination |
| Get detailed domain information |
| Check availability for up to 20 domains at once |
| Update nameservers for a domain |
| Toggle auto-renewal for a domain |
| Toggle transfer lock for a domain |
| Get the transfer auth/EPP code |
Domain Lifecycle
Tool | Description |
| Register a new domain (financial operation, async) |
| Renew a domain registration (financial operation, async) |
| Restore a domain from redemption grace period (financial operation, async) |
| Transfer a domain to Spaceship (financial operation, async) |
| Check the status of a domain transfer |
| Poll the status of an async operation by its operation ID |
Contacts & Privacy
Tool | Description |
| Create or update a reusable contact profile |
| Retrieve a saved contact by ID |
| Save TLD-specific contact attributes (e.g. tax IDs) |
| Retrieve all stored contact attributes |
| Update domain contacts (registrant, admin, tech, billing) |
| Set WHOIS privacy level (high or public) |
| Toggle contact form display in WHOIS |
Personal Nameservers
Tool | Description |
| List vanity/glue nameservers for a domain |
| Get details of a personal nameserver by hostname |
| Create or update a personal nameserver (glue record) |
| Delete a personal nameserver |
SellerHub
Tool | Description |
| List domains for sale on the marketplace |
| List a domain for sale with pricing |
| Get listing details |
| Update listing display name, description, and pricing |
| Remove a listing from the marketplace |
| Generate a buy-now checkout link for a listing |
| Get DNS verification records for a listing |
Analysis
Tool | Description |
| Compare expected vs actual DNS records to detect missing or unexpected entries |
MCP Prompts
Prompts provide guided workflows that clients can present as slash commands or quick actions.
Guided Workflows
Prompt | Description |
| Register and configure a new domain (availability check, registration, DNS, privacy) |
| Health check for an existing domain (status, DNS, privacy, auto-renew, contacts) |
| Configure email DNS records for Google Workspace, Microsoft 365, Fastmail, or a custom provider |
| Step-by-step guide to migrate DNS records to Spaceship |
| List a domain on the SellerHub marketplace with pricing and checkout link |
Auto-Complete Prompts
These prompts support argument auto-complete for domain names and common values:
Prompt | Description |
| List DNS records with domain and record type auto-complete |
| Set WHOIS privacy with domain and level auto-complete |
| Update nameservers with domain and provider auto-complete |
Toolset Filtering
Reduce context window usage by enabling only the tool categories you need. Set the SPACESHIP_TOOLSETS environment variable to a comma-separated list:
SPACESHIP_TOOLSETS=dns,domainsToolset | Tools included |
| Domain management and lifecycle tools |
| DNS records, record creators, and analysis |
| Contact and privacy management |
| Privacy management (same tools as |
| Personal nameserver management |
| SellerHub marketplace tools |
| Domain availability checking |
When not set, all toolsets are enabled. Invalid names are ignored; if all names are invalid, all toolsets are enabled as a fallback.
Security Notes
Trust model: Any prompt or agent allowed to call this MCP server can execute Spaceship API actions with the configured credentials.
Least-privilege credentials: Use separate Spaceship API keys per environment/team/use case and enable only the scopes you need (see Available Scopes).
Write-action approvals: Enable host-side approvals for mutating tools (
register_domain,create_*,update_*,delete_*,save_*,set_*, and lifecycle operations).Team config governance: Keep shared MCP config in version control, require review for changes to command/args/env/toolset filtering, and keep secrets in a vault or host secret manager (not in plain-text repo files).
Example Usage
Once connected, you can interact with the Spaceship API using natural language:
"List all my domains"
"Check if example.com is available for registration"
"Create an A record for api.example.com pointing to 203.0.113.10"
"Set up MX records for example.com to use Google Workspace"
"Enable WHOIS privacy on example.com"
"Check if my DNS records for example.com match what I expect"
"List my domains for sale on SellerHub"
"Transfer example.com to Spaceship"
Community
Support: SUPPORT.md
Security reporting: SECURITY.md
Contributing guidelines: CONTRIBUTING.md
Bug reports and feature requests: Issues
Development
# Install dependencies
pnpm install
# Run in development mode
pnpm dev
# Build for production
pnpm build
# Run tests
pnpm test
# Type check
pnpm typecheckProject Structure
src/
index.ts # Entry point (stdio transport)
server.ts # MCP server setup, toolset filtering, feature registration
spaceship-client.ts # Spaceship API HTTP client with caching and retry
cache.ts # TTL-based in-memory response cache
schemas.ts # Shared Zod validation schemas
types.ts # TypeScript interfaces
tool-result.ts # Error formatting with recovery suggestions
prompts.ts # MCP Prompts (8 prompts, with argument auto-complete)
credentials.ts # Resolves op:// credential references via the 1Password CLI
dns-utils.ts # DNS record formatting utilities
tools/
dns-records.ts # List, save, delete DNS records
dns-record-creators.ts # 13 type-specific DNS record creation tools
domain-management.ts # Domain listing, settings, nameservers
domain-lifecycle.ts # Registration, renewal, transfer, restore
contacts-privacy.ts # Contact profiles and WHOIS privacy
personal-nameservers.ts # Vanity/glue nameserver management
sellerhub.ts # Marketplace listing and checkout tools
analysis.ts # DNS alignment analysisRequirements
Node.js >= 20
A Spaceship account with API credentials
License
MIT - see LICENSE for details.
Available Tools
48 toolscheck_dns_alignmentCheck DNS AlignmentARead-only
Compare a list of expected DNS records against the actual records configured in Spaceship. Returns which expected records are missing and which unexpected records exist. Useful for verifying DNS configurations match your infrastructure requirements.
Inputs: domain (required), expectedRecords (required), includeTtlInMatch, includeUnexpectedOfTypes.
check_domain_availabilityCheck Domain AvailabilityARead-only
Check if one or more domains are available for registration and show pricing. Provide up to 20 domains to check at once.
Inputs: domains (required).
create_aaaa_recordCreate AAAA RecordADestructiveIdempotent
Create an AAAA record (IPv6 address) for a domain. WARNING: This replaces ALL existing AAAA records with the same name — previous AAAA records for this name will be overwritten, not merged. Use list_dns_records first to check for existing records.
Inputs: name (required), domain (required), address (required), ttl.
create_alias_recordCreate ALIAS RecordADestructiveIdempotent
Create an ALIAS record (CNAME flattening at zone apex) for a domain. WARNING: This replaces ALL existing ALIAS records with the same name — previous ALIAS records for this name will be overwritten, not merged. Use list_dns_records first to check for existing records.
Inputs: name (required), domain (required), aliasName (required), ttl.
create_a_recordCreate A RecordADestructiveIdempotent
Create an A record (IPv4 address) for a domain. WARNING: This replaces ALL existing A records with the same name — previous A records for this name will be overwritten, not merged. Use list_dns_records first to check for existing records.
Inputs: name (required), domain (required), address (required), ttl.
create_caa_recordCreate CAA RecordADestructiveIdempotent
Create a CAA record (Certificate Authority Authorization) for a domain. Controls which CAs can issue certificates. WARNING: This replaces ALL existing CAA records with the same name — previous CAA records for this name will be overwritten, not merged. Incorrect CAA records can prevent SSL/TLS certificate issuance. Use list_dns_records first to check for existing records.
Inputs: tag (required), flag (required), name (required), value (required), +2 more.
create_checkout_linkCreate Checkout LinkA
Generate a shareable checkout/purchase link for a SellerHub domain listing. WARNING: Anyone with this link can initiate a purchase of the domain. Only share with intended buyers. Always confirm with the user before generating a checkout link.
Inputs: type (required), domain (required), basePrice.
create_cname_recordCreate CNAME RecordADestructiveIdempotent
Create a CNAME record (canonical name/alias) for a domain. WARNING: This replaces ALL existing CNAME records with the same name — previous CNAME records for this name will be overwritten, not merged. Use list_dns_records first to check for existing records.
Inputs: name (required), cname (required), domain (required), ttl.
create_https_recordCreate HTTPS RecordADestructiveIdempotent
Create an HTTPS record (SVCB-compatible for HTTPS) for a domain. Used for HTTPS service binding and ECH. WARNING: This replaces ALL existing HTTPS records with the same name — previous HTTPS records for this name will be overwritten, not merged. Use list_dns_records first to check for existing records.
Inputs: name (required), domain (required), targetName (required), svcPriority (required), +4 more.
create_mx_recordCreate MX RecordADestructiveIdempotent
Create an MX record (mail exchange) for a domain. WARNING: This replaces ALL existing MX records with the same name — previous MX records for this name will be overwritten, not merged. Overwriting MX records can disrupt email delivery. Use list_dns_records first to check for existing records.
Inputs: name (required), domain (required), exchange (required), priority (required), +1 more.
create_ns_recordCreate NS RecordADestructiveIdempotent
Create an NS record (nameserver delegation) for a domain. WARNING: This replaces ALL existing NS records with the same name — previous NS records for this name will be overwritten, not merged. Incorrect NS records can break DNS resolution for delegated subdomains. Use list_dns_records first to check for existing records.
Inputs: name (required), domain (required), nameserver (required), ttl.
create_ptr_recordCreate PTR RecordADestructiveIdempotent
Create a PTR record (reverse DNS pointer) for a domain. WARNING: This replaces ALL existing PTR records with the same name — previous PTR records for this name will be overwritten, not merged. Use list_dns_records first to check for existing records.
Inputs: name (required), domain (required), pointer (required), ttl.
create_sellerhub_domainCreate SellerHub ListingA
List a domain for sale on the SellerHub marketplace. This makes the domain publicly visible as available for purchase. The domain starts in 'verifying' status. You can optionally set pricing at creation time, or use update_sellerhub_domain later. Always confirm with the user before listing — verify the domain name.
Inputs: domain (required), binPrice, minPrice, description, +3 more.
create_srv_recordCreate SRV RecordADestructiveIdempotent
Create an SRV record (service locator) for a domain. WARNING: This replaces ALL existing SRV records with the same name — previous SRV records for this name will be overwritten, not merged. Use list_dns_records first to check for existing records.
Inputs: name (required), port (required), domain (required), target (required), +3 more.
create_svcb_recordCreate SVCB RecordADestructiveIdempotent
Create an SVCB record (general service binding) for a domain. WARNING: This replaces ALL existing SVCB records with the same name — previous SVCB records for this name will be overwritten, not merged. Use list_dns_records first to check for existing records.
Inputs: name (required), domain (required), targetName (required), svcPriority (required), +4 more.
create_tlsa_recordCreate TLSA RecordADestructiveIdempotent
Create a TLSA record (TLS certificate association / DANE) for a domain. WARNING: This replaces ALL existing TLSA records with the same name — previous TLSA records for this name will be overwritten, not merged. Incorrect TLSA records can break TLS certificate validation for DANE-enabled clients. Use list_dns_records first to check for existing records.
Inputs: name (required), port (required), usage (required), domain (required), +6 more.
create_txt_recordCreate TXT RecordAIdempotent
Add a TXT record (text data) to a domain. Useful for SPF, DKIM, DMARC, and domain verification (e.g. Vercel's _vercel TXT). Existing TXT records with the same name are kept; the new value is added alongside them, and an identical value is not duplicated. To change or remove a TXT value, use save_dns_records or delete_dns_records after checking list_dns_records.
Inputs: name (required), value (required), domain (required), ttl.
delete_dns_recordsDelete DNS RecordsADestructiveIdempotent
Delete specific DNS records from a domain by name and type. Only records matching both the name AND type will be removed. Other records are not affected. WARNING: This permanently removes DNS records, which can break services relying on them. Always confirm with the user before calling this tool and use list_dns_records first to verify which records will be deleted.
Inputs: domain (required), records (required).
delete_personal_nameserverDelete Personal NameserverADestructive
Delete a personal nameserver host from a domain. This removes the glue record at the registry. WARNING: If this nameserver is actively used by any domain, those domains will lose DNS resolution and experience downtime. Always confirm with the user before calling this tool.
Inputs: host (required), domain (required).
delete_sellerhub_domainDelete SellerHub ListingADestructive
Remove a domain from the SellerHub marketplace. This deletes the listing permanently — any existing checkout links will stop working. Always confirm with the user before calling this tool.
Inputs: domain (required).
get_async_operationGet Async Operation StatusARead-only
Poll the status of an asynchronous operation by its operation ID. Operations like domain registration, renewal, restore, and transfer are async — they return an operationId immediately and process in the background. Call this tool with the operationId to check if the operation has completed. Possible statuses: 'pending' (still processing), 'success' (completed successfully), 'failed' (operation failed — check details for reason).
Inputs: operationId (required).
get_auth_codeGet Auth/EPP CodeARead-only
Retrieve the authorization/EPP code for domain transfer. WARNING: The auth code is a sensitive credential — anyone with this code can initiate a domain transfer. Never share the auth code publicly or log it in plain text. Always confirm with the user before retrieving.
Inputs: domain (required).
get_contactGet ContactARead-only
Retrieve a saved contact profile by its unique identifier.
Inputs: contactId (required).
get_contact_attributesGet Contact AttributesARead-only
Retrieve stored contact attributes for a specific contact (TLD-specific extra fields like tax IDs and company registration numbers). Use get_domain first to find the contact ID, then use this tool to retrieve its attributes.
Inputs: contactId (required).
get_domainGet Domain DetailsARead-only
Get detailed information about a specific domain including registration/expiration dates, auto-renewal status, privacy protection level, nameservers, lifecycle status, and contacts.
Inputs: domain (required).
get_personal_nameserverGet Personal NameserverARead-only
Get details of a single personal (vanity) nameserver by hostname, including its IP addresses.
Inputs: host (required), domain (required).
get_sellerhub_domainGet SellerHub DomainARead-only
Get details of a SellerHub listing by domain name.
Inputs: domain (required).
get_transfer_statusGet Transfer StatusARead-only
Check the current status of a domain transfer to Spaceship. Use this after initiating a transfer with transfer_domain to monitor its progress.
Inputs: domain (required).
get_verification_recordsGet Verification RecordsARead-only
Get the DNS verification records needed to verify ownership of SellerHub domain listings. This returns account-level verification options (not per-domain). Each option contains DNS records to add.
Inputs: no named parameters.
list_dns_recordsList DNS RecordsARead-only
List all DNS records for a domain. Uses pagination and can fetch all pages automatically.
Inputs: domain (required), skip, take, orderBy, +1 more.
list_domainsList DomainsBRead-only
List all domains in the Spaceship account.
Inputs: skip, take, orderBy, fetchAll.
list_personal_nameserversList Personal NameserversARead-only
List personal (vanity) nameservers configured for a domain (e.g. ns1.yourdomain.com, ns2.yourdomain.com).
Inputs: domain (required).
list_sellerhub_domainsList SellerHub DomainsARead-only
List domains listed for sale on SellerHub, Spaceship's domain marketplace for selling domains.
Inputs: skip, take, fetchAll.
register_domainRegister DomainA
Register a new domain name. WARNING: This is a FINANCIAL operation that will charge money to the Spaceship account. Registration is irreversible — once completed, the domain is registered and the charge cannot be undone. This operation is asynchronous: it returns an operationId that must be polled with get_async_operation to check completion status. Always confirm with the user before calling this tool. Use check_domain_availability first to verify the domain is available.
Inputs: domain (required), years, contacts, autoRenew, +1 more.
renew_domainRenew DomainA
Renew an existing domain registration. WARNING: This is a FINANCIAL operation that will charge money to the Spaceship account. The currentExpirationDate parameter is required to prevent accidental double renewals — it must match the domain's actual expiration date. Use get_domain first to retrieve the current expiration date. Always confirm with the user before calling this tool — show the domain name, renewal years, and estimated cost. This operation is asynchronous: it returns an operationId that must be polled with get_async_operation to check completion status.
Inputs: years (required), domain (required), currentExpirationDate (required).
restore_domainRestore DomainA
Restore a domain that is in the redemption grace period after expiration or deletion. WARNING: This is a FINANCIAL operation that typically costs significantly more than a standard registration or renewal. Only domains in the redemption period can be restored — domains that have been fully released cannot be recovered with this tool. Always confirm with the user before calling this tool — restoration fees are typically much higher than standard registration. This operation is asynchronous: it returns an operationId that must be polled with get_async_operation to check completion status.
Inputs: domain (required).
save_contactSave ContactAIdempotent
Create or update a reusable contact profile. Saved contacts can be referenced when registering domains or updating domain contacts. If a contactId is provided, the existing contact is updated; otherwise a new contact is created.
Inputs: city (required), email (required), phone (required), country (required), +12 more.
save_contact_attributesSave Contact AttributesAIdempotent
Save TLD-specific contact attributes required for certain domain registrations. Different TLDs require different fields. Example for .us: { type: "us", appPurpose: "P1", nexusCategory: "C11" }. Returns the contactId associated with the saved attributes.
Inputs: attributes (required).
save_dns_recordsSave DNS RecordsADestructiveIdempotent
Save (upsert) DNS records for a domain using PUT with force overwrite. WARNING: All existing records matching the same name AND type combination will be completely replaced — not merged. Other record name/type combinations are preserved. Use this for bulk operations with mixed record types. For single records, prefer the type-specific tools (create_a_record, create_cname_record, etc.). Always confirm with the user before calling this tool and use list_dns_records first to check existing records.
Inputs: domain (required), records (required).
set_auto_renewSet Auto-RenewAIdempotent
Enable or disable auto-renewal for a domain. WARNING: Disabling auto-renewal risks losing the domain when it expires — the domain may become available for others to register. Always confirm with the user before disabling auto-renewal.
Inputs: domain (required), enabled (required).
set_email_protectionSet Email ProtectionAIdempotent
Toggle the contact form display for a domain's WHOIS listing. When enabled, a contact form is shown instead of the raw email address, helping protect against spam and email harvesting. WARNING: Disabling email protection exposes the registrant's email address in WHOIS, increasing spam and phishing risk. Always confirm with the user before disabling email protection.
Inputs: domain (required), contactForm (required).
set_privacy_levelSet WHOIS Privacy LevelAIdempotent
Set the WHOIS privacy level for a domain. "high" enables full privacy protection, hiding your personal information from public WHOIS lookups. "public" makes your contact details visible in WHOIS results. WARNING: Setting privacy to "public" exposes personal contact information (name, address, email, phone) in public WHOIS databases, which cannot be un-cached once indexed by third parties. Always confirm with the user before setting privacy to public.
Inputs: level (required), domain (required), userConsent (required).
set_transfer_lockSet Transfer LockAIdempotent
Enable or disable transfer lock for a domain. WARNING: Disabling the transfer lock makes the domain vulnerable to unauthorized transfers away from this account. Only unlock when intentionally transferring the domain. Always confirm with the user before unlocking.
Inputs: domain (required), locked (required).
transfer_domainTransfer DomainA
Transfer a domain TO Spaceship from another registrar. WARNING: This is a FINANCIAL operation that will charge money to the Spaceship account (transfers typically include a 1-year renewal). The transfer process: 1) Unlock the domain at the current registrar, 2) Get the auth/EPP code from the current registrar, 3) Call this tool with the auth code, 4) Approve the transfer via email (if required by the TLD). Some TLDs (e.g. .uk) do not require an auth code. Transfers can take up to 5-7 days depending on the TLD. Always confirm with the user before calling this tool — show the domain name and explain the transfer process. This operation is asynchronous: it returns an operationId. Use get_transfer_status to check the transfer progress and get_async_operation to check the operation status.
Inputs: domain (required), authCode, contacts, autoRenew, +1 more.
update_domain_contactsUpdate Domain ContactsADestructive
Update the contacts (registrant, admin, tech, billing) for a specific domain using contact IDs. Use save_contact first to create contacts and obtain their IDs. WARNING: Changing the registrant contact may trigger an ICANN 60-day transfer lock on the domain, preventing transfers for 60 days. Only the contact roles you provide will be updated; omitted roles remain unchanged. Always confirm with the user before calling this tool — show which contact roles will be changed.
Inputs: domain (required), tech, admin, billing, +2 more.
update_nameserversUpdate NameserversADestructiveIdempotent
Update the nameservers for a domain. This replaces ALL current nameservers with the provided list. Set provider to "basic" to switch to Spaceship's built-in DNS (nameservers list is ignored). Set provider to "custom" (default) to use external nameservers. WARNING: Changing nameservers affects DNS resolution for ALL services on this domain and may cause extended downtime if misconfigured. Always confirm with the user before calling this tool and use get_domain first to check current nameservers.
Inputs: domain (required), provider, nameservers.
update_personal_nameserverUpdate Personal NameserverAIdempotent
Create or update a personal nameserver host with its IP addresses. These are glue records that map a nameserver hostname (e.g. ns1.yourdomain.com) to IP addresses at the registry level.
Inputs: ips (required), host (required), domain (required).
update_sellerhub_domainUpdate SellerHub ListingAIdempotent
Update settings for a SellerHub domain listing. You can update description, pricing, and price toggles. Prices use { amount: string, currency: string } format.
Inputs: domain (required), binPrice, minPrice, description, +3 more.
Tool Schema Changelog
Recent tool additions, removals, and schema changes observed during successful MCP inspections.
Loading tool schema changelog…
TDQS
Scored across 48 tools
Most tools have clearly distinct resource/action boundaries, and the many DNS record creation tools are differentiated by record type. There is some overlap between save_dns_records and the type-specific create_*_record tools, but the descriptions explain when to use each.
Names generally follow a predictable snake_case verb_noun pattern such as list_domains, get_domain, create_a_record, and delete_sellerhub_domain. A few names omit the resource or use slightly different phrasing, such as update_nameservers, but the convention remains readable and consistent overall.
With 48 tools, the surface is very large for a single MCP server. Much of the count comes from separate DNS record-type creation tools, which could likely be consolidated or parameterized to reduce the tool burden.
The server covers most domain lifecycle, DNS, contact, nameserver, and SellerHub marketplace operations, including registration, renewal, transfer, restore, and async polling. Minor gaps exist, such as listing/deleting saved contacts or explicit domain deletion, but core workflows are well covered.
Maintenance
Related MCP Connectors
Register, transfer and manage domain names and DNS from your AI agent.
Custom domains for SaaS and AI agents: search, register, connect DNS, and issue HTTPS over MCP.
Automate 1,000+ services from any MCP-compatible AI agent: build Applets, run actions and queries.
Domain search, registration, DNS, marketplace, and checkout with your AI agent.
Related MCP Servers
- AlicenseBqualityDmaintenanceProvides integration with the Namecheap API for domain management operations, including domain listing, availability checks, and nameserver configuration. It allows users to interact with their Namecheap account through natural language commands in MCP-compatible clients.334 npm20MIT
- AlicenseAqualityCmaintenanceA community-built MCP server for the Spaceship API, enabling management of domains, DNS records, contacts, and marketplace listings through natural language.4893 npm13MIT
- AlicenseBqualityCmaintenanceEnables AI agents to manage DNS records through the Spaceship API, with specialized tools for common record types like A, AAAA, CNAME, MX, SRV, and TXT.1013MIT
- AlicenseNot gradedqualityCmaintenanceMCP server for the Spaceship API that enables AI-driven management of domains, DNS records, contacts, and marketplace listings.93 npm4MIT