addrbookFor publishers
← The evidence ledger

Evidence row 308438

Observed , by probe.mcp/1.

Kind
mcp.tools
About
endpoint 2048a624-26c5-41b4-b0d0-c7fc13c05af5
Recorded
Previous row
None: the first of its kind about this subject
Body SHA-256
9adf39f8e12ab7c059bfc78ce5f879956578878618e745094639694bb7d36149
Leaf
0xe633775b5e3cf1871499c0ac52be9ed65cbcf0bc63a1b992e29d221e138a2ce3

What was observed

{
  "count": 7,
  "tools": [
    {
      "description": "One business's opening hours, whether it is open right now, and when it next opens. Phase 1 returns published hours, not bookable slots.",
      "inputSchema": {
        "additionalProperties": false,
        "properties": {
          "business": {
            "description": "Which business to ask: its CoreLoop slug, or the `business_id` returned by search_businesses. `business_id` is an opaque, stable, public routing identifier — safe to store and re-use across sessions, unchanged by a rename or a slug change, and carrying no sensitive information. Pass back exactly the value search_businesses gave you: do not parse it, do not infer meaning from its format, and do not construct one.",
            "maxLength": 200,
            "minLength": 1,
            "type": "string"
          },
          "location_id": {
            "description": "Which location's hours to return (id from get_info locations[]). Defaults to the primary location.",
            "format": "uuid",
            "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$",
            "type": "string"
          }
        },
        "required": [
          "business"
        ],
        "type": "object"
      },
      "name": "check_business_availability"
    },
    {
      "description": "Compare one business's services within a category or keyword, with a price/duration summary. Each row reports `match_type`, so you can tell an exact category hit from an incidental keyword.",
      "inputSchema": {
        "additionalProperties": false,
        "properties": {
          "business": {
            "description": "Which business to ask: its CoreLoop slug, or the `business_id` returned by search_businesses. `business_id` is an opaque, stable, public routing identifier — safe to store and re-use across sessions, unchanged by a rename or a slug change, and carrying no sensitive information. Pass back exactly the value search_businesses gave you: do not parse it, do not infer meaning from its format, and do not construct one.",
            "maxLength": 200,
            "minLength": 1,
            "type": "string"
          },
          "compare_by": {
            "description": "Restrict the comparison to these fields. Recognised values: price, duration, description, includes (name, category and match_type are always present; unrecognised values are ignored). Omit for the full comparison view.",
            "items": {
              "maxLength": 50,
              "type": "string"
            },
            "maxItems": 10,
            "type": "array"
          },
          "service_type": {
            "description": "Service category or keyword to compare. Matches category exactly first, then service name/description contains.",
            "maxLength": 100,
            "minLength": 1,
            "type": "string"
          }
        },
        "required": [
          "business",
          "service_type"
        ],
        "type": "object"
      },
      "name": "compare_business_services"
    },
    {
      "description": "The canonical ids and endpoint URLs for one business — its own MCP and A2A endpoints, agent card, llms.txt and public page, under `protocol_urls`. A null URL means that surface is switched off for this business right now: do not construct it yourself, and use one of the non-null surfaces instead.",
      "inputSchema": {
        "additionalProperties": false,
        "properties": {
          "business": {
            "description": "Which business to ask: its CoreLoop slug, or the `business_id` returned by search_businesses. `business_id` is an opaque, stable, public routing identifier — safe to store and re-use across sessions, unchanged by a rename or a slug change, and carrying no sensitive information. Pass back exactly the value search_businesses gave you: do not parse it, do not infer meaning from its format, and do not construct one.",
            "maxLength": 200,
            "minLength": 1,
            "type": "string"
          }
        },
        "required": [
          "business"
        ],
        "type": "object"
      },
      "name": "get_business_agent"
    },
    {
      "description": "Full profile for one business found through search_businesses: identity, locations, contact, policies, images, public documents and the languages it publishes in.",
      "inputSchema": {
        "additionalProperties": false,
        "properties": {
          "business": {
            "description": "Which business to ask: its CoreLoop slug, or the `business_id` returned by search_businesses. `business_id` is an opaque, stable, public routing identifier — safe to store and re-use across sessions, unchanged by a rename or a slug change, and carrying no sensitive information. Pass back exactly the value search_businesses gave you: do not parse it, do not infer meaning from its format, and do not construct one.",
            "maxLength": 200,
            "minLength": 1,
            "type": "string"
          },
          "sections": {
            "description": "Which sections to include. Defaults to all.",
            "items": {
              "enum": [
                "identity",
                "location",
                "contact",
                "policies",
                "all"
              ],
              "type": "string"
            },
            "maxItems": 5,
            "type": "array"
          }
        },
        "required": [
          "business"
        ],
        "type": "object"
      },
      "name": "get_business_info"
    },
    {
      "description": "One business's service catalogue, with filtering, sorting and pagination. Page with `offset`/`limit` and read `has_more` — the order is stable, so a second page will not repeat or skip a service.",
      "inputSchema": {
        "additionalProperties": false,
        "properties": {
          "business": {
            "description": "Which business to ask: its CoreLoop slug, or the `business_id` returned by search_businesses. `business_id` is an opaque, stable, public routing identifier — safe to store and re-use across sessions, unchanged by a rename or a slug change, and carrying no sensitive information. Pass back exactly the value search_businesses gave you: do not parse it, do not infer meaning from its format, and do not construct one.",
            "maxLength": 200,
            "minLength": 1,
            "type": "string"
          },
          "category": {
            "description": "Filter by service category",
            "maxLength": 100,
            "type": "string"
          },
          "limit": {
            "default": 20,
            "maximum": 50,
            "minimum": 1,
            "type": "integer"
          },
          "max_duration": {
            "description": "Only services lasting at most this many minutes",
            "maximum": 9007199254740991,
            "minimum": 0,
            "type": "integer"
          },
          "max_price": {
            "description": "Only services priced at or below this amount",
            "minimum": 0,
            "type": "number"
          },
          "min_duration": {
            "description": "Only services lasting at least this many minutes",
            "maximum": 9007199254740991,
            "minimum": 0,
            "type": "integer"
          },
          "min_price": {
            "description": "Only services priced at or above this amount",
            "minimum": 0,
            "type": "number"
          },
          "offset": {
            "anyOf": [
              {
                "maximum": 10000,
                "minimum": 0,
                "type": "integer"
              },
              {
                "maxLength": 64,
                "minLength": 1,
                "type": "string"
              }
            ],
            "description": "Pagination position: omit for the first page, then pass back the `next_offset` token from the previous response VERBATIM. The token is opaque and bound to the catalogue as it was when the page was issued — if services were added, removed or reordered since, the call returns `cursor_expired` and you should restart without an offset. A plain integer offset is still accepted in EITHER spelling — as a JSON number (20) or as its exact string form (\"20\") — and skips that many results with no catalogue binding. Only a string that is neither an exact integer nor a token this endpoint issued (for example a mangled or truncated token) is refused with `cursor_expired` rather than resumed."
          },
          "price_type": {
            "description": "Filter by price type (e.g. fixed, from, range, hourly, free, contact, or unpublished for services with no price set)",
            "maxLength": 50,
            "type": "string"
          },
          "sort_by": {
            "description": "Field to sort by. Recognised values: price, duration, name, category (unrecognised values are ignored — results stay unsorted).",
            "maxLength": 50,
            "type": "string"
          },
          "sort_order": {
            "description": "Sort direction (defaults to asc)",
            "enum": [
              "asc",
              "desc"
            ],
            "type": "string"
          }
        },
        "required": [
          "business"
        ],
        "type": "object"
      },
      "name": "get_business_services"
    },
    {
      "description": "Search the CoreLoop business directory. Start here: every other tool on this endpoint needs a business, and each result carries the `business_id` and `slug` you pass to them as the `business` argument. `business_id` is a PUBLIC, OPAQUE, STABLE routing identifier: it is safe to store and re-use across sessions, it stays the same when a business renames itself or changes its slug, and it carries no sensitive information. Treat it as a token — do not parse it, do not derive meaning from its format, and do not construct one. Pass back exactly the value you were given. A result with `asserts_no_physical_location: true` has stated that it has no premises (consultants, trades, online-only) — it is intentionally absent from city search rather than missing data. `false` means no such statement was made; it does NOT imply premises. Results are returned in your requested language when the business has published a translation: send `?locale=<code>` on the endpoint URL (takes precedence) or an Accept-Language header. Each result reports the language it is written in (`locale`), the business's original language (`content_locale`), and every language it is available in (`available_locales`). `mcp_url`, `a2a_url` and `page_url` — and every URL inside `protocol_urls` — are null when that surface is currently switched off for the business: a null is intentional (do not construct the URL yourself), and the business remains reachable through its non-null surfaces. `data_source: \"directory\"` marks these rows as the search projection; call get_business_info for the live profile. PAGING: one call returns at most `limit` results. Read `has_more` — a short page is not proof of the end — and pass `next_cursor` back as `cursor` for the next page. The cursor is opaque and bound to the filters and sort it was issued for: change any of them and it is rejected, so start a new search instead. `limit` may change between pages.",
      "inputSchema": {
        "additionalProperties": false,
        "properties": {
          "capabilities": {
            "description": "Filter by capability tags (e.g. real_time_booking, live_pricing, verified)",
            "items": {
              "maxLength": 64,
              "type": "string"
            },
            "maxItems": 20,
            "type": "array"
          },
          "category": {
            "description": "Filter by business category (case-insensitive exact match). Canonical categories: Accounting & Tax, Agriculture & Farming, Automotive, Beauty & Wellness, Childcare & Family, Cleaning Services, Construction & Renovation, Creative & Arts, Education & Training, Events & Entertainment, Financial Services, Fitness & Sports, Food & Beverage, Funeral & Memorial, Health & Medical, Home Services, Legal Services, Media & Photography, Nonprofit & Community, Personal Care & Therapy, Pets & Animals, Professional Services, Real Estate, Religious & Spiritual, Retail & Shopping, Security Services, Sports & Recreation, Technology & IT, Transportation & Logistics, Travel & Tourism, Other",
            "maxLength": 120,
            "type": "string"
          },
          "city": {
            "description": "Filter by city (case-insensitive exact match)",
            "maxLength": 120,
            "type": "string"
          },
          "cursor": {
            "description": "Continuation token from a previous response's `next_cursor`. Omit for the first page. It is opaque and bound to the filters and sort it was issued for: pass it back byte-for-byte, and change nothing except `limit` between pages — any other change makes it invalid and you must start a new search. At most 100 results are reachable by paging; narrow the filters to see beyond that.",
            "maxLength": 512,
            "type": "string"
          },
          "has_live_booking": {
            "description": "Only show businesses with real-time booking",
            "type": "boolean"
          },
          "has_live_catalog": {
            "description": "Only show businesses with live catalog pricing",
            "type": "boolean"
          },
          "limit": {
            "default": 10,
            "description": "Maximum results per page (1-20). Out-of-range values are clamped, not rejected.",
            "maximum": 9007199254740991,
            "minimum": -9007199254740991,
            "type": "integer"
          },
          "min_rating": {
            "description": "Minimum average rating (0-5)",
            "type": "number"
          },
          "query": {
            "description": "Search query (business name or keyword)",
            "maxLength": 200,
            "type": "string"
          },
          "service_type": {
            "description": "Filter by service type keyword",
            "maxLength": 120,
            "type": "string"
          },
          "sort_by": {
            "description": "Sort results. Default: relevance",
            "enum": [
              "relevance",
              "rating",
              "name"
            ],
            "type": "string"
          },
          "verified_only": {
            "description": "Only show verified businesses",
            "type": "boolean"
          }
        },
        "type": "object"
      },
      "name": "search_businesses"
    },
    {
      "description": "Send a message to one business. This has a real side effect — it notifies the owner and delivers an email — and is rate-limited both per business and across this directory, so send one considered inquiry rather than a broadcast.",
      "inputSchema": {
        "additionalProperties": false,
        "properties": {
          "business": {
            "description": "Which business to ask: its CoreLoop slug, or the `business_id` returned by search_businesses. `business_id` is an opaque, stable, public routing identifier — safe to store and re-use across sessions, unchanged by a rename or a slug change, and carrying no sensitive information. Pass back exactly the value search_businesses gave you: do not parse it, do not infer meaning from its format, and do not construct one.",
            "maxLength": 200,
            "minLength": 1,
            "type": "string"
          },
          "message": {
            "description": "Inquiry message (plain text, max 2000 chars)",
            "maxLength": 2000,
            "minLength": 1,
            "type": "string"
          },
          "sender_email": {
            "format": "email",
            "maxLength": 254,
            "pattern": "^(?:[A-Za-z0-9_'+\\-]+\\.)*[A-Za-z0-9_'+\\-]*[A-Za-z0-9_+-]@(?:[A-Za-z0-9][A-Za-z0-9\\-]*\\.)+[A-Za-z]{2,}$",
            "type": "string"
          },
          "sender_name": {
            "maxLength": 200,
            "minLength": 1,
            "type": "string"
          },
          "sender_phone": {
            "maxLength": 20,
            "type": "string"
          },
          "subject": {
            "maxLength": 200,
            "type": "string"
          }
        },
        "required": [
          "business",
          "message",
          "sender_name"
        ],
        "type": "object"
      },
      "name": "send_business_inquiry"
    }
  ]
}

