Skip to main content
Glama

Change a business's listing

update_business
Destructive

For a business's own AI: correct its listing (any field register_business takes), add or remove doors, turn it off or on, hide its score page, or opt out (list, crawl or all), with its claim_token or a proof as register_business asks. With no proof it removes only a listing nobody claimed.

Input Schema

NameRequiredDescriptionDefault
setNoThe fields to change: any field register_business takes, as its inputSchema describes it.
doorsNo
proofNo
domainYes
listingNooff hides it from search and keeps it in the index.
opt_outNoStops the listing (list), the crawl (crawl) or both (all). Without a claim token or a proof it removes only an entry nobody claimed. A business that opted out comes back with a domain or key proof.
score_pageNohidden takes the business's agentic score result page out of view, its ranks and leaderboards included; shown brings it back. It needs the claim token or a proof, as set does.
claim_tokenNoGiven by a successful register_business: proof again for 90 days, for this listing only.

Output Schema

NameRequiredDescriptionDefault
cardNoThe listing as it stands now, as search_businesses gives each business.
levelNo
notesNo
proofNo
detailNo
domainYes
listedNo
statusYes
claimedNo
droppedNo
challengeNo
next_levelNo
score_pageNo
want_inboxNo
claim_tokenNo
claim_token_expires_atNo

Schema Changelog

