check_name
Check brand-name availability across domains + namespaces
Check whether one or more candidate names are free to use as a brand — across domains and the GitHub / npm / PyPI namespaces — in a single call.
tldsnamesrequiredsurfaces
io.github.Sra1PhaniPublished by GitHub account Sra1Phaniv0.1.0Updated Oct 24, 2026
Check if a brand name is free across domains, GitHub, npm and PyPI, and suggest available names.
The publisher's own server: Finder Jobs
Remote MCP server that checks whether a brand name is free across domains, GitHub, npm and PyPI, and suggests available names.
Web executable via Streamable HTTP. Remote servers run from the web runtime once configured in a workspace.
Paste this prompt into Claude Code, Codex, Cursor or another agent — or into SourceWeft chat. The agent reads this server's install guide, shows you its publisher, endpoint and sign-in, and adds it to your client once you agree. Keys never go into a command.
Read https://sourceweft.com/mcp/io.github.Sra1Phani%2Fdomain-finder/install.md and connect the MCP server it describes to my client. Before changing any config, show me its publisher, endpoint and sign-in method and wait for my OK. Never put an API key in a command or in a file I would commit; ask me where it should come from.Add this to your client's mcpServers config.
{
"mcpServers": {
"domain-finder": {
"type": "http",
"url": "https://domain-finder-theta.vercel.app/api/mcp"
}
}
}Search and recommend good domain names to buy. Describe a product or idea; the app brainstorms brandable names (AI + rule-based combos), checks real availability via RDAP, and returns a ranked list of buy candidates.
Source-available under the Elastic License 2.0 (SPDX-License-Identifier: Elastic-2.0) — see License.
Domain Finder is also a remote MCP server — check a brand name across domains and the GitHub / npm / PyPI namespaces from any MCP-capable agent.
https://domain-finder-theta.vercel.app/api/mcp (Streamable HTTP)check_name — check whether one or more candidate names are free across
domains and the GitHub / npm / PyPI namespaces, in a single call.generate_names — generate candidate names from a description, each
pre-checked for domain availability; feed the favorites into check_name.Cursor (~/.cursor/mcp.json) and any client with native Streamable-HTTP
support:
Claude Desktop (claude_desktop_config.json) — bridge a remote server with
mcp-remote:
Generation (lib/generate.ts) — merges three sources of candidates:
get, try, -ly, -hq, -app, …), shorter-first.generateObject
lib/hacks.ts): read the word across the dot —
delicio.us, bit.ly, recip.es. Built from IANA's full TLD list; needs
no API. These ignore the TLD filter by design (the word picks the zone), so
they have their own toggle..com before any gets a second TLD).Availability (lib/availability.ts) — RDAP behind a swappable
AvailabilityProvider interface. Resolves each TLD to its authoritative
registry RDAP server via the IANA bootstrap file (+ curated overrides), then
queries the registry directly. Retries on 429.
Status taxonomy (lib/rdap-status.ts) — "taken" isn't one thing. Modelled
on Domainr's taxonomy, each domain
gets a status and a coarse bucket:
All derived free from RDAP's RFC 8056 status codes, expiration event, and
nameservers. deleting domains also get an estimatedDropAt (pendingDelete
is a fixed ~5-day window).
Ranking (lib/rank.ts) — a 0–100 score from availability (45), TLD
desirability (20), length (20), cleanliness/no-hyphens-or-digits (10), and a
brandability nudge (5, hack > AI > combo). Sorted by bucket first, then
score — so "buy it now" always outranks "might be gettable".
Swapping RDAP for a paid registrar API later (pricing + real buy flow) only
touches lib/availability.ts — nothing else in the pipeline knows the source.
Track a domain, get emailed when it enters the drop path, hand off to a
backorder service. This is a scheduler around availabilityProvider.check(),
not new availability logic.
lib/cadence.ts) — every domain carries a
next_check_at; the poller only touches what's due. Cadence follows status:
far-off active weekly → expiry <30d or redemption daily → pendingDelete
every 6h → hourly inside 24h of the estimated drop. RDAP load stays
proportional to how interesting a domain is, not how many watches exist.lib/db/schema.ts). A hundred
people watching the same short .com is one row, one RDAP call, one
transition, fanned out to a hundred inboxes. Load scales with unique domains
observed, not users × domains — which matters because registries don't sell
capacity.watch_events) is the source of truth. Alerts fire only
on a change, and alerts has unique(watch_id, event_id) so a cron retry
can't double-send.deleting (pendingDelete — the fixed ~5-day
window, i.e. the last moment a backorder can be placed) and available.
Everything else is logged and shown in the UI but stays silent.unknown is not a transition. A 429 or timeout means "we couldn't
tell", not "the domain changed" — the last known status stands, and the check
backs off exponentially (1h, 2h, 4h … capped at a day)..co/.es/.at/.gg
have no public RDAP server, so a watch on them could never fire. Better to say
so than to accept it and silently never alert.FREE_WATCH_LIMIT in lib/watch.ts).Identity is an email plus an unguessable manage token — no accounts, no
sessions, no users table. The token rides in alert links and authenticates
/watch/<token>.
Without RESEND_API_KEY alerts are printed to the console rather than sent,
so the whole flow is drivable with no third-party signup. Trigger a poll by hand:
.github/workflows/poll.yml hits /api/cron/poll hourly. Vercel's Hobby cron
only fires once per day, which can burn most of a ~5-day pendingDelete
warning, so the schedule lives in GitHub Actions instead. Set the POLL_URL and
CRON_SECRET repository secrets. GHA cron is best-effort and can lag a few
minutes — fine for a multi-day warning, and nothing here depends on being
punctual.
lib/rdap-status.test.ts and lib/cadence.test.ts are pure. lib/poll.test.ts
drives the real database with a fake availability provider — pendingDelete
and redemptionPeriod are too rare in the wild to find on demand, and they're
exactly what this feature exists to catch. It skips when DATABASE_URL is unset.
Search works with no configuration — availability (RDAP) and rule-based
generation need no keys. To enable AI brainstorming, copy .env.example to
.env.local and set an AI Gateway key:
The watchlist is the only part that needs a database; search keeps working
without one (getDb() is lazy and only throws when a watch route calls it).
See Watchlist above.
POST /api/search
OVERRIDES (lib/availability.ts): .io/.me/.sh/.ac,
.de, .us. No reachable endpoint was found for .co/.es/.at/.gg, so
those report unknown rather than guess. Add more if you find them.parked proves nothing. Real aftermarket data needs a paid source.backorderUrl() points at DropCatch for dropping domains.
Swapping in affiliate links is a one-line change in app/page.tsx.Source-available under the Elastic License 2.0 (SPDX-License-Identifier: Elastic-2.0). You may inspect, self-host, and modify the code freely. What
you may not do is provide it to third parties as a hosted or managed
service that exposes a substantial set of its features — i.e. running it as a
competing hosted service is not permitted. Full terms in LICENSE.
Source: README.md at commit 12f9911
Check brand-name availability across domains + namespaces
Check whether one or more candidate names are free to use as a brand — across domains and the GitHub / npm / PyPI namespaces — in a single call.
tldsnamesrequiredsurfacesGenerate candidate names, pre-checked for domain availability
Generate candidate names from a description, each pre-checked for domain availability. Then call check_name on the favorites for the full cross-namespace picture.
countuseHacksdescriptionrequired90% of the applicable checks met
How complete this listing is, computed from the registry entry, the endpoint and public sources. Not a rating of the server and not a statement that it is safe or working today: reachability is a dated check, and no installs or reviews go into the score.
Declare a license in the repository or the registry entry.
work.finderOfficial publisher
Finder Jobs's hosted MCP server, published by finder.work; no sign-in required; Streamable HTTP; 4 tools.

