--- name: domain-availability description: Check whether domain names are available to register, with live registry (RDAP/WHOIS) data and real prices, and help pick a name. Use when the user wants to name a project, product, startup or app, asks "is this domain available/taken", wants domain ideas, compares TLDs (.com, .ai, .io, .app…), or asks when a domain expires or who registered it. --- # Domain availability (Namechan) A language model cannot know whether a domain is registered: names are registered and dropped every day. Never state that a domain is available without checking it here first. ## Tools If the Namechan MCP tools are connected (`check_domains`, `check_name`, `whois_lookup`, `get_usage`), use them. Otherwise run the bundled script, which calls the same API: ```sh node /scripts/domains.mjs check acme.com getacme.com acme.io # complete names, one call node /scripts/domains.mjs name acme --tlds com,io,ai,app # one keyword across TLDs node /scripts/domains.mjs whois example.com # dates, registrar, status node /scripts/domains.mjs usage # lookups left today ``` Without Node.js, use curl: `curl "https://namechan.com/api/v1/check?domains=acme.com,acme.io"` (add `-H "Authorization: Bearer $NAMECHAN_API_KEY"` when a key is set). No account or key is needed: without one, calls are limited per network address. If a call is refused with `rate_limited` and the user has no key, tell them they can sign in at https://namechan.com/api-keys and create a free key for a larger allowance tied to their account, then save it (readable only by them) with: ```sh mkdir -p ~/.config/namechan && chmod 700 ~/.config/namechan && (umask 077 && printf '%s\n' "nck_..." > ~/.config/namechan/api-key) && chmod 600 ~/.config/namechan/api-key ``` The key is read from `NAMECHAN_API_KEY` or `~/.config/namechan/api-key`. An `invalid_key` error means that key is wrong or revoked: say so rather than retrying. Do not ask the user to paste a key into the chat, and never write it into the project. ## Finding a name 1. **Understand the brief** from context: what the thing is, audience, tone, preferred TLDs, budget. Ask only if there is nothing to go on. 2. **Generate widely, then check in one batch.** Write 20–40 candidates: short (ideally ≤ 10 letters), easy to say and spell, no hyphens or digits unless asked. Mix styles: real words, compounds (`brightnest`), modifiers (`get`, `try`, `use`, `hq`, `app`, `labs`), invented words. Check them all in one `check` call (split only if the API says the list is too long). Calls are limited, so do not check names one at a time or re-check the same names. 3. **Read each result:** - `available` — can be registered. Look at the **renewal** price, not just the first year. `premium: true` means the registry prices this name above standard, often every year. A price with `basis: "list"` is the extension's standard rate because the registrar was not reached in time; the name could still be premium, so say "from $X" and point to `registerUrl`. A free name with no `price` at all: give the register link and say the price is shown there — never invent one. - `taken` — registered. If the user wants exactly this name, run `whois` to see the expiry date and age; an old, actively renewed name is unlikely to come free. - `reserved` — not registered but not for sale. Drop it. - `unsupported` — no registry lookup for that TLD. Say so; do not guess. - `unknown` — the registry did not answer. Re-check once; if still unknown, report it as unverified. Never call it available. 4. **If the best names are taken on .com**, try the TLD that fits the project (`.ai` for AI products, `.io`/`.dev` for developer tools, `.app` for apps, `.co`) and the modifier patterns above, in a second batch. 5. **Recommend a shortlist** of 3–8 available names as a table, in the language the user wrote in: domain, first-year price, renewal price, a one-line reason, and the register link (`registerUrl`). Put the strongest first. Note that availability is as of the check and can change, so register promptly. ## Single checks For "is X available?", check X plus a few obvious variants (other TLDs, `get`/`try` prefix) in the same call, and answer with the result for X first. ## Limits On `quota_exceeded` (with a key), tell the user how many lookups are left and when it resets (00:00 UTC); do not retry. On `rate_limited`, wait the seconds given before trying again, and if there is no key, mention the free key above.