# naymme

> Check whether a project or brand name is available across domains, developer platforms, package registries and social networks — and score it for brand quality — from the web UI, a JSON API, or any MCP-compatible AI assistant.

naymme runs one candidate name against 55+ independent providers and reports a uniform verdict per provider (available | taken | unknown | invalid) plus a deterministic 0–100 brand score.

## When to use this

- Evaluating a name for a project, product, company, package or handle **before** registering it anywhere.
- Checking the "does X exist?" question across .com/.dev/.io/.gg, GitHub, npm, PyPI, crates.io, Docker Hub, Vercel/Netlify subdomains, the App Store and social handles in a single call.
- Comparing candidate names with a deterministic brand score (punchiness, pronounceability, uniqueness, cleanliness) instead of vibes.
- Not for: trademark/legal clearance, premium-domain pricing, or guaranteed availability — verdicts are best-effort snapshots to re-confirm at the source.

## MCP server (recommended for AI assistants)

- Endpoint: POST https://naymme.vercel.app/api/mcp
- Transport: Streamable HTTP, stateless — POST JSON-RPC 2.0 with Accept: application/json, text/event-stream
- Discovery document: GET https://naymme.vercel.app/.well-known/mcp
- Tools: check_availability({ name, providers? }) and score_name({ name })
- Local stdio alternative: npx naymme (MCP stdio transport)

## HTTP API

- GET https://naymme.vercel.app/api/availability?name=<name>[&providers=<csv>] — normalized availability results (aliases: /api/v1/availability, /v1/check)
- GET https://naymme.vercel.app/api/score?name=<name> — deterministic brand score (aliases: /api/v1/score, /v1/score)
- POST https://naymme.vercel.app/api/mcp — MCP JSON-RPC 2.0 transport (aliases: /api/v1/mcp, /v1/mcp)
- GET https://naymme.vercel.app/v1 — API version index (apiVersion, endpoints, deprecation status)
- GET https://naymme.vercel.app/api/mcp (also /mcp, /health) — endpoint status
- GET https://naymme.vercel.app/openapi.json — OpenAPI 3.1 description of this API

## Invocation examples

```
curl -s 'https://naymme.vercel.app/api/v1/availability?name=myapp&providers=domains,github,npm'
curl -s 'https://naymme.vercel.app/api/v1/score?name=myapp'
curl -s -X POST https://naymme.vercel.app/api/mcp \
  -H 'content-type: application/json' \
  -H 'accept: application/json, text/event-stream' \
  -d '{"jsonrpc":"2.0","id":1,"method":"tools/call","params":{"name":"score_name","arguments":{"name":"myapp"}}}'
```

