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:
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.
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.json for npm (unless it has no name, is private, or is a server or site: it starts, serves or deploys
itself and declares nothing to publish), Homebrew when it has a bin; with
engines.vscode, VS Code Marketplace and Open VSX instead of npm
pyproject.toml, setup.py or setup.cfg that describe a package for PyPI, Homebrew when they declare scripts
Cargo.toml for crates.io (unless publish = false), Homebrew when it builds a binary
- a
.gemspec for RubyGems, composer.json for Packagist (unless it is a project), pubspec.yaml for pub.dev
(unless publish_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), a
Dockerfile for Docker Hub, a Package.swift with an executable for Homebrew
.claude-plugin/, .cursor-plugin/ and gemini-extension.json for those directories, a plugin.xml or the
IntelliJ Gradle plugin for JetBrains Marketplace, an MCP SDK dependency for the MCP Registry and Smithery
- an 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 accounts and repositories 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.
Several names show a grid to compare them:
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
Then 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.
What the answers mean
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.
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.
The Taiwan trademark list is split in 16 parts by name, and a check downloads only the part its name is in, about 2 MB
each. This project rebuilds it twice a month from the Taiwan Intellectual Property Office's open data (Open Government
Data License, version 1.0), like the MCP Registry list it rebuilds daily, and leaves out who owns each mark. 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
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,
organizations and repositories, 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, Taiwan trademarks, 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.
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.
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 and the Taiwan trademarks' from
the lists this project rebuilds on GitHub (
raw.githubusercontent.com/minanyang/nameable/data/). They are cached on
your machine.
- GitHub requests carry
GITHUB_TOKEN, GH_TOKEN or the gh auth token when one is available, and go only to
api.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.