Nameable
Checks whether an app name is available on the App Store (US storefront), detecting Xcode/iOS projects so it can include that channel, and reports the evidence and confidence behind each 'available', 'probably available', or 'taken' verdict.
Detects projects that ship a [Docker](/mcp/servers/integrations/docker)file and checks Docker Hub for availability of the corresponding user/organization name, accounting for deactivated or reserved Docker accounts.
Always checks whether a GitHub user or organization name is available, flagging suspended, deleted, or reserved accounts that look free but cannot be claimed.
Checks whether an app title is available on Google Play by searching the US storefront, detecting Android, Expo, and Flutter apps to decide when the channel applies.
Checks name availability in Homebrew, including detection of bin entries in package.json, declared scripts, Cargo binaries, Package.swift executables, and Go commands, and accounts for core formulae, casks, and aliases.
Detects JetBrains plugin projects (via plugin.xml or the IntelliJ Gradle plugin) and checks the JetBrains Marketplace for an existing plugin name or ID, including unapproved and hidden plugins.
Checks whether a package name is available on npm, accounting for punctuation-insensitive equivalence and other npm naming rules, and detects npm projects (including package.json without a publishable name) to decide when to check.
Checks whether a package ID is available on NuGet, accounting for reserved prefixes, IDs still held after deletion, and whether a .NET project is actually packable.
Checks Packagist for vendors and packages with the given name, reporting when a vendor has no packages or its packages are frozen.
Checks whether a project name is available on PyPI, applying PyPI's own similarity and normalization rules so that names like near-matches to existing projects are reported as refused rather than free.
Checks whether a gem name is available on RubyGems, including reserved names and other registry-specific restrictions.
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., "@Nameableis the name 'acmecli' free on npm, PyPI, GitHub, and domains?"
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.
Nameable
Is the name really free? Nameable checks every registry, store and domain your project needs.
English · 繁體中文
Nameable checks a name on package registries, GitHub, agent and editor directories, app stores and domains, shows the evidence behind every answer, and says how sure each answer is. It runs as a CLI, as an MCP server for AI agents, and as a Claude Code plugin that also looks for prior art and recommends which name to keep.
Why
Most availability checks ask each registry whether the name exists and read "not found" as free. Not found only means nobody holds that exact name. The registry may still refuse it:
Name | Registry | Not found? | What the registry does |
| PyPI | yes | Refuses it: too similar to |
| npm | yes | Refuses it: same as |
| Homebrew | yes | Already taken: an alias of |
| crates.io | yes | Refuses it: reserved by crates.io |
| crates.io | yes | Refuses it until 2027: the crate was deleted recently |
| pub.dev | yes | Refuses it: the plural of |
| RubyGems | yes | Refuses it: reserved by RubyGems.org |
| NuGet | yes | Refuses it: deleted by NuGet, the ID still held |
| Docker Hub | yes | Already taken: an official image |
| domains | yes | Cannot be registered: it is an emoji in punycode |
Nameable applies each registry's own rules, taken from its source code, and checks the lists those rules need:
similar and reserved names, aliases and old names, recently deleted names, unpublished packages. When a rule cannot
be checked, the answer says "probably" and why, instead of "available". A failed request is unknown, never free.
Related MCP server: namescope
Use it from the terminal
Requires Node.js 22 or later. Run it in your project (or any folder under it, up to the repository root) and it checks the channels the project ships on, picked from its files:
package.jsonfor npm (unless it has noname, is private, or is a server or site: it starts, serves or deploys itself and declares nothing to publish), Homebrew when it has abin; withengines.vscode, VS Code Marketplace and Open VSX instead of npmpyproject.toml,setup.pyorsetup.cfgthat describe a package for PyPI, Homebrew when they declare scriptsCargo.tomlfor crates.io (unlesspublish = false), Homebrew when it builds a binarya
.gemspecfor RubyGems,composer.jsonfor Packagist (unless it is a project),pubspec.yamlfor pub.dev (unlesspublish_to: none), a .NET project or solution for NuGet (unless it builds a web app, a function, an executable or tests, or is not packable), aDockerfilefor Docker Hub, aPackage.swiftwith an executable for Homebrew.claude-plugin/,.cursor-plugin/andgemini-extension.jsonfor those directories, aplugin.xmlor the IntelliJ Gradle plugin for JetBrains Marketplace, an MCP SDK dependency for the MCP Registry and Smitheryan Xcode project for the App Store, an Android app for Google Play, and an Expo or Flutter app for both
at an npm, pnpm, Yarn, Lerna or Cargo workspace root, the channels of each member, read the same way
GitHub and domains are always checked; a project that ships on none of these, such as a Rails app or a Go library, gets only those (and Homebrew for a Go command). Outside a project it checks a general set: npm, PyPI, crates.io, Homebrew, GitHub and domains.
npx nameable nameable --all --tlds com,dev,shChecking "nameable" on 23 channels
✗ npm taken Find out if a name is free everywhere it matters for …
✓ PyPI available
✓ crates.io available
✓ Homebrew available no homebrew-core formula or cask
✗ RubyGems taken A library that provides parsing and output of person …
✓ Packagist probably available no packages under this vendor; packages frozen for sp…
✓ pub.dev probably available no package with this name; moderated packages and res…
✓ NuGet probably available no package with this ID; reserved prefixes and the ty…
✓ Docker Hub probably available no user or organization; deactivated or reserved Dock…
✓ GitHub user/org probably available suspended, deleted or reserved accounts also look fre…
✓ MCP Registry probably available no server uses this name in the registry as of 2026-10…
✓ Smithery probably available no public servers; a namespace with none, or with onl…
✓ Claude plugins available not in the official marketplace
✓ Cursor plugins probably available not among Cursor's listed plugins; plugins in review …
✓ Gemini extensions probably available not in the Gemini CLI gallery; it lists only tagged G…
✓ VS Code Marketplace probably available no extension or publisher; removed extensions keep th…
✓ Open VSX probably available no namespace or similar one; namespaces without publi…
✓ JetBrains Marketplace probably available no plugin with this name or ID; unapproved and hidden…
✓ App Store probably available no app with this name in the US store; unreleased app…
✓ Google Play probably available no app with this title in search results of the US st…
✗ .com taken registered 1999-02-13, expires 2027-02-13
✓ .dev probably available not registered; a registry can still refuse premium o…
✓ .sh probably available not registered (whois); a registry can still refuse p…
npm https://www.npmjs.com/package/nameable
RubyGems https://rubygems.org/gems/nameable
.com https://lookup.icann.org/en/lookup?name=nameable.com
20 available (16 probably) · 3 takenSeveral names show a grid to compare them:
npx nameable twinsy dupefind fclones --only crates,homebrew,github,domain --tlds com,dev,sh twinsy dupefind fclones
crates.io ✓ ✓ ✗
Homebrew ✓ ✓ ✗
GitHub user/org ✗ ✓* ✓*
.com ✗ ✗ ✓*
.dev ✓* ✓* ✓*
.sh ✓* ✓* ✓*
free 4/6 5/6 4/6
✓ available ↺ reclaimable ✗ taken ⊘ unavailable ? unknown * probably available
Check one name at a time for the details behind each mark.Option | |
| Check every channel |
| Channels to check: |
| Domains to check, any TLD, at most 20 (default |
| Print JSON; also the default when the output is not a terminal |
| Download the registry name lists again |
| Delete the cached name lists |
GitHub checks use GITHUB_TOKEN, GH_TOKEN or gh auth token when one is available, for a higher rate limit.
Use it with AI agents
Claude Code plugin
/plugin marketplace add minanyang/claude-plugins
/plugin install nameable@minanyangThen ask for a name, or run /nameable:check <names>. The skill picks the channels that matter for your project,
checks them, looks for projects that already do the same thing, and gives a verdict for each candidate: use it, use it
with changes (a scope, another TLD, another GitHub owner), or drop it.
The plugin carries its own copy of the CLI and runs it with Node.js 22 or later. When it installs, Claude Code adds
the CLI's two dependencies, zod and @modelcontextprotocol/server, from the npm lockfile in the plugin.
MCP server
npx -y nameable mcp runs the same checks as an MCP server over stdio. It has one read-only tool, check_names
(names, and optionally channels, tlds and refresh), which returns the JSON below as structured content.
It is listed on the official MCP Registry as
io.github.minanyang/nameable.
Client | Add it with |
Claude Code |
|
Codex |
|
Gemini CLI | Add to |
VS Code |
|
Cursor | Add to |
What the answers mean
Status | Meaning |
| Nobody holds it and the registry would accept it |
| It was held but released (an unpublished npm package, a fully yanked gem); anyone can take it again |
| Someone holds it; |
| Nobody holds it exactly, but the registry would refuse it: invalid, reserved, too similar, or blocked for now after a deletion |
| No trustworthy answer: a network error, a rate limit, an unrecognized reply. Never treat it as free |
An available answer carries a certainty. Only PyPI, crates.io, Homebrew and Claude plugins can answer confirmed;
every other channel keeps something out of public view, so its free answer is probable at most. Confirmed means every rule of that registry that public data allows
was checked. Probable (* in the grid) means one could not be, and note says which: GitHub hides suspended and
reserved accounts, npm's similar-name rule cannot be checked for every spelling, registries can refuse premium or
reserved domains, or a name list could not be downloaded. Two PyPI rules rest on data PyPI does not publish, so even a
confirmed PyPI answer cannot cover them: names its admins prohibited, and names similar to a quarantined project.
Channel | Checked beyond "not found" |
npm | npm's name rules and Node.js core modules, names equal without punctuation, unpublished packages and the 24-hour block after an unpublish; similar spellings cannot all be checked, and a missing scoped package may be private, so a free answer is probable |
PyPI | PEP 508 names, standard library names, similar names ( |
crates.io | Cargo's name rules, reserved names, recently deleted names, |
Homebrew | Formula name rules, aliases and old names of formulae and casks, names homebrew-core disallows |
RubyGems | Gem name rules, names unique ignoring case, reserved names, yanked gems held for their owners, names equal to a popular or recent gem without |
Packagist | The name as a vendor: vendor rules and reserved vendors, and the typo rule against vendors one edit away; packages frozen for spam are hidden, so a free answer is probable |
pub.dev | Dart name rules and reserved words, names kept for the Dart and Flutter teams, similar names ( |
NuGet | ID rules, unlisted packages, IDs NuGet deleted but still holds; reserved prefixes and the typosquatting check are private, so a free answer is probable |
Docker Hub | Docker ID rules, users and organizations (including ones only a redirect reveals), official images; deactivated IDs are hidden, so a free answer is probable |
GitHub | Users and organizations; hidden accounts make a free answer probable |
Domains | Any TLD through RDAP or whois, internationalized names, labels registries cannot accept |
MCP Registry | Servers whose name part matches, in any namespace, from a list of every server this project rebuilds daily from the registry API (its own search takes 30 seconds or more); nobody owns a bare name there, so a match is a clash and a free answer is probable |
Smithery | Namespace rules; a namespace with no public servers also looks free, so a free answer is probable |
Cursor plugins | Cursor's marketplace; plugin name rules. Undocumented data, so a free answer is probable |
Gemini extensions | The Gemini CLI gallery. Names are not unique there, so a match only means users will meet another extension by that name |
VS Code Marketplace | The name as an extension name, display name and publisher, all unique there; removed extensions keep their names but are hidden, so a free answer is probable |
Open VSX | The name as a namespace: Open VSX's rule against namespaces within 20% of an existing one, and its rule that only a verified owner may use a VS Code Marketplace publisher's name; namespaces without public extensions are hidden, so a free answer is probable |
JetBrains Marketplace | The name as a plugin ID and plugin name: the words JetBrains refuses in new names ( |
App Store | An app with exactly this name (ignoring case and punctuation) in iOS and macOS search, in the US store and, for Chinese, Japanese or Korean names, those stores too; a title that adds a subtitle or its maker is reported as a clash, not a block. Names are unique per localization, but unreleased apps are invisible, so a free answer is probable |
Google Play | An app with exactly this title in search, in the same stores as the App Store; a title that adds a subtitle or its maker is reported as a clash too. Titles are not unique, so a match is a clash, not a block, and a free answer is probable |
Claude plugins | Anthropic's official marketplace; plugin name rules and the names |
Name lists
Several checks compare against registry-wide lists: every PyPI project, every Homebrew alias and old name, the reserved
and recently deleted names in crates.io's daily database dump (read by byte range, under 1 MB of a 2 GB archive), every
pub.dev package, every gem, every MCP server, every Open VSX namespace, and every plugin and extension in Cursor's
marketplace and the Gemini CLI gallery. Each is downloaded the first time a check needs it, about 25 MB in all, and at most once a day after that. They
are kept compressed (about 12 MB) in ~/Library/Caches/nameable on macOS,
$XDG_CACHE_HOME/nameable on Linux, %LOCALAPPDATA%\nameable\Cache on Windows, or NAMEABLE_CACHE_DIR.
JSON
{
"schema": 1,
"reports": [
{
"name": "nameable",
"results": [
{
"channel": "npm",
"label": "npm",
"status": "taken",
"url": "https://www.npmjs.com/package/nameable",
"note": "..."
},
{
"channel": "domain:dev",
"label": ".dev",
"status": "available",
"certainty": "probable",
"url": "https://lookup.icann.org/en/lookup?name=nameable.dev",
"note": "..."
}
]
}
]
}Exit codes: 0 every channel is available or reclaimable for every name · 1 taken or unavailable somewhere ·
2 nothing taken, but some channels could not be checked, or the cache could not be cleared · 64 usage error.
Semantic versioning covers the commands and options, the exit codes, the channel IDs, the check_names tool and its
inputs, the JSON fields with the values of status and certainty, the environment variables above, and the oldest
Node.js version supported. A minor release may add a status; read one you
do not know as unknown. The wording of label and note, what meta holds, and which channels are picked from a
project can change in any release; pass --only to fix the channels.
Planned channels
Nameable checks npm, PyPI, crates.io, Homebrew, RubyGems, Packagist, pub.dev, NuGet, Docker Hub, GitHub users and organizations, the MCP Registry, Smithery, Claude Code's official plugin marketplace, Cursor's marketplace, the Gemini CLI gallery, VS Code Marketplace, Open VSX, JetBrains Marketplace, the App Store, Google Play, and domains today. Each channel below was tested before it was listed: a request about a name gets an answer that tells an existing name apart from a missing one.
Group | Channels |
Social handles | X, YouTube, TikTok |
Not every channel has an official API. Where Nameable reads a public page or an undocumented endpoint, the site can
change it or block requests at any time: a free answer there is probable at most, and a blocked request is unknown.
The same goes for registries that keep part of their rules private, such as reserved names and typo checks.
These will only show whether something with the same name exists, never that a name is free:
Channel | Why |
Trademarks: USPTO (US), TIPO (Taiwan) | A matching mark is a risk to weigh, not a yes or no |
When a channel Nameable does not check matters for your project, the Claude Code skill lists it as not checked, so you can look yourself.
What it sends
Nameable has no server of its own and no telemetry; nothing goes to its author.
A check sends the name, and for domains the name with each TLD, to the registry, store, directory or RDAP/whois server of each channel checked, the ones in the table under What the answers mean.
Name lists come from those registries, and the MCP Registry's from the list this project rebuilds daily on GitHub (
raw.githubusercontent.com/minanyang/nameable/data/mcp-servers.tsv). They are cached on your machine.GitHub requests carry
GITHUB_TOKEN,GH_TOKENor thegh auth tokenwhen one is available, and go only toapi.github.com.The Claude Code plugin's skill also asks Claude to look for prior art with the tools it already has, such as web search.
License
Nameable is released under the MIT License.
The Nameable name and logo are not covered by the MIT License. The logo artwork (docs/brand/ and
plugins/nameable/.claude-plugin/icon.png) is © 2026 Min-An Yang (minanyang), all rights reserved. Forks and
derivative works must use a different name and logo; saying a fork is "based on Nameable" is fine.
Available Tools
1 toolcheck_namesCheck name availabilityARead-onlyIdempotent
Check whether names are free on package registries, GitHub, agent and editor directories, app stores and domains.
Each result has a status:
available: nobody holds it and the registry would accept it. certainty "confirmed" means every rule that public data allows was checked; "probable" means one could not be, and note says which.
reclaimable: held before but released; it can be taken again.
taken: someone holds it; url shows who. Where names are not exclusive (MCP Registry, Google Play, Gemini CLI gallery) it means another entry uses the name, and note says it does not block a new one.
unavailable: nobody holds it exactly, but the registry would refuse it (invalid, reserved, too similar to an existing name, or blocked for now after a deletion); note says why.
unknown: no trustworthy answer (network error, rate limit). Never treat it as free.
Pick only the channels that matter for the project instead of checking everything.
| Name | Required | Description | Default |
|---|---|---|---|
| tlds | No | TLDs for "domain", at most 20 (default: com, dev) | |
| names | Yes | Candidate names, checked on every selected channel | |
| refresh | No | Download registry name lists again even when the cached copy is fresh | |
| channels | No | Channels to check (default: all). One of: npm, pypi, crates, homebrew, rubygems, packagist, pub, nuget, docker, github, mcp-registry, smithery, claude-plugins, cursor, gemini, vscode, open-vsx, jetbrains, app-store, google-play, domain, domain:<tld>. "domain" means every TLD in tlds. |
Output Schema
| Name | Required | Description |
|---|---|---|
| schema | Yes | |
| reports | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Far beyond the annotations (which only say read-only, idempotent, open-world), it documents the meaning of each status value, explains the 'confirmed' vs 'probable' certainty distinction, clarifies that non-exclusive registries don't block a new name, and warns 'Never treat unknown as free.' That is exactly the behavioral context an agent needs to interpret results.
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?
The purpose sentence is front-loaded, followed by a structured status list that earns its space given how many result states exist. Some lines are dense and wrap across sentences, but nothing is 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, the description needn't explain return values, yet it explains result semantics anyway, which is a genuine surplus. It lacks explicit edge-case guidance on large name lists or rate limits, but that is minor against the otherwise thorough coverage.
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 schema already documents all four parameters well. The description adds little parameter-specific detail, but it reinforces the channel-selection semantics that govern 'channels', 'tlds', and 'refresh' behavior, which is modest value above the schema baseline.
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?
The description opens with a specific verb and resource: 'Check whether names are free on package registries, GitHub, agent and editor directories, app stores and domains.' The channel set is enumerated, so an agent knows exactly the scope of the check without opening the schema.
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?
It gives clear operational guidance: 'Pick only the channels that matter for the project instead of checking everything,' which is a real usage constraint. It doesn't spell out when another tool should be used instead, but no siblings exist, so the exclusion gap is structural rather than a description failure.
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.
1 tool update
v2.1.0- Changed
check_names2 fields changed- removed
Input schema / properties / channels / minItemsRemoved value: -1 - removed
Input schema / properties / tlds / minItemsRemoved value: -1
1 tool update
v2.0.2- First observed
check_names
TDQS
Scored across 1 tool
There is only one tool, so there is nothing to confuse it with. Its purpose is clearly stated and narrowly scoped to checking name availability across registries.
A single tool named check_names uses a clear, conventional verb_noun snake_case pattern. There are no other names to clash with, so consistency is trivially satisfied.
One tool is thin for a named server, but the domain is narrow and the tool bundles many channels into a single well-scoped operation. It earns its place, though a batch or channel-listing variant could add value.
The tool covers the full name-checking lifecycle across package registries, GitHub, directories, app stores and domains, with nuanced statuses. Minor gaps remain, such as no explicit way to list supported channels or batch-check names in one call.
Maintenance
Related MCP Connectors
Check if a brand name is free across domains, GitHub, npm and PyPI, and suggest available names.
Checks if a project, brand or app name already exists: trademarks, domains, web and GitHub.
Checks if a project, brand or app name already exists: trademarks, domains, web and GitHub.
Check name availability on 70+ platforms: domains, social networks, marketplaces.
Related MCP Servers
- AlicenseNot gradedqualityCmaintenanceProvides evidence-first product naming tools for agents and founders, including domain registry checks, namespace searches, and finalist research with sources and timestamps.MIT
- AlicenseNot gradedqualityBmaintenanceMCP server for evaluating software project name availability across package registries, GitHub, domains, and the command line, with scoring and evidence.MIT
- AlicenseNot gradedqualityAmaintenanceEnables AI agents to check and rank startup name candidates by domain availability, trademark conflicts, and social handle availability, with optional name generation and scoring profiles.54 PyPI4MIT
- AlicenseNot gradedqualityCmaintenanceEnables AI agents to vet and rank product name candidates in batch by checking domain availability, App Store and Google Play collisions, exact-phrase web results, GitHub handles and repos, and trademark register lookups.MIT