Cheapest Domains

Compare domain registration and renewal prices across registrars and check exact-name availability.

Should I use this

Quality & Safety

A
Description quality
94%
Schema completeness
83%
Naming quality
98%
Poisoning risk
100%
Permission match
100%
Protocol compliance
100%

Findings (1)

  • LOWTool 'estimate_cost' description lacks action verbin estimate_cost

Based on automated analysis of tool definitions and protocol compliance.

Context Cost

~3,361Tokens (tool definitions)
~3.4 KBTypical response size
Significant attention impact (2.63% of 128k context)

This is the approximate number of tokens consumed each time the server's tools are loaded into a model's context. Higher counts reduce the attention available for other tasks.

Install

One-Click Install

Add this to your `claude_desktop_config.json` file:

{
  "mcpServers": {
    "cheapest-domains": {
      "url": "https://www.cheapest.domains/mcp"
    }
  }
}

Remote endpoints

https://www.cheapest.domains/mcpstreamable-http

What it can do

Tool inventory

Tools (9)

🟒 Read-only🟑 WriteπŸ”΄ Deleteβšͺ Unknown
🟒search_prices(q, registrar, registrars, favorites, sort, ...)

Compare standard prices, including explicitly labeled Cloudflare samples. Find affordable domain extensions and registrar offers, sorted by annual renewal by default. Saved offers remain listed when outdated, with stale flags and source timestamps. Returns prices, citation links, timestamps, coverage, and pagination. Does not check exact-name availability.

Input Schema

{
  "type": "object",
  "properties": {
    "q": {
      "type": "string",
      "maxLength": 200,
      "description": "TLD search: .com is exact; com is partial. Separate alternatives with commas or spaces.",
      "default": ""
    },
    "registrar": {
      "type": "string",
      "maxLength": 40,
      "pattern": "^[a-z0-9-]+$",
      "description": "Connected registrar ID from the registrars endpoint. Omit to compare all."
    },
    "registrars": {
      "type": "string",
      "maxLength": 200,
      "pattern": "^[a-z0-9-]+(?:,[a-z0-9-]+)*$",
      "description": "Comma-separated connected registrar IDs to compare together. Use instead of registrar. Cheapest-per-extension winners are chosen within this set."
    },
    "favorites": {
      "type": "string",
      "maxLength": 81,
      "pattern": "^[a-z0-9-]+(?:,[a-z0-9-]+)?$",
      "description": "Up to two distinct connected registrar IDs, comma-separated. Adds saved favorite offers and fresh baselines for this result page, independent of filters. Does not save preferences or check names."
    },
    "sort": {
      "type": "string",
      "enum": [
        "renewal",
        "registration",
        "total"
      ],
      "default": "renewal",
      "description": "Ranking metric. Total uses a conservative new-registration estimate."
    },
    "orderBy": {
      "type": "string",
      "enum": [
        "price",
        "extension"
      ],
      "default": "price",
      "description": "Order results by the selected price metric or extension. Cheapest-per-extension winners are selected before ordering."
    },
    "direction": {
      "type": "string",
      "enum": [
        "asc",
        "desc"
      ],
      "default": "asc",
      "description": "Ascending or descending result order. Unknown totals follow priced totals in either price direction."
    },
    "years": {
      "type": "integer",
      "minimum": 1,
      "maximum": 10,
      "default": 3,
      "description": "Planning horizon in years, including initial registration."
    },
    "maxRenewalCents": {
      "type": "integer",
      "minimum": 0,
      "maximum": 100000000,
      "description": "Maximum annual renewal in integer USD cents; 1000 means USD 10."
    },
    "hideCountryCodes": {
      "type": "boolean",
      "default": false,
      "description": "Exclude two-letter country-code extensions."
    },
    "hideJumps": {
      "type": "boolean",
      "default": false,
      "description": "Exclude current renewal prices greater than twice registration."
    },
    "view": {
      "type": "string",
      "enum": [
        "best",
        "all"
      ],
      "default": "best",
      "description": "Best returns one winner per TLD; all returns every matching registrar offer."
    },
    "includeStale": {
      "type": "boolean",
      "default": false,
      "description": "Accepted for compatibility. Saved prices stay in results until a successful refresh replaces them and are labeled stale. includeStale=true still requires view=all."
    },
    "limit": {
      "type": "integer",
      "minimum": 1,
      "maximum": 200,
      "default": 50,
      "description": "Maximum number of results, up to 200."
    },
    "offset": {
      "type": "integer",
      "minimum": 0,
      "maximum": 100000,
      "default": 0,
      "description": "Result offset. Follow pagination.next for additional results; the feed can change between requests."
    },
    "name": {
      "type": "string",
      "pattern": "^[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?$",
      "maxLength": 63,
      "description": "One ASCII domain label without the extension, such as myproject. Price and link tools only build links from it; availability and popularity tools send the exact domain to their providers."
    },
    "format": {
      "type": "string",
      "enum": [
        "json",
        "csv",
        "markdown"
      ],
      "default": "json",
      "description": "Response representation. CSV and Markdown use the same filters, order and bounded pagination; they contain main offers, not favorite comparison arrays. MCP retains structured JSON alongside rendered text."
    }
  },
  "additionalProperties": false
}
🟒get_tld_prices(tld, registrar, registrars, favorites, sort, ...)

