Back to Browse

Domainavail MCP Server

Developer ToolsModerate5.7MCP RegistryLocal
Free

Server data from the Official MCP Registry

Bulk domain availability: DNS, RDAP and WHOIS checks with registrar prices for the free names.

About

Bulk domain availability: DNS, RDAP and WHOIS checks with registrar prices for the free names.

Security Report

5.7
Moderate5.7Moderate Risk

domainavail is a read-only domain availability checker whose network access (DNS, RDAP, WHOIS, registrar APIs, price feeds) matches its stated purpose, and each registrar's credentials are sent only to that registrar's endpoint. Minor concerns include the reconstructed registrar endpoints and unauthenticated price-source fetches, plus Porkbun credentials being sent in a POST body and a path-interpolated domain in URLs, none of which indicate malicious behavior. Supply chain analysis found 3 known vulnerabilities in dependencies (0 critical, 2 high severity). Package verification found 1 issue.

8 files analyzed · 8 issues found

Security scores are indicators to help you make informed decisions, not guarantees. Always review permissions before connecting any MCP server.

Permissions Required

This plugin requests these system permissions. Most are normal for its category.

HTTP Network Access

Connects to external APIs or services over the internet.

network_dns

Check that this permission is expected for this type of plugin.

TCP Network Access

Opens direct network connections, common for database or messaging tools.

env_vars

Check that this permission is expected for this type of plugin.

What You'll Need

Set these up before or after installing:

TLDs for expanding bare namesRequired

Environment variable: DOMAINSCOUT_TLDS

comma list filtering whichRequired

Environment variable: DOMAINSCOUT_REGISTRARS

parallel checksRequired

Environment variable: DOMAINSCOUT_MAX_CONCURRENCY

default 2. ParsedRequired

Environment variable: DOMAINSCOUT_PER_HOST_CONCURRENCY

per-request timeoutRequired

Environment variable: DOMAINSCOUT_TIMEOUT_MS

