addrbookFor publishers
← The evidence ledger

Evidence row 293183

Observed , by probe.mcp/1.

Kind
mcp.tools
About
endpoint 35d2090c-6f18-42b3-8dfe-9b8e290325fb
Recorded
Previous row
None: the first of its kind about this subject
Body SHA-256
a792ad23524f6f4c5be403cb289ec29bf0bc42efffcbcb886519cd14a7eff892
Leaf
0xa8f38da0cabc5a2d877ae6ff243f858f7c05a2e62fcc31f46be8847de8f6a5ac

What was observed

{
  "count": 5,
  "tools": [
    {
      "description": "Use this when asked whether an AI agent, MCP server or API works or has changed, e.g. before adding or paying it. Pass its `url`. Returns a verdict, fixes, dated history when observed, and a receipt. With `agent` (e.g. GPTBot): may your bot fetch it (robots.txt, AI-crawler rules)? Free, read-only, no account; inputs must be public and non-personal.",
      "inputSchema": {
        "additionalProperties": false,
        "examples": [
          {
            "url": "https://www.gaipagents.com/.well-known/agent-card.json"
          }
        ],
        "properties": {
          "agent": {
            "description": "Optional: ask \"may my agent fetch this url?\" instead. Your agent's user-agent token, e.g. GPTBot; GAIP reads the site's robots.txt and AI-permission files (gaip_check_permission).",
            "maxLength": 300,
            "type": "string"
          },
          "continuity_handle": {
            "additionalProperties": false,
            "description": "Optional: the continuity_handle from an earlier GAIP result; links this call to your earlier ones (needed to see or remove your watches later).",
            "properties": {
              "continuity_id": {
                "type": "string"
              },
              "token": {
                "type": "string"
              }
            },
            "required": [
              "continuity_id",
              "token"
            ],
            "type": "object"
          },
          "intended_task": {
            "description": "Optional: what you plan to hand it, e.g. 'weather forecast for London'. Adds task-specific evidence.",
            "maxLength": 500,
            "type": "string"
          },
          "url": {
            "description": "Public https link to the agent, its A2A agent card, MCP server endpoint or OpenAPI document. GAIP fetches, validates and reach-tests it; an MCP endpoint gets a read-only handshake (initialize, tools/list).",
            "format": "uri",
            "maxLength": 2048,
            "type": "string"
          },
          "verbose": {
            "default": false,
            "description": "Optional: true returns the full result with every underlying field. Default: a short answer.",
            "type": "boolean"
          }
        },
        "required": [
          "url"
        ],
        "type": "object"
      },
      "name": "gaip_check"
    },
    {
      "description": "Use this when an agent, MCP or API call failed. Paste the `error` text and/or `http_status`; add the service `url` if known. Returns the cause, the exact fix (e.g. the missing argument) and retry_after_seconds; `keep_receipt: true` adds a dated receipt. Free, read-only, no account; inputs must be public and non-personal.",
      "inputSchema": {
        "additionalProperties": false,
        "examples": [
          {
            "error": "HTTP 429 Too Many Requests; Retry-After: 20",
            "http_status": 429
          }
        ],
        "properties": {
          "continuity_handle": {
            "additionalProperties": false,
            "description": "Optional: the continuity_handle from an earlier GAIP result; links this call to your earlier ones (needed to see or remove your watches later).",
            "properties": {
              "continuity_id": {
                "type": "string"
              },
              "token": {
                "type": "string"
              }
            },
            "required": [
              "continuity_id",
              "token"
            ],
            "type": "object"
          },
          "error": {
            "description": "The error you got, as text: HTTP status line, JSON-RPC/A2A/MCP error or message. Give this and/or http_status.",
            "maxLength": 4000,
            "type": "string"
          },
          "http_status": {
            "description": "Optional: the HTTP status code you got, e.g. 429.",
            "maximum": 599,
            "minimum": 100,
            "type": "integer"
          },
          "keep_receipt": {
            "default": false,
            "description": "Optional: true keeps a dated GAIP receipt of this answer and returns a continuity handle. Default: GAIP keeps no record of the task (usage is counted without its content).",
            "type": "boolean"
          },
          "url": {
            "description": "Optional: public https URL of the agent, MCP server or API that failed.",
            "format": "uri",
            "maxLength": 2048,
            "type": "string"
          },
          "verbose": {
            "default": false,
            "description": "Optional: true returns the full result with every underlying field. Default: a short answer.",
            "type": "boolean"
          }
        },
        "type": "object"
      },
      "name": "gaip_diagnose"
    },
    {
      "description": "Use this when asked whether a service delivered what was promised or whether cited pages contain the quoted text. Pass `citations`, or a service `url` (+ `checks`, the `result` you got), or `claims` with `observations`. Returns a result per item. Free, no account; only delivery keeps a record. Inputs must be public and non-personal.",
      "inputSchema": {
        "additionalProperties": false,
        "examples": [
          {
            "citations": [
              {
                "quote": "GAIP",
                "url": "https://www.gaipagents.com/"
              }
            ]
          }
        ],
        "properties": {
          "checks": {
            "description": "Optional (delivery): what a good response is, e.g. [{\"id\": \"http_status_in\", \"allowed\": [200]}, {\"id\": \"json_parses\"}]. Default: HTTP 200 and a non-empty body.",
            "examples": [
              [
                {
                  "allowed": [
                    200
                  ],
                  "id": "http_status_in"
                },
                {
                  "id": "content_type_is",
                  "value": "application/json"
                },
                {
                  "id": "non_empty"
                },
                {
                  "id": "json_parses"
                }
              ],
              [
                {
                  "allowed": [
                    200
                  ],
                  "id": "http_status_in"
                },
                {
                  "id": "json_required_keys",
                  "keys": [
                    "status"
                  ]
                },
                {
                  "id": "json_path_equals",
                  "path": "status",
                  "value": "ok"
                },
                {
                  "id": "max_latency_ms",
                  "limit": 2000
                }
              ]
            ],
            "items": {
              "additionalProperties": false,
              "properties": {
                "allowed": {
                  "description": "http_status_in: the acceptable HTTP statuses, e.g. [200].",
                  "items": {
                    "maximum": 599,
                    "minimum": 100,
                    "type": "integer"
                  },
                  "maxItems": 10,
                  "minItems": 1,
                  "type": "array"
                },
                "id": {
                  "description": "http_status_in (allowed), content_type_is (value), non_empty, json_parses, json_required_keys (keys), json_path_equals (path, value), max_latency_ms (limit), max_bytes (limit), text_contains (value), regex (pattern).",
                  "enum": [
                    "http_status_in",
                    "content_type_is",
                    "non_empty",
                    "json_parses",
                    "json_required_keys",
                    "json_path_equals",
                    "max_latency_ms",
                    "max_bytes",
                    "text_contains",
                    "regex"
                  ],
                  "type": "string"
                },
                "keys": {
                  "description": "json_required_keys: top-level or dotted keys that must exist, e.g. [\"a.b\"].",
                  "items": {
                    "maxLength": 200,
                    "type": "string"
                  },
                  "maxItems": 20,
                  "minItems": 1,
                  "type": "array"
                },
                "limit": {
                  "description": "max_latency_ms: milliseconds (1-60000); max_bytes: body bytes (1-32768).",
                  "maximum": 60000,
                  "minimum": 1,
                  "type": "integer"
                },
                "path": {
                  "description": "json_path_equals: dotted path, list items by index, e.g. items.0.id.",
                  "maxLength": 200,
                  "type": "string"
                },
                "pattern": {
                  "description": "regex: bounded pattern searched in the body; no nested quantifiers.",
                  "maxLength": 200,
                  "type": "string"
                },
                "value": {
                  "description": "content_type_is: media type, e.g. application/json; text_contains: case-sensitive text; json_path_equals: the expected value (GAIP also accepts a number, boolean, null, array or object).",
                  "maxLength": 200,
                  "type": "string"
                }
              },
              "required": [
                "id"
              ],
              "type": "object"
            },
            "maxItems": 8,
            "minItems": 1,
            "type": "array"
          },
          "citations": {
            "description": "Citations to check: each {url, quote?} or just a URL. GAIP fetches each page once (robots.txt respected) and looks for the quote.",
            "items": {
              "oneOf": [
                {
                  "type": "string"
                },
                {
                  "type": "object"
                }
              ]
            },
            "maxItems": 20,
            "minItems": 1,
            "type": "array"
          },
          "claims": {
            "description": "Claims to record about `url`: each a sentence or {id, text}. Each is compared with the `observations` you supply; without them it stays UNTESTED.",
            "items": {
              "oneOf": [
                {
                  "type": "string"
                },
                {
                  "type": "object"
                }
              ]
            },
            "maxItems": 20,
            "minItems": 1,
            "type": "array"
          },
          "continuity_handle": {
            "additionalProperties": false,
            "description": "Optional: the continuity_handle from an earlier GAIP result; links this call to your earlier ones (needed to see or remove your watches later).",
            "properties": {
              "continuity_id": {
                "type": "string"
              },
              "token": {
                "type": "string"
              }
            },
            "required": [
              "continuity_id",
              "token"
            ],
            "type": "object"
          },
          "keep_receipt": {
            "default": false,
            "description": "Optional: true keeps a dated GAIP receipt of this answer and returns a continuity handle. Default: GAIP keeps no record of the task (usage is counted without its content).",
            "type": "boolean"
          },
          "metadata": {
            "description": "Optional (claims): the published agent card, MCP or OpenAPI document.",
            "type": "object"
          },
          "observations": {
            "description": "Optional (claims): what you saw, each {claim_id, result: PASS|FAIL, detail}.",
            "items": {
              "type": "object"
            },
            "maxItems": 30,
            "type": "array"
          },
          "result": {
            "description": "Optional (delivery): the response you received. Omitted: GAIP fetches the service URL now (public replay).",
            "properties": {
              "body": {
                "maxLength": 32768,
                "type": "string"
              },
              "body_sha256": {
                "type": "string"
              },
              "content_type": {
                "type": "string"
              },
              "http_status": {
                "type": "integer"
              }
            },
            "type": "object"
          },
          "terms_id": {
            "description": "Optional (delivery): terms_id from an earlier registration, instead of url.",
            "type": "string"
          },
          "url": {
            "description": "Claims: the agent or supplier they are about. Delivery: the public https service URL that should deliver.",
            "format": "uri",
            "maxLength": 2048,
            "type": "string"
          },
          "verbose": {
            "default": false,
            "description": "Optional: true returns the full result with every underlying field. Default: a short answer.",
            "type": "boolean"
          }
        },
        "type": "object"
      },
      "name": "gaip_verify"
    },
    {
      "description": "Use this when asked to keep an eye on an agent or MCP server, or to be alerted when it changes. Pass its `url`: returns feed links and its latest dated changes; add `webhook_url` for a free watch (checked every 24 h, signed webhook on change). Free, no account; with a webhook it records a watch. Inputs must be public and non-personal.",
      "inputSchema": {
        "additionalProperties": false,
        "examples": [
          {
            "url": "https://www.gaipagents.com/mcp"
          }
        ],
        "properties": {
          "continuity_handle": {
            "additionalProperties": false,
            "description": "Optional: the continuity_handle from an earlier GAIP result; links this call to your earlier ones (needed to see or remove your watches later).",
            "properties": {
              "continuity_id": {
                "type": "string"
              },
              "token": {
                "type": "string"
              }
            },
            "required": [
              "continuity_id",
              "token"
            ],
            "type": "object"
          },
          "url": {
            "description": "Public https URL of the MCP server endpoint or agent (card) to follow. No query string.",
            "format": "uri",
            "maxLength": 2048,
            "type": "string"
          },
          "verbose": {
            "default": false,
            "description": "Optional: true returns the full result with every underlying field. Default: a short answer.",
            "type": "boolean"
          },
          "webhook_url": {
            "description": "Optional: your own public https endpoint. GAIP then registers a watch and POSTs a signed event when the result changes.",
            "format": "uri",
            "maxLength": 2048,
            "type": "string"
          }
        },
        "required": [
          "url"
        ],
        "type": "object"
      },
      "name": "gaip_watch"
    },
    {
      "description": "Use this when a shopper is about to buy something an AI suggested, or asks if a price or stock claim is right. Pass the product page `url` and the `claim`. Returns what the page showed beside what the claim said, and a signed, dated receipt. Second Look by GAIP. Free, no account, no affiliate links; inputs must be public and non-personal.",
      "inputSchema": {
        "additionalProperties": false,
        "examples": [
          {
            "claim": "24 GBP, in stock",
            "url": "https://www.gaipagents.com/test-range/shop/products/demo-mug"
          }
        ],
        "properties": {
          "claim": {
            "description": "What the shopper was told, in plain words, e.g. \"89 GBP, in stock, size M\". Only the price, stock and variant are kept; the rest is discarded.",
            "maxLength": 2000,
            "type": "string"
          },
          "continuity_handle": {
            "additionalProperties": false,
            "description": "Optional: the continuity_handle from an earlier GAIP result; links this call to your earlier ones (needed to see or remove your watches later).",
            "properties": {
              "continuity_id": {
                "type": "string"
              },
              "token": {
                "type": "string"
              }
            },
            "required": [
              "continuity_id",
              "token"
            ],
            "type": "object"
          },
          "currency": {
            "description": "ISO currency, e.g. GBP (optional).",
            "pattern": "^[A-Za-z]{3}$",
            "type": "string"
          },
          "in_stock": {
            "description": "Claimed stock (optional).",
            "type": "boolean"
          },
          "mandate_ref": {
            "description": "Optional: your own reference to the shopper's mandate for this purchase. Kept only as a keyed hash (mandate_sha256) on the receipt, never in clear.",
            "maxLength": 200,
            "type": "string"
          },
          "price": {
            "description": "Claimed price, e.g. \"89.00\" (optional).",
            "maxLength": 20,
            "type": "string"
          },
          "url": {
            "description": "Public https link to the product page on the shop's own site.",
            "format": "uri",
            "maxLength": 2000,
            "type": "string"
          },
          "variant": {
            "description": "Claimed size, colour or option (optional).",
            "maxLength": 60,
            "type": "string"
          },
          "verbose": {
            "default": false,
            "description": "Optional: true returns the full result with every underlying field. Default: a short answer.",
            "type": "boolean"
          }
        },
        "required": [
          "url"
        ],
        "type": "object"
      },
      "name": "second_look_check"
    }
  ]
}