Published by GitHub account theluckystrike
Looks up US HTS tariff codes and duty rates and estimates import landed cost from the current USITC schedule.

Published by GitHub account theluckystrike
A remote MCP server that builds literature lists and citation networks from Crossref records, with citation counts, open-access links and exportable…

com.mambabuilt
Finds US importers and their overseas suppliers from customs bill of lading records, by company name, via an Apify actor.

Published by GitHub account gdangalov
A remote MCP server that helps an assistant find documented page-extraction services matching format, JavaScript, auth and price constraints, and record which…
{ "mcpServers": { "domain-finder": { "type": "streamable-http", "url": "https://domain-finder-theta.vercel.app/api/mcp" } }}{ "mcpServers": { "domain-finder": { "command": "npx", "args": ["-y", "mcp-remote", "https://domain-finder-theta.vercel.app/api/mcp"] } }}query ─▶ generate ─▶ check availability ─▶ rank ─▶ results (AI + rules) (RDAP) (0–100 score)cron ─▶ due-queue ─▶ check ─▶ transition? ─▶ alert (deleting | available) (next_check_at) (watch_events) deduped via `alerts`# any Postgres will dodocker run -d --name df-pg -e POSTGRES_PASSWORD=domainfinder \ -e POSTGRES_USER=domainfinder -e POSTGRES_DB=domainfinder \ -p 5433:5432 postgres:16-alpine
cp .env.example .env.local # set DATABASE_URL + CRON_SECRETnpm run db:push # create the tablesnpm run devcurl -H "authorization: Bearer $CRON_SECRET" localhost:3000/api/cron/pollnpm testnpm installnpm run dev # http://localhost:3000cp .env.example .env.local# then set AI_GATEWAY_API_KEY=...// request{ "query": "vegan meal delivery", "tlds": [".com", ".io"], "useAi": true }
// response{ "query": "...", "results": [ { "domain": "...", "score": 92, "availability": {...}, ... } ], "meta": { "generated": 45, "checked": 45, "aiUsed": false, "availabilityProvider": "rdap", "tookMs": 1200 } }