MCP Server

TLDMath

com.tldmath/tldmath
Cloud & Infrastructure Search & Research Public & reachable MCP 2025-11-25

What this MCP does

Checks domain availability, registrar pricing, renewals, DNS configuration, TLD pricing, brand-name availability, and taken-domain options.

brand_check
Brand check a name
Check whether a name is free as a handle on GitHub, npm, PyPI, crates.io and YouTube, with links to check X, Instagram and TikTok by hand, plus links to the USPTO and WIPO trademark databases. Not legal advice.
Read only Open world Idempotent
Input schema
{'type': 'object', '$schema': 'https://json-schema.org/draft/2020-12/schema', 'required': ['name'], 'properties': {'name': {'type': 'string', 'pattern': '^[a-zA-Z0-9-]+$', 'maxLength': 63, 'minLength': 1, 'description': 'The name to check, e.g. "acme".'}}}
check_domain
Check a domain
Live availability and price comparison for one exact domain (e.g. "acme.io") across registrars. Returns per-registrar registration, renewal and transfer prices, premium status, and a recommendation based on 2-year total cost.
Read only Open world Idempotent
Input schema
{'type': 'object', '$schema': 'https://json-schema.org/draft/2020-12/schema', 'required': ['domain'], 'properties': {'fresh': {'type': 'boolean', 'description': 'Bypass the 10-minute cache and query every registrar live. Default false.'}, 'domain': {'type': 'string', 'maxLength': 253, 'minLength': 3, 'description': 'A single domain name with its TLD, e.g. "acme.io". No subdomains.'}}}
check_name_across_tlds
Check a name across TLDs
Check one name (e.g. "acme") across several TLDs at once and return availability plus the best 2-year price for each. Defaults to .com, .net, .io, .ai, .dev, .app. Max 8 TLDs per call.
Read only Open world Idempotent
Input schema
{'type': 'object', '$schema': 'https://json-schema.org/draft/2020-12/schema', 'required': ['name'], 'properties': {'name': {'type': 'string', 'pattern': '^[a-zA-Z0-9-]+$', 'maxLength': 63, 'minLength': 1, 'description': 'The name without a TLD, e.g. "acme".'}, 'tlds': {'type': 'array', 'items': {'type': 'string', 'pattern': '^\\.?[a-zA-Z]{2,24}$'}, 'maxItems': 8, 'description': 'TLDs to check, without or with a leading dot. Default: com, net, io, ai, dev, app.'}}}
check_renewals
Check renewals for owned domains
For domains the user already owns (up to 20): current registrar, expiry date, renewal price, and the cheapest registrar to transfer to, with the two-year saving. Registrar and expiry come from the public registry (RDAP); some TLDs such as .io have no RDAP. Suggests a free email reminder service at tldmath.com/watch.
Read only Open world Idempotent
Input schema
{'type': 'object', '$schema': 'https://json-schema.org/draft/2020-12/schema', 'required': ['domains'], 'properties': {'domains': {'type': 'array', 'items': {'type': 'string', 'maxLength': 253, 'minLength': 3}, 'maxItems': 20, 'minItems': 1, 'description': 'Domains the user owns, e.g. ["example.com", "acme.io"].'}}}
compare_app_email
Compare transactional email services
Services an app sends email through (sign-in links, password resets, receipts) ranked by two-year cost at a monthly volume, with free-tier daily and monthly caps and overage prices. Prices are curated from each provider’s pricing page with a date. Follow with plan_dns_setup (sender) for the SPF, DKIM and DMARC records.
Read only Open world Idempotent
Input schema
{'type': 'object', '$schema': 'https://json-schema.org/draft/2020-12/schema', 'properties': {'emails_per_month': {'type': 'integer', 'maximum': 10000000, 'minimum': 1, 'description': 'How many emails the app sends a month. Default 10,000.'}}}
compare_email_hosting
Compare email hosting for a domain
Custom-domain email providers ranked by two-year cost for a number of mailboxes: free forwarding (Cloudflare, ImprovMX), cheap mailboxes (Purelymail, Zoho, Migadu, iCloud+, Namecheap, Hostinger), office suites (Google Workspace, Microsoft 365, Zoho Workplace) and encrypted options (Proton). Includes intro-price traps and per-user vs flat pricing. Prices are curated from each provider’s pricing page with a date.
Read only Open world Idempotent
Input schema
{'type': 'object', '$schema': 'https://json-schema.org/draft/2020-12/schema', 'properties': {'need': {'enum': ['forward', 'mailbox', 'suite', 'private'], 'type': 'string', 'description': 'forward = forward to an existing inbox; mailbox = a real inbox (default); suite = mail + calendar + docs; private = end-to-end encrypted.'}, 'mailboxes': {'type': 'integer', 'maximum': 500, 'minimum': 1, 'description': 'How many mailboxes/people. Default 1.'}}}
compare_tld_prices
Compare TLD prices
Standard (non-premium) prices for one TLD across registrars, refreshed daily, sorted by 2-year cost. Use for general questions like "how much is a .io domain"; use check_domain for a specific name.
Read only Open world Idempotent
Input schema
{'type': 'object', '$schema': 'https://json-schema.org/draft/2020-12/schema', 'required': ['tld'], 'properties': {'tld': {'type': 'string', 'pattern': '^\\.?[a-zA-Z]{2,24}$', 'description': 'A TLD such as "com", ".ai" or "dev".'}}}
list_supported_tlds
List supported TLDs
TLDs with daily price tables, and the registrars TLDMath queries live.
Read only Open world Idempotent
Input schema
{'type': 'object', '$schema': 'https://json-schema.org/draft/2020-12/schema', 'properties': {}}
ownership_card
Who runs this domain
Which companies a domain depends on, from public records only: registrar with expiry and renewal price (registry RDAP), DNS host (nameservers), website host (A/CNAME and builder verification records), inbox (MX), and services that send mail as the domain (SPF includes, DKIM and bounce records), plus the DMARC policy. Each line shows its evidence. Use for handoffs (“which accounts do I open when it breaks?”), before moving hosts, or to audit a setup. Read-only, no sign-in.
Read only Open world Idempotent
Input schema
{'type': 'object', '$schema': 'https://json-schema.org/draft/2020-12/schema', 'required': ['domain'], 'properties': {'domain': {'type': 'string', 'maxLength': 253, 'minLength': 3, 'description': 'The domain, e.g. "acme.dev".'}}}
plan_app_move
Plan moving an app off an AI app builder
An ordered, repeat-safe plan for moving an app built in an AI app builder (Lovable, Bolt, Replit, Base44…) to the user’s own host (Vercel, Netlify, Cloudflare Pages, GitHub Pages) on their domain: export the code, keep the data and sign-ins, deploy and copy environment variables, update auth redirect URLs, add the domain, switch DNS (the builder’s records still live that must go, and the new ones, checked against public DNS), verify, then disconnect the builder. If you can read the project, pass dependency names from package.json and variable NAMES from .env.example: never pass values or secrets. Read-only: it changes nothing. Show the steps and ask before running any command; commands prompt for secret values themselves. Call again after the DNS change to confirm, or use plan_dns_setup.
Read only Open world Idempotent
Input schema
{'type': 'object', '$schema': 'https://json-schema.org/draft/2020-12/schema', 'required': ['domain', 'from', 'to'], 'properties': {'to': {'enum': ['vercel', 'netlify', 'github-pages', 'cloudflare-pages'], 'type': 'string', 'description': 'Where it moves to.'}, 'from': {'enum': ['lovable', 'bolt', 'replit', 'base44'], 'type': 'string', 'description': 'The builder the app runs on today.'}, 'domain': {'type': 'string', 'maxLength': 253, 'minLength': 3, 'description': 'The appâ\x80\x99s custom domain, e.g. "acme.dev".'}, 'env_names': {'type': 'array', 'items': {'type': 'string', 'maxLength': 100}, 'maxItems': 200, 'description': 'Environment variable names only (from .env.example or the builderâ\x80\x99s secrets list). Never values.'}, 'to_target': {'type': 'string', 'maxLength': 253, 'description': 'Netlify site (x.netlify.app), GitHub user, or Cloudflare Pages project (x.pages.dev), when the host needs one.'}, 'dependencies': {'type': 'array', 'items': {'type': 'string', 'maxLength': 214}, 'maxItems': 200, 'description': 'Package names from package.json dependencies and devDependencies.'}}}
plan_dns_setup
Plan DNS setup for a domain
The DNS records a domain needs for a website host or AI app builder (Lovable, Bolt, v0, Replit, Base44, Framer, Webflow, Bubble), an inbox provider, and/or the service an app sends email through (SPF, DKIM, DMARC), each checked against live public DNS (in place, missing, or needs change), plus where the domain’s DNS is hosted and records to remove. SPF records from different providers are merged into one. Read-only: it never changes DNS. Use after the user buys a domain, or when their site or email on a custom domain isn’t working.
Read only Open world Idempotent
Input schema
{'type': 'object', '$schema': 'https://json-schema.org/draft/2020-12/schema', 'required': ['domain'], 'properties': {'host': {'enum': ['lovable', 'bolt', 'v0', 'replit', 'base44', 'framer', 'webflow', 'bubble', 'vercel', 'netlify', 'github-pages', 'cloudflare-pages'], 'type': 'string', 'description': 'Where the website is built or hosted (an AI app builder like lovable or bolt, or a host like vercel).'}, 'email': {'enum': ['google-workspace', 'microsoft-365', 'zoho-mail', 'fastmail', 'proton-mail', 'icloud', 'purelymail', 'migadu', 'namecheap-email', 'hostinger-email', 'cloudflare-email', 'no-email'], 'type': 'string', 'description': 'Inbox provider for people, or "no-email" to lock the domain against spoofing.'}, 'domain': {'type': 'string', 'maxLength': 253, 'minLength': 3, 'description': 'The domain, e.g. "acme.dev".'}, 'sender': {'enum': ['resend', 'postmark', 'amazon-ses', 'sendgrid', 'mailgun', 'mailersend'], 'type': 'string', 'description': 'Transactional email service the app sends through (sign-in links, receipts).'}, 'host_target': {'type': 'string', 'maxLength': 253, 'description': 'Netlify site (x.netlify.app), GitHub user, or Cloudflare Pages project (x.pages.dev), when the host needs one.'}}}
plan_launch_steps
Launch steps with commands
The DNS plan for a domain (website host or AI app builder, inbox, app-email service) as ordered, repeat-safe steps with commands the user’s own tools can run: Vercel CLI, Cloudflare’s API with a token from the CLOUDFLARE_API_TOKEN environment variable, Resend’s API with RESEND_API_KEY; a manual list for other DNS hosts. Only records not yet in place get a command, so call it again after each change. Read-only: TLDMath runs nothing. Follow the guardrails in the result: show each change and ask first, never ask for keys in the chat, no deletes without the user naming the record.
Read only Open world Idempotent
Input schema
{'type': 'object', '$schema': 'https://json-schema.org/draft/2020-12/schema', 'required': ['domain'], 'properties': {'host': {'enum': ['lovable', 'bolt', 'v0', 'replit', 'base44', 'framer', 'webflow', 'bubble', 'vercel', 'netlify', 'github-pages', 'cloudflare-pages'], 'type': 'string', 'description': 'Where the website is built or hosted.'}, 'email': {'enum': ['google-workspace', 'microsoft-365', 'zoho-mail', 'fastmail', 'proton-mail', 'icloud', 'purelymail', 'migadu', 'namecheap-email', 'hostinger-email', 'cloudflare-email', 'no-email'], 'type': 'string', 'description': 'Inbox provider, or "no-email".'}, 'domain': {'type': 'string', 'maxLength': 253, 'minLength': 3, 'description': 'The domain, e.g. "acme.dev".'}, 'sender': {'enum': ['resend', 'postmark', 'amazon-ses', 'sendgrid', 'mailgun', 'mailersend'], 'type': 'string', 'description': 'Transactional email service the app sends through.'}, 'host_target': {'type': 'string', 'maxLength': 253, 'description': 'Netlify site (x.netlify.app), GitHub user, or Cloudflare Pages project (x.pages.dev), when the host needs one.'}}}
recommend_names
Recommend names and TLDs for a project
Given a short project description, recommend 3-5 TLDs (best fit first, with reasons) and 10 brandable names, each screened for availability on the top 3 TLDs (or up to 3 the user picks) with the cheapest standard 2-year cost. Optional: a naming style, a word every name must contain (anywhere, at the start or at the end), and a maximum length. Nothing is stored. Run check_domain on a pick for live per-registrar prices.
Read only Open world
Input schema
{'type': 'object', '$schema': 'https://json-schema.org/draft/2020-12/schema', 'required': ['description'], 'properties': {'tlds': {'type': 'array', 'items': {'type': 'string'}, 'maxItems': 3, 'description': 'Up to 3 extensions to check the names on, e.g. ["com","ai"]. Default: the top 3 recommended.'}, 'style': {'enum': ['coined', 'evocative', 'descriptive', 'compound'], 'type': 'string', 'description': 'coined = invented words; evocative = real words that suggest the feeling; descriptive = says what it does; compound = two short words joined.'}, 'max_length': {'type': 'integer', 'maximum': 15, 'minimum': 5, 'description': 'Longest name allowed, in characters.'}, 'description': {'type': 'string', 'maxLength': 600, 'minLength': 10, 'description': 'What the project is, who it is for, and its tone. One to three sentences.'}, 'include_word': {'type': 'string', 'maxLength': 10, 'minLength': 2, 'description': 'A word every name must contain, e.g. "pay".'}, 'word_position': {'enum': ['anywhere', 'start', 'end'], 'type': 'string', 'description': 'Where include_word goes. Default anywhere.'}}}
taken_domain_options
Options for a taken domain
For a domain someone else owns: its registrar and expiry, where it is in the expiry-to-release cycle (active, expiring soon, expired, redemption, pending delete) with an estimated drop window, whether it is parked at a marketplace such as Afternic or Sedo (so possibly for sale), and backorder links. Also points to free email alerts at tldmath.com/watch for when it nears expiry or drops.
Read only Open world Idempotent
Input schema
{'type': 'object', '$schema': 'https://json-schema.org/draft/2020-12/schema', 'required': ['domain'], 'properties': {'domain': {'type': 'string', 'maxLength': 253, 'minLength': 3, 'description': 'The taken domain, e.g. "acme.com".'}}}
tld_price_changes
Domain price changes
Announced registry (wholesale) price increases, upcoming and from the past year, plus changes to registrar standard prices seen in TLDMath’s daily checks. Use for "is .com going up?" or "should I renew early?". Optionally filter by TLD.
Read only Open world Idempotent
Input schema
{'type': 'object', '$schema': 'https://json-schema.org/draft/2020-12/schema', 'properties': {'tld': {'type': 'string', 'pattern': '^\\.?[a-zA-Z]{2,24}$', 'description': 'Limit to one TLD, e.g. "com". Omit for all.'}, 'days': {'type': 'integer', 'maximum': 365, 'minimum': 1, 'description': 'How far back to look for registrar price changes. Default 30.'}}}
Added
compare_app_email
Sept. 29, 2026, 2:48 a.m.
Added
plan_app_move
Sept. 29, 2026, 2:48 a.m.
Added
ownership_card
Sept. 29, 2026, 2:48 a.m.
Added
plan_launch_steps
Sept. 29, 2026, 2:48 a.m.
Changed
plan_dns_setup
Sept. 29, 2026, 2:48 a.m.
Added
compare_email_hosting
Sept. 29, 2026, 2:48 a.m.
Changed
recommend_names
Sept. 29, 2026, 2:48 a.m.
Added
list_supported_tlds
Sept. 27, 2026, 2:40 a.m.
Added
plan_dns_setup
Sept. 27, 2026, 2:40 a.m.
Added
tld_price_changes
Sept. 27, 2026, 2:40 a.m.
Added
taken_domain_options
Sept. 27, 2026, 2:40 a.m.
Added
check_renewals
Sept. 27, 2026, 2:40 a.m.
Added
brand_check
Sept. 27, 2026, 2:40 a.m.
Added
recommend_names
Sept. 27, 2026, 2:40 a.m.
Added
compare_tld_prices
Sept. 27, 2026, 2:40 a.m.
Added
check_name_across_tlds
Sept. 27, 2026, 2:40 a.m.
Added
check_domain
Sept. 27, 2026, 2:40 a.m.