expansion cap (default 500,Required

Environment variable: DOMAINSCOUT_MAX_DOMAINS

most names confirmed withRequired

Environment variable: DOMAINSCOUT_CONFIRM_MAX

DNS step on/off (default on), andRequired

Environment variable: DOMAINSCOUT_DNS

price offers on/off (default on).Required

Environment variable: DOMAINSCOUT_PRICES

accepted (default on); buyRequired

Environment variable: DOMAINSCOUT_AFFILIATE

How to Install

Add this to your MCP configuration file:

{
  "mcpServers": {
    "io-github-cloudcorprecords-domainavail": {
      "env": {
        "DOMAINSCOUT_DNS": "your-domainscout-dns-here",
        "DOMAINSCOUT_TLDS": "your-domainscout-tlds-here",
        "DOMAINSCOUT_PRICES": "your-domainscout-prices-here",
        "DOMAINSCOUT_AFFILIATE": "your-domainscout-affiliate-here",
        "DOMAINSCOUT_REGISTRARS": "your-domainscout-registrars-here",
        "DOMAINSCOUT_TIMEOUT_MS": "your-domainscout-timeout-ms-here",
        "DOMAINSCOUT_CONFIRM_MAX": "your-domainscout-confirm-max-here",
        "DOMAINSCOUT_MAX_DOMAINS": "your-domainscout-max-domains-here",
        "DOMAINSCOUT_MAX_CONCURRENCY": "your-domainscout-max-concurrency-here",
        "DOMAINSCOUT_PER_HOST_CONCURRENCY": "your-domainscout-per-host-concurrency-here"
      },
      "args": [
        "-y",
        "@reneturcios/domainavail"
      ],
      "command": "npx"
    }
  }
}

Documentation

View on GitHub

From the project's GitHub README.

domainavail

You have a list of names you like. Which of them could you actually register? domainavail answers that for a whole list at once: hand it candidate names and it walks each one through a series of public checks, tells you which names look free, which are taken, and — for the free ones — what they cost and where to buy them. It is strictly read-only: it never registers, reserves or changes anything.

How a name is checked

Names are normalised first (scheme and path stripped, lowercased). A name without a dot is expanded over each configured TLD; a full domain is checked as-is. Each expanded name then goes through a funnel:

  1. DNS delegation — if the name has NS records it is delegated, so it is taken. ENOTFOUND / ENODATA mean not delegated; other DNS errors leave the name on the unknown path.
  2. RDAP — a 200 means the name is registered (taken); the expiration event is reported as expires, and a pending-delete status adds the note being deleted; may become available soon. A 404 means the name looks free.
  3. WHOIS fallback — used when the TLD has no RDAP or RDAP fails. Text matching No match / NOT FOUND / No Data Found means free-looking; a record means taken; a WHOIS failure means unknown.
  4. Registrar confirmation — a free-looking name stays likely_available unless a configured registrar confirms it. Registrars are asked in the order Name.com → Cloudflare → Spaceship → Porkbun, until one answers definitively: then the name becomes available (with premium: true when the registrar says premium, and its price when given), reserved, or taken.

Possible statuses: available, likely_available, taken, reserved, unknown.

The output is one JSON object: a summary with counts per status, results in input order (except saved domains, which are marked saved: true and listed first), a skipped list for inputs that were not domain names or that fell over the expansion cap, and warnings. With details: true each result also carries evidence — the per-step record of what DNS, RDAP, WHOIS and the registrar said.

Configuration

All configuration is via DOMAINSCOUT_* environment variables:

  • DOMAINSCOUT_TLDS — TLDs for expanding bare names (default com,net,ai). The per-call tlds argument overrides this.
  • DOMAINSCOUT_REGISTRARS — comma list filtering which registrars are used for offers and confirmation.
  • DOMAINSCOUT_MAX_CONCURRENCY — parallel checks (default 10).
  • DOMAINSCOUT_PER_HOST_CONCURRENCY — default 2. Parsed but not separately enforced in this rebuild (a labelled simplification).
  • DOMAINSCOUT_TIMEOUT_MS — per-request timeout (default 10000).
  • DOMAINSCOUT_MAX_DOMAINS — expansion cap (default 500, hard max 10000). Excess names go to skipped with the reason over DOMAINSCOUT_MAX_DOMAINS.
  • DOMAINSCOUT_CONFIRM_MAX — most names confirmed with registrars per call (default 50).
  • DOMAINSCOUT_DNS — DNS step on/off (default on), and DOMAINSCOUT_DNS_SERVERS — custom DNS servers.
  • DOMAINSCOUT_PRICES — price offers on/off (default on).
  • DOMAINSCOUT_AFFILIATE — accepted (default on); buy links here are plain links and carry no affiliate templates.
  • Registrar keys: DOMAINSCOUT_NAMECOM_USERNAME / DOMAINSCOUT_NAMECOM_TOKEN, DOMAINSCOUT_CLOUDFLARE_ACCOUNT_ID / DOMAINSCOUT_CLOUDFLARE_API_TOKEN, DOMAINSCOUT_SPACESHIP_API_KEY / DOMAINSCOUT_SPACESHIP_API_SECRET, DOMAINSCOUT_PORKBUN_API_KEY / DOMAINSCOUT_PORKBUN_SECRET_KEY. Each registrar's keys are sent only to that registrar.

Prices come from the Porkbun public pricing API and a Cloudflare pricing mirror, ordered cheapest first. An offer is {registrar, price, renewal?, url}.

Endpoint provenance

The RDAP lookup uses https://rdap.org/domain/<domain> (endpoint choice labelled). The registrar confirmation endpoints and the two price-source URLs are reconstructions, labelled as such; the Cloudflare search URL https://www.cloudflare.com/domains/search/?q=<domain> is the documented example, and the Porkbun checkout URL is our rendering of the same idea.

Tools

  • check_domains — checks whether domain names are free to register, with prices and where to buy the free ones. Arguments: domains (required array of strings, 1–1,000 entries), tlds (optional array of strings), confirm (optional boolean, default true), details (optional boolean, default false), saved (optional array of strings). Validation fails with domains must be an array of 1 to 1000 names; entries that are empty after normalising go to skipped with the reason not a domain name.

CLI

npx @reneturcios/domainavail check_domains '{"domains":["example","widget.com"],"details":true}'
npx @reneturcios/domainavail --version

Output is the tool's result text (the JSON described above). Exit codes: 0 on success, 1 on a runtime error (including validation), 2 on a usage error.

MCP server

npx -y @reneturcios/domainavail mcp

MCP client config:

{
  "mcpServers": {
    "domainavail": {
      "command": "npx",
      "args": ["-y", "@reneturcios/domainavail", "mcp"]
    }
  }
}

Docker

docker run -i ghcr.io/cloudcorprecords/domainavail
docker run --rm ghcr.io/cloudcorprecords/domainavail check_domains '{"domains":["widget.com"]}'

Development

npm install
npm run build   # tsc -> dist/
npm test        # tsx --test test/*.test.ts (injected fakes only, no network)
npm run dev     # run the CLI from source

License

MIT — Copyright (c) 2026 Rene Turcios

Reviews

No reviews yet

Be the first to review this server!