tldx checks domain availability inline, from your terminal or from inside Claude, Cursor and any other MCP client. Live answers from the Spaceship registrar API.
npx tldx example.com
$ npx tldx google.com ❌ taken $ npx tldx https://www.Example.com/about ❌ taken $ npx tldx pickaname.dev --json { "domain": "pickaname.dev", "valid": true, "available": true } $
Use whichever fits where you work. They all call the same Spaceship lookup and give the same answer.
Run npx tldx with a domain. Add --json for scripts. The exit code tells you the result, so it works in shell pipelines.
A check_domain tool for Claude, Cursor and other MCP clients. Results come back as text and as structured JSON.
A SKILL.md that tells your agent when to check a domain. It uses the MCP tool if it's connected and falls back to the CLI.
You need Node 18+ and a Spaceship API key with the domains:read permission. Create one in the Spaceship API Manager.
claude mcp add tldx -e SPACESHIP_API_KEY=xxx -e SPACESHIP_API_SECRET=yyy -- npx -y tldx
{
"mcpServers": {
"tldx": {
"command": "npx",
"args": ["-y", "tldx"],
"env": {
"SPACESHIP_API_KEY": "xxx",
"SPACESHIP_API_SECRET": "yyy"
}
}
}
}
Put this in claude_desktop_config.json, .cursor/mcp.json or your client's MCP config file.
export SPACESHIP_API_KEY=xxx export SPACESHIP_API_SECRET=yyy npx tldx example.com npx tldx example.com --json
Exit codes: 0 available · 2 taken · 1 invalid or error. Errors go to stderr.
mkdir -p ~/.claude/skills/domains cp skills/domains/SKILL.md ~/.claude/skills/domains/
The skill ships in the package at skills/domains/SKILL.md. For one project only, put it in .claude/skills/.
There are three possible results. The MCP tool returns each one as text plus structured content, and the CLI's --json flag prints the same object.
| Text | Structured content |
|---|---|
| ✅ available | { "domain": "pickaname.dev", "valid": true, "available": true } |
| ❌ taken | { "domain": "google.com", "valid": true, "available": false } |
| ⚠️ invalid | { "domain": "notadomain", "valid": false, "available": false } |
https://, www. and paths are stripped before the check.café.fr work, and results always show the readable form.isError: true, so they're never mistaken for "taken".