nameinsight
Click on "Deploy Server".
Wait a few minutes for the server to deploy. Once ready, it will show a "Started" state.
In the chat, type
@followed by the MCP server name and your instructions, e.g., "@nameinsightsuggest brandable names for a coffee subscription and check .com and .io availability"
That's it! The server will respond to your query, and you can continue using it as needed.
Here is a step-by-step guide with screenshots.
NameInsight
AI-powered domain name discovery. Generate brandable names, check availability across TLDs, and get rich insights (registry data, DNS, expiry, parking, email and TLS setup), as an MCP server for AI assistants or as a REST API.
Features
Authoritative availability: registry data over RDAP (with WHOIS fallback and parsing for TLDs without RDAP), plus DNS and ping signals, combined into a
status(available,registered,parked,expiring,unknown) with aconfidencelevel and plain-Englishreasons.Registration facts: creation and expiry dates, domain age, days until expiry, registrar, EPP status and nameservers. Subdomains are looked up via their registrable domain (Public Suffix List).
Insights (
?insights=true): nameservers, email setup (MX, SPF, DMARC policy) and an HTTPS/TLS certificate check.AI name suggestions: brainstorm names for a business, then verify every one across TLDs with real lookups and rank by availability.
MCP server:
check_domain,check_domains,check_name_across_tldsandsuggest_domains, locally over stdio or hosted over Streamable HTTP.Built for a public deployment: no authentication required. Abuse is limited by per-IP rate limits and lookup budgets, size and time limits on everything, and strict protection against reaching private networks (SSRF).
Related MCP server: Domain Checker MCP Server
Quick start
npm install && npm run build
npm start # REST API + hosted MCP on http://127.0.0.1:8080 (Swagger at /api-docs)
npm run start:mcp # MCP server over stdio for local AI clientscurl http://127.0.0.1:8080/api/v1/domains/info/example.com
claude mcp add nameinsight -- node "$PWD/dist/app/mcp/stdio.js"Then ask your assistant: "Is nameinsight available as a .com or .io?"
How it works
For each domain NameInsight:
Resolves its A and AAAA records in DNS.
Queries the registry over RDAP (registration status, dates, registrar, nameservers, DNSSEC), using IANA's bootstrap registry to find the right server.
Runs a WHOIS lookup (fallback for TLDs without RDAP, such as
.ioand.de).Pings its first public IPv4 address (via the
pingpackage).
Each result looks like this:
{
"domain": "example.com",
"status": "registered",
"confidence": "high",
"registration": { "source": "rdap", "registered": true, "created": "1995-08-14T04:00:00Z", "expires": "2027-08-13T04:00:00Z", "ageDays": 11387, "daysUntilExpiry": 299, "registrar": "…" },
"reasons": ["Registry (RDAP) reports the domain is registered (registrar: …)"],
"available": false,
"probe": { "host": "example.com", "alive": true, "time": 38.9, "numeric_host": "104.20.23.154", "...": "..." },
"dns": { "addresses": ["104.20.23.154", "2606:4700:10::6814:179a"] },
"rdap": { "registered": true, "registrar": "…", "created": "1995-08-14T04:00:00Z", "expires": "2027-08-13T04:00:00Z", "…": "…" },
"whois": "Domain Name: EXAMPLE.COM\n...",
"…": "…"
}status is one of available, registered, parked (nameservers at a parking or for-sale marketplace),
expiring (expires within 30 days, or the registry is deleting it) or unknown. confidence says how sure it is:
Confidence | Meaning |
| The registry answered: RDAP, or WHOIS text that clearly says registered / not registered |
| No registry data, but the domain has DNS records (so it is registered) |
| No registry data and no DNS records or ping replies: an estimate |
reasons explains the decision in plain English, and available is shorthand for status === "available".
Prerequisites
Node.js 22 or newer (
enginesin package.json) and npmOutbound network access for DNS, HTTPS (RDAP), ICMP ping and WHOIS (TCP port 43)
Getting started
npm install
npm run start:tsnodeThe service starts on http://127.0.0.1:8080 (loopback only by default).
Script | What it does |
| Compile TypeScript, then run the compiled app ( |
| Run the already-compiled app without rebuilding |
| Run the compiled MCP server over stdio (see MCP server) |
| Run the app from source with ts-node |
| Run from source and restart when a file changes (Node's built-in |
| Run with the Node inspector attached, for debugging |
| Delete |
| Delete |
| Lint |
| Type-check without emitting files |
| Run the test suite ( |
| Scan the project for committed secrets (API keys, tokens, private keys) with secretlint |
Git hooks are managed by husky and installed by npm install (the
prepare script):
pre-commit blocks commits containing secrets. It runs
npm run secrets, plus gitleaks on the staged changes if gitleaks is installed (brew install gitleaks).pre-push runs
npm run lintandnpm run typecheck.
TypeScript and ts-node are development dependencies. For a production install (npm ci --omit=dev), build
first (e.g. in CI or a Docker build stage) and run npm run start:dist.
Configuration
All settings are optional environment variables (see app/config/global.config.ts). .env.example lists them
all; copy it to .env (gitignored) and run with node --env-file=.env ./dist/app/index.js.
Never commit secrets. API keys and tokens belong only in environment variables or an untracked
.envfile..env*(except.env.example),.npmrcand key/certificate files are gitignored, and commits are scanned for secrets.
Variable | Default | Description |
|
| Port the server listens on |
|
| Address the server binds to. Set |
|
| API title shown in Swagger UI |
|
| Set to |
|
| On SIGTERM/SIGINT, how long in-flight requests may finish before connections are force-closed |
| (empty) | Comma-separated origins allowed to call the API from a browser, e.g. |
|
| Number of reverse proxies in front of the service. Set this behind a load balancer so rate limiting uses the real client IP |
|
| Requests allowed per client IP per window on |
|
| Rate-limit window in milliseconds |
|
| Domains each client IP may look up per window (a bulk request costs one per domain) |
|
| Lookup-budget window in milliseconds |
|
| Maximum domains in one bulk request |
|
| Domains looked up at the same time within one request |
|
| Domains looked up at the same time across all requests |
|
| Lookups allowed to wait for a slot; beyond this, requests get |
|
| Requests one client IP may have in flight on |
| (system resolvers) | Comma-separated DNS server IPs, e.g. |
|
| Maximum JSON / form body size |
|
| Maximum uploaded file size |
|
| DNS query timeout |
|
| Ping reply timeout |
|
| Hard deadline per WHOIS server (a lookup can follow up to 2 referrals) |
|
| WHOIS responses longer than this are truncated |
|
| Hard deadline per RDAP request |
|
| Larger RDAP responses are discarded |
|
| Hard deadline for the |
| (empty) | Secret. Enables REST AI suggestions (and the MCP fallback). Set only in the environment; never commit |
|
| Claude model used for suggestions |
|
| Effort level for suggestions ( |
|
| Suggestion requests per client IP per rate-limit window (REST and MCP combined) |
|
| Claude API suggestion calls per hour for the whole process (caps spend on the server key) |
|
| Claude API calls in flight at once |
| (empty) | Comma-separated Host headers the server accepts (DNS-rebinding protection). Empty: localhost names only on a loopback bind, any host otherwise (with a startup warning). |
Numeric values must be non-negative integers; the app refuses to start otherwise.
For example: API_PORT=3000 npm run start:tsnode
AI name suggestions
NameInsight can brainstorm brandable names for a business and then verify every one across TLDs with real registry lookups, ranking them by availability (.com weighted highest). The model only proposes names; every status comes from NameInsight's own lookups.
REST:
POST /api/v1/domains/suggestwith{ "description": "...", "count": 8, "tlds": ["com","io"], "style": "brandable" }(style:any,brandable,descriptive,short,compound). Uses the Claude API (claude-opus-5-5by default) and is enabled only whenANTHROPIC_API_KEYis set in the server's environment; otherwise it returns503. It is limited toSUGGEST_RATE_LIMIT_MAXrequests per client IP per window, and its lookups count toward the lookup budget.MCP: the
suggest_domainstool uses your own AI client's model through MCP sampling (no key needed on the server). If the client doesn't support sampling, it falls back to the server's Claude API key if one is configured.
Spend on the server's key is capped by the per-IP suggestion limit, a process-wide hourly limit
(GLOBAL_SUGGEST_MAX_PER_HOUR), a cap on concurrent AI calls, a 30 s timeout and one retry. For a public deployment,
also set a spend limit in the Anthropic Console, and consider a lower-cost AI_MODEL.
API keys are secrets. Set
ANTHROPIC_API_KEYonly in the runtime environment or an untracked.envfile. Never commit it. NameInsight never logs, stores or returns it.
The business description is treated as untrusted data: it is length-limited, clearly delimited in the prompt, and the model can only return names, which are cleaned, validated and checked before anyone sees them.
MCP server
NameInsight is also an MCP server, so AI assistants such as Claude can check domains directly. It runs locally over stdio:
npm install && npm run build
npm run start:mcp # or: node dist/app/mcp/stdio.jsClaude Code:
claude mcp add nameinsight -- node /absolute/path/to/name-insight/dist/app/mcp/stdio.jsClaude Desktop (claude_desktop_config.json):
{
"mcpServers": {
"nameinsight": {
"command": "node",
"args": ["/absolute/path/to/name-insight/dist/app/mcp/stdio.js"]
}
}
}Tool | What it does |
| One domain: status, confidence, reasons, registration (dates, registrar), DNS and ping. |
| Up to 50 domains at once |
| One name across TLDs (default |
| Brainstorms names for a description (via MCP sampling, or the server's Claude API key), checks them across TLDs and ranks by availability |
Hosted (Streamable HTTP)
The REST server also exposes a public, stateless MCP endpoint at POST /mcp (no API keys), so remote clients can
connect without installing anything:
claude mcp add --transport http nameinsight https://your-host.example/mcpEach request gets a fresh server, and tool calls draw on the same per-IP limits as the REST API (one shared request
limit, lookup budget and suggestion limit). Over HTTP the server can't use client sampling, so suggest_domains needs
ANTHROPIC_API_KEY on the server there. Set ALLOWED_HOSTS to your public hostname(s) to turn on DNS-rebinding
protection. GET and DELETE return 405, and JSON-RPC batches are rejected.
All tools are read-only. Results are compact (no raw WHOIS or ping output unless asked) and come with a typed
structuredContent payload plus a one-line summary per domain. Invalid input returns a readable tool error. Logs go to
stderr so they never interfere with the protocol on stdout.
Try asking: "Is nameinsight available as a .com or .io?" or "Check these five names and tell me which ones expire soon."
API documentation (Swagger)
With the server running, open:
Swagger UI: http://localhost:8080/api-docs
Raw OpenAPI 3.0 spec (JSON): http://localhost:8080/api-docs.json
Swagger UI lists every endpoint, with sample request bodies, example responses and the response schemas. Use Try it out to send real requests to your local server.
Request and response schemas are generated from the zod contract in app/core/schemas.ts (also the source of the
TypeScript types and, later, the MCP tool inputs), so they can't drift from the code. Paths, descriptions and examples
live in app/http/docs/openapi.ts; contract tests check real responses and the documented examples against the
schemas.
Endpoints
Method | Path | Input |
|
| A single domain in the URL |
|
| JSON body: |
|
|
|
|
| Health check: |
|
| AI name suggestions, verified by real lookups (see AI name suggestions) |
|
| Hosted MCP endpoint (Streamable HTTP, JSON-RPC; see MCP server) |
The bulk endpoints return an array with one result per unique domain, in input order.
Add ?insights=true to any lookup endpoint for extra signals (slower): DNS nameservers, email setup (MX,
whether it accepts mail, SPF, DMARC policy) and an HTTPS check of https://<domain>/ (status, redirect target, TLS
certificate validity, issuer and days remaining). Nameservers found this way also feed parking detection.
On SIGTERM/SIGINT the server stops accepting connections, lets in-flight lookups finish (up to
SHUTDOWN_TIMEOUT_MS), then exits. A second signal exits immediately.
Input rules and errors
Subdomains are accepted: registry data and
statusrefer to the registrable domain (Public Suffix List), e.g.news.bbc.co.ukis looked up asbbc.co.uk(returned asregistrableDomain), while DNS and web checks use the full name. Public suffixes themselves (co.uk,com.au) are rejected.Only public domain names are accepted. IP addresses,
localhost, internal suffixes (.local,.internal,.lan,.test, ...) and malformed names are rejected with400. Internationalized names (e.g.münchen.de) are converted to punycode. Only real (ICANN) top-level domains are accepted.Bulk requests accept at most 50 domains (
MAX_DOMAINS_PER_REQUEST). If any domain is invalid, the whole request is rejected with400anddetails.invalidlists each bad entry.Uploaded files must be
text/plainand at most 64 KB. Blank lines and lines starting with#are ignored. Files are processed in memory and never written to disk.Domains that resolve to private or reserved addresses (e.g.
10.x,127.x,169.254.x) are never pinged; theirprobe.skippedis"non-public-address". Private addresses are left out ofdns.addresses, anddns.nonPublicis set totrueinstead.WHOIS referrals (the registry pointing to the registrar's WHOIS server) are only followed to public addresses on port 43. If the registrar's server fails, the registry's response is returned.
RDAP requests use HTTPS only (certificates validated), connect only to public IPv4 addresses, never follow redirects or links, and are size- and time-limited.
The
insightswebsite check connects only to public IPv4 addresses, sends aHEADrequest (headers only), never follows redirects, and accepts invalid certificates only so it can report them (nothing sensitive is sent).A WHOIS failure doesn't fail the request: that domain gets
whois: nulland awhoisErrormessage.POSTbodies must be JSON (Content-Type: application/json); other content types get415. This stops other websites from triggering requests from their visitors' browsers with plain HTML forms.Each client IP may have a few requests in flight at once (
429beyond that), and work for a client that disconnects is cancelled. When the server is saturated, requests get503withRetry-After.Errors are JSON:
{ "error": "message", "details": { ... } }. Too many requests, or more domains than the client's lookup budget allows, returns429(the budget response includesRetry-After).
Quick test with curl
# Single domain
curl http://localhost:8080/api/v1/domains/info/example.com
# Several domains in a JSON body
curl -X POST http://localhost:8080/api/v1/domains/info/_payload \
-H 'Content-Type: application/json' \
-d '{"domains": ["example.com", "some-unregistered-name-xyz.com"]}'
# File upload
printf "example.com\ngoogle.com\n" > domains.txt
curl -F "file=@domains.txt;type=text/plain" http://localhost:8080/api/v1/domains/info/_fileProject structure
app/
├── index.ts # Entry point: starts the HTTP server
├── config/global.config.ts # Environment-based configuration
├── core/ # Transport-independent logic, shared by REST and MCP
│ ├── index.ts # Public core API
│ ├── domain-service.ts # DNS, ping and WHOIS per domain; text-file parsing
│ ├── validation.ts # Domain name validation and public-IP checks
│ ├── dns.ts # DNS resolver with timeout and optional DNS_SERVERS
│ ├── whois.ts # WHOIS client: referral checks, size cap, hard deadline
│ ├── rdap.ts # RDAP client with cached IANA bootstrap
│ ├── whois-parse.ts # Registration facts from raw WHOIS text
│ ├── availability.ts # status / confidence / reasons from all signals
│ ├── insights.ts # optional NS, MX/SPF/DMARC and HTTPS/TLS checks
│ ├── suggestions.ts # AI name suggestions: prompt, validation, verification, ranking
│ ├── claude-generator.ts # Claude API name generator (structured output)
│ ├── http-client.ts # HTTPS JSON client: public-address pinning, size cap, deadline
│ ├── schemas.ts # zod data contract: types, OpenAPI schemas, MCP inputs
│ └── errors.ts # ValidationError (mapped to 400 by the HTTP layer)
├── mcp/ # MCP server (tools) and stdio entry point
├── http/ # REST API (Express)
│ ├── app.ts # createApp(): middleware, Swagger mount, routes, error handling
│ ├── mcp-route.ts # Hosted stateless MCP endpoint (POST /mcp)
│ ├── budgets.ts # Per-IP lookup and suggestion budgets shared by REST and MCP
│ ├── http-error.ts # Error type carrying an HTTP status
│ ├── docs/openapi.ts # OpenAPI spec (generated from core schemas) served at /api-docs
│ └── routes/ # Route registration, domain endpoints, file uploads
├── types/ # Type declarations for untyped packages
└── utils/async.ts # Timeout, concurrency, semaphore and error helpersTesting
npm test # Jest unit + HTTP tests (no network access needed)
npm run test:coverage # with a coverage reportCI (.github/workflows/ci.yml) runs lint, typecheck, tests, build, npm audit and a secret scan (gitleaks on the
full git history plus secretlint) on every pull request. Dependabot opens weekly dependency update PRs.
Tests live in test/. DNS, ping and WHOIS are mocked or served by local fake servers, so the suite is fast and
deterministic. HTTP behavior is tested with supertest against
createApp() (app/http/app.ts), which builds the Express app without listening on a port.
Known limitations
Public by design. There is no authentication; abuse is limited by per-IP rate limits and lookup budgets, request size/time limits, and the private-network protections. Set
TRUST_PROXY_HOPSbehind a load balancer so limits apply to real client IPs.Rate limits and lookup budgets are per process and in memory. They reset on restart, and N instances allow N times the limits.
WHOIS servers rate-limit heavy use. Large or frequent bulk requests may start getting
whoisErrorresults.Confidence varies by TLD. With RDAP or a clear WHOIS answer,
statusis authoritative (high). Some registries offer neither, and then the answer is an estimate (mediumorlow); checkconfidencebefore relying on it.Parking detection is a heuristic based on a list of known parking and marketplace nameservers.
RDAP redirects are not followed (to keep outbound requests predictable); such registries fall back to WHOIS. Registry-reserved or premium names can appear as "available" when the registry reports them as not registered.
Deploying publicly: bind
API_HOST=0.0.0.0, setALLOWED_HOSTSto your hostname(s), setTRUST_PROXY_HOPSto the exact number of proxies in front of the service, and considerDNS_SERVERS(public resolvers) so internal DNS views are never consulted. The server warns at startup about the first two.
Status and roadmap
Shipped: RDAP and WHOIS registry data with availability status and confidence, registration facts, subdomain handling, DNS, email and TLS insights, AI name suggestions (Claude API and MCP sampling), MCP server (stdio and hosted HTTP), zod-generated OpenAPI docs, per-IP abuse limits, graceful shutdown and health checks, and CI with secret scanning.
Ideas under consideration (not yet planned or promised):
Container image and a deployment guide
Shared rate-limit and budget storage (e.g. Redis) for multi-instance deployments
Short-lived caching of lookup results
Trademark and look-alike checks for suggested names
A small web UI
Suggestions and contributions are welcome; see below.
Contributing and security
See CONTRIBUTING.md for the branch naming convention and PR workflow. Report vulnerabilities privately as described in SECURITY.md.
License
MIT © 2026 Himan Patel
Available Tools
4 toolscheck_domainCheck a domainARead-onlyIdempotent
Checks one domain name: registration status (from the registry via RDAP or WHOIS), expiry, registrar, DNS and reachability. Set insights=true for nameservers, email setup (MX/SPF/DMARC) and an HTTPS/TLS check.
| Name | Required | Description | Default |
|---|---|---|---|
| domain | Yes | Public domain name, e.g. example.com. IP addresses and internal names are rejected. | |
| insights | No | Include nameservers, email setup and HTTPS/TLS details (slower) | |
| include_raw_whois | No | Include the raw WHOIS text (can be long) |
Output Schema
| Name | Required | Description |
|---|---|---|
| dns | Yes | |
| ping | Yes | |
| whois | No | Raw WHOIS text (only when include_raw_whois is true) |
| domain | Yes | |
| status | Yes | |
| reasons | Yes | |
| insights | No | Optional extra signals (request with insights=true) |
| available | Yes | |
| confidence | Yes | |
| registration | Yes | Consolidated registration facts: RDAP when available, otherwise parsed WHOIS |
| registrableDomain | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint, openWorldHint and idempotentHint, so the safety profile is covered. The description adds genuinely useful context by naming the data sources (registry via RDAP or WHOIS) and listing the checks, but says nothing about rate limits, failure modes for unregistered domains, or partial-result behavior — relevant given openWorldHint means external network dependence.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two sentences, zero waste. The core purpose and scope come first, and the optional-flag guidance follows in a single subordinate clause.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
An output schema exists, so return values need no explanation, and annotations carry the safety profile. The description plus schema cover inputs adequately; only external-call behavior (rate limits, registry fallback failures) is unaddressed, which is a minor gap for this tool class.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so all three parameters are already documented; the baseline of 3 applies. The description expands insights slightly (MX/SPF/DMARC specifics) beyond the schema's generic "email setup", but says nothing about include_raw_whois or its size implications.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource ("Checks one domain name") and enumerates the checks performed: registration status via RDAP/WHOIS, expiry, registrar, DNS and reachability. The word "one" implicitly separates it from the bulk sibling check_domains.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Gives a clear condition for the optional flag ("Set insights=true for nameservers, email setup ... and an HTTPS/TLS check"), which is real usage guidance. However, it never names the alternatives — check_domains, check_name_across_tlds, suggest_domains — so the agent must infer the single-vs-bulk split from the wording alone.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
check_domainsCheck several domainsARead-onlyIdempotent
Checks up to 50 domain names at once and returns one result per unique name, in order.
| Name | Required | Description | Default |
|---|---|---|---|
| domains | Yes | ||
| insights | No | Include nameservers, email setup and HTTPS/TLS details (slower) |
Output Schema
| Name | Required | Description |
|---|---|---|
| results | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnly, idempotent, and openWorld, so safety is covered. The description adds genuine non-structured behavior: the 50-item cap and that results are deduplicated to unique names and returned in order — details an agent needs to map results back to inputs. It omits any note that the insights path is slower, which lives only in the schema.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
A single sentence with zero filler, front-loading the batch capability and following with the result contract (one per unique name, ordered). Nothing is redundant.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With an output schema present and annotations covering safety, the description is nearly complete for correct invocation: it gives limit, dedup, and ordering. The only gap is a hint that enabling insights changes latency/cost, which the agent must discover from the parameter description.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 50% and both properties carry descriptions, so baseline 3 applies. The description restates the 50-item cap already enforced by maxItems and says nothing about the insights flag, adding little beyond the schema text.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb (checks) and resource (domain names) with batch scope ('up to 50 at once') and return shape ('one result per unique name, in order'). This implicitly separates it from the single-domain sibling check_domain, though it never names the sibling explicitly.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The batch-oriented phrasing implies when to prefer this over check_domain, but there is no explicit 'use this when you have multiple domains, use check_domain for one' routing, and no mention of check_name_across_tlds or suggest_domains. Usage must be inferred.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
check_name_across_tldsCheck a name across TLDsARead-onlyIdempotent
Checks one name (without extension, e.g. "nameinsight") across several TLDs and lists which are available. Defaults to .com, .net, .org, .io, .ai, .dev, .app, .co.
| Name | Required | Description | Default |
|---|---|---|---|
| name | Yes | The name without a TLD, e.g. "nameinsight" | |
| tlds | No | TLDs to check, without the dot, e.g. ["com", "io", "co.uk"] |
Output Schema
| Name | Required | Description |
|---|---|---|
| name | Yes | |
| results | Yes | |
| available | Yes | Domains reported available |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnly, idempotent, and open-world lookup, which covers the safety profile. The description's real contribution is the default TLD set, which is not encoded anywhere in the schema, but it says nothing about lookup latency, registry rate limits, or whether availability is live-checked vs cached.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two sentences with zero filler: the action and its input shape come first, the default set second. Nothing is repeated from the schema beyond the minimal example format.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
An output schema exists, so the description needn't explain return values, and 100% schema coverage handles parameters. The only real gap is sibling disambiguation among check_domain, check_domains, and suggest_domains, which the description leaves to the reader.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so the baseline is 3, and the description earns a bump by documenting the default value of the optional `tlds` array (.com, .net, .org, .io, .ai, .dev, .app, .co), which the schema omits entirely. It does not restate the 'no dot' format, but the schema already handles that.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource ('Checks one name ... across several TLDs and lists which are available'), and the 'without extension' clarification separates it from the single-domain sibling. It never names check_domain, check_domains, or suggest_domains, so the differentiation is implicit rather than explicit.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The scenario is inferable: a bare name plus bulk TLD availability. But there is no explicit 'use this when... instead of check_domains' or 'for suggestions use suggest_domains', so the agent must infer routing from the name alone.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
suggest_domainsSuggest available domain namesARead-only
Brainstorms brandable names for a business or project, then checks each across TLDs and ranks them by real availability. Uses your own model through MCP sampling when supported, otherwise the server's Claude API key.
| Name | Required | Description | Default |
|---|---|---|---|
| tlds | No | TLDs to check for each name (default com, io, ai, dev, app, co) | |
| count | No | How many names to suggest | |
| style | No | Naming style | any |
| description | Yes | What the business or project does, e.g. "a tool that checks if domain names are available" |
Output Schema
| Name | Required | Description |
|---|---|---|
| generatedBy | Yes | |
| suggestions | Yes | Best first: most available TLDs, with .com weighted highest |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already cover the safety profile (readOnlyHint, openWorldHint, idempotentHint=false), and the description adds meaningful context the schema cannot: it uses the caller's model via MCP sampling when available, falling back to the server's Claude API key. That execution-model disclosure is valuable, though it doesn't mention cost/latency implications.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two tightly written sentences, front-loaded with the core purpose, followed by the execution-model caveat. No filler.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With an output schema present, return values need not be described, and annotations cover safety. The description gives enough of the sampling/API-key mechanism for correct invocation, though it stops short of what happens when neither path is available.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so tlds, count, style and description are fully documented in the schema, making 3 the baseline. The description only alludes to TLD checking and ranking and adds no format or default detail beyond the structured fields.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific compound workflow — brainstorm names, check across TLDs, rank by real availability — which crisply separates it from the check-only siblings (check_domain, check_domains, check_name_across_tlds). The verb+resource is unambiguous.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Usage is implied (you want new name ideas rather than verifying an existing name), but there is no explicit 'use this instead of check_domains when...' statement or exclusion. The distinction from siblings is inferable but not spelled out.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
Tool Schema Changelog
Recent tool additions, removals, and schema changes observed during successful MCP inspections.
4 tool updates
v1.0.1- First observed
check_domain - First observed
check_domains - First observed
check_name_across_tlds - First observed
suggest_domains
TDQS
Scored across 4 tools
The tools have largely distinct purposes: single-domain check, bulk check, cross-TLD availability for one base name, and name suggestions. The singular/plural pair check_domain vs check_domains and the overlap between check_domains and check_name_across_tlds could cause brief hesitation, but descriptions clarify the boundaries.
All tools follow a consistent snake_case verb-first pattern: check_domain, check_domains, check_name_across_tlds, suggest_domains. The singular/plural distinction is predictable and readable.
Four tools is well-scoped for a domain/name insight server, with each tool covering a distinct workflow: single lookup, bulk lookup, TLD sweep, and brainstorming with availability.
The surface covers the main domain-checking lifecycle: individual checks, bulk checks, cross-TLD availability, and suggestions. Minor gaps exist, such as no bulk insights option or ongoing monitoring, but core workflows are covered.
Maintenance
Related MCP Connectors
AI-powered domain & business name generation with real-time availability checks.
AI-powered domain & business name generation with real-time availability checks.
Check domain name availability via RDAP. Single, bulk, and smart suggestions. No API key needed.
Domain availability search, WHOIS lookup, TLD pricing and registry rules from name.ai. Read-only.
Related MCP Servers
- AlicenseNot gradedqualityDmaintenanceEnables AI assistants to check domain availability across multiple TLDs with real-time pricing, brainstorm creative domain names, analyze domains for brandability and SEO potential, and search for domains by price and category without CAPTCHAs.3 npm3MIT
- AlicenseAqualityDmaintenanceEnables AI agents to check domain availability, perform batch domain lookups, and generate intelligent domain name suggestions across multiple TLDs using WHOIS integration.3MIT
- AlicenseAqualityDmaintenanceEnables AI assistants to check domain name availability for single or multiple domains using DNS, RDAP, and WHOIS lookups. It provides detailed registration status including registrar information and expiration dates while supporting bulk checks of up to 50 domains.2MIT
- AlicenseAqualityDmaintenanceEnables domain name availability checking through DNS and WHOIS lookups with confidence scoring. It supports searching across alternative TLDs and generating domain name variations for branding purposes.4ISC