Namecheap MCP — Tools Reference

Namecheap MCP connects your AI assistant (such as Claude) to your Namecheap account. Through it, the assistant can check and register domains, manage domain contacts, and read or edit DNS records on your behalf — you just ask in plain language, and the assistant calls the right tools.

Getting started

You need a Namecheap account. Namecheap MCP is available at https://mcp.namecheap.com/mcp.

How you connect depends on your AI assistant:

  • Claude (web and desktop) — open Settings, choose Connectors, add a custom connector, and point it at https://mcp.namecheap.com/mcp. Anthropic's Claude is the client we have verified this to work with.
  • Other MCP clients — add a remote MCP server and point it at https://mcp.namecheap.com/mcp. Other clients may work, but we haven't verified them yet.

When you connect, you'll be asked to sign in to Namecheap and grant the assistant access to your account. Which tools the assistant can use depends on the access you approve — if a tool is rejected because access wasn't granted, reconnect and approve the access it needs.

Tools at a glance

Namecheap registrations complete synchronously, so there is no background-operation tool to poll:

Tool What it does
contacts_save Save contact details and get a contact ID
contacts_get Read a saved contact by its ID
domains_list List your domains, or look up one domain
domains_check_availability Check if domains are available to register
domain_register Register (buy) a domain — spends money
domain_set_contacts Assign contacts to a domain you own
domain_set_nameservers Switch a domain to basic or custom nameservers
dns_records_get Read DNS records for a domain
dns_records_save Add DNS records or update their TTL
dns_records_delete Delete DNS records

Contacts: inline or by reference

Wherever a contact is required (domain_register, domain_set_contacts), each role accepts either:

  • inline contact details — the full contact object (firstName, lastName, email, …). It is saved to your Namecheap account automatically; you do not have to call contacts_save first.
  • a reference{ "contactId": "…" } pointing at a contact you saved earlier with contacts_save.

A contactId is an opaque string (1–32 characters). Do not parse it or assume a format — just pass it back where a contact is accepted.

Common workflows

Several tools are designed to be used together: the output of one becomes the input of the next.

Register (buy) a domain

  1. domains_check_availability — check the name(s) you want. Only proceed when result is available. Each available name includes the USD price to register it (standard and premium alike), or priceUnavailableReason when it can't be determined.
  2. domain_register (preview) — call with confirm unset to get status: confirmation_required and the price that will be charged. Nothing is billed. Show the price to the user. Contacts can be passed inline here, or as { contactId } if you saved them with contacts_save.
  3. domain_register (confirm) — after the user agrees, call again with confirm: true. This bills the account's default payment method and is irreversible. It returns the outcome directly (no polling): usually status: completed with the amount charged, or status: pending while the registry finishes.
  4. domains_list — if the result was pending, call domains_list for the domain shortly to confirm it is registered.
domains_check_availability --> domain_register --> domain_register --> (domains_list if pending)
   (available? + price)         (confirm unset:     (confirm=true:       confirm final state
                                 price, no charge)   completed/pending)

Update the contacts on a domain you own

  1. domain_set_contacts — assign contacts to the domain, inline or by { contactId }. Completes immediately. verificationStatus is always null for Namecheap. Some TLD registries require extended attributes — pass them via tldAttributes.

Change a domain's nameservers

  1. domains_list — find the domain and see its current nameservers ({ provider, hosts }; populated when fetching a single domain).
  2. domain_set_nameservers — switch it to Namecheap's default nameservers with provider: "basic" (no hosts), or point it at your own with provider: "custom" and a list of 2–12 hosts. It returns the resulting { provider, hosts }. Re-applying the state a domain is already in returns a validation error rather than a no-op — treat that as expected, not a failure to retry.

Manage DNS records

  1. domains_list — find the domain you want to manage (or pass its name directly if you know it).
  2. dns_records_get — read the current records for the domain.
  3. dns_records_save or dns_records_delete — add, update, or remove records. Records returned by dns_records_get have the same shape the save and delete tools accept (delete just omits ttl), so the assistant can read, adjust, and write back. Matching is case-insensitive except for TXT records, which are case-sensitive.

Review your portfolio

  • domains_list — page through all your domains with sorting, or fetch a single domain by name. See the tool below for which fields Namecheap reports.
  • contacts_get — look up the details behind any contact ID you see on a domain.

Tool reference

Every tool returns its result as structured JSON, and every tool completes immediately — Namecheap has no long-running background operations.

Contacts

Contacts are the people or organizations attached to a domain registration (registrant, admin, tech, billing). A contact is referenced everywhere by its contact ID — an opaque string.

contacts_save — Save Contact

