Skip to main content
Glama

Check a business's website

check_business
Idempotent

Check what an AI agent can do on a business's website (message, book, order, sign up, pay, change or cancel), and its agentic score. Waits up to 25 seconds; if the read is not done, call again for the score. Set fresh after the site changed. Use it when a person asks how agent-ready a business is, or wants to improve their own; to find businesses, use search_businesses. A setup link in the answer is for the owner to fill in.

Input Schema

NameRequiredDescriptionDefault
urlYesThe business's website, as a URL or a bare domain like salon.example.
freshNoRead the site again rather than answer the stored result: for a business that just changed its site. Allowed a few minutes after the last read; before that, the stored result is answered with when to ask again.

Output Schema

NameRequiredDescriptionDefault
urlYes
rankNo
siteNo
badgeNo
fixesNo
gradeNo
levelNo
ownerNo
queueNo
rulesNo
stateYes
domainYes
reportNo
answersNo
profileNo
excludedNo
pay_withNo
indexableYes
scored_atNo
checked_atNo
capabilitiesNo
door_historyNoThe site's doors as this network's own reads found them, as get_business gives door_history.
track_recordNoThe business's track record, as get_business gives it.
agentic_scoreNo
not_certificationNo
web_person_messageNo

Schema Changelog

Changes observed during successful MCP inspections.

  1. Changed2 schema fields changed
    • addedOutput schema / properties / pay_with / items / properties / currencies
      Added value: +{
      +  "items": {
      +    "type": "string"
      +  },
      +  "type": "array"
      +}
    • addedOutput schema / properties / pay_with / items / properties / to
      Added value: +{
      +  "maxLength": 120,
      +  "type": "string"
      +}
  2. Changed42 schema fields changed
    • removedInput schema / $schema
      Removed value: -"https://json-schema.org/draft/2020-12/schema"
    • removedInput schema / title
      Removed value: -"MCP check_business: arguments"
    • removedOutput schema / $schema
      Removed value: -"https://json-schema.org/draft/2020-12/schema"
    • addedOutput schema / description
      Added value: +"Every field is described in this tool's outputSchema at https://network.surfingdog.ai/.well-known/mcp/server-card.json."
    • removedOutput schema / properties / answers / description
      Removed value: -"Message, book, order, sign up, cancel and negotiate, in that order."
    • removedOutput schema / properties / answers / items / properties / checked_at / pattern
      Removed value: -"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d:[0-5]\\d(?:\\.\\d+)?(?:Z))$"
    • removedOutput schema / properties / capabilities / items / properties / checked_at / pattern
      Removed value: -"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d:[0-5]\\d(?:\\.\\d+)?(?:Z))$"
    • removedOutput schema / properties / capabilities / items / properties / via / description
      Removed value: -"The tool, skill, operation or field it was read from."
    • removedOutput schema / properties / checked_at / pattern
      Removed value: -"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d:[0-5]\\d(?:\\.\\d+)?(?:Z))$"
    • changedOutput schema / properties / door_history / description
      Previous value: -"Every door type at every host of the site a read of the network's found answering (§4.8)."New value: +"The site's doors as this network's own reads found them, as get_business gives door_history."
    • removedOutput schema / properties / door_history / properties
      Removed value: -{
      -  "as_of": {
      -    "description": "The UTC day it was read on.",
      -    "format": "date",
      -    "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))$",
      -    "type": "string"
      -  },
      -  "doors": {
      -    "items": {
      -      "properties": {
      -        "checks": {
      -          "description": "A door the network reads every day (a member's, a claimed listing's), from 14 checked days.",
      -          "properties": {
      -            "answered": {
      -              "description": "Of them, days on which every check answered: one missed check (failed, or blocked while the door is down by the network's reads) makes the day missed, and one refused check (blocked otherwise) makes it refused.",
      -              "maximum": 9007199254740991,
      -              "minimum": 0,
      -              "type": "integer"
      -            },
      -            "days": {
      -              "description": "Days checked: days on which the network's daily read of the door concluded. A read an agent's report or the business asked for is no check.",
      -              "maximum": 9007199254740991,
      -              "minimum": 1,
      -              "type": "integer"
      -            },
      -            "first_checked": {
      -              "description": "The first day checked.",
      -              "format": "date",
      -              "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))$",
      -              "type": "string"
      -            },
      -            "last_checked": {
      -              "description": "The last day checked.",
      -              "format": "date",
      -              "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))$",
      -              "type": "string"
      -            },
      -            "recent": {
      -              "description": "The last 90 days ending on as_of, oldest first: a every check answered, x one was missed, b one was refused and none missed, . no check that day.",
      -              "pattern": "^[axb.]{90}$",
      -              "type": "string"
      -            },
      -            "refused": {
      -              "description": "Of them, days on which a check was refused and none was missed: never answered days.",
      -              "maximum": 9007199254740991,
      -              "minimum": 0,
      -              "type": "integer"
      -            }
      -          },
      -          "required": [
      -            "first_checked",
      -            "last_checked",
      -            "days",
      -            "answered",
      -            "refused",
      -            "recent"
      -          ],
      -          "type": "object"
      -        },
      -        "current": {
      -          "description": "Whether a door of this type is at this host now (not gone).",
      -          "type": "boolean"
      -        },
      -        "days_seen": {
      -          "description": "On how many days a read of the network's found it answering: a door read about once a month is seen on few days, and nothing is said of the days between.",
      -          "maximum": 9007199254740991,
      -          "minimum": 1,
      -          "type": "integer"
      -        },
      -        "first_seen": {
      -          "description": "The first UTC day a read of the network's found a door of this type at this host answering.",
      -          "format": "date",
      -          "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))$",
      -          "type": "string"
      -        },
      -        "host": {
      -          "description": "The door's host, lower case.",
      -          "type": "string"
      -        },
      -        "last_seen": {
      -          "description": "The last such day.",
      -          "format": "date",
      -          "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))$",
      -          "type": "string"
      -        },
      -        "summary": {
      -          "description": "With checks, in English: \"Answered every check on 41 of 42 days checked since 3 Oct 2026 (97%).\", the share floored, the days refused after it (\"(75%; refused our check on 5)\"), \"from … to …\" when the last check is more than 7 days old. Informative: another network may word it its own way.",
      -          "type": "string"
      -        },
      -        "type": {
      -          "pattern": "^(inbox|mcp|a2a|openapi|api|ucp|acp|nlweb|webhook|other|platform:[a-z0-9-]{1,40})$",
      -          "type": "string"
      -        }
      -      },
      -      "required": [
      -        "type",
      -        "host",
      -        "first_seen",
      -        "last_seen",
      -        "days_seen",
      -        "current"
      -      ],
      -      "type": "object"
      -    },
      -    "type": "array"
      -  }
      -}
    • removedOutput schema / properties / door_history / required
      Removed value: -[
      -  "as_of",
      -  "doors"
      -]
    • removedOutput schema / properties / fixes / items / properties / points / maximum
      Removed value: -9007199254740991
    • removedOutput schema / properties / fixes / items / properties / with / description
      Removed value: -"What the fix brings with it (changing and cancelling a booking), counted as yes in its points."
    • removedOutput schema / properties / owner / properties / manage / description
      Removed value: -"The owner's page (/b/<domain>/owner): claim, correct or hide, with no AI and no account."
    • removedOutput schema / properties / pay_with / description
      Removed value: -"How the business is paid, each way with its evidence: declared by the business, or seen on its own pages and files."
    • removedOutput schema / properties / pay_with / items / properties / label / description
      Removed value: -"Its English name: Apple Pay for apple_pay."
    • removedOutput schema / properties / pay_with / items / properties / token / description
      Removed value: -"A payment token of GET /v1/attributes."
    • removedOutput schema / properties / pay_with / items / properties / url / description
      Removed value: -"The page, file, profile, manifest or door the evidence is at."
    • removedOutput schema / properties / pay_with / items / properties / via / description
      Removed value: -"Where the evidence is: registration, manifest, schema_org, ucp, acp, door, file or page today. A later network may add one: read a via you do not know as evidence of its src."
    • removedOutput schema / properties / queue / description
      Removed value: -"Only while queued, checking or scoring."
    • removedOutput schema / properties / queue / properties / position / maximum
      Removed value: -9007199254740991
    • removedOutput schema / properties / queue / properties / retry_after_s / maximum
      Removed value: -9007199254740991
    • removedOutput schema / properties / rank / description
      Removed value: -"Only when done, not hidden and of a kind the directory ranks."
    • removedOutput schema / properties / rank / properties / of / maximum
      Removed value: -9007199254740991
    • removedOutput schema / properties / rank / properties / overall / properties / of / maximum
      Removed value: -9007199254740991
    • removedOutput schema / properties / rank / properties / overall / properties / position / maximum
      Removed value: -9007199254740991
    • removedOutput schema / properties / rank / properties / position / maximum
      Removed value: -9007199254740991
    • removedOutput schema / properties / report / description
      Removed value: -"Report how each use of a door went, done or not: see the guide."
    • removedOutput schema / properties / report / properties / guide / description
      Removed value: -"How to report, for an agent: <network>/report.md."
    • removedOutput schema / properties / report / properties / reward / description
      Removed value: -"What the agent gets for reporting, in one sentence."
    • removedOutput schema / properties / report / properties / tool / description
      Removed value: -"The MCP tool that takes door reports: report_door."
    • removedOutput schema / properties / report / properties / url / description
      Removed value: -"The same over REST: POST <network>/v1/door-reports."
    • removedOutput schema / properties / rules / description
      Removed value: -"The score rules applied (GET /v1/score-rules?version=N)."
    • removedOutput schema / properties / rules / properties / version / maximum
      Removed value: -9007199254740991
    • removedOutput schema / properties / scored_at / pattern
      Removed value: -"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d:[0-5]\\d(?:\\.\\d+)?(?:Z))$"
    • removedOutput schema / properties / site / description
      Removed value: -"The business's own site."
    • changedOutput schema / properties / track_record / description
      Previous value: -"A member's track record, from the same nightly count as its standing and shown under the same rules: the promises it kept and broke, and when. From rules version 8, one that rests on the business's own word is self_reported: its counts, with no score and no count of customers. Only what its state can say is present; a business that is not a member has none."New value: +"The business's track record, as get_business gives it."
    • removedOutput schema / properties / track_record / properties
      Removed value: -{
      -  "as_of": {
      -    "description": "The nightly count it is from (00:00 UTC).",
      -    "format": "date-time",
      -    "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d:[0-5]\\d(?:\\.\\d+)?(?:Z))$",
      -    "type": "string"
      -  },
      -  "broken": {
      -    "description": "shown: closed as not kept by the business or by a customer's report that stands, left open 9 days past due, or a refund paid late.",
      -    "maximum": 9007199254740991,
      -    "minimum": 0,
      -    "type": "integer"
      -  },
      -  "closed": {
      -    "description": "gathering and shown: kept plus broken.",
      -    "maximum": 9007199254740991,
      -    "minimum": 0,
      -    "type": "integer"
      -  },
      -  "confirmable": {
      -    "description": "shown: whether this network can verify any acknowledgement yet (a recognised platform's agent key, or an established person's).",
      -    "type": "boolean"
      -  },
      -  "confirmed": {
      -    "description": "shown: how many of the closed are kept outcomes a verified acknowledgement backs, confirmed by the customer's side (a customer's report is not a confirmation); the rest are the business's own word.",
      -    "maximum": 9007199254740991,
      -    "minimum": 0,
      -    "type": "integer"
      -  },
      -  "customers": {
      -    "description": "gathering and shown, unless self_reported: the distinct customers the closed promises came from, as its receipts name them (the customer's mailbox when known, else, before rules version 8, the receipt's sub; from rules version 8 a sub that names no person is never a customer, and every receipt at a business that names nobody is one anonymous customer). Not reputation.customers, which counts only customers this network can tell apart.",
      -    "maximum": 9007199254740991,
      -    "minimum": 0,
      -    "type": "integer"
      -  },
      -  "from": {
      -    "description": "shown: the earliest day of the evidence counted, at 00:00 UTC (a day, never the moment of a promise).",
      -    "format": "date-time",
      -    "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d:[0-5]\\d(?:\\.\\d+)?(?:Z))$",
      -    "type": "string"
      -  },
      -  "held_until": {
      -    "description": "held: the night its record is counted from.",
      -    "format": "date-time",
      -    "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d:[0-5]\\d(?:\\.\\d+)?(?:Z))$",
      -    "type": "string"
      -  },
      -  "in_words": {
      -    "description": "The record in one or two plain sentences, with how many of its closed promises the customer's side confirmed; the rest are the business's own word.",
      -    "type": "string"
      -  },
      -  "kept": {
      -    "description": "shown.",
      -    "maximum": 9007199254740991,
      -    "minimum": 0,
      -    "type": "integer"
      -  },
      -  "open": {
      -    "description": "shown, from rules version 8: its v2 promises still open (reputation.open).",
      -    "maximum": 9007199254740991,
      -    "minimum": 0,
      -    "type": "integer"
      -  },
      -  "refunds_late": {
      -    "description": "shown, of broken: refunds paid late (refund.late).",
      -    "maximum": 9007199254740991,
      -    "minimum": 0,
      -    "type": "integer"
      -  },
      -  "rules_url": {
      -    "format": "uri",
      -    "type": "string"
      -  },
      -  "self_reported": {
      -    "description": "gathering and shown, from rules version 8: the record rests on the business's own word (less than a fifth of it is kept outcomes a verified acknowledgement backs, as its reputation's self_reported), so it has no customers, and its threshold none.",
      -    "type": "boolean"
      -  },
      -  "state": {
      -    "description": "held: a new member's 30 days after it joins, when nothing is counted; none: no receipts yet; pending: receipts the next nightly count reaches; gathering: fewer closed promises, or customers, than threshold; shown: the record.",
      -    "enum": [
      -      "held",
      -      "none",
      -      "pending",
      -      "gathering",
      -      "shown"
      -    ],
      -    "type": "string"
      -  },
      -  "threshold": {
      -    "description": "What a record shows from: closed promises, from customers distinct customers; a self_reported record is not asked for customers, and has none here.",
      -    "properties": {
      -      "closed": {
      -        "maximum": 9007199254740991,
      -        "minimum": 1,
      -        "type": "integer"
      -      },
      -      "customers": {
      -        "maximum": 9007199254740991,
      -        "minimum": 1,
      -        "type": "integer"
      -      }
      -    },
      -    "required": [
      -      "closed"
      -    ],
      -    "type": "object"
      -  },
      -  "to": {
      -    "description": "shown: the latest day of the evidence counted, at 00:00 UTC (a day, never the moment of a promise).",
      -    "format": "date-time",
      -    "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d:[0-5]\\d(?:\\.\\d+)?(?:Z))$",
      -    "type": "string"
      -  },
      -  "unclosed": {
      -    "description": "shown, of broken: left open 9 days past due (promise.unclosed).",
      -    "maximum": 9007199254740991,
      -    "minimum": 0,
      -    "type": "integer"
      -  }
      -}
    • removedOutput schema / properties / track_record / required
      Removed value: -[
      -  "state",
      -  "in_words"
      -]
    • removedOutput schema / properties / url / description
      Removed value: -"Its result page."
    • removedOutput schema / title
      Removed value: -"MCP check_business: structuredContent"
  3. Changed2 schema fields changed
    • addedOutput schema / properties / owner / properties / manage
      Added value: +{
      +  "description": "The owner's page (/b/<domain>/owner): claim, correct or hide, with no AI and no account.",
      +  "format": "uri",
      +  "type": "string"
      +}
    • addedOutput schema / properties / pay_with
      Added value: +{
      +  "description": "How the business is paid, each way with its evidence: declared by the business, or seen on its own pages and files.",
      +  "items": {
      +    "properties": {
      +      "label": {
      +        "description": "Its English name: Apple Pay for apple_pay.",
      +        "type": "string"
      +      },
      +      "src": {
      +        "enum": [
      +          "declared",
      +          "seen"
      +        ],
      +        "type": "string"
      +      },
      +      "token": {
      +        "description": "A payment token of GET /v1/attributes.",
      +        "type": "string"
      +      },
      +      "url": {
      +        "description": "The page, file, profile, manifest or door the evidence is at.",
      +        "format": "uri",
      +        "type": "string"
      +      },
      +      "via": {
      +        "description": "Where the evidence is: registration, manifest, schema_org, ucp, acp, door, file or page today. A later network may add one: read a via you do not know as evidence of its src.",
      +        "pattern": "^[a-z][a-z0-9_]{0,31}$",
      +        "type": "string"
      +      }
      +    },
      +    "required": [
      +      "token",
      +      "label",
      +      "src",
      +      "via"
      +    ],
      +    "type": "object"
      +  },
      +  "type": "array"
      +}
  4. Changed1 schema field changed
    • addedOutput schema / properties / door_history
      Added value: +{
      +  "description": "Every door type at every host of the site a read of the network's found answering (§4.8).",
      +  "properties": {
      +    "as_of": {
      +      "description": "The UTC day it was read on.",
      +      "format": "date",
      +      "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))$",
      +      "type": "string"
      +    },
      +    "doors": {
      +      "items": {
      +        "properties": {
      +          "checks": {
      +            "description": "A door the network reads every day (a member's, a claimed listing's), from 14 checked days.",
      +            "properties": {
      +              "answered": {
      +                "description": "Of them, days on which every check answered: one missed check (failed, or blocked while the door is down by the network's reads) makes the day missed, and one refused check (blocked otherwise) makes it refused.",
      +                "maximum": 9007199254740991,
      +                "minimum": 0,
      +                "type": "integer"
      +              },
      +              "days": {
      +                "description": "Days checked: days on which the network's daily read of the door concluded. A read an agent's report or the business asked for is no check.",
      +                "maximum": 9007199254740991,
      +                "minimum": 1,
      +                "type": "integer"
      +              },
      +              "first_checked": {
      +                "description": "The first day checked.",
      +                "format": "date",
      +                "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))$",
      +                "type": "string"
      +              },
      +              "last_checked": {
      +                "description": "The last day checked.",
      +                "format": "date",
      +                "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))$",
      +                "type": "string"
      +              },
      +              "recent": {
      +                "description": "The last 90 days ending on as_of, oldest first: a every check answered, x one was missed, b one was refused and none missed, . no check that day.",
      +                "pattern": "^[axb.]{90}$",
      +                "type": "string"
      +              },
      +              "refused": {
      +                "description": "Of them, days on which a check was refused and none was missed: never answered days.",
      +                "maximum": 9007199254740991,
      +                "minimum": 0,
      +                "type": "integer"
      +              }
      +            },
      +            "required": [
      +              "first_checked",
      +              "last_checked",
      +              "days",
      +              "answered",
      +              "refused",
      +              "recent"
      +            ],
      +            "type": "object"
      +          },
      +          "current": {
      +            "description": "Whether a door of this type is at this host now (not gone).",
      +            "type": "boolean"
      +          },
      +          "days_seen": {
      +            "description": "On how many days a read of the network's found it answering: a door read about once a month is seen on few days, and nothing is said of the days between.",
      +            "maximum": 9007199254740991,
      +            "minimum": 1,
      +            "type": "integer"
      +          },
      +          "first_seen": {
      +            "description": "The first UTC day a read of the network's found a door of this type at this host answering.",
      +            "format": "date",
      +            "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))$",
      +            "type": "string"
      +          },
      +          "host": {
      +            "description": "The door's host, lower case.",
      +            "type": "string"
      +          },
      +          "last_seen": {
      +            "description": "The last such day.",
      +            "format": "date",
      +            "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))$",
      +            "type": "string"
      +          },
      +          "summary": {
      +            "description": "With checks, in English: \"Answered every check on 41 of 42 days checked since 3 Oct 2026 (97%).\", the share floored, the days refused after it (\"(75%; refused our check on 5)\"), \"from … to …\" when the last check is more than 7 days old. Informative: another network may word it its own way.",
      +            "type": "string"
      +          },
      +          "type": {
      +            "pattern": "^(inbox|mcp|a2a|openapi|api|ucp|acp|nlweb|webhook|other|platform:[a-z0-9-]{1,40})$",
      +            "type": "string"
      +          }
      +        },
      +        "required": [
      +          "type",
      +          "host",
      +          "first_seen",
      +          "last_seen",
      +          "days_seen",
      +          "current"
      +        ],
      +        "type": "object"
      +      },
      +      "type": "array"
      +    }
      +  },
      +  "required": [
      +    "as_of",
      +    "doors"
      +  ],
      +  "type": "object"
      +}
  5. Changed1 schema field changed
    • changedOutput schema / properties / level / enum
      Previous value: -[
      -  "listed",
      -  "readable",
      -  "askable",
      -  "bookable",
      -  "payable"
      -]New value: +[
      +  "listed",
      +  "readable",
      +  "askable",
      +  "bookable",
      +  "orderable",
      +  "payable"
      +]
  6. Changed1 schema field changed
    • addedOutput schema / properties / report
      Added value: +{
      +  "description": "Report how each use of a door went, done or not: see the guide.",
      +  "properties": {
      +    "guide": {
      +      "description": "How to report, for an agent: <network>/report.md.",
      +      "format": "uri",
      +      "type": "string"
      +    },
      +    "reward": {
      +      "description": "What the agent gets for reporting, in one sentence.",
      +      "type": "string"
      +    },
      +    "tool": {
      +      "description": "The MCP tool that takes door reports: report_door.",
      +      "type": "string"
      +    },
      +    "url": {
      +      "description": "The same over REST: POST <network>/v1/door-reports.",
      +      "format": "uri",
      +      "type": "string"
      +    }
      +  },
      +  "required": [
      +    "tool",
      +    "url",
      +    "guide",
      +    "reward"
      +  ],
      +  "type": "object"
      +}
  7. First observed