Compare all covered registrars for one extension. Returns source failures, quote timestamps and minimum terms; availability is not checked.

Input Schema

{
  "type": "object",
  "properties": {
    "tld": {
      "type": "string",
      "pattern": "^\\.?[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?$",
      "maxLength": 64,
      "description": "One covered ASCII top-level extension, such as com or .com. Multi-part suffixes and IDNs are not covered."
    },
    "registrar": {
      "type": "string",
      "maxLength": 40,
      "pattern": "^[a-z0-9-]+$",
      "description": "Connected registrar ID from the registrars endpoint. Omit to compare all."
    },
    "registrars": {
      "type": "string",
      "maxLength": 200,
      "pattern": "^[a-z0-9-]+(?:,[a-z0-9-]+)*$",
      "description": "Comma-separated connected registrar IDs to compare together. Use instead of registrar. Cheapest-per-extension winners are chosen within this set."
    },
    "favorites": {
      "type": "string",
      "maxLength": 81,
      "pattern": "^[a-z0-9-]+(?:,[a-z0-9-]+)?$",
      "description": "Up to two distinct connected registrar IDs, comma-separated. Adds saved favorite offers and fresh baselines for this result page, independent of filters. Does not save preferences or check names."
    },
    "sort": {
      "type": "string",
      "enum": [
        "renewal",
        "registration",
        "total"
      ],
      "default": "renewal",
      "description": "Ranking metric. Total uses a conservative new-registration estimate."
    },
    "orderBy": {
      "type": "string",
      "enum": [
        "price",
        "extension"
      ],
      "default": "price",
      "description": "Order results by the selected price metric or extension. Cheapest-per-extension winners are selected before ordering."
    },
    "direction": {
      "type": "string",
      "enum": [
        "asc",
        "desc"
      ],
      "default": "asc",
      "description": "Ascending or descending result order. Unknown totals follow priced totals in either price direction."
    },
    "years": {
      "type": "integer",
      "minimum": 1,
      "maximum": 10,
      "default": 3,
      "description": "Planning horizon in years, including initial registration."
    },
    "includeStale": {
      "type": "boolean",
      "default": false,
      "description": "Accepted for compatibility. Saved prices stay in results until a successful refresh replaces them and are labeled stale. includeStale=true still requires view=all."
    },
    "limit": {
      "type": "integer",
      "minimum": 1,
      "maximum": 200,
      "default": 50,
      "description": "Maximum number of results, up to 200."
    },
    "offset": {
      "type": "integer",
      "minimum": 0,
      "maximum": 100000,
      "default": 0,
      "description": "Result offset. Follow pagination.next for additional results; the feed can change between requests."
    },
    "name": {
      "type": "string",
      "pattern": "^[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?$",
      "maxLength": 63,
      "description": "One ASCII domain label without the extension, such as myproject. Price and link tools only build links from it; availability and popularity tools send the exact domain to their providers."
    },
    "format": {
      "type": "string",
      "enum": [
        "json",
        "csv",
        "markdown"
      ],
      "default": "json",
      "description": "Response representation. CSV and Markdown use the same filters, order and bounded pagination; they contain main offers, not favorite comparison arrays. MCP retains structured JSON alongside rendered text."
    }
  },
  "required": [
    "tld"
  ],
  "additionalProperties": false
}
🟒get_registrars

Get connected registrar coverage, timestamps, fresh counts, failures, and registrars not compared.

Input Schema

{
  "type": "object",
  "properties": {},
  "additionalProperties": false
}
🟒estimate_cost(tld, registrar, years, name)

Estimate new registration plus subsequent renewals for one TLD at a registrar. Returns null for unknown multi-year term totals. Not a transfer or existing-domain renewal quote.

Input Schema

{
  "type": "object",
  "properties": {
    "tld": {
      "type": "string",
      "pattern": "^\\.?[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?$",
      "maxLength": 64,
      "description": "One covered ASCII top-level extension, such as com or .com. Multi-part suffixes and IDNs are not covered."
    },
    "registrar": {
      "type": "string",
      "maxLength": 40,
      "pattern": "^[a-z0-9-]+$",
      "description": "Connected registrar ID from the registrars endpoint. Omit to compare all."
    },
    "years": {
      "type": "integer",
      "minimum": 1,
      "maximum": 10,
      "default": 3,
      "description": "Planning horizon in years, including initial registration."
    },
    "name": {
      "type": "string",
      "pattern": "^[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?$",
      "maxLength": 63,
      "description": "One ASCII domain label without the extension, such as myproject. Price and link tools only build links from it; availability and popularity tools send the exact domain to their providers."
    }
  },
  "required": [
    "tld",
    "registrar",
    "years"
  ],
  "additionalProperties": false
}
🟒get_registrar_link(tld, registrar, name)