Saves contact details and returns the generated contact ID. Validation of some fields (such as stateProvince and postalCode) depends on the selected country.

Idempotent. Saving details identical to a contact you saved before reuses that existing contact ID instead of creating a duplicate.

Parameter Required Type & constraints
firstName Yes String, 1–64 chars. May include hyphens and apostrophes.
lastName Yes String, 1–64 chars. May include hyphens and apostrophes.
email Yes Valid email address, max 254 chars.
address1 Yes Address line 1. String, 1–128 chars.
city Yes String, 1–64 chars.
country Yes Two-letter country code (ISO 3166-1 alpha-2), e.g. US.
phone Yes International format +CountryCode.Number, e.g. +1.2025551234. Max 32 chars.
organization No Organization/company name. 1–128 chars.
address2 No Address line 2. 1–128 chars.
stateProvince No State/province name, 1–64 chars. May be required depending on the country.
postalCode No 1–16 chars. May be required depending on the country.
phoneExt No Phone extension, 1–16 chars.
fax No Fax number, same +CountryCode.Number format, max 32 chars.
taxNumber No Tax number, 1–32 chars.

Returns

{ "contactId": "..." }

contactId (opaque, 1–32 chars) is what you pass to domain_register, domain_set_contacts, and contacts_get.

When Namecheap's address validation proposes a corrected address, the result may additionally include an addressSuggestion:

{
  "contactId": "...",
  "addressSuggestion": {
    "status": "corrected",
    "suggestedAddress": {
      "address1": "...", "address2": "...", "city": "...",
      "stateProvince": "...", "country": "...", "postalCode": "..."
    }
  }
}

Each field of suggestedAddress is present only when Namecheap proposes a value for it. Treat it as a suggestion to show the user, not an automatic change — the contact is still saved with the details you submitted.

contacts_get — Get Contact

Reads the details of a saved contact by its contact ID. (There is no list-all-contacts tool — contact IDs come from contacts_save.)

Parameter Required Type & constraints
contactId Yes Opaque contact ID, 1–32 chars.

Returns{ contact } with:

Field Type
firstName, lastName, email, address1, city, country, phone, postalCode String
organization, address2, stateProvince, phoneExt, fax, faxExt, taxNumber String or null

Domains

domains_list — List Domains

Retrieves a paginated list of your domains. Pass domain to fetch a single domain by name instead (pagination and ordering are then ignored, and the result includes a note saying so if they were supplied).

Parameter Required Type & constraints
domain No Fully qualified domain name (ASCII/A-label) to fetch a single domain.
take No Items per page, 1–100. Default 10.
skip No Items to skip, 0 or more. Default 0.
orderBy No One sort key: name, unicodeName, registrationDate, or expirationDate; prefix with - for descending (e.g. -expirationDate).

Returns{ items, total } where each item describes a domain:

Field Meaning
name / unicodeName Domain name. Namecheap reports unicodeName as a mirror of name (no distinct Unicode form).
isPremium Whether the domain is a premium name.
autoRenew Whether auto-renew is enabled — see the note below on when this is reported.
registrationDate / expirationDate Registration and expiration timestamps.
lifecycleStatus creating, registered, grace1, or redemption.
verificationStatus Not reported by Namecheap — always null.
eppStatuses Not reported by Namecheap — empty.
suspensions Not reported by Namecheap — empty.
privacyProtection { level: "public" | "high", contactForm: boolean }.
nameservers { provider: "basic" | "custom", hosts: [...] }. See the note below.
contacts Not reported by Namecheap — comes back empty. Use contacts_get if you already hold a contact ID from contacts_save.
contactDetails Present only when fetching a single domain via domain: the full contact details assigned to the domain, per role (registrant, admin, tech, billing). See the note below.

Namecheap-specific reporting:

  • contacts, eppStatuses, suspensions, and verificationStatus are not reported — they come back empty or null.
  • unicodeName always mirrors name.
  • nameservers is populated only when fetching a single domain via domain. In the multi-item list it reports the basic default with no hosts.
  • contactDetails is populated only when fetching a single domain via domain. It carries the actual registrant/admin/tech/billing contact details assigned to that domain, so you can read them without holding a contact ID. The id-based contacts field still comes back empty even in the single-domain case, and contactDetails is not included in the multi-item list.
  • autoRenew is a real true/falseonly in the multi-item list. Fetching a single domain via domain returns autoRenew: null, because Namecheap's single-domain lookup carries no auto-renew field — reported as null rather than a misleading false.

domains_check_availability — Check Domain Availability

Checks whether one or more domain names are available to register. Uses the single-domain endpoint for one name and the bulk endpoint for multiple.

