Domain Availability Checker MCP
by gotchykid
README.md
# Domain Availability Checker MCP
An MCP (Model Context Protocol) server that checks domain availability for registration using RDAP APIs.
## Supported TLDs
Currently supported:
- `.com` - via Verisign RDAP API
- `.net` - via Verisign RDAP API
The architecture is extensible - see [Adding a New TLD](#adding-a-new-tld) below.
## Installation
### Usage with Claude Desktop
Add to your Claude Desktop configuration (`~/Library/Application Support/Claude/claude_desktop_config.json` on macOS):
```json
{
"mcpServers": {
"domain-checker": {
"command": "npx",
"args": ["-y", "github:gotchykid/domain-availability-checker-mcp"]
}
}
}
```
### From Source
```bash
# Clone the repository
git clone https://github.com/gotchykid/domain-availability-checker-mcp.git
cd domain-availability-checker-mcp
# Install dependencies
npm install
# Build
npm run build
```
Then add to Claude Desktop config:
```json
{
"mcpServers": {
"domain-checker": {
"command": "node",
"args": ["/path/to/domain-availability-checker-mcp/build/index.js"]
}
}
}
```
## Tools
### check_domain
Check if a domain is available for registration.
**Parameters:**
- `domain` (string): Domain name to check (e.g., "example.com" or "example.net")
**Returns:**
- Domain availability status
- If registered: registrar, creation date, expiration date, nameservers, and status
## Development
```bash
# Watch mode for development
npm run watch
# Test with MCP Inspector
npm run inspector
```
## Adding a New TLD
To add support for a new TLD (e.g., `.org`):
1. Create a new file `src/checkers/org.ts`
2. Implement the `DomainChecker` interface
3. Export the checker as `default`
Example:
```typescript
import { DomainChecker, DomainCheckResult } from "../types.js";
import {
RdapResponse,
parseRdapResponse,
createAvailableResult,
} from "./rdap-utils.js";
const RDAP_BASE_URL = "https://rdap.publicinterestregistry.org/rdap/domain/";
const TLD = "org";
const orgChecker: DomainChecker = {
tld: TLD,
async check(domain: string): Promise<DomainCheckResult> {
const normalizedDomain =
domain.toLowerCase().replace(/\.org$/, "") + ".org";
try {
const response = await fetch(`${RDAP_BASE_URL}${normalizedDomain}`);
if (response.status === 404) {
return createAvailableResult(normalizedDomain, TLD);
}
if (!response.ok) {
throw new Error(`RDAP request failed with status ${response.status}`);
}
const data: RdapResponse = await response.json();
return parseRdapResponse(data, normalizedDomain, TLD);
} catch (error) {
if (error instanceof Error && error.message.includes("404")) {
return createAvailableResult(normalizedDomain, TLD);
}
throw error;
}
},
};
export default orgChecker;
```
The registry auto-discovers checker files on startup - no other changes needed.
## License
MIT
TDQS
A3.8/5.0
Scored across 1 tool
Disambiguation5/5
With only a single tool, there is no possibility of confusion between tools. The tool's purpose is entirely clear and distinct.
Naming Consistency5/5
The single tool name follows a clear verb_noun convention ('check_domain'). With only one tool, naming consistency is inherently maintained.
Tool Count3/5
A single tool is on the borderline for a server. While it serves the narrow scope of checking domain availability, the surface feels thin with no supporting tools for related operations like bulk checks or WHOIS lookups.
Completeness5/5
For the stated purpose of checking domain availability, the tool fully covers the core operation. There are no missing lifecycle steps or dead ends for this narrow domain.
Maintenance
ActivityInactive
ResponsivenessNo issues