MCP API
The same domain-availability engine behind the site, exposed as an MCP server — so an AI agent can check domains inside its own workflow. Real registry data (DNS + RDAP). No account, no upsell.
Endpoint
Add this URL to Claude.ai, Cursor, or any MCP client:
https://mcp.icanhazdomain.com/mcp Transport: streamable HTTP, stateless. No auth in v1 — the tools are public and read-only.
How to add it
- Claude.ai / Claude Desktop: Settings → Connectors → Add custom connector → paste the URL above.
- Cursor: Settings → MCP → Add server → use the URL as a streamable-HTTP server.
- Any MCP client: point it at the endpoint as a streamable-HTTP MCP server.
Tools
check_domains Many domain_labels × many domain_suffixes → availability for every combination in one call.
Pass a single label to check one name across many suffixes — ["openai"] × ["com","ai","dev"] — or many labels to compare a shortlist: ["uxrubric","uxeval","uxbench"] × ["com","ai","app"] → 9 results. Caps: 50 labels, 50 suffixes, ≤ 1000 combinations per call (split larger sweeps across calls).
In your browser (WebMCP)
Every page of this site also registers check_domains as an in-page tool, so an AI agent running inside your browser can check domains without adding a server at all. Same tool name, same arguments, same results as the MCP endpoint above — one catalog, two bindings.
WebMCP is a draft web standard (W3C Web Machine Learning Community Group): a page hands the browser typed tools, and in-browser agents call them the way MCP clients call MCP servers. It is still incubating — this site feature-detects it and stays completely inert where it is missing.
Turning it on today
- Chrome 149+: works on this origin already — we run the WebMCP origin trial here.
- Chrome / Edge, no trial: enable chrome://flags/#enable-webmcp-testing (in Edge, search the same flag name in edge://flags) and restart.
- Not on a phone: every iOS and iPadOS browser is WebKit, which has no WebMCP implementation.
Call it from DevTools
const [tool] = await document.modelContext.getTools()
await document.modelContext.executeTool(
tool,
JSON.stringify({ domain_labels: ["crankingai"], domain_suffixes: ["com", "ai"] })
) Two sharp edges, verified on Chromium 151: executeTool takes the tool object from getTools(), not its name, and the input as a JSON string, not an object. If the tools registered, the console says so on page load.
Prefer plain HTTP?
The same engine answers a simple JSON API for non-MCP callers: POST https://mcp.icanhazdomain.com/api/check with { "domain_label": "openai", "domain_suffixes": ["com","ai"] }.