The full upstream README, mirrored here for reference. Install config, tool schemas, adoption signals, and an original overview live on the Spaceship MCP listing page.
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.
CLI one-liners — the fastest way to get started. Pick your tool:
Set environment variables SPACESHIP_API_KEY and SPACESHIP_API_SECRET separately via ~/.gemini/settings.json.
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:
Add to .cursor/mcp.json (project-level) or ~/.cursor/mcp.json (global):
This MCP server works with any client that supports the Model Context Protocol, including:
| Client | Easiest install |
|---|---|
| Claude Code | One-liner: claude mcp add |
| Codex CLI (OpenAI) | One-liner: codex mcp add |
| Gemini CLI (Google) | One-liner: gemini mcp add |
| VS Code (Copilot) | Command Palette: MCP: Add Server |
| Claude Desktop | JSON config file |
| Cursor | JSON config file |
| Windsurf | JSON config file |
| Cline | UI settings |
| Zed | JSON settings file |
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 | ~/Library/Application Support/Claude/claude_desktop_config.json |
| Windows | %APPDATA%\Claude\claude_desktop_config.json |
Windsurf — add to ~/.codeium/windsurf/mcp_config.json:
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):
Use this as the baseline in any host:
npx["-y", "spaceship-mcp"]SPACESHIP_API_KEY, SPACESHIP_API_SECRETSPACESHIP_CACHE_TTL, SPACESHIP_MAX_RETRIES, SPACESHIP_TOOLSETS, SPACESHIP_DYNAMIC_TOOLS (see Configuration)Host key mapping:
| Host | Top-level key | Notes |
|---|---|---|
| VS Code | servers | Add "type": "stdio" on the server object |
| Claude Desktop / Cursor / Windsurf / Cline | mcpServers | Same command/args/env block |
| Zed | context_servers | Same command/args/env block |
| Codex CLI (TOML) | mcp_servers | Uses TOML, shown below |
If you prefer editing ~/.codex/config.toml directly:
For any MCP-compatible client, use this server configuration:
npx["-y", "spaceship-mcp"]SPACESHIP_API_KEY and SPACESHIP_API_SECRETClaude currently has multiple MCP-related concepts that are easy to mix up:
claude_desktop_config.json and started on your machine (docs).Verified against vendor docs on 2026-03-05.
What is portable across hosts:
command, args, env)stdio command server)What is host/vendor-specific (not portable as-is):
servers, mcpServers, context_servers, mcp_servers)Retry-After header support| Variable | Description |
|---|---|
SPACESHIP_API_KEY | Your Spaceship API key |
SPACESHIP_API_SECRET | Your Spaceship API secret |
Generate your credentials in the Spaceship API Manager.
| Variable | Description | Default |
|---|---|---|
SPACESHIP_CACHE_TTL | Response cache lifetime in seconds. Set to 0 to disable caching. | 120 |
SPACESHIP_MAX_RETRIES | Maximum retry attempts for rate-limited (429) requests with exponential backoff. | 3 |
SPACESHIP_TOOLSETS | Comma-separated list of tool categories to enable (see Toolset Filtering). | All toolsets |
SPACESHIP_DYNAMIC_TOOLS | Set to true to enable dynamic tool loading mode (see Dynamic Tool Loading). | false |
Each scope controls access to a specific part of the Spaceship API. When creating your key, enable only the scopes you need.
| Scope | Access |
|---|---|
domains:read | List domains, check availability, view domain details and settings |
domains:write | Modify domain settings (nameservers, auto-renew, contacts, privacy) |
domains:billing | Register, renew, restore, and transfer domains (financial operations) |
domains:transfer | Transfer lock, auth codes, and transfer status |
contacts:read | Read saved contact profiles and attributes |
contacts:write | Create and update contact profiles and attributes |
dnsrecords:read | List DNS records for your domains |
dnsrecords:write | Create, update, and delete DNS records |
sellerhub:read | View marketplace listings and verification records |
sellerhub:write | List/delist domains for sale, update pricing, generate checkout links |
asyncoperations:read | Poll status of async operations (registration, renewal, transfer) |
The table below shows which scopes are required for each group of tools.
| Feature | Tools | Required scopes |
|---|---|---|
| DNS Records | list_dns_records | dnsrecords:read |
save_dns_records, delete_dns_records, all create_*_record tools | dnsrecords:read dnsrecords:write | |
| Domain Info | list_domains, get_domain, check_domain_availability | domains:read |
| Domain Settings | update_nameservers, set_auto_renew, set_privacy_level, set_email_protection, update_domain_contacts | domains:write |
| Domain Lifecycle | register_domain, renew_domain, restore_domain, transfer_domain | domains:billing |
| Transfer | set_transfer_lock, get_auth_code, get_transfer_status | domains:transfer |
| Contacts | get_contact, get_contact_attributes | contacts:read |
save_contact, save_contact_attributes | contacts:write | |
| Personal NS | list_personal_nameservers, get_personal_nameserver | domains:read |
update_personal_nameserver, delete_personal_nameserver | domains:write | |
| SellerHub | list_sellerhub_domains, get_sellerhub_domain, get_verification_records | sellerhub:read |
create_sellerhub_domain, update_sellerhub_domain, delete_sellerhub_domain, create_checkout_link | sellerhub:write | |
| Async Operations | get_async_operation | asyncoperations:read |
| Analysis | check_dns_alignment | dnsrecords:read |
Full access — enable everything for unrestricted use:
DNS management only — just read/write DNS records:
Read-only — browse domains and records without making changes:
| Tool | Description |
|---|---|
list_dns_records | List all DNS records for a domain with pagination |
save_dns_records | Save (upsert) DNS records — replaces records with the same name and type |
delete_dns_records | Delete DNS records by name and type |
Each DNS record type has a dedicated tool with type-safe parameters and validation.
| Tool | Description |
|---|---|
create_a_record | Create an A record (IPv4 address) |
create_aaaa_record | Create an AAAA record (IPv6 address) |
create_alias_record | Create an ALIAS record (CNAME flattening at zone apex) |
create_caa_record | Create a CAA record (Certificate Authority Authorization) |
create_cname_record | Create a CNAME record (canonical name) |
create_https_record | Create an HTTPS record (SVCB-compatible) |
create_mx_record | Create an MX record (mail exchange) |
create_ns_record | Create an NS record (nameserver delegation) |
create_ptr_record | Create a PTR record (reverse DNS) |
create_srv_record | Create an SRV record (service locator) |
create_svcb_record | Create an SVCB record (general service binding) |
create_tlsa_record | Create a TLSA record (DANE/TLS certificate association) |
create_txt_record | Create a TXT record (text data) |
| Tool | Description |
|---|---|
list_domains | List all domains in the account with pagination |
get_domain | Get detailed domain information |
check_domain_availability | Check availability for up to 20 domains at once |
update_nameservers | Update nameservers for a domain |
set_auto_renew | Toggle auto-renewal for a domain |
set_transfer_lock | Toggle transfer lock for a domain |
get_auth_code | Get the transfer auth/EPP code |
| Tool | Description |
|---|---|
register_domain | Register a new domain (financial operation, async) |
renew_domain | Renew a domain registration (financial operation, async) |
restore_domain | Restore a domain from redemption grace period (financial operation, async) |
transfer_domain | Transfer a domain to Spaceship (financial operation, async) |
get_transfer_status | Check the status of a domain transfer |
get_async_operation | Poll the status of an async operation by its operation ID |
| Tool | Description |
|---|---|
save_contact | Create or update a reusable contact profile |
get_contact | Retrieve a saved contact by ID |
save_contact_attributes | Save TLD-specific contact attributes (e.g. tax IDs) |
get_contact_attributes | Retrieve all stored contact attributes |
update_domain_contacts | Update domain contacts (registrant, admin, tech, billing) |
set_privacy_level | Set WHOIS privacy level (high or public) |
set_email_protection | Toggle contact form display in WHOIS |
| Tool | Description |
|---|---|
list_personal_nameservers | List vanity/glue nameservers for a domain |
get_personal_nameserver | Get details of a personal nameserver by hostname |
update_personal_nameserver | Create or update a personal nameserver (glue record) |
delete_personal_nameserver | Delete a personal nameserver |
| Tool | Description |
|---|---|
list_sellerhub_domains | List domains for sale on the marketplace |
create_sellerhub_domain | List a domain for sale with pricing |
get_sellerhub_domain | Get listing details |
update_sellerhub_domain | Update listing display name, description, and pricing |
delete_sellerhub_domain | Remove a listing from the marketplace |
create_checkout_link | Generate a buy-now checkout link for a listing |
get_verification_records | Get DNS verification records for a listing |
| Tool | Description |
|---|---|
check_dns_alignment | Compare expected vs actual DNS records to detect missing or unexpected entries |
Resources provide passive context that clients can load without calling tools.
| Resource | URI | Description |
|---|---|---|
| Domain List | spaceship://domains | All domains in the account |
| Domain Details | spaceship://domains/{domain} | Detailed info for a specific domain |
| DNS Records | spaceship://domains/{domain}/dns | DNS records for a specific domain |
| Domain Contacts | spaceship://domains/{domain}/contacts | Contact assignments for a domain |
| SellerHub Listings | spaceship://sellerhub | All SellerHub marketplace listings |
Clients that support resource subscriptions will receive automatic notifications when data changes (polled every 30 seconds).
Prompts provide guided workflows that clients can present as slash commands or quick actions.
| Prompt | Description |
|---|---|
setup-domain | Register and configure a new domain (availability check, registration, DNS, privacy) |
audit-domain | Health check for an existing domain (status, DNS, privacy, auto-renew, contacts) |
setup-email | Configure email DNS records for Google Workspace, Microsoft 365, Fastmail, or a custom provider |
migrate-dns | Step-by-step guide to migrate DNS records to Spaceship |
list-for-sale | List a domain on the SellerHub marketplace with pricing and checkout link |
These prompts support argument auto-complete for domain names and common values:
| Prompt | Description |
|---|---|
domain-lookup | Look up domain details with domain name auto-complete |
dns-records | List DNS records with domain and record type auto-complete |
set-privacy | Set WHOIS privacy with domain and level auto-complete |
update-nameservers | Update nameservers with domain and provider auto-complete |
Reduce context window usage by enabling only the tool categories you need. Set the SPACESHIP_TOOLSETS environment variable to a comma-separated list:
| Toolset | Tools included |
|---|---|
domains | Domain management and lifecycle tools |
dns | DNS records, record creators, and analysis |
contacts | Contact and privacy management |
privacy | Privacy management (same tools as contacts) |
nameservers | Personal nameserver management |
sellerhub | SellerHub marketplace tools |
availability | 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.
For agents with constrained context windows, dynamic mode replaces all 48 tools with 3 lightweight meta-tools:
| Meta-Tool | Description |
|---|---|
search_tools | Search available tools by keyword to discover what's available |
describe_tools | Get full parameter schemas for one or more tools before executing |
execute_tool | Execute any Spaceship tool by name with arguments |
Workflow:
search_tools({ query: "dns" }) — discover relevant toolsdescribe_tools({ tools: ["create_a_record"] }) — get the full parameter schemaexecute_tool({ tool: "create_a_record", arguments: { ... } }) — executeResources, prompts, and completions remain available in dynamic mode.
register_domain, create_*, update_*, delete_*, save_*, set_*, and lifecycle operations).Once connected, you can interact with the Spaceship API using natural language:
MIT - see LICENSE for details.