domain-rdap-mcp
README.md
# domain-rdap-mcp
**Real, live domain registration lookups -- is it registered, when does it expire, who's the registrar -- free, in one command.**
```bash
pip install domain-rdap-mcp # or: uvx domain-rdap-mcp
```
Then ask your agent: *"is example.com available?"* or *"when does getlulu.dev expire?"*
No API key. No signup. Free.
## Tools
| Tool | What the model sees it for |
|---|---|
| `check_domain(domain)` | Check whether a domain is registered, and if so its status, registration date, expiration date, and registrar. "Is domain-x.com available?", "when does domain-x.com expire?", "who registered domain-x.com?" |
Data comes from [RDAP](https://rdap.org) (Registration Data Access Protocol), the IETF-standardized, ICANN-mandated successor to WHOIS -- structured JSON instead of free-text, and it auto-routes to whichever registry actually holds the record.
## Examples
Registered domain:
```
> check_domain("getlulu.dev")
{
"domain": "getlulu.dev",
"registered": true,
"status": [
"client delete prohibited",
"client renew prohibited",
"client transfer prohibited",
"client update prohibited"
],
"registered_date": "2025-12-16T14:20:57.819Z",
"expiration_date": "2027-12-16T14:20:57.819Z",
"last_changed_date": "2025-12-21T14:20:57.819Z",
"registrar": "GoDaddy.com, LLC",
"attribution": "Domain registration data via RDAP (rdap.org), the IETF-standardized successor to WHOIS"
}
```
Unregistered (available) domain:
```
> check_domain("zzqx9v7k2m4p8qw-nosuchdomain-xk92.com")
{
"domain": "zzqx9v7k2m4p8qw-nosuchdomain-xk92.com",
"registered": false,
"attribution": "Domain registration data via RDAP (rdap.org), the IETF-standardized successor to WHOIS"
}
```
A 404 from RDAP means the domain isn't registered -- that's a normal, meaningful "available" answer, not an error.
Some registrars redact registrant/registrar detail for privacy; when that happens `registrar` comes back `null` rather than guessed or omitted.
## How it's free
This server is part of the [Lulu Ads](https://getlulu.dev/publishers) network:
tool results may carry one clearly labeled, disclosed `sponsored` data field
(never instructions, never hidden). That sponsorship pays the hosting, so the
lookup stays free. Fail-open by design -- if the ads backend is slow, down,
or (as with a local install) has no credentials at all, the tools behave
exactly like an unmonetized server.
Run your own MCP? The same one-line integration is open to every publisher --
[getlulu.dev/publishers](https://getlulu.dev/publishers), 70% rev share.
## Data
Domain registration data via [RDAP](https://rdap.org) (rdap.org), querying
each domain's authoritative registry RDAP server. This project is not
affiliated with ICANN, rdap.org, or any registry/registrar.
## Self-hosting over HTTP
```bash
pip install fastmcp lulu-ads httpx uvicorn
MCP_TRANSPORT=http DOMAIN_LOCAL_DEV=1 python server.py # serves http://localhost:8080/domain/mcp
```
TDQS
A4.9/5.0
Scored across 1 tool
Disambiguation5/5
With only one tool, there is no possibility of confusion between tools. The tool's purpose is clearly defined.
Naming Consistency5/5
The single tool 'check_domain' follows a clear verb_noun convention, which is consistent and descriptive.
Tool Count5/5
A single tool is perfectly scoped for a server dedicated to RDAP domain lookups. It covers the entire domain without unnecessary bloat.
Completeness5/5
The tool provides comprehensive domain information: registration status, dates, and registrar. It fully addresses the primary use cases for RDAP queries.
Maintenance
ActivitySlowing
ResponsivenessNo issues