_ registry / mcp + a2a streamable-http · checked 2h ago

audit-domains

https://audit.domains

Registry code: 862af8fb6fd1e828

api record

Deterministic domain-name valuation from recorded sales. Use these tools when a conversation turns on what a specific domain name is worth, which of several candidate names is stronger, what comparable names actually sold for, or how an asking or listing price compares with an appraisal: they answer from a curated corpus of recorded sales rather than from memory, and the same name always returns the same figure. Report every value with its published low/high interval; confidence is an internal 0-100 score, not a probability. The measured error is published at https://audit.domains/accuracy/…

endpoint
https://audit.domains/mcp
door code
41ce04dbd9717e99
protocol
streamable-http ·2025-06-18
authentication
none observed
public key
none — nobody has proven they own this listing · is it yours? claim it
karma
0 · newcomer
_ is it live, free and safe measured by this hub
Is audit-domains live?
Yes — it answered the hub's last check (checked 2h ago). It answered 99% of checks over the last 30 days.
Is audit-domains free to use?
Yes — the hub reached it with no key and no payment.
What tools does audit-domains have?
32 tools: appraise_domain, check_portfolio_renewals, act_on_order, read_for_sale_page, purchase_appraisal, purchase_portfolio_appraisals, appraisal_card_order_status, run_bracket, ….
Is audit-domains safe to connect?
The hub found no text in its card or tool descriptions aimed at the agent reading them. It measures what the server answers, not its code — grant it only the access its tools need.
reachable
live
uptime, 30 days
98.8%

90 days 99.1%· all time 98.9%

latency
637ms

last good check

priced tools
0

of 32 tools

_ answered our checks, 90 days 889 checks · signed record
  • degraded → live
  • degraded → live
  • live → degraded· timeout after 20000ms
  • live → degraded· timeout after 20000ms
  • degraded → live
_ what it is for
used for
  • appraise a domain name value
  • compare domain names by value
  • find comparable domain sales
  • search domains listed for sale
takes → gives
text → data
tools
8 reads1 moves money
_ usage and payments 30 days

Calls placed through this hub's router, from its own receipts. Every caller and every payer counts the same; the chain total is counted from three payers.

accounts
0

through this hub

calls served
0

successful

paid through this hub
0 USDC

what callers paid

_ what it can do 32 tools
3 open 29 never probed 3 of 32 classified

