About domain-check
domain-check is a domain exploration tool available as a CLI, Rust library, and MCP server, for developers and agents checking availability or generating names. It prioritizes RDAP and falls back to built-in WHOIS when needed.
Key features
- 01Check domain availability in concurrent batches
- 02Use RDAP first with automatic WHOIS fallback
- 03Generate names with patterns, prefixes, and suffixes
- 04Use 11 TLD presets or define custom ones
- 05Output text, JSON, CSV, and registration details
Use cases
- 01Screen names across TLDs for a startup
- 02Check brand registrations across TLDs
- 03Review registrar and dates before a purchase
- 04Run batch checks in CI using JSON or CSV
MCP support
domain-check-mcp exposes domain checks, batch checks, preset-based checks, name generation, preset listing, and domain information as tools to MCP-compatible clients.
Configuration
Local server config is the same for every client. Copy it into your client’s MCP config file.
We haven’t collected a package or remote endpoint for this server. Follow the instructions in the project README.
Tools
Local servers expose tools only once running on your machine, and the maintainer has not provided a tool list.
Details
From the project READMEdomain-check
Universal domain exploration engine: fast domain availability checks across the internet — as a CLI, Rust library, and MCP server for AI agents.
Quick Links: Installation | Quick Start | Use Cases | Output Formats | Presets | Configuration | Automation | Library | MCP Server | FAQ | Contributing
Why domain-check
- 1,200+ TLDs out of the box — IANA bootstrap loads the full registry automatically. No config needed. 34 hardcoded TLDs work offline as fallback.
- Dual-protocol engine — RDAP-first with automatic WHOIS fallback. IANA server discovery covers ~189 ccTLDs that lack RDAP (
.it,.co,.eu,.jp). WHOIS is built in, so no systemwhoistool is needed on any platform. - Fast — up to 100 concurrent checks, streaming results as they complete. 3.4 MB release binary.
- Domain generation — pattern expansion (
\w=letter,\d=digit,?=either), prefix/suffix permutations, and--dry-runto preview before checking. - 11 curated presets —
startup,tech,creative,finance,ecommerce, and more. Or define your own in config. - For-sale detection —
--for-salereads RFC 10023_for-salerecords, so you can see when a registered domain is actually on the market (asking price and contact, sanitized, never auto-opened). - Rich output — grouped pretty display, JSON, CSV. Registrar info, creation/expiration dates, and status codes with
--info. - CI and automation friendly —
--json/--csvto stdout,--yesto skip prompts,--forcefor large runs, automatic non-TTY detection. - Configurable — TOML config files,
DC_*environment variables, custom presets, and clear precedence rules. - Agent-native — MCP server exposes all tools to AI coding agents (Claude, Codex, Gemini, Cursor, VS Code Copilot, and any MCP client).
- CLI + library + MCP — same engine powers the CLI,
domain-check-lib(Rust library), anddomain-check-mcp(MCP server).
Installation
| Method | Command | Notes |
|---|---|---|
| Homebrew (macOS) | brew install domain-check | Easiest install for macOS users |
| Cargo (CLI) | cargo install domain-check | Works on all Rust-supported platforms |
| Cargo (MCP) | cargo install domain-check-mcp | MCP server for AI agents |
| GitHub Releases | Download binaries | CLI + MCP binaries for macOS, Linux, Windows |
Quick Start
# Check a single domain
domain-check example.com
# Expand a base name across TLDs
domain-check mystartup -t com,org,io,dev
# Use a curated preset
domain-check myapp --preset startup --pretty
# Generate names with a pattern (preview only)
domain-check --pattern "app\d" -t com --dry-run
# Add prefixes and suffixes
domain-check myapp --prefix get,try --suffix hub,ly -t com,io
# Get registrar and date info
domain-check target.com --info
# Is a taken domain for sale? (RFC 10023)
domain-check example.nl --for-sale
# Check every known TLD
domain-check brand --all --batch
Pretty output:
domain-check v1.2.1 — Checking 8 domains
Preset: startup | Concurrency: 20
── Available (3) ──────────────────────────────
rustcloud.org
rustcloud.ai
rustcloud.app
── Taken (5) ──────────────────────────────────
rustcloud.com
rustcloud.io
rustcloud.tech
rustcloud.dev
rustcloud.xyz
8 domains in 0.8s | 3 available | 5 taken | 0 unknown
Use Cases
# Startup naming — scan tech TLDs for your brand
domain-check coolname --preset startup --pretty
# Brand protection — audit every TLD for your trademark
domain-check mybrand --all --json > audit.json
# Pre-purchase validation — check registrar and expiry before buying
domain-check target.com --info
# Bulk pipeline — feed a list, export results
domain-check --file ideas.txt --preset tech --csv > results.csv
# Name generation — explore prefix/suffix combos
domain-check app --prefix get,my,try --suffix hub,ly -t com,io --dry-run
Output Formats
Default — one line per domain, colored status:
myapp.com TAKEN
myapp.io AVAILABLE
myapp.dev TAKEN
Pretty (--pretty) — grouped by status with summary:
── Available (1) ──────────────────────────────
myapp.io
── Taken (2) ──────────────────────────────────
myapp.com
myapp.dev
3 domains in 0.4s | 1 available | 2 taken | 0 unknown
JSON (--json) — structured, pipe to jq:
[
{
"domain": "myapp.com",
"available": false,
"method": "RDAP"
},
{
"domain": "myapp.io",
"available": true,
"method": "RDAP"
}
]
CSV (--csv) — import into spreadsheets or databases:
domain,status,method
myapp.com,TAKEN,RDAP
myapp.io,AVAILABLE,RDAP
Info (--info) — registrar, dates, and status codes:
myapp.com TAKEN
Registrar: Example Registrar, Inc.
Created: 2015-03-12 Expires: 2026-03-12
Status: clientTransferProhibited
Full reference: docs/CLI.md
Smart Presets
11 built-in presets covering common domains strategies:
| Preset | TLDs | Use case |
|---|---|---|
startup | com, org, io, ai, tech, app, dev, xyz | Tech startups |
popular | com, net, org, io, ai, app, dev, tech, me, co, xyz | General coverage |
classic | com, net, org, info, biz | Traditional gTLDs |
enterprise | com, org, net, info, biz, us | Business and government |
tech | io, ai, app, dev, tech, cloud, software, + 5 more | Developer tools |
creative | design, art, studio, media, photography, + 5 more | Artists and media |
ecommerce | shop, store, market, sale, deals, + 3 more | Online retail |
finance | finance, capital, fund, money, investments, + 4 more | Fintech |
web | web, site, website, online, blog, page, + 3 more | Web services |
trendy | xyz, online, site, top, icu, fun, space, + 6 more | New gTLDs |
country | us, uk, de, fr, ca, au, br, in, nl | International |
domain-check --list-presets # See all presets with full TLD lists
domain-check mybrand --preset creative --pretty # Use a preset
Define custom presets in your config file:
[custom_presets]
my_stack = ["com", "io", "dev", "app"]
Configuration
Create domain-check.toml in your project directory:
[defaults]
concurrency = 25
preset = "startup"
pretty = true
timeout = "8s"
bootstrap = true
for_sale = false # set true to always check registered domains for RFC 10023 for-sale records
[custom_presets]
my_startup = ["com", "io", "ai", "dev", "app"]
[generation]
prefixes = ["get", "my"]
suffixes = ["hub", "ly"]
Config lookup order:
./domain-check.toml > ~/.domain-check.toml > ~/.config/domain-check/config.toml
Common environment variables:
DC_CONCURRENCY=50 DC_PRESET=startup DC_TLD=com,io,dev
DC_PRETTY=true DC_TIMEOUT=10s DC_BOOTSTRAP=true
DC_PREFIX=get,my DC_SUFFIX=hub,ly DC_FILE=domains.txt
DC_FOR_SALE=true DC_DNS_SERVER=1.1.1.1
Automation & CI
# Non-interactive structured output
domain-check --file required-domains.txt --json
# Pipe to jq
domain-check --pattern "app\d" -t com --yes --json | jq '.[] | select(.available==true)'
# Stream live results for long runs
domain-check --file large-list.txt --concurrency 75 --streaming
# Large batch with no prompts
domain-check --file huge-list.txt --all --force --yes --csv > results.csv
CI-friendly behavior:
--yes/--forceskip all confirmation prompts- Non-TTY environments (piped, CI) never prompt — scripts are never blocked
- Spinner writes to stderr; stdout stays clean for piping
--no-bootstrapfor deterministic, offline-safe checks against 34 hardcoded TLDs
Automation guide: docs/AUTOMATION.md
Library
Use domain-check-lib directly in Rust projects:
[dependencies]
domain-check-lib = "1.2.1"
use domain_check_lib::DomainChecker;
#[tokio::main]
async fn main() -> Result<(), Box<dyn std::error::Error>> {
let checker = DomainChecker::new();
let result = checker.check_domain("example.com").await?;
println!("{} -> {:?}", result.domain, result.available);
Ok(())
}
Library docs: domain-check-lib/README.md | docs.rs
MCP Server
domain-check-mcp exposes domain checking as tools for AI coding agents via the Model Context Protocol. Works with any MCP-compatible client.
# Install
cargo install domain-check-mcp
# Add to your agent (Claude Code example — works similarly for Codex, Gemini CLI, etc.)
claude mcp add domain-check -- domain-check-mcp
6 tools available: check_domain, check_domains, check_with_preset, generate_names, list_presets, domain_info.
Then ask your agent naturally: "Is coolstartup.com available?" or "Check mybrand across the startup preset".
The check tools take an optional check_for_sale parameter, and domain_info always includes RFC 10023 for-sale info when the holder publishes it. Responses mark that data as unverified and report failed lookups in for_sale_errors. Set DC_DNS_SERVER in the MCP client's env to choose the DNS server.
Supports: Claude Code, Claude Desktop, VS Code Copilot, Cursor, Windsurf, JetBrains, OpenAI Codex CLI, Gemini CLI, and any MCP stdio client.
Full setup: domain-check-mcp/README.md
Reliability Notes
- Domain status is network- and registry-dependent. Temporary errors can produce
UNKNOWNstates. - WHOIS output is less standardized than RDAP. domain-check reads the reply formats of 40+ registries and answers
UNKNOWNrather than guess. Some registries (.es,.gr,.vn, …) offer no public WHOIS, so their domains showUNKNOWNwhen RDAP can't answer. - For repeatable CI workflows, pin behavior with explicit flags (
--batch,--json,--no-bootstrap,--concurrency).
Troubleshooting and expected edge cases: docs/FAQ.md
Project Docs
- CLI reference: docs/CLI.md
- Library: domain-check-lib/README.md | docs.rs
- MCP server: domain-check-mcp/README.md
- Examples and workflows: docs/EXAMPLES.md
- Automation usage: docs/AUTOMATION.md
- FAQ: docs/FAQ.md
- Changelog: CHANGELOG.md
- Contributing: CONTRIBUTING.md
- Security policy: SECURITY.md
License
Licensed under either of
at your option.
Comments
New to MCP?
From what the protocol is to installing your first server, these answers cover most first questions.
An open protocol that defines how AI applications connect to external tools and data in a uniform way. Clients talk to the model; MCP servers provide tools, resources and prompt templates. They exchange standard messages, so one server can be reused by many clients.