Onymu

Onymu is an MCP server for domain name search, domain availability checking, and social media username lookup.

Community: Submitted by a user or imported; check the owner before granting accessOnlineNo sign-inGlobalFreeRead-only

What it can do

  • Search Domains: Check whether names are available, across many extensions at once. This is the main tool: availability is read from a registry-derived list of every registered domain, refreshed daily,
  • Check Usernames: Check whether a username is free on X, Instagram, Facebook, YouTube, TikTok, Snapchat, Pinterest, LinkedIn, Discord, GitHub, Telegram and Twitch, and how many apps already carry the n
  • Generate Domains: Turn a keyword into brandable name candidates that are free to register. Generation is deterministic — no model is involved, so the same keyword always produces the same candidates —

What data it sees

Do you need an account

No: the server works without sign-in

Onymu is an MCP server for domain name search, domain availability checking, and social media username lookup. Check a domain name against hundreds of TLDs in one call, including .com, .io, .ai, .co, and country-code extensions. Generate brandable startup names, business names, and product names from a keyword, and instantly see which ones are still available to register. Check username availability across major social networks so a brand name comes with matching handles. Save domains, set favorite TLDs, and recall recent searches to keep name research organized across sessions.

Server tool list (13)

Raw names from tools/list. Only developers need these.

search_domainsCheck whether names are available, across many extensions at once. This is the main tool: availability is read from a registry-derived list of every registered domain, refreshed daily, so one call covers every extension you ask about and answers in milliseconds. Omit `tlds` to use the caller's favorite extensions, or the most popular ones if they have none. Names x extensions must not exceed 5,000 in one call — 25 names, for instance, admits at most 200 extensions. Results are split into available and taken, plus an `unknown` list for extensions the data does not cover - never report those as available.
check_usernamesCheck whether a username is free on X, Instagram, Facebook, YouTube, TikTok, Snapchat, Pinterest, LinkedIn, Discord, GitHub, Telegram and Twitch, and how many apps already carry the name on the App Store and Google Play. Pair it with search_domains when someone is picking a brand name: a name is only really available if the domain AND the handles are. Handle answers are grouped into taken, available, unknown and invalid. `unknown` means the check could not be completed (the platform blocked it, or timed out) and must NEVER be reported as available. `invalid` means that platform's own username rules reject the string, so it cannot be claimed there at all. Two platforms answer a narrower question than their name suggests: `linkedin` checks the company vanity URL (linkedin.com/company/<name>), not a personal /in/ profile, and `facebook` can only ever report taken or unknown — its logged-out surface cannot tell a free handle from a private one, so it never reports available and its absence from the taken list is not evidence the name is free. The two app stores are reported separately under `appStores`, NOT as handles: neither store has a username namespace, so they answer how many listings are already named this. Read `named` for 'apps called this' and `matched` for 'apps with this word in the title'; `scanned` is the denominator and `truncated: true` means the counts are floors. Omit `platforms` to check all fourteen. Checking several names at once skips X, which bans on volume.
generate_domainsTurn a keyword into brandable name candidates that are free to register. Generation is deterministic — no model is involved, so the same keyword always produces the same candidates — and it keeps drawing until it has `count` names free under at least one of the extensions checked, so what comes back is registrable, not merely plausible. Names blend in the keyword's synonyms by default and can blend in antonyms too; `realWords` keeps only dictionary words, `maxWords` caps how many words a name may be made of. Pass anything promising to search_domains for a wider sweep of extensions.
lookup_domainLook up who holds a specific domain and when it expires, live from the registry. Asks RDAP first, falls back to port-43 WHOIS for the ~240 TLDs that have no RDAP server (including .de, .io, .co, .eu, .ch, .at, .be, .dk, .jp and .cn), and only then to a DNS heuristic. Returns the registrar, the creation/update/expiry dates, the EPP status codes and the nameservers, plus the `method` that produced the answer so a heuristic is never mistaken for a registry's statement. Use this for ONE name someone is serious about — checking whether a taken name is about to expire, who holds it, or whether it is in redemption. Use search_domains instead to check availability across many names or TLDs: it is instant and this one is a live network call per domain. A `redemptionPeriod` or `pendingDelete` status is the interesting case, meaning a taken name is on its way to becoming free. Status `unknown` means the lookup could not be completed and must NEVER be reported as available.
lookup_dns_recordsRead what a domain's DNS zone actually publishes: A, AAAA, CNAME, MX, NS, TXT, SOA and CAA records, each with its TTL. Live from a public resolver. This answers a different question from lookup_domain — that one asks a registry whether a name is registered, this one asks a resolver what it is configured to do — and neither implies the other: a registered domain can publish no zone at all, and the two disagree while a change propagates. Use it to see where a name is hosted, whether mail is configured (MX), what a site's verification and SPF/DKIM records say (TXT), or which nameservers a domain is delegated to. IMPORTANT: an empty list for a record type means the zone publishes none of that type, but a record type carrying a `reason` means that particular query FAILED — do not report the second as an absence. Status `missing` means the resolver returned NXDOMAIN; `unknown` means the lookup could not be completed and is not evidence either way.
list_favorite_tldsRead the extensions saved on the caller's account, in the order they saved them. Empty either because they saved none or because they keep the list in their browser only. Call this before search_domains to scope a check to the extensions this person would actually register.
add_favorite_tldSave one extension to the caller's favorites. The leading dot is optional. Fails if it is already saved, or if the account is at its cap.
remove_favorite_tldDrop one extension from the caller's favorites.
list_saved_domainsRead the caller's shortlist of saved names, newest first. This is where anything worth keeping goes.
save_domainAdd a name to the caller's shortlist. Accepts a full domain or a bare label — the site saves bare labels when a name is being compared across several extensions.
remove_saved_domainDrop one name from the caller's shortlist.
get_recent_searchesRead what the caller has searched for lately, newest first. Use it to avoid re-suggesting something they have already looked at.
get_recent_generationsRead the words the caller has recently generated names from, newest first.