TDQS

A4.9/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Goes well beyond the annotations by disclosing the 25-second wait ceiling and the retry protocol ('if the read is not done, call again for the score'), which an agent cannot infer from readOnlyHint/idempotentHint. It also warns that a setup link in the answer is for the owner to fill in, preventing a misdirected agent action, and notes that a too-early fresh request returns the stored result with a retry hint.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Front-loads what the tool returns, then latency/retry, then freshness, then the usage trigger and the alternative tool. The parenthetical capability list is dense but load-bearing, and no sentence is redundant with the schema or annotations.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

An output schema exists, so return shape needn't be explained; annotations cover the safety profile. What remains — latency, polling, freshness cooldown, owner-facing setup links, and the sibling boundary — is all covered, so an agent has everything needed to call this correctly on the first try.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100%, so both parameters are already documented, and the schema itself carries the freshness cooldown detail. The description adds a small amount of extra meaning by tying `fresh` to the 'site changed' scenario and to the re-check flow, but it does not add syntax or format guidance for `url` beyond the schema.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb and resource — checks what an AI agent can do on a business's website — and enumerates the concrete capabilities (message, book, order, sign up, pay, change or cancel) plus the agentic score. It explicitly names the sibling it is not (search_businesses), so an agent can route 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.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Gives an explicit trigger: 'when a person asks how agent-ready a business is, or wants to improve their own', and an explicit alternative: 'to find businesses, use search_businesses'. It also states the precondition for the fresh path ('set fresh after the site changed'), which is exactly the when-to-use distinction that matters for this tool.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

Try in Browser

Glama MCP Gateway

Add one secure layer between your agents and this server.

Resources