namecheap-mcp
Provides DNS management via AWS Route 53, including reading and modifying DNS record sets and hosted zones, with record-set semantics.
Provides domain availability checking, DNS record management, and nameserver control via the GoDaddy v3 API, with non-atomic edit semantics.
Provides high-level domain and DNS management via the Namecheap API, including registration, renewal, transfer, lock, privacy, email forwarding, and DNS record control.
Click on "Install Server".
Wait a few minutes for the server to deploy. Once ready, it will show a "Started" state.
In the chat, type
@followed by the MCP server name and your instructions, e.g., "@namecheap-mcpcheck if example.com is available"
That's it! The server will respond to your query, and you can continue using it as needed.
Here is a step-by-step guide with screenshots.
namecheap-mcp
An MCP server that gives an AI agent safe, high-level control over your domains and DNS across three providers: Namecheap, GoDaddy (v3) and AWS Route 53.
One tool surface. A domain routes to whichever provider actually holds it; you can override with
provider on any tool. The name is historical — it started as Namecheap-only.
It is built for Claude Code, Claude Desktop, and any other MCP client that speaks stdio.
The three providers do not agree
This is the part worth reading before you use it. The tools hide the wire formats, not the semantics.
Namecheap | GoDaddy v3 | Route 53 | |
DNS read / write | yes | yes | yes |
Update one record | merge, then replace all | delete + create | UPSERT |
Atomic edit | yes | no | yes |
TTL range | 60–60000 | 600–86400 | 0–2147483647 |
Record unit | one row | one row | a set: name+type, many values, one TTL |
Availability | yes | yes (higher account threshold) | no |
List domains | yes | no endpoint | hosted zones only |
Register | yes | not implemented here | no |
Renew / transfer / lock / privacy / email forwarding | yes | no | no |
Extra record types |
|
|
|
Two of those bite:
GoDaddy edits are not atomic. v3 has no record-update endpoint. An edit is a
DELETEthen aPOST. If thePOSTfails, the record is absent, not stale. Every write that does this returnsnonAtomicWarningsaying so — read it before assuming the zone is what you asked for.Route 53's unit is a record set. Three A records at
wwware three rows here and one set there. Deleting one of three by emitting aDELETEwould take all three; this server emits anUPSERTcarrying the survivors. The zone's ownSOAand apexNSare never touched, because Route 53 creates both with the hosted zone and rejects deleting either.
A capability a provider lacks is an answer, not an error: the tool returns a sentence naming the provider, why its API has no such thing, and where you can do it instead. Nothing is changed.
Related MCP server: domain-suite-mcp
Why this isn't a 1:1 mirror of any provider's API
Each provider's API is a flat catalogue with its own sharp edges. Handing those to an agent verbatim is a footgun. This server exposes a smaller set of task-shaped tools designed for an LLM to call correctly:
domains.dns.setHostsis REPLACE-ALL. It overwrites every host record on a domain with exactly the set you submit — omit your MX records and your mail silently breaks. A naive "add a TXT record" tool that forwarded straight tosetHostswould wipe the zone. Somodify_dns_recordshere is a read-modify-write engine: it reads the current zone, applies granularadd/update/deleteoperations in memory, and submits the full resulting set. Agents express intent, never hand-assemble the whole zone. A separate, explicitly-namedreplace_all_dns_recordsexists for the rare deliberate full rewrite, and it refuses to blank a non-empty zone unless you passallowEmptyZone: true.Money-spending actions are gated.
register_domain,renew_domain,reactivate_domainandtransfer_domainare annotated destructive and requireconfirm: true. Called without it, they return a dry-run preview of what would be charged instead of spending.Structured output + tool annotations. Every tool returns both a human summary and a typed
structuredContentpayload, and carriesreadOnlyHint/destructiveHint/idempotentHintannotations so the client can reason about safety.Errors become guidance. Namecheap's cryptic error numbers are mapped to actionable hints — the single most common failure ("Invalid request IP") is turned into a step-by-step whitelist fix.
Provenance on every answer. Each result carries
provider,accountandenvironment. A caller that cannot tell which provider answered cannot check the answer.Types and TTLs are checked against the provider that will receive them. The schema accepts the union of all three, so you are never told "invalid enum" for a type that is valid where your domain lives; the refusal names the provider and lists what it does have. A TTL outside the provider's range is clamped and the clamp is reported — asking for 60 on GoDaddy gets you 600, and you are told.
Prior art: johnsorrentino/mcp-namecheap, which covers 3 read/nameserver tools. This project is an independent, from-scratch implementation with a broader, safety-first tool surface; credit to that project for charting the territory.
Tools
Tool | Kind | What it does |
| read | Availability for up to 50 domains. Picks by capability, not ownership — an unregistered domain is owned by nobody. Namecheap answers a batch in one call; GoDaddy v3 takes one domain per request. Route 53 cannot answer. |
| read | List-price lookup per TLD for register / renew / transfer / reactivate. |
| read | Paged, filterable list of domains in the account. |
| read | One coherent view of a domain: dates, registrar lock, privacy, DNS, nameservers. |
| paid · confirm | Register a domain. Dry-runs unless |
| paid · confirm | Renew a domain for N years. |
| paid · confirm | Reactivate a recently-expired domain (redemption). |
| write (idempotent) | Lock / unlock the registrar transfer lock. |
| read | Read the zone at whichever provider holds the domain. |
| write | Safe add/update/delete of host records via read-modify-write. |
| destructive · confirm | Replace the entire zone with an explicit record set. |
| read | Read the nameservers. On Route 53 this is the hosted zone's apex NS set. GoDaddy v3 cannot read them back, only replace them. |
| write | Set custom nameservers. |
| read | Read email-forwarding rules. |
| write | Upsert (merge) or replace forwarding rules. |
| paid · confirm | Start an inbound transfer; explains the EPP/auth-code requirement. |
| read | Poll a transfer, mapping the numeric StatusID to meaning + phase. |
| read | Account balances and funds available for auto-renew. |
| read | WhoisGuard / domain privacy subscription status. |
| write | Enable (with a forwarding email) or disable WhoisGuard privacy. |
"paid" tools spend real money in production and require confirm: true; without it they return a
preview.
Every tool that names a domain also takes an optional provider (namecheap | godaddy |
route53) to override routing. You need it for a domain that does not exist yet, since routing works
by asking who holds it.
Six tools are Namecheap-only in practice — renew_domain, reactivate_domain, set_domain_lock,
set_domain_privacy, get_email_forwarding / set_email_forwarding, and get_domain_info. Called
against a domain at another provider they refuse and say why. A domain that resolves nowhere still
proceeds: that is the registration and transfer-in case.
Install & configure
Requires Node.js 20+.
Claude Code
claude mcp add namecheap \
--env NAMECHEAP_API_USER=your_user \
--env NAMECHEAP_API_KEY=your_key \
--env NAMECHEAP_CLIENT_IP=your_whitelisted_ip \
--env NAMECHEAP_SANDBOX=true \
-- npx -y namecheap-mcpClaude Desktop
Add to claude_desktop_config.json (macOS:
~/Library/Application Support/Claude/claude_desktop_config.json):
{
"mcpServers": {
"namecheap": {
"command": "npx",
"args": ["-y", "namecheap-mcp"],
"env": {
"NAMECHEAP_API_USER": "your_user",
"NAMECHEAP_API_KEY": "your_key",
"NAMECHEAP_CLIENT_IP": "your_whitelisted_ip",
"NAMECHEAP_SANDBOX": "true"
}
}
}
}Start in sandbox (NAMECHEAP_SANDBOX=true) and switch to production only once you've verified the
behaviour — production register/renew/transfer calls spend real money.
From source
git clone https://github.com/fledgeling-co/namecheap-mcp.git
cd namecheap-mcp
npm install # runs the build via the prepare hook
npm test
node dist/index.js # expects the NAMECHEAP_* env vars to be setConfiguration (environment variables)
Variable | Required | Default | Notes |
| yes | — | API username (Profile → Tools → API Access). |
| yes | — | API key from the same screen. Kept out of all logs. |
| no | = | Account the commands act on; usually identical. |
| no | auto-detect | Public IPv4 the requests come from. Auto-detected via |
| no |
|
|
| no |
| Per-request network timeout (clamped 1000–120000). |
| no | — | One GoDaddy account. A v3 personal access token from |
| no |
| One of |
| no | — | Several accounts, as JSON keyed by label: |
| no | CLI default | Route 53 goes through the |
GoDaddy is off unless one of its variables is set; the startup banner says godaddy=off. Route 53 is
off if the aws binary is absent, and the banner says so rather than letting it look like a routing
miss.
A malformed GODADDY_ACCOUNTS is reported by label, never by contents — the contents are a token,
and the underlying JSON.parse error can quote the input verbatim.
The API key is only ever sent in the request body and is never written to logs or stdout (which is
the MCP protocol channel — all diagnostics go to stderr).
Route 53
Reached by spawning the aws CLI, not the SDK: the CLI already resolves profiles, SSO sessions and
assumed roles, and reimplementing that to save a subprocess is a bad trade. Arguments go through
execFile, never a shell, and the change batch goes in on stdin — a record value is
caller-supplied, and neither a shell string nor a temp file is safe for one.
Reads follow pagination. A zone read short and written back deletes everything past the first page.
scripts/verify-route53.mts reads every hosted zone, diffs each against itself asserting zero
changes, and drops one value from a multi-value set asserting the result is one UPSERT carrying the
rest. Verified across 8 zones, 190 rows, 95 sets.
GoDaddy
v3 only, Authorization: Bearer {PAT}. The sso-key {KEY}:{SECRET} scheme in GoDaddy's own DNS
announcement belongs to v1.
v3 has no list-domains endpoint, so routing probes GET /domain-names/{domain} per configured
account and caches the answer, including the miss. A 404 or 403 means "not this account" and the probe
moves on — GoDaddy's quickstart says a 403 can mean the account is not eligible for the API at all,
and does not say what eligibility is.
Registration is not implemented. v3 has POST /registrations, but using it means modelling
contacts, consent records and agreement acceptance, and every test run spends real money. The
capability is not claimed rather than half-built.
scripts/verify-godaddy.mts <domain> [--write] exercises a real account. Read-only without --write.
Namecheap API prerequisites
Before anything works you must, at Namecheap → Profile → Tools → API Access:
Enable API access on your account.
Whitelist the IP the requests originate from (the machine running this server).
Namecheap also gates production API access behind eligibility — per their API FAQ your account must have at least one of:
20+ domains in your account, or
$50+ in account balance, or
$50+ spent in the last 2 years.
The sandbox (https://www.sandbox.namecheap.com, separate credentials) has none of these
requirements — always develop against it first.
Rate limits
Namecheap's documented ceilings are 50 requests/minute, 700/hour, 8000/day per key. This server
runs a small client-side limiter (~45/min) that delays rather than fails bursty tool calls to keep
you under the per-minute wall. Note that get_domain_pricing issues one API call per TLD.
Error handling
Namecheap returns numeric error codes; this server maps the common ones to actionable guidance, including:
1011150— Invalid request IP → the exact whitelist steps (this is the #1 first-run failure).1011102/ "API key is invalid" → check the key and that the IP is whitelisted / API access is enabled.Order/charge failures (
2528166, insufficient funds) → checkget_account_balance.2020166— renewal not permitted → the domain is likely expired; usereactivate_domain.Extended-attribute, phone-format and DNS-provider errors → what to fix.
Unknown codes are surfaced verbatim so nothing is hidden.
Development
npm run build # tsc -> dist/
npm test # vitest
npm run typecheck # tsc -p tsconfig.test.json (covers src, test and scripts)
npm run typecheck:build # tsc --noEmit (src only, matching the build)153 tests, none needing the network. The pure logic — XML envelope parsing, the DNS read-modify-write
engine, the rrset expand/regroup/diff, error-code mapping, transfer-status mapping, config handling —
runs against fixtures. Providers are driven through injected fetch and an injected aws runner. The
tool layer is driven through the registered handlers against fake providers.
Two scripts need real credentials and sit outside the gate:
npx tsx scripts/verify-route53.mts # every zone, read-only
npx tsx scripts/verify-route53.mts example.com --write # adds and removes one TXT record
npx tsx scripts/verify-godaddy.mts example.com # read-only
npx tsx scripts/verify-godaddy.mts example.com --write # adds and removes one TXT recordSecurity notes
Binds nothing — it's a stdio server, not a network listener.
The Namecheap API key travels only in POST bodies and is never logged. The GoDaddy PAT travels only in an
Authorizationheader, and config errors name the account label, never its contents.Route 53 arguments are passed as an argv array, never a shell string; the change batch goes on stdin.
Money-spending and zone-destroying operations require explicit
confirm/allowEmptyZoneflags.Validates and normalises every value read back from the API before acting on it.
Licence
MIT — see LICENSE.
Credit to johnsorrentino/mcp-namecheap for the original Namecheap MCP server that inspired this one.
Available Tools
20 toolscheck_domain_availabilityCheck domain availabilityARead-only
Check whether one or more domains are available to register. Read-only.
Availability is a question about the registry, not about your account, so this does NOT route by who holds the domain — it asks the first configured provider that can answer, or the one you name in provider. Route 53 cannot answer at all: it hosts DNS and does not sell domains.
Namecheap answers a whole batch in one call and returns four separate premium prices. GoDaddy's v3 check-availability takes one domain per request, so a batch of ten is ten requests against its quota, and its availability endpoint keeps a higher account threshold than the DNS API.
| Name | Required | Description | Default |
|---|---|---|---|
| domains | Yes | 1-50 domains to check. | |
| provider | No | Force a provider instead of routing by domain. Needed when the domain does not exist yet (registration), and useful when a domain is at two providers and you mean a specific one. |
Output Schema
| Name | Required | Description |
|---|---|---|
| results | Yes | |
| provider | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Beyond the readOnlyHint annotation, the description discloses non-obvious routing behavior ('does NOT route by who holds the domain'), provider-specific limitations, and quota implications. This adds significant behavioral context that annotations alone do not convey, with no contradictions.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is longer than average but every sentence contributes unique information: main purpose, routing semantics, provider capabilities, and quota impact. It is front-loaded with the core purpose and avoids redundancy, though slightly dense.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the multi-provider complexity, the description covers purpose, routing logic, provider limitations, batch behavior, and account-threshold nuances. Since an output schema exists, return-value details are appropriately omitted, making the description complete for this tool.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the schema already documents both parameters well. The description adds contextual color about provider behavior (e.g., batch vs. single-request) but does not materially enhance the meaning of the domains or provider parameters beyond what the schema states.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description opens with a specific verb and resource: 'Check whether one or more domains are available to register,' clearly distinguishing this from sibling tools like get_domain_pricing or list_domains. It also scopes the operation to availability, which is a distinct registry-level query.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides explicit when-to-use and when-not-to-use guidance: it explains that availability is registry-level rather than account-level, states that Route 53 cannot answer, and contrasts Namecheap's batch capability with GoDaddy's per-request quota cost. This effectively routes the agent toward the correct provider choice.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_account_balanceGet account balanceARead-only
Get the Namecheap account's funds: available balance (spendable now), account balance, and the funds required for upcoming auto-renewals within 90 days. Check this before register/renew/transfer — an empty balance is the usual cause of 'order creation failed'. Read-only.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
Output Schema
| Name | Required | Description |
|---|---|---|
| account | Yes | |
| currency | No | |
| provider | Yes | |
| environment | No | |
| earnedAmount | No | |
| accountBalance | No | |
| availableBalance | No | |
| withdrawableAmount | No | |
| fundsRequiredForAutoRenew | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already mark readOnlyHint and openWorldHint, and the description reinforces 'Read-only' while adding context about the 90-day auto-renewal window and the distinction between available and account balance. It does not disclose auth requirements, but the tool is simple and the annotations cover the safety profile, so this is more than adequate.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is exactly two sentences: the first front-loads the primary purpose with concrete data fields, the second gives a practical usage tip. There is no wasted wording or unnecessary repetition.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a parameterless read-only tool with an output schema, the description fully covers what it does, when to use it, and its read-only nature. The output schema handles return-value details, so no further explanation is needed.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The tool has zero parameters and schema coverage is trivially 100%. The description explains what the result contains (available balance, account balance, auto-renewal funds), which is relevant even though parameter semantics are not needed. Baseline for 0 params is 4.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool retrieves Namecheap account funds, listing specific components (available balance, account balance, 90-day auto-renewal fund requirement). It distinguishes itself from sibling tools that operate on domains or DNS records, making its unique purpose obvious.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description explicitly advises to check this tool before register/renew/transfer, linking to a common failure mode ('order creation failed'). This provides clear when-to-use guidance; no alternatives are needed since no sibling tool offers account balance data.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_dns_recordsGet DNS recordsARead-only
List every DNS record for a domain. The provider is chosen by which one holds the domain — Namecheap, GoDaddy or Route 53 — unless you pass provider. domain is the registrable domain (example.com or example.co.uk); sub-domains appear in each record's name. Read-only.
On Route 53 a record SET with several values comes back as several rows sharing one id; they share a TTL and are written back together.
| Name | Required | Description | Default |
|---|---|---|---|
| domain | Yes | Registrable domain, e.g. example.com | |
| provider | No | Force a provider instead of routing by domain. Needed when the domain does not exist yet (registration), and useful when a domain is at two providers and you mean a specific one. |
Output Schema
| Name | Required | Description |
|---|---|---|
| domain | Yes | |
| account | Yes | |
| records | Yes | |
| provider | Yes | |
| environment | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint and openWorldHint, and the description repeats 'Read-only' but adds non-obvious behavior: provider selection logic, domain registrable-form handling, and the Route 53 record-set grouping with shared IDs and TTLs. This goes beyond the annotation safety profile and reveals important invocation nuances.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is two tight paragraphs: a front-loaded purpose sentence, then provider/domain semantics, then a brief provider-specific edge case. Every sentence earns its place; no fluff or repetition of schema data.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a tool with only 2 parameters and an output schema, the description covers all invocation-relevant details: domain format, provider routing/force, and a meaningful Route 53 grouping behavior. It's sufficiently complete for an agent to select and call it correctly without additional research.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so parameters are already documented, but the description enriches both: domain is further explained as the registrable domain with sub-domains placed in each record's `name`, and provider auto-routing vs. forcing is clarified. This adds practical meaning beyond the schema's property descriptions.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Description opens with 'List every DNS record for a domain' — a specific verb and resource that distinguishes this tool from siblings like modify_dns_records or get_nameservers. It also clarifies that it covers all providers and both the domain and provider selection logic, making the tool's scope unambiguous.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description explains provider auto-routing and when to pass `provider` ('unless you pass `provider`'), and the schema adds that provider is needed when the domain doesn't exist yet. It doesn't explicitly compare to alternatives (e.g., 'use modify_dns_records for edits'), but the intended use case—listing existing DNS records—is clear enough for correct selection.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_domain_infoGet domain detailsARead-only
Get a coherent single view of one domain: registration + expiry dates, registrar-lock status, WhoisGuard/privacy state, and DNS provider / nameservers. Combines domains.getInfo with the registrar-lock lookup so you see everything in one call. Read-only.
| Name | Required | Description | Default |
|---|---|---|---|
| domain | Yes | The domain to inspect, e.g. example.com |
Output Schema
| Name | Required | Description |
|---|---|---|
| domain | Yes | |
| locked | No | |
| status | No | |
| account | Yes | |
| provider | Yes | |
| isPremium | Yes | |
| createdDate | No | |
| dnsProvider | No | |
| environment | No | |
| expiredDate | No | |
| nameservers | Yes | |
| privacyEnabled | No | |
| usesNamecheapDns | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description adds value beyond the readOnlyHint annotation by revealing that the tool internally combines two distinct API calls ('domains.getInfo with the registrar-lock lookup') and explicitly states 'Read-only'. It also clarifies the scope of the data returned. No contradictions with annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is concise and well-structured: the first sentence states the purpose and lists the data fields, the second clarifies the internal composition and read-only nature. Every sentence earns its place with no fluff.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool's simplicity (1 parameter, read-only, output schema present), the description is largely complete. It covers what is included, how the tool works (combining two lookups), and its safety. The presence of an output schema obviates the need to detail return values. A slight gap: it doesn't mention potential edge cases (e.g., domain not found), but this is minor.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The schema already describes the single parameter 'domain' with a clear example. The description does not add additional parameter semantics beyond echoing 'one domain', which is redundant. Since schema coverage is 100%, a baseline of 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool's purpose: 'Get a coherent single view of one domain' and lists the specific data points included (registration, expiry, registrar-lock, privacy, DNS). It distinguishes itself from sibling tools by emphasizing that it combines multiple lookups into one call, making it the go-to for a comprehensive domain overview.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies when to use this tool—when you need a consolidated view of a domain without making multiple calls. It does not explicitly name alternative tools or state when not to use it, but the context is clear from the 'one call' phrasing and the enumeration of combined data.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_domain_pricingGet domain pricingARead-only
Get Namecheap's list price for one or more TLDs and an action (register / renew / transfer / reactivate). Distils users.getPricing: returns the per-year price tiers for each requested TLD. Note these are standard (non-premium) TLD prices — for premium domains use check_domain_availability, which returns premium pricing. Read-only.
| Name | Required | Description | Default |
|---|---|---|---|
| tlds | Yes | TLDs to price (each is one API call, so mind the rate limit). | |
| action | No | Which price to look up. | register |
| promotionCode | No | Optional Namecheap promotion/coupon code. |
Output Schema
| Name | Required | Description |
|---|---|---|
| action | Yes | |
| account | Yes | |
| pricing | Yes | |
| provider | Yes | |
| environment | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, and the description adds the important behavioral caveat that these are standard non-premium prices. It also mentions the distilling behavior and per-year price tiers, going beyond the safety annotations to describe data behavior.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two sentences with front-loaded purpose, a behavior note, and a helpful alternative pointer. No wasted words.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With full schema coverage and an output schema present, the description provides the necessary usage context, caveats, and sibling differentiation. It is complete for a simple read-only pricing tool.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100% with described parameters, so baseline is 3. The description adds minimal parameter meaning beyond restating action options; it does clarify that the result is per-year tiers, but this is more output than input semantics.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool 'Get Namecheap's list price for one or more TLDs and an action' with explicit resource and scope. It distinguishes itself from the sibling tool by explicitly directing premium-domain pricing to check_domain_availability.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Provides explicit guidance with 'for premium domains use check_domain_availability, which returns premium pricing' as an alternative. Also indicates the tool distils users.getPricing, suggesting it is a focused subset for standard prices.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_domain_privacyList domain privacy (WhoisGuard) subscriptionsARead-only
List the WhoisGuard/domain-privacy subscriptions on the account, including which domain each is allotted to, its status (ENABLED/DISABLED) and expiry. Use set_domain_privacy to toggle a domain's privacy. Read-only.
| Name | Required | Description | Default |
|---|---|---|---|
| page | No | ||
| listType | No | Filter subscriptions. | |
| pageSize | No |
Output Schema
| Name | Required | Description |
|---|---|---|
| account | Yes | |
| provider | Yes | |
| environment | No | |
| subscriptions | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, and the description reinforces it with 'Read-only.' It adds value beyond annotations by specifying what fields are returned (domain, status, expiry) and the account scope. It does not mention pagination behavior, but the schema covers page/pageSize, so this is acceptable.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two sentences, no filler, front-loaded with the action and resource. Every clause adds useful information: what is listed, included fields, and where to go for toggling. This is exemplary conciseness.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The tool is a straightforward list with output schema and annotations. The description covers the primary purpose, scope, and returned fields, making it sufficient for an agent to invoke correctly. The only gap is parameter semantics, which are already penalized in that dimension; overall the description is complete for the tool's complexity.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is only 33% (only listType has a short description), and the tool description does not explain any parameters. The meaning of 'listType' with enum values (ALL, ALLOTTED, FREE, DISCARD) is only vaguely 'Filter subscriptions,' and page/pageSize are left to inference. Since the coverage is low, the description should compensate but does not.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific verb ('List') and resource ('WhoisGuard/domain-privacy subscriptions'), scopes it to the account, and details included fields (domain, status, expiry). It also explicitly distinguishes from the sibling tool set_domain_privacy by pointing to it for toggling, making the purpose unambiguous.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description says 'Use set_domain_privacy to toggle a domain's privacy,' which explicitly names the alternative for a different action. This prevents misuse and clarifies when to use this tool versus its sibling. No other alternatives are needed given the input schema and sibling list.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_email_forwardingGet email forwardingARead-only
List the email-forwarding rules for a domain (mailbox -> destination). Email forwarding only works while the domain uses Namecheap DNS. Read-only.
| Name | Required | Description | Default |
|---|---|---|---|
| domain | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
| domain | Yes | |
| account | Yes | |
| forwards | Yes | |
| provider | Yes | |
| environment | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already provide readOnlyHint=true and openWorldHint=true, so the read-only nature is known. The description adds a non-obvious behavioral constraint: forwarding only works with Namecheap DNS. This is beyond the annotations and provides useful context. No contradiction exists.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is two short sentences that cover purpose, scope, a usage condition, and the read-only nature. Every sentence contributes meaning with no fluff or repetition. It is ideally sized for the tool's simplicity.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The tool is simple (one parameter), has an output schema, and read-only annotations. The description includes the essential purpose and an important prerequisite (Namecheap DNS). It omits edge-case behavior (e.g., what happens if the domain is not on Namecheap DNS), but given the tool's minimal complexity, the description is nearly complete.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The schema has 0% description coverage, and the description does not explain the 'domain' parameter beyond restating 'for a domain' in the first sentence. With a single parameter named 'domain', the description adds no format, example, or constraint beyond what the parameter name and minLength imply. This fails to compensate for the lack of schema descriptions.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description uses a specific verb ('List') and clearly identifies the resource ('email-forwarding rules for a domain') with the mapping format (mailbox -> destination). It distinguishes itself from sibling tools like set_email_forwarding and get_dns_records by naming a distinct resource.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides a clear usage condition: email forwarding only works while the domain uses Namecheap DNS. It does not explicitly name an alternative tool, but the read-only hint and 'List' verb imply that this is for reading, while set_email_forwarding is the write counterpart. The single constraint gives context, but no direct alternative or exclusion.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_nameserversGet domain nameserversARead-only
Show the nameservers for a domain. On Route 53 this is the hosted zone's apex NS set, which is what you give the registrar. GoDaddy's v3 API cannot read nameservers back, only replace them. Read-only.
| Name | Required | Description | Default |
|---|---|---|---|
| domain | Yes | ||
| provider | No | Force a provider instead of routing by domain. Needed when the domain does not exist yet (registration), and useful when a domain is at two providers and you mean a specific one. |
Output Schema
| Name | Required | Description |
|---|---|---|
| domain | Yes | |
| account | Yes | |
| provider | Yes | |
| environment | No | |
| nameservers | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true and openWorldHint=true. The description adds valuable behavioral detail: Route 53's apex NS set is what you give the registrar, and GoDaddy's v3 API cannot read nameservers back. No contradiction with annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two sentences that are front-loaded with purpose and then add a useful qualifier. No wordiness or redundancy; every clause contributes.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the presence of an output schema and strong annotations, the description covers purpose, provider-specific behavior, and read-only confirmation. It implicitly differentiates from set_nameservers. A minor gap is the lack of explicit guidance on when not to use it, but that is largely covered by the tool's read-only nature.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description for 'provider' is thorough ('Force a provider instead of routing by domain...'). The 'domain' parameter is self-explanatory. With 50% schema coverage, the description does not compensate further, but it doesn't need to because the existing schema coverage is sufficient for the simple parameters.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description uses specific verb 'Show' plus resource 'nameservers for a domain', clearly distinguishing from sibling set_nameservers. It also adds provider-specific nuance (Route 53 apex NS set, GoDaddy limitation) that further clarifies the exact scope.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Provides clear context for when to use the tool (reading nameservers for registrar) and notes a key limitation (GoDaddy cannot read back). It does not explicitly name alternatives or exclusions, but the read-only nature is evident from both description and annotations.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_transfer_statusGet domain transfer statusARead-only
Look up the status of an in-progress or completed inbound transfer by its TransferID (returned from transfer_domain). Maps Namecheap's numeric StatusID to a plain-English meaning and a coarse phase (pending / action_required / completed / canceled). Read-only.
| Name | Required | Description | Default |
|---|---|---|---|
| transferId | Yes | The TransferID from transfer_domain. |
Output Schema
| Name | Required | Description |
|---|---|---|
| phase | Yes | |
| account | Yes | |
| provider | Yes | |
| statusId | No | |
| rawStatus | No | |
| transferId | Yes | |
| description | Yes | |
| environment | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description adds context beyond the readOnlyHint annotation by explaining that it maps numeric StatusID to a plain-English meaning and a coarse phase, and it explicitly says 'Read-only.' This provides useful behavioral information about the output transformation without contradicting annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two concise sentences, front-loaded with the action and key resource, no redundant information.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the simple one-parameter tool and the presence of an output schema, the description adequately covers usage. It doesn't need to detail return values or error handling, and it's complete for its complexity.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The input schema already fully describes transferId as 'The TransferID from transfer_domain,' and the description repeats this context without adding new details. With 100% schema coverage, baseline 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description uses the specific verb 'look up,' names the resource ('status of an in-progress or completed inbound transfer'), and specifies the input (TransferID). It clearly distinguishes itself from sibling tools like transfer_domain and get_domain_info by focusing solely on transfer status.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It states the TransferID is returned from transfer_domain, implying the tool is used after initiating a transfer. It doesn't explicitly list alternatives, but the context makes the use case clear. This merits a 4 rather than a 5 because no when-not-to-use or alternative is stated.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_domainsList domains in accountARead-only
List the domains in your Namecheap account with paging and filtering. Each entry summarises expiry, lock, auto-renew, WhoisGuard and whether the domain uses Namecheap DNS. Use get_domain_info for a full single-domain view. Read-only.
| Name | Required | Description | Default |
|---|---|---|---|
| page | No | 1-based page number. | |
| sortBy | No | Sort order. | |
| listType | No | Filter by lifecycle state. | ALL |
| pageSize | No | Results per page (10-100). | |
| searchTerm | No | Substring to filter domain names by. |
Output Schema
| Name | Required | Description |
|---|---|---|
| paging | Yes | |
| account | Yes | |
| domains | Yes | |
| provider | Yes | |
| environment | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, so the 'Read-only' mention is redundant. However, the description adds useful behavioral context by summarizing what each entry includes (expiry, lock, auto-renew, WhoisGuard, DNS usage), which goes beyond the schema and annotations. No contradictions.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is concise (3 sentences), front-loaded with the main action, and every sentence adds value: the first states the purpose, the second details list content, and the third provides an alternative and safety note. No wasted words.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With an output schema present, the description need not explain return values. It covers the tool's purpose, output summary, alternative tool, and read-only nature, making it fully context-rich for an agent to select and invoke correctly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100% for all 5 parameters, including defaults and enums. The description mentions paging and filtering generically but does not add semantic meaning beyond what the schema already provides. Baseline 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool lists domains in the Namecheap account with paging and filtering, and explicitly differentiates from get_domain_info by noting it provides a full single-domain view. The verb 'List' and resource 'domains' are specific, and the mention of paging/filtering further clarifies scope.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description explicitly directs users to use get_domain_info for a full single-domain view, providing a clear alternative. It also implies appropriate use cases: listing domains with summaries and applying paging/filtering, which distinguishes it from sibling tools.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
modify_dns_recordsAdd / update / delete DNS records (safe)ADestructive
Change DNS records WITHOUT wiping the zone. This is the tool you almost always want. It reads the current records, applies your granular add/update/delete operations in memory, and writes the full merged set back — untouched records are preserved. Operations: add (name+type+address); update (matches name+type, optionally matchAddress to disambiguate; only provided fields change); delete (matches name+type, optionally matchAddress). If an operation would delete the LAST record, pass allowEmptyZone=true. Returns a before/after diff.
Read nonAtomicWarning on the result. On GoDaddy an edit is a delete followed by a create, because its v3 API has no record update: if the create fails the record is ABSENT, not stale. Namecheap and Route 53 apply an edit as one operation.
| Name | Required | Description | Default |
|---|---|---|---|
| domain | Yes | Registrable domain, e.g. example.com | |
| provider | No | Force a provider instead of routing by domain. Needed when the domain does not exist yet (registration), and useful when a domain is at two providers and you mean a specific one. | |
| operations | Yes | Ordered list of changes to apply to the current zone. | |
| allowEmptyZone | No | Safety switch: required true if the result would leave the domain with zero records. |
Output Schema
| Name | Required | Description |
|---|---|---|
| domain | Yes | |
| failed | Yes | |
| account | Yes | |
| applied | Yes | |
| changes | Yes | |
| success | Yes | |
| provider | Yes | |
| environment | No | |
| nonAtomicWarning | No | |
| recordCountAfter | Yes | |
| recordCountBefore | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already mark destructiveHint and non-readOnly, but the description goes far beyond: it explains the read-merge-write workflow, untouched-record preservation, the allowEmptyZone safety switch, and the GoDaddy non-atomic delete-then-create caveat (if create fails the record is ABSENT, not stale). This is critical, actionable behavior not derivable from annotations alone, and it contradicts nothing.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is long but dense. It front-loads the most important rule ('WITHOUT wiping the zone'), then systematically covers operation grammar, safety, return value, and provider-specific behavior. Every sentence carries operational weight; there is no filler. Slight length is justified by complexity.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the nested operations array, multiple providers, and mutation risk, the description covers all essential context: how operations are matched, the allowEmptyZone guard, the diff return, and the non-atomic provider caveat. The output schema exists, so not detailing return fields is fine. This is a fully self-sufficient description for safe invocation.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, but the description adds meaning beyond field descriptions: update matches name+type optionally matchAddress and only touches provided fields; delete similarly; address is required for add, optional for update; allowEmptyZone is a safety switch. This is exactly the semantic depth needed for correct operation construction.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description opens with 'Change DNS records WITHOUT wiping the zone', a specific verb-resource pair that instantly distinguishes it from replace_all_dns_records. The scope (granular add/update/delete vs. wholesale replacement) is explicit, making the tool's purpose unambiguous among sibling tools.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It explicitly positions itself as 'the tool you almost always want' and contrasts with the destructive alternative by saying 'WITHOUT wiping the zone'. It also gives concrete guidance for using the provider parameter (domain not existing yet, or domain at two providers). However, it doesn't name the alternative tool directly, only implies it.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
reactivate_domainReactivate an expired domain (PAID)ADestructive
Reactivate a domain that has EXPIRED but is still within Namecheap's redemption/grace window. THIS SPENDS MONEY (reactivation can cost more than a normal renewal) and needs confirm=true. For domains that have not yet expired, use renew_domain.
| Name | Required | Description | Default |
|---|---|---|---|
| domain | Yes | ||
| confirm | No | Must be true to place the paid reactivation. | |
| promotionCode | No |
Output Schema
| Name | Required | Description |
|---|---|---|
| domain | No | |
| account | Yes | |
| orderId | No | |
| provider | Yes | |
| environment | No | |
| reactivated | Yes | |
| chargedAmount | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description adds crucial behavioral context beyond the annotations: it warns that the operation spends money and can cost more than a normal renewal, and explicitly states confirm=true is required. This aligns with readOnlyHint=false and destructiveHint=true, with no contradiction.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is two sentences, front-loaded with the core purpose, then the critical cost warning and alternative. Every sentence adds essential information without redundancy.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a paid, potentially expensive operation, the description covers the eligibility window, cost implication, required confirmation, and provides a clear alternative. The output schema exists, so return values need not be described. This is comprehensive for the tool's complexity.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is low (33%). The description explains the confirm parameter's role (must be true) and implicitly that domain is the target, but provides no additional detail for domain format or promotionCode. It partially compensates for the low coverage but leaves promotionCode's purpose unclear.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool's function: reactivating expired domains within Namecheap's redemption/grace window. It uses a specific verb and resource, and explicitly distinguishes from renew_domain for non-expired domains.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description explicitly says when to use this tool (expired domains within the redemption/grace window) and when to use an alternative ('For domains that have not yet expired, use renew_domain.'). This provides clear usage guidance with an exclusion.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
register_domainRegister a new domain (PAID)ADestructive
Register (buy) a new domain. THIS SPENDS MONEY from the Namecheap account balance and is not reversible. You MUST pass confirm=true to proceed; without it the tool returns a dry-run describing the charge. Requires a full registrant contact (used for all contact roles unless overridden). ccTLDs frequently need extended attributes (e.g. .us needs RegistrantNexus + RegistrantPurpose; .eu, .ca, .co.uk, .de, .asia have their own) — pass them via extendedAttributes as raw Namecheap field names. Check availability/pricing first with check_domain_availability and confirm funds with get_account_balance.
| Name | Required | Description | Default |
|---|---|---|---|
| years | No | Registration length in years (1-10). | |
| domain | Yes | The domain to register, e.g. example.com | |
| confirm | No | Must be true to actually place the paid order. | |
| contact | Yes | Registrant contact, applied to all roles unless overridden. | |
| contacts | No | Optional per-role contact overrides. | |
| nameservers | No | Custom nameservers; omit for Namecheap BasicDNS. | |
| enablePrivacy | No | Add free WhoisGuard/domain privacy where supported. | |
| promotionCode | No | ||
| extendedAttributes | No | ccTLD-specific extended attributes as raw Namecheap field names -> values. |
Output Schema
| Name | Required | Description |
|---|---|---|
| domain | No | |
| account | Yes | |
| orderId | No | |
| provider | Yes | |
| registered | Yes | |
| environment | No | |
| chargedAmount | No | |
| transactionId | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Adds significant context beyond the annotations (destructiveHint=true, readOnlyHint=false) by disclosing that the action 'SPENDS MONEY from the Namecheap account balance and is not reversible,' describes the dry-run behavior, and explains that the registrant contact applies to all roles unless overridden. It also warns about ccTLD extended attributes, all of which are critical operational details.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is appropriately sized for a complex, high-risk operation. Each sentence earns its place: the money warning is front-loaded, the confirm flag behavior is critical, contact roles and ccTLD extras are necessary, and the pointer to related tools prevents misuse. No filler or redundancy.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool's complexity (9 parameters, nested objects, paid irreversible action), the description covers all essential aspects: prerequisites, the confirm gate, contact requirements, special ccTLD handling, and links to sibling tools for availability/balance checks. The output schema exists, so return values need no description. It is fully adequate for an agent to safely invoke this tool.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 89%, so the baseline is 3, but the description adds crucial meaning for key parameters: confirm (controls dry-run vs actual charge), contact (applied to all roles unless overridden), and extendedAttributes (raw Namecheap field names). It does not explain nameservers or enablePrivacy, but those are adequately covered by the schema and simpler in nature.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description opens with 'Register (buy) a new domain,' a specific verb and resource that immediately distinguishes it from siblings like renew_domain and transfer_domain. It clearly states the action is purchasing, which is unique among the listed tools.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Provides explicit when-to-use guidance by instructing to 'Check availability/pricing first with check_domain_availability and confirm funds with get_account_balance,' naming the appropriate alternatives for pre-checks. It also specifies that confirm=true is required to actually place the order, otherwise it returns a dry-run, setting expectations for operational use.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
renew_domainRenew a domain (PAID)ADestructive
Renew an existing, non-expired domain, extending its expiry. THIS SPENDS MONEY and needs confirm=true. If the domain has already EXPIRED, use reactivate_domain instead.
| Name | Required | Description | Default |
|---|---|---|---|
| years | No | ||
| domain | Yes | ||
| confirm | No | Must be true to place the paid renewal. | |
| promotionCode | No |
Output Schema
| Name | Required | Description |
|---|---|---|
| domain | No | |
| account | Yes | |
| orderId | No | |
| renewed | Yes | |
| provider | Yes | |
| environment | No | |
| expiredDate | No | |
| chargedAmount | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Beyond the annotations (destructiveHint=true, readOnly=false), the description adds critical behavioral context: it spends money and requires confirm=true. It also reinforces the non-expired prerequisite, which is essential for safe invocation.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two concise sentences deliver purpose, prerequisites, a financial warning, and an alternative tool. Every sentence earns its place with no fluff.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a paid mutation tool, the description covers the essential context: when to use, when not to use, the money-spending nature, and the confirmation requirement. Combined with the output schema and sibling context, this is fully sufficient for correct tool selection and invocation.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is low (25%), so the description should compensate. It meaningfully explains the confirm parameter (must be true to place the paid renewal), and implies domain is the target. However, years and promotionCode are not explained beyond schema constraints, leaving some gaps.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool renews an existing, non-expired domain to extend its expiry. It uses a specific verb and resource, and explicitly distinguishes from reactivate_domain, making the purpose unambiguous.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It explicitly provides a conditional usage guideline: use this tool for non-expired domains, and directs users to reactivate_domain for expired domains. This directly addresses the key alternative and clarifies when not to use the tool.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
replace_all_dns_recordsReplace the ENTIRE DNS zone (destructive)ADestructive
DANGER: overwrite the domain's complete record set with exactly the records you provide. Every existing record NOT in your list is permanently deleted, MX mail records included. Prefer modify_dns_records for everyday edits. Requires confirm=true; an empty record set additionally requires allowEmptyZone=true. Consider calling get_dns_records first to capture the current zone for rollback.
On Route 53 the zone's own SOA and apex NS are left alone regardless — Route 53 creates both with the hosted zone and rejects deleting either.
| Name | Required | Description | Default |
|---|---|---|---|
| domain | Yes | ||
| confirm | No | Must be true to perform the destructive replace. | |
| records | Yes | The COMPLETE desired record set. Anything omitted is deleted. | |
| provider | No | Force a provider instead of routing by domain. Needed when the domain does not exist yet (registration), and useful when a domain is at two providers and you mean a specific one. | |
| allowEmptyZone | No | Required true to submit an empty record set. |
Output Schema
| Name | Required | Description |
|---|---|---|
| domain | Yes | |
| failed | Yes | |
| account | Yes | |
| applied | Yes | |
| success | Yes | |
| provider | Yes | |
| environment | No | |
| recordCount | Yes | |
| nonAtomicWarning | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Beyond the destructiveHint annotation, the description discloses permanent deletion of omitted records including MX, requires confirm=true and allowEmptyZone=true for empty zones, and explains Route 53's SOA/apex NS behavior. This adds rich behavioral context beyond what annotations provide.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two tight paragraphs with a front-loaded 'DANGER' warning. Every sentence contributes critical safety, usage, or provider-specific information with no fluff.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Covers purpose, destructive semantics, prerequisites, rollback advice, alternatives, and provider-specific exception. With an output schema present, return values need not be explained.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is high (80%), so baseline is 3. The description adds value by clarifying the records array is the complete desired set ('Anything omitted is deleted') and explicitly tying confirm/allowEmptyZone to the destructive behavior, plus the provider parameter for force-routing.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description uses specific verb 'replace' with resource 'entire DNS zone', explicitly stating every record not in the list is permanently deleted. It clearly distinguishes from sibling modify_dns_records by naming it as the alternative for everyday edits.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicitly directs users to prefer modify_dns_records for everyday edits, and recommends calling get_dns_records first for rollback. This provides clear when-to-use vs. alternative guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
set_domain_lockLock or unlock a domainAIdempotent
Set the registrar lock on a domain. Locking protects against unauthorised transfers; you must UNLOCK before transferring a domain away. Idempotent — setting the state it is already in is a no-op.
| Name | Required | Description | Default |
|---|---|---|---|
| domain | Yes | ||
| locked | Yes | true = LOCK (protect), false = UNLOCK (allow transfer out). |
Output Schema
| Name | Required | Description |
|---|---|---|
| domain | Yes | |
| locked | Yes | |
| account | Yes | |
| success | Yes | |
| provider | Yes | |
| environment | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Beyond the annotation idempotentHint, the description explains the behavior of idempotency in plain terms ('setting the state it is already in is a no-op') and adds the rationale for locking (transfer protection). It does not cover edge cases like permissions, but the annotation set already provides the safety profile.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is exactly two sentences, front-loaded with the core action and immediately followed by the most important operational caveat. Every sentence contributes value with no redundancy or fluff.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a two-parameter tool with an output schema and detailed annotations, the description covers purpose, the transfer-use case, and idempotency. Nothing necessary for correct selection or invocation is missing; the context is complete.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The schema already describes the 'locked' parameter (true = LOCK, false = UNLOCK), so the tool description reinforces this with the transfer context. For the 'domain' parameter, schema coverage is absent, but the description implies it's the domain being locked without adding format details. Overall, the description adds meaning by connecting parameter values to real-world transfer behavior.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description opens with 'Set the registrar lock on a domain', a specific verb and resource. It clearly distinguishes this tool from domain siblings (e.g., get_domain_info, transfer_domain) by focusing on the registrar lock and adding the dual unlock/transfer guidance.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It explicitly states that locking protects against unauthorised transfers and gives a concrete rule: 'you must UNLOCK before transferring a domain away.' This tells the agent when the tool is necessary. It does not explicitly name alternatives, but no sibling offers the same lock functionality, so the guidance is sufficient.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
set_domain_privacyEnable or disable domain privacy (WhoisGuard)AIdempotent
Turn WhoisGuard/domain privacy on or off for a domain. The tool resolves the domain's WhoisGuard subscription ID automatically. Enabling requires a forwardedToEmail (where WHOIS contact mail is relayed). Idempotent.
| Name | Required | Description | Default |
|---|---|---|---|
| domain | Yes | ||
| enabled | Yes | true = enable privacy, false = disable. | |
| forwardedToEmail | No | Required when enabling: relay address for WHOIS contact mail. |
Output Schema
| Name | Required | Description |
|---|---|---|
| domain | Yes | |
| account | Yes | |
| enabled | Yes | |
| success | Yes | |
| provider | Yes | |
| environment | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare idempotentHint=true and readOnlyHint=false, so the description's 'Idempotent' adds no new information. It does add value by explaining automatic WhoisGuard subscription resolution and the role of forwardedToEmail for WHOIS contact mail relay. Yet it does not disclose potential costs or external side effects despite openWorldHint=true, so transparency is moderate.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is concise at four short sentences, with the core purpose front-loaded in the first sentence. The final sentence 'Idempotent' is redundant with the idempotentHint annotation, but it is harmless. Overall, every sentence earns its place except that minor redundancy.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With an output schema present, return value details are covered. The description covers the toggle behavior, automatic subscription resolution, and conditional email requirement, which is sufficient for correct invocation. Minor gaps: it does not mention how to check current privacy state or what happens if no WhoisGuard subscription exists.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 67%, and the description adds important meaning to forwardedToEmail by clarifying it is 'Required when enabling,' which is not evident from the schema's optional flag. It also reinforces enabled's true/false semantics. It does not add domain format guidance, but the conditional requirement is a meaningful enhancement over the schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool's function: 'Turn WhoisGuard/domain privacy on or off for a domain.' The verb 'Turn...on or off' plus resource 'domain privacy' is specific and unambiguous, and the setter action clearly distinguishes it from the sibling get_domain_privacy tool.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides a key usage condition: 'Enabling requires a forwardedToEmail,' which tells the agent when a parameter is mandatory. It also notes automatic subscription ID resolution, giving context. However, it does not explicitly mention alternatives like get_domain_privacy for checking current status, so it stops short of full when-to-use guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
set_email_forwardingSet email forwarding (safe merge or replace-all)ADestructiveIdempotent
Configure email forwarding. Like DNS setHosts, Namecheap's setEmailForwarding is REPLACE-ALL, so this tool defaults to a safe merge: it reads existing rules, upserts the ones you provide (matched by mailbox), removes any you list in remove, and writes the full set back — untouched rules are preserved. Use mode=replace_all (with confirm=true) to overwrite every rule with exactly forwards.
| Name | Required | Description | Default |
|---|---|---|---|
| mode | No | merge | |
| domain | Yes | ||
| remove | No | Mailboxes (local parts) to remove (merge mode only). | |
| confirm | No | Required true for mode=replace_all. | |
| forwards | No | Rules to add or update. |
Output Schema
| Name | Required | Description |
|---|---|---|
| domain | Yes | |
| account | Yes | |
| success | Yes | |
| forwards | Yes | |
| provider | Yes | |
| environment | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description goes well beyond the annotations by explaining the safety mechanism: default is a safe merge that reads existing rules, upserts matching ones, removes listed mailboxes, and preserves untouched rules. It also discloses that replace_all is destructive and requires confirm=true. This adds critical behavioral detail beyond the destructiveness/idempotence hints and is fully consistent with annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is two sentences, front-loaded with the main action, then packing the behavioral details efficiently. Each sentence earns its place: the first establishes purpose and the safe merge default; the second explains the destructive alternative. No wasted words.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool's complexity, the presence of an output schema, and annotations, the description is complete. It covers the default safe behavior, the destructive mode, the confirm requirement, and how existing rules are preserved. The only missing nuance is error handling, but that is not expected at this level.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The description meaningfully explains how the parameters interact: `forwards` are upserted by mailbox, `remove` deletes specific mailboxes, `mode` toggles merge vs. replace_all, and `confirm` is a safety gate. This orchestration is not evident from the individual schema descriptions, significantly enhancing understanding.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description starts with a clear verb+resource: 'Configure email forwarding.' It then explains the merge vs. replace_all behavior, which distinguishes this mutation tool from the read-only sibling `get_email_forwarding`. The reference to 'DNS setHosts' adds context about replace-all semantics without obscuring the core purpose.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description clearly indicates this tool is for modifying email forwarding rules and provides context on when to use merge vs. replace_all. However, it does not explicitly mention alternatives like `get_email_forwarding` for reading or state when not to use the destructive replace_all mode. The context is clear but lacks explicit exclusions.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
set_nameserversSet custom nameserversADestructiveIdempotent
Point a domain at nameservers. On Namecheap, mode=default resets it to Namecheap BasicDNS. IMPORTANT: moving nameservers moves DNS authority, so records held at the old provider stop taking effect. Route 53 cannot do this — a Route 53 zone's nameservers are set wherever the domain is registered.
| Name | Required | Description | Default |
|---|---|---|---|
| mode | Yes | custom = your nameservers; default = the provider's own DNS. | |
| domain | Yes | ||
| provider | No | Force a provider instead of routing by domain. Needed when the domain does not exist yet (registration), and useful when a domain is at two providers and you mean a specific one. | |
| nameservers | No | Required for mode=custom. Two minimum; GoDaddy allows up to 13, Namecheap 12. |
Output Schema
| Name | Required | Description |
|---|---|---|
| mode | Yes | |
| domain | Yes | |
| account | Yes | |
| success | Yes | |
| provider | Yes | |
| environment | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description adds important behavioral context beyond the annotations: moving nameservers transfers DNS authority, so records at the old provider stop taking effect. This aligns with destructiveHint=true and openWorldHint=true, and the warning about consequences is valuable.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is three sentences, front-loaded with the primary purpose, followed by critical provider-specific and consequence information. Every sentence carries meaningful content without repetition or fluff.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool's complexity and the presence of an output schema, the description covers the essential caveats: provider-specific behavior, the consequence of changing DNS authority, and a Route 53 limitation. This is sufficient for an agent to select and invoke the tool correctly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is high (75%), and the description adds semantics for the 'mode' parameter by explaining that 'default' resets to Namecheap BasicDNS. This goes beyond the schema's generic description. The 'domain' parameter is self-evident and needs no extra explanation.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description uses the specific verb 'Point a domain at nameservers,' clearly identifying the resource and action. It distinguishes from sibling tools like get_nameservers and modify_dns_records by focusing on the nameserver assignment operation.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides clear usage context, including a critical exclusion (Route 53 cannot do this) and provider-specific behavior (mode=default resets to Namecheap BasicDNS). It does not explicitly compare to all alternatives, but the guidance is sufficient for making an informed choice.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
transfer_domainTransfer a domain in to Namecheap (PAID)ADestructive
Initiate an inbound domain transfer to Namecheap. THIS SPENDS MONEY (a transfer usually includes one year of renewal) and needs confirm=true. Before transferring you must, at the losing registrar: unlock the domain and obtain its EPP/auth code (pass it as eppCode; required for most gTLDs like .com/.net/.org). The domain must generally be >60 days old and not within 60 days of a prior transfer. Track progress with get_transfer_status.
| Name | Required | Description | Default |
|---|---|---|---|
| years | No | Years to add (usually 1). | |
| domain | Yes | ||
| confirm | No | Must be true to place the paid transfer order. | |
| eppCode | No | EPP/auth code from the current registrar (required for most gTLDs). | |
| enablePrivacy | No | Add free WhoisGuard/domain privacy where supported. | |
| promotionCode | No |
Output Schema
| Name | Required | Description |
|---|---|---|
| domain | No | |
| account | Yes | |
| orderId | No | |
| provider | Yes | |
| statusId | No | |
| transferId | No | |
| environment | No | |
| chargedAmount | No | |
| transferStarted | Yes | |
| statusDescription | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Beyond annotations (destructiveHint=true), the description discloses the financial impact ('THIS SPENDS MONEY'), the need for confirm=true, and the inclusion of a year of renewal. It also reveals the 60-day age and transfer restrictions, which are important behavioral constraints not captured in annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is three sentences, front-loaded with the core action, then the financial warning, then prerequisites and tracking. Every sentence contributes essential information without redundancy. It leverages uppercase for the financial warning, making it hard to miss.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool's complexity (6 parameters, financial side effects, external prerequisites), the description covers the action, cost, confirm flag, EPP code requirement, domain age restrictions, and where to track progress. An output schema exists but is not shown; the description adequately prepares the agent to invoke the tool correctly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The description explains the critical eppCode parameter (passed from the losing registrar) and its requirement for most gTLDs, adding value beyond the schema's one-line description. It also clarifies confirm required for the paid order, which the schema already lists but the description reinforces. With 67% schema coverage, the description compensates partially, though promotionCode and enablePrivacy remain implicit.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the action ('Initiate an inbound domain transfer to Namecheap') and distinguishes it from sibling tools like register_domain, renew_domain, and get_transfer_status. The verb 'transfer' and resource 'domain' are specific, and the qualifier 'inbound' adds scope.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Provides explicit prerequisites (unlock domain, obtain EPP code) and points to get_transfer_status for tracking progress. It doesn't explicitly name alternative tools, but the context makes clear when to use this tool. The warning about spending money and needing confirm=true is practical guidance.
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. Dates show when Glama detected each change.
20 tool updates
v0.2.0- First observed
check_domain_availability - First observed
get_account_balance - First observed
get_dns_records - First observed
get_domain_info - First observed
get_domain_pricing - First observed
get_domain_privacy - First observed
get_email_forwarding - First observed
get_nameservers - First observed
get_transfer_status - First observed
list_domains - First observed
modify_dns_records - First observed
reactivate_domain - First observed
register_domain - First observed
renew_domain - First observed
replace_all_dns_records - First observed
set_domain_lock - First observed
set_domain_privacy - First observed
set_email_forwarding - First observed
set_nameservers - First observed
transfer_domain
TDQS
Most tools target clearly distinct actions, but check_domain_availability and get_domain_pricing both deal with pricing/availability and could be confused without reading descriptions carefully. All other tools have clear boundaries, including the DNS trio (get, modify, replace_all) where descriptions emphasize the safe vs dangerous distinction.
All tool names follow a consistent verb_noun pattern in snake_case (e.g., get_domain_info, set_nameservers, renew_domain). No mixing of styles or vague verbs, making the set predictable and scannable.
At 20 tools, the count is on the heavy side but each tool serves a distinct domain-management function (lifecycle, DNS, nameservers, email forwarding, privacy, billing, transfers). The breadth justifies the count, though it slightly exceeds the typical well-scoped range.
The toolset covers the full domain lifecycle: availability, pricing, registration, renewal, reactivation, transfer, DNS management, nameservers, email forwarding, privacy, and billing. Minor gaps exist (e.g., no direct tool to update domain contact info or toggle auto-renew), but these are edge cases agents can work around.
Maintenance
Resources
Unclaimed servers have limited discoverability.
Looking for Admin?
If you are the server author, to access and configure the admin panel.
Related MCP Connectors
MCP server for AI agents to plan, verify, and deploy Cloudflare-native apps.
Custom domains for SaaS and AI agents: search, register, connect DNS, and issue HTTPS over MCP.
Hosted MCP server connecting claude.ai, ChatGPT and other AI apps to your own computer
Capability registry for the agentic economy. Semantic search over verified MCP server listings.
Related MCP Servers
- AlicenseNot gradedqualityFmaintenanceA simple MCP server that enables AI assistants to perform domain research including availability checking, WHOIS lookups, DNS record retrieval, and finding expired domains without requiring API keys.62MIT
- AlicenseBqualityCmaintenancedomain-suite-mcp is an MCP server that gives AI agents full autonomous control over the domain lifecycle. From checking availability and registering domains to managing DNS records, SSL certificates, and email authentication across Porkbun, Namecheap, GoDaddy, and Cloudflare through a unified set of 21 tools.212517MIT
- AlicenseAqualityDmaintenanceComprehensive MCP server for the Namecheap API, enabling domain management, DNS record control, nameserver settings, and domain registration from any MCP client.1045MIT
- AlicenseNot gradedqualityDmaintenanceAn MCP server for managing DNS records and domains via the Namecheap API. Works with Claude.ai and other MCP clients.17MIT
Latest Blog Posts
- Who's Calling? MCP Hosts Are an Identity Blind Spot (And the Spec Knows It)By Om-Shree-0709 on .mcpAgent IdentityOAuth 2.1
- Your AI Chatbot Just Exposed Your CEO's Salary to an InternBy Om-Shree-0709 on .Agent IdentityMCP SecurityOAuth Delegation
- Why MCP Servers Need Execution Sandboxing (And Why Your Current Stack Isn't Enough)By Om-Shree-0709 on .Agentic AiPrompt InjectionWebAssembly
MCP directory API
We provide all the information about MCP servers via our MCP API.
curl -X GET 'https://glama.ai/api/mcp/v1/servers/fledgeling-co/namecheap-mcp'
If you have feedback or need assistance with the MCP directory API, please join our Discord server