Parameter Required Type & constraints
domains Yes 1–20 fully qualified domain names (ASCII/A-label).

Returns{ results }, one entry per requested name:

Field Meaning
domain The checked name.
result available, taken, invalidDomainName, tldNotSupported, or unexpectedError.
premiumPricing For premium names: list of { operation, price, currency } where operation is register, transfer, renew, or restore. Empty for regular names.
price For available names (standard and premium): the USD price to register the domain for one year — { amount, currency: "USD", regularPrice?, discountPercent?, icannFee?, isPremium }. amount is the payable price; regularPrice/discountPercent appear only when a discount applies. icannFee is the ICANN fee (USD) already included in amount, returned separately so the breakdown can be explained; it appears only when the TLD carries a fee.
priceUnavailableReason Present instead of price when the price could not be determined for an available name. The check itself still succeeds.

Only available names are priced; taken/invalid results carry neither price nor priceUnavailableReason.

domain_register — Register Domain

Registers (buys) a domain. This bills your account's default payment method and is irreversible. Recommended sequence: domains_check_availability -> domain_register.

Two-step pre-charge confirmation. Call first with confirm unset (or false): the tool re-fetches the USD price fresh, returns status: "confirmation_required" with that price, and does not bill or register anything. Show the price to the user; only after they agree, call again with confirm: true to submit.

Synchronous. Unlike some registrars, Namecheap registration completes as part of the call — there is no operation to poll. A confirmed call returns its outcome directly (see the status table below).

Parameter Required Type & constraints
domain Yes Fully qualified domain name to register, e.g. example.com.
years Yes Registration period in years, 1–10.
autoRenew Yes Boolean. When true, the domain renews automatically at expiration using the account's default payment method.
privacy.level Yes high hides the registrant's contact details from public WHOIS; public publishes them.
privacy.userConsent Yes Boolean. Must confirm you agree to the selected privacy setting.
contacts.registrant Yes Inline contact details or { contactId }.
contacts.admin Yes Inline contact details or { contactId }.
contacts.tech Yes Inline contact details or { contactId }.
contacts.billing Yes Inline contact details or { contactId }.
tldAttributes No Extended attribute values keyed by name, required only for certain TLDs (e.g. registrant nexus or legal-type fields). Provide them for TLDs that need them; omit otherwise.
confirm No Boolean pre-charge gate. Omit/false to preview the price without charging; true to submit the billed registration.

Returns — before confirmation (nothing charged):

{
  "domain": "example.com",
  "years": 1,
  "status": "confirmation_required",
  "price": { "amount": 9.08, "currency": "USD", "icannFee": 0.2, "isPremium": false },
  "note": "No charge has been made. Show this price to the user; ... call again with confirm=true."
}

Returns — after confirm: true (registered and charged):

{
  "domain": "example.com",
  "years": 1,
  "status": "completed",
  "charged": { "amount": 9.08 },
  "operation": { "kind": "order", "id": 123456 },
  "price": { "amount": 9.08, "currency": "USD", "icannFee": 0.2, "isPremium": false },
  "note": "..."
}

status can be:

Status Meaning
confirmation_required Preview only — nothing charged. Call again with confirm: true.
cancelled The purchase was not confirmed, so nothing was submitted.
completed Registered and charged. Includes charged: { amount } and an operation order receipt.
pending Submitted; the registry is still finishing. Call domains_list shortly to confirm the final state.
failed The registration did not complete. If a network/timeout error interrupted the request, the note says the outcome is unknown and asks you to verify before retrying — the charge may or may not have gone through, so do not blindly resubmit.

operation here is { kind: "order", id } — an order receipt, not something to poll. The price is the amount that will be charged, re-fetched at confirmation time for the requested years; if it cannot be determined, priceUnavailableReason appears instead and — on a confirm: true call — the registration still proceeds. When the TLD carries an ICANN fee, price.amount already includes it and price.icannFee states the fee amount so it can be explained.

domain_set_contacts — Set Domain Contacts

Changes the contacts assigned to a domain you own. Completes immediately.

Parameter Required Type & constraints
domainName Yes Fully qualified domain name (ASCII/A-label).
registrant Yes Inline contact details or { contactId }.
admin No Inline contact details, { contactId }, or null.
tech No Inline contact details, { contactId }, or null.
billing No Inline contact details, { contactId }, or null.
tldAttributes No Extended attribute values keyed by name, for TLDs that require them.

Returns

{ "verificationStatus": null }

Namecheap does not report an RAA verification state, so verificationStatus is always null.

domain_set_nameservers — Set Domain Nameservers