Changes observed during successful MCP inspections.

  1. Changed23 schema fields changed
    • removedInput schema / $schema
      Removed value: -"https://json-schema.org/draft/2020-12/schema"
    • removedInput schema / properties / doors / properties / add / items / properties / rate_limit / maximum
      Removed value: -9007199254740991
    • removedInput schema / properties / doors / properties / add / items / properties / rate_limit / minimum
      Removed value: --9007199254740991
    • changedInput schema / properties / opt_out / description
      Previous value: -"Stops the listing (list), the crawl (crawl) or both (all). Without a claim token or a proof it removes an entry the network found that nobody claimed, and never a claimed or registered listing, which needs its claim_token or a proof as strong as its claim. A business that opted out comes back with a domain or key proof."New value: +"Stops the listing (list), the crawl (crawl) or both (all). Without a claim token or a proof it removes only an entry nobody claimed. A business that opted out comes back with a domain or key proof."
    • changedInput schema / properties / set / description
      Previous value: -"Any field register_business takes, but domain."New value: +"The fields to change: any field register_business takes, as its inputSchema describes it."
    • removedInput schema / properties / set / properties
      Removed value: -{
      -  "alternate_names": {
      -    "description": "Other names the business goes by; a name longer than the network keeps is dropped (the reference network keeps 60 characters and 4 words at most).",
      -    "items": {
      -      "maxLength": 200,
      -      "type": "string"
      -    },
      -    "maxItems": 5,
      -    "type": "array"
      -  },
      -  "attributes": {
      -    "additionalProperties": {
      -      "anyOf": [
      -        {
      -          "type": "boolean"
      -        },
      -        {
      -          "maxLength": 60,
      -          "type": "string"
      -        }
      -      ]
      -    },
      -    "description": "Keys of list_attributes.",
      -    "propertyNames": {
      -      "maxLength": 60,
      -      "type": "string"
      -    },
      -    "type": "object"
      -  },
      -  "category": {
      -    "description": "What the business is: one category, and at most two more.",
      -    "properties": {
      -      "alternates": {
      -        "items": {
      -          "maxLength": 80,
      -          "type": "string"
      -        },
      -        "maxItems": 2,
      -        "type": "array"
      -      },
      -      "primary": {
      -        "description": "A place category id (GET /v1/categories?group=…) or a group slug.",
      -        "maxLength": 80,
      -        "type": "string"
      -      }
      -    },
      -    "required": [
      -      "primary"
      -    ],
      -    "type": "object"
      -  },
      -  "currencies": {
      -    "description": "ISO 4217.",
      -    "items": {
      -      "maxLength": 3,
      -      "type": "string"
      -    },
      -    "maxItems": 5,
      -    "type": "array"
      -  },
      -  "description": {
      -    "description": "One line on what it does; the first line is at most 160.",
      -    "maxLength": 500,
      -    "minLength": 1,
      -    "type": "string"
      -  },
      -  "doors": {
      -    "items": {
      -      "properties": {
      -        "kinds": {
      -          "description": "Of ask, quote, book, order: what it answers.",
      -          "items": {
      -            "maxLength": 20,
      -            "type": "string"
      -          },
      -          "maxItems": 4,
      -          "type": "array"
      -        },
      -        "protocol": {
      -          "description": "What it speaks, for type \"other\": like beckn or graphql.",
      -          "maxLength": 40,
      -          "type": "string"
      -        },
      -        "rate_limit": {
      -          "description": "Requests a day this door takes, 1 to 20; it only lowers the network's own.",
      -          "maximum": 9007199254740991,
      -          "minimum": -9007199254740991,
      -          "type": "integer"
      -        },
      -        "terms_url": {
      -          "maxLength": 2048,
      -          "type": "string"
      -        },
      -        "type": {
      -          "description": "inbox, mcp, a2a, openapi, api, ucp, acp, nlweb, webhook, other, or platform:<name>. Mail, phone, messaging, forms and web pages are human channels and never doors.",
      -          "maxLength": 60,
      -          "type": "string"
      -        },
      -        "url": {
      -          "description": "https, with no user in it.",
      -          "maxLength": 2048,
      -          "type": "string"
      -        }
      -      },
      -      "required": [
      -        "type",
      -        "url"
      -      ],
      -      "type": "object"
      -    },
      -    "maxItems": 10,
      -    "type": "array"
      -  },
      -  "hours": {
      -    "description": "As a profile's hours: {\"timezone\": \"Europe/Paris\", \"weekly\": {\"tue\": [[\"09:00\", \"19:00\"]]}}.",
      -    "properties": {
      -      "closures": {
      -        "items": {
      -          "properties": {
      -            "from": {
      -              "maxLength": 10,
      -              "type": "string"
      -            },
      -            "to": {
      -              "maxLength": 10,
      -              "type": "string"
      -            }
      -          },
      -          "required": [
      -            "from",
      -            "to"
      -          ],
      -          "type": "object"
      -        },
      -        "maxItems": 100,
      -        "type": "array"
      -      },
      -      "timezone": {
      -        "maxLength": 64,
      -        "type": "string"
      -      },
      -      "weekly": {
      -        "additionalProperties": {
      -          "items": {
      -            "items": {
      -              "maxLength": 5,
      -              "type": "string"
      -            },
      -            "type": "array"
      -          },
      -          "type": "array"
      -        },
      -        "propertyNames": {
      -          "type": "string"
      -        },
      -        "type": "object"
      -      }
      -    },
      -    "required": [
      -      "timezone",
      -      "weekly"
      -    ],
      -    "type": "object"
      -  },
      -  "languages": {
      -    "description": "Language tags, like pt or fr-CA.",
      -    "items": {
      -      "maxLength": 35,
      -      "type": "string"
      -    },
      -    "maxItems": 10,
      -    "minItems": 1,
      -    "type": "array"
      -  },
      -  "locale": {
      -    "description": "The language to answer in.",
      -    "maxLength": 35,
      -    "type": "string"
      -  },
      -  "name": {
      -    "description": "As the business writes it.",
      -    "maxLength": 200,
      -    "minLength": 1,
      -    "type": "string"
      -  },
      -  "pay": {
      -    "description": "Payment tokens of list_attributes.",
      -    "items": {
      -      "maxLength": 40,
      -      "type": "string"
      -    },
      -    "maxItems": 30,
      -    "type": "array"
      -  },
      -  "price_band": {
      -    "description": "1 (cheapest) to 4.",
      -    "maximum": 9007199254740991,
      -    "minimum": -9007199254740991,
      -    "type": "integer"
      -  },
      -  "want_inbox": {
      -    "type": "boolean"
      -  },
      -  "where": {
      -    "description": "A storefront needs an address or geo, a service area its radius or countries, online its ships_to.",
      -    "properties": {
      -      "address": {
      -        "properties": {
      -          "country": {
      -            "maxLength": 2,
      -            "type": "string"
      -          },
      -          "locality": {
      -            "maxLength": 100,
      -            "type": "string"
      -          },
      -          "postal_code": {
      -            "maxLength": 20,
      -            "type": "string"
      -          },
      -          "region": {
      -            "maxLength": 100,
      -            "type": "string"
      -          },
      -          "street": {
      -            "maxLength": 200,
      -            "type": "string"
      -          }
      -        },
      -        "type": "object"
      -      },
      -      "geo": {
      -        "properties": {
      -          "lat": {
      -            "maximum": 90,
      -            "minimum": -90,
      -            "type": "number"
      -          },
      -          "lng": {
      -            "maximum": 180,
      -            "minimum": -180,
      -            "type": "number"
      -          }
      -        },
      -        "required": [
      -          "lat",
      -          "lng"
      -        ],
      -        "type": "object"
      -      },
      -      "kind": {
      -        "items": {
      -          "enum": [
      -            "storefront",
      -            "service_area",
      -            "online"
      -          ],
      -          "type": "string"
      -        },
      -        "minItems": 1,
      -        "type": "array"
      -      },
      -      "service_area": {
      -        "properties": {
      -          "countries": {
      -            "description": "At most 50.",
      -            "items": {
      -              "maxLength": 2,
      -              "type": "string"
      -            },
      -            "type": "array"
      -          },
      -          "radius_km": {
      -            "description": "At most 300.",
      -            "type": "number"
      -          }
      -        },
      -        "type": "object"
      -      },
      -      "ships_to": {
      -        "items": {
      -          "maxLength": 2,
      -          "type": "string"
      -        },
      -        "maxItems": 250,
      -        "type": "array"
      -      }
      -    },
      -    "required": [
      -      "kind"
      -    ],
      -    "type": "object"
      -  }
      -}
    • removedInput schema / title
      Removed value: -"MCP update_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."
    • changedOutput schema / properties / card / description
      Previous value: -"The card search_businesses gives, as it stands now."New value: +"The listing as it stands now, as search_businesses gives each business."
    • removedOutput schema / properties / card / properties
      Removed value: -{
      -  "accepts": {
      -    "properties": {
      -      "kinds": {
      -        "items": {
      -          "enum": [
      -            "ask",
      -            "quote",
      -            "book",
      -            "order",
      -            "pay"
      -          ],
      -          "type": "string"
      -        },
      -        "type": "array"
      -      },
      -      "pay": {
      -        "description": "Payment tokens of GET /v1/attributes' payments.",
      -        "items": {
      -          "type": "string"
      -        },
      -        "type": "array"
      -      },
      -      "pay_with": {
      -        "description": "Each of pay with its evidence, in the vocabulary's order. Absent from a listing built before it.",
      -        "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"
      -      }
      -    },
      -    "required": [
      -      "kinds"
      -    ],
      -    "type": "object"
      -  },
      -  "answering": {
      -    "description": "Its inbox answered this network within the last day.",
      -    "type": "boolean"
      -  },
      -  "attributes": {
      -    "additionalProperties": {
      -      "properties": {
      -        "src": {
      -          "enum": [
      -            "declared",
      -            "seen",
      -            "probably"
      -          ],
      -          "type": "string"
      -        },
      -        "v": {
      -          "type": [
      -            "boolean",
      -            "string",
      -            "number"
      -          ]
      -        }
      -      },
      -      "required": [
      -        "v",
      -        "src"
      -      ],
      -      "type": "object"
      -    },
      -    "description": "Keys of GET /v1/attributes.",
      -    "propertyNames": {
      -      "type": "string"
      -    },
      -    "type": "object"
      -  },
      -  "categories": {
      -    "description": "Slugs of the categories list.",
      -    "items": {
      -      "type": "string"
      -    },
      -    "type": "array"
      -  },
      -  "category": {
      -    "properties": {
      -      "alternates": {
      -        "items": {
      -          "properties": {
      -            "id": {
      -              "type": "string"
      -            },
      -            "label": {
      -              "type": "string"
      -            },
      -            "src": {
      -              "enum": [
      -                "declared",
      -                "seen",
      -                "probably"
      -              ],
      -              "type": "string"
      -            }
      -          },
      -          "required": [
      -            "id",
      -            "label",
      -            "src"
      -          ],
      -          "type": "object"
      -        },
      -        "maxItems": 2,
      -        "type": "array"
      -      },
      -      "group": {
      -        "description": "Its group: a slug of GET /v1/categories.",
      -        "type": "string"
      -      },
      -      "path": {
      -        "description": "Ancestor ids of the primary, root first, the primary last.",
      -        "items": {
      -          "type": "string"
      -        },
      -        "type": "array"
      -      },
      -      "primary": {
      -        "properties": {
      -          "id": {
      -            "type": "string"
      -          },
      -          "label": {
      -            "type": "string"
      -          },
      -          "src": {
      -            "enum": [
      -              "declared",
      -              "seen",
      -              "probably"
      -            ],
      -            "type": "string"
      -          }
      -        },
      -        "required": [
      -          "id",
      -          "label",
      -          "src"
      -        ],
      -        "type": "object"
      -      }
      -    },
      -    "required": [
      -      "primary",
      -      "alternates",
      -      "path"
      -    ],
      -    "type": "object"
      -  },
      -  "city": {
      -    "type": "string"
      -  },
      -  "claimed": {
      -    "type": "boolean"
      -  },
      -  "country": {
      -    "description": "ISO 3166-1 alpha-2.",
      -    "maxLength": 2,
      -    "minLength": 2,
      -    "type": "string"
      -  },
      -  "description": {
      -    "description": "As the business wrote it.",
      -    "type": "string"
      -  },
      -  "distance_km": {
      -    "description": "Searches near a point only.",
      -    "minimum": 0,
      -    "type": "number"
      -  },
      -  "domain": {
      -    "description": "The business's own domain, where its inbox is.",
      -    "type": "string"
      -  },
      -  "doors": {
      -    "items": {
      -      "properties": {
      -        "checked": {
      -          "description": "A member's inbox door, on its detail: what the network's own reads last found in the past 24 hours (§4.8). answered; failing; could_not_check, the door refused the read (403, 429, a challenge page), so the business's signed ping alone says it answers. Absent when the network made no read.",
      -          "properties": {
      -            "at": {
      -              "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"
      -            },
      -            "by": {
      -              "const": "network",
      -              "type": "string"
      -            },
      -            "status": {
      -              "enum": [
      -                "answered",
      -                "failing",
      -                "could_not_check"
      -              ],
      -              "type": "string"
      -            }
      -          },
      -          "required": [
      -            "status",
      -            "at",
      -            "by"
      -          ],
      -          "type": "object"
      -        },
      -        "checked_at": {
      -          "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"
      -        },
      -        "kinds": {
      -          "items": {
      -            "enum": [
      -              "ask",
      -              "quote",
      -              "book",
      -              "order",
      -              "pay"
      -            ],
      -            "type": "string"
      -          },
      -          "type": "array"
      -        },
      -        "level": {
      -          "description": "What this door alone reaches, from the network's own probe.",
      -          "enum": [
      -            "listed",
      -            "readable",
      -            "askable",
      -            "bookable",
      -            "orderable",
      -            "payable"
      -          ],
      -          "type": "string"
      -        },
      -        "protocol": {
      -          "description": "The protocol it speaks, for type \"other\" only.",
      -          "maxLength": 40,
      -          "type": "string"
      -        },
      -        "src": {
      -          "description": "declared: the business said so; seen: read from the door's own tools.",
      -          "enum": [
      -            "declared",
      -            "seen"
      -          ],
      -          "type": "string"
      -        },
      -        "status": {
      -          "description": "failing: 3 failures in 7 days; it counts for nothing until it works.",
      -          "enum": [
      -            "live",
      -            "failing"
      -          ],
      -          "type": "string"
      -        },
      -        "type": {
      -          "pattern": "^(inbox|mcp|a2a|openapi|api|ucp|acp|nlweb|webhook|other|platform:[a-z0-9-]{1,40})$",
      -          "type": "string"
      -        },
      -        "url": {
      -          "format": "uri",
      -          "type": "string"
      -        }
      -      },
      -      "required": [
      -        "type",
      -        "url",
      -        "level",
      -        "status",
      -        "kinds",
      -        "src"
      -      ],
      -      "type": "object"
      -    },
      -    "type": "array"
      -  },
      -  "found": {
      -    "properties": {
      -      "about_url": {
      -        "description": "The network's page for businesses: why it is here, and how to correct it or opt out.",
      -        "format": "uri",
      -        "type": "string"
      -      },
      -      "checked_at": {
      -        "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"
      -      },
      -      "note": {
      -        "description": "\"found on its own website · not a member · checked <YYYY-MM-DD>\"",
      -        "type": "string"
      -      }
      -    },
      -    "required": [
      -      "note",
      -      "checked_at",
      -      "about_url"
      -    ],
      -    "type": "object"
      -  },
      -  "has_inbox": {
      -    "description": "It has an inbox door: ours or any compatible inbox.",
      -    "type": "boolean"
      -  },
      -  "hours_today": {
      -    "description": "Today's hours in its own time zone, like \"09:00–13:00, 14:00–19:00\", or \"closed today\"; null when it published none.",
      -    "type": [
      -      "string",
      -      "null"
      -    ]
      -  },
      -  "human_contact_only": {
      -    "description": "It publishes only human channels; never served while nothing below askable is listed.",
      -    "type": "boolean"
      -  },
      -  "inbox": {
      -    "description": "The business's own inbox, where it takes bookings, orders and questions; this server takes no orders or payments and books nothing itself. Present whenever has_inbox is true or absent.",
      -    "properties": {
      -      "mcp": {
      -        "description": "Where an assistant books, orders or asks.",
      -        "format": "uri",
      -        "type": "string"
      -      },
      -      "openapi": {
      -        "format": "uri",
      -        "type": "string"
      -      },
      -      "rest": {
      -        "format": "uri",
      -        "type": "string"
      -      },
      -      "url": {
      -        "format": "uri",
      -        "type": "string"
      -      }
      -    },
      -    "required": [
      -      "url"
      -    ],
      -    "type": "object"
      -  },
      -  "languages": {
      -    "items": {
      -      "type": "string"
      -    },
      -    "type": "array"
      -  },
      -  "level": {
      -    "description": "The highest level of its live doors (§4.9).",
      -    "enum": [
      -      "listed",
      -      "readable",
      -      "askable",
      -      "bookable",
      -      "orderable",
      -      "payable"
      -    ],
      -    "type": "string"
      -  },
      -  "listing_url": {
      -    "description": "Its full listing on this network (GET /v1/businesses/{domain}).",
      -    "format": "uri",
      -    "type": "string"
      -  },
      -  "location_precision": {
      -    "description": "town: distance_km is from the centre of the town its own site names (GeoNames), not its own place, in whole kilometres.",
      -    "enum": [
      -      "town"
      -    ],
      -    "type": "string"
      -  },
      -  "name": {
      -    "description": "As the business wrote it.",
      -    "type": "string"
      -  },
      -  "open_now": {
      -    "description": "Open at the moment of the answer by the hours it published, in its own time zone; null when it published none.",
      -    "type": [
      -      "boolean",
      -      "null"
      -    ]
      -  },
      -  "place": {
      -    "description": "For entries that are not members; a member keeps city, country and address.",
      -    "properties": {
      -      "country": {
      -        "description": "ISO 3166-1 alpha-2.",
      -        "maxLength": 2,
      -        "minLength": 2,
      -        "type": "string"
      -      },
      -      "kind": {
      -        "items": {
      -          "enum": [
      -            "storefront",
      -            "service_area",
      -            "online"
      -          ],
      -          "type": "string"
      -        },
      -        "type": "array"
      -      },
      -      "locality": {
      -        "type": "string"
      -      },
      -      "region": {
      -        "type": "string"
      -      },
      -      "service_area": {
      -        "properties": {
      -          "countries": {
      -            "items": {
      -              "maxLength": 2,
      -              "minLength": 2,
      -              "type": "string"
      -            },
      -            "maxItems": 50,
      -            "type": "array"
      -          },
      -          "radius_km": {
      -            "exclusiveMinimum": 0,
      -            "maximum": 300,
      -            "type": "number"
      -          }
      -        },
      -        "type": "object"
      -      },
      -      "ships_to": {
      -        "description": "ISO 3166-1 alpha-2 codes, or [\"*\"] for anywhere.",
      -        "items": {
      -          "type": "string"
      -        },
      -        "type": "array"
      -      }
      -    },
      -    "required": [
      -      "kind"
      -    ],
      -    "type": "object"
      -  },
      -  "proof": {
      -    "enum": [
      -      "domain",
      -      "key",
      -      "platform",
      -      "code"
      -    ],
      -    "type": "string"
      -  },
      -  "requestable": {
      -    "description": "The kinds a live door declared it answers; never from what the crawler saw alone.",
      -    "items": {
      -      "enum": [
      -        "ask",
      -        "quote"
      -      ],
      -      "type": "string"
      -    },
      -    "type": "array"
      -  },
      -  "services": {
      -    "description": "Names and how each is taken; prices, durations and free times are at its inbox.",
      -    "items": {
      -      "properties": {
      -        "name": {
      -          "maxLength": 80,
      -          "minLength": 1,
      -          "type": "string"
      -        },
      -        "type": {
      -          "enum": [
      -            "booking",
      -            "order",
      -            "quote_request"
      -          ],
      -          "type": "string"
      -        }
      -      },
      -      "required": [
      -        "name",
      -        "type"
      -      ],
      -      "type": "object"
      -    },
      -    "type": "array"
      -  },
      -  "source": {
      -    "description": "member: through its inbox; registered: by the business, with a proof; found: by the network's crawler.",
      -    "enum": [
      -      "member",
      -      "registered",
      -      "found"
      -    ],
      -    "type": "string"
      -  },
      -  "standing": {
      -    "description": "From the last nightly count of the promises it kept; absent while the directory's order is neutral.",
      -    "properties": {
      -      "broken": {
      -        "description": "From rules version 8: the broken outcomes the night scored.",
      -        "maximum": 9007199254740991,
      -        "minimum": 0,
      -        "type": "integer"
      -      },
      -      "in_words": {
      -        "description": "The tier in one plain sentence, or a self-reported record's counts; never a mark against the business.",
      -        "type": "string"
      -      },
      -      "kept": {
      -        "description": "From rules version 8: the kept outcomes the night scored.",
      -        "maximum": 9007199254740991,
      -        "minimum": 0,
      -        "type": "integer"
      -      },
      -      "open": {
      -        "description": "From rules version 8: its v2 promises still open.",
      -        "maximum": 9007199254740991,
      -        "minimum": 0,
      -        "type": "integer"
      -      },
      -      "ranked": {
      -        "description": "Its record puts it before the daily shuffle.",
      -        "type": "boolean"
      -      },
      -      "self_reported": {
      -        "description": "From rules version 8: its record rests on its own word (less than a fifth of it kept outcomes a verified acknowledgement backs), so it is not ranked and has no score; in_words says its counts.",
      -        "type": "boolean"
      -      },
      -      "tier": {
      -        "enum": [
      -          "new",
      -          "building",
      -          "trusted"
      -        ],
      -        "type": "string"
      -      },
      -      "verified_kept_share": {
      -        "description": "From rules version 8, when not self_reported: the share of its record that is kept outcomes a verified acknowledgement backs (0.2 or more).",
      -        "maximum": 1,
      -        "minimum": 0,
      -        "type": "number"
      -      },
      -      "verified_share": {
      -        "description": "From rules version 8, when not self_reported: the share of its record that is verified evidence.",
      -        "maximum": 1,
      -        "minimum": 0,
      -        "type": "number"
      -      }
      -    },
      -    "required": [
      -      "tier",
      -      "ranked",
      -      "in_words"
      -    ],
      -    "type": "object"
      -  },
      -  "tags": {
      -    "description": "Other words the business gave for what it does.",
      -    "items": {
      -      "type": "string"
      -    },
      -    "type": "array"
      -  },
      -  "takes": {
      -    "description": "What its inbox takes: booking, order, quote_request, message, refund.",
      -    "items": {
      -      "type": "string"
      -    },
      -    "type": "array"
      -  },
      -  "track_record": {
      -    "description": "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.",
      -    "properties": {
      -      "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"
      -      }
      -    },
      -    "required": [
      -      "state",
      -      "in_words"
      -    ],
      -    "type": "object"
      -  },
      -  "website": {
      -    "type": "string"
      -  },
      -  "why": {
      -    "description": "Why it is in this place of the list, in plain words.",
      -    "type": "string"
      -  }
      -}
    • removedOutput schema / properties / card / required
      Removed value: -[
      -  "domain",
      -  "name",
      -  "categories",
      -  "tags",
      -  "languages",
      -  "takes",
      -  "services",
      -  "open_now",
      -  "hours_today",
      -  "answering",
      -  "listing_url"
      -]
    • removedOutput schema / properties / challenge / description
      Removed value: -"Put the token in place one of these ways, then call again with proof.method and challenge_id."
    • removedOutput schema / properties / challenge / properties / expires_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 / claim_token / description
      Removed value: -"Given by a successful register_business: proof again for 90 days, for this listing only."
    • removedOutput schema / properties / claim_token_expires_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 / detail / description
      Removed value: -"The answer in one plain sentence."
    • removedOutput schema / properties / dropped / description
      Removed value: -"Each part not taken and why: refused_kind, category_not_listed, contact_detail, not_in_vocabulary, and the like."
    • removedOutput schema / properties / listed / description
      Removed value: -"Whether search shows it now."
    • removedOutput schema / properties / next_level / description
      Removed value: -"What it takes to reach the next level, in plain words."
    • removedOutput schema / properties / score_page / description
      Removed value: -"Whether its agentic score result page is hidden or shown, when the call set it."
    • removedOutput schema / properties / status / description
      Removed value: -"As register_business's, and: off, hidden from search; removed, after an opt-out."
    • removedOutput schema / title
      Removed value: -"MCP update_business: structuredContent"
  2. Changed1 schema field changed
    • addedOutput schema / properties / card / properties / location_precision
      Added value: +{
      +  "description": "town: distance_km is from the centre of the town its own site names (GeoNames), not its own place, in whole kilometres.",
      +  "enum": [
      +    "town"
      +  ],
      +  "type": "string"
      +}
  3. Changed2 schema fields changed
    • addedOutput schema / properties / card / properties / accepts / properties / pay_with
      Added value: +{
      +  "description": "Each of pay with its evidence, in the vocabulary's order. Absent from a listing built before it.",
      +  "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"
      +}
    • changedOutput schema / properties / card / properties / inbox / description
      Previous value: -"The business's own inbox, where it takes bookings, orders and questions; this server takes no bookings or orders. Present whenever has_inbox is true or absent."New value: +"The business's own inbox, where it takes bookings, orders and questions; this server takes no orders or payments and books nothing itself. Present whenever has_inbox is true or absent."
  4. Changed4 schema fields changed
    • changedOutput schema / properties / card / properties / doors / items / properties / level / enum
      Previous value: -[
      -  "listed",
      -  "readable",
      -  "askable",
      -  "bookable",
      -  "payable"
      -]New value: +[
      +  "listed",
      +  "readable",
      +  "askable",
      +  "bookable",
      +  "orderable",
      +  "payable"
      +]
    • changedOutput schema / properties / card / properties / level / enum
      Previous value: -[
      -  "listed",
      -  "readable",
      -  "askable",
      -  "bookable",
      -  "payable"
      -]New value: +[
      +  "listed",
      +  "readable",
      +  "askable",
      +  "bookable",
      +  "orderable",
      +  "payable"
      +]
    • changedOutput schema / properties / level / enum
      Previous value: -[
      -  "listed",
      -  "readable",
      -  "askable",
      -  "bookable",
      -  "payable"
      -]New value: +[
      +  "listed",
      +  "readable",
      +  "askable",
      +  "bookable",
      +  "orderable",
      +  "payable"
      +]
    • changedOutput schema / properties / next_level / properties / level / enum
      Previous value: -[
      -  "listed",
      -  "readable",
      -  "askable",
      -  "bookable",
      -  "payable"
      -]New value: +[
      +  "listed",
      +  "readable",
      +  "askable",
      +  "bookable",
      +  "orderable",
      +  "payable"
      +]
  5. Changed1 schema field changed
    • addedOutput schema / properties / card / properties / doors / items / properties / checked
      Added value: +{
      +  "description": "A member's inbox door, on its detail: what the network's own reads last found in the past 24 hours (§4.8). answered; failing; could_not_check, the door refused the read (403, 429, a challenge page), so the business's signed ping alone says it answers. Absent when the network made no read.",
      +  "properties": {
      +    "at": {
      +      "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"
      +    },
      +    "by": {
      +      "const": "network",
      +      "type": "string"
      +    },
      +    "status": {
      +      "enum": [
      +        "answered",
      +        "failing",
      +        "could_not_check"
      +      ],
      +      "type": "string"
      +    }
      +  },
      +  "required": [
      +    "status",
      +    "at",
      +    "by"
      +  ],
      +  "type": "object"
      +}
  6. First observed

