Domain research for AI agents: checks hundreds of names in one call, with prices and where to buy.
Domain research for AI agents. Every good .com is taken. Find the ones that aren't.

DomainScout is an MCP server for bulk domain search. Your AI assistant brainstorms hundreds of names, and DomainScout checks all of them in one call: which are free, what they cost and where to buy them. It runs on your own machine. You need no account and no server of ours, and API keys are optional.
Website · npm · MCP Registry · Examples
.com, .net and .ai by default; ask for any other.DomainScout does not invent names: your assistant does that, and DomainScout tells it which of them are really free.
Node 20 or newer.
Claude Desktop: one click: download the extension and open it. Claude Desktop asks to install it, and lets you set the options below.
Claude Code: the plugin adds the server and a skill that runs the whole name search (brainstorm, check, present the free names with prices):
/plugin marketplace add JohnDaka/domainscout-mcp
/plugin install domainscout@domainscout
Or the server alone:
claude mcp add domainscout -- npx -y @dakaio/domainscout-mcp
Cursor and VS Code: use the buttons at the top, or add the server to the MCP config.
Any MCP client: add to the MCP config:
{
"mcpServers": {
"domainscout": {
"command": "npx",
"args": ["-y", "@dakaio/domainscout-mcp"],
"env": { "DOMAINSCOUT_TLDS": "com,net,ai,io" }
}
}
}
On Windows, if npx is not found, use "command": "cmd" with
"args": ["/c", "npx", "-y", "@dakaio/domainscout-mcp"].
Then just ask: "Brainstorm 200 names for my coffee subscription app and tell me which .com domains are free."
From source: npm install && npm run build, then run node /path/to/domainscout-mcp/dist/index.js
in place of npx -y @dakaio/domainscout-mcp.
check_domainsChecks whether domain names are free to register, and shows prices and where to buy the free ones. Read-only: it never registers or changes anything.
| Parameter | Type | Default | What it is |
|---|---|---|---|
domains | string[] (1 to 1,000 entries) | required | Names or domains: acme, acme.io, https://acme.dev. A name without a TLD is tried in every TLD from tlds |
tlds | string[] | DOMAINSCOUT_TLDS (com,net,ai) | TLDs for names given without one, e.g. ["com"] for a long list |
confirm | boolean | true | Confirm free-looking names with registrar APIs, when you set keys |
details | boolean | false | Include the evidence from every source (DNS, RDAP, WHOIS, registrar API) |
It returns a short text report for the model and the same data as structured content: a summary with counts per status, one result per domain (status, note, registration dates, buy links with prices), skipped entries and warnings.
| Status | Meaning |
|---|---|
available | A registrar API confirmed it can be registered; premium says whether it costs extra |
likely_available | Not in the registry or DNS, not confirmed by a registrar |
taken | Registered |
reserved | Blocked by the registry, or the registrar cannot sell it |
unknown | Could not verify right now (timeout, rate limit); try again |
You ask your assistant "I'm naming a note-taking app. Brainstorm 500 names and tell me which .com
domains are free." The assistant calls check_domains once with all 500 names and gets back:
Checked 500 domain(s) in 23.0s: 27 available, 473 taken.
AVAILABLE (cheapest known offer for each):
- quillloom.com: $10.46/yr at Cloudflare https://www.cloudflare.com/domains/search/?q=quillloom.com
- scribeloom.com: $10.46/yr at Cloudflare https://www.cloudflare.com/domains/search/?q=scribeloom.com
- scribebloom.com: $10.46/yr at Cloudflare https://www.cloudflare.com/domains/search/?q=scribebloom.com
...
TAKEN: quillwise.com, quillnest.com, quillflow.com, quillhub.com, quillpad.com, quillbox.com,
quillbase.com, quillkit.com, ...
Ask about a few favourites afterwards and each one gets every registrar's link and price. More real output, including the command line and JSON: examples.
For each domain, in parallel and within polite rate limits:
.io and .de) or when RDAP fails.Having no DNS never proves a domain is free: a bought but unused domain has no DNS either.
Without a registrar API key, "not in the registry" is reported as likely_available. Premium
and registry-reserved names look the same there, so the registrar's page has the final price.
None. DomainScout works without an account or API keys. Registrar API keys are optional: with one, free-looking names are confirmed by the registrar, premium names are flagged and the exact price is shown. One key is enough. With several, the APIs are asked in this order, each name only until one answers.
| Registrar | Variables | Where to get it |
|---|---|---|
| Name.com | DOMAINSCOUT_NAMECOM_USERNAME, DOMAINSCOUT_NAMECOM_TOKEN | Account Settings → Security → API Tokens |
| Cloudflare | DOMAINSCOUT_CLOUDFLARE_ACCOUNT_ID, DOMAINSCOUT_CLOUDFLARE_API_TOKEN | API token with Registrar permission. The Registrar API is in beta |
| Spaceship | DOMAINSCOUT_SPACESHIP_API_KEY, DOMAINSCOUT_SPACESHIP_API_SECRET | API Manager; the key needs the domains:read scope |
| Porkbun | DOMAINSCOUT_PORKBUN_API_KEY, DOMAINSCOUT_PORKBUN_SECRET_KEY | porkbun.com/account/api |
Each key is sent only to its own registrar's API, and it never appears in output, logs or error messages. If a registrar rejects a key, the result says so in its notes, and the check still works without that registrar.
Set these as environment variables in the MCP config. All are optional.
| Variable | Default | What it does |
|---|---|---|
DOMAINSCOUT_TLDS | com,net,ai | TLDs tried for names given without one |
DOMAINSCOUT_REGISTRARS | all | Registrars to show buy links for, e.g. cloudflare,porkbun,namecheap |
DOMAINSCOUT_MAX_CONCURRENCY | 10 | Network requests in flight at once |
DOMAINSCOUT_PER_HOST_CONCURRENCY | 2 | Requests in flight to one RDAP server |
DOMAINSCOUT_TIMEOUT_MS | 10000 | Timeout of one request |
DOMAINSCOUT_MAX_DOMAINS | 500 | Domains per call, after adding TLDs |
DOMAINSCOUT_CONFIRM_MAX | 50 | Free domains per call confirmed through your registrar API |
DOMAINSCOUT_DNS | on | DNS pre-check |
DOMAINSCOUT_DNS_SERVERS | system | DNS servers to use, comma-separated |
DOMAINSCOUT_PRICES | on | Public price lists |
DOMAINSCOUT_AFFILIATE | on | Affiliate buy links (off gives plain links) |
DOMAINSCOUT_MAX_DOMAINS, at most 10,000)
and 1,000 input entries.DOMAINSCOUT_CONFIRM_MAX names per call are confirmed. Porkbun throttles an account to 50 names
per 5 minutes for a day once it has checked about 1,800 names in 3 hours while registering few
of them; the limit keeps every call well below that. A tool call can pass confirm: false to
skip confirmation for a large list.DomainScout is free and open source under the MIT license. There is no account, subscription or usage fee. The prices it shows are the registrars' own standard prices, from public price lists, or the exact price from your registrar API.
The full policy: domainscout.dakaio.com/privacy.html.
DOMAINSCOUT_PRICES=off turns the price lists off.Some buy links may be affiliate links. When they are, the result says so, and buying through
them earns the project a commission at no extra cost to you. Links are always ordered by price
and never by commission. DOMAINSCOUT_AFFILIATE=off turns them off.
The tool is read-only, runs on your machine, and sends each API key only to its own registrar. To report a vulnerability, see SECURITY.md.
npx @dakaio/domainscout-mcp check acme getacme.io --tlds com,dev
npx @dakaio/domainscout-mcp check acme --json --no-confirm
npx @dakaio/domainscout-mcp check $(cat names.txt) --tlds com
npm run verify # typecheck + lint (Biome) + tests with coverage thresholds
npm run build
| Path | What it is |
|---|---|
src/core/ | The checking funnel, input parsing, shared types, network limits and retries |
src/checkers/ | DNS, RDAP and WHOIS lookups |
src/confirm/ | Confirmation through registrar APIs, one class per registrar |
src/pricing/, src/registrars/ | Public price lists, buy links and affiliate templates |
src/report/, src/messages/ | The text report and every text shown to people or to the model |
src/scout/, src/server/, src/cli/ | The check as a whole, the MCP server and the command line |
test/ | Vitest tests; the network is faked, except for a local WHOIS server |
examples/ | Real output of the tool |
site/ | The landing page at domainscout.dakaio.com: static HTML, released by a landing-v<version> tag (npm --prefix site run release) |
server.json, manifest.json, glama.json | Listings: the MCP Registry, the Claude Desktop extension, Glama |
Releases: raise the version in a pull request with npm run bump patch (or minor, or an exact
version such as npm run bump 1.2.0); it updates package.json, package-lock.json,
manifest.json and server.json together. Then run npm run release on the merged main. It pushes the tag v<version>, and
.github/workflows/publish.yml publishes to npm (trusted publishing), creates a GitHub Release
with the Claude Desktop extension and publishes to the MCP Registry. The landing page goes out the
same way: npm run bump:site patch in a pull request, then npm --prefix site run release.
MIT © dakaio.com
Source-derived launch command. Check the maintainer’s required arguments and credentials before running:
npx -y @dakaio/domainscout-mcpMerge this template into ~/Library/Application Support/Claude/claude_desktop_config.json. Keep existing servers. Add any arguments, credentials, and permissions required by the maintainer; this template has not been install-tested.
{
"mcpServers": {
"com-dakaio-domainscout": {
"command": "npx",
"args": [
"-y",
"@dakaio/domainscout-mcp"
]
}
}
}Restart Claude Desktop completely for changes to take effect. Confirm the server appears connected in the client’s tool list, then try a read-only example from its documentation.
Claude Desktop setup reference@dakaio/domainscout-mcpnpmDomainScout works with any MCP-compatible client. Copy the config snippet from the Configuration section above and add it to the file shown for your client, then restart the application.
~/Library/Application Support/Claude/claude_desktop_config.jsonRestart Claude Desktop completely for changes to take effect.~/.cursor/mcp.jsonRestart Cursor for changes to take effect..vscode/mcp.jsonReload VS Code window for changes to take effect.~/.codeium/windsurf/mcp_config.jsonRestart Windsurf for changes to take effect..mcp.jsonSave at the project root, then start Claude Code in that project and review the MCP server approval prompt. Keep real credentials out of shared files.