Changes a domain's registrar-level nameservers. Completes immediately. The change is reflected by domains_list (single-domain fetch) afterwards.

Parameter Required Type & constraints
domainName Yes Fully qualified domain name (ASCII/A-label).
provider Yes basic (Namecheap's default nameservers) or custom (your own hosts).
hosts Conditional Required when provider is custom: 2–12 nameserver hostnames (each a valid FQDN, 4–255 chars). Must be omitted when provider is basic.

Returns

{ "provider": "custom", "hosts": ["ns1.example.com", "ns2.example.com"] }

Re-applying the state a domain is already in (e.g. setting basic when it is already basic) returns a validation error rather than a no-op success — treat that as an expected result, not a failure to retry.

DNS records

dns_records_get — Get DNS Records

Retrieves a paginated list of DNS resource records for a domain.

Parameter Required Type & constraints
domainName Yes The domain whose records to fetch.
take No Items per page, 1–500. Default 100.
skip No Items to skip, 0 or more. Default 0.
orderBy No Up to 8 sort keys: type, -type, name, -name.

Returns{ items, total }. Each item is a record as described in Record shapes, plus an optional group field indicating where the record comes from (custom — created by you, product — managed by a product, personalNs — personal nameservers).

Namecheap-specific: a DNS record whose value cannot be represented in the typed contract (an exotic CAA/TLSA/HTTPS/SVCB value) is omitted from items. total still counts every record in the zone, including the omitted ones — so total can be larger than the number of records you can page through when a zone contains such records. This is expected, not a paging bug.

dns_records_save — Save DNS Records

Adds custom DNS records or updates the TTL of existing ones. Records are matched case-insensitively, except TXT records (case-sensitive).

Parameter Required Type & constraints
domainName Yes The domain whose records to update.
records Yes 1–500 records — see Record shapes. Each may include an optional ttl.
force No Boolean. Skips the conflict-resolution check and forces the zone update.

Returns{ "saved": }, the count of submitted records. A successful response means all records were accepted; if any record fails, the whole call returns an error instead.

dns_records_delete — Delete DNS Records

Deletes custom DNS records. Deletions cannot be undone. Records are matched case-insensitively, except TXT records (case-sensitive).

Parameter Required Type & constraints
domainName Yes The domain whose records to delete.
records Yes 1–500 records identifying existing records — same shapes as save, but without ttl.

Returns{ "deleted": }, the count of submitted records. If any record cannot be matched, the whole call fails and nothing is deleted.

Record shapes

Every record has:

  • type — one of the 13 supported types below.
  • name — the record name excluding the domain: use @ for the domain itself (apex) and * for a wildcard.
  • ttl (save only, optional) — cache time in seconds, 60–3600.

Type-specific fields:

Type Fields
A address — IPv4 address.
AAAA address — IPv6 address.
CNAME cname — canonical domain name (max 253 chars).
ALIAS aliasName — canonical domain name; CNAME-like behavior for the apex, where CNAME isn't allowed.
NS nameserver — nameserver name.
PTR pointer — domain name for the given IP address.
TXT value — text value (matched case-sensitively).
MX exchange — mail server; preference — priority (0–65535, lower preferred).
CAA flag0 or 128 (critical bit); tagissue, issuewild, or iodef; value — CA identifier with optional parameters.
SRV service (e.g. _sip); protocol (e.g. _tcp); priority and weight (0–65535); port (1–65535); target — server domain name.
TLSA usage, selector, matching (each 0–255); port* or _<1–65535>; protocol (e.g. _tcp); associationData — certificate hash or data.
HTTPS svcPriority (0–65535; 0 = AliasMode); targetName — FQDN or .; optional port (* or _<1–65535>), scheme (must be _https when port is set), svcParams.
SVCB svcPriority (0–65535; 0 = AliasMode); targetName — FQDN or .; optional port, scheme (e.g. _tcp), svcParams.

Exotic values. The wire encoding Namecheap uses for CAA/TLSA/HTTPS/SVCB values is normalized into the fields above where possible. Values that don't fit the typed shape are readable in the zone but are omitted from dns_records_get's items (see that tool). Standard records (A, AAAA, CNAME, MX, TXT, NS, etc.) are unaffected.

Errors

When a call fails, the tool returns an error with a code and a human-readable detail explaining what went wrong — for example invalid input (a malformed domain name or contact ID), a domain or contact that doesn't exist, or a conflict with the current state. If a tool is rejected because the assistant wasn't granted access to it, reconnect Namecheap MCP and approve the access it asks for.

Updated
Viewed
235 times

Need help? We're always here for you.

notmyip