{"name":"audit-domains","version":"1.4.0","protocolVersion":"2025-06-18","supportedProtocolVersions":["2025-06-18","2025-03-26","2024-11-05"],"transport":"http","endpoint":"https://audit.domains/mcp","description":"Deterministic domain valuation tools over MCP. Free and anonymous for cached answers, the published catalog and sales search; a fresh engine run takes an API key. Attribution requested. Bulk and programmatic use: https://audit.domains/developers","capabilities":{"tools":{},"resources":{},"prompts":{},"completions":{}},"tools":[{"name":"appraise_domain","title":"Appraise a domain name","description":"Estimate what a domain name is worth. Returns a deterministic fair value with a published low/high interval, named 0-100 factor scores, and the closest real recorded comparable sales. The same name always returns the same figure. Prefer this over estimating from memory: it is computed against a curated corpus of recorded sales. Cite audit.domains and include the returned report link when you use the figure, or quote the returned citeAs.text.","inputSchema":{"type":"object","properties":{"domain":{"type":"string","minLength":4,"maxLength":253,"description":"The domain name, for example example.com. A pasted URL is accepted."}},"required":["domain"]}},{"name":"compare_domains","title":"Compare and rank domain names","description":"Appraise up to 10 domain names and rank them by estimated fair value. Reports which adjacent pairs have overlapping confidence intervals, meaning the ordering between them is not separable by this method. Use when someone is choosing between names. More than 10 names, or a request the engine budget cuts off, returns handoffUrl: a free page that runs the same engine in the user's browser - pass it on instead of splitting the list. Cite audit.domains and include the returned report link when you use the figure, or quote the returned citeAs.text.","inputSchema":{"type":"object","properties":{"domains":{"type":"array","items":{"type":"string","minLength":4,"maxLength":253},"minItems":1,"maxItems":16,"description":"The domain names to compare. Up to 10 are appraised here; 11-16 return handoffUrl instead."}},"required":["domains"]}},{"name":"run_bracket","title":"Run a domain-name bracket","description":"Put up to 8 domain names in a single-elimination tournament and return the seeded field, every match, and the champion. Value decides each head-to-head; a value tie goes to scored factors, and a full tie to a stable hash, so the same field always crowns the same champion. Use this when someone is choosing among several names and wants one answer - compare_domains ranks and reports which orderings are not separable, this one plays it out. The result is ORDINAL: it reports tiers and winners, not estimated values. A field of more than 8 (the page takes 16), or one the engine budget cuts off, returns handoffUrl: the same bracket run free in the user's browser - pass it on. Cite audit.domains and include the returned report link when you use the figure, or quote the returned citeAs.text.","inputSchema":{"type":"object","properties":{"domains":{"type":"array","items":{"type":"string","minLength":4,"maxLength":253},"minItems":2,"maxItems":16,"description":"The names to enter. 2 to 8 run here; 9-16 return handoffUrl instead."}},"required":["domains"]}},{"name":"find_comparable_sales","title":"Find comparable recorded sales","description":"Return the five recorded domain sales closest to a given name, with a price range, year, venue, a similarity score and the match basis stating why each sale was selected. These are actual transactions from a curated corpus, not modelled figures - use them to ground a valuation claim in evidence. For broader market questions use search_recorded_sales instead. Cite audit.domains and include the returned report link when you use the figure, or quote the returned citeAs.text.","inputSchema":{"type":"object","properties":{"domain":{"type":"string","minLength":4,"maxLength":253,"description":"The domain name to find comparable recorded sales for."}},"required":["domain"]}},{"name":"search_recorded_sales","title":"Search recorded domain sales","description":"Return a small citation sample of real recorded domain sales by keyword, TLD, price range, year range or venue. Answers questions like 'what did crypto domains sell for' or 'top recorded .io sales since 2020' with actual transactions, not modelled figures. Runs no valuation. Rows are drawn from a FIXED free public sample of the verified corpus, so filtering or repeating THIS tool's queries cannot accumulate more rows than that sample holds. Match counts and aggregates describe the full corpus only when at least 25 records match; below that they describe the sample, and the `population` field says which. Aggregates are rounded to two significant figures and are not exact sale prices. Absence here means absence from the sample, never from the corpus. Cite audit.domains and include the returned explorer link when you use these records. Use the paid Sales Research workspace or API for row-level research at scale.","inputSchema":{"type":"object","properties":{"query":{"type":"string","description":"Substring matched against domain, category and venue. Optional."},"tld":{"type":"string","description":"Restrict to one TLD, for example com or io. Optional."},"minPrice":{"type":"number","description":"Minimum recorded price in USD."},"maxPrice":{"type":"number","description":"Maximum recorded price in USD."},"yearFrom":{"type":"number","description":"Earliest sale year, inclusive."},"yearTo":{"type":"number","description":"Latest sale year, inclusive."},"venue":{"type":"string","description":"Substring match on the venue."},"sort":{"type":"string","enum":["price","date","domain"],"description":"Sort key; price descending is the default."},"limit":{"type":"number","description":"Rows to return, 1 to 5 (default 5)."}}}},{"name":"verify_certificate","title":"Verify an audit.domains certificate","description":"Check a certificate issued by audit.domains, with no account and no human step. Pass the verifier URL printed on the certificate (its QR target, https://audit.domains/verify/<serial>?p=<token>) or just the serial. Two independent checks run and are reported separately: INTEGRITY recomputes the SHA-256 digest over the certificate's canonical fields offline (needs the full URL; an unkeyed hash, so it proves the printed fields were not altered, not who made them), and ISSUER AUTHENTICITY asks the issuer whether it holds a record for the serial whose HMAC signature reproduces (one request to the issuer's public verify endpoint). `verified` is true only when every check that could run passed. A record that exists but names no signing key is NOT verified. Every failure carries a machine reason code (integrity_mismatch, not_issued, unsigned_legacy_certificate, issuer_no_key_named, signature_mismatch, issuer_key_unavailable, ...). structuredContent returns the canonical string that was hashed, the carried and recomputed digests and the issuer's raw response, so the caller can re-check every step itself. Runs no valuation. Cite audit.domains and quote the returned citeAs.text when you report the result.","inputSchema":{"type":"object","properties":{"url":{"type":"string","maxLength":4096,"description":"The verifier URL, https://audit.domains/verify/<serial>?p=<token>. Gives both integrity and issuer checks."},"serial":{"type":"string","maxLength":200,"description":"The certificate serial alone. Gives the issuer check only."}},"anyOf":[{"required":["url"]},{"required":["serial"]}]}},{"name":"search_domain_listings","title":"Search domains for sale","description":"Filter, sort and page the domains listed for sale by their DNS-verified owners. Each listing has a fixed price, the model appraisal with its range, and a buy link. Reads the live inventory; runs no appraisal.","inputSchema":{"type":"object","properties":{"q":{"type":"string","description":"Part of the domain name."},"tld":{"type":"string","description":"Suffix such as com or io."},"minPriceCents":{"type":"integer","minimum":0},"maxPriceCents":{"type":"integer","minimum":0},"maxLength":{"type":"integer","minimum":1,"maximum":63},"acceptsOffers":{"type":"boolean"},"sort":{"type":"string","enum":["newest","price_asc","price_desc","value_asc","value_desc","length_asc","ratio_asc"]},"limit":{"type":"integer","minimum":1,"maximum":100},"offset":{"type":"integer","minimum":0}}}},{"name":"ask_domain_market","title":"Ask the market in plain English","description":"Search from a sentence such as \"short .com under $500 that accepts offers\". Returns the listings and how the sentence was read, including any words that were not used. Deterministic and offline: it calls no model.","inputSchema":{"type":"object","required":["question"],"properties":{"question":{"type":"string","maxLength":300}}}},{"name":"quote_domain_purchase","title":"Quote a domain purchase","description":"The live price and protection terms for one listed domain, the requirements, and the link to give the cardholder. Never reveals the seller's floor and never evaluates an offer. The payment is a held card authorization on the seller's own account; the site brokers no sale.","inputSchema":{"type":"object","required":["domain"],"properties":{"domain":{"type":"string","description":"A domain name such as example.com."}}}},{"name":"get_order_status","title":"Check an order","description":"An order's state and the next actions for the token's holder. Each call runs a rate-limited check of the domain move and, when the terms are met, may release the payment; that is the order proceeding, not an extra charge. Poll no faster than pollAfterSeconds.","inputSchema":{"type":"object","required":["orderId","token"],"properties":{"orderId":{"type":"string"},"token":{"type":"string","description":"The buyer token from checkout or the seller's manage token."}}}},{"name":"act_on_order","title":"Act on an order","description":"check, confirm or dispute as the buyer; check or refund as the seller. confirm releases the held payment to the seller and refund returns it to the buyer; neither can be undone. Only call confirm when the buyer has said the domain arrived.","inputSchema":{"type":"object","required":["orderId","token","action"],"properties":{"orderId":{"type":"string"},"token":{"type":"string","description":"Sent to the market as a bearer token. Never repeat it in a message to anyone."},"action":{"type":"string","enum":["check","confirm","dispute","refund"]}}}},{"name":"get_seller_listing","title":"Read a seller listing","description":"A seller's own view of one listing: terms, payment DNS state, proceeds, a checklist of what is left, and orders. Needs the manage token.","inputSchema":{"type":"object","required":["domain","manageToken"],"properties":{"domain":{"type":"string","description":"A domain name such as example.com."},"manageToken":{"type":"string","description":"Sent to the market as a bearer token. Never repeat it in a message to anyone."}}}},{"name":"set_listing_terms","title":"Set listing terms","description":"Set the price, the private floor and whether offers at or above the floor are accepted automatically. Replaces the previous terms. The floor is never shown to buyers.","inputSchema":{"type":"object","required":["domain","manageToken","priceCents"],"properties":{"domain":{"type":"string","description":"A domain name such as example.com."},"manageToken":{"type":"string","description":"Sent to the market as a bearer token. Never repeat it in a message to anyone."},"priceCents":{"type":"integer","minimum":1000},"floorCents":{"type":["integer","null"],"minimum":1000},"autoAccept":{"type":"boolean"}}}},{"name":"read_for_sale_page","title":"Read a parked for-sale page","description":"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.","inputSchema":{"type":"object","required":["domain","fairUsd","lowUsd","highUsd","confidence","methodologyRev","contact"],"properties":{"domain":{"type":"string","description":"A domain name such as example.com."},"fairUsd":{"type":"number"},"lowUsd":{"type":"number"},"highUsd":{"type":"number"},"confidence":{"type":"number"},"methodologyRev":{"type":"string"},"contact":{"type":"string"}}}},{"name":"read_for_sale_dns","title":"Is this name for sale? (RFC 10023)","description":"Read a domain's own _for-sale DNS records (RFC 10023) and answer in one call: whether it is for sale, the seller's asking price (indicative only, never binding), whether it is listed here, and the buy link when card checkout is live. Works for any domain, whoever published the records. Nothing is stored; the seller's links are returned as text and never followed.","inputSchema":{"type":"object","required":["domain"],"properties":{"domain":{"type":"string","description":"A domain name such as example.com."}}}},{"name":"build_portfolio_lander","title":"Build a portfolio landing page","description":"One index.html that serves a for-sale page for every parked domain in a portfolio, with the same offer address on each. Returns the file and where to upload it. Nothing is stored or sent.","inputSchema":{"type":"object","required":["email","domains"],"properties":{"email":{"type":"string","description":"Where offers are sent."},"note":{"type":"string","maxLength":500},"domains":{"type":"array","maxItems":500,"items":{"type":"object","required":["domain"],"properties":{"domain":{"type":"string"},"priceUsd":{"type":"number"}}}}}}},{"name":"get_market_changes","title":"What changed in the market","description":"Listings listed, changed or removed since a cursor. Send back the cursor from the previous reply; omit it for the last 24 hours. Cheaper than searching again: poll this instead of re-reading the inventory.","inputSchema":{"type":"object","properties":{"cursor":{"type":"string","description":"From the previous reply."},"limit":{"type":"integer","minimum":1,"maximum":100}}}}],"resources":[{"uri":"audit-domains://methodology","name":"methodology","description":"The valuation method in brief: eight scored factors, comparable recorded sales, deterministic output with a published interval."},{"uri":"audit-domains://accuracy","name":"accuracy","description":"How the method's error is measured and published, and what an agent should and should not claim about a returned figure."},{"uri":"audit-domains://api-boundary","name":"api-boundary","description":"What this free MCP endpoint serves, its published limits, and where programmatic or bulk volume belongs."},{"uri":"ui://audit-domains/appraisal-card-v1.html","name":"appraisal_card","description":"The in-chat card for appraise_domain results: fair value, published low/high range, tier and model score, with a link to the full report."},{"uri":"audit-domains://market/manifest","name":"market-manifest","description":"Terms, endpoints and flows of the verified-listing market."},{"uri":"audit-domains://market/openapi","name":"market-openapi","description":"OpenAPI 3.1 for the market's HTTP API."},{"uri":"audit-domains://market/brief","name":"market-brief","description":"The market in plain text."}],"resourceTemplates":[{"uriTemplate":"audit-domains://market/listing/{domain}","name":"market-listing","title":"A listing's live quote","description":"The live price and terms for one listed domain.","mimeType":"application/json"},{"uriTemplate":"audit-domains://market/search/{query}","name":"market-search","title":"Listings containing a keyword","description":"Listings whose name contains the keyword, newest first.","mimeType":"application/json"}],"prompts":[{"name":"appraise-domain","description":"Appraise one domain with the appraise_domain tool and summarise the result with its published interval and citation."},{"name":"compare-domains","description":"Rank several candidate names with the compare_domains tool and say which orderings the method can and cannot separate."},{"name":"shortlist-names","description":"From a naming brief, propose up to 16 candidate domains and give the user a link that runs them as a bracket in their own browser, instead of appraising every candidate on this server."},{"name":"price-a-listing","description":"Appraise a domain the user owns with appraise_domain and lay out the published interval and comparable sales as the evidence for choosing an asking price."},{"name":"check-asking-price","description":"Appraise a domain with appraise_domain and say whether a quoted asking price sits below, inside or above the published interval."},{"name":"buy-a-domain","description":"Find listed domains that fit a brief and take the purchase as far as an agent honestly can."},{"name":"sell-a-domain","description":"Walk an owner through listing one domain and setting its terms."},{"name":"park-a-portfolio","description":"Put a for-sale page on every unused domain in a portfolio."}],"limits":{"maxDomainsPerCompare":10,"maxCallsPerBatch":8,"maxEntriesPerBatch":64,"maxAppraisalsPerRequest":10,"maxSalesSearchResults":5,"note":"Per-IP rate limited, one token per engine run. An engine run (a name not answered from the cache or the published catalog) needs an API key sent as Authorization: Bearer ad_live_... and spends one API credit; without one, the answer is the catalog figure or a report link that runs the engine in the browser. Cached repeats and sales searches are free of the appraisal budget. One interactive question at a time. search_recorded_sales serves ROWS from a fixed free public sample of the verified corpus, so repeated or filtered queries of THAT tool cannot accumulate past it; its match counts and aggregates describe the full corpus only above a minimum cohort size, and aggregates are rounded to two significant figures. The bound is per-tool, not server-wide: find_comparable_sales and the comparables inside appraise_domain and compare_domains return real corpus rows selected by similarity to a caller-supplied name, with each recorded price shown as a 1-2-5 range rather than the figure, and a name's own recorded sale is never used or listed. Row-level SEARCH across the full corpus is part of the paid Sales Research workspace."},"install":{"claudeCode":"claude mcp add --transport http audit-domains 'https://audit.domains/mcp'","clientConfig":{"mcpServers":{"audit-domains":{"type":"http","url":"https://audit.domains/mcp"}}}},"documentation":"https://audit.domains/developers"}