What the leaf hashes

{"body":"9adf39f8e12ab7c059bfc78ce5f879956578878618e745094639694bb7d36149","id":308438,"kind":"mcp.tools","method":"probe.mcp/1","observed_us":1793058270954755,"prev":null,"subject":"2048a624-26c5-41b4-b0d0-c7fc13c05af5","subject_kind":"endpoint"}

Proof

Fold these into the leaf in order, hashing each sorted pair with keccak256, to reach the root of (296695 rows).

  1. 0xe633d6bbbee305f219c1fbb0fce21fca8b36bb5929b4b45b70c899d945f53faf
  2. 0x67bfd3b732b25964dff9f25a582f419e039c02f2d58090439b88e20b227deb38
  3. 0x97458b6e2e89c902e18630e0566b1eb2e77e5ca83d8ea15f96620f905d94b8c5
  4. 0x267d29edd073f7bdd8da9655285661c267ba58d7f0e3e16887ebf3787fe43d8a
  5. 0x62e0c8f4a520614ca9335f824a53d65c840fc69126c9cbaccbeb2881501967bd
  6. 0x45f8e75117cceca377e7769e70e3aae3f96bc8d3093d7564397487c7f0c23cec
  7. 0x85a5e8887d8b3cfc8c6c7501db8dfe9914d7bf846b039dfbcdbe902bec77a506
  8. 0x94f2c4bb3a604cf4f5e0977101eab926cf72dc5f6c12b952df36f83c406810bc
  9. 0x9fe574dc6e1113a716b08ccd516d89771243afddb9d70f41f17669e36ee9d990
  10. 0x17252ea35c135aec37ce7f1ed706d7c9275dd2e41b9d9e8c21d84f8d686b33ff
  11. 0xe9a46d294851ae0e362ab741d0ad8768d3bfeeb15a9d9fcc78aae5128fc33835
  12. 0xb866b513dd861c870688f5d1a8e434b170eaa2fafb0961d6a674d452b8e58381
  13. 0xafcc1fe54cfe00a3a1de33df127340075f22433bb89848bbc81499cd7aca5b2b
  14. 0x9bc5fc98278b9f6dc18c66c6e162aefd5244be03170d41bc5161f58ad11beed7
  15. 0x95657a7d540ed6cac0bde9995782333b2562a9a6641853269ac95148827410f0
  16. 0x5fb5dda563336cd1bc1b9f44c52b76237ae72ed2145cb9290f39f304ca7dd678
  17. 0x74a0a08e4e7ab9aa5bfbead33dec7e1c7e8e364cff69a63720d764bbe987aadc
Day root
0xf43e8dcc3d451a4788b26be904c55e8c4c0fa75c9666796c51db38d37e2c0df8
Chained
0x702d5ac508f08b0d1accf36af25822d8e5660367494edd17a642fb61e158a57a
Published
On Arc Testnet, block 69251483: 0x495162f8936e19f0039918feebe6c307f327cd6bf8c37219620b1970041fa9ae

How to check it · This row as JSON