Domain Operator Kit
Use this MCP server to quote, buy, renew, recover, inspect, and manage DNS for domains on an operator's seller node.
quote— get signed availability and one-year registration or owner-signed renewal pricing.register— register an exact quoted domain for one year to a supplied registrant after x402 payment and terms acceptance; irreversible.renew— renew an owned domain for one year with a new quote and separate payment.status— recover/check a pending order after a lost response; avoid duplicate purchases.info— read domain expiry, nameservers, and required owner actions.dnsGet— read owned DNS records and current revision.dnsSet— replace selected DNS record sets while preserving other names/types, requiring current revision.
Connects an owned domain to a Vercel project, using Vercel's current DNS recommendations, adding the apex domain to the pinned project, and preserving existing TXT verification values and unrelated records. Supports optional replacement of existing A records and reports whether Vercel configuration or DNS verification is still pending.
Click on "Deploy 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., "@Domain Operator Kitquote and register example.com for a year, then attach it to my Vercel project"
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.
🔄 Synced from a monorepo — but with a live history.
domain-kitmirrors the canonical AI-Factory monorepo. History here is append-only (no force-push). Pull requests are welcome — merged PRs are imported back into the monorepo and re-synced here, so your contribution becomes canonical. 💬 Issues · Pull requests both welcome.
An agent can build and deploy an application. This kit lets it take the next step: obtain a signed price for a domain, register it to its real owner, manage DNS and connect it to a Vercel project.
Independent operators run their own seller nodes, use their own registrar accounts and set a fixed markup per registration or renewal. Agents use a shared capability contract and a budgeted MCP client.
Pre-live release. The local tests and Openprovider and Porkbun Sandbox pilots pass: registration, DNS, renewal, lost-response recovery and MCP reads. Production domain purchases, payment settlement and Vercel attachment remain unverified. The default demo buys nothing. Verification record →
What the buyer gets
One exact domain, registered for one year to the supplied registrant. The quote shows the supplier cost, fixed markup and final amount before payment. For example, a $10 supplier cost plus a $2 markup gives a 12 USDC order; these are illustrative amounts, not a registrar tariff.
DNS management and domain information are included. Renewal is a separate purchase at a newly quoted price. Registrar autorenew is disabled. Availability is not a reservation, and registrant email verification may still require action by the owner.
The built-in registrar scope is .com, .net and .org, ordinary ASCII names, one year. Premium names, IDNs, incoming transfers and expired-domain restoration are outside this release.
Related MCP server: ClawDaddy MCP Server
One product, three roles
You are | What you use |
A domain operator or reseller | Your registrar account, receiving wallet, refund reserve and fixed markup; a seller node with durable orders |
An independent supplier | The HTTP supplier contract, implemented in your own language and infrastructure |
An agent or app developer | Signed |
flowchart LR
Agent["AI agent / MCP client"] -->|Discover| Hub["AIMarket Hub"]
Hub -->|Public quotes only| Seller["Domain operator"]
Agent -->|Private order + x402 payment| Seller
Seller -->|Register and reconcile| Provider["Openprovider / Porkbun / HTTP supplier"]
Agent -->|Owner-signed DNS| Seller
Agent -->|Buyer-side connector| Vercel["Your Vercel project"]The Hub handles discovery. Orders, registrant contacts, payment authorizations and DNS operations go directly to the seller. This implementation charges no Hub commission. The Vercel token stays with the buyer.
Try it locally
Use Node.js 22.13+; local verification used 22.22.1. From domain-kit/ in the monorepo, or from the root of a satellite checkout:
npm ci --ignore-scripts
npm run check
npm test
npm run demoThe demo runs a signed HTTP lifecycle: quote → simulated registration → DNS → renewal. No registrar account, wallet funding or external service is needed. Local HTTP tests require permission to listen on localhost.
For the simplest external API test, use the Porkbun Sandbox quickstart: automatic disposable credentials, virtual credit and a resumable end-to-end pilot. The Porkbun adapter is sandbox-only until a production pilot passes.
For the Openprovider Sandbox API integration test, follow the opt-in npm run sandbox:pilot instructions. The script retains its state and reuses the same orders on repeat runs.
For a persistent demo server:
cp .env.example .env
node --env-file=.env src/server.jsIn another terminal:
DOMAIN_ALLOW_DEMO=1 node bin/domain-rails.mjs check http://127.0.0.1:9495This checks the public quote protocol and signature; it does not certify the seller. The server persists encrypted documents and keys in data/. Do not discard that directory between deployments.
A public node: demo until your keys are in
DOMAIN_MODE=auto is for a node you publish before you sell. Without keys it is a public demo: availability is real (the registries' own RDAP for .com, .net, .org), quotes are signed and marked demo with illustrative prices, reads answer, and only register and renew are refused with 403 demo_mode. When every live setting is in (production registrar keys or an HTTP supplier, PAY_TO, CDP_KEY_FILE, DOMAIN_REFUND_KEY_FILE, HTTPS DOMAIN_PUBLIC_URL and DOMAIN_TERMS_URL, DOMAIN_UPSTREAM_COST_CONFIRMED=1), the next start sells live. Until then /healthz lists the setting names still missing (live_missing), never their values. Porkbun stays sandbox-only. modelmarket.dev runs such a node as its domain showcase: domains.modelmarket.dev, with the kit's landing at the root and the example desk — a storefront that searches names, shows the signed price and walks through the order. Both are static pages in docs/landing/ that call the node on their own origin; serve them next to yours (node docs/landing/dev.mjs previews them).
Agent capabilities
Capability | Purpose |
| Availability, exact registration price or private renewal quote |
| Register the quoted name for one year |
| Renew an owned domain using a new quote |
| Recover a pending order and retrieve its signed receipt |
| Expiry, nameservers and required owner actions |
| DNS records and revision |
| Replace selected record sets while preserving other names and types |
| Private transfer code, where supported; excluded from the MCP tool list |
Machine-readable contract · Authentication and payment protocol
Connect a buyer
node bin/domain-rails.mjs init-owner /private/path/owner.pemAdapt examples/mcp.json for a client that supports stdio MCP. Pin the seller's public key through a trusted catalog, configure the owner's signing key and contact file, then set a per-purchase and daily budget. Purchases default to disabled.
DOMAIN_REGISTRANT_FILE injects the contact locally. Wallet and owner keys come from private files, never model arguments. Payment authorizations and budget reservations are persisted before sending. A retry reuses its original authorization; an unknown outcome keeps its budget reserved.
Keep the original client_order_id and order body across retries. A pending response is a reason to check status, not to create a second purchase. The user or client policy must authorize purchases and acceptance of seller terms.
Connect the domain to Vercel
Configure VERCEL_TOKEN_FILE, VERCEL_PROJECT_ID and optionally VERCEL_TEAM_ID in the buyer's environment. The MCP client exposes vercelConnect:
{"domain":"your-owned-domain.com"}The connector uses Vercel's current DNS recommendations, adds the apex domain to the pinned project and preserves existing TXT verification values and unrelated records. Replacing other A records requires explicit replace_existing:true. Conflicting AAAA/CNAME records must first be removed through the DNS provider's console.
waiting_for_verification_or_dns means propagation or verification is still pending. configured reflects the Vercel API, not an independent HTTPS reachability test. The seller itself requires a persistent Node process and disk; it is not a Vercel Function.
Bring your supplier
Openprovider and Porkbun Sandbox have built-in adapters. Other suppliers implement the common HTTP endpoints for quotes, contact preparation, submission, reconciliation and management. Operators retain their own accounts, pricing and payment destination.
Supplier contract and runnable simulator →
Supporting the contract makes integration possible; it does not make an untested supplier production-ready. Our pilot plan starts with Openprovider Sandbox and our own agent, then a controlled domain for our own Vercel project, before involving outside customers.
Built for interrupted operations
Durable order identity. Changed input cannot silently reuse an existing order. A wallet signature binds payment to the order and owner key.
No blind mutation retries. Lost payment and registrar responses enter reconciliation using the original evidence.
Refunds for proven non-delivery. Refunds target the original payer. Ambiguous outcomes remain pending; refunds require a funded reserve and functioning infrastructure.
Private management. Owner requests and seller responses use Ed25519; document bodies use AES-256-GCM. Database row identifiers, including domain names, are not encrypted.
Explicit operational limits. One seller process per SQLite database. Openprovider renewal ambiguity may require documented operator evidence. Porkbun replays use a durable idempotency key only within a 23-hour window; older unknown outcomes require review. DNS revision checking is not an atomic lock against outside console edits.
No automatic expiry notifications, renewal scheduler, owner-key recovery or general DNS deletion API is included. Operators must provide those support procedures before serving customers. See OPERATIONS.md.
Repository status
Canonical source is domain-kit/ in the AIMarket monorepo. The GitHub satellite is alexar76/domain-operator-kit. From the monorepo root the same commands are npm test --prefix domain-kit (and npm run check --prefix domain-kit). A Node 22/24 CI workflow, Docker/Compose definitions and local branding assets are included. The workflow is prepared; this README does not claim it has run on GitHub. The local test badge links to a dated verification record.
This package remains private:true to prevent accidental npm publication. No hosted demo or published package is implied by the quickstart.
MIT licensed. Base payment reconciliation was adapted from the AIMarket eSIM operator kit; see NOTICE.md.
Available Tools
7 toolsdnsGetBRead-onlyInspect
Read owned DNS records and their revision before an update.
| Name | Required | Description | Default |
|---|---|---|---|
| domain | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, destructiveHint=false and openWorldHint=true, so the safety profile is covered. The description adds the 'owned' scope and the fact that a revision is returned, but says nothing about rate limits, permissions beyond ownership, or result shape beyond the revision hint.
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?
A single front-loaded sentence with no filler. Every clause (read, owned, records, revision, before update) carries meaning.
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 one-parameter read tool with annotations covering the safety profile and no output schema, the description supplies the key context: what is read, whose records, and that a revision is returned. The only gap is the total absence of parameter documentation.
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 0% and the single 'domain' parameter is never mentioned in the description. The name is fairly self-explanatory, but the description adds no format, ownership, or scoping detail to compensate for the undocumented parameter.
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?
Names a specific verb+resource ('Read owned DNS records') plus an additional artifact ('their revision'), which scopes the operation clearly. It does not name the sibling dnsSet explicitly, so differentiation from the write counterpart is implied rather than stated.
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?
'before an update' implies this is a prerequisite read preceding dnsSet, giving implicit usage context. However, it never names the alternative tool or states when a read is not needed, so the routing guidance is inferred rather than explicit.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
dnsSetADestructiveInspect
Replace only named DNS record sets, preserving other names and types. Requires the current DNS revision.
| Name | Required | Description | Default |
|---|---|---|---|
| domain | Yes | ||
| records | Yes | ||
| revision | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare destructiveHint=true and readOnlyHint=false, so the description's job is to add beyond that — and it does: it scopes the destruction to named record sets while preserving others, and discloses the optimistic-concurrency precondition ('requires the current DNS revision'). It does not say what happens on a stale revision or whether changes are recoverable.
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, with the preservation guarantee and the revision precondition front-loaded where an agent will see them before invoking.
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 destructive, open-world mutation with no output schema and fully undocumented parameters, the description covers the key precondition but omits failure behavior on a stale revision, return shape, and record-level constraints. Adequate but with clear gaps against 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 0% with 3 required parameters, so the description must compensate. It clarifies the meaning of 'revision' (the current DNS revision, a concurrency token) and implies 'records' are named record sets, but says nothing about 'domain' or the record object's required fields, TTL bounds, or the 50-item cap.
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?
States a specific verb (replace/set) and resource (DNS record sets) plus the exact scope: 'only named DNS record sets, preserving other names and types.' This distinguishes it from the read-oriented dnsGet sibling by action, though it never names the sibling explicitly.
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 'only named ... preserving other' phrasing implies when the tool is appropriate (partial updates versus a full zone replacement), but it gives no explicit when-to-use/when-not guidance or names an alternative in the sibling list. Usage is inferable rather than stated.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
infoBRead-onlyInspect
Read an owned domain, expiry, nameservers and verification requirements.
| Name | Required | Description | Default |
|---|---|---|---|
| domain | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, destructiveHint=false, and openWorldHint=true. The description adds useful context by implying an ownership prerequisite ("owned domain") and listing the data read, but it does not cover error behavior, permissions details, or rate limits.
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?
A single, front-loaded sentence with no filler. It is appropriately sized for a simple read operation, though slightly terse and fragment-like.
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 simple read tool with annotations and no output schema, the description adequately indicates the returned fields. However, it remains vague on what "verification requirements" includes and does not explain output structure or ownership-check failure modes.
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 0% and the single "domain" parameter has only a type and no format. The description implies the parameter is a domain name but adds no syntax, example, or format guidance, so it does not compensate for the schema gap.
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?
States a specific verb ("Read") and resource ("owned domain") with the fields retrieved (expiry, nameservers, verification requirements). It does not differentiate from siblings like status or dnsGet, so it falls short of a 5.
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 no when-to-use guidance, no exclusions, and no alternatives. The sibling tools status and dnsGet likely overlap, but the description never mentions them or the conditions that select this tool.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
quoteARead-onlyInspect
Quote a one-year domain registration or renewal. Renewal requires the owner signature. Availability is not a reservation.
| Name | Required | Description | Default |
|---|---|---|---|
| domain | Yes | Exact registrable ASCII domain, e.g. example.com | |
| operation | No | register | |
| period_years | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, openWorldHint=true and destructiveHint=false, so safety is covered. The description goes beyond that by disclosing an auth requirement (owner signature for renewals) and a side-effect caveat (availability is not a reservation), which is exactly the kind of extra context still useful under 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?
Three short, front-loaded sentences with no filler; the core action, the renewal caveat, and the non-reservation warning each earn their place.
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 no output schema, the description carries the burden of explaining what a quote returns, and it is silent on price/currency, quote validity or expiry, and whether the quote can later be executed. It covers prerequisites well but leaves the return semantics an agent needs to act on the quote undefined.
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 'domain' is documented). The description compensates by explaining the fixed one-year period (the period_years const) and by framing the 'register' vs 'renew' operation enum and its signature requirement, adding meaning the schema does not carry.
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?
States a specific verb (Quote) plus the exact resource and scope (one-year domain registration or renewal), and the line 'Availability is not a reservation' makes clear it is a non-mutating price query rather than an action, distinguishing it from the sibling register/renew tools. An agent can route to it without opening the schema.
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?
Adds the prerequisite that renewal requires the owner signature and that a quote does not reserve the domain, which implies you must follow with register to secure it. However, it never explicitly says when to call quote versus register/renew, or that it should be used before those tools, leaving the routing to inference.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
registerADestructiveInspect
Buy the exact domain in an unexpired quote, registered to the supplied registrant. Irreversible after registration. Separate x402 payment required.
| Name | Required | Description | Default |
|---|---|---|---|
| quote_id | Yes | ||
| registrant | Yes | ||
| accept_terms | Yes | ||
| terms_version | Yes | ||
| client_order_id | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already flag destructive/open-world, and the description meaningfully adds beyond them: the operation is irreversible once registered, and a separate x402 payment step is required. It doesn't cover what happens on partial failure or how the registrant data is validated, but the risk profile is clearly communicated.
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?
Three short sentences with zero filler, front-loading what is bought before the irreversible and payment warnings. Every clause carries operational weight.
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?
No output schema exists, so the description could say more about what a successful registration returns (order id, status). For a 5-param irreversible mutation with a nested registrant object and a terms-acceptance contract, the description covers the essentials but leaves key parameters and the post-call state underspecified.
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 0% across 5 required params including a 13-field nested registrant object. The description only gestures at the registrant and implies quote_id; accept_terms, terms_version, and client_order_id (which has a 16-80 char constraint suggesting idempotency) are entirely unexplained.
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?
States a specific verb and resource – buying/registering the exact domain from an existing quote – tied to the supplied registrant. It reads clearly as the purchase step, distinguishable from the sibling `quote` (pricing) and `renew` (extension), though it never names those siblings explicitly.
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?
Usage context is implied rather than stated: the tool requires an 'unexpired quote' and mentions a separate x402 payment, which tells the agent roughly when this applies. There is no explicit when-not guidance or routing to `quote`/`renew` as alternatives, leaving the precondition chain to inference.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
renewBDestructiveInspect
Renew an owned domain for one year using a renewal quote. Separate payment; automatic registrar renewal is disabled.
| Name | Required | Description | Default |
|---|---|---|---|
| quote_id | Yes | ||
| accept_terms | Yes | ||
| terms_version | Yes | ||
| client_order_id | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=false, destructiveHint=true, and openWorldHint=true, so the safety profile is covered. The description adds useful non-annotated behavior: the renewal term is one year, payment is handled separately, and automatic registrar renewal is disabled. It does not cover failure modes or permission requirements, but it meaningfully extends the annotation-based 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?
Two sentences, front-loaded with the core action and zero boilerplate. Every clause carries information, though the second sentence is slightly terse and could integrate parameter flow more usefully.
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 destructive, open-world mutation with four required parameters all lacking schema descriptions and no output schema, the description is too thin. It omits what accept_terms/terms_version mean, whether client_order_id provides idempotency, and what happens on failure or partial payment, leaving important agent-relevant details unaddressed.
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 0% and all four parameters are required, so the description must compensate. It only hints at 'quote_id' via 'using a renewal quote' and says nothing about accept_terms, terms_version, or client_order_id. This leaves most parameter meaning undocumented.
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?
States a specific verb and resource: 'Renew an owned domain for one year using a renewal quote.' This clearly separates it from the sibling 'register' (new domain) and implies dependence on 'quote'. However, it does not explicitly name an alternative tool or clarify scope against all siblings, so it falls just short of a 5.
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 phrase 'using a renewal quote' implies the prerequisite flow of obtaining a quote first, and 'Separate payment; automatic registrar renewal is disabled' adds operational context. There are no explicit when-to-use vs when-not-to-use statements or named alternatives, so usage guidance is implied rather than stated.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
statusARead-onlyInspect
Recover a private order after a lost response. Pending is not failure; never buy again to resolve a timeout.
| Name | Required | Description | Default |
|---|---|---|---|
| order_id | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already establish readOnlyHint=true and destructiveHint=false, so safety is covered; the description adds genuinely useful behavior context by warning that a 'pending' state is normal and must not be treated as failure or trigger a re-purchase. It still doesn't describe what statuses can be returned or how long pending may persist.
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 short sentences, zero filler, with the recovery scenario and the timeout warning front-loaded in that order. Every clause earns its place.
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 one-parameter read tool with no output schema, the description handles usage well but leaves the returned status values and their meaning largely unexplained — it names only 'pending'. Enough to invoke safely, not enough to fully interpret the result.
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 0% for the single required order_id parameter, and the description never says what identifies an order or its format. The phrase 'private order' hints at the resource but adds no meaning beyond the schema's parameter name.
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 action — recovering the state of a private order after a lost response — which lets the agent distinguish this status/retrieval call from purchase-oriented siblings like register, renew, and quote. It is clear enough to act on, though the resource is described indirectly through the scenario rather than as an explicit 'get order status' statement.
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 gives a clear triggering condition (a lost/timeout response) and an explicit anti-pattern ('never buy again to resolve a timeout'), which is strong when-to-use guidance. It does not name a sibling alternative to use instead, so it stops short of full routing 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.
7 tool updates
v0.1.0- First observed
dnsGet - First observed
dnsSet - First observed
info - First observed
quote - First observed
register - First observed
renew - First observed
status
TDQS
Scored across 7 tools
Each tool targets a distinct action: quote (pricing), register (new buy), renew (owned), status (order recovery), info (read), dnsGet/dnsSet (DNS). The only mild overlap is quote covering both registration and renewal pricing, but descriptions clearly separate it from register and renew.
Mix of bare lowercase verbs (quote, register, renew), lowercase nouns (status, info), and camelCase (dnsGet, dnsSet). Still readable, but the conventions are not uniform across the set.
Seven tools is well-scoped for a domain registration and DNS operator kit, with each tool earning its place across the quote/register/renew/status/info/DNS lifecycle.
Core lifecycle (quote, register, renew, status, info, DNS read/write) is covered, but obvious operations like listing owned domains, transfer, and domain deletion are absent. DNS deletion is only implicitly handled via dnsSet's named-set replacement.
Maintenance
Related MCP Connectors
Agent-first domain registration and DNS management, paid with USDC via x402.
Domain registration for AI agents via Stripe or x402 crypto with Cloudflare DNS.
Domain search, registration, DNS, marketplace, and checkout with your AI agent.
Internet identity for AI agents: register or broker domains, email, DNS - pay by card or USDC.
Related MCP Servers
AlicenseAqualityCmaintenanceService that lets AI Agents search, register, and configure domains1059 npm10MIT- AlicenseAqualityDmaintenanceEnables AI agents to check domain availability, purchase domains via Stripe, and perform full DNS and nameserver management. It facilitates automated domain lifecycle tasks like record updates and transfer locks without requiring CAPTCHAs.MIT
- AlicenseAqualityDmaintenanceDomain registration for AI agents. Check availability, buy domains (Stripe or x402 crypto), and auto-configure Cloudflare DNS - all without leaving your coding session.94MIT

Purple Flea Domainsofficial
AlicenseNot gradedqualityDmaintenanceBuy and manage domain names with USDC via API. Search availability, register .com/.ai/.io domains, and manage DNS records. Designed for autonomous AI agents. 15% referral commissions.5 npmMIT