What the leaf hashes

{"body":"a792ad23524f6f4c5be403cb289ec29bf0bc42efffcbcb886519cd14a7eff892","id":293183,"kind":"mcp.tools","method":"probe.mcp/1","observed_us":1793049224391781,"prev":null,"subject":"35d2090c-6f18-42b3-8dfe-9b8e290325fb","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. 0xa8f34915eac9cfc5a68491d436d1f9cf1db4367557493abbed00a10af0ee5cb4
  2. 0x03039bf55c326581f3ef61b04404b461ec879032e50e467da6e3671e2ce67cfa
  3. 0x0ac48e6561f42f3ac9084563da6fba5a81c9c6647ecc44cb4485684e713b3259
  4. 0xa989184e9ee4a76b2209883bc8208d48ed0db87dff14243ca5a157dbd5cbe85d
  5. 0x598f2347107150617bc0f607c81905e3f9f1db1667b2244eae0fb1f68e58d20a
  6. 0xd29e4f0a07512fc245fcff5c73d55831a745e63983ad44f010222a86369792ea
  7. 0xbcc577c0d75c3f95755c7611907151a64edf3318d55b43dec9fabbcd12f6032d
  8. 0xa4083cc7830fc1b50fad14fe08e218eecae480b0f693f8415c14ad90d1f2fcb1
  9. 0xf03b5580b4cf240f57781e01d5a8c5662eb3f5d9781d4b04b50611882de9ffd1
  10. 0x59283b4f1957eed1ca397cea7a54cad8fd28e2488fdbd3f14185468ebe1209e1
  11. 0xcc46e37d035d0d90e3d86104e55f155ffacd1530f11ceef85fa02db50beb78a5
  12. 0xb31654882cc5704ae07fa6a4ad12ef5516ea95a5ec8b5affdbdbec199402e29a
  13. 0x292ebdce6b8d3d7ef08ad646a0fd97dee9313ab55c1a350807d9f3013794c37a
  14. 0x428106f4ae4ec142f17aebf6fa50935242f8d3f1c211cf95d6351d03d11da2b7
  15. 0x62a900133713919f4eed33d8336876b7a6d538233b8a4f3ed03b29aa44f5bad0
  16. 0x1ac20d30773e1f4f2f811540e9a99b5cca9177c9e2e029acc0d80cf3f1d11f0f
  17. 0xd21942ae3214eff88e08ab04884fd4b11958b51af9a0741b7668e2d07a2c56c9
  18. 0x9a9024edb5069d88a324facb310a5ce8e495214bbaa968f077bede437390194f
  19. 0x9b9ce5b74b9bab5121612ef6b64920a8d453cbf311096a423eef9702747e868a
Day root
0xf43e8dcc3d451a4788b26be904c55e8c4c0fa75c9666796c51db38d37e2c0df8
Chained
0x702d5ac508f08b0d1accf36af25822d8e5660367494edd17a642fb61e158a57a
Published
On Arc Testnet, block 69251483: 0x495162f8936e19f0039918feebe6c307f327cd6bf8c37219620b1970041fa9ae

How to check it · This row as JSON