No authentication. The API is version 1 — `/api/v1/*` is canonical (root-level `/v1/*` and unversioned `/api/*` are aliases) and every response on every /api/* and /v1/* endpoint carries `API-Version: 1`, `X-API-Version: 1.0.0` and RFC RateLimit headers (`RateLimit-Limit`, `RateLimit-Remaining`, `RateLimit-Reset`, `RateLimit-Policy: <limit>;w=60`) — including errors and 404s; honor `Retry-After` on 429. Deprecation policy: a future breaking v2 would keep v1 live and emit `Deprecation: true`, `Sunset` and a `Link rel="deprecation"` pointer for at least 6 months (see /auth.md). Errors are structured: {error:{code,message,hint}}. Send Accept: text/markdown to any page URL to get this site as markdown; Accept: application/json on an unknown URL (including unmapped /api/* and /v1/* paths) yields a JSON 404.

## Discovery documents

- OAuth discovery documents: https://naymme.vercel.app/.well-known/oauth-protected-resource (RFC 9728; .json alias and resource-path variants also served) and https://naymme.vercel.app/.well-known/oauth-authorization-server (RFC 8414). The API is public/no-token by default; connectors that mandate OAuth get the full auto-approving RFC 7591 + PKCE flow under /oauth/*.

Rate limits and access details: https://naymme.vercel.app/auth.md

## Links

- [Complete agent instructions](https://naymme.vercel.app/llms-full.txt)
- [Documentation](https://naymme.vercel.app/docs)
- [OpenAPI 3.1](https://naymme.vercel.app/openapi.json)
- [MCP server card (SEP-1649)](https://naymme.vercel.app/.well-known/mcp/server-card.json)
- [API catalog linkset](https://naymme.vercel.app/.well-known/api-catalog)
- [AI catalog](https://naymme.vercel.app/.well-known/ai-catalog.json)
- [Agent skills index](https://naymme.vercel.app/.well-known/agent-skills/index.json)
- [Authentication & rate limits](https://naymme.vercel.app/auth.md)

## Pages

- [Home](https://naymme.vercel.app/)
- [Docs](https://naymme.vercel.app/docs)
- [About](https://naymme.vercel.app/about)
- [Contact](https://naymme.vercel.app/contact)
- [Privacy](https://naymme.vercel.app/privacy)
- [Credits](https://naymme.vercel.app/credits)
- [sitemap.xml](https://naymme.vercel.app/sitemap.xml)

---

# naymme — full reference

Version 0.1.0. Everything below is callable without authentication.

## MCP tools

### check_availability

Input: `{ name: string, providers?: string[] }`. `name` is a bare name — 1–63 chars, starts alnum, ASCII letters/digits plus `.`, `_`, `-`. `providers` is an optional list of provider ids or aliases.

Output: `{ name, results, summary }` where each result is `{ provider, status, subject, available, detail?, durationMs }`; `status` is `available | taken | unknown | invalid` and `available` agrees with it (`unknown` → null). Providers run concurrently with a 5-second timeout each; a failure reports `unknown`, it never fails the batch.

Provider aliases: `all`, `domains`, `domains:cctld`, `domains:all`, `socials`.

Handshake — initialize is a plain POST (no session state, no auth):

```
curl -s -X POST https://naymme.vercel.app/api/mcp \
  -H 'content-type: application/json' \
  -H 'accept: application/json, text/event-stream' \
  -d '{"jsonrpc":"2.0","id":1,"method":"initialize","params":{"protocolVersion":"2025-03-26","capabilities":{},"clientInfo":{"name":"my-agent","version":"1.0"}}}'
```

Example JSON-RPC tools/call over the hosted endpoint:

```
curl -s -X POST https://naymme.vercel.app/api/mcp \
  -H 'content-type: application/json' \
  -H 'accept: application/json, text/event-stream' \
  -d '{"jsonrpc":"2.0","id":1,"method":"tools/call","params":{"name":"check_availability","arguments":{"name":"myapp","providers":["domains","github","npm"]}}}'
```

### score_name

Input: `{ name: string }` — same validation. Output: deterministic `{ name, total, grade, components }` where `total` is 0–100 and components cover punchiness (length, 5–8 chars optimal), pronounceability (English bigrams, syllable estimate), uniqueness (coinages beat common words) and cleanliness (penalties for digits, separators, repeats). No network — same input, same score.

## HTTP API

```
curl -s 'https://naymme.vercel.app/api/v1/availability?name=myapp&providers=domains,github,npm'
curl -s 'https://naymme.vercel.app/api/v1/score?name=myapp'
```

`GET /api/v1/availability` (or the unversioned `/api/availability` or root `/v1/check` aliases) returns `{ name, results, summary, mode }` (`mode` is `live`, or `demo` when the deployment serves deterministic fixtures). `GET /api/v1/score` (`/v1/score`) returns the score payload. Both return `400` for an invalid name. `GET /v1` returns the version index ({apiVersion, endpoints, deprecated}). Every response on every /api/* and /v1/* endpoint carries `API-Version: 1`, `X-API-Version: 1.0.0` and `RateLimit-Limit`/`RateLimit-Remaining`/`RateLimit-Reset`/`RateLimit-Policy` — including errors and 404s; a `429` comes with `Retry-After` and the same error envelope. Rate limits are applied per client IP; JSON-RPC errors follow the JSON-RPC 2.0 shape.

## Provider ids

Valid `providers` entries:

- domain:com
- domain:gg
- domain:dev
- domain:io
- domain:ai
- domain:app
- domain:pt
- domain:es
- domain:de
- domain:fr
- domain:uk
- domain:eu
- domain:co
- domain:me
- domain:org
- domain:sh
- domain:so
- domain:xyz
- domain:design
- domain:store
- domain:work
- domain:studio
- domain:tech
- domain:agency
- domain:space
- github:user
- github:org
- github:repo
- gitlab
- npm
- pypi
- crates
- dockerhub
- huggingface
- jsr
- denoland
- nuget
- rubygems
- homebrew
- codepen
- replit
- vercel
- netlify
- cloudflare
- flyio
- railway
- supabase
- appstore
- figma
- dribbble
- behance
- substack
- producthunt
- telegram
- medium
- social:x
- social:bluesky
- social:instagram
- social:reddit
- social:youtube
- social:tiktok

Aliases: `all` (every provider), `domains` (core TLDs), `domains:cctld` (European ccTLDs), `domains:all` (all TLDs), `socials` (social handles).

## Connecting MCP clients

- Cursor: add to .cursor/mcp.json → { "mcpServers": { "naymme": { "url": "https://naymme.vercel.app/api/mcp" } } }
- VS Code: .vscode/mcp.json → { "servers": { "naymme": { "type": "http", "url": "https://naymme.vercel.app/api/mcp" } } }
- Windsurf: ~/.codeium/windsurf/mcp_config.json → { "mcpServers": { "naymme": { "serverUrl": "https://naymme.vercel.app/api/mcp" } } }
- Claude Desktop: claude_desktop_config.json → { "mcpServers": { "naymme": { "command": "npx", "args": ["mcp-remote", "https://naymme.vercel.app/api/mcp"] } } }
- Claude Code: `claude mcp add --transport http naymme https://naymme.vercel.app/api/mcp`
- Any client: run `npx naymme` for the stdio transport.

## Accuracy

Verdicts are best-effort snapshots of public registration state. `available` requires a verified unclaimed marker (RDAP/registry 404, WHOIS no-match); `unknown` means the source could not be checked. Always re-confirm at the registrar or platform before purchasing or registering.

Docs: https://naymme.vercel.app/docs — how checks run, provider semantics, the HTTP API and the MCP transport.
