Koskamo

StableDomains MCP

An official Model Context Protocol server provided by StableDomains that allows AI agents to search for available domain names, generate name ideas, obtain price quotes, create price-locked orders, and manage domain registrations using stablecoin payments (USDC/USDT) or credit cards. It supports tools for checking availability, creating orders, and looking up expiring domains.

Endpoint and access

No sign-in to connect and list tools. Individual tools may still need a vendor account, credentials, or permissions; check the documented prerequisites.

StableDomains MCP logo, by StableDomainsVendor evidenceStreamable HTTPNo sign-inEndpoint checked 2026-11-01Operated by StableDomains
MCP endpoint (Streamable HTTP)
https://stabledomains.net/api/mcp
Vendor documentation

What you can do with it

  • Search for available domain names across multiple TLDs
  • Generate name ideas based on keywords or concepts
  • Create price-locked orders for domain registration
  • Look up expiring domains and drop radar data

Source and maintenance

Vendor evidenceRegistry 2.4.0

Protocol and capabilities

Server
stabledomains 2.5.0
MCP protocol
2025-06-18
Tools
37 advertised
Resources
Not advertised
Resource templates
Not advertised
Prompts
Not advertised
Server-advertised capabilities
{
  "tools": {
    "listChanged": false
  }
}

Server-provided instructions

Untrusted server output shown for inspection. It is not Koskamo guidance and is excluded from knowledge search.

Agent operating policy: Check availability and price immediately before buying (GET /api/v1/availability or search_domains); never rely on an earlier result. Create the order (POST /api/v1/orders or create_order) to get a price-locked quote: quote.price_usd, quote.locked_until and checkout_url. Show the human the domain, years, total price, token/chain and the lock expiry, and get explicit confirmation before paying. If the human prefers to pay themselves, send them checkout_url (/order/{id}): a prefilled page they can pay from with any wallet, QR or card. Always send an Idempotency-Key header (or idempotency_key) and reuse it on retries; the same key never creates or charges a second order. Pay only the exact amount in the order before quote.locked_until; if it lapsed, create a new order rather than reusing an old address. Poll GET /api/v1/orders/{id} (or check_order) until status is completed, then report the result to the human. Buy domains with USDC/USDT. search_domains → create_order → pay (transfer + pay_order, x402 x_payment, or pay_with=balance). Auth: OAuth 2.1 (this server advertises /.well-known/oauth-protected-resource; account tools answer HTTP 401 + WWW-Authenticate until you sign in) or Authorization: Bearer <api key>. Search, quotes, tools and x402 payments work without auth. The affiliate programme is open to agents: get_referral_link, set_payout_address, then pass ref on create_order/create_cart/transfer_domain (see https://stabledomains.net/affiliates).

Tools

37 advertised

search_domains — Search domain availability
Advertised by the server during the last successful anonymous check.
Advertised read-onlyOpen-world

Check availability and USD price for a name across TLDs. Each result has premium (boolean; premium = registry price + 12%) and renewal_price (USD/yr). If the name is taken, suggestions[] lists close AVAILABLE alternatives (live-checked, cheapest first).

search_domains input schema
{
  "type": "object",
  "required": [
    "q"
  ],
  "properties": {
    "q": {
      "type": "string"
    }
  }
}
search_domains annotations
{
  "title": "Search domain availability",
  "readOnlyHint": true,
  "openWorldHint": true,
  "idempotentHint": true,
  "destructiveHint": false
}
search_aftermarket — Aftermarket links for a taken name
Advertised by the server during the last successful anonymous check.
Advertised read-onlyOpen-world

For a taken name: affiliate links to Atom.com, an OUTSIDE aftermarket (not StableDomains), to find premium alternatives for the keyword. Exact-name listing on Atom is not verified (no public API). Atom handles payment/transfer.

search_aftermarket input schema
{
  "type": "object",
  "required": [
    "q"
  ],
  "properties": {
    "q": {
      "type": "string",
      "description": "name or domain, e.g. cloud.com"
    }
  }
}
search_aftermarket annotations
{
  "title": "Aftermarket links for a taken name",
  "readOnlyHint": true,
  "openWorldHint": true,
  "idempotentHint": true,
  "destructiveHint": false
}
agent_signup — Get a guest API key
Advertised by the server during the last successful anonymous check.

Instant signup: returns an API key immediately (no form, no email). Guest tier (30 req/min) until claimed by email or wallet. Rate limited per IP (3/hour). Store the key; it is shown once.

agent_signup input schema
{
  "type": "object",
  "required": [],
  "properties": {}
}
agent_signup annotations
{
  "title": "Get a guest API key",
  "readOnlyHint": false,
  "openWorldHint": false,
  "idempotentHint": false,
  "destructiveHint": false
}
quote_domain — Quote a domain price
Advertised by the server during the last successful anonymous check.
Advertised read-onlyOpen-world

Live price quote for one domain. Returns premium (boolean) and renewal_price (USD/yr). Premium orders are refused if they exceed what we can currently fund.

quote_domain input schema
{
  "type": "object",
  "required": [
    "domain"
  ],
  "properties": {
    "years": {
      "type": "integer"
    },
    "domain": {
      "type": "string"
    }
  }
}
quote_domain annotations
{
  "title": "Quote a domain price",
  "readOnlyHint": true,
  "openWorldHint": true,
  "idempotentHint": true,
  "destructiveHint": false
}
create_order — Create a domain order
Advertised by the server during the last successful anonymous check.

Create a registration order (a price-locked quote). Returns quote{price_usd, locked_until}, payment requirements (exact amount, address, x402 accepts) and checkout_url: a prefilled /order/{id} page a human can pay from. Policy: check availability right before buying, show the quote to the human and get confirmation before paying; pass idempotency_key (retries with the same key never create a second order; if omitted, identical calls within 15 min are de-duplicated). pay_with=balance pays instantly from prepaid balance.

create_order input schema
{
  "type": "object",
  "required": [
    "domain"
  ],
  "properties": {
    "ref": {
      "type": "string",
      "description": "referrer code"
    },
    "chain": {
      "enum": [
        "base",
        "ethereum",
        "arbitrum",
        "polygon",
        "hyperevm",
        "bsc",
        "solana"
      ],
      "type": "string",
      "description": "payment network (default base). hyperevm = HyperEVM (chain 999, USDC/USDT0), bsc = BNB Chain (56, 18-decimal USDC/USDT)"
    },
    "token": {
      "enum": [
        "USDC",
        "USDT"
      ],
      "type": "string",
      "description": "stablecoin (default USDC)"
    },
    "years": {
      "type": "integer"
    },
    "domain": {
      "type": "string"
    },
    "pay_with": {
      "enum": [
        "crypto",
        "balance"
      ],
      "type": "string"
    },
    "showcase": {
      "type": "boolean",
      "description": "Opt in to the public /showcase listing (only if the user asked)"
    },
    "nameservers": {
      "type": "array",
      "items": {
        "type": "string"
      }
    },
    "showcase_title": {
      "type": "string"
    },
    "idempotency_key": {
      "type": "string"
    },
    "showcase_description": {
      "type": "string"
    }
  }
}
create_order annotations
{
  "title": "Create a domain order",
  "readOnlyHint": false,
  "openWorldHint": false,
  "idempotentHint": false,
  "destructiveHint": false
}
buy_with_balance — Buy a domain with balance
Advertised by the server during the last successful anonymous check.
Open-world

Register a domain and pay from prepaid balance in one call.

buy_with_balance input schema
{
  "type": "object",
  "required": [
    "domain"
  ],
  "properties": {
    "years": {
      "type": "integer"
    },
    "domain": {
      "type": "string"
    },
    "idempotency_key": {
      "type": "string"
    }
  }
}
buy_with_balance annotations
{
  "title": "Buy a domain with balance",
  "readOnlyHint": false,
  "openWorldHint": true,
  "idempotentHint": false,
  "destructiveHint": false
}
check_order — Check order status
Advertised by the server during the last successful anonymous check.
Advertised read-only

Get order status and next actions.

check_order input schema
{
  "type": "object",
  "required": [
    "order_id"
  ],
  "properties": {
    "order_id": {
      "type": "string"
    }
  }
}
check_order annotations
{
  "title": "Check order status",
  "readOnlyHint": true,
  "openWorldHint": false,
  "idempotentHint": true,
  "destructiveHint": false
}
pay_order — Pay an order
Advertised by the server during the last successful anonymous check.
Open-world

Submit payment: tx_hash (EVM hash or Solana signature) of your transfer, or x_payment (base64 x402 EIP-3009 payload, gasless).

pay_order input schema
{
  "type": "object",
  "required": [
    "order_id"
  ],
  "properties": {
    "tx_hash": {
      "type": "string"
    },
    "order_id": {
      "type": "string"
    },
    "x_payment": {
      "type": "string"
    }
  }
}
pay_order annotations
{
  "title": "Pay an order",
  "readOnlyHint": false,
  "openWorldHint": true,
  "idempotentHint": false,
  "destructiveHint": false
}
get_balance — Get prepaid balance
Advertised by the server during the last successful anonymous check.
Advertised read-only

Get your prepaid USD balance and its ledger of top-ups and spends.

get_balance input schema
{
  "type": "object",
  "required": [],
  "properties": {}
}
get_balance annotations
{
  "title": "Get prepaid balance",
  "readOnlyHint": true,
  "openWorldHint": false,
  "idempotentHint": true,
  "destructiveHint": false
}
topup_balance — Create a balance top-up order
Advertised by the server during the last successful anonymous check.

Create a top-up order (USD 5–5000); pay it like any order.

topup_balance input schema
{
  "type": "object",
  "required": [
    "amount_usd"
  ],
  "properties": {
    "chain": {
      "enum": [
        "base",
        "ethereum",
        "arbitrum",
        "polygon",
        "hyperevm",
        "bsc",
        "solana"
      ],
      "type": "string",
      "description": "payment network (default base). hyperevm = HyperEVM (chain 999, USDC/USDT0), bsc = BNB Chain (56, 18-decimal USDC/USDT)"
    },
    "token": {
      "enum": [
        "USDC",
        "USDT"
      ],
      "type": "string",
      "description": "stablecoin (default USDC)"
    },
    "amount_usd": {
      "type": "number"
    },
    "idempotency_key": {
      "type": "string"
    }
  }
}
topup_balance annotations
{
  "title": "Create a balance top-up order",
  "readOnlyHint": false,
  "openWorldHint": false,
  "idempotentHint": false,
  "destructiveHint": false
}
find_dropping_domains — Find expiring domains
Advertised by the server during the last successful anonymous check.
Advertised read-onlyOpen-world

Find expiring, pending-delete and just-dropped domains ranked by a verified quality score (0-100) built from sampled Wayback snapshots (real site vs parked/for-sale), Common Crawl presence, dictionary/brandability and spam heuristics; Majestic referring subnets only count when the archive shows a real site. Parked and spam names are hidden by default; each item includes quality_reasons. Free tier returns top 25; status=available names can be bought immediately with create_order. For presets, estimated value, multi-TLD and keyword filters use drop_radar.

find_dropping_domains input schema
{
  "type": "object",
  "required": [],
  "properties": {
    "q": {
      "type": "string"
    },
    "tld": {
      "type": "string"
    },
    "sort": {
      "enum": [
        "quality",
        "value",
        "price",
        "length",
        "drops",
        "new",
        "brand",
        "backlinks",
        "domain",
        "score"
      ],
      "type": "string"
    },
    "limit": {
      "type": "integer",
      "description": "max 25 on the free tier"
    },
    "order": {
      "enum": [
        "asc",
        "desc"
      ],
      "type": "string",
      "description": "sort direction; default depends on sort"
    },
    "cursor": {
      "type": "string",
      "description": "next_cursor from the previous call"
    },
    "status": {
      "enum": [
        "available",
        "pending_delete",
        "redemption",
        "expired_grace"
      ],
      "type": "string"
    },
    "max_len": {
      "type": "integer"
    },
    "min_age": {
      "type": "integer",
      "description": "min years of archive history"
    },
    "min_len": {
      "type": "integer"
    },
    "max_price": {
      "type": "number"
    },
    "min_brand": {
      "type": "integer"
    },
    "no_digits": {
      "type": "boolean"
    },
    "no_hyphen": {
      "type": "boolean"
    },
    "min_quality": {
      "type": "integer"
    },
    "show_parked": {
      "type": "boolean",
      "description": "include names whose archive shows only parked/for-sale pages (hidden by default)"
    },
    "include_spam": {
      "type": "boolean",
      "description": "include spammy names (hidden by default)"
    },
    "min_backlinks": {
      "type": "integer"
    },
    "available_only": {
      "type": "boolean",
      "description": "only names registrable now"
    },
    "drops_within_days": {
      "type": "integer",
      "description": "pending-delete names dropping within N days"
    }
  }
}
find_dropping_domains annotations
{
  "title": "Find expiring domains",
  "readOnlyHint": true,
  "openWorldHint": true,
  "idempotentHint": true,
  "destructiveHint": false
}
drop_radar — Domain Drop Radar search
Advertised by the server during the last successful anonymous check.
Advertised read-onlyOpen-world

Domain Drop Radar: expiring, pending-delete and just-dropped domains filtered by TLD(s), length, keywords, value, quality and drop date, with presets (short-brandable, ai-names, dictionary-com, real-history, cheap-good, dropping-this-week). Returns a summary plus the top 25 with quality reasons, est. value, price, and a ready create_order body for available names or a watch body for others. For up to 500 rows call GET /api/v1/drops/full via x402 ($0.01). Page with limit + cursor (next_cursor in the response); sort with sort + order. To be alerted on future matches call radar_alert.

drop_radar input schema
{
  "type": "object",
  "required": [],
  "properties": {
    "sort": {
      "enum": [
        "quality",
        "value",
        "price",
        "length",
        "drops",
        "new",
        "brand",
        "backlinks",
        "domain",
        "score"
      ],
      "type": "string"
    },
    "tlds": {
      "type": "array",
      "items": {
        "type": "string"
      }
    },
    "limit": {
      "type": "integer",
      "description": "max 25 on the free tier"
    },
    "order": {
      "enum": [
        "asc",
        "desc"
      ],
      "type": "string",
      "description": "sort direction; default depends on sort"
    },
    "cursor": {
      "type": "string",
      "description": "next_cursor from the previous call"
    },
    "preset": {
      "enum": [
        "short-brandable",
        "ai-names",
        "dictionary-com",
        "real-history",
        "cheap-good",
        "dropping-this-week"
      ],
      "type": "string"
    },
    "status": {
      "enum": [
        "available",
        "pending_delete",
        "redemption",
        "expired_grace"
      ],
      "type": "string"
    },
    "max_len": {
      "type": "integer"
    },
    "min_age": {
      "type": "integer"
    },
    "min_len": {
      "type": "integer"
    },
    "keywords": {
      "type": "array",
      "items": {
        "type": "string"
      }
    },
    "ends_with": {
      "type": "string"
    },
    "max_price": {
      "type": "number"
    },
    "max_value": {
      "type": "integer"
    },
    "min_value": {
      "type": "integer"
    },
    "no_digits": {
      "type": "boolean"
    },
    "no_hyphen": {
      "type": "boolean"
    },
    "dictionary": {
      "type": "boolean"
    },
    "min_quality": {
      "type": "integer"
    },
    "starts_with": {
      "type": "string"
    },
    "available_only": {
      "type": "boolean",
      "description": "only names registrable now"
    },
    "new_within_hours": {
      "type": "integer"
    },
    "drops_within_days": {
      "type": "integer",
      "description": "pending-delete names dropping within N days"
    }
  }
}
drop_radar annotations
{
  "title": "Domain Drop Radar search",
  "readOnlyHint": true,
  "openWorldHint": true,
  "idempotentHint": true,
  "destructiveHint": false
}
radar_alert — Save a Drop Radar alert
Advertised by the server during the last successful anonymous check.
Open-world

Save a Drop Radar search and get a signed webhook (event radar.match, header X-StableDomains-Signature = sha256 HMAC of the body with the returned secret) and/or email (double opt-in) when new names match or a pending-delete name drops. Free: 3 alerts per IP, 25 with an API key, max 20 events per alert per day. filters takes the same fields as drop_radar.

radar_alert input schema
{
  "type": "object",
  "required": [
    "filters"
  ],
  "properties": {
    "name": {
      "type": "string"
    },
    "email": {
      "type": "string"
    },
    "filters": {
      "type": "object",
      "description": "same fields as drop_radar (preset, tlds, keywords, max_len, min_quality, ...)"
    },
    "webhook_url": {
      "type": "string"
    }
  }
}
radar_alert annotations
{
  "title": "Save a Drop Radar alert",
  "readOnlyHint": false,
  "openWorldHint": true,
  "idempotentHint": false,
  "destructiveHint": false
}
suggest_domains — Suggest available domains
Advertised by the server during the last successful anonymous check.
Advertised read-onlyOpen-world

Free. Pass domain (e.g. a taken name like agent.com) to get close AVAILABLE alternatives (other extensions, get/try/hq/app variants), live-checked and ranked by price. Or pass idea to generate brandable names for a product idea. Returns only names available right now with USD price and checkout_url.

suggest_domains input schema
{
  "type": "object",
  "required": [],
  "properties": {
    "idea": {
      "type": "string",
      "description": "plain-words idea, e.g. ai bookkeeping for plumbers"
    },
    "tlds": {
      "type": "array",
      "items": {
        "type": "string"
      }
    },
    "domain": {
      "type": "string",
      "description": "a (taken) domain to find alternatives for"
    },
    "max_price": {
      "type": "number"
    }
  }
}
suggest_domains annotations
{
  "title": "Suggest available domains",
  "readOnlyHint": true,
  "openWorldHint": true,
  "idempotentHint": true,
  "destructiveHint": false
}
estimate_domain_value — Estimate domain value
Advertised by the server during the last successful anonymous check.
Advertised read-onlyOpen-world

Heuristic USD value estimate for any domain (length, TLD, dictionary words, brandability, Wayback age, backlinks) with factor breakdown and availability.

estimate_domain_value input schema
{
  "type": "object",
  "required": [
    "domain"
  ],
  "properties": {
    "domain": {
      "type": "string"
    }
  }
}
estimate_domain_value annotations
{
  "title": "Estimate domain value",
  "readOnlyHint": true,
  "openWorldHint": true,
  "idempotentHint": true,
  "destructiveHint": false
}
whois_lookup — WHOIS / RDAP lookup
Advertised by the server during the last successful anonymous check.
Advertised read-onlyOpen-world

RDAP (modern WHOIS) lookup for any domain: registrar, created/expires dates, status codes, nameservers, DNSSEC.

whois_lookup input schema
{
  "type": "object",
  "required": [
    "domain"
  ],
  "properties": {
    "domain": {
      "type": "string"
    }
  }
}
whois_lookup annotations
{
  "title": "WHOIS / RDAP lookup",
  "readOnlyHint": true,
  "openWorldHint": true,
  "idempotentHint": true,
  "destructiveHint": false
}
dns_email_check — DNS and email security check
Advertised by the server during the last successful anonymous check.
Advertised read-onlyOpen-world

DNS + email security audit via DNS-over-HTTPS: A/AAAA/MX/NS/CAA, SPF, DKIM (common or given selectors), DMARC policy, grade A-F and concrete fixes.

dns_email_check input schema
{
  "type": "object",
  "required": [
    "domain"
  ],
  "properties": {
    "domain": {
      "type": "string"
    },
    "dkim_selectors": {
      "type": "string",
      "description": "comma-separated"
    }
  }
}
dns_email_check annotations
{
  "title": "DNS and email security check",
  "readOnlyHint": true,
  "openWorldHint": true,
  "idempotentHint": true,
  "destructiveHint": false
}
is_domain_dropping — Check if a domain is dropping
Advertised by the server during the last successful anonymous check.
Advertised read-onlyOpen-world

Is an expired domain about to become available? Returns lifecycle (grace, redemption, pending delete, available, registered), estimated drop date and backlink data if in our drop feed.

is_domain_dropping input schema
{
  "type": "object",
  "required": [
    "domain"
  ],
  "properties": {
    "domain": {
      "type": "string"
    }
  }
}
is_domain_dropping annotations
{
  "title": "Check if a domain is dropping",
  "readOnlyHint": true,
  "openWorldHint": true,
  "idempotentHint": true,
  "destructiveHint": false
}
watch_domain — Watch a domain for drops
Advertised by the server during the last successful anonymous check.
Open-world

Get notified when an expiring domain changes status or drops (becomes registrable). Pass webhook_url (active immediately, POSTs JSON events domain.status_changed / domain.available with a ready order_api body) and/or email (double opt-in). Free.

watch_domain input schema
{
  "type": "object",
  "required": [
    "domain"
  ],
  "properties": {
    "email": {
      "type": "string"
    },
    "domain": {
      "type": "string"
    },
    "webhook_url": {
      "type": "string",
      "description": "public https URL"
    }
  }
}
watch_domain annotations
{
  "title": "Watch a domain for drops",
  "readOnlyHint": false,
  "openWorldHint": true,
  "idempotentHint": true,
  "destructiveHint": false
}
set_url_forward — Set URL forwarding
Advertised by the server during the last successful anonymous check.
Advertised destructiveOpen-world

FREE 301 URL forwarding for a domain you registered with us: forward the whole domain (subdomain '@', also covers www) or a subdomain to any https URL. Points DNS at our redirect service. preserve_path keeps /path?query.

set_url_forward input schema
{
  "type": "object",
  "required": [
    "domain",
    "target"
  ],
  "properties": {
    "code": {
      "enum": [
        301,
        302
      ],
      "type": "integer"
    },
    "domain": {
      "type": "string"
    },
    "target": {
      "type": "string",
      "description": "https://destination"
    },
    "subdomain": {
      "type": "string",
      "description": "@ (default) or e.g. blog"
    },
    "preserve_path": {
      "type": "boolean"
    }
  }
}
set_url_forward annotations
{
  "title": "Set URL forwarding",
  "readOnlyHint": false,
  "openWorldHint": true,
  "idempotentHint": true,
  "destructiveHint": true
}
list_url_forwards — List URL forwards
Advertised by the server during the last successful anonymous check.
Advertised read-only

URL forwards configured on a domain you own.

list_url_forwards input schema
{
  "type": "object",
  "required": [
    "domain"
  ],
  "properties": {
    "domain": {
      "type": "string"
    }
  }
}
list_url_forwards annotations
{
  "title": "List URL forwards",
  "readOnlyHint": true,
  "openWorldHint": false,
  "idempotentHint": true,
  "destructiveHint": false
}
apply_dns_template — Apply a DNS template
Advertised by the server during the last successful anonymous check.
Advertised destructiveOpen-world

FREE one-call DNS setup for a domain you own. template: vercel | netlify (params.site) | github-pages (params.user) | google-workspace | microsoft-365 | zoho-mail (params.region: com|eu|in|com.au). Replaces only the conflicting web or MX/SPF records.

apply_dns_template input schema
{
  "type": "object",
  "required": [
    "domain",
    "template"
  ],
  "properties": {
    "domain": {
      "type": "string"
    },
    "params": {
      "type": "object"
    },
    "template": {
      "enum": [
        "vercel",
        "netlify",
        "github-pages",
        "google-workspace",
        "microsoft-365",
        "zoho-mail"
      ],
      "type": "string"
    }
  }
}
apply_dns_template annotations
{
  "title": "Apply a DNS template",
  "readOnlyHint": false,
  "openWorldHint": true,
  "idempotentHint": true,
  "destructiveHint": true
}
get_dns — Get DNS records
Advertised by the server during the last successful anonymous check.
Advertised read-only

Nameservers and DNS records (A/AAAA/CNAME/MX/TXT) of a domain you own.

get_dns input schema
{
  "type": "object",
  "required": [
    "domain"
  ],
  "properties": {
    "domain": {
      "type": "string"
    }
  }
}
get_dns annotations
{
  "title": "Get DNS records",
  "readOnlyHint": true,
  "openWorldHint": false,
  "idempotentHint": true,
  "destructiveHint": false
}
set_dns — Set DNS records / nameservers
Advertised by the server during the last successful anonymous check.
Advertised destructiveOpen-world

Set DNS records and/or nameservers of a domain you own. records: [{type: A|AAAA|CNAME|MX|TXT, name: '@'|sub, value, ttl?, priority? (MX)}]. mode 'replace' (default) replaces the FULL record set; mode 'merge' adds/updates the given records, deletes any in remove [{type,name,value?}], and keeps everything else (safer for adding MX/TXT next to a website).

set_dns input schema
{
  "type": "object",
  "required": [
    "domain"
  ],
  "properties": {
    "mode": {
      "enum": [
        "replace",
        "merge"
      ],
      "type": "string"
    },
    "domain": {
      "type": "string"
    },
    "remove": {
      "type": "array",
      "items": {
        "type": "object",
        "required": [
          "type",
          "name"
        ],
        "properties": {
          "name": {
            "type": "string"
          },
          "type": {
            "enum": [
              "A",
              "AAAA",
              "CNAME",
              "MX",
              "TXT"
            ],
            "type": "string"
          },
          "value": {
            "type": "string"
          }
        }
      }
    },
    "records": {
      "type": "array",
      "items": {
        "type": "object",
        "required": [
          "type",
          "name",
          "value"
        ],
        "properties": {
          "ttl": {
            "type": "integer"
          },
          "name": {
            "type": "string"
          },
          "type": {
            "enum": [
              "A",
              "AAAA",
              "CNAME",
              "MX",
              "TXT"
            ],
            "type": "string"
          },
          "value": {
            "type": "string"
          },
          "priority": {
            "type": "integer"
          }
        }
      }
    },
    "nameservers": {
      "type": "array",
      "items": {
        "type": "string"
      }
    }
  }
}
set_dns annotations
{
  "title": "Set DNS records / nameservers",
  "readOnlyHint": false,
  "openWorldHint": true,
  "idempotentHint": true,
  "destructiveHint": true
}
renew_domain — Renew a domain
Advertised by the server during the last successful anonymous check.
Open-world

Renew a domain you own. Returns USDC payment requirements (402), or pay_with=balance to renew instantly from prepaid balance.

renew_domain input schema
{
  "type": "object",
  "required": [
    "domain"
  ],
  "properties": {
    "chain": {
      "enum": [
        "base",
        "ethereum",
        "arbitrum",
        "polygon",
        "hyperevm",
        "bsc",
        "solana"
      ],
      "type": "string",
      "description": "payment network (default base). hyperevm = HyperEVM (chain 999, USDC/USDT0), bsc = BNB Chain (56, 18-decimal USDC/USDT)"
    },
    "token": {
      "enum": [
        "USDC",
        "USDT"
      ],
      "type": "string",
      "description": "stablecoin (default USDC)"
    },
    "years": {
      "type": "integer"
    },
    "domain": {
      "type": "string"
    },
    "pay_with": {
      "enum": [
        "crypto",
        "balance"
      ],
      "type": "string"
    },
    "idempotency_key": {
      "type": "string"
    }
  }
}
renew_domain annotations
{
  "title": "Renew a domain",
  "readOnlyHint": false,
  "openWorldHint": true,
  "idempotentHint": false,
  "destructiveHint": false
}
set_notification_webhook — Set notification webhook
Advertised by the server during the last successful anonymous check.
Advertised destructive

Account webhook for lifecycle events: domain.expiring (30/7/1 days before), domain.renewed, domain.transfer_completed. null to remove.

set_notification_webhook input schema
{
  "type": "object",
  "required": [
    "webhook_url"
  ],
  "properties": {
    "webhook_url": {
      "type": [
        "string",
        "null"
      ]
    }
  }
}
set_notification_webhook annotations
{
  "title": "Set notification webhook",
  "readOnlyHint": false,
  "openWorldHint": false,
  "idempotentHint": true,
  "destructiveHint": true
}
transfer_domain — Transfer a domain in
Advertised by the server during the last successful anonymous check.
Open-world

Transfer a domain in from another registrar using its auth/EPP code; paid in USDC (adds 1 year). Unlock it at the current registrar first. Completes in ~5-7 days.

transfer_domain input schema
{
  "type": "object",
  "required": [
    "domain",
    "auth_code"
  ],
  "properties": {
    "ref": {
      "type": "string"
    },
    "chain": {
      "enum": [
        "base",
        "ethereum",
        "arbitrum",
        "polygon",
        "hyperevm",
        "bsc",
        "solana"
      ],
      "type": "string",
      "description": "payment network (default base). hyperevm = HyperEVM (chain 999, USDC/USDT0), bsc = BNB Chain (56, 18-decimal USDC/USDT)"
    },
    "token": {
      "enum": [
        "USDC",
        "USDT"
      ],
      "type": "string",
      "description": "stablecoin (default USDC)"
    },
    "years": {
      "type": "integer"
    },
    "domain": {
      "type": "string"
    },
    "pay_with": {
      "enum": [
        "crypto",
        "balance"
      ],
      "type": "string"
    },
    "auth_code": {
      "type": "string"
    },
    "idempotency_key": {
      "type": "string"
    }
  }
}
transfer_domain annotations
{
  "title": "Transfer a domain in",
  "readOnlyHint": false,
  "openWorldHint": true,
  "idempotentHint": false,
  "destructiveHint": false
}
create_cart — Create a multi-domain cart
Advertised by the server during the last successful anonymous check.

Register up to 20 available domains with ONE payment (exact total in the 402). Returns a price-locked quote, checkout_url for a human to pay, and is idempotent via idempotency_key. After payment each is registered; any failure is refunded to prepaid balance.

create_cart input schema
{
  "type": "object",
  "required": [
    "domains"
  ],
  "properties": {
    "ref": {
      "type": "string"
    },
    "chain": {
      "enum": [
        "base",
        "ethereum",
        "arbitrum",
        "polygon",
        "hyperevm",
        "bsc",
        "solana"
      ],
      "type": "string",
      "description": "payment network (default base). hyperevm = HyperEVM (chain 999, USDC/USDT0), bsc = BNB Chain (56, 18-decimal USDC/USDT)"
    },
    "token": {
      "enum": [
        "USDC",
        "USDT"
      ],
      "type": "string",
      "description": "stablecoin (default USDC)"
    },
    "domains": {
      "type": "array",
      "items": {
        "type": "string"
      }
    },
    "nameservers": {
      "type": "array",
      "items": {
        "type": "string"
      }
    },
    "idempotency_key": {
      "type": "string"
    }
  }
}
create_cart annotations
{
  "title": "Create a multi-domain cart",
  "readOnlyHint": false,
  "openWorldHint": false,
  "idempotentHint": false,
  "destructiveHint": false
}
get_referral_link — Get referral link
Advertised by the server during the last successful anonymous check.
Advertised read-only

Your referral code and shareable link (?ref=<code>, 30-day attribution). Referrers earn 10% of our margin on paid orders by people/agents they refer; agents pass ref=<code> on create_order, create_cart or transfer_domain.

get_referral_link input schema
{
  "type": "object",
  "required": [],
  "properties": {}
}
get_referral_link annotations
{
  "title": "Get referral link",
  "readOnlyHint": true,
  "openWorldHint": false,
  "idempotentHint": true,
  "destructiveHint": false
}
get_referral_stats — Get referral stats
Advertised by the server during the last successful anonymous check.
Advertised read-only

Referral dashboard: clicks, referred users, sales, earned / unpaid / pending / paid USD, recent sales and payouts. Payouts are USDC on Base, batched weekly (min $5, capped, admin-approved) to your payout address.

get_referral_stats input schema
{
  "type": "object",
  "required": [],
  "properties": {}
}
get_referral_stats annotations
{
  "title": "Get referral stats",
  "readOnlyHint": true,
  "openWorldHint": false,
  "idempotentHint": true,
  "destructiveHint": false
}
set_payout_address — Set referral payout address
Advertised by the server during the last successful anonymous check.
Advertised destructive

Set the Base USDC address that receives your weekly referral payouts (null to clear).

set_payout_address input schema
{
  "type": "object",
  "required": [
    "payout_address"
  ],
  "properties": {
    "payout_address": {
      "type": [
        "string",
        "null"
      ]
    }
  }
}
set_payout_address annotations
{
  "title": "Set referral payout address",
  "readOnlyHint": false,
  "openWorldHint": false,
  "idempotentHint": true,
  "destructiveHint": true
}
set_auto_renew — Set auto-renew / fund renewal vault
Advertised by the server during the last successful anonymous check.
Open-world

Turn auto-renew on/off for a domain you own and/or fund its renewal balance (vault). deposit_usd moves USDC from your prepaid balance (topup_balance) into the domain's vault; withdraw_usd moves it back. The daily job renews 1 year when ≤30 days from expiry if the vault covers the price, otherwise emails reminders at 30/14/7/1 days.

set_auto_renew input schema
{
  "type": "object",
  "required": [
    "domain"
  ],
  "properties": {
    "domain": {
      "type": "string"
    },
    "enabled": {
      "type": "boolean"
    },
    "deposit_usd": {
      "type": "number"
    },
    "withdraw_usd": {
      "type": "number"
    }
  }
}
set_auto_renew annotations
{
  "title": "Set auto-renew / fund renewal vault",
  "readOnlyHint": false,
  "openWorldHint": true,
  "idempotentHint": false,
  "destructiveHint": false
}
get_renewal_balance — Get renewal balance
Advertised by the server during the last successful anonymous check.
Advertised read-only

Auto-renew vault for a domain: renewal balance, 1-year renewal price, whether it is covered, shortfall, days to expiry and ledger. Omit domain to list all your domains' renewal balances.

get_renewal_balance input schema
{
  "type": "object",
  "required": [],
  "properties": {
    "domain": {
      "type": "string"
    }
  }
}
get_renewal_balance annotations
{
  "title": "Get renewal balance",
  "readOnlyHint": true,
  "openWorldHint": false,
  "idempotentHint": true,
  "destructiveHint": false
}
search_agents — Search agent directory
Advertised by the server during the last successful anonymous check.
Advertised read-only

Search the StableDomains.net agent directory (approved AI agents and MCP servers) by keyword or capability. Returns name, description, url, endpoint_url, mcp_url, capabilities, payment_methods and profile_url.

search_agents input schema
{
  "type": "object",
  "required": [],
  "properties": {
    "q": {
      "type": "string"
    },
    "limit": {
      "type": "integer"
    },
    "capability": {
      "type": "string"
    }
  }
}
search_agents annotations
{
  "title": "Search agent directory",
  "readOnlyHint": true,
  "openWorldHint": false,
  "idempotentHint": true,
  "destructiveHint": false
}
get_agent — Get agent profile
Advertised by the server during the last successful anonymous check.
Advertised read-only

Get one agent directory profile by slug.

get_agent input schema
{
  "type": "object",
  "required": [
    "slug"
  ],
  "properties": {
    "slug": {
      "type": "string"
    }
  }
}
get_agent annotations
{
  "title": "Get agent profile",
  "readOnlyHint": true,
  "openWorldHint": false,
  "idempotentHint": true,
  "destructiveHint": false
}
list_my_agent — List my agent profiles
Advertised by the server during the last successful anonymous check.
Advertised read-only

Agent profiles you submitted (any status: pending, approved, rejected) with review notes. Submit a new one with POST /api/v1/agents (auth required, moderated).

list_my_agent input schema
{
  "type": "object",
  "required": [],
  "properties": {}
}
list_my_agent annotations
{
  "title": "List my agent profiles",
  "readOnlyHint": true,
  "openWorldHint": false,
  "idempotentHint": true,
  "destructiveHint": false
}
list_domains — List my domains
Advertised by the server during the last successful anonymous check.
Advertised read-only

List the domains owned by the caller, with expiry dates and status.

list_domains input schema
{
  "type": "object",
  "required": [],
  "properties": {}
}
list_domains annotations
{
  "title": "List my domains",
  "readOnlyHint": true,
  "openWorldHint": false,
  "idempotentHint": true,
  "destructiveHint": false
}

Prompts

Not advertised

No prompt definitions available.

Resources

Not advertised

No resource definitions available.

30-day availability

Aggregated from read-only remote checks; this is not a tool-execution or security guarantee.

Successful checks
1 of 1 (100%)
Average latency
578 ms
95th percentile latency
578 ms

Maintenance history

Public check and source-refresh events. Editorial and ownership records remain private.

  • · probe · passed · 578 ms · metadata changed · 37 tool(s)

Connect from your client

Each snippet registers the same endpoint; pick the client you use.

This server is operated by the named third party. Listing and endpoint checks are not an endorsement or a security audit. Review the operator's permissions, terms, and data handling before connecting. How listings are checked and corrected.

Claude Code

Run this once in a terminal. It registers the remote server. Use --scope project to write .mcp.json for the repo.
Claude Code configuration
claude mcp add --transport http stabledomains-mcp https://stabledomains.net/api/mcp

Codex

Run this once. Codex stores MCP servers in ~/.codex/config.toml (or .codex/config.toml in a trusted project).
Codex configuration
codex mcp add stabledomains-mcp --url https://stabledomains.net/api/mcp

Cursor

Merge this server into .cursor/mcp.json in your project, then enable stabledomains-mcp in your MCP settings.
Cursor configuration
{
  "mcpServers": {
    "stabledomains-mcp": {
      "url": "https://stabledomains.net/api/mcp"
    }
  }
}

Cline

Merge this into cline_mcp_settings.json (Cline → MCP Servers → Configure).
Cline configuration
{
  "mcpServers": {
    "stabledomains-mcp": {
      "type": "streamableHttp",
      "url": "https://stabledomains.net/api/mcp",
      "disabled": false
    }
  }
}

VS Code

Merge this server into .vscode/mcp.json. Use MCP: List Servers to start stabledomains-mcp and inspect its tools.
VS Code configuration
{
  "servers": {
    "stabledomains-mcp": {
      "type": "http",
      "url": "https://stabledomains.net/api/mcp"
    }
  }
}

Gemini CLI

Run this once. It writes .gemini/settings.json in the current project; pass --scope user for ~/.gemini/settings.json.
Gemini CLI configuration
gemini mcp add --transport http stabledomains-mcp https://stabledomains.net/api/mcp

Claude Desktop

Merge this into claude_desktop_config.json (macOS: ~/Library/Application Support/Claude/, Windows: %APPDATA%\Claude\), then restart Claude Desktop.
Claude Desktop configuration
{
  "mcpServers": {
    "stabledomains-mcp": {
      "url": "https://stabledomains.net/api/mcp"
    }
  }
}

Windsurf

Merge this into ~/.codeium/windsurf/mcp_config.json, then refresh MCP in Cascade. Windsurf remote servers use serverUrl, not url.
Windsurf configuration
{
  "mcpServers": {
    "stabledomains-mcp": {
      "serverUrl": "https://stabledomains.net/api/mcp"
    }
  }
}

Let your agent find its tools

Find servers like StableDomains MCP from your agent. Add Koskamo once to search the index for endpoints, access requirements, and client setup. Public discovery needs no key.

Do you run StableDomains MCP?

Prove ownership with a DNS record, a well-known file, or your Official MCP Registry entry, and your edits publish immediately. Proofs are re-checked weekly; admins can still hide or remove a listing.

Claim this listing