Construct a verified registrar search destination for a proposed name and extension. Does not navigate, check availability, or purchase. NameBright and AWS Route 53 use an explicit copy/paste fallback.

Input Schema

{
  "type": "object",
  "properties": {
    "tld": {
      "type": "string",
      "pattern": "^\\.?[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?$",
      "maxLength": 64,
      "description": "One covered ASCII top-level extension, such as com or .com. Multi-part suffixes and IDNs are not covered."
    },
    "registrar": {
      "type": "string",
      "maxLength": 40,
      "pattern": "^[a-z0-9-]+$",
      "description": "Connected registrar ID from the registrars endpoint. Omit to compare all."
    },
    "name": {
      "type": "string",
      "pattern": "^[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?$",
      "maxLength": 63,
      "description": "One ASCII domain label without the extension, such as myproject. Price and link tools only build links from it; availability and popularity tools send the exact domain to their providers."
    }
  },
  "required": [
    "tld",
    "registrar",
    "name"
  ],
  "additionalProperties": false
}
🟒get_naming_guidance

Return domain naming criteria, renewal-price comparison guidance and availability-status definitions. This static reference does not generate names or check availability.

Input Schema

{
  "type": "object",
  "properties": {},
  "additionalProperties": false
}
🟒check_availability(name, tld, registrar, fresh)

Check one exact domain. Cloudflare answers first; configured fallback providers, then an optional selected registrar, run only for missing facts; a taken name ends the chain. Returns separate availability and nullable premium facts with provider attempts and check times; null premium is unconfirmed, not standard tier. Evidence expires after five minutes. No price lookup, purchase or reservation.

Input Schema

{
  "type": "object",
  "properties": {
    "name": {
      "type": "string",
      "pattern": "^[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?$",
      "maxLength": 63,
      "description": "One ASCII domain label without the extension, such as myproject. Price and link tools only build links from it; availability and popularity tools send the exact domain to their providers."
    },
    "tld": {
      "type": "string",
      "pattern": "^\\.?[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?$",
      "maxLength": 64,
      "description": "One covered ASCII top-level extension, such as com or .com. Multi-part suffixes and IDNs are not covered."
    },
    "registrar": {
      "type": "string",
      "maxLength": 40,
      "pattern": "^[a-z0-9-]+$",
      "description": "Connected registrar ID from the registrars endpoint. Omit to compare all."
    },
    "fresh": {
      "type": "boolean",
      "default": false,
      "description": "Explicitly request a fresh single-name recheck only when the user asks. Normal checks reuse five-minute evidence. Fresh checks still obey provider gates, pending claims, caller limits and cooldowns; never use in a loop."
    }
  },
  "required": [
    "name",
    "tld"
  ],
  "additionalProperties": false
}
🟒get_domain_popularity(name, tld)

Look up one exact domain in Cloudflare Radar’s global DNS popularity ranking. Returns an exact top-100 rank or a broader popularity group, categories, locations, data dates, and CC BY-NC 4.0 attribution. Not Google SEO difficulty, name competition, or availability. Missing data does not indicate zero competition.

Input Schema

{
  "type": "object",
  "properties": {
    "name": {
      "type": "string",
      "pattern": "^[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?$",
      "maxLength": 63,
      "description": "One ASCII domain label without the extension, such as myproject. Price and link tools only build links from it; availability and popularity tools send the exact domain to their providers."
    },
    "tld": {
      "type": "string",
      "pattern": "^\\.?[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?$",
      "maxLength": 64,
      "description": "One covered ASCII top-level extension, such as com or .com. Multi-part suffixes and IDNs are not covered."
    }
  },
  "required": [
    "name",
    "tld"
  ],
  "additionalProperties": false
}
🟒check_availability_batch(name, tlds, cachedOnly)

Check one name across up to 20 extensions, reusing shared five-minute evidence. Enrichment stops once availability is known, so premium can remain null. Partial failures keep the answers received plus retry guidance, without automatic retries. cachedOnly makes no provider calls. No selected-registrar fallback, fresh mode, prices or purchases.

Input Schema

{
  "type": "object",
  "properties": {
    "name": {
      "type": "string",
      "pattern": "^[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?$",
      "maxLength": 63,
      "description": "One ASCII domain label without the extension, such as myproject. Price and link tools only build links from it; availability and popularity tools send the exact domain to their providers."
    },
    "tlds": {
      "type": "string",
      "maxLength": 1299,
      "description": "One to 20 distinct ASCII top-level extensions separated by commas, for the same name. Optional leading dots are accepted. No whole-catalog scans."
    },
    "cachedOnly": {
      "type": "boolean",
      "default": false,
      "description": "Return only existing fresh availability evidence, without provider calls, lookup admission, claims or retries. Cache misses remain Not confirmed."
    }
  },
  "required": [
    "name",
    "tlds"
  ],
  "additionalProperties": false
}

Community

Rate this Server

Evidence

Recent observations

verifiedversion not recorded9 tools