The Unstoppable Domains MCP (Model Context Protocol) server enables you to search, purchase, and manage domain names through natural conversation inside ChatGPT, Claude, or using automated AI agents. This guide explains how to connect an AI agent to your Unstoppable Domains account and setup permissions for various interactions.
Table of Contents
What Can You Do?
With the MCP server, you can ask AI assistants to:
- Search & Purchase Domains - Find available domains, check pricing, and complete purchases
- Manage Your Portfolio - View your domains, filter by status, track expirations
- Configure DNS - Set up A records, CNAME, MX, TXT, and other DNS records
- Sell on Marketplace - List domains for sale, manage offers, negotiate with buyers
- Communicate - Contact domain sellers and manage conversations
Getting Started
Connecting via OAuth (Recommended)
Most MCP-compatible tools support OAuth 2.0 authentication. These tools follow the general approach below to add a custom MCP connection:
- Add the Unstoppable Domains MCP server URL to your AI tool. See the table below for specific instructions for each tool.
- When prompted, authenticate via your browser
- Authorize the requested permissions
- Start a chat to manage your domains using natural language
Manage your connections: Go to Account Settings to view connected apps, their scopes, and disconnect if needed.
Instructions for Popular AI Tools
| Tool | Setup Method |
|---|---|
| Claude Code | claude mcp add unstoppable-domains --transport http https://api.unstoppabledomains.com/mcp/v1/ |
| Claude Desktop (Paid) | Settings → Connectors → Add Connector → Enter MCP URL: https://api.unstoppabledomains.com/api/mcp/v1 |
| Claude Desktop (Free) | Edit ~/Library/Application Support/Claude/claude_desktop_config.json |
| ChatGPT Custom GPT | Import the API endpoint directly + OAuth 2.0 (OpenAPI spec) |
| Bots & Scripts | Use the API endpoint directly + API Key (OpenAPI spec) |
| Other MCP Tools | Follow tool-specific MCP server configuration |
Authentication Options
OAuth 2.0 (Recommended)
OAuth provides scoped access through browser-based authentication:
- Easy setup - Just authenticate when prompted using your Unstoppable Domains account
- Granular permissions - Only grant access to what you need
- Revocable - Disconnect apps anytime from Account Settings
Available scopes:
| Scope | Access |
|---|---|
domains:search | Search domains, check availability |
portfolio:read | View your domains, DNS records, offers |
portfolio:write | Manage DNS, create listings, send messages |
cart:read | View cart and payment methods |
cart:write | Add/remove cart items |
checkout | Complete purchases |
API Key (Advanced)
For manual configuration or custom integrations:
- Go to Account Settings
- Scroll to bottom and click Advanced
- Find the MCP API Key section
- Generate a key (format:
ud_mcp_*) - Copy your key (available anytime from this page)
Use the key in the Authorization header:
Authorization: Bearer ud_mcp_your_key_hereSecurity tip: Store your API key in an environment variable to avoid exposing it in shell history or process listings:
export UD_MCP_API_KEY="ud_mcp_your_key_here" # Then reference $UD_MCP_API_KEY in your scripts or configuration
Note: API keys grant full access to all tools. Use OAuth for scoped access.
Common Workflows
Once connected to your Unstoppable Domains account, your AI agent is ready to talk with you about any topic related to domains. Here are some examples of conversation starters to inspire your imagination.
Register a New Domain
"Help me think of domain name ideas for by new kite business"
"Find me available .com domains with 'coffee' in the name"
"Add coffeeshop.com to my cart"
"Create an ICANN contact with my business details"
"Complete the checkout"Tools used: ud_domains_search → ud_contact_create → ud_cart_add_domain → ud_cart_checkout
Set Up DNS for a Website
"Show me the DNS records for mybrand.io"
"Add an A record pointing to 192.0.2.1"
"Add a CNAME record for www pointing to mybrand.io"
"Add MX records for Google Workspace"Tools used: ud_dns_records_list → ud_dns_record_add (multiple)
List a Domain for Sale
"List mydomain.com for sale at $5,000"
"Enable the offer feature with minimum $1,000"
"Show me any incoming offers"
"Accept the offer from buyer123"Tools used: ud_listing_create → ud_offers_list → ud_offer_respond
Buy from the Marketplace
"Search for premium.com"
"Add it to my cart with lease-to-own (12 months)"
"Show me my cart total"
"Generate a checkout link"Tools used: ud_domains_search → ud_cart_add_domain_listed → ud_cart_get → ud_cart_get_url
Negotiate with a Seller
"Contact the seller of example.io"
"Send them a message asking about the price"
"Show me their reply"Tools used: ud_domain_contact_seller → ud_lead_message_send → ud_lead_messages_list
Available Tools
The following section is a detailed description of all the tools available in the Unstoppable Domains MCP server. While this documentation is provided for your information, the LLM will automatically choose the specific tools required to complete the tasks from your conversation.
Domain Search
ud_domains_search
Search for domain availability and pricing across TLDs.
Parameters:
| Parameter | Type | Required | Description |
|---|---|---|---|
query | string or string[] | Yes | Domain name(s) to search. Can be full domain ("example.com") or search term ("mybusiness"). Up to 10 queries. |
tlds | string[] | No | TLDs to search (e.g., ["com", "org", "io"]). Max 5. Use ud_tld_list to verify support. |
limit | number | No | Results to return (1-100, default: 20) |
offset | number | No | Results to skip for pagination (default: 0) |
Example prompts:
- "Search for available domains with 'startup' in the name"
- "Check if example.com is available"
- "Find .io domains containing 'dev'"
Notes:
- Not all ICANN TLDs are supported. Use
ud_tld_listfirst to verify. - Prices are returned in cents (USD).
ud_tld_list
List all available ICANN TLDs supported by the registrar.
Parameters: None
Example prompts:
- "What TLDs can I register?"
- "Show me all available domain extensions"
- "Is .ai supported?"
Portfolio Management
ud_portfolio_list
List domains in your portfolio with filtering and sorting.
Parameters:
| Parameter | Type | Required | Description |
|---|---|---|---|
page | number | No | Page number, 1-indexed (default: 1) |
pageSize | number | No | Domains per page (1-100, default: 50) |
searchTerm | string | No | Filter by domain name |
status | string | No | "all", "for-sale", or "unlisted" (default: "all") |
registryType | string | No | "dns" (ICANN) or "web3" (default: "dns") |
expiringWithinDays | number | No | Filter domains expiring within N days (1-365) |
expired | boolean | No | Filter for expired domains |
minLength / maxLength | number | No | Filter by domain label length |
autoRenewal | string | No | "true" or "false" |
tagFilters | string[] | No | Filter by tags (e.g., ["personal", "business"]) |
orderBy | string | No | Sort by: "name", "length", "purchasedAt", "expiresAt", "listingPrice", "offers", "leads", "watchlistCount" |
orderDirection | string | No | "asc" or "desc" (default: "asc") |
Example prompts:
- "Show me all my domains"
- "List domains expiring in the next 30 days"
- "Show domains I have listed for sale, sorted by price"
- "Find my 4-letter domains"
ICANN Contacts
ud_contacts_list
List ICANN contacts for domain registration.
Parameters:
| Parameter | Type | Required | Description |
|---|---|---|---|
includeDisabled | boolean | No | Include disabled contacts (default: false) |
Example prompts:
- "Show my ICANN contacts"
- "List all registration contacts including disabled ones"
ud_contact_create
Create a new ICANN contact for DNS domain registration.
Parameters:
| Parameter | Type | Required | Description |
|---|---|---|---|
firstName | string | Yes | Contact first name |
lastName | string | Yes | Contact last name |
email | string | Yes | Contact email address |
phone | object | Yes | { dialingPrefix: "+1", number: "5551234567" } |
street | string | Yes | Street address |
city | string | Yes | City |
stateProvince | string | Yes | State/province code |
postalCode | string | Yes | Postal/ZIP code |
countryCode | string | Yes | Two-letter ISO country code (e.g., "US") |
organization | string | No | Company name |
Example prompts:
- "Create an ICANN contact for John Smith at 123 Main St, New York, NY 10001"
- "Add a business contact for Acme Corp"
Notes:
- Required before purchasing .com, .org, .net, and other ICANN domains.
Cart Management
ud_cart_get
Get shopping cart contents with pricing breakdown.
Parameters:
| Parameter | Type | Required | Description |
|---|---|---|---|
discountCode | string | No | Promo code to apply |
Example prompts:
- "Show my cart"
- "What's in my shopping cart?"
- "Apply promo code SAVE20 to my cart"
ud_cart_add_domain
Add primary (unregistered) domains to cart.
Parameters:
| Parameter | Type | Required | Description |
|---|---|---|---|
domains | array | Yes | Array of domain objects |
domains[].name | string | Yes | Full domain name (e.g., "example.com") |
domains[].quantity | number | No | Registration years (1-10, default: 1) |
Example prompts:
- "Add example.com to my cart"
- "Add mybrand.io for 2 years"
- "Add startup.com and startup.io to my cart"
ud_cart_add_domain_listed
Add marketplace-listed domains to cart (buy-now or lease-to-own).
Parameters:
| Parameter | Type | Required | Description |
|---|---|---|---|
domains | array | Yes | Array of domain objects (max 50) |
domains[].name | string | Yes | Listed domain name |
domains[].leaseToOwnOptions | object | No | Lease-to-own configuration |
domains[].leaseToOwnOptions.type | string | No | "equal_installments" or "down_payment_plus_equal_installments" |
domains[].leaseToOwnOptions.termLength | number | No | Payment term (3-24 months) |
domains[].leaseToOwnOptions.downPaymentPercentage | number | No | Down payment (10-90%, required for down_payment type) |
Example prompts:
- "Add premium.com to my cart"
- "Add premium.com with lease-to-own over 12 months"
- "Add premium.com with 20% down payment and 12 monthly installments"
ud_cart_add_domain_renewal
Add domain renewals to cart.
Parameters:
| Parameter | Type | Required | Description |
|---|---|---|---|
domains | array | Yes | Array of domain objects (max 50) |
domains[].name | string | Yes | Domain to renew (must own) |
domains[].quantity | number | No | Renewal years (1-10, default: 1) |
Example prompts:
- "Renew example.com for 1 year"
- "Add 3-year renewal for mybrand.io"
ud_cart_remove
Remove items from cart.
Parameters:
| Parameter | Type | Required | Description |
|---|---|---|---|
productIds | string[] | Yes | Product IDs to remove (from cart response) |
Example prompts:
- "Remove example.com from my cart"
- "Clear the domain I just added"
Payment & Checkout
ud_cart_get_payment_methods
Get saved payment methods and account balance.
Parameters: None
Example prompts:
- "Show my payment methods"
- "What's my account balance?"
- "What cards do I have on file?"
ud_payment_method_add_url
Get a URL to add a new payment method (for example, when you don't have any cards on file).
Parameters: None
Example prompts:
- "Give me a link to add a new card"
- "I don't have any payment methods, how do I add one?"
- "Generate a URL so I can add a payment method"
ud_cart_checkout
Complete checkout using saved payment method or account balance.
Parameters:
| Parameter | Type | Required | Description |
|---|---|---|---|
paymentMethodId | string | No | Stripe payment method ID |
useAccountBalance | boolean | No | Use account balance (default: true) |
discountCode | string | No | Promo code |
contactId | string | No | ICANN contact ID for DNS domains |
Example prompts:
- "Complete my purchase using my account balance"
- "Checkout using my Visa ending in 4242"
- "Complete checkout with contact ID abc123"
Notes:
- For DNS domains (.com, .org, etc.), you must have an ICANN contact. Use
ud_contacts_listto find your contact ID.
ud_cart_get_url
Generate a checkout URL for browser-based purchase.
Parameters:
| Parameter | Type | Required | Description |
|---|---|---|---|
discountCode | string | No | Promo code for checkout |
Example prompts:
- "Give me a checkout link"
- "Generate a URL to complete my purchase"
Marketplace Listings
ud_listing_create
Create marketplace listings to sell domains.
Parameters:
| Parameter | Type | Required | Description |
|---|---|---|---|
domains | array | Yes | Array of listing objects (max 50) |
domains[].domainName | string | Yes | Domain to list |
domains[].priceInCents | number | No | Buy-now price in cents (0 for offers-only) |
domains[].expiresAt | string | No | Listing expiration (ISO 8601) |
domains[].isEmailAliasUsed | boolean | No | Enable email contact feature |
domains[].listingSettings | object | No | Additional settings |
domains[].listingSettings.isOfferFeatureEnabled | boolean | No | Accept offers |
domains[].listingSettings.minOfferAmountInCents | number | No | Minimum offer amount |
domains[].leaseToOwnOptions | object | No | Lease-to-own configuration |
Example prompts:
- "List mydomain.com for $5,000"
- "List mydomain.com for offers only with $1,000 minimum"
- "List mydomain.com for $10,000 with lease-to-own option"
Notes:
- Prices are in cents (e.g., $5,000 = 500000 cents).
- Set
priceInCentsto 0 for offers-only listings.
ud_listing_update
Update existing marketplace listings.
Parameters:
| Parameter | Type | Required | Description |
|---|---|---|---|
listings | array | Yes | Array of update objects (max 50) |
listings[].id | number | Yes | Listing ID |
listings[].priceInCents | number | No | New price in cents |
listings[].expiresAt | string | No | New expiration date |
listings[].listingSettings | object | No | Updated settings |
Example prompts:
- "Change mydomain.com listing price to $7,500"
- "Enable offers on my listing with ID 12345"
ud_listing_cancel
Cancel marketplace listings.
Parameters:
| Parameter | Type | Required | Description |
|---|---|---|---|
listingIds | number[] | Yes | Listing IDs to cancel (max 50) |
Example prompts:
- "Cancel my listing for mydomain.com"
- "Remove mydomain.com from the marketplace"
ud_offers_list
List incoming offers on your domains.
Parameters:
| Parameter | Type | Required | Description |
|---|---|---|---|
domainName | string | No | Filter by domain |
group | string | No | "active" or "sold" |
page | number | No | Page number |
Example prompts:
- "Show me all incoming offers"
- "What offers do I have on mydomain.com?"
- "Show my accepted offers"
ud_offer_respond
Accept or reject offers on your domains.
Parameters:
| Parameter | Type | Required | Description |
|---|---|---|---|
offers | array | Yes | Array of response objects (max 50) |
offers[].id | number | Yes | Offer ID |
offers[].action | string | Yes | "accept" or "reject" |
Example prompts:
- "Accept offer 12345"
- "Reject the $500 offer on mydomain.com"
Domain Conversations
ud_leads_list
List domain conversation leads (buyer-seller messages).
Parameters:
| Parameter | Type | Required | Description |
|---|---|---|---|
domain | string | No | Filter by domain name |
skipEmpty | boolean | No | Skip conversations with no messages (default: false) |
skip | number | No | Pagination offset (default: 0) |
take | number | No | Conversations to return (1-100, default: 20) |
Example prompts:
- "Show my domain conversations"
- "List leads for mydomain.com"
ud_domain_contact_seller
Contact a domain seller to start a conversation.
Parameters:
| Parameter | Type | Required | Description |
|---|---|---|---|
domain | string | Yes | Domain to inquire about |
buyerId | string | No | Encoded buyer ID (for offer responses) |
Example prompts:
- "Contact the seller of premium.com"
- "Start a conversation about example.io"
ud_lead_messages_list
Get messages in a domain conversation.
Parameters:
| Parameter | Type | Required | Description |
|---|---|---|---|
conversationId | number | Yes | Conversation ID |
cursor | string | No | Pagination cursor for older messages |
Example prompts:
- "Show messages in conversation 12345"
- "What did the seller say?"
ud_lead_message_send
Send a message in a domain conversation.
Parameters:
| Parameter | Type | Required | Description |
|---|---|---|---|
conversationId | number | Yes | Conversation ID |
content | string | Yes | Message text (1-1000 characters) |
Example prompts:
- "Send 'I'm interested in your domain' to conversation 12345"
- "Reply asking about their minimum price"
DNS Records
ud_dns_records_list
List DNS records for a domain.
Parameters:
| Parameter | Type | Required | Description |
|---|---|---|---|
domain | string | Yes | Domain name |
type | string | No | Filter by record type (A, AAAA, CNAME, MX, TXT, NS) |
subName | string | No | Filter by subdomain |
cursor | string | No | Pagination cursor |
Example prompts:
- "Show DNS records for mybrand.io"
- "List all MX records for example.com"
- "What A records does mydomain.com have?"
ud_dns_record_add
Add a DNS record to a domain.
Parameters:
| Parameter | Type | Required | Description |
|---|---|---|---|
domain | string | Yes | Domain name |
type | string | Yes | Record type: A, AAAA, CNAME, MX, TXT, NS, SRV, CAA |
values | string[] | Yes | Record values |
subName | string | No | Subdomain (default: "@" for root) |
ttl | number | No | Time-to-live in seconds (60-86400, default: 3600) |
upsertMode | string | No | "append", "replace", or "disallowed" |
Example prompts:
- "Add an A record for mybrand.io pointing to 192.0.2.1"
- "Add a CNAME for www.mybrand.io pointing to mybrand.io"
- "Add MX records for Google Workspace"
- "Add a TXT record for domain verification"
Notes:
- Use
subName: "@"for root domain records. - Use
upsertMode: "replace"to overwrite existing records of the same type/subname.
ud_dns_record_update
Update an existing DNS record.
Parameters:
| Parameter | Type | Required | Description |
|---|---|---|---|
domain | string | Yes | Domain name |
recordId | string | Yes | Record ID (from ud_dns_records_list) |
values | string[] | Yes | New record values |
ttl | number | No | New TTL (60-86400, default: 3600) |
Example prompts:
- "Update my A record to point to 192.0.2.2"
- "Change the TTL on record abc123 to 300 seconds"
ud_dns_record_remove
Remove a specific DNS record.
Parameters:
| Parameter | Type | Required | Description |
|---|---|---|---|
domain | string | Yes | Domain name |
recordId | string | Yes | Record ID to remove |
Example prompts:
- "Delete the old A record"
- "Remove DNS record abc123"
ud_dns_records_remove_all
Remove ALL user-created DNS records from a domain.
Parameters:
| Parameter | Type | Required | Description |
|---|---|---|---|
domain | string | Yes | Domain name |
confirm | boolean | Yes | Must be true to confirm deletion |
Example prompts:
- "Remove all DNS records from mybrand.io"
- "Clear all my custom DNS settings"
Notes:
- This is destructive. The
confirm: trueparameter is required.
DNS Nameservers
ud_dns_nameservers_list
List nameservers for a domain.
Parameters:
| Parameter | Type | Required | Description |
|---|---|---|---|
domain | string | Yes | Domain name |
includeDnssec | boolean | No | Include DNSSEC information |
Example prompts:
- "What nameservers is mybrand.io using?"
- "Show nameserver configuration with DNSSEC status"
ud_dns_nameservers_set_custom
Set custom (external) nameservers.
Parameters:
| Parameter | Type | Required | Description |
|---|---|---|---|
domain | string | Yes | Domain name |
nameservers | string[] | Yes | Nameserver hostnames (2-12 required) |
dnssec | object | No | DNSSEC DS records |
Example prompts:
- "Point mybrand.io to Cloudflare nameservers"
- "Set custom nameservers: ns1.example.com and ns2.example.com"
Notes:
- Requires 2-12 nameserver hostnames.
- DNS record management through this tool will be disabled when using custom nameservers.
ud_dns_nameservers_set_default
Reset to Unstoppable Domains default nameservers.
Parameters:
| Parameter | Type | Required | Description |
|---|---|---|---|
domain | string | Yes | Domain name |
Example prompts:
- "Switch mybrand.io back to default nameservers"
- "Reset nameservers to UD defaults"
Notes:
- Re-enables DNS record management through these tools.
DNS Hosting
ud_dns_hosting_list
List hosting/forwarding configurations.
Parameters:
| Parameter | Type | Required | Description |
|---|---|---|---|
domain | string | Yes | Domain name |
cursor | string | No | Pagination cursor |
Example prompts:
- "Show hosting configuration for mybrand.io"
- "What redirects are set up for my domain?"
ud_dns_hosting_add
Add hosting configuration (for-sale page, 301/302 redirect).
Parameters:
| Parameter | Type | Required | Description |
|---|---|---|---|
domain | string | Yes | Domain name |
type | string | Yes | "LISTING_PAGE", "REDIRECT_301", or "REDIRECT_302" |
targetUrl | string | Conditional | Required for redirects |
subName | string | No | Subdomain to configure |
forceCompatibility | boolean | No | Auto-configure nameservers if needed |
Example prompts:
- "Set up a for-sale landing page for mybrand.io"
- "Redirect mybrand.io to https://mynewsite.com with a 301"
- "Add a 302 redirect from old.mybrand.io to mybrand.io/new"
ud_dns_hosting_remove
Remove hosting/forwarding configuration.
Parameters:
| Parameter | Type | Required | Description |
|---|---|---|---|
domain | string | Yes | Domain name |
subName | string | No | Subdomain to remove config from |
deleteAll | boolean | No | Remove ALL hosting configs |
confirmDeleteAll | boolean | Conditional | Required if deleteAll is true |
Example prompts:
- "Remove the redirect from mybrand.io"
- "Delete all hosting configurations"
Domain Operations
ud_domain_pending_operations
Check status of pending DNS operations.
Parameters:
| Parameter | Type | Required | Description |
|---|---|---|---|
domain | string | Yes | Domain name |
includeCompleted | boolean | No | Include operations completed in last 24 hours |
Example prompts:
- "Are there any pending DNS changes for mybrand.io?"
- "Check the status of my nameserver update"
ud_domain_auto_renewal_update
Enable or disable auto-renewal for ICANN domains.
Parameters:
| Parameter | Type | Required | Description |
|---|---|---|---|
action | string | Yes | "enable" or "disable" |
domains | array | Yes | Array of domain objects (max 50) |
domains[].name | string | Yes | Domain name |
paymentMethodId | string | No | Payment method ID (uses default card if omitted) |
Example prompts:
- "Enable auto-renewal for mybrand.io"
- "Turn off auto-renewal for example.com"
- "Enable auto-renewal for all my domains using my Visa"
Notes:
- When enabling, a payment method is used. If
paymentMethodIdis omitted, your default card will be used. Useud_cart_get_payment_methodsto see available methods.
API Reference
| Item | Value |
|---|---|
| Endpoint | https://api.unstoppabledomains.com/mcp/v1/ |
| OpenAPI Spec | https://api.unstoppabledomains.com/mcp/v1/openapi.json |
| Authentication | Authorization: Bearer <token> |
| Protocol | MCP (Model Context Protocol) over HTTP |
Troubleshooting
Tools not appearing
Claude Code:
claude mcp list # Check if server is configuredClaude Desktop:
- Restart the app completely
- Verify config file:
cat ~/Library/Application\ Support/Claude/claude_desktop_config.json
Authentication errors
- Verify your API key starts with
ud_mcp_ - For OAuth, try disconnecting and reconnecting in Account Settings
- Check that your token hasn't expired
"Domain not found" errors
- Verify you own the domain with
ud_portfolio_list - Check the domain name spelling
- Ensure you're using the full domain name (e.g., "example.com" not just "example")
DNS changes not appearing
- DNS propagation can take up to 48 hours
- Use
ud_domain_pending_operationsto check operation status - Verify you're using UD default nameservers (custom nameservers disable DNS management)
Need help?
- Email: support@unstoppabledomains.com
- Website: https://unstoppabledomains.com