audit.domains - Domain Valuation
Server Details
Deterministic domain name valuation from recorded sales: fair-value interval, scored factors and real comparable sales, plus a marketplace of DNS-verified domain listings. The same name always returns the same figure.
- Status
- Healthy
- Uptime
- 100.0% over 20 days
- Last Tested
- Transport
- Streamable HTTP · MCP 2025-06-18
- URL
TDQS
Scored across 27 tools
Several clusters overlap heavily: appraise_domain/compare_domains/run_bracket all value names, buy_appraisal/purchase_appraisal both buy an appraisal, and search_recorded_sales/find_comparable_sales/ask_domain_market all surface sales data. The long descriptions explicitly cross-reference each other to steer selection, which helps, but the boundaries (e.g. buyer card purchase vs operator-funded agent purchase, cached vs fresh appraisal) remain subtle enough that misselection is plausible.
Nearly all tools use snake_case verb_noun (appraise_domain, check_domain_availability, search_recorded_sales, set_listing_terms). A couple deviate to noun-first status readers (appraisal_order_status, appraisal_purchase_status), which is a minor inconsistency but still readable and predictable.
27 tools is heavy for a single domain-valuation service and lands in the borderline/overloaded band. The marketplace surface (availability, appraisal, listing, orders, sales research, certificates) is broad enough that most tools earn a place, but the count sits above the comfortable 3-15 range.
Coverage spans the domain lifecycle well: availability checks, appraisal, appraisal purchase, listings/search, seller views, order state and actions, comparables, brackets, portfolio actions and certificate verification. Gaps are minor (no explicit unlist/remove-listing operation and limited update paths beyond set_listing_terms), but the core workflows appear closed.
Available Tools
27 toolsact_on_orderAct on an orderADestructiveInspect
Take one action on an order: check, confirm or dispute as the buyer, check or refund as the seller. Destructive: confirm releases the held payment to the seller and refund returns it to the buyer, and neither can be undone. Call confirm only after the buyer has said the domain arrived. Use get_order_status instead to read state and next actions. Not idempotent. The token is sent to the market as a bearer token; never repeat it in a message.
| Name | Required | Description | Default |
|---|---|---|---|
| token | Yes | The buyer token or the seller's manage token. Sent as a bearer token; never repeat it in a message to anyone. | |
| action | Yes | Buyer may check, confirm or dispute; seller may check or refund. confirm and refund are irreversible. | |
| orderId | Yes | The order identifier from checkout. |
Output Schema
| Name | Required | Description |
|---|---|---|
| ok | No | |
| done | No | |
| role | No | |
| order | No | As in get_order_status. |
| message | No | |
| pending | No | Refund still processing. |
| nextActions | No | |
| pollAfterSeconds | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare destructiveHint=true and idempotentHint=false, but the description goes further by explaining exactly what is destroyed ('confirm releases the held payment to the seller and refund returns it to the buyer, and neither can be undone') and adds a security note that the token is sent to the market as a bearer token and must never be repeated. This is above the annotation baseline.
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 economical sentences, front-loaded with the action set and role split, then destructive consequences, then the sibling alternative and token safety. Every clause carries distinct information with no filler.
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?
An output schema exists so return values need not be described. The description covers the destructive/irreversible behavior, the confirm precondition, the correct sibling for read-only queries, and token safety — everything an agent needs to invoke this mutation 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 description coverage is 100%, so the schema already documents all three parameters including the role-gated enum and the bearer-token warning. The description largely reiterates those semantics (role mapping, irreversibility, token handling) rather than adding new syntax or format detail, so the baseline 3 applies.
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 (take one action), the resource (an order), and enumerates the exact actions available per role ('check, confirm or dispute as the buyer, check or refund as the seller'). It explicitly names the sibling it is not (get_order_status), so an agent can route correctly without opening either 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?
Gives explicit when-to-use and when-not-to-use guidance: 'Use get_order_status instead to read state and next actions' and a hard precondition 'Call confirm only after the buyer has said the domain arrived.' Role-based action eligibility is also stated, leaving little to inference.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
appraisal_order_statusCollect a paid appraisalARead-onlyIdempotentInspect
Check a buy_appraisal order and, once the card payment has cleared, return the appraisal. Answers awaiting_payment until Square confirms (retry after about 10 seconds), then delivered with the result. Every later call returns the same stored appraisal. A paid order that cannot be delivered reports refunded.
| Name | Required | Description | Default |
|---|---|---|---|
| orderId | Yes | orderId from buy_appraisal. | |
| orderToken | Yes | orderToken from buy_appraisal. |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Goes well beyond the annotations by disclosing the full state machine (awaiting_payment, delivered, refunded), the polling interval, and the idempotent behavior that later calls return the same stored appraisal. This tells the agent exactly what outcomes to expect and how to react to each, which the readOnly/idempotent hints alone cannot convey.
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 tight sentences, front-loaded with the action and payment gate, then the polling and terminal states. Every sentence carries distinct information with no 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?
The output schema exists but the description still pre-empts the key return states, and it covers the retry/idempotency behavior an agent needs for correct polling. Nothing material for calling it correctly is missing.
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% and both parameters are documented as coming from buy_appraisal, so the schema already carries the semantics. The description adds no syntax or format detail beyond that, making 3 the correct baseline.
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 (check/return) and resource (a buy_appraisal order's appraisal), explicitly tying it to the buy_appraisal sibling that produced the orderId/orderToken. An agent can distinguish this collector from appraise_domain or quote_domain_purchase 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?
Gives concrete invocation context: poll after buy_appraisal, retry after about 10 seconds while awaiting_payment, and later calls are safe repeats. It does not name an alternative tool or an explicit when-not-to-use, so it stops short of a 5.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
appraisal_purchase_statusRead a funded appraisal purchase receiptARead-onlyIdempotentInspect
Read the original purchase-1 receipt using the same authenticated agent connection and operationId. This does not start or resume delivery and cannot create a purchase. A pending receipt gives retryAfterSeconds; after that delay, recover with purchase_appraisal using the SAME operationId and original arguments. A refunded receipt means service credits returned to the account.
| Name | Required | Description | Default |
|---|---|---|---|
| operationId | Yes | Caller-chosen purchase identifier. Persist it before calling and reuse it with the original arguments after a lost reply; never generate a new identifier for a retry. |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The annotations cover the safety profile (readOnly, idempotent, non-destructive), but the description adds state-specific behavior the annotations cannot convey: a pending receipt yields retryAfterSeconds with a recovery delay, and a refunded receipt means service credits return to the account. These outcomes materially change what the caller does next.
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?
Four dense sentences, front-loaded with the operation's identity before the constraints and recovery path. Every sentence carries distinct information (identity, exclusions, pending behavior, refund behavior) with no filler.
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?
An output schema exists, so return values need not be spelled out, and the description still covers the essential non-obvious states (pending, refunded) and the recovery route. For a single-parameter, idempotent read tool this 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?
Schema coverage is 100% and the operationId schema description already documents persistence and reuse, so the baseline is 3. The description adds marginal value by tying operationId to the recovery action ('using the same authenticated agent connection and operationId'), contextualizing it within the retry flow rather than merely restating 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 states a specific verb and resource ('Read the original purchase-1 receipt') and immediately scopes it by naming the exact identifier used ('operationId'). It actively distinguishes itself from the sibling purchase_appraisal by declaring 'cannot create a purchase,' so an agent can separate reading from buying without opening either 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?
It gives explicit negative guidance ('does not start or resume delivery and cannot create a purchase') and a concrete alternative path for the pending case ('recover with purchase_appraisal using the SAME operationId and original arguments'). Both when-not-to-use and when-to-use-an-alternative are covered, leaving nothing to inference.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
appraise_domainAppraise a domain nameARead-onlyIdempotentInspect
Estimate the fair value of one domain name with its low/high interval. A full cached appraisal includes its nearest recorded sales; catalog answers include only published fields. Otherwise a verified storedFigure can return the same public interval already in the report HTML, with source methodology, edition and artifact digest, but no scores, comparables or ODVS record. Use search_recorded_sales to browse sales and find_comparable_sales for just the five nearest sales. Deterministic: same name, same figure; confidence, when present, is an internal 0 to 100 score, not a probability. Without any cached, published or stored figure, returns no figure but a browser report link, 3 nearest published names for context and a next step. Cached answers, keyless catalog figures and public stored intervals use no API credits. A default-profile cache miss with an authorized write-scope paid API key (HTTP header Authorization: Bearer ad_live_...) can consume one API credit even for a catalog name, subject to allowance, rate limits and server budget. Rejected keyed runs can return an error. MCP cache hits use no API credits; without a key, catalog fallbacks are free. On the default profile a cache miss with an authorized write-scope paid key can consume one API credit even for a catalog name. Purchasing a current appraisal through an operator-funded agent account costs $0.03 per purchase (https://audit.domains/machine-account; live status, terms and protocol: GET https://audit.domains/api/machine/resolve). That is a separate paid purchase, not a charge for this MCP lookup. Fresh runs require write scope, remaining allowance and available server budget; card purchases use a hosted Square checkout.
| Name | Required | Description | Default |
|---|---|---|---|
| domain | Yes | The one domain name to appraise, such as example.com. A pasted URL is accepted. |
Output Schema
| Name | Required | Description |
|---|---|---|
| next | No | Present with notAppraised: {tool, arguments} when a paid route to this name's figure is open on this server, otherwise the report link ({url}) that computes it in the reader's browser at no cost. |
| citeAs | Yes | A structured citation. Quote `text` or build your own from the fields. Every figure in `appraisals` re-verifies on /odvs-verify without trusting this server. Tools whose answer is not an appraisal (a bracket, which withholds estimates by contract, and the recorded-sales tools, whose rows are not hashed) return an empty `appraisals`. A stored interval also has no ODVS record: its artifact digest is provenance, not a standalone proof of these projected fields. |
| citation | Yes | |
| nextStep | No | One line on what to do next when no figure was computed. |
| purchase | No | Present when this server sells a fresh appraisal by card: call the named tool to open a checkout for the user. |
| appraisal | No | Absent when storedFigure or notAppraised is present: no full appraisal was computed on this server for this response. |
| reportUrl | Yes | |
| agentTrial | No | Present with notAppraised (Lane 04, F4): free server-side fresh appraisals this caller can still claim (remaining) and how a trial is obtained (how). 0 with operator_required means an operator-issued grant is the only route today. |
| unattended | No | Present with notAppraised: how an agent gets a fresh figure with no person at purchase time, from a balance a person prepaid and a spending grant they issued. POST request; the 402 answer lists the purchase actions. |
| certificate | No | Present with a figure while certificates are on sale: the checkout link (url) where the user buys a verifiable certificate of this appraisal, for a listing or a negotiation. |
| notAppraised | No | The name that was not computed here. Not an error: open reportUrl, where the same engine runs in the reader's browser at no cost. |
| registration | No | Present with notAppraised: whether the name is registered, from live DNS and RDAP (status registered, unregistered, likely_unregistered or unknown). |
| storedFigure | No | Only the verified value interval already public in the report HTML, read from a stored canonical-engine result when no full MCP result or catalog figure is available. No scores, comparables or ODVS record. sha256 names the stored source artifact, not a standalone proof of this projection. |
| nearestCatalog | No | Up to 3 published catalog names nearest the requested one, with their catalog figures. Context for the user, never the requested name's value. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Beyond the readOnly/idempotent annotations, it discloses genuinely useful traits: determinism ('same name, same figure'), that confidence is an internal 0-100 score rather than a probability, the four possible response modes (cached, catalog, stored, none), and credit-consumption rules. The credit rules are stated repeatedly and are hard to parse, which dilutes but does not negate the added behavioral value.
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 credit/cache rules are stated at least twice nearly verbatim ('Cached answers, keyless catalog figures and public stored intervals use no API credits...' then 'MCP cache hits use no API credits...'), bloating the description with redundancy. The core purpose is front-loaded, but the back half is a tangled wall of authorization, billing and URL detail that obscures the actionable facts.
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 an output schema exists, return values need not be spelled out, yet the description still usefully enumerates the response variants including the empty-result case ('no figure but a browser report link, 3 nearest published names... and a next step'). The main omission is that the auth/credit conditions are so muddled that an agent may not reliably know when a call costs credits.
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?
There is a single parameter with 100% schema description coverage, and the schema already documents the domain format including URL acceptance. The description adds no syntax or format detail beyond the schema, so the baseline 3 applies.
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 opening states a specific verb and resource: 'Estimate the fair value of one domain name with its low/high interval.' It also distinguishes itself from siblings by routing sales browsing to search_recorded_sales and find_comparable_sales, so an agent can tell what this tool is and is not for. The core purpose is clear despite the surrounding clutter.
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 names two explicit alternatives with their purposes ('Use search_recorded_sales to browse sales and find_comparable_sales for just the five nearest sales') and clarifies that a paid purchase is 'a separate paid purchase, not a charge for this MCP lookup,' distinguishing it from purchase_appraisal. No explicit when-not-to-use condition is given, but the routing guidance is concrete.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
ask_domain_marketAsk the market in plain EnglishARead-onlyIdempotentInspect
Answer one plain-English sentence about the domain market. A listings question ('short .com under $500 that accepts offers') returns matching for-sale listings; a sales question ('4-letter .com sold since 2020') is routed to the recorded sales and returns rows, total and stats as search_recorded_sales does, with interpretation.source set to recorded-sales. Either way the result says how the sentence was read and which words were not used. Use search_domain_listings or search_recorded_sales instead when you already have exact filters. Deterministic and offline: it calls no model. Read-only and runs no appraisal.
| Name | Required | Description | Default |
|---|---|---|---|
| question | Yes | The search as a sentence, up to 300 characters, for example: short .com under $500 that accepts offers. |
Output Schema
| Name | Required | Description |
|---|---|---|
| rows | No | |
| count | No | |
| stats | No | Rounded; not exact sale prices. |
| total | Yes | |
| citeAs | No | Same citation object as search_recorded_sales. |
| citation | No | |
| listings | No | Same fields as search_domain_listings. |
| exploreUrl | No | |
| nextOffset | No | |
| population | No | |
| generatedAt | No | |
| interpretation | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Beyond the annotations, it discloses that the tool is deterministic, offline, calls no model, and runs no appraisal, and it describes the interpretation.source field and the 'words not used' feedback. That is real behavioral context the annotations do not carry, though return format is partly covered by the output schema.
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?
Front-loaded with the core purpose and routing outcome; every sentence carries information (routing, alternatives, determinism, appraisal note). It is dense but not padded, though a single long paragraph makes it slightly harder to scan.
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 what the tool does, when to use alternatives, the deterministic/offline nature, and the returned interpretation metadata; with an output schema present, no further return-value detail is required. Nothing an agent needs to invoke it correctly is missing.
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% and there is only one parameter, so the schema already documents 'question' with the 300-char limit. The description reinforces the expected sentence form with an example but adds no syntax beyond what the schema provides, so the 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?
States a specific verb and resource ('Answer one plain-English sentence about the domain market') and immediately distinguishes itself by naming the two sibling tools it routes to. An agent can tell it apart from search_domain_listings and search_recorded_sales without opening any 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?
Explicitly says to use search_domain_listings or search_recorded_sales instead 'when you already have exact filters,' giving both the alternative and the selecting condition. It also maps question types to outcomes, so the agent knows what input shape to send.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
build_portfolio_landerBuild a portfolio landing pageARead-onlyIdempotentInspect
Generate one index.html that serves a for-sale page for every parked domain in a portfolio, with the same offer email on each. Returns the HTML file and where to upload it; nothing is stored or sent, so the caller uploads it. Handles up to 500 domains. Use set_listing_terms instead to set terms on a domain already listed on this market. Read-only.
| Name | Required | Description | Default |
|---|---|---|---|
| note | No | Optional note for the generated page, up to 500 characters. | |
| Yes | The address that receives offers from every generated page. | ||
| domains | Yes | Parked domains to include, up to 500. Each item has a domain and an optional priceUsd asking price in US dollars. |
Output Schema
| Name | Required | Description |
|---|---|---|
| html | Yes | The whole index.html. |
| bytes | Yes | |
| hosts | Yes | Domains the page serves. |
| deploy | Yes | |
| filename | Yes | |
| rejected | Yes | |
| contentType | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint, idempotentHint, destructiveHint=false, and openWorldHint=false, so the safety profile is covered. The description adds genuinely useful context beyond them: nothing is stored or sent, the caller must upload the returned HTML, and there is a 500-domain ceiling. It stops short of describing the returned location format, but the output schema likely covers that.
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?
Front-loads the core action, then adds return/upload behavior, the limit, and the alternative in tight succession. Every sentence carries distinct information with no redundancy or filler.
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 generation tool with an output schema, the description covers the essential behavioral facts an agent needs: no server-side persistence, caller-uploads responsibility, the 500-domain bound, and the sibling alternative. Nothing material to correct invocation appears missing.
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%, so the schema already documents email, domains, and note with types and limits. The description reinforces the shared-email concept and the 500-domain cap but adds no syntax or format detail beyond what the schema 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?
States a specific verb (generate) and resource (one index.html for-sale page for every parked domain in a portfolio), including the shared offer-email behavior. It explicitly distinguishes itself from the sibling set_listing_terms, so an agent can select it without opening either 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?
Names an alternative and the condition that selects it: 'Use set_listing_terms instead to set terms on a domain already listed on this market.' This is clear routing context, though it does not enumerate other conditions (e.g., single-domain scenarios or overlap with read_for_sale_page).
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
buy_appraisalBuy a server appraisal by cardAInspect
Buy a fresh appraisal of one domain, computed on this server, for $5 by card. Use it when appraise_domain answered notAppraised and the user wants the figure returned to you rather than opened in their browser. This is the price for a person paying by card; an agent account an operator has funded pays the lower stored-appraisal price instead (https://audit.domains/machine-account). Returns checkoutUrl (a Square payment page for the user: no account, no sign-in), orderId and orderToken. Give checkoutUrl to the user; after they pay, call appraisal_order_status with orderId and orderToken. Keep orderToken: it is shown once and is the only proof of purchase. A paid order that cannot be delivered is refunded in full.
| Name | Required | Description | Default |
|---|---|---|---|
| domain | Yes | The domain to appraise, e.g. brightcargo.com. |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations mark this as non-read-only, open-world and non-idempotent; the description goes well beyond that by disclosing the $5 card price vs. the lower stored-appraisal price, that checkoutUrl is a no-sign-in Square page, that orderToken is shown once and is the only proof of purchase, and that undeliverable paid orders are refunded in full.
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?
Front-loaded with the action, price and trigger, then flows into outputs, next steps and the token warning. It is dense and long, but nearly every sentence carries operational weight (pricing, workflow, token handling, refund), so little is wasted.
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?
Despite an output schema existing, the description usefully names the returned fields (checkoutUrl, orderId, orderToken) and the required next tool call, plus the refund guarantee. An agent has everything needed to invoke it and handle the result 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?
There is a single parameter with 100% schema description coverage ('The domain to appraise, e.g. brightcargo.com'), so the schema already carries the parameter semantics. The description adds no extra domain formatting or validation detail beyond what the schema provides, making the baseline 3 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?
States a specific verb, resource, scope and price: 'Buy a fresh appraisal of one domain, computed on this server, for $5 by card.' This clearly distinguishes it from appraise_domain (free/opened-in-browser appraisal) and appraisal_order_status (order polling).
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?
Gives an explicit trigger condition ('when appraise_domain answered notAppraised and the user wants the figure returned to you rather than opened in their browser') and names the alternative pricing path for operator-funded agent accounts. It also states the required follow-up call (appraisal_order_status with orderId and orderToken).
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
check_domain_availabilityCheck whether domain names are registeredARead-onlyIdempotentInspect
Check up to 25 domain names live against DNS and the registries' own RDAP records and say which are registered and which look available to register, with registration and expiry dates for lists of five or fewer. Pass alternativesFor with one name or label to check it across .com, .net, .org, .io, .ai, .co, .app, .dev and .xyz. Use it before suggesting any name as available: an answer from memory is often wrong. Use inspect_domain instead for the full public record of one name, and appraise_domain for what a name is worth. Status is unregistered (the registry has no record), likely_unregistered (no DNS and no RDAP for that suffix), registered or unknown; a registry can still reserve or premium-price a name that looks available. Read-only, free, no key; makes one or two DNS and RDAP requests per uncached name, runs no valuation.
| Name | Required | Description | Default |
|---|---|---|---|
| domains | No | Full domain names to check, up to 25, such as brightpath.com. Pasted URLs are accepted; duplicates are checked once. | |
| alternativesFor | No | One name or bare label, such as brightpath or brightpath.com, to check across nine popular suffixes. Combined with domains, the total is capped at 25. |
Output Schema
| Name | Required | Description |
|---|---|---|
| limit | No | Present with pending: code lookup_limit, retryable, retryAfterSeconds, and retry ({tool, arguments}: send it unchanged after that wait to continue exactly where this call stopped). Where a key lifts the limit, upgrade says how. |
| budget | No | This request's uncached-lookup budget: lane (free or keyed), used, limit, remaining, and keyRejected when a key was sent and refused. Cached names cost nothing. |
| caveat | Yes | |
| citeAs | Yes | A structured citation. Quote `text` or build your own from the fields. Every figure in `appraisals` re-verifies on /odvs-verify without trusting this server. Tools whose answer is not an appraisal (a bracket, which withholds estimates by contract, and the recorded-sales tools, whose rows are not hashed) return an empty `appraisals`. A stored interval also has no ODVS record: its artifact digest is provenance, not a standalone proof of these projected fields. |
| invalid | No | Inputs that are not domain names; nothing was looked up for them. |
| pending | No | Names not checked because the lookup limit was reached. limit.retry is the call that checks them. |
| results | Yes | |
| citation | Yes | |
| acquireUrl | No | Present on a short list whose wanted name is taken and not listed: a request for audit.domains to approach the owner (fee only if bought). |
| forSaleCount | No | Taken names whose owner sells them (a live checkout here or the owner's own _for-sale DNS record); each carries forSale. |
| availableCount | Yes | Names whose status is unregistered or likely_unregistered. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnly/idempotent/openWorld, yet the description adds substantial context: free, no key, one or two DNS/RDAP requests per uncached name, no valuation performed, and the caveat that a registry can still reserve or premium-price an apparently available name. The status taxonomy is explained rather than assumed.
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?
Dense but front-loaded: capability, then the alternativesFor expansion, then the usage directive, then routing, then status semantics. Every clause carries information, though the single long paragraph could be slightly tighter.
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?
An output schema exists so return values need not be spelled out, yet the description still defines the four status values and the 5-name limit for dates. Combined with the request/auth behavior notes, an agent has everything needed to call it 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 100%, so the baseline is 3, but the description goes further by enumerating the nine suffixes alternativesFor covers (.com through .xyz) and noting registration/expiry dates are returned only for lists of five or fewer, which the schema does not state.
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?
Specific verb (check) plus resource (domain registration status), with explicit scope limits (up to 25 names, DNS + RDAP sources). It cleanly distinguishes itself from inspect_domain and appraise_domain by naming both siblings and what they do instead.
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?
States when to use ('Use it before suggesting any name as available: an answer from memory is often wrong') and names two concrete alternatives with their differing purposes. The routing guidance is unambiguous.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
check_portfolio_renewalsList a domain portfolio by expiry dateARead-onlyIdempotentInspect
Look up the registry expiry date and registrar of up to 25 domain names a person owns and list them soonest first, flagging names that expire within 60 days (or a chosen window), have passed their expiry date, or are no longer registered. Use it when someone asks which domains to renew or what is expiring; use check_domain_availability instead for names they do not own yet, and appraise_domain to decide whether a name is worth renewing. Expiry comes from each registry's RDAP record and a registrar renewal can take a day to show. Read-only, free, no key; one or two DNS and RDAP requests per uncached name, runs no valuation.
| Name | Required | Description | Default |
|---|---|---|---|
| domains | Yes | The portfolio's domain names, 1 to 25, such as ["example.com", "example.io"]. | |
| withinDays | No | Flag names expiring within this many days, 1 to 365. Defaults to 60. |
Output Schema
| Name | Required | Description |
|---|---|---|
| limit | No | Present with pending: code lookup_limit, retryable, retryAfterSeconds, and retry ({tool, arguments}: send it unchanged after that wait to continue exactly where this call stopped). Where a key lifts the limit, upgrade says how. |
| budget | No | This request's uncached-lookup budget: lane (free or keyed), used, limit, remaining, and keyRejected when a key was sent and refused. Cached names cost nothing. |
| citeAs | Yes | A structured citation. Quote `text` or build your own from the fields. Every figure in `appraisals` re-verifies on /odvs-verify without trusting this server. Tools whose answer is not an appraisal (a bracket, which withholds estimates by contract, and the recorded-sales tools, whose rows are not hashed) return an empty `appraisals`. A stored interval also has no ODVS record: its artifact digest is provenance, not a standalone proof of these projected fields. |
| invalid | No | |
| pending | No | Names not checked because the lookup limit was reached. limit.retry is the call that checks them. |
| sellUrl | No | Present when names are due: where to list a name for sale here instead of letting it lapse. |
| citation | Yes | |
| dueCount | Yes | |
| renewals | Yes | |
| withinDays | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Beyond the annotations (readOnly, idempotent, openWorld, non-destructive), it discloses cost and access ('free, no key'), the per-name request load ('one or two DNS and RDAP requests per uncached name'), the data source and freshness caveat ('Expiry comes from each registry's RDAP record and a registrar renewal can take a day to show'), and the scope exclusion ('runs no valuation'). That is substantial behavioral context the structured fields do not carry.
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?
Front-loaded with the core action and limit, followed by usage routing and operational caveats; every sentence carries information an agent would otherwise have to guess. It is dense and slightly run-on, but there is no filler to cut.
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 shape, and it covers everything else: input limits, flagging rules, freshness caveats, cost, and alternative routing. An agent has all it needs to select and call this 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 100%, so the baseline is 3, but the description adds semantics the schema does not: the default window (60 days) is restated with the flag categories it drives (expiring soon, already expired, no longer registered), and the 'up to 25' ceiling is tied to portfolio scale. It stops short of describing the domains input format beyond what the schema already says.
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 concrete verb and resource ('Look up the registry expiry date and registrar of up to 25 domain names ... and list them soonest first') plus the flagging behavior, which is specific enough to distinguish it from every sibling. An agent can tell this is a portfolio-expiry listing tool 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?
Explicitly states the trigger ('when someone asks which domains to renew or what is expiring') and names two alternatives with the conditions that select them: check_domain_availability for names not yet owned, appraise_domain for renewal-worthiness decisions. Nothing is left to inference.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
compare_domainsCompare and rank domain namesARead-onlyIdempotentInspect
Appraise up to 10 domain names and rank them by estimated fair value, flagging adjacent pairs whose intervals overlap so their order is not separable. Use run_bracket instead for one champion from a head-to-head tournament of up to 8 names, tiers not values. Deterministic. More than 10 names, or a request cut off by the engine budget, returns a handoffUrl that runs the same engine free in the browser. Without a key, only catalog and recently appraised names get a figure; other names return a report link, nearest published names and a next step instead. MCP cache hits use no API credits; without a key, catalog fallbacks are free. A default-profile cache miss with an authorized write-scope paid API key (HTTP header Authorization: Bearer ad_live_...) can consume one API credit even for a catalog name, subject to allowance, rate limits and server budget. Rejected keyed runs can return an error.
| Name | Required | Description | Default |
|---|---|---|---|
| domains | Yes | Domain names to rank, such as example.com. Up to 10 are appraised here; 11 to 16 return handoffUrl only. |
Output Schema
| Name | Required | Description |
|---|---|---|
| next | No | The one step that moves this name forward: {tool, arguments} to call next on this server, or {url} to open; why says what it gets. Null when nothing here does (for a free name, registering it at a registrar). |
| citeAs | Yes | A structured citation. Quote `text` or build your own from the fields. Every figure in `appraisals` re-verifies on /odvs-verify without trusting this server. Tools whose answer is not an appraisal (a bracket, which withholds estimates by contract, and the recorded-sales tools, whose rows are not hashed) return an empty `appraisals`. A stored interval also has no ODVS record: its artifact digest is provenance, not a standalone proof of these projected fields. |
| ranked | Yes | |
| citation | Yes | |
| handoffUrl | No | Present when this request could not run every name here (over the tool cap, or cut off by the per-request engine budget): a link to the free page that runs the same deterministic computation for all of them in the reader's browser. Give it to the user rather than retrying. |
| notAppraised | No | Names that did not run here (over the tool cap, or cut off by the request budget). They are absent from the ranking, not ranked last - see handoffUrl. |
| inseparablePairs | Yes | Adjacent pairs whose published intervals overlap; the ordering between them is not separable by this method. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already cover the safety profile (readOnly, idempotent, non-destructive), yet the description adds substantial context an agent cannot get elsewhere: deterministic results, credit consumption rules (cache hits free, catalog fallbacks free without a key, one credit on an authorized keyed cache miss), rate limits, server budget, key-scope requirements, and error behavior on rejected keyed runs. This is unusually rich disclosure for a read-only tool.
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?
Front-loaded with the core action and the sibling alternative before the operational detail, and every sentence carries information (limits, cost, fallbacks, errors). It is dense and long, but the pricing and key-scope sentences earn their place because they affect whether an agent should call it at all.
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 values need not be explained, and the description covers everything else an agent needs: input cap, sibling routing, determinism, authentication/scoping, credit cost, cache behavior, handoff behavior, and failure modes. Nothing material is missing for a single-parameter read 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%, so the baseline is 3, but the description reconciles a real discrepancy: the schema allows 1–16 items while the description clarifies that only up to 10 are appraised and 11–16 yield a handoffUrl only. That interpretation of the cap boundary adds meaning beyond the raw maxItems constraint.
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 ('Appraise up to 10 domain names and rank them by estimated fair value') with a precise output concept (overlapping intervals flagged as non-separable). It explicitly names the sibling it is not — run_bracket for head-to-head tournaments — so an agent can route between them without opening either 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?
Gives explicit when-to-use-this vs when-to-use-the-alternative: this tool for ranked fair values of up to 10 names, run_bracket for a single champion from a tournament of up to 8. It also names the boundary condition (>10 names or budget cutoff) and the fallback behavior, leaving nothing to inference.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
find_comparable_salesFind comparable recorded salesARead-onlyIdempotentInspect
Return up to five comparable recorded domain sales from a cached appraisal or authorized fresh run, each with price range, year, venue, similarity score and match basis. These are transactions from a curated corpus, not modelled figures. Use appraise_domain for a fair value and search_recorded_sales to browse sales. Cache hits use no API credits; keyless catalog fallback may contain no comparables and links to the browser report. A default-profile cache miss with an authorized write-scope paid key (HTTP header Authorization: Bearer ad_live_...) can consume one API credit even for a catalog name, subject to allowance, rate limits and server budget. Rejected keyed runs can return an error.
| Name | Required | Description | Default |
|---|---|---|---|
| domain | Yes | The one domain name to find comparable recorded sales for, such as example.com. |
Output Schema
| Name | Required | Description |
|---|---|---|
| comps | Yes | |
| citeAs | Yes | A structured citation. Quote `text` or build your own from the fields. Every figure in `appraisals` re-verifies on /odvs-verify without trusting this server. Tools whose answer is not an appraisal (a bracket, which withholds estimates by contract, and the recorded-sales tools, whose rows are not hashed) return an empty `appraisals`. A stored interval also has no ODVS record: its artifact digest is provenance, not a standalone proof of these projected fields. |
| domain | Yes | |
| citation | Yes | |
| nextStep | No | One line on what to do next when no figure was computed. |
| reportUrl | Yes | |
| notAppraised | No | Present when comparables were not computed on this server. Not an error: reportUrl runs the same engine in the reader's browser. |
| nearestCatalog | No | Up to 3 published catalog names nearest the requested one, with their catalog figures. Context for the user, never the requested name's value. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnly/idempotent/non-destructive, but the description adds substantial behavior beyond them: cache hits consume no credits, the keyless catalog fallback may be empty and links to a browser report, a default-profile cache miss with an authorized Bearer key can burn one API credit, and rejected keyed runs can error. This is the credit/auth/error profile an agent cannot infer from 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?
Front-loaded with the return contract, then alternatives, then cost/auth caveats. Dense and nearly waste-free, though the credit/cache sentence chains several conditions ('subject to allowance, rate limits and server budget') into one long clause that is harder to parse than the rest.
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?
Complete for this tool: return fields are enumerated (and an output schema exists anyway), the sibling routing is explicit, and the cost, auth-header, fallback and error behaviors are all covered. Nothing an agent needs to decide or invoke it correctly is missing.
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?
There is a single parameter with 100% schema description coverage ('The one domain name to find comparable recorded sales for, such as example.com'), so the schema already does the heavy lifting. The description only indirectly touches the parameter, noting catalog names can still incur a credit on a miss.
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 ('Return up to five comparable recorded domain sales') and immediately disambiguates scope: 'These are transactions from a curated corpus, not modelled figures.' It explicitly contrasts itself with appraise_domain and search_recorded_sales, so an agent can tell it apart from siblings without opening any 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?
Names the two adjacent tools and the condition that selects each: 'Use appraise_domain for a fair value and search_recorded_sales to browse sales.' It also states the preconditions for a fresh keyed run (authorized write-scope paid key, allowance, budget) versus a free cache hit, which is exactly the routing information an agent needs.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_order_statusCheck an orderAIdempotentInspect
Return an order's state and the next actions open to the token's holder, buyer or seller. Not read-only: each call runs a rate-limited check of the domain move and, when the terms are met, may release the payment to the seller. That is the order proceeding, not an extra charge. Poll no faster than pollAfterSeconds. Use act_on_order instead to confirm, dispute or refund; this tool only reports state and triggers the check.
| Name | Required | Description | Default |
|---|---|---|---|
| token | Yes | The buyer token from checkout, or the seller's manage token. Treat as a secret. | |
| orderId | Yes | The order identifier from checkout. |
Output Schema
| Name | Required | Description |
|---|---|---|
| done | Yes | True when nothing more is owed. |
| role | Yes | |
| order | Yes | |
| nextActions | Yes | |
| pollAfterSeconds | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Goes well beyond the annotations by disclosing that despite being a 'check', each call runs a rate-limited domain move and may release payment to the seller, and clarifies that this is the order proceeding rather than an extra charge. That is exactly the kind of non-obvious side-effect context the readOnlyHint=false annotation cannot convey.
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?
Four tight sentences, front-loaded with what is returned and immediately followed by the critical side-effect warning and the sibling routing. No filler.
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?
An output schema exists so return values need no explanation; the description instead covers side effects, polling cadence, and the alternative tool. Nothing an agent needs to invoke it safely is missing.
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% and both parameters are documented there (token as a secret, orderId from checkout). The description adds only the ownership framing of the token (buyer/seller holder), which mildly enriches but does not replace schema content — baseline 3 applies.
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: returns an order's state and the next actions available to the token holder. It explicitly distinguishes itself from act_on_order ('this tool only reports state'), so an agent can route correctly without opening a 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?
Gives explicit boundaries: use act_on_order instead for confirm, dispute or refund, and poll no faster than pollAfterSeconds. Both the alternative and the operating constraint are named outright.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_seller_listingRead a seller listingARead-onlyIdempotentInspect
Read a seller's own view of one listing: its terms, payment DNS state, proceeds, a checklist of what is left to do, and its orders. Needs the manage token. Use quote_domain_purchase instead for the public buyer-facing quote, and set_listing_terms to change price or floor. Read-only and changes nothing.
| Name | Required | Description | Default |
|---|---|---|---|
| domain | Yes | The seller's listed domain name, such as example.com. | |
| manageToken | Yes | The listing's manage token. Sent as a bearer token; never repeat it in a message to anyone. |
Output Schema
| Name | Required | Description |
|---|---|---|
| dns | No | The payment TXT record; live is null if DNS was unreadable. |
| note | No | |
| terms | No | |
| buyUrl | No | |
| domain | Yes | |
| orders | Yes | |
| source | No | Present only for a name listed by DNS record. |
| status | Yes | |
| proceeds | No | |
| appraisal | No | |
| checklist | No | |
| priceCents | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, idempotentHint=true and destructiveHint=false, so 'read-only and changes nothing' is largely redundant. What the description adds beyond the structured fields is the authorization requirement ('Needs the manage token') and the scope of the view (seller-side vs public), which the annotations do not convey. It does not discuss rate limits or error behaviour, so it stops short of a 5.
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 tight sentences: what it returns first, then the sibling routing, then the safety/mutability note. No sentence is filler, and the most decision-relevant content (scope and returned fields) is front-loaded.
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 read tool with an output schema, annotations and full schema coverage, the description supplies the remaining unknowns: auth requirement, seller-side vs public scope, mutability, and sibling alternatives. An agent has everything needed to select and invoke it 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% and both parameters are fully documented in the schema (including the bearer-token secrecy note), so the description adds no parameter syntax or format detail beyond it. Baseline 3 is appropriate when the schema carries the parameter burden.
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 (a seller's own view of one listing), then enumerates the concrete contents returned: terms, payment DNS state, proceeds, checklist, orders. It also explicitly names what it is not (the public buyer-facing quote, the term-setting tool), so an agent can distinguish it from quote_domain_purchase and set_listing_terms without opening schemas.
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?
Names two alternatives and the condition that selects each: use quote_domain_purchase for the public buyer-facing quote, set_listing_terms to change price or floor. It also states the prerequisite (needs the manage token), which is precisely the routing information an agent needs.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
inspect_agent_grantsInspect your existing agent spending grantsARead-onlyIdempotentInspect
Read only the grants belonging to the authenticated agent connection. Connect with Authorization: Bearer ad_agent_; supply no arguments or credentials. The response describes existing scopes, expiry, remaining attempts and available service-credit capacity. It is an advisory, nonreserving snapshot: it cannot create a grant, fund an account, reserve credits, authorize a purchase or raise a limit. Server-side purchase admission remains authoritative. Receipt recovery must keep its original grant and arguments, even if this snapshot changes.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already cover the safety profile (readOnly, idempotent, non-destructive, openWorld), but the description adds substantial context beyond them: the exact auth header format (Bearer ad_agent_<token>), the fact that no arguments/credentials are supplied, the response contents, and the crucial caveat that this is a non-reserving advisory snapshot while server-side admission stays authoritative. Only the lack of any pagination/size or rate-limit note keeps it from a 5.
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?
Five sentences, front-loaded with the core action and scope, then auth, then response, then capability limits, then a caveat. Every sentence carries information, though the closing sentence about receipt recovery is somewhat tangential to selecting/invoking the tool.
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 needn't enumerate return fields, yet it still summarizes them (scopes, expiry, remaining attempts, credit capacity) and discloses auth requirements, side-effect boundaries, and the authoritative-server caveat. Nothing needed to call this zero-argument read tool correctly is missing.
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?
There are zero parameters, so the baseline is 4; the description reinforces this by instructing the caller to 'supply no arguments or credentials', matching the empty schema with additionalProperties=false. No further parameter meaning is possible here.
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/inspect), a specific resource (spending grants), and a precise scope ('belonging to the authenticated agent connection'). This is unambiguous and easily distinguished from every sibling, none of which deal with agent grants.
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 opening sentence gives clear usage context, and the explicit negative list ('cannot create a grant, fund an account, reserve credits, authorize a purchase or raise a limit') effectively tells the agent when NOT to reach for this tool. It never names a specific alternative tool to use instead, so it falls short of a 5.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
inspect_domainInspect a domain before buying itARead-onlyIdempotentInspect
Gather the public record of one domain name before buying, registering or building on it: registration date, expiry and registrar, registry status (including redemption or pending delete, when a name is about to drop), whether it serves a website or receives email, Internet Archive history, HTTPS certificate history, a Wikipedia article sharing its word (a trademark flag), and the published catalog figure when there is one, with plain signals such as expires in 30 days or held but not in use. Use check_domain_availability instead to screen many names, appraise_domain for a value, and read_for_sale_dns for whether the owner lists it for sale. A source that does not answer is reported as unknown, never as absent. Read-only, free, no key; one request to the site's cached evidence lookup, runs no valuation.
| Name | Required | Description | Default |
|---|---|---|---|
| domain | Yes | The one domain name to inspect, such as example.com. A pasted URL is accepted. |
Output Schema
| Name | Required | Description |
|---|---|---|
| next | No | The one step that moves this name forward: {tool, arguments} to call next on this server, or {url} to open; why says what it gets. Null when nothing here does (for a free name, registering it at a registrar). |
| inUse | No | |
| citeAs | Yes | A structured citation. Quote `text` or build your own from the fields. Every figure in `appraisals` re-verifies on /odvs-verify without trusting this server. Tools whose answer is not an appraisal (a bracket, which withholds estimates by contract, and the recorded-sales tools, whose rows are not hashed) return an empty `appraisals`. A stored interval also has no ODVS record: its artifact digest is provenance, not a standalone proof of these projected fields. |
| domain | Yes | |
| catalog | No | |
| forSale | No | Present when the owner sells it: askingPrice (indicative), buyUrl when checkout is live here, listedHere. |
| history | No | |
| signals | No | |
| citation | Yes | |
| fetchedAt | No | |
| reportUrl | Yes | |
| retryable | No | |
| wikipedia | No | |
| unavailable | No | |
| certificates | No | |
| registration | No | |
| registryStatuses | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotation already covers read-only/free/idempotent, yet the description adds real behavioral context: unknown-source handling ('reported as unknown, never as absent'), one request to a cached evidence lookup, no valuation performed, and no key required. That is exactly the extra layer annotations cannot express.
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?
Purpose is front-loaded and the alternative-routing sentence comes before the behavioral caveat, which is good ordering. The opening sentence is a long enumerated run-on that would read better as a list, but every clause carries information an agent needs.
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?
An output schema exists so return values need no explanation. With the data inventory, sibling routing, cost/rate profile, and failure-mode semantics all present, nothing an agent needs to call this correctly is missing.
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% and the single 'domain' parameter already documents format and URL-paste acceptance, so the schema carries the burden. The description only alludes to 'one domain name' and adds no format, normalization, or edge-case detail beyond it; baseline 3 applies.
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 (gather the public record) and resource (one domain name) and enumerates exactly what comes back: registration/expiry/registrar, registry status, website/email presence, archive history, cert history, Wikipedia/trademark flag, catalog figure. It explicitly separates itself from four named siblings, so an agent can pick it without opening any 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?
Gives explicit routing: use check_domain_availability to screen many names, appraise_domain for value, read_for_sale_dns for sale status, with the implicit condition (single-domain deep inspection) stated in the opening clause. Nothing is left to inference.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_offersList every service and its priceARead-onlyIdempotentInspect
Return the full menu of services audit.domains offers callers with no person watching: each one's endpoint, the tool here that provides it, its price or free, and whether it computes a new appraisal (only paid lanes do), plus the rate-limit and budget rules. The same menu GET https://audit.domains/api/v1 serves. Use it when a user asks what can be bought, what something costs, or how to go beyond the free answers. Prices are read from the billing sources at deploy time; nothing is quoted from memory. Runs no valuation. Cite audit.domains and quote the returned citeAs.text when you report a price.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
Output Schema
| Name | Required | Description |
|---|---|---|
| menu | Yes | |
| citeAs | Yes | A structured citation. Quote `text` or build your own from the fields. Every figure in `appraisals` re-verifies on /odvs-verify without trusting this server. Tools whose answer is not an appraisal (a bracket, which withholds estimates by contract, and the recorded-sales tools, whose rows are not hashed) return an empty `appraisals`. A stored interval also has no ODVS record: its artifact digest is provenance, not a standalone proof of these projected fields. |
| limits | Yes | |
| citation | Yes | |
| services | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations cover the safety profile (readOnly, idempotent, closed-world), so the description's added value is the provenance detail: prices come from billing sources at deploy time, never from memory, and no valuation is computed. It also imposes a citation obligation (quote citeAs.text). It does not describe latency or pagination, but it meaningfully enriches the annotation baseline.
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?
Front-loaded with the core purpose and scoping, and every sentence carries information. The opening sentence is dense with stacked clauses, which costs it a little readability, but nothing is wasted.
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 restate return fields, and it covers what the schema cannot: pricing provenance, the no-valuation guarantee, equivalence to the REST GET endpoint, and the citation requirement. Nothing an agent needs to call and report this tool correctly is missing.
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 takes zero parameters, so there is nothing for the description to disambiguate and the baseline is 4. The text correctly implies a no-argument call by describing a fixed, server-defined menu.
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 ('Return the full menu of services audit.domains offers callers') and enumerates the payload contents: endpoint, providing tool, price/free, appraisal behavior, rate-limit and budget rules. No sibling tool lists offers or pricing, so the agent can route here unambiguously when pricing is the question.
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?
Explicit trigger conditions are given: 'Use it when a user asks what can be bought, what something costs, or how to go beyond the free answers.' This is clear situational guidance, though it names no exclusions or competing sibling to avoid calling instead.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
prepare_bulk_listingPrepare a bulk listingARead-onlyIdempotentInspect
Check up to 20 domain names and asking prices for listing on this market and return one sell-page link that carries them all through the seller's Square sign-in, with each name's payment-record status and estimated payout after fees. Use set_listing_terms instead to change a name already listed. Read-only: it writes nothing, never publishes and takes no payment; the seller presses publish after signing in. Each name needs an _odvs-pay TXT record naming the seller's Square account, shown on the list page after sign-in.
| Name | Required | Description | Default |
|---|---|---|---|
| items | Yes | 1 to 20 objects of {domain, priceCents}; priceCents is whole US cents from 1000 ($10) to 2500000 ($25,000). |
Output Schema
| Name | Required | Description |
|---|---|---|
| names | Yes | |
| steps | Yes | |
| carried | Yes | |
| sellUrl | Yes | Opens the sell page with every checkable name and price filled in; null when none is. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint/idempotentHint/destructiveHint, but the description goes further and clarifies the exact mutation boundary: it writes nothing, never publishes and takes no payment, and the seller presses publish after signing in. That resolves the ambiguity of a tool that 'prepares' a listing but does not create one, which annotations alone could not convey.
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?
Purpose, output, sibling routing and the read-only/prerequisite caveats are front-loaded across four tight sentences with no filler. It is slightly dense and the TXT-record sentence runs long, but every sentence contributes information an agent needs.
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?
An output schema exists so return-value detail is not required, yet the description still previews the sell-page link, payment-record status and post-fee payout. Combined with the sibling pointer and the signing-in prerequisite, an agent has everything needed to call this correctly for a multi-name, non-publishing listing prep.
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% and the single nested parameter documents domain format and priceCents bounds in detail, so the schema carries the load. The description only restates the 1-to-20 cap and the notion of asking prices, adding the TXT-record precondition rather than extra parameter 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?
States a specific verb and resource (check up to 20 domains/prices for listing on this market) plus the concrete output (one sell-page link plus payment-record status and estimated payout). It explicitly contrasts itself with the sibling set_listing_terms, so an agent can distinguish the tools without opening either 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?
Names the alternative tool and the condition that selects it: use set_listing_terms to change a name already listed, implying this tool is for preparing a new bulk listing. It also states a prerequisite (each name needs an _odvs-pay TXT record naming the seller's Square account), which is exactly the kind of gating condition an agent needs before invoking.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
purchase_appraisalPurchase an appraisal within a funded grantADestructiveIdempotentInspect
Buy the existing current_appraisal service using a prepaid account and an operator's existing spending grant. Connect with Authorization: Bearer ad_agent_; never put credentials in arguments. Supply an explicit operationId, grantId, domain and maxSpendUsd. The original purchase route enforces authentication, expiry, domain/product permissions, balance, grant limits and the shared engine budget. One purchase invocation per MCP request; retain the receipt. Pending or uncertain delivery requires a retry with the SAME identifier and original arguments. This tool cannot fund the account, create grants or raise a limit. Configuration does not guarantee live readiness; the route's response is authoritative.
| Name | Required | Description | Default |
|---|---|---|---|
| domain | Yes | The domain to appraise. | |
| grantId | Yes | An existing operator-issued grant identifier. | |
| maxSpendUsd | Yes | Explicit maximum USD-equivalent service-credit spend for this operation; no inferred or automatically increased ceiling. | |
| operationId | Yes | Caller-chosen purchase identifier. Persist it before calling and reuse it with the original arguments after a lost reply; never generate a new identifier for a retry. |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Beyond the annotations it discloses substantial behavior: bearer-token auth via header with credentials forbidden in arguments, one purchase per MCP request, receipt retention, same-identifier retry on lost replies, and the explicit statement that configuration does not guarantee live readiness and the route response is authoritative. This is exactly the mutation/auth/idempotency context an agent needs.
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?
Purpose and credentials lead the description, and the seven sentences are dense with operational constraints rather than filler. It is on the long side, but each sentence carries a distinct rule (retry, budget, limits) that would otherwise be lost.
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 describe return values, and it still covers authentication, idempotent retry semantics, enforcement conditions, and explicit non-capabilities. An agent has everything required to invoke this purchase safely.
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 four parameters are already fully documented, and the description largely repeats them ('Supply an explicit operationId, grantId, domain and maxSpendUsd'). Its only added nuance is the reminder that retries reuse the same identifier and that the spend ceiling will not be inferred or auto-raised, which the schema already conveys.
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 and resource: buying the current_appraisal service against a prepaid account and a funded grant, with the required identifiers named. However, it never distinguishes itself from the near-identical sibling buy_appraisal, so an agent cannot tell from the text alone which of the two to select.
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 context of use (prepaid account plus an existing operator grant) and explicit exclusions ('cannot fund the account, create grants or raise a limit'). It does not, however, name sibling alternatives such as buy_appraisal or inspect_agent_grants, so the routing decision remains partly inferential.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
quote_domain_purchaseQuote a domain purchaseARead-onlyIdempotentInspect
Get the live price, protection terms and requirements for buying one listed domain, plus the checkout link to give the cardholder. Use read_for_sale_dns instead for a name that may not be listed here, and get_seller_listing for the seller's own view of a listing. Read-only. Never reveals the seller's floor and never evaluates an offer. Payment is a held card authorization on the seller's own account; the site brokers no sale. Only listed domains can be quoted.
| Name | Required | Description | Default |
|---|---|---|---|
| domain | Yes | The listed domain name to quote, such as example.com. |
Output Schema
| Name | Required | Description |
|---|---|---|
| domain | Yes | |
| escrow | No | |
| verify | No | |
| checkout | No | |
| appraisal | No | Null when listed by DNS. |
| available | Yes | False when the sale needs escrow, not card checkout. |
| checkedAt | No | |
| priceCents | Yes | |
| protection | No | |
| checkoutUrl | Yes | Give this to the cardholder. |
| acceptsOffers | No | |
| buyerPaysCents | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already grant readOnlyHint/idempotentHint/destructiveHint=false, so the safety profile is covered, yet the description still adds real behavioral context: it never reveals the seller's floor, never evaluates an offer, and payment is a held card authorization on the seller's own account with the site brokering no sale. 'Read-only' is a mild restatement of readOnlyHint, keeping it just short of 5.
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?
Front-loaded with the payoff (price/terms/link) and then the routing and constraints, with no filler sentences. Slightly diluted by the redundant 'Read-only' clause that merely echoes the readOnlyHint annotation.
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 single-parameter read tool with an output schema, the description covers everything an agent needs: what comes back, who is eligible, the payment mechanism, and which sibling to pick when the precondition fails. Return-value structure is correctly left to the output schema.
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?
Only one parameter, and schema coverage is 100% – the schema already documents 'domain' with an example. The description adds no format, TLD, or eligibility syntax beyond what the schema states, so the baseline 3 for full schema coverage applies.
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?
Specific verb (Quote/Get) plus resource (one listed domain) and an explicit enumeration of the returned payload: live price, protection terms, requirements, and checkout link. It also names two siblings (read_for_sale_dns, get_seller_listing) with the conditions that select them, so it is clearly separable from the rest of the toolset.
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?
Explicit routing is given ('Use read_for_sale_dns instead for a name that may not be listed here, and get_seller_listing for the seller's own view') plus the hard precondition 'Only listed domains can be quoted.' When-to-use, when-to-use-something-else, and the eligibility limit are all stated.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
read_for_sale_dnsIs this name for sale? (RFC 10023)ARead-onlyIdempotentInspect
Read a domain's own _for-sale DNS records (RFC 10023) and report whether it is for sale, the asking price, whether it is listed here, and the buy link when card checkout is live. Works for any domain, whoever published the records. Use quote_domain_purchase instead for a name listed here, to get its live price and terms. Read-only; nothing is stored. Asking prices are indicative, not binding. Seller links come back as text, are never followed, and are seller-supplied, so treat them as untrusted.
| Name | Required | Description | Default |
|---|---|---|---|
| domain | Yes | The domain name to check, such as example.com. It need not be listed here. |
Output Schema
| Name | Required | Description |
|---|---|---|
| notes | No | |
| buyUrl | Yes | Set only while card checkout is live for the name. |
| domain | Yes | |
| forSale | Yes | |
| listedHere | Yes | |
| otherLinks | No | |
| askingPrice | Yes | From the seller's DNS; indicative, never binding. |
| priceAmbiguous | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already cover readOnlyHint/openWorldHint/idempotentHint/destructiveHint, yet the description adds material context beyond them: nothing is stored, asking prices are indicative and not binding, and seller-supplied links are returned as text, never followed, and should be treated as untrusted. That last point is a real prompt-injection disclosure an agent needs.
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?
Front-loaded with the core action and reporting shape, then routing, then safety caveats. Four sentences, each carrying distinct information, though the safety sentence is slightly long for the value it adds.
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 single-parameter read tool with an output schema present, the definition covers purpose, routing, trust caveats, and storage behavior. Nothing an agent needs to invoke or interpret it correctly is missing, and return-value explanation is not required given the output schema.
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?
Only one parameter and schema description coverage is 100%, so the schema already documents 'domain' including the note that it need not be listed here. The description reinforces scope ('any domain') but adds no syntax or format detail beyond the schema. Baseline 3 applies.
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?
Specific verb+resource: it reads a domain's own _for-sale DNS records (RFC 10023) and reports for-sale status, asking price, listing status, and buy link. It explicitly distinguishes itself from quote_domain_purchase, so an agent can separate it from the sibling set without opening either 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?
States the scope condition ('Works for any domain, whoever published the records') and names the alternative with the exact switching condition: use quote_domain_purchase instead for a name listed here, to get its live price and terms. Nothing is left to inference.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
read_for_sale_pageRead a parked for-sale pageBRead-onlyIdempotentInspect
Check a domain's parked for-sale page from the figures in its forwarding link. Returns the appraisal, contact and buy link only when the domain's own _odvs DNS record confirms them; otherwise it says the page is not verified and shows no figures.
| Name | Required | Description | Default |
|---|---|---|---|
| domain | Yes | A domain name such as example.com. | |
| lowUsd | Yes | ||
| contact | Yes | ||
| fairUsd | Yes | ||
| highUsd | Yes | ||
| confidence | Yes | ||
| methodologyRev | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
| buyNow | No | |
| domain | Yes | |
| contact | Yes | |
| dnsProof | Yes | |
| verified | Yes | |
| appraisal | Yes | |
| offerEmail | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already cover the safety profile (readOnly, idempotent, non-destructive, open world), so credit goes to the description for adding the DNS-confirmation gate: figures are returned only when the domain's _odvs record confirms them, otherwise the page is reported unverified with no figures. That is genuinely useful behavioral context beyond the 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 tight sentences that front-load the action and then the verification condition. Nothing is padded, though the output/input ambiguity between 'Returns the appraisal, contact' and the required input fields slightly muddies an otherwise clean structure.
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?
An output schema exists, so return values need not be restated, and the annotations carry safety. However, for a 7-required-parameter tool at 14% schema coverage, the description leaves the six undocumented parameters unexplained and blurs whether appraisal/contact are inputs or outputs, so it is only minimally 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?
Schema description coverage is only 14% (just 'domain' is documented), so the description is expected to compensate for the other six parameters. It vaguely references 'the appraisal, contact and buy link' but never explains fairUsd/lowUsd/highUsd/confidence/methodologyRev/contact, and oddly frames appraisal and contact as returned values while the schema requires them as inputs.
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 and resource: 'Check a domain's parked for-sale page from the figures in its forwarding link.' It is clear what the tool reads, though it never names or contrasts with the closely related read_for_sale_dns sibling, so sibling differentiation 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?
No when-to-use guidance is given relative to alternatives such as read_for_sale_dns, appraise_domain, or quote_domain_purchase. The only framing is the verification condition, which describes behavior rather than when an agent should choose this tool.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
run_bracketRun a domain-name bracketARead-onlyIdempotentInspect
Run a single-elimination bracket of 2 to 8 domain names and return the seeded field, every match and one champion. Use compare_domains instead when you need estimated values or want to know which orderings are not separable; this result is ordinal, tiers and winners only. Value decides each match with fixed tie-breaks, so the same field always crowns the same champion. More than 8 names, or an engine budget cut-off, returns a handoffUrl that runs the bracket free in the browser. Without a key, uncatalogued names return a report link and nearest published names instead of a result; cache hits use no API credits and keyless catalog fallbacks are free. A default-profile cache miss with an authorized write-scope paid key (HTTP header Authorization: Bearer ad_live_...) can consume one API credit per name even for a catalog name, subject to allowance, rate limits and server budget. Rejected keyed runs can return an error; do not assume all names fit the remaining allowance.
| Name | Required | Description | Default |
|---|---|---|---|
| domains | Yes | Names to enter, such as example.com. 2 to 8 run here; 9 to 16 return handoffUrl only. |
Output Schema
| Name | Required | Description |
|---|---|---|
| next | No | The one step that moves this name forward: {tool, arguments} to call next on this server, or {url} to open; why says what it gets. Null when nothing here does (for a free name, registering it at a registrar). |
| citeAs | Yes | A structured citation. Quote `text` or build your own from the fields. Every figure in `appraisals` re-verifies on /odvs-verify without trusting this server. Tools whose answer is not an appraisal (a bracket, which withholds estimates by contract, and the recorded-sales tools, whose rows are not hashed) return an empty `appraisals`. A stored interval also has no ODVS record: its artifact digest is provenance, not a standalone proof of these projected fields. |
| rounds | Yes | Rounds in order. Each match names both sides, the winner, and why it advanced (value, factors, tiebreak, or bye). |
| seeded | Yes | Entrants in seed order, highest appraised value first. |
| champion | Yes | Null only when the field was handed off without running here. |
| citation | Yes | |
| handoffUrl | No | Present when this request could not run every name here (over the tool cap, or cut off by the per-request engine budget): a link to the free page that runs the same deterministic computation for all of them in the reader's browser. Give it to the user rather than retrying. |
| notAppraised | No | Names that did not run here (over the tool cap, or cut off by the request budget). They never entered the bracket - they were not eliminated. See handoffUrl. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations only declare readOnly/idempotent/openWorld; the description adds far more: determinism ('the same field always crowns the same champion'), credit consumption ('one API credit per name'), auth requirements (Authorization: Bearer ad_live_..., write-scope key), cache-hit economics, keyless fallback behavior, and honest failure modes ('Rejected keyed runs can return an error'). This is exactly the beyond-annotation context the bar asks for.
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?
Front-loaded with purpose, then alternative, then behavior — a sound order, and nearly every sentence carries operational signal. It is dense and billing-heavy toward the end, where the credit/allowance/rate-limit caveats stack up and could be tightened, but nothing is truly wasted.
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?
An output schema exists, yet the description still names the returns (seeded field, matches, champion) and covers auth, cost, budget cutoffs, cache behavior, and error cases. For a compute tool with a monetization surface, an agent has everything needed to call it and anticipate 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 coverage is 100% and the single parameter's tiered behavior (2-8 vs 9-16) is already documented in the schema description. The prose repeats rather than extends that, so baseline 3 is correct — no added syntax, format, or edge-case detail beyond the structured field.
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+resource+output: 'Run a single-elimination bracket of 2 to 8 domain names and return the seeded field, every match and one champion.' It also names the sibling it is not (compare_domains) and the exact distinction (ordinal tiers vs estimated values), so an agent can separate it from the ~25 other tools here without opening a 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?
Explicit routing: 'Use compare_domains instead when you need estimated values or want to know which orderings are not separable.' It also gives boundary conditions (2-8 run here, over 8 or budget cutoff returns handoffUrl) and the keyed vs keyless paths, so the when/when-not decision is fully specified.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
search_domain_listingsSearch domains for saleARead-onlyIdempotentInspect
Filter, sort and page the domains listed for sale by their DNS-verified owners; each listing has a fixed price, the appraisal with its range and a buy link. Set mode to changes to get listings listed, changed or removed since a cursor, and poll that instead of re-searching. Use ask_domain_market instead to search from a plain sentence, and quote_domain_purchase for the live terms of one listing. Reads live inventory, runs no appraisal and changes nothing. No matches returns an empty list.
| Name | Required | Description | Default |
|---|---|---|---|
| q | No | Part of the domain name to match. | |
| tld | No | Suffix without the dot, such as com or io. | |
| mode | No | search (default) filters live inventory. changes returns listings listed, changed or removed since cursor. | |
| sort | No | Result order. Defaults to newest. | |
| limit | No | Listings per page, 1 to 100. | |
| cursor | No | For mode changes: the cursor from the previous reply. Omit it for the last 24 hours. | |
| offset | No | Listings to skip, for paging. | |
| maxLength | No | Maximum length of the name, 1 to 63 characters. | |
| acceptsOffers | No | true returns only listings that accept offers; false returns only fixed-price listings. | |
| maxPriceCents | No | Maximum fixed price in US cents. | |
| minPriceCents | No | Minimum fixed price in US cents. |
Output Schema
| Name | Required | Description |
|---|---|---|
| count | No | |
| total | No | |
| cursor | No | |
| events | No | |
| hasMore | No | |
| listings | No | |
| advertised | No | The same filters over names their owners advertise for sale in their own DNS (RFC 10023 _for-sale), from the last scan. Not listings here: the price is indicative and buyUrl is the owner's. Null when acceptsOffers is set. |
| nextOffset | No | |
| generatedAt | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnly, idempotent, non-destructive and open-world, so the safety profile is covered; the description still adds value by stating it reads live inventory, runs no appraisal, changes nothing, and returns an empty list on no matches. The main behavioral gap is that polling cadence/rate expectations for the changes mode are not described.
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?
Front-loaded with the core action and scope, then progressively adds mode behavior, alternatives and guarantees in a compact paragraph with no filler. It is slightly dense for a single sentence-chain, but every clause carries 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?
With 11 optional parameters, an output schema present, and full annotation coverage, the description covers the essentials: what it searches, how to page/poll, what a listing contains, and that it is a pure read. Minor gaps remain around paging interaction between offset and cursor, but nothing needed to invoke it correctly is missing.
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% and the schema already explains every parameter, including cursor semantics for mode=changes and the cents units for price bounds. The description's mode/cursor discussion largely restates what the schema provides, so it lands at the baseline rather than adding new parameter meaning.
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 set (filter, sort, page) over a specific resource (domains listed for sale by DNS-verified owners), including the distinctive scope that these are verified owner listings with fixed prices and appraisals. It names the sibling tools it is not (ask_domain_market, quote_domain_purchase), so an agent can disambiguate without opening any 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?
Gives explicit routing rules: use ask_domain_market for a plain-sentence search, quote_domain_purchase for the live terms of a single listing, and switch to mode=changes with polling instead of re-searching. The when-to-use and when-to-use-something-else conditions are both spelled out.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
search_recorded_salesSearch recorded domain salesARead-onlyIdempotentInspect
Return up to 5 real recorded domain sales from a fixed public sample, filtered by keyword, TLD, price, year or venue, with counts and aggregates. Runs no appraisal. Use find_comparable_sales instead for the sales nearest one specific name, and appraise_domain for a value. Repeating or varying queries cannot surface more rows than the sample holds. Counts and aggregates describe the full corpus only when at least 25 records match; the population field says which. Aggregates are rounded to two significant figures. An empty result means absent from the sample, not from the corpus. Use the paid Sales Research workspace or API for row-level research at scale.
| Name | Required | Description | Default |
|---|---|---|---|
| tld | No | Restrict to one TLD without the dot, such as com or io. | |
| sort | No | Sort key. Defaults to price, highest first. | |
| limit | No | Rows to return, 1 to 5. Defaults to 5. | |
| query | No | Substring matched against domain, category and venue. | |
| venue | No | Substring matched against the sale venue. | |
| yearTo | No | Latest sale year, inclusive. | |
| maxPrice | No | Maximum recorded sale price in USD. | |
| minPrice | No | Minimum recorded sale price in USD. | |
| yearFrom | No | Earliest sale year, inclusive. |
Output Schema
| Name | Required | Description |
|---|---|---|
| rows | Yes | |
| stats | No | Rounded to two significant figures. Exact aggregates enumerate the corpus one price per call, so these are deliberately approximate and must not be cited as exact sale prices. |
| total | Yes | Matching records. Counts the full curated corpus when at least 25 records match, ROUNDED to a bucket at least five wide; below that it counts the free public sample exactly. Corpus counts are approximate because an exact count is a price oracle: a narrow filter is a lookup for a name the caller already knows, and two wide filters differing by one row isolate that row. Read it with 'population' to know which set it counts. |
| citeAs | Yes | A structured citation. Quote `text` or build your own from the fields. Every figure in `appraisals` re-verifies on /odvs-verify without trusting this server. Tools whose answer is not an appraisal (a bracket, which withholds estimates by contract, and the recorded-sales tools, whose rows are not hashed) return an empty `appraisals`. A stored interval also has no ODVS record: its artifact digest is provenance, not a standalone proof of these projected fields. |
| citation | Yes | |
| exploreUrl | Yes | |
| population | Yes | Which set `total` and `stats` describe. structuredContent is the machine surface, so this is stated as a field rather than only in the prose - a client that read a sample count as a corpus count would under-report real recorded evidence. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations only declare read-only/idempotent/closed-world; the description goes well beyond them by disclosing the fixed-sample ceiling of 5 rows, that aggregates describe the full corpus only at a 25-record threshold (governed by the population field), two-significant-figure rounding, and the meaning of an empty result. These are exactly the non-obvious traits an agent would otherwise misread.
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 core action and its sample limitation are front-loaded, followed by alternative routing and then the aggregation/empty-result caveats. Every sentence carries distinct, decision-relevant information rather than restating table stakes.
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 annotations, 100% schema coverage and an output schema handling return values, the description still supplies the interpretive context an agent needs (sample vs corpus, threshold behavior, rounding, empty-result semantics). Nothing required to select or call it correctly is missing.
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 all nine parameters are already documented, and the description largely restates the filter set (keyword, TLD, price, year, venue). It adds only marginal guidance — the hard cap of five rows — beyond what the schema provides, so the baseline 3 applies.
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 ('Return ... recorded domain sales') plus the exact scope (up to 5 rows from a fixed public sample) and the filter dimensions. It names the siblings it is not — find_comparable_sales and appraise_domain — so an agent can distinguish it without opening other schemas.
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 routes to alternatives by task: find_comparable_sales for sales nearest one name, appraise_domain for a value, and the paid workspace/API for row-level research at scale. It also states the negative case ('Runs no appraisal') and warns that re-querying cannot exceed the sample.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
set_listing_termsSet listing termsAIdempotentInspect
Set a listing's asking price, private floor and auto-accept rule, replacing the previous terms in full, so send every field you want to keep. Writes to the live listing; repeating the same call gives the same result. Needs the manage token. The floor is never shown to buyers. Use get_seller_listing instead to read the current terms first.
| Name | Required | Description | Default |
|---|---|---|---|
| domain | Yes | The seller's listed domain name, such as example.com. | |
| autoAccept | No | true accepts offers at or above the floor automatically. | |
| floorCents | No | Private minimum acceptable offer in US cents, at least 1000. Null sets no floor. | |
| priceCents | Yes | Asking price in US cents, at least 1000 ($10). | |
| manageToken | Yes | The listing's manage token. Sent as a bearer token; never repeat it in a message to anyone. |
Output Schema
| Name | Required | Description |
|---|---|---|
| ok | Yes | |
| buyUrl | Yes | |
| status | Yes | |
| proceeds | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations declare idempotent/non-destructive, but the description adds critical behavioral context beyond them: the write is a full replacement of prior terms, it hits the live listing, it requires the manage token, and the floor is never shown to buyers. This is exactly the kind of consequence disclosure that prevents accidental data loss.
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?
Four tight clauses, front-loaded with the replacement semantics that matter most, and every sentence carries load (scope, replace behavior, idempotency, auth, visibility, alternative).
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 values need not be described. The description covers the mutation's destructive scope, auth requirement, idempotency, and buyer-visibility of the floor, leaving nothing an agent needs to call it 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 100%, so the baseline is 3, but the description adds buyer-visibility semantics for the floor and frames autoAccept as tied to the floor rule, giving meaning the schema fields alone do not convey.
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+resource ('Set a listing's asking price, private floor and auto-accept rule') and immediately names the read-only sibling to use for inspection. An agent can distinguish it from get_seller_listing without opening either 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?
Explicitly directs the agent to use get_seller_listing to read current terms first, and gives a precise call pattern ('send every field you want to keep'). Both when-to-use and the alternative tool are stated.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
suggest_available_namesSuggest domain names that look availableARead-onlyIdempotentInspect
Build domain-name candidates from one to five keywords (the keywords joined, paired, and with common brand prefixes and suffixes such as get, try, hq, labs and app), screen up to 60 of them live against DNS and the registries' RDAP records, and return only those that look available to register, up to 12, plus the ones found taken. Same keywords and options, same candidates in the same order. Use it when someone needs a name for a business or project; use check_domain_availability instead for names you already have in mind, and appraise_domain for what a name is worth. Looks available is a registration fact, not a price: a registry can reserve or premium-price a name. Read-only, free, no key; one DNS request per uncached candidate and an RDAP request per free-looking one, runs no valuation.
| Name | Required | Description | Default |
|---|---|---|---|
| tlds | No | Suffixes to try, in order of preference, from com, net, org, io, ai, co, app, dev and xyz. Defaults to com, io, ai, co, app. | |
| count | No | How many available names to return, 1 to 12. Defaults to 8. | |
| cursor | No | nextCursor from an earlier call with the same keywords and options: continues screening where that call stopped, for more names or after a lookup limit. | |
| keywords | Yes | One to five keywords or a short phrase, such as "solar bakery" or ["bright", "path"]. Filler words (the, for, company) are dropped. | |
| maxLength | No | Longest label to suggest, before the suffix, 4 to 20 characters. Defaults to 15. |
Output Schema
| Name | Required | Description |
|---|---|---|
| limit | No | Present with pending: code lookup_limit, retryable, retryAfterSeconds, and retry ({tool, arguments}: send it unchanged after that wait to continue exactly where this call stopped). Where a key lifts the limit, upgrade says how. |
| taken | No | Screened candidates that are registered, first 10. |
| budget | No | This request's uncached-lookup budget: lane (free or keyed), used, limit, remaining, and keyRejected when a key was sent and refused. Cached names cost nothing. |
| caveat | Yes | |
| citeAs | Yes | A structured citation. Quote `text` or build your own from the fields. Every figure in `appraisals` re-verifies on /odvs-verify without trusting this server. Tools whose answer is not an appraisal (a bracket, which withholds estimates by contract, and the recorded-sales tools, whose rows are not hashed) return an empty `appraisals`. A stored interval also has no ODVS record: its artifact digest is provenance, not a standalone proof of these projected fields. |
| pending | No | Names not checked because the lookup limit was reached. limit.retry is the call that checks them. |
| citation | Yes | |
| keywords | Yes | |
| screened | Yes | Candidates looked up. |
| nextCursor | No | Pass as cursor to continue screening the same keywords from where this call stopped (more names, or after a lookup limit). Null when every candidate has been screened. |
| suggestions | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Beyond the readOnly/idempotent/openWorld annotations, it discloses the screening cap (up to 60), the return cap (up to 12 plus taken names), per-call request costs (one DNS per uncached candidate, one RDAP per free-looking one), that no key is required, and the important caveat that 'looks available' is a registration fact, not a price — a registry may reserve or premium-price.
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?
Front-loaded with purpose, then usage routing, then constraints — every sentence carries information. It is dense and somewhat long, and 'Read-only, free, no key' partly restates the readOnlyHint annotation, but there is little true waste.
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 a full output schema present, return values need not be described, and everything an agent needs to invoke correctly — inputs, screening behavior, cost model, and the availability-vs-price caveat — is covered.
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%, so the baseline is 3, but the description adds semantics the schema does not: how keywords are transformed (joined, paired, with brand prefixes/suffixes like get/try/hq), the relationship between keyword count and the 60-candidate screen, and the determinism of candidate ordering for cursor reuse.
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?
Opens with a specific verb+resource: build domain-name candidates from keywords and screen them against DNS/RDAP, returning available ones. It explicitly distinguishes itself from check_domain_availability and appraise_domain by name, so an agent can route correctly without opening schemas.
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?
States the triggering scenario (a name for a business or project) and names two alternatives with the condition that selects each: check_domain_availability for names already in mind, appraise_domain for valuation. No ambiguity about when to pick this tool.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
verify_certificateVerify an audit.domains certificateARead-onlyIdempotentInspect
Check an audit.domains certificate from its verifier URL or serial with two separate checks. Integrity recomputes the SHA-256 digest of the printed fields and needs the full URL; it proves the fields were not altered, not who made them. Issuer authenticity makes one request to the issuer's public verify endpoint to see whether a signed record for the serial reproduces. verified is true only when every check that could run passed; a record that names no signer is not verified. Failures carry a reason code such as integrity_mismatch or not_issued. Runs no valuation.
| Name | Required | Description | Default |
|---|---|---|---|
| url | No | Verifier URL printed on the certificate, https://audit.domains/verify/<serial>?p=<token>. Runs both the integrity and issuer checks. | |
| serial | No | Certificate serial alone. Runs the issuer check only. |
Output Schema
| Name | Required | Description |
|---|---|---|
| input | No | |
| notes | No | |
| citeAs | Yes | A structured citation. Quote `text` or build your own from the fields. Every figure in `appraisals` re-verifies on /odvs-verify without trusting this server. Tools whose answer is not an appraisal (a bracket, which withholds estimates by contract, and the recorded-sales tools, whose rows are not hashed) return an empty `appraisals`. A stored interval also has no ODVS record: its artifact digest is provenance, not a standalone proof of these projected fields. |
| issuer | Yes | status is authentic, not_issued, unsigned_legacy_certificate, unverified_no_key_named, signature_mismatch, issuer_key_unavailable, unreachable or bad_response. Carries the endpoint queried, httpStatus, signingKeyId and the raw response. |
| citation | Yes | |
| verified | Yes | True only when every check that could run passed and none failed. |
| integrity | Yes | status is match, mismatch or not_checked. When checked: canonicalString, carriedDigest, recomputedDigest, fields. |
| retryable | No | True when repeating the call later may change the outcome. |
| semantics | No | |
| consistency | No | The link's domain, serial, value and date against the issuer's signed record. status is match, mismatch or not_checked. |
| reasonCodes | Yes | Empty when verified. |
| schemaVersion | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnly/idempotent/non-destructive/openWorld, so the safety profile is covered. The description adds real behavioral context beyond that: it makes one network request to the issuer's public endpoint, defines the verified semantics (true only if every runnable check passed, no-signer means not verified), and enumerates failure reason codes.
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?
Front-loaded with the core action and the two checks, then the verified semantics and reason codes. Dense but every sentence carries information; the closing 'Runs no valuation' earns its place as a disambiguator against appraisal siblings, though the passage is slightly long.
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?
An output schema exists, so return values need not be explained. The description still covers the semantics an agent needs to interpret results (verified flag behavior, no-signer case, reason codes) and the two input modes, leaving no meaningful gap.
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 url and serial, including the exact URL format and that serial runs issuer-only. The description reinforces that integrity needs the full URL but adds no syntax or meaning beyond what the schema provides, so baseline 3 applies.
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 (verify/check) and resource (audit.domains certificate) and decomposes it into the two concrete checks it performs. It also distinguishes itself from sibling tools by noting 'Runs no valuation', which separates it from appraise_domain and the appraisal/purchase siblings.
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?
Clearly explains the two invocation modes: a full verifier URL runs both the integrity and issuer checks, while a serial alone runs only the issuer check. It doesn't name a sibling alternative or an explicit when-not-to-use, but the mode-selection guidance is clear and directly actionable.
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.
1 tool update
- Changed
appraise_domain1 field changed- added
Output schema / properties / certificateAdded value: +{ + "description": "Present with a figure while certificates are on sale: the checkout link (url) where the user buys a verifiable certificate of this appraisal, for a listing or a negotiation.", + "properties": { + "priceUsd": { + "type": "number" + }, + "sku": { + "type": "string" + }, + "url": { + "type": "string" + } + }, + "type": "object" +}
1 tool update
- Changed
search_domain_listings1 field changed- added
Output schema / properties / advertisedAdded value: +{ + "description": "The same filters over names their owners advertise for sale in their own DNS (RFC 10023 _for-sale), from the last scan. Not listings here: the price is indicative and buyUrl is the owner's. Null when acceptsOffers is set.", + "properties": { + "checkedOn": { + "format": "date", + "type": "string" + }, + "names": { + "items": { + "properties": { + "appraisalUrl": { + "type": "string" + }, + "askUsd": { + "type": [ + "number", + "null" + ] + }, + "buyUrl": { + "type": [ + "string", + "null" + ] + }, + "domain": { + "type": "string" + }, + "recordUrl": { + "type": "string" + }, + "sellerHost": { + "type": [ + "string", + "null" + ] + } + }, + "type": "object" + }, + "type": "array" + }, + "nextOffset": { + "type": [ + "integer", + "null" + ] + }, + "note": { + "type": "string" + }, + "total": { + "type": "integer" + } + }, + "type": [ + "object", + "null" + ] +}
1 tool update
- Changed
appraise_domain6 fields changed- added
Output schema / properties / agentTrialAdded value: +{ + "description": "Present with notAppraised (Lane 04, F4): free server-side fresh appraisals this caller can still claim (remaining) and how a trial is obtained (how). 0 with operator_required means an operator-issued grant is the only route today.", + "properties": { + "how": { + "type": "string" + }, + "remaining": { + "type": "number" + } + }, + "type": "object" +} - added
Output schema / properties / unattended / properties / noteAdded value: +{ + "type": "string" +} - added
Output schema / properties / unattended / properties / purchaseRequestAdded value: +{ + "type": "object" +} - added
Output schema / properties / unattended / properties / recipeHashAdded value: +{ + "type": "string" +} - added
Output schema / properties / unattended / properties / recipeIdAdded value: +{ + "type": "string" +} - added
Output schema / properties / unattended / properties / recoverRequestAdded value: +{ + "type": "object" +}
11 tool updates
- Changed
appraise_domain3 fields changed- changed
Output schema / properties / appraisal / descriptionPrevious value: -"Absent when notAppraised is present: the name is outside the published catalog and was not computed on this server."New value: +"Absent when storedFigure or notAppraised is present: no full appraisal was computed on this server for this response." - changed
Output schema / properties / citeAs / descriptionPrevious value: -"A structured citation. Quote `text` or build your own from the fields. Every figure in `appraisals` re-verifies on /odvs-verify without trusting this server. Tools whose answer is not an appraisal (a bracket, which withholds estimates by contract, and the recorded-sales tools, whose rows are not hashed) return an empty `appraisals`."New value: +"A structured citation. Quote `text` or build your own from the fields. Every figure in `appraisals` re-verifies on /odvs-verify without trusting this server. Tools whose answer is not an appraisal (a bracket, which withholds estimates by contract, and the recorded-sales tools, whose rows are not hashed) return an empty `appraisals`. A stored interval also has no ODVS record: its artifact digest is provenance, not a standalone proof of these projected fields." - added
Output schema / properties / storedFigureAdded value: +{ + "additionalProperties": false, + "description": "Only the verified value interval already public in the report HTML, read from a stored canonical-engine result when no full MCP result or catalog figure is available. No scores, comparables or ODVS record. sha256 names the stored source artifact, not a standalone proof of this projection.", + "properties": { + "dataEdition": { + "type": "string" + }, + "domain": { + "type": "string" + }, + "fairUsd": { + "minimum": 0, + "type": "number" + }, + "highUsd": { + "minimum": 0, + "type": "number" + }, + "lowUsd": { + "minimum": 0, + "type": "number" + }, + "methodologyVersion": { + "description": "Active methodology configuration in the memo identity; a preserved payload method stamp can differ.", + "type": "string" + }, + "sha256": { + "pattern": "^[0-9a-f]{64}$", + "type": "string" + } + }, + "required": [ + "domain", + "fairUsd", + "lowUsd", + "highUsd", + "methodologyVersion", + "dataEdition", + "sha256" + ], + "type": "object" +}
- Changed
check_domain_availability1 field changed- changed
Output schema / properties / citeAs / descriptionPrevious value: -"A structured citation. Quote `text` or build your own from the fields. Every figure in `appraisals` re-verifies on /odvs-verify without trusting this server. Tools whose answer is not an appraisal (a bracket, which withholds estimates by contract, and the recorded-sales tools, whose rows are not hashed) return an empty `appraisals`."New value: +"A structured citation. Quote `text` or build your own from the fields. Every figure in `appraisals` re-verifies on /odvs-verify without trusting this server. Tools whose answer is not an appraisal (a bracket, which withholds estimates by contract, and the recorded-sales tools, whose rows are not hashed) return an empty `appraisals`. A stored interval also has no ODVS record: its artifact digest is provenance, not a standalone proof of these projected fields."
- Changed
check_portfolio_renewals1 field changed- changed
Output schema / properties / citeAs / descriptionPrevious value: -"A structured citation. Quote `text` or build your own from the fields. Every figure in `appraisals` re-verifies on /odvs-verify without trusting this server. Tools whose answer is not an appraisal (a bracket, which withholds estimates by contract, and the recorded-sales tools, whose rows are not hashed) return an empty `appraisals`."New value: +"A structured citation. Quote `text` or build your own from the fields. Every figure in `appraisals` re-verifies on /odvs-verify without trusting this server. Tools whose answer is not an appraisal (a bracket, which withholds estimates by contract, and the recorded-sales tools, whose rows are not hashed) return an empty `appraisals`. A stored interval also has no ODVS record: its artifact digest is provenance, not a standalone proof of these projected fields."
- Changed
compare_domains1 field changed- changed
Output schema / properties / citeAs / descriptionPrevious value: -"A structured citation. Quote `text` or build your own from the fields. Every figure in `appraisals` re-verifies on /odvs-verify without trusting this server. Tools whose answer is not an appraisal (a bracket, which withholds estimates by contract, and the recorded-sales tools, whose rows are not hashed) return an empty `appraisals`."New value: +"A structured citation. Quote `text` or build your own from the fields. Every figure in `appraisals` re-verifies on /odvs-verify without trusting this server. Tools whose answer is not an appraisal (a bracket, which withholds estimates by contract, and the recorded-sales tools, whose rows are not hashed) return an empty `appraisals`. A stored interval also has no ODVS record: its artifact digest is provenance, not a standalone proof of these projected fields."
- Changed
find_comparable_sales1 field changed- changed
Output schema / properties / citeAs / descriptionPrevious value: -"A structured citation. Quote `text` or build your own from the fields. Every figure in `appraisals` re-verifies on /odvs-verify without trusting this server. Tools whose answer is not an appraisal (a bracket, which withholds estimates by contract, and the recorded-sales tools, whose rows are not hashed) return an empty `appraisals`."New value: +"A structured citation. Quote `text` or build your own from the fields. Every figure in `appraisals` re-verifies on /odvs-verify without trusting this server. Tools whose answer is not an appraisal (a bracket, which withholds estimates by contract, and the recorded-sales tools, whose rows are not hashed) return an empty `appraisals`. A stored interval also has no ODVS record: its artifact digest is provenance, not a standalone proof of these projected fields."
- Changed
inspect_domain1 field changed- changed
Output schema / properties / citeAs / descriptionPrevious value: -"A structured citation. Quote `text` or build your own from the fields. Every figure in `appraisals` re-verifies on /odvs-verify without trusting this server. Tools whose answer is not an appraisal (a bracket, which withholds estimates by contract, and the recorded-sales tools, whose rows are not hashed) return an empty `appraisals`."New value: +"A structured citation. Quote `text` or build your own from the fields. Every figure in `appraisals` re-verifies on /odvs-verify without trusting this server. Tools whose answer is not an appraisal (a bracket, which withholds estimates by contract, and the recorded-sales tools, whose rows are not hashed) return an empty `appraisals`. A stored interval also has no ODVS record: its artifact digest is provenance, not a standalone proof of these projected fields."
- Changed
list_offers1 field changed- changed
Output schema / properties / citeAs / descriptionPrevious value: -"A structured citation. Quote `text` or build your own from the fields. Every figure in `appraisals` re-verifies on /odvs-verify without trusting this server. Tools whose answer is not an appraisal (a bracket, which withholds estimates by contract, and the recorded-sales tools, whose rows are not hashed) return an empty `appraisals`."New value: +"A structured citation. Quote `text` or build your own from the fields. Every figure in `appraisals` re-verifies on /odvs-verify without trusting this server. Tools whose answer is not an appraisal (a bracket, which withholds estimates by contract, and the recorded-sales tools, whose rows are not hashed) return an empty `appraisals`. A stored interval also has no ODVS record: its artifact digest is provenance, not a standalone proof of these projected fields."
- Changed
run_bracket1 field changed- changed
Output schema / properties / citeAs / descriptionPrevious value: -"A structured citation. Quote `text` or build your own from the fields. Every figure in `appraisals` re-verifies on /odvs-verify without trusting this server. Tools whose answer is not an appraisal (a bracket, which withholds estimates by contract, and the recorded-sales tools, whose rows are not hashed) return an empty `appraisals`."New value: +"A structured citation. Quote `text` or build your own from the fields. Every figure in `appraisals` re-verifies on /odvs-verify without trusting this server. Tools whose answer is not an appraisal (a bracket, which withholds estimates by contract, and the recorded-sales tools, whose rows are not hashed) return an empty `appraisals`. A stored interval also has no ODVS record: its artifact digest is provenance, not a standalone proof of these projected fields."
- Changed
search_recorded_sales1 field changed- changed
Output schema / properties / citeAs / descriptionPrevious value: -"A structured citation. Quote `text` or build your own from the fields. Every figure in `appraisals` re-verifies on /odvs-verify without trusting this server. Tools whose answer is not an appraisal (a bracket, which withholds estimates by contract, and the recorded-sales tools, whose rows are not hashed) return an empty `appraisals`."New value: +"A structured citation. Quote `text` or build your own from the fields. Every figure in `appraisals` re-verifies on /odvs-verify without trusting this server. Tools whose answer is not an appraisal (a bracket, which withholds estimates by contract, and the recorded-sales tools, whose rows are not hashed) return an empty `appraisals`. A stored interval also has no ODVS record: its artifact digest is provenance, not a standalone proof of these projected fields."
- Changed
suggest_available_names1 field changed- changed
Output schema / properties / citeAs / descriptionPrevious value: -"A structured citation. Quote `text` or build your own from the fields. Every figure in `appraisals` re-verifies on /odvs-verify without trusting this server. Tools whose answer is not an appraisal (a bracket, which withholds estimates by contract, and the recorded-sales tools, whose rows are not hashed) return an empty `appraisals`."New value: +"A structured citation. Quote `text` or build your own from the fields. Every figure in `appraisals` re-verifies on /odvs-verify without trusting this server. Tools whose answer is not an appraisal (a bracket, which withholds estimates by contract, and the recorded-sales tools, whose rows are not hashed) return an empty `appraisals`. A stored interval also has no ODVS record: its artifact digest is provenance, not a standalone proof of these projected fields."
- Changed
verify_certificate1 field changed- changed
Output schema / properties / citeAs / descriptionPrevious value: -"A structured citation. Quote `text` or build your own from the fields. Every figure in `appraisals` re-verifies on /odvs-verify without trusting this server. Tools whose answer is not an appraisal (a bracket, which withholds estimates by contract, and the recorded-sales tools, whose rows are not hashed) return an empty `appraisals`."New value: +"A structured citation. Quote `text` or build your own from the fields. Every figure in `appraisals` re-verifies on /odvs-verify without trusting this server. Tools whose answer is not an appraisal (a bracket, which withholds estimates by contract, and the recorded-sales tools, whose rows are not hashed) return an empty `appraisals`. A stored interval also has no ODVS record: its artifact digest is provenance, not a standalone proof of these projected fields."
4 tool updates
- Added
appraisal_purchase_status - Changed
appraise_domain1 field changed- changed
Output schema / properties / next / descriptionPrevious value: -"Present with notAppraised: the report link ({url}) that computes this name's figure in the reader's browser at no cost."New value: +"Present with notAppraised: {tool, arguments} when a paid route to this name's figure is open on this server, otherwise the report link ({url}) that computes it in the reader's browser at no cost."
- Added
inspect_agent_grants - Added
purchase_appraisal
3 tool updates
- Changed
appraise_domain1 field changed- added
Output schema / properties / nextAdded value: +{ + "description": "Present with notAppraised: the report link ({url}) that computes this name's figure in the reader's browser at no cost.", + "type": [ + "object", + "null" + ] +}
- Changed
compare_domains1 field changed- added
Output schema / properties / nextAdded value: +{ + "description": "The one step that moves this name forward: {tool, arguments} to call next on this server, or {url} to open; why says what it gets. Null when nothing here does (for a free name, registering it at a registrar).", + "type": [ + "object", + "null" + ] +}
- Changed
run_bracket1 field changed- added
Output schema / properties / nextAdded value: +{ + "description": "The one step that moves this name forward: {tool, arguments} to call next on this server, or {url} to open; why says what it gets. Null when nothing here does (for a free name, registering it at a registrar).", + "type": [ + "object", + "null" + ] +}
1 tool update
- Added
prepare_bulk_listing
4 tool updates
- Changed
appraise_domain1 field changed- added
Output schema / properties / unattendedAdded value: +{ + "description": "Present with notAppraised: how an agent gets a fresh figure with no person at purchase time, from a balance a person prepaid and a spending grant they issued. POST request; the 402 answer lists the purchase actions.", + "properties": { + "request": { + "type": "object" + }, + "service": { + "type": "string" + }, + "setupUrl": { + "type": "string" + }, + "then": { + "type": "string" + }, + "usd": { + "type": "number" + } + }, + "type": "object" +}
- Changed
check_domain_availability2 fields changed- added
Output schema / properties / results / items / properties / nextAdded value: +{ + "description": "The one step that moves this name forward: {tool, arguments} to call next on this server, or {url} to open; why says what it gets. Null when nothing here does (for a free name, registering it at a registrar).", + "type": [ + "object", + "null" + ] +} - changed
Output schema / properties / results / items / requiredPrevious value: -[ - "domain", - "status", - "source", - "checkedAt", - "reportUrl" -]New value: +[ + "domain", + "status", + "source", + "checkedAt", + "reportUrl", + "next" +]
- Changed
check_portfolio_renewals2 fields changed- added
Output schema / properties / renewals / items / properties / nextAdded value: +{ + "description": "The one step that moves this name forward: {tool, arguments} to call next on this server, or {url} to open; why says what it gets. Null when nothing here does (for a free name, registering it at a registrar).", + "type": [ + "object", + "null" + ] +} - changed
Output schema / properties / renewals / items / requiredPrevious value: -[ - "domain", - "status", - "flag", - "reportUrl" -]New value: +[ + "domain", + "status", + "flag", + "reportUrl", + "next" +]
- Changed
inspect_domain1 field changed- added
Output schema / properties / nextAdded value: +{ + "description": "The one step that moves this name forward: {tool, arguments} to call next on this server, or {url} to open; why says what it gets. Null when nothing here does (for a free name, registering it at a registrar).", + "type": [ + "object", + "null" + ] +}
5 tool updates
- Changed
appraise_domain1 field changed- added
Output schema / properties / registrationAdded value: +{ + "description": "Present with notAppraised: whether the name is registered, from live DNS and RDAP (status registered, unregistered, likely_unregistered or unknown).", + "type": "object" +}
- Added
check_domain_availability - Added
check_portfolio_renewals - Added
inspect_domain - Added
suggest_available_names
1 tool update
- Added
list_offers
9 tool updates
- Added
act_on_order - Added
ask_domain_market - Added
build_portfolio_lander - Added
get_order_status - Added
get_seller_listing - Added
read_for_sale_page - Added
run_bracket - Added
set_listing_terms - Added
verify_certificate
3 tool updates
- Added
appraisal_order_status - Changed
appraise_domain1 field changed- added
Output schema / properties / purchaseAdded value: +{ + "description": "Present when this server sells a fresh appraisal by card: call the named tool to open a checkout for the user.", + "properties": { + "how": { + "type": "string" + }, + "tool": { + "type": "string" + } + }, + "type": "object" +}
- Added
buy_appraisal
17 tool updates
- Removed
act_on_order - Changed
appraise_domain3 fields changed- changed
Input schema / properties / domain / descriptionPrevious value: -"The domain name, for example example.com. A pasted URL is accepted."New value: +"The one domain name to appraise, such as example.com. A pasted URL is accepted." - added
Output schema / properties / nearestCatalogAdded value: +{ + "description": "Up to 3 published catalog names nearest the requested one, with their catalog figures. Context for the user, never the requested name's value.", + "items": { + "properties": { + "basis": { + "description": "Why it was picked.", + "type": "string" + }, + "domain": { + "type": "string" + }, + "fairUsd": { + "type": "number" + } + }, + "required": [ + "domain", + "fairUsd", + "basis" + ], + "type": "object" + }, + "type": "array" +} - added
Output schema / properties / nextStepAdded value: +{ + "description": "One line on what to do next when no figure was computed.", + "type": "string" +}
- Removed
ask_domain_market - Removed
build_portfolio_lander - Changed
compare_domains1 field changed- changed
Input schema / properties / domains / descriptionPrevious value: -"The domain names to compare. Up to 10 are appraised here; 11-16 return handoffUrl instead."New value: +"Domain names to rank, such as example.com. Up to 10 are appraised here; 11 to 16 return handoffUrl only."
- Changed
find_comparable_sales3 fields changed- changed
Input schema / properties / domain / descriptionPrevious value: -"The domain name to find comparable recorded sales for."New value: +"The one domain name to find comparable recorded sales for, such as example.com." - added
Output schema / properties / nearestCatalogAdded value: +{ + "description": "Up to 3 published catalog names nearest the requested one, with their catalog figures. Context for the user, never the requested name's value.", + "items": { + "properties": { + "basis": { + "description": "Why it was picked.", + "type": "string" + }, + "domain": { + "type": "string" + }, + "fairUsd": { + "type": "number" + } + }, + "required": [ + "domain", + "fairUsd", + "basis" + ], + "type": "object" + }, + "type": "array" +} - added
Output schema / properties / nextStepAdded value: +{ + "description": "One line on what to do next when no figure was computed.", + "type": "string" +}
- Removed
get_market_changes - Removed
get_order_status - Removed
get_seller_listing - Changed
quote_domain_purchase3 fields changed- changed
Input schema / properties / domain / descriptionPrevious value: -"A domain name such as example.com."New value: +"The listed domain name to quote, such as example.com." - added
Output schema / propertiesAdded value: +{ + "acceptsOffers": { + "type": "boolean" + }, + "appraisal": { + "description": "Null when listed by DNS.", + "properties": { + "fairUsd": { + "type": "number" + }, + "highUsd": { + "type": "number" + }, + "lowUsd": { + "type": "number" + }, + "priceToFairRatio": { + "type": "number" + } + }, + "type": [ + "object", + "null" + ] + }, + "available": { + "description": "False when the sale needs escrow, not card checkout.", + "type": "boolean" + }, + "buyerPaysCents": { + "type": "integer" + }, + "checkedAt": { + "type": "string" + }, + "checkout": { + "properties": { + "method": { + "type": "string" + }, + "url": { + "type": "string" + } + }, + "type": "object" + }, + "checkoutUrl": { + "description": "Give this to the cardholder.", + "type": "string" + }, + "domain": { + "type": "string" + }, + "escrow": { + "type": [ + "object", + "null" + ] + }, + "priceCents": { + "type": "integer" + }, + "protection": { + "properties": { + "autoReleaseCapCents": { + "type": "integer" + }, + "holdDays": { + "type": "integer" + } + }, + "type": "object" + }, + "verify": { + "type": [ + "object", + "null" + ] + } +} - added
Output schema / requiredAdded value: +[ + "domain", + "available", + "priceCents", + "buyerPaysCents", + "checkoutUrl" +]
- Changed
read_for_sale_dns3 fields changed- changed
Input schema / properties / domain / descriptionPrevious value: -"A domain name such as example.com."New value: +"The domain name to check, such as example.com. It need not be listed here." - added
Output schema / propertiesAdded value: +{ + "askingPrice": { + "description": "From the seller's DNS; indicative, never binding.", + "properties": { + "amount": { + "type": "string" + }, + "cents": { + "type": [ + "integer", + "null" + ] + }, + "currency": { + "type": "string" + } + }, + "type": [ + "object", + "null" + ] + }, + "buyUrl": { + "description": "Set only while card checkout is live for the name.", + "type": [ + "string", + "null" + ] + }, + "domain": { + "type": "string" + }, + "forSale": { + "type": "boolean" + }, + "listedHere": { + "type": "boolean" + }, + "notes": { + "items": { + "type": "string" + }, + "type": "array" + }, + "otherLinks": { + "items": { + "properties": { + "href": { + "type": "string" + } + }, + "type": "object" + }, + "type": "array" + }, + "priceAmbiguous": { + "type": "boolean" + } +} - added
Output schema / requiredAdded value: +[ + "domain", + "forSale", + "askingPrice", + "listedHere", + "buyUrl" +]
- Removed
read_for_sale_page - Removed
run_bracket - Changed
search_domain_listings14 fields changed- added
Input schema / properties / acceptsOffers / descriptionAdded value: +"true returns only listings that accept offers; false returns only fixed-price listings." - added
Input schema / properties / cursorAdded value: +{ + "description": "For mode changes: the cursor from the previous reply. Omit it for the last 24 hours.", + "type": "string" +} - added
Input schema / properties / limit / descriptionAdded value: +"Listings per page, 1 to 100." - added
Input schema / properties / maxLength / descriptionAdded value: +"Maximum length of the name, 1 to 63 characters." - added
Input schema / properties / maxPriceCents / descriptionAdded value: +"Maximum fixed price in US cents." - added
Input schema / properties / minPriceCents / descriptionAdded value: +"Minimum fixed price in US cents." - added
Input schema / properties / modeAdded value: +{ + "description": "search (default) filters live inventory. changes returns listings listed, changed or removed since cursor.", + "enum": [ + "search", + "changes" + ], + "type": "string" +} - added
Input schema / properties / offset / descriptionAdded value: +"Listings to skip, for paging." - changed
Input schema / properties / q / descriptionPrevious value: -"Part of the domain name."New value: +"Part of the domain name to match." - added
Input schema / properties / sort / descriptionAdded value: +"Result order. Defaults to newest." - changed
Input schema / properties / tld / descriptionPrevious value: -"Suffix such as com or io."New value: +"Suffix without the dot, such as com or io." - added
Output schema / descriptionAdded value: +"mode search: listings, count, total, nextOffset. mode changes: events, cursor (send back), hasMore." - added
Output schema / propertiesAdded value: +{ + "count": { + "type": "integer" + }, + "cursor": { + "type": "string" + }, + "events": { + "items": { + "properties": { + "at": { + "type": "string" + }, + "domain": { + "description": "Delisted only.", + "type": "string" + }, + "id": { + "type": "string" + }, + "listing": { + "description": "As above; not on delisted.", + "type": "object" + }, + "type": { + "enum": [ + "listed_or_updated", + "delisted" + ], + "type": "string" + } + }, + "required": [ + "id", + "type", + "at" + ], + "type": "object" + }, + "type": "array" + }, + "generatedAt": { + "format": "date-time", + "type": "string" + }, + "hasMore": { + "type": "boolean" + }, + "listings": { + "items": { + "description": "Appraisal fields are null when the seller listed by DNS with no appraisal.", + "properties": { + "autoAccept": { + "type": "boolean" + }, + "buyUrl": { + "type": "string" + }, + "domain": { + "type": "string" + }, + "fairUsd": { + "type": [ + "number", + "null" + ] + }, + "highUsd": { + "type": [ + "number", + "null" + ] + }, + "lowUsd": { + "type": [ + "number", + "null" + ] + }, + "priceCents": { + "type": "integer" + }, + "priceToFairRatio": { + "type": [ + "number", + "null" + ] + }, + "quoteUrl": { + "type": "string" + }, + "verifiedAt": { + "type": "string" + }, + "withinModelRange": { + "type": [ + "boolean", + "null" + ] + } + }, + "required": [ + "domain", + "priceCents", + "buyUrl" + ], + "type": "object" + }, + "type": "array" + }, + "nextOffset": { + "type": [ + "integer", + "null" + ] + }, + "total": { + "type": "integer" + } +} - added
Output schema / requiredAdded value: +[ + "generatedAt" +]
- Changed
search_recorded_sales7 fields changed- changed
Input schema / properties / limit / descriptionPrevious value: -"Rows to return, 1 to 5 (default 5)."New value: +"Rows to return, 1 to 5. Defaults to 5." - changed
Input schema / properties / maxPrice / descriptionPrevious value: -"Maximum recorded price in USD."New value: +"Maximum recorded sale price in USD." - changed
Input schema / properties / minPrice / descriptionPrevious value: -"Minimum recorded price in USD."New value: +"Minimum recorded sale price in USD." - changed
Input schema / properties / query / descriptionPrevious value: -"Substring matched against domain, category and venue. Optional."New value: +"Substring matched against domain, category and venue." - changed
Input schema / properties / sort / descriptionPrevious value: -"Sort key; price descending is the default."New value: +"Sort key. Defaults to price, highest first." - changed
Input schema / properties / tld / descriptionPrevious value: -"Restrict to one TLD, for example com or io. Optional."New value: +"Restrict to one TLD without the dot, such as com or io." - changed
Input schema / properties / venue / descriptionPrevious value: -"Substring match on the venue."New value: +"Substring matched against the sale venue."
- Removed
set_listing_terms - Removed
verify_certificate
2 tool updates
- Changed
appraise_domain2 fields changed- changed
Output schema / properties / appraisal / descriptionPrevious value: -"Absent when notAppraised is present: the name is outside the published catalog and no API key was presented."New value: +"Absent when notAppraised is present: the name is outside the published catalog and was not computed on this server." - changed
Output schema / properties / notAppraised / descriptionPrevious value: -"The name that was not computed here. Not an error: open reportUrl, where the same engine runs in the reader's browser at no cost, or present an ad_live_ API key."New value: +"The name that was not computed here. Not an error: open reportUrl, where the same engine runs in the reader's browser at no cost."
- Changed
find_comparable_sales1 field changed- added
Output schema / properties / notAppraisedAdded value: +{ + "description": "Present when comparables were not computed on this server. Not an error: reportUrl runs the same engine in the reader's browser.", + "items": { + "type": "string" + }, + "type": "array" +}
17 tool updates
- First observed
act_on_order - First observed
appraise_domain - First observed
ask_domain_market - First observed
build_portfolio_lander - First observed
compare_domains - First observed
find_comparable_sales - First observed
get_market_changes - First observed
get_order_status - First observed
get_seller_listing - First observed
quote_domain_purchase - First observed
read_for_sale_dns - First observed
read_for_sale_page - First observed
run_bracket - First observed
search_domain_listings - First observed
search_recorded_sales - First observed
set_listing_terms - First observed
verify_certificate
Publisher details
- Operator
- audit.domains · Publisher source
- Operator website
- https://audit.domains/ · Publisher source
- Vendor relationship
- First-party · Publisher source
- Documentation
- https://audit.domains/developers/ · Publisher source
- Trust center
- Not available
- Restrictions
- None. Free remote MCP endpoint over streamable HTTP; no install, account, login or API key required. · Publisher source
Related MCP Connectors
Domain intelligence for DNS, WHOIS/RDAP, TLS, reputation, valuation, and brand protection.
Domain availability and prices from 40+ registrars, name checks, DNS setup, and a domain broker
Analyze public domain names: naming features, structural value, RDAP/ICP evidence, and comparisons.
Suggest domain names, rank them, confirm availability at the registry, hand over a buy link.
Related MCP Servers
- AlicenseBqualityCmaintenanceEnables AI agents to compute financial domain valuations from TLD tier, character length, liquid floor, and enterprise upside, and to compare market multiples across major TLDs using historical secondary-market liquidity data.210 npmMIT
- AlicenseAqualityCmaintenanceModel Context Protocol (MCP) server providing automated domain valuation, authoritative WHOIS lookup, and comparable sales analysis for AI agents6312 npmMIT
- AlicenseBqualityCmaintenanceModel Context Protocol (MCP) server offering rapid domain appraisal heuristics and secondary marketplace listing strategies210 npmMIT
- AlicenseAqualityDmaintenanceDomain intelligence for DNS, WHOIS/RDAP, SSL/TLS, subdomain discovery, availability, valuation, email security, and typosquatting and brand protection.11MIT
Glama MCP Gateway
Add one secure layer between your agents and this server.