TDQS

A4.5/5.0
Behavior4/5

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

Annotations already declare `destructiveHint: true`, `openWorldHint: true`, and `idempotentHint: false`. The description adds important behavioral context about authorization and the special no-proof behavior: without proof it removes only an unclaimed listing.

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?

The description is compact and front-loaded, listing the main operations and then the proof caveat. Despite being dense, every clause maps to a meaningful operation or authorization condition.

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?

For a destructive mutation tool with an output schema and detailed nested input schema, the description supplies the missing high-level operational and authorization context. An agent can understand what the tool changes and what credentials or proof are needed.

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?

The description adds meaning beyond the schema by tying `set` to `register_business`'s input schema and by summarizing the purposes of doors, listing state, score page visibility, opt-out, and proof/claim token. The required `domain` parameter is not separately explained, but most complex parameters gain useful context.

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?

The description uses specific verbs and resources: correct a listing, add/remove doors, turn the listing on/off, hide the score page, and opt out. It clearly distinguishes this mutation tool from `register_business` by referencing that sibling for initial fields and proof requirements.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

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

It states the intended actor (a business's own AI), the authorization requirement (`claim_token` or proof), and a key no-proof restriction. It does not explicitly contrast every alternative sibling, but the condition for using this tool versus `register_business` is clear.

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