addrbookFor publishers
← The evidence ledger

Evidence row 308748

Observed , by probe.mcp/1.

Kind
mcp.tools
About
endpoint 44b34b94-737e-4438-a855-5bb004bf1124
Recorded
Previous row
None: the first of its kind about this subject
Body SHA-256
f9fbce06385c985145c90031f11ee36aa9d213c03896484d8d944613906c85bb
Leaf
0x3bf03dd81ef970be50bf2f9f6d1503e1d816fbd378e77550c56edecbd98d169f

What was observed

{
  "count": 5,
  "tools": [
    {
      "description": "Find the additives named on a label (same as HTTP POST /v1/labels/analyze). Splits the additive section into tokens and returns, per token, the substances it resolves to (SubstanceSummary: facts on their own axis), plus known interactions between the detected substances.\nCutting the additive section out of the label is the caller's job; sending the whole ingredient section is allowed. Matching is exact against the alias vocabulary in scope: a token with matches: [] is unresolved, which (open world) does not distinguish \"not an additive\" from \"an additive not known here\".\n`axis` and `lang` must be one of the accepted pairs: JP+ja, US+en, EU+nl, EU+fr, EU+de, EU+es, EU+pl, EU+el, EU+bg.\nNot a safety judgement: every record is a draft and needs verification.",
      "inputSchema": {
        "$schema": "http://json-schema.org/draft-07/schema#",
        "properties": {
          "axis": {
            "description": "Regulatory axis the label or name belongs to: JP, EU or US.",
            "type": "string"
          },
          "lang": {
            "description": "Language of the name or label text (ISO 639-1), e.g. ja, en, de, fr.",
            "type": "string"
          },
          "text": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "items": {
                  "type": "string"
                },
                "type": "array"
              }
            ],
            "description": "The additive (or whole ingredient) section of one label: one raw string (split at 、 , , / for Japanese and , ; . : for Latin script, at bracket depth zero; whitespace is not a separator), or an array of already-split items (tokens[i] corresponds to item i)."
          }
        },
        "required": [
          "text",
          "axis",
          "lang"
        ],
        "type": "object"
      },
      "name": "analyze_label"
    },
    {
      "description": "(Paid; not available through MCP.) Same input as analyze_label, but each detected substance carries the cross-axis derivation.\nThis tool does not return that data: it returns the HTTP endpoint (POST /v1/labels/analyze/diff with the same JSON body, 0.01 USDC per request via x402 on Base) to call instead.",
      "inputSchema": {
        "$schema": "http://json-schema.org/draft-07/schema#",
        "properties": {
          "axis": {
            "description": "Regulatory axis the label or name belongs to: JP, EU or US.",
            "type": "string"
          },
          "lang": {
            "description": "Language of the name or label text (ISO 639-1), e.g. ja, en, de, fr.",
            "type": "string"
          },
          "text": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "items": {
                  "type": "string"
                },
                "type": "array"
              }
            ],
            "description": "The additive (or whole ingredient) section of one label: one raw string (split at 、 , , / for Japanese and , ; . : for Latin script, at bracket depth zero; whitespace is not a separator), or an array of already-split items (tokens[i] corresponds to item i)."
          }
        },
        "required": [
          "text",
          "axis",
          "lang"
        ],
        "type": "object"
      },
      "name": "analyze_label_diff"
    },
    {
      "description": "One substance with everything its own roster says (same as HTTP GET /v1/substances/{id}): identifiers, category, aliases, translations, the source-ledger row, groups, and — depending on the axis — Japanese use standards, EU/Codex conditions of use, mandatory labelling statements, the roster's definition text or the CFR citation.\nFacts from the substance's own axis only; nothing here crosses an axis (that is get_substance_diff, paid, HTTP only). Axis-specific keys are present only where the roster has that concept, and an empty list means something (use_standards: [] = no use standard; use_conditions: [] = no permitted food category).\nNot a safety judgement: every record is a draft and needs verification.",
      "inputSchema": {
        "$schema": "http://json-schema.org/draft-07/schema#",
        "properties": {
          "id": {
            "description": "Substance id as returned by search_substances or analyze_label, e.g. eu:e951, jp:designated-aspartame, us:cfr-172-804.",
            "type": "string"
          }
        },
        "required": [
          "id"
        ],
        "type": "object"
      },
      "name": "get_substance"
    },
    {
      "description": "(Paid; not available through MCP.) For every axis other than the substance's own, what that axis says (with a per-cell source) kept separate from what was derived from it; when nothing can be concluded, a refusal says why and what would settle it.\nThis tool does not return that data: it returns the HTTP endpoint (GET /v1/substances/{id}/diff, 0.01 USDC per request via x402 on Base) to call instead.",
      "inputSchema": {
        "$schema": "http://json-schema.org/draft-07/schema#",
        "properties": {
          "id": {
            "description": "Substance id as returned by search_substances or analyze_label, e.g. eu:e951, jp:designated-aspartame, us:cfr-172-804.",
            "type": "string"
          }
        },
        "required": [
          "id"
        ],
        "type": "object"
      },
      "name": "get_substance_diff"
    },
    {
      "description": "Look up substances by name on one regulatory axis (same as HTTP GET /v1/substances?name=…).\nThe name is normalised (NFKC, whitespace removed, lower-cased) and matched **exactly** against the names and aliases the axis itself uses in that language (E numbers and official names for EU, 品目名 and label terms for JP, CFR names for US) — no partial or fuzzy matching. The official name is an alias of itself.\nReturns the matching substances (SubstanceSummary: facts from their own roster only) and, per row, what text matched.\n`axis` and `lang` must be one of the accepted pairs: JP+ja, US+en, EU+nl, EU+fr, EU+de, EU+es, EU+pl, EU+el, EU+bg.\nNot a safety judgement: every record is a draft and needs verification.",
      "inputSchema": {
        "$schema": "http://json-schema.org/draft-07/schema#",
        "properties": {
          "axis": {
            "description": "Regulatory axis the label or name belongs to: JP, EU or US.",
            "type": "string"
          },
          "lang": {
            "description": "Language of the name or label text (ISO 639-1), e.g. ja, en, de, fr.",
            "type": "string"
          },
          "name": {
            "description": "The name to look up, as printed on a label or roster.",
            "type": "string"
          }
        },
        "required": [
          "name",
          "axis",
          "lang"
        ],
        "type": "object"
      },
      "name": "search_substances"
    }
  ]
}

