← The evidence ledger
Evidence row 3354466
Observed , by probe.mcp/1.
- Kind
- mcp.tools
- About
- endpoint 2c60284d-392f-4d63-a254-94469e6afce3
- Recorded
- Previous row
- None: the first of its kind about this subject
- Body SHA-256
- 312d33ee261f21f31a65ea18d98906bc53b6515ee758ae9daf8940e1339655d2
- Leaf
- 0x743ba948d18305078db562528a06ec053f3519e8a5455be5c75e2a5bb7a0f9df
What was observed
{
"count": 8,
"tools": [
{
"description": "Narrow towards a purchase without inventing keywords. One call returns children[] and childrenDeep[] with estimated counts, brands[] each with an engineParam you can pass straight back to search_products.engineParam, the shop's own facets[], aspectTiles[], siblings[], related[] and a deals[] rail. GET /api/agent/browse/tree/<slug>, or GET /api/agent/browse/tree/<slug>/<nodeId> for any category under a department. No wallet and no signature. contentAt is when those deal prices were read: send it as a candidate's priceAt to compare_landed_cost, which is the shortlist this call is meant to fill. Counts are estimates and countScope says so. A shelf already read answers from cache; a cold one costs one call against the catalogue quota shared with shoppers, so read the shelf you want rather than walking the tree.",
"inputSchema": {
"$schema": "http://json-schema.org/draft-07/schema#",
"properties": {
"nodeId": {
"description": "A category id under that department, from children[].id or childrenDeep[].id. Omit for the department itself.",
"type": "string"
},
"slug": {
"description": "The `slug` field of a department from list_categories.",
"type": "string"
}
},
"required": [
"slug"
],
"type": "object"
},
"name": "get_category"
},
{
"description": "For a \"find something on offer\" task. GET /api/agent/browse/deals?tab=<tab>, where tab is markdowns, refurbished, top-rated, brands, or door:<slug> for one department. No wallet and no signature. Every item carries cachedAt, which is when that price was true: pass it as a candidate's priceAt to compare_landed_cost. A selection over rows this site has already cached, so it costs no catalogue call. An unknown tab is refused with 400 rather than guessed at. A sticker discount is not a cheaper order: rank with compare_landed_cost before you quote.",
"inputSchema": {
"$schema": "http://json-schema.org/draft-07/schema#",
"properties": {
"tab": {
"description": "markdowns, refurbished, top-rated, brands, or door:<slug> with a slug from list_categories.",
"type": "string"
}
},
"required": [
"tab"
],
"type": "object"
},
"name": "get_deals"
},
{
"description": "Every department, the groups under it and the links under those, for picking a shelf in one read rather than walking down to it. GET /api/agent/browse/directory. No wallet and no signature. Built ONLY from rows already cached, so it costs no catalogue call at all and a picture or count nobody has fetched yet comes back null rather than being fetched for you. Prefer this over repeated get_category calls when you are still deciding where to look.",
"inputSchema": {
"$schema": "http://json-schema.org/draft-07/schema#",
"properties": {},
"type": "object"
},
"name": "get_directory"
},
{
"description": "The current fee schedule and delivery rates, so a total can be explained before anyone pays it. GET /api/config/fees. No wallet and no signature.",
"inputSchema": {
"$schema": "http://json-schema.org/draft-07/schema#",
"properties": {},
"type": "object"
},
"name": "get_fees"
},
{
"description": "Current USD prices of the coins shown on Escrova. GET /api/prices. No wallet and no signature. Checkout on this deployment takes USDC only.",
"inputSchema": {
"$schema": "http://json-schema.org/draft-07/schema#",
"properties": {},
"type": "object"
},
"name": "get_prices"
},
{
"description": "Returns the current Terms of Service and Privacy Policy version and document hash. These are the exact values accept_terms will record; they are read server-side and never taken from your request. GET /api/agent/legal/terms. No wallet and no signature.",
"inputSchema": {
"$schema": "http://json-schema.org/draft-07/schema#",
"properties": {},
"type": "object"
},
"name": "get_terms"
},
{
"description": "Start a shopping task here instead of guessing search words. Returns the sixteen departments, each with the slug get_category takes and a picture. A keyword search is one guess at what somebody meant; a department is the shop's own shelf, and get_category on one hands you the brands, the filters and a page of listings in a single call. GET /api/agent/browse/categories. No wallet and no signature. Served from cache; a department whose picture has gone cold costs one call against the catalogue quota this site shares with its shoppers.",
"inputSchema": {
"$schema": "http://json-schema.org/draft-07/schema#",
"properties": {},
"type": "object"
},
"name": "list_categories"
},
{
"description": "Search products across the marketplaces Escrova can actually buy from today. Six sources are searchable: amazon, ebay, walmart, bestbuy, homedepot, wayfair, or \"all\". GET /api/products/search. No wallet and no signature. Send q, cat, or both; page and every selected filter are preserved together. A brands[].engineParam returned by get_category goes into engineParam here and is sent as the typed eBay aspect filter, while Google refinements use shoprs. The REST pagination and degraded-source metadata are returned unchanged. A search is one guess at what somebody meant and it spends a paid provider call; when you know roughly what department a thing is in, list_categories and get_category narrow further for less.",
"inputSchema": {
"$schema": "http://json-schema.org/draft-07/schema#",
"properties": {
"cat": {
"description": "Department slug, category id, or <id>-<slug> returned by get_category.",
"maxLength": 200,
"minLength": 1,
"type": "string"
},
"ebayAspectFilter": {
"maxLength": 4000,
"minLength": 1,
"type": "string"
},
"ebayCategoryId": {
"maxLength": 100,
"minLength": 1,
"type": "string"
},
"ebayConditionIds": {
"maxLength": 500,
"minLength": 1,
"type": "string"
},
"engineParam": {
"description": "A brands[].engineParam from get_category; sent only as ebayAspectFilter.",
"maxLength": 2000,
"minLength": 1,
"type": "string"
},
"freeShipping": {
"type": "boolean"
},
"limit": {
"maximum": 60,
"minimum": 1,
"type": "integer"
},
"maxPrice": {
"minimum": 0,
"type": "number"
},
"minPrice": {
"minimum": 0,
"type": "number"
},
"minRating": {
"maximum": 5,
"minimum": 0,
"type": "number"
},
"page": {
"maximum": 100,
"minimum": 1,
"type": "integer"
},
"q": {
"description": "What to search for. Optional when cat is supplied.",
"maxLength": 300,
"type": "string"
},
"shoprs": {
"description": "A Google filter option whose engineParamType is shoprs.",
"maxLength": 4000,
"minLength": 1,
"type": "string"
},
"sort": {
"enum": [
"price_asc",
"price_desc"
],
"type": "string"
},
"source": {
"enum": [
"amazon",
"ebay",
"walmart",
"bestbuy",
"homedepot",
"wayfair",
"all"
],
"type": "string"
}
},
"type": "object"
},
"name": "search_products"
}
]
}What the leaf hashes
{"body":"312d33ee261f21f31a65ea18d98906bc53b6515ee758ae9daf8940e1339655d2","id":3354466,"kind":"mcp.tools","method":"probe.mcp/1","observed_us":1793848822049937,"prev":null,"subject":"2c60284d-392f-4d63-a254-94469e6afce3","subject_kind":"endpoint"}Proof
Fold these into the leaf in order, hashing each sorted pair with keccak256, to reach the root of (322504 rows).
- 0x743b8f5b38342af3a4778db2dbdb18a06be7afa894b6b50a80d2105af0bd9d50
- 0x208cd58b804bb4d78d0642b0b4b7d817aa846b68a5bd5807f6c856260caf63b0
- 0x04f48a714732baf90a266b36c47d4cce919e0abe24be3e2b90b48a5575946cbf
- 0xe3d7c32c54a58758c752f7879ef3d16d7bad41be3c572a083b0f11c4584182b0
- 0x4e3c57667aca55db15f08cce74a4f07db825a3b130ea63bcc53816ed3d78be3c
- 0x769204f69e21f9f11083251c18fea38cb964157ac1594c3ff41ad33a203ccb72
- 0xd16e65b41116949f6794053e86768ea63fff1f6fbfb4974609cdc506488de949
- 0xe436fdc3b557bc3159372619adccc52c47804a9ea0e199821e840e91177802f7
- 0xdd26a51b4df618ca4e0014d7b66ec73597f0b7ce98214e019d2c88c130e69a9a
- 0x8a740280ef1ce693beb7cf358c591fcff48cc630d809efb9d39e7af7e792e893
- 0x7e4cd7fcffe45b54cb2ca85ef3edcf02fbad60bd74942df42112aa30cf3f1166
- 0x7d961fd0f6a72244e8b15a26a354e745e57a89861761c1b8fe6b707ec5464fc2
- 0xcd10cdac83e7a4f14b285d956e9d7858d35953837d438fafb62fb1e7b319f218
- 0x7a97b9b4888ef386a7abe73f8d9c076a7ebfba8bf58a95a273cd4304e478a2a5
- 0xb5ea076f0a9490f58daaa0cbe915aa5dfdfe460bfc500eaea09b59c1d753d699
- 0x3b5d12e41df15017099876c1435af6ce1c7a30cfddd96040c3878ac62de1dbc3
- 0x7e5b4628b4269525ce0744fb873651b9d7be5748de44b7e6b858af09c7e30bd8
- 0xfb4e1f4d701ae273fb0cd57757f659e327608e5561a752b2099b436618493c84
- 0xf72fe7c4860b9addb17aac4a00b8afc2f8085836173f10f31697c3d192df119b
- Day root
- 0x9f0215efb0252701dc86d5600ce95f276cccc716759bf112525ae863f698d128
- Chained
- 0xc54ddff800630c6cd9656f99e7d6a61adce99bf1cea37121600598b0a9a720d2
- Published
- On Arc Testnet: 0x88f612ad94ca63af4e4e9faab9f34b665b41f03828afac1571ad013cc62bba94