Skip to main content
Glama
gotchykid

Domain Availability Checker MCP

by gotchykid

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 below.

Related MCP server: Domain Checker

Installation

Usage with Claude Desktop

Add to your Claude Desktop configuration (~/Library/Application Support/Claude/claude_desktop_config.json on macOS):

{
  "mcpServers": {
    "domain-checker": {
      "command": "npx",
      "args": ["-y", "github:gotchykid/domain-availability-checker-mcp"]
    }
  }
}

From Source

# 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:

{
  "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

# 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:

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

Available Tools

1 tool
check_domainA

Check if a domain is available for registration. Supported TLDs: .com, .net

ParametersJSON Schema
NameRequiredDescriptionDefault
domainYesDomain name to check (e.g., 'example.com' or 'example.net'). Supported TLDs: .com, .net

TDQS

A3.5/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations are provided, so the description carries the full burden. It states the core check behavior and supported TLDs, but does not disclose what the response looks like, whether any network lookup occurs, whether the check is real-time, or any edge cases like premium/restricted domains. This leaves important behavioral context undisclosed.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is a single sentence that front-loads the action and object, then immediately lists TLD constraints. No filler or repetition exists.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a single-parameter, no-annotation tool with no output schema, the description is minimally viable: it states the action, the input scope, and a key constraint. However, it does not explain the result format or semantics of 'unavailable', so agents cannot fully anticipate the tool's response.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, and the schema already documents the domain parameter with an example and supported TLDs. The tool description essentially repeats that limitation without adding new parameter-level meaning, so the baseline of 3 applies.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description uses a specific verb ('check') followed by a clear resource ('whether a domain is available for registration') and states the supported TLDs. This leaves no ambiguity about what the tool does, even without sibling context.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description implies the tool is for domain availability checks but provides no guidance about when to use it versus alternatives, nor any exclusions or prerequisites. Since there are no siblings, the lack of explicit routing is acceptable but the guidance remains only implicit.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

Tool Schema Changelog

Recent tool additions, removals, and schema changes observed during successful MCP inspections.

  1. 1 tool updatev1.0.0
    • First observedcheck_domain

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

Related MCP Connectors

Related MCP Servers