What the leaf hashes

{"body":"f9fbce06385c985145c90031f11ee36aa9d213c03896484d8d944613906c85bb","id":308748,"kind":"mcp.tools","method":"probe.mcp/1","observed_us":1793058462343592,"prev":null,"subject":"44b34b94-737e-4438-a855-5bb004bf1124","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. 0x3bf059e81ba1bada9358bc9f24003a56a7108317e16c39ee841d9eda23e4d88c
  2. 0x21be6a38f4b62df3dbfafd303477a533de52f07390e7073f679aa6851f1b5f96
  3. 0x3358d46c06d422225182247c9d9bb7af4571a129e16e352a199b60fb3ed43c36
  4. 0xc91145fc1d7d2c0519d835f66b7b7998488ea4034b50829e93029d4fb56457c2
  5. 0x3d17a969f8353b1b9f5e00ba8f3f0a058b5c6efa22b2c220e15f44abc5a92928
  6. 0xa2777845dbca7c617339c115fc6a8f1a9176522487d512ae17573ec02d21769b
  7. 0x18c2191872e47df028bc5ffc5850483d66dfb7320b973e6646422fa19677a5bb
  8. 0x4613a64dc02e0deb3b7393dc92f0e98990cd5b1432d9f1efb048d2cea4095eeb
  9. 0x4b4fa2acef7680870af370223689a6c26b72ab969f0456cd4e0b14e50395d4c4
  10. 0x0c503c4524f0ed9ea5e3dd08b1e8fbfcbbce2a308fb2360a27a4ed64ec891f2c
  11. 0x876d91ae08f3c341c1d9ba4ed92a9c937c054b5c7d6cd935bb21dda6fb029cac
  12. 0xdb4b9388e3fe1df4b04e149e559f925fb354066ae1d2537fd6f918162716fadf
  13. 0xe2214b3d6a48396930d1739b02ea366de2aac5337c9b9ff2aff28cecf6518139
  14. 0x7f594f5609f388d64d3cda87b5631d393ee8300bb09bad71f150113a5886ee33
  15. 0x4b52a97f7a80ff7778a702b85267b8d2e5c93ce160942656435c29ae7be68bf4
  16. 0x2e6a32eb32761c210560e852405e2f865f958ddbe01027894f8b9c1b3433b9f0
  17. 0x9a83be955a206deb65b995adfd92c58fa31c95fbbf926bd199d300e70b08b26d
  18. 0x20704208aa6923d6b2450ef74ede87a6e0265d46447926038fe9506e9e154b2d
  19. 0x9b9ce5b74b9bab5121612ef6b64920a8d453cbf311096a423eef9702747e868a
Day root
0xf43e8dcc3d451a4788b26be904c55e8c4c0fa75c9666796c51db38d37e2c0df8
Chained
0x702d5ac508f08b0d1accf36af25822d8e5660367494edd17a642fb61e158a57a
Published
On Arc Testnet, block 69251483: 0x495162f8936e19f0039918feebe6c307f327cd6bf8c37219620b1970041fa9ae

How to check it · This row as JSON