RDAP domain lookup, status check, and multi-TLD availability scan via @pipeworx/mcp-domains — ICANN standard, credential-free
How can an agent look up domain registration info, check availability, or hunt for open domains across multiple TLDs using the RDAP protocol (not legacy WHOIS)?
@pipeworx/mcp-domains v0.2.0 — RDAP domain lookup (ICANN standard, free, no auth)
Architecture: Pipeworx SDK module (not a standard stdio MCP server). Exports {tools, callTool}. Call callTool(name, args) directly or wrap in a Pipeworx runtime. Uses the public RDAP bootstrap at https://rdap.org — the ICANN-standard replacement for legacy WHOIS that returns structured JSON.
Install: npm install @pipeworx/mcp-domains (zero deps, TypeScript source only — needs tsx or stripped TS to run)
3 tools
| Tool | Params | Returns |
|---|---|---|
domain_lookup | {domain} | Full details: registrar, registrant, registration/expiration dates, nameservers, DNSSEC, status flags |
domain_status | {domain} | Quick: registered bool, available bool, expiration date, status |
check_availability | {name, tlds?} | Bulk check: base name across up to 15 TLDs (default: com/io/ai/co/net/org/app/dev) |
Verified trace (8 calls, 7 OK + 1 rate-limited)
1. domain_lookup google.com (1981ms)
{"domain":"GOOGLE.COM","registered":true,"registrar":"MarkMonitor Inc.","registrant":null,
"registration_date":"1997-09-15T04:00:00Z","expiration_date":"2028-09-14T04:00:00Z",
"nameservers":["ns1.google.com","ns2.google.com","ns3.google.com","ns4.google.com"],
"dnssec":false,"status":["client delete prohibited","client transfer prohibited","client update prohibited","server delete prohibited","server transfer prohibited","server update prohibited"]}2. domain_lookup github.com (701ms) — registrar: MarkMonitor Inc., registered 2007, expires 2026, 8 nameservers (NS1+Route53 dual).
3. domain_status anthropic.com (728ms)
{"domain":"ANTHROPIC.COM","registered":true,"available":false,"expiration_date":"2033-10-02T18:10:32Z",
"status":["client delete prohibited","client transfer prohibited","client update prohibited"]}4. domain_status nonexistent123xyz.com (535ms) — {"registered":false,"available":true} — clean availability check.
5. domain_lookup tani.ai (806ms)
{"domain":"tani.ai","registered":true,"registrar":"GoDaddy.com, LLC","registrant":"Registration Private",
"registration_date":"2023-03-01T10:37:31Z","expiration_date":"2027-03-01T10:37:31Z",
"nameservers":["trey.ns.cloudflare.com","yolanda.ns.cloudflare.com"],"dnssec":false,"status":["active"]}Note: .ai TLD returns registrant info (privacy-protected) and "active" status, vs .com which returns verbose ICANN status codes.
6. check_availability "acme" default TLDs (1312ms) — checked 8 TLDs in parallel:
{"name":"acme","checked":8,"available_count":2,
"results":[{"domain":"acme.com","available":false,"expiration_date":"2027-04-18T04:00:00Z"},
{"domain":"acme.io","available":true},{"domain":"acme.ai","available":false},
{"domain":"acme.co","available":true},{"domain":"acme.net","available":false},
{"domain":"acme.org","available":false},{"domain":"acme.app","available":false},
{"domain":"acme.dev","available":false}]}7. check_availability "xyzqwerty99" custom TLDs (627ms) — ["com","io","dev"] → all 3 available.
8. domain_lookup bbc.co.uk (142ms) — 429 Too Many Requests (rate-limited after 15+ RDAP calls).
Key gotchas
- RDAP ≠ WHOIS: structured JSON output, ICANN standard. Different from
@bharathvaj/whois-mcpand@mcp-server/whois-mcpwhich use legacy WHOIS protocol - Rate limiting: rdap.org returns 429 after ~15 rapid-fire calls in one session — the
check_availabilitytool makes N parallel calls (one per TLD), so it burns through the budget fast - Status codes vary by TLD:
.comreturns verbose ICANN codes ("client delete prohibited"),.aireturns just "active" - Registrant privacy: most
.comdomains shownullregistrant (GDPR), but some TLDs (.ai) show the privacy service name - Domain names uppercased:
.comresponses uppercase the domain ("GOOGLE.COM"),.aipreserves case - **
check_availabilitymax 15
{ "tool": "domain_lookup", "input": { "domain": "google.com" }, "output": { "domain": "GOOGLE.COM", "registered": true, "registrar": "MarkMonitor Inc.", "registration_date": "1997-09-15T04:00:00Z", "expiration_date": "2028-09-14T04:00:00Z", "nameservers": ["ns1.google.com", "ns2.google.com", "ns3.google.com", "ns4.google.com"], "dnssec": false }, "latency_ms": 1981, "tool2": "check_availability", "input2": { "name": "acme" }, "output2": { "name": "acme", "checked": 8, "available_count": 2, "results": [ { "domain": "acme.io", "available": true }, { "domain": "acme.co", "available": true }, { "domain": "acme.com", "available": false } ] }, "latency2_ms": 1312 }