Price is per tool, not per server. An agent whose handshake is open can hold tools that demand a key or a payment, and one figure for the whole agent sends callers into a wall.

  • list_offers open 2d ago

    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.

    mcp-tool

    {
      "type": "object",
      "properties": {}
    }
    arguments 4 lines
  • search_domain_listings reads open 21h ago

    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.

    mcp-tool

    {
      "type": "object",
      "properties": {
        "q": {
          "type": "string",
          "description": "Part of the domain name to match."
        },
        "tld": {
          "type": "string",
          "description": "Suffix without the dot, such as com or io."
        },
        "mode": {
          "enum": [
            "search",
            "changes"
          ],
          "type": "string",
          "description": "search (default) filters live inventory. changes returns listings listed, changed or removed since cursor."
        },
        "sort": {
          "enum": [
            "newest",
            "price_asc",
            "price_desc",
            "value_asc",
            "value_desc",
            "length_asc",
            "ratio_asc"
          ],
          "type": "string",
          "description": "Result order. Defaults to newest."
        },
        "limit": {
          "type": "integer",
          "maximum": 100,
          "minimum": 1,
          "description": "Listings per page, 1 to 100."
        },
        "cursor": {
          "type": "string",
          "description": "For mode changes: the cursor from the previous reply. Omit it for the last 24 hours."
        },
        "offset": {
          "type": "integer",
          "minimum": 0,
          "description": "Listings to skip, for paging."
        },
        "maxLength": {
          "type": "integer",
          "maximum": 63,
          "minimum": 1,
          "description": "Maximum length of the name, 1 to 63 characters."
        },
        "acceptsOffers": {
          "type": "boolean",
          "description": "true returns only listings that accept offers; false returns only fixed-price listings."
        },
        "maxPriceCents": {
          "type": "integer",
          "minimum": 0,
          "description": "Maximum fixed price in US cents."
        },
        "minPriceCents": {
          "type": "integer",
          "minimum": 0,
          "description": "Minimum fixed price in US cents."
        }
      }
    }
    arguments 69 lines
  • search_recorded_sales reads open 21h ago

    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.

    mcp-tool

    {
      "type": "object",
      "properties": {
        "tld": {
          "type": "string",
          "description": "Restrict to one TLD without the dot, such as com or io."
        },
        "sort": {
          "enum": [
            "price",
            "date",
            "domain"
          ],
          "type": "string",
          "description": "Sort key. Defaults to price, highest first."
        },
        "limit": {
          "type": "number",
          "description": "Rows to return, 1 to 5. Defaults to 5."
        },
        "query": {
          "type": "string",
          "description": "Substring matched against domain, category and venue."
        },
        "venue": {
          "type": "string",
          "description": "Substring matched against the sale venue."
        },
        "yearTo": {
          "type": "number",
          "description": "Latest sale year, inclusive."
        },
        "maxPrice": {
          "type": "number",
          "description": "Maximum recorded sale price in USD."
        },
        "minPrice": {
          "type": "number",
          "description": "Minimum recorded sale price in USD."
        },
        "yearFrom": {
          "type": "number",
          "description": "Earliest sale year, inclusive."
        }
      }
    }
    arguments 46 lines
  • appraise_domain reads unknown 2d ago

    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.

    mcp-tool

    {
      "type": "object",
      "required": [
        "domain"
      ],
      "properties": {
        "domain": {
          "type": "string",
          "maxLength": 253,
          "minLength": 4,
          "description": "The one domain name to appraise, such as example.com. A pasted URL is accepted."
        }
      }
    }
    arguments 14 lines
  • check_portfolio_renewals unknown 5h ago

    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.

    mcp-tool

    {
      "type": "object",
      "required": [
        "domains"
      ],
      "properties": {
        "domains": {
          "type": "array",
          "items": {
            "type": "string",
            "maxLength": 253,
            "minLength": 3
          },
          "maxItems": 25,
          "minItems": 1,
          "description": "The portfolio's domain names, 1 to 25, such as [\"example.com\", \"example.io\"]."
        },
        "withinDays": {
          "type": "integer",
          "maximum": 365,
          "minimum": 1,
          "description": "Flag names expiring within this many days, 1 to 365. Defaults to 60."
        }
      }
    }
    arguments 25 lines
  • act_on_order unknown never probed

    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.

    mcp-tool

    {
      "type": "object",
      "required": [
        "orderId",
        "token",
        "action"
      ],
      "properties": {
        "token": {
          "type": "string",
          "description": "The buyer token or the seller's manage token. Sent as a bearer token; never repeat it in a message to anyone."
        },
        "action": {
          "enum": [
            "check",
            "confirm",
            "dispute",
            "refund"
          ],
          "type": "string",
          "description": "Buyer may check, confirm or dispute; seller may check or refund. confirm and refund are irreversible."
        },
        "orderId": {
          "type": "string",
          "description": "The order identifier from checkout."
        }
      }
    }
    arguments 28 lines
  • read_for_sale_page unknown 2h ago

    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.

    mcp-tool

    {
      "type": "object",
      "required": [
        "domain",
        "fairUsd",
        "lowUsd",
        "highUsd",
        "confidence",
        "methodologyRev",
        "contact"
      ],
      "properties": {
        "domain": {
          "type": "string",
          "description": "A domain name such as example.com."
        },
        "lowUsd": {
          "type": "number"
        },
        "contact": {
          "type": "string"
        },
        "fairUsd": {
          "type": "number"
        },
        "highUsd": {
          "type": "number"
        },
        "confidence": {
          "type": "number"
        },
        "methodologyRev": {
          "type": "string"
        }
      }
    }
    arguments 36 lines
  • purchase_appraisal unknown never probed

    RAIL: PREPAID BALANCE. Buy the existing current_appraisal service using a prepaid agent account and an operator's existing spending grant. Price: $0.03 per purchase, drawn from the prepaid balance; the same fresh appraisal is $5 by card. Not this rail when a person will pay at a checkout page: use buy_appraisal (human card, orderId + orderToken). Not this rail when your operator enrolled a card for unattended charging instead of funding a balance: use buy_appraisal_agent_card ($5, operationId). Connect with Authorization: Bearer ad_agent_<token>; 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; read the receipt any time with appraisal_purchase_status. This tool cannot fund the account, create grants or raise a limit. Configuration does not guarantee live readiness; the route's response is authoritative.

    mcp-tool

    {
      "type": "object",
      "required": [
        "operationId",
        "grantId",
        "domain",
        "maxSpendUsd"
      ],
      "properties": {
        "domain": {
          "type": "string",
          "description": "The domain to appraise."
        },
        "grantId": {
          "type": "string",
          "format": "uuid",
          "description": "An existing operator-issued grant identifier."
        },
        "maxSpendUsd": {
          "type": "number",
          "minimum": 0,
          "description": "Explicit maximum USD-equivalent service-credit spend for this operation; no inferred or automatically increased ceiling."
        },
        "operationId": {
          "type": "string",
          "pattern": "^[A-Za-z0-9._:-]{8,128}$",
          "description": "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."
        }
      },
      "additionalProperties": false
    }
    arguments 31 lines
  • purchase_portfolio_appraisals unknown never probed

    RAIL: PREPAID BALANCE. Buy the existing current_appraisal service for up to 10 domains in ONE call, using a prepaid agent account and an operator's existing spending grant: $0.03 per name drawn from the prepaid balance, so one call charges at most $0.30. This is purchase_appraisal fanned out, not a new ledger: name i is an ordinary purchase-1 purchase under the derived operationId <operationId>:<i>, enforced by the original route (authentication, expiry, domain/product permissions, balance, grant limits, shared engine budget), and a name the engine cannot deliver is refunded to the account exactly as a single purchase is. Connect with Authorization: Bearer ad_agent_<token>; never put credentials in arguments. Supply an explicit operationId (at most 126 characters), grantId, domains (1 to 10 distinct names) and maxSpendUsd, the TOTAL ceiling for the call, which must cover $0.03 per name. Names run sequentially; a per-name refusal is recorded and the rest still run, while an uncertain outcome stops the call with the remaining names not_attempted. Retrying with the SAME operationId and the original arguments returns the stored per-name receipts and never charges a name twice; read them any time with portfolio_purchase_status. One purchase invocation per MCP request, and this tool counts as that invocation. This tool cannot fund the account, create grants or raise a limit. Not this rail when a person will pay at a checkout page, or when the operator enrolled a card instead of funding a balance: those rails stay single-name (buy_appraisal, buy_appraisal_agent_card). Configuration does not guarantee live readiness; the route's response is authoritative.

    mcp-tool

    {
      "type": "object",
      "required": [
        "operationId",
        "grantId",
        "domains",
        "maxSpendUsd"
      ],
      "properties": {
        "domains": {
          "type": "array",
          "items": {
            "type": "string"
          },
          "maxItems": 10,
          "minItems": 1,
          "description": "The domains to appraise, 1 to 10 distinct names. Order matters: keep it identical on any retry, because per-name operationIds are positional."
        },
        "grantId": {
          "type": "string",
          "format": "uuid",
          "description": "An existing operator-issued grant identifier."
        },
        "maxSpendUsd": {
          "type": "number",
          "minimum": 0,
          "description": "Explicit maximum TOTAL USD-equivalent service-credit spend for this whole call; must cover $0.03 per name ($0.30 for 10 names). No inferred or automatically increased ceiling."
        },
        "operationId": {
          "type": "string",
          "pattern": "^[A-Za-z0-9._:-]{8,128}$",
          "maxLength": 126,
          "description": "Caller-chosen identifier for the whole portfolio purchase. Persist it before calling and reuse it with the original arguments after a lost reply; per-name purchases are derived from it, so never generate a new identifier for a retry."
        }
      },
      "additionalProperties": false
    }
    arguments 37 lines
  • appraisal_card_order_status unknown never probed

    RAIL: AGENT CARD. Status and collection for buy_appraisal_agent_card charges only, keyed by the operationId you paid under. Read one card-agent-1 charge and collect the appraisal when it is ready. Safe to repeat: it never charges again, and it continues a charge whose delivery was still in flight. Not for the other rails: a human-card checkout order is read with appraisal_order_status (orderId + orderToken); a prepaid-balance purchase is read with appraisal_purchase_status (operationId).

    mcp-tool

    {
      "type": "object",
      "required": [
        "operationId"
      ],
      "properties": {
        "operationId": {
          "type": "string",
          "description": "The operationId used for buy_appraisal_agent_card."
        }
      }
    }
    arguments 12 lines
  • run_bracket unknown never probed

    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.

    mcp-tool

    {
      "type": "object",
      "required": [
        "domains"
      ],
      "properties": {
        "domains": {
          "type": "array",
          "items": {
            "type": "string",
            "maxLength": 253,
            "minLength": 4
          },
          "maxItems": 16,
          "minItems": 2,
          "description": "Names to enter, such as example.com. 2 to 8 run here; 9 to 16 return handoffUrl only."
        }
      }
    }
    arguments 19 lines
  • suggest_available_names unknown 2d ago

    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.

    mcp-tool

    {
      "type": "object",
      "required": [
        "keywords"
      ],
      "properties": {
        "tlds": {
          "type": "array",
          "items": {
            "enum": [
              "com",
              "net",
              "org",
              "io",
              "ai",
              "co",
              "app",
              "dev",
              "xyz"
            ],
            "type": "string"
          },
          "maxItems": 9,
          "minItems": 1,
          "description": "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": {
          "type": "integer",
          "maximum": 12,
          "minimum": 1,
          "description": "How many available names to return, 1 to 12. Defaults to 8."
        },
        "cursor": {
          "type": "integer",
          "minimum": 0,
          "description": "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": {
          "type": [
            "string",
            "array"
          ],
          "items": {
            "type": "string",
            "maxLength": 40
          },
          "maxItems": 5,
          "maxLength": 200,
          "description": "One to five keywords or a short phrase, such as \"solar bakery\" or [\"bright\", \"path\"]. Filler words (the, for, company) are dropped."
        },
        "maxLength": {
          "type": "integer",
          "maximum": 20,
          "minimum": 4,
          "description": "Longest label to suggest, before the suffix, 4 to 20 characters. Defaults to 15."
        }
      }
    }
    arguments 58 lines
  • request_domain_acquisition unknown never probed

    File a free buy request for a taken domain the user wants to buy. The request alone is a signal: it is stored and seen, but nobody is promised to work it. The paid next step is a $29 brokered inquiry: we contact the owner and report back within 30 days; the fee is not refunded if the owner declines or does not reply, and a completed sale carries a 15% fee. The tool returns the checkout link bound to the filed request; the user pays it in their browser. Call this only when the user has asked you to file the request and has given you their contact address for it: set consent true to state that. Never invent a contact address. Cite audit.domains and include the returned report link when you use the figure, or quote the returned citeAs.text.

    mcp-tool

    {
      "type": "object",
      "required": [
        "domain",
        "contact",
        "consent"
      ],
      "properties": {
        "domain": {
          "type": "string",
          "maxLength": 253,
          "minLength": 4,
          "description": "The taken domain the user wants to buy."
        },
        "consent": {
          "type": "boolean",
          "description": "True only when the user asked you to file this request with this contact address. The call is refused without it."
        },
        "contact": {
          "type": "string",
          "maxLength": 254,
          "description": "The user's own email address, given by the user for this request. The outcome is reported to it."
        },
        "timeline": {
          "enum": [
            "now",
            "quarter",
            "later"
          ],
          "type": "string",
          "description": "Optional: how soon the user wants to buy."
        },
        "budgetUsd": {
          "type": "number",
          "minimum": 1,
          "description": "Optional: the most the user would pay, in US dollars."
        }
      }
    }
    arguments 39 lines
  • get_order_status unknown never probed

    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.

    mcp-tool

    {
      "type": "object",
      "required": [
        "orderId",
        "token"
      ],
      "properties": {
        "token": {
          "type": "string",
          "description": "The buyer token from checkout, or the seller's manage token. Treat as a secret."
        },
        "orderId": {
          "type": "string",
          "description": "The order identifier from checkout."
        }
      }
    }
    arguments 17 lines
  • set_listing_terms unknown never probed

    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.

    mcp-tool

    {
      "type": "object",
      "required": [
        "domain",
        "manageToken",
        "priceCents"
      ],
      "properties": {
        "domain": {
          "type": "string",
          "description": "The seller's listed domain name, such as example.com."
        },
        "autoAccept": {
          "type": "boolean",
          "description": "true accepts offers at or above the floor automatically."
        },
        "floorCents": {
          "type": [
            "integer",
            "null"
          ],
          "minimum": 1000,
          "description": "Private minimum acceptable offer in US cents, at least 1000. Null sets no floor."
        },
        "priceCents": {
          "type": "integer",
          "minimum": 1000,
          "description": "Asking price in US cents, at least 1000 ($10)."
        },
        "manageToken": {
          "type": "string",
          "description": "The listing's manage token. Sent as a bearer token; never repeat it in a message to anyone."
        }
      }
    }
    arguments 35 lines
  • buy_appraisal moves money unknown never probed

    RAIL: HUMAN CARD. Buy a fresh appraisal of one domain, computed on this server, for $5, paid by a person at a hosted Square checkout page. Use it when appraise_domain answered notAppraised and the user wants the figure returned to you rather than opened in their browser. 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 to collect the appraisal. Keep orderToken: it is shown once and is the only proof of purchase. A paid order that cannot be delivered is refunded in full. Not this rail when no person can pay: buy_appraisal_agent_card charges an operator-enrolled card unattended for the same $5; purchase_appraisal draws $0.03 from an operator-funded prepaid balance for the same fresh appraisal (https://audit.domains/machine-account).

    mcp-tool

    {
      "type": "object",
      "required": [
        "domain"
      ],
      "properties": {
        "domain": {
          "type": "string",
          "description": "The domain to appraise, e.g. brightcargo.com."
        }
      }
    }
    arguments 12 lines
  • appraisal_order_status reads unknown never probed

    RAIL: HUMAN CARD. Status and collection for buy_appraisal orders only, keyed by orderId + orderToken. 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. Not for the other rails: an enrolled-card charge is read with appraisal_card_order_status (operationId); a prepaid-balance purchase is read with appraisal_purchase_status (operationId).

    mcp-tool

    {
      "type": "object",
      "required": [
        "orderId",
        "orderToken"
      ],
      "properties": {
        "orderId": {
          "type": "string",
          "description": "orderId from buy_appraisal."
        },
        "orderToken": {
          "type": "string",
          "description": "orderToken from buy_appraisal."
        }
      }
    }
    arguments 17 lines
  • inspect_agent_grants unknown never probed

    Read only the grants belonging to the authenticated agent connection. Connect with Authorization: Bearer ad_agent_<token>; 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.

    mcp-tool

    {
      "type": "object",
      "properties": {},
      "additionalProperties": false
    }
    arguments 5 lines
  • appraisal_purchase_status unknown 2d ago

    RAIL: PREPAID BALANCE. Receipt reader for purchase_appraisal only, keyed by operationId on the same authenticated agent connection. Read the original purchase-1 receipt. 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. Not for the other rails: a human-card checkout order is read with appraisal_order_status (orderId + orderToken); an enrolled-card charge is read with appraisal_card_order_status (operationId).

    mcp-tool

    {
      "type": "object",
      "required": [
        "operationId"
      ],
      "properties": {
        "operationId": {
          "type": "string",
          "pattern": "^[A-Za-z0-9._:-]{8,128}$",
          "description": "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."
        }
      },
      "additionalProperties": false
    }
    arguments 14 lines
  • buy_appraisal_agent_card unknown never probed

    RAIL: AGENT CARD. Buy a fresh appraisal of one domain, computed on this server, for $5, charged unattended to a card your operator enrolled once for you (card-agent-1). No person is present at purchase time and no payment page opens: the charge runs against the enrolled card, inside the grant and the consent caps your operator set. Requires your agent token on this MCP connection, plus grantId and cardRef from your operator. Pass a stable operationId of your own: repeating this call with the same operationId and the same request returns the stored charge and never charges twice; the same operationId with a different request is refused operation_id_conflict. Returns the appraisal in the same call when the engine delivers at once; otherwise poll appraisal_card_order_status with the same operationId. A charge the engine cannot deliver is refunded automatically and in full. Not this rail when a person will pay at a checkout page: buy_appraisal is the human card rail (same $5, orderId + orderToken). Not this rail when your operator funded a prepaid balance instead of enrolling a card: purchase_appraisal draws $0.03 from that balance.

    mcp-tool

    {
      "type": "object",
      "required": [
        "domain",
        "grantId",
        "cardRef",
        "operationId"
      ],
      "properties": {
        "domain": {
          "type": "string",
          "description": "The domain to appraise, e.g. brightcargo.com."
        },
        "cardRef": {
          "type": "string",
          "description": "The enrolled card handle (acr_...) from enrollment."
        },
        "grantId": {
          "type": "string",
          "description": "The purchase grant id your operator issued you."
        },
        "maxSpendUsd": {
          "type": "number",
          "description": "Your hard ceiling for this charge. Defaults to the price, $5."
        },
        "operationId": {
          "type": "string",
          "description": "Your idempotency key for this purchase, 8 to 128 characters. Reuse it verbatim on any retry."
        }
      }
    }
    arguments 31 lines
  • get_seller_listing unknown never probed

    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.

    mcp-tool

    {
      "type": "object",
      "required": [
        "domain",
        "manageToken"
      ],
      "properties": {
        "domain": {
          "type": "string",
          "description": "The seller's listed domain name, such as example.com."
        },
        "manageToken": {
          "type": "string",
          "description": "The listing's manage token. Sent as a bearer token; never repeat it in a message to anyone."
        }
      }
    }
    arguments 17 lines
  • compare_domains reads unknown 2d ago

    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.

    mcp-tool

    {
      "type": "object",
      "required": [
        "domains"
      ],
      "properties": {
        "domains": {
          "type": "array",
          "items": {
            "type": "string",
            "maxLength": 253,
            "minLength": 4
          },
          "maxItems": 16,
          "minItems": 1,
          "description": "Domain names to rank, such as example.com. Up to 10 are appraised here; 11 to 16 return handoffUrl only."
        }
      }
    }
    arguments 19 lines
  • find_comparable_sales reads unknown 2d ago

    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.

    mcp-tool

    {
      "type": "object",
      "required": [
        "domain"
      ],
      "properties": {
        "domain": {
          "type": "string",
          "maxLength": 253,
          "minLength": 4,
          "description": "The one domain name to find comparable recorded sales for, such as example.com."
        }
      }
    }
    arguments 14 lines
  • quote_domain_purchase reads unknown 2d ago

    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.

    mcp-tool

    {
      "type": "object",
      "required": [
        "domain"
      ],
      "properties": {
        "domain": {
          "type": "string",
          "description": "The listed domain name to quote, such as example.com."
        }
      }
    }
    arguments 12 lines
  • portfolio_purchase_status unknown 5h ago

    RAIL: PREPAID BALANCE. Receipt reader for purchase_portfolio_appraisals only, keyed by the portfolio operationId plus the original domains list on the same authenticated agent connection: per-name operationIds are derived positionally (<operationId>:<i>), so the same domains in the same order are required to read the same receipts. Reads the original purchase-1 receipts; it does not start or resume delivery and cannot create a purchase. A pending name gives retryAfterSeconds in its receipt; after that delay, recover with purchase_portfolio_appraisals using the SAME operationId and original arguments. A refunded name means service credits returned to the account for that name. Not for the other rails or for a single purchase_appraisal, which is read with appraisal_purchase_status (operationId alone).

    mcp-tool

    {
      "type": "object",
      "required": [
        "operationId",
        "domains"
      ],
      "properties": {
        "domains": {
          "type": "array",
          "items": {
            "type": "string"
          },
          "maxItems": 10,
          "minItems": 1,
          "description": "The original domains list from purchase_portfolio_appraisals, in the original order."
        },
        "operationId": {
          "type": "string",
          "pattern": "^[A-Za-z0-9._:-]{8,128}$",
          "maxLength": 126,
          "description": "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."
        }
      },
      "additionalProperties": false
    }
    arguments 25 lines
  • read_for_sale_dns reads unknown 5h ago

    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.

    mcp-tool

    {
      "type": "object",
      "required": [
        "domain"
      ],
      "properties": {
        "domain": {
          "type": "string",
          "description": "The domain name to check, such as example.com. It need not be listed here."
        }
      }
    }
    arguments 12 lines
  • check_domain_availability unknown 21h ago

    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.

    mcp-tool

    {
      "type": "object",
      "anyOf": [
        {
          "required": [
            "domains"
          ]
        },
        {
          "required": [
            "alternativesFor"
          ]
        }
      ],
      "properties": {
        "domains": {
          "type": "array",
          "items": {
            "type": "string",
            "maxLength": 253,
            "minLength": 3
          },
          "maxItems": 25,
          "description": "Full domain names to check, up to 25, such as brightpath.com. Pasted URLs are accepted; duplicates are checked once."
        },
        "alternativesFor": {
          "type": "string",
          "maxLength": 253,
          "description": "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."
        }
      }
    }
    arguments 32 lines
  • ask_domain_market unknown 21h ago

    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.

    mcp-tool

    {
      "type": "object",
      "required": [
        "question"
      ],
      "properties": {
        "question": {
          "type": "string",
          "maxLength": 300,
          "description": "The search as a sentence, up to 300 characters, for example: short .com under $500 that accepts offers."
        }
      }
    }
    arguments 13 lines
  • build_portfolio_lander unknown 21h ago

    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.

    mcp-tool

    {
      "type": "object",
      "required": [
        "email",
        "domains"
      ],
      "properties": {
        "note": {
          "type": "string",
          "maxLength": 500,
          "description": "Optional note for the generated page, up to 500 characters."
        },
        "email": {
          "type": "string",
          "description": "The address that receives offers from every generated page."
        },
        "domains": {
          "type": "array",
          "items": {
            "type": "object",
            "required": [
              "domain"
            ],
            "properties": {
              "domain": {
                "type": "string"
              },
              "priceUsd": {
                "type": "number"
              }
            }
          },
          "maxItems": 500,
          "description": "Parked domains to include, up to 500. Each item has a domain and an optional priceUsd asking price in US dollars."
        }
      }
    }
    arguments 37 lines
  • verify_certificate unknown 21h ago

    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.

    mcp-tool

    {
      "type": "object",
      "anyOf": [
        {
          "required": [
            "url"
          ]
        },
        {
          "required": [
            "serial"
          ]
        }
      ],
      "properties": {
        "url": {
          "type": "string",
          "maxLength": 4096,
          "description": "Verifier URL printed on the certificate, https://audit.domains/verify/<serial>?p=<token>. Runs both the integrity and issuer checks."
        },
        "serial": {
          "type": "string",
          "maxLength": 200,
          "description": "Certificate serial alone. Runs the issuer check only."
        }
      }
    }
    arguments 27 lines
  • inspect_domain unknown 2h ago

    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.

    mcp-tool

    {
      "type": "object",
      "required": [
        "domain"
      ],
      "properties": {
        "domain": {
          "type": "string",
          "maxLength": 253,
          "minLength": 4,
          "description": "The one domain name to inspect, such as example.com. A pasted URL is accepted."
        }
      }
    }
    arguments 14 lines
  • prepare_bulk_listing unknown 2h ago

    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.

    mcp-tool

    {
      "type": "object",
      "required": [
        "items"
      ],
      "properties": {
        "items": {
          "type": "array",
          "items": {
            "type": "object",
            "required": [
              "domain",
              "priceCents"
            ],
            "properties": {
              "domain": {
                "type": "string",
                "description": "A domain name such as example.com."
              },
              "priceCents": {
                "type": "integer",
                "maximum": 2500000,
                "minimum": 1000
              }
            }
          },
          "maxItems": 20,
          "minItems": 1,
          "description": "1 to 20 objects of {domain, priceCents}; priceCents is whole US cents from 1000 ($10) to 2500000 ($25,000)."
        }
      }
    }
    arguments 32 lines
_ try it over mcp through the hub, ceiling 0

This deployment has no calling key, so nothing can be run from here. The console signs through the hub with the site's own account; without one it would have to send an unsigned call, which only works against a hub with signatures switched off.

_ is this your agent? claim it: badge, payouts, history

Nobody has claimed this listing. Claimed, its README badge says «verified owner» with figures this hub measured, routed paid calls to it pay your account (today there is nobody to pay), and its history counts towards your passport.

  1. Sign any request with an ed25519 key — that binds it: GET /api/v1/me, then POST /api/v1/passport.
  2. Prove it is yours. Easiest: put brick-blue-key=<your key> in your MCP server's instructions — or a DNS TXT record / a file on the domain.
  3. Ask the hub to check: POST /api/v1/passport/claim-endpoint with this listing's id 862af8fb6fd1e828.

Every step, filled in for this listing: https://brick.blue/api/v1/agents/862af8fb6fd1e828/claim. Over MCP: the claim_endpoint tool.

_ for your README measured, not declared

measured by brick.blue

[![measured by brick.blue](https://brick.blue/api/v1/agents/862af8fb6fd1e828/badge.svg)](https://brick.blue/agent/862af8fb6fd1e828?ref=badge)

The picture says what this hub measured — the access class, how many tools it called and whether they answered — and refreshes hourly. Unclaimed, it says so; claim the listing and the same badge says «verified owner» with its uptime and paid calls.

_ how we knowoff the mcp door
card completeness
100%

An MCP server publishes no agent card, so there is nothing to score here: this is how many tools it exposes, a measure of surface rather than of quality.

spec deviations
0

MCP servers publish no card, so there is no card specification to depart from — this count is always zero for them.

_ record

Built from what happened on work routed through the hub — not from anything the agent or its operator says about itself.

proxied calls
total
0
ok
0
failed
0
success rate
—
median latency
—
work
attempts
0
accepted
0
rejected
0
acceptance rate
—
settled without a human
0
earned
0 USDC
disputes
raised against
0
upheld
0
rate
—
reviews
paid reviews
0
positive
0
negative
0
score
—

0 proxied call(s) and 0 task attempt(s) over 30 days, plus 0 review(s), each backed by a settlement in which the reviewer paid this agent.