Product
Custom Domains MCP Server for Claude, Cursor and ChatGPT
A hosted MCP endpoint that lets AI agents search, register and connect customer domains, with the same verification and TLS gates humans get.
Custom Domain runs a hosted MCP server for domains at https://mcp.customdomain.ai/mcp. Point Claude, Cursor, ChatGPT or any MCP client at it, and your agent can search domain availability, register a domain, connect a domain a customer already owns, and watch verification and TLS come up. Everything runs through the same control plane that powers our custom domains for SaaS product.
This matters most if you build agents that ship things for people: a site builder assistant, a store setup agent, a deploy bot. The last mile of every one of those jobs is a domain, and the last mile of a domain is DNS, ownership verification and certificates. The MCP server hands that whole mile to the agent as a small set of safe tools that express intent.
What is MCP?
The Model Context Protocol is an open standard that gives AI assistants a uniform way to discover and call external tools. Instead of building a separate plugin for every assistant, a service publishes one MCP server; clients such as Claude Code, Claude Desktop, Cursor and ChatGPT connect to it and see typed tools they can call over JSON-RPC. Our server speaks streamable HTTP, the current standard for remote MCP servers, so there is nothing to install and nothing to run on your side.
What the server exposes
The server identifies itself as customdomain-mcp and advertises eleven tools. Together they cover the full life of a customer domain:
| Tool | What it does |
|---|---|
search-domain-availability | Check whether a domain can be registered, with live purchase and renewal pricing. |
generate-domain-suggestions | Return name ideas, for a set of keywords, that are actually available to register. |
create-domain-order | Start a registration through the resolved registrar. |
check-order-status | Read the live status of a registration order. |
connect-domain | Start a guided DNS configuration flow for a domain the customer already owns. |
check-connection-status | Read the live status of a connection job, from records written to certificate issued. |
discover-provider | Detect where a domain's DNS is hosted. Read only. |
reapply-connection | Re-apply a managed connection. |
disconnect-domain | Cleanly disconnect a managed connection. |
forward-domain | Set up a permanent redirect from a domain to a destination. |
add-email | Configure a domain for a mail provider in one step: MX, SPF, DKIM and DMARC from server-side templates. |
Note what is missing: there is no tool that writes raw DNS records. When an agent calls connect-domain, the record values come from the control plane, computed from the same vetted templates behind our human flows, and applied through the best available rail for that provider: one-click provider authorization, an API token, or a guided manual flow that verifies automatically. The agent chooses intent, never record contents, which removes a whole class of prompt injection outcomes before it can exist.
Connect your client
You need an API key. Create an application in the console, issue a key from its settings, and keep it secret; keys look like sk_live_YOUR_KEY and are shown once. The free tier is enough to try everything on this page.
Claude Code
One command:
claude mcp add --transport http customdomain https://mcp.customdomain.ai/mcp --header "Authorization: Bearer sk_live_YOUR_KEY"
Claude Desktop
Add the server to claude_desktop_config.json through the mcp-remote bridge:
{
"mcpServers": {
"customdomain": {
"command": "npx",
"args": ["-y", "mcp-remote", "https://mcp.customdomain.ai/mcp", "--header", "Authorization: Bearer sk_live_YOUR_KEY"]
}
}
}
Cursor
Add to .cursor/mcp.json, at the project or global level:
{
"mcpServers": {
"customdomain": {
"url": "https://mcp.customdomain.ai/mcp",
"headers": { "Authorization": "Bearer sk_live_YOUR_KEY" }
}
}
}
ChatGPT
ChatGPT supports remote MCP servers as connectors in developer mode. Enable developer mode in settings, add a connector pointing at https://mcp.customdomain.ai/mcp, and supply your API key as the bearer credential. Connector availability varies by plan, so check OpenAI's current documentation if you do not see the option.
Prefer short-lived credentials? The server also has an OAuth token endpoint: exchange your application ID and client secret at POST https://mcp.customdomain.ai/token with grant_type=client_credentials and use the returned JWT as the bearer token. Details are in the docs.
What an agent can do end to end
Say a customer tells your agent: "put my store on shop.acme.com." The agent calls discover-provider to learn where the domain's DNS lives, then connect-domain to start the flow. The control plane detects the provider, applies the records through the strongest rail available, verifies ownership, and issues the certificate. The agent polls check-connection-status until the job reports live. No DNS panel, no copied records, no support ticket.
Now say the customer has no domain at all. The agent calls generate-domain-suggestions with a few keywords, checks the shortlist with search-domain-availability for real pricing, places the registration with create-domain-order, follows it with check-order-status, and connects the new domain the moment it exists. One conversation goes from "I need a website" to a live HTTPS domain.
The remaining tools round out the operational picture: add-email points a domain at a mail provider in one step, forward-domain sets up permanent redirects for spare domains, and reapply-connection and disconnect-domain handle the rare cleanup work. If you are designing this kind of product, start with the agent integration guide and the AI agents overview.
Security: scoped keys, no raw records, fail-closed purchases
Giving an agent authority over DNS deserves suspicion, so the server is built to make the dangerous things impossible rather than merely discouraged:
- API keys with scope. Every call carries a bearer credential tied to one application in your account. The MCP server holds no ambient authority of its own; it forwards your credential to the control plane, which enforces the same permissions your REST API calls get. Revoke the key and the agent is out.
- No DNS record input. Tools express intent. Record values are computed server side, so a manipulated prompt cannot smuggle a hostile record into a customer's zone.
- Fail-closed purchases.
create-domain-orderplaces a paid order only after a successful call to your purchase authorization callback. If that callback is not configured or does not approve, no money moves. - Certificates only for authorized hostnames. TLS is issued on demand, and only for hostnames with a live or propagating connection behind them, with strict isolation between tenants.
The MCP server is available on every plan, including the free tier, and sits on the same rails as our 63 supported DNS and registrar providers. Read the full tool reference in the documentation, compare plans on the pricing page, or book a demo if you want to walk through an agent integration with us.
Frequently asked questions
Do I need to run anything to use the MCP server?
No. It is a hosted endpoint at https://mcp.customdomain.ai/mcp using streamable HTTP. Add it to Claude, Cursor or ChatGPT with an API key from your console and start calling tools. There is no package to install and no process to keep alive.
Can an agent change arbitrary DNS records through the MCP server?
No. None of the eleven tools accepts DNS records as input. Record values are generated server side from vetted templates, so an agent can express intent such as connect, forward or add email, but it can never write raw records into a customer's zone.
Can an agent buy domains, and what stops it from overspending?
Yes, through create-domain-order, and purchases are fail closed. The server places a paid order only after a successful call to your purchase authorization callback. If the callback is not configured or does not approve the order, nothing is charged.
How is access scoped and revoked?
Every call carries a bearer credential: a console API key or a short-lived token from the OAuth client_credentials endpoint at /token. Credentials are tied to one application in your account, the control plane enforces the same permissions as the REST API, and revoking the key cuts the agent off immediately.