addrbookFor publishers
← The evidence ledger

Evidence row 293456

Observed , by probe.mcp/1.

Kind
mcp.tools
About
endpoint 0e2f8907-fd29-4af4-a572-1fb0c23aa0a4
Recorded
Previous row
None: the first of its kind about this subject
Body SHA-256
1e52e334ea1c2c951ec20625077cace2a002d00687bbb18816ce1fd5e69afec4
Leaf
0xe47cda2ecfbe15af85389a8d09248389cb086b558b57d524e9f4d7acdac5a5bf

What was observed

{
  "count": 12,
  "tools": [
    {
      "description": "Walk a note's table of contents level by level (progressive disclosure). Canonical call: expand(path=<result.note_path>, toc_path=[...]) — copy path verbatim from a search result's note_path field. Returns the direct children of a TOC node: omit toc_path (or pass []) for the top-level sections, or pass a toc_path to list that section's subsections. Each child has title, level, path, and has_children. A section with subsections lists them; a section without subsections is returned in full (what note_html gives for that toc_path, plus section_html in the payload), so no second call is needed to read a leaf. This cannot be turned off, and a client that wants only structure never triggers it: has_children on each listed child says where descending would turn into reading.",
      "inputSchema": {
        "properties": {
          "first": {
            "description": "List only this many of the oldest subsections. Pair it with last to get how a subject started and where it stands now, leaving out the middle; the summary marks the gap where it falls.",
            "type": "number"
          },
          "href": {
            "description": "String note href, copied verbatim from a search result's href field",
            "type": "string"
          },
          "last": {
            "description": "List only this many of the newest subsections instead of all of them. A note that gains a dated section a day has hundreds of them after a year, and reading the whole listing to reach the latest few is the cost this avoids. The summary, total_children and omitted say what was left out, so a bounded listing never reads as a complete one. Bounds that meet or overlap return everything rather than repeating a run.",
            "type": "number"
          },
          "note_id": {
            "description": "Same as pid: non-negative integer (uint64) note id, copied verbatim from a search result's note_id field. Not a path, slug, or match_id. Prefer path",
            "type": "number"
          },
          "path": {
            "description": "String note path, e.g. \"concepts/maska-i-glubina.md\" — copy verbatim from a search result's note_path field. The default, preferred way to reference a note",
            "type": "string"
          },
          "pid": {
            "description": "Non-negative integer (uint64) note id, copied verbatim from a search result's note_id field. Not a path, slug, or match_id. Prefer path",
            "type": "number"
          },
          "toc_path": {
            "description": "Breadcrumb path to the node to expand, e.g. [\"Chapter 1\"]. Omit or [] for the top level.",
            "items": {
              "type": "string"
            },
            "type": "array"
          }
        },
        "type": "object"
      },
      "name": "expand"
    },
    {
      "description": "Get one attachment of a remote note — a file, not text. Canonical loop: federated_note_html(kb_id, path) -> for each name in its assets: federated_asset(kb_id, note_path=<that path>, name=<name>). Returns the asset's size and sha256 and a short-lived download URL on this server that streams the file from the remote base; fetch it with curl (the URL needs no other credential) and check the sha256. The file itself never comes back in the tool result. Only a directly connected base: kb_id without '/'.",
      "inputSchema": {
        "properties": {
          "kb_id": {
            "description": "Directly connected knowledge base id, as in federated_note_html",
            "type": "string"
          },
          "name": {
            "description": "One name from that note's assets, copied verbatim, e.g. \"files/attach.zip\"",
            "type": "string"
          },
          "note_path": {
            "description": "The remote note's path, exactly as passed to federated_note_html",
            "type": "string"
          }
        },
        "required": [
          "kb_id",
          "note_path",
          "name"
        ],
        "type": "object"
      },
      "name": "federated_asset"
    },
    {
      "description": "Walk a remote note's table of contents level by level inside a connected knowledge base (progressive disclosure), same as expand. Canonical call: federated_expand(kb_id=..., path=<result.note_path>, toc_path=[...]). Omit toc_path for the top level, or pass a toc_path to list that node's subsections. A section with subsections lists them; a section without subsections is returned in full, as federated_note_html would return it — has_children on each listed child says where that happens.",
      "inputSchema": {
        "properties": {
          "first": {
            "description": "List only this many of the oldest subsections, as expand does.",
            "type": "number"
          },
          "href": {
            "description": "String remote note href, copied verbatim from a federated_search result's href field",
            "type": "string"
          },
          "kb_id": {
            "description": "Target knowledge base id; nested bases use '/' (e.g. \"philosophers/nietzsche\" routes through the 'philosophers' peer, recursively). Federation nests up to 3 levels deep (kb_id path segments); a deeper path is rejected.",
            "type": "string"
          },
          "last": {
            "description": "List only this many of the newest subsections instead of all of them, as expand does. The summary, total_children and omitted say what was left out.",
            "type": "number"
          },
          "note_id": {
            "description": "Same remote note id as pid, but as a STRING (uint64) — stringify the federated_search result's note_id field. Prefer path",
            "type": "string"
          },
          "path": {
            "description": "String remote note path, copied verbatim from a federated_search result's note_path field",
            "type": "string"
          },
          "pid": {
            "description": "Non-negative integer (uint64) remote note id, copied verbatim from a federated_search result's note_id field. Prefer path",
            "type": "number"
          },
          "toc_path": {
            "description": "Breadcrumb path to the node to expand. Omit or [] for the top level.",
            "items": {
              "type": "string"
            },
            "type": "array"
          }
        },
        "required": [
          "kb_id"
        ],
        "type": "object"
      },
      "name": "federated_expand"
    },
    {
      "description": "Fetch the instructions/guidance for a federated knowledge base by kb_id (e.g. \"philosophers/nietzsche\") — read a base's own conventions before searching it. Nested bases are addressed with '/' and the call routes through each peer recursively.",
      "inputSchema": {
        "properties": {
          "kb_id": {
            "description": "Target knowledge base id; nested bases use '/' (e.g. \"philosophers/nietzsche\" routes through the 'philosophers' peer, recursively)",
            "type": "string"
          }
        },
        "required": [
          "kb_id"
        ],
        "type": "object"
      },
      "name": "federated_instructions"
    },
    {
      "description": "Read a remote note inside a connected knowledge base. Canonical call, copying fields verbatim from a federated_search result: federated_search(kb_id=\"philosophers/<author>\", query) -> federated_note_html(kb_id=\"philosophers/<author>\", path=<result.note_path>) — the standard way to descend into a leaf corpus and read real content there, not hub cards. federated_note_html(kb_id=..., match_id=<match.match_id>) reads just the focused chunk around a hit. Only pass pid/note_id if you already copied that exact id from a result. path is a string like \"concepts/x.md\"; match_id is \"p<pid>:c<chunk>\"; a value like \":\" or \"/hub/goethe.md\" is a PATH, not a note_id.",
      "inputSchema": {
        "properties": {
          "href": {
            "description": "String remote note href or absolute URL, copied verbatim from a federated_search result's href field",
            "type": "string"
          },
          "kb_id": {
            "description": "Target knowledge base id; nested bases use '/' (e.g. \"philosophers/nietzsche\" routes through the 'philosophers' peer, recursively). Federation nests up to 3 levels deep (kb_id path segments); a deeper path is rejected.",
            "type": "string"
          },
          "match_id": {
            "description": "String chunk id of the form \"p<pid>:c<chunk>\", copied verbatim from a remote search match's match_id field; alone it is enough to resolve the note",
            "type": "string"
          },
          "note_id": {
            "description": "Same remote note id as pid, but as a STRING (uint64) — stringify the federated_search result's note_id field. Not a path, slug, or match_id. Prefer path or match_id",
            "type": "string"
          },
          "path": {
            "description": "String remote note path, copied verbatim from a federated_search result's note_path field",
            "type": "string"
          },
          "pid": {
            "description": "Non-negative integer (uint64) remote note id, copied verbatim from a federated_search result's note_id field. Not a path, slug, or match_id. Prefer path or match_id",
            "type": "number"
          },
          "toc_path": {
            "description": "Breadcrumb path to a specific section, e.g. [\"Chapter 1\", \"Introduction\"]. Use toc_path from a federated_search match, or a child path from federated_expand. Wins over match_id when both are given. Without either the whole note comes back.",
            "items": {
              "type": "string"
            },
            "type": "array"
          }
        },
        "required": [
          "kb_id"
        ],
        "type": "object"
      },
      "name": "federated_note_html"
    },
    {
      "description": "Search connected knowledge bases. Returns snippets with heading breadcrumbs (title > section > subsection) and a precise toc_path per match, same as search; results also carry an absolute kb_id (string) to use verbatim on follow-up calls. Pass kb_id for one base, kb_ids for selected bases, or omit both to fan out. Nested bases are addressed with '/': kb_id \"philosophers/nietzsche\" routes through the 'philosophers' peer to the base it federates (recursive), up to 3 levels deep. Canonical call: federated_search(kb_id=\"philosophers/<author>\", query) -> federated_note_html(kb_id=\"philosophers/<author>\", path=<result.note_path>) — the standard way to descend into a leaf corpus and read real content, not hub cards. The optional fields each run an extra search whose results are merged with the main one; fill them to find more.",
      "inputSchema": {
        "properties": {
          "detail_limit": {
            "description": "How many results include full snippet matches; results beyond this are returned as lightweight previews (title, path, score) to save context (default 3)",
            "type": "number"
          },
          "expected_answer": {
            "description": "Optional. One or two sentences in English that the answering note itself could contain, written the way the notes state facts (e.g. 'To reset a password, open Settings and select Security.'). Not a description of what the note covers, not a question. If unsure of details, stay general but keep it a statement of fact.",
            "type": "string"
          },
          "kb_id": {
            "description": "Target knowledge base id; nested bases use '/' (e.g. \"philosophers/nietzsche\" routes through the 'philosophers' peer, recursively). Federation nests up to 3 levels deep (kb_id path segments); a deeper path is rejected.",
            "type": "string"
          },
          "kb_ids": {
            "description": "Target knowledge base ids; each accepts the same nested 'peer/base' form as kb_id",
            "items": {
              "type": "string"
            },
            "type": "array"
          },
          "limit": {
            "description": "Max number of results to return (default 6)",
            "type": "number"
          },
          "query": {
            "description": "The user's question exactly as they asked it. Do not rewrite it.",
            "type": "string"
          },
          "rephrased_query": {
            "description": "Optional. The question asked another way in English: different words, and the canonical name of what it asks about if you know it. One sentence.",
            "type": "string"
          },
          "short_query": {
            "description": "Optional. 2-3 words in English that the answering note is sure to contain: the main term and one qualifier, in dictionary form (nominative singular, infinitive). A short phrase, not a list; no punctuation. Keyword search needs every word to match, so fewer precise words beat many.",
            "type": "string"
          }
        },
        "required": [
          "query"
        ],
        "type": "object"
      },
      "name": "federated_search"
    },
    {
      "description": "Find remote notes similar to a known note reference inside a connected knowledge base. Preferred: path (a federated_search result's note_path field).",
      "inputSchema": {
        "properties": {
          "href": {
            "description": "String remote note href, copied verbatim from a federated_search result's href field",
            "type": "string"
          },
          "kb_id": {
            "description": "Target knowledge base id; nested bases use '/' (e.g. \"philosophers/nietzsche\" routes through the 'philosophers' peer, recursively). Federation nests up to 3 levels deep (kb_id path segments); a deeper path is rejected.",
            "type": "string"
          },
          "limit": {
            "description": "Max number of results",
            "type": "number"
          },
          "note_id": {
            "description": "Same remote note id as pid, but as a STRING (uint64) — stringify the federated_search result's note_id field. Prefer path",
            "type": "string"
          },
          "path": {
            "description": "String remote note path, copied verbatim from a federated_search result's note_path field",
            "type": "string"
          },
          "pid": {
            "description": "Non-negative integer (uint64) remote note id, copied verbatim from a federated_search result's note_id field. Prefer path",
            "type": "number"
          }
        },
        "required": [
          "kb_id"
        ],
        "type": "object"
      },
      "name": "federated_similar"
    },
    {
      "description": "Full tool reference for the trip2g documentation base",
      "inputSchema": {
        "type": "object"
      },
      "name": "instructions"
    },
    {
      "description": "Read a note. Canonical calls, copying fields verbatim from a search result: search(query) -> note_html(path=<result.note_path>) reads the whole note; search(query) -> note_html(match_id=<match.match_id>) reads just the focused chunk around a hit (cheaper, targeted); expand(path=<result.note_path>, toc_path=[...]) -> note_html(path=<result.note_path>, toc_path=[...]) reads one exact section. Only pass pid/note_id if you already copied that exact integer from a result's note_id field — never invent one. path is a string like \"concepts/x.md\"; match_id is \"p<pid>:c<chunk>\"; a value like \":\" or \"/hub/goethe.md\" is a PATH, not a note_id.",
      "inputSchema": {
        "properties": {
          "context_words": {
            "description": "Optional future hint for expanding focused reads",
            "type": "number"
          },
          "href": {
            "description": "String note href or absolute URL, copied verbatim from a search result's href field",
            "type": "string"
          },
          "match_id": {
            "description": "String chunk id of the form \"p<pid>:c<chunk>\" (e.g. \"p32:c4\"), copied verbatim from a search match's match_id field. Alone it is enough to resolve the note and reads a focused window around that hit",
            "type": "string"
          },
          "note_id": {
            "description": "Same as pid: non-negative integer (uint64) note id, copied verbatim from a search result's note_id field. Not a path, slug, or match_id. Prefer path or match_id",
            "type": "number"
          },
          "path": {
            "description": "String note path, e.g. \"concepts/maska-i-glubina.md\" — copy verbatim from a search result's note_path field. The default, preferred way to open a note",
            "type": "string"
          },
          "pid": {
            "description": "Non-negative integer (uint64) note id, copied verbatim from a search result's note_id field. Not a path, slug, or match_id — a value like \":\" or \"/hub/goethe.md\" is a path, not a note id. Prefer path or match_id",
            "type": "number"
          },
          "toc_path": {
            "description": "Breadcrumb path to a specific section, e.g. [\"Chapter 1\", \"Introduction\"]. Use toc_path from a search match, or a child path from expand. Wins over match_id when both are given: match_id is only used when toc_path is absent.",
            "items": {
              "type": "string"
            },
            "type": "array"
          }
        },
        "type": "object"
      },
      "name": "note_html"
    },
    {
      "description": "Search notes by query. Returns snippets with a heading breadcrumb (title > section > subsection) that locates the approximate section, plus a precise toc_path per match. Each result carries note_path (string) and note_id (integer); each match carries match_id (string, form \"p<pid>:c<chunk>\"). Drill-down workflow: 1) search to find the approximate section via the breadcrumb; 2) call note_html(path=<result.note_path>, toc_path=[...]) to read the matched section, or expand(path=<result.note_path>, toc_path=[...]) to navigate the note's structure level by level; 3) note_html(path=<result.note_path>, match_id=<match.match_id>) for a focused chunk window. Each match also carries section_url — a link straight to that heading, for citing the section rather than the whole note. The optional fields each run an extra search whose results are merged with the main one; fill them to find more.",
      "inputSchema": {
        "properties": {
          "detail_limit": {
            "description": "How many results include full snippet matches; results beyond this are returned as lightweight previews (title, path, score) to save context (default 3)",
            "type": "number"
          },
          "expected_answer": {
            "description": "Optional. One or two sentences in English that the answering note itself could contain, written the way the notes state facts (e.g. 'To reset a password, open Settings and select Security.'). Not a description of what the note covers, not a question. If unsure of details, stay general but keep it a statement of fact.",
            "type": "string"
          },
          "limit": {
            "description": "Max number of results to return (default 6)",
            "type": "number"
          },
          "query": {
            "description": "The user's question exactly as they asked it. Do not rewrite it.",
            "type": "string"
          },
          "rephrased_query": {
            "description": "Optional. The question asked another way in English: different words, and the canonical name of what it asks about if you know it. One sentence.",
            "type": "string"
          },
          "short_query": {
            "description": "Optional. 2-3 words in English that the answering note is sure to contain: the main term and one qualifier, in dictionary form (nominative singular, infinitive). A short phrase, not a list; no punctuation. Keyword search needs every word to match, so fewer precise words beat many.",
            "type": "string"
          }
        },
        "required": [
          "query"
        ],
        "type": "object"
      },
      "name": "search"
    },
    {
      "description": "Find related notes from a known note reference. Preferred: path (a search result's note_path field). Use this after opening a promising note when you need nearby context.",
      "inputSchema": {
        "properties": {
          "href": {
            "description": "String note href, copied verbatim from a search result's href field",
            "type": "string"
          },
          "limit": {
            "description": "Max number of results (default 10)",
            "type": "number"
          },
          "note_id": {
            "description": "Same as pid: non-negative integer (uint64) note id, copied verbatim from a search result's note_id field. Not a path, slug, or match_id. Prefer path",
            "type": "number"
          },
          "path": {
            "description": "String note path, e.g. \"concepts/maska-i-glubina.md\" — copy verbatim from a search result's note_path field. The default, preferred way to reference a note",
            "type": "string"
          },
          "pid": {
            "description": "Non-negative integer (uint64) note id, copied verbatim from a search result's note_id field. Not a path, slug, or match_id — a value like \":\" or \"/hub/goethe.md\" is a path, not a note id. Prefer path",
            "type": "number"
          }
        },
        "type": "object"
      },
      "name": "similar"
    },
    {
      "description": "Wiki Knowledge Base Instructions",
      "inputSchema": {
        "type": "object"
      },
      "name": "wiki"
    }
  ]
}

What the leaf hashes

{"body":"1e52e334ea1c2c951ec20625077cace2a002d00687bbb18816ce1fd5e69afec4","id":293456,"kind":"mcp.tools","method":"probe.mcp/1","observed_us":1793049403275930,"prev":null,"subject":"0e2f8907-fd29-4af4-a572-1fb0c23aa0a4","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. 0xe47ccb32e626cb6a677ce5fe87607c21757a7d093665d8e49d1b08c3110aec58
  2. 0xc8d8ef56e45bae3ee841e49887b6af432ee40a8bf42789002342425f07056b67
  3. 0x966fb3ef088c92a883e9628c9a78dc3f180dbd5437907b7b381bb4890da2edd7
  4. 0xda91bc3587e8861fc626673318d26423e3accde980eefebd81fdff21e3f03af2
  5. 0x5f3e53d79e2ace4e83ebb571f8500899d81ad8069f8150ba4c15667969a3a1a4
  6. 0x2515e86ca4da46d1e1e191ace71d0cae03f560e3fa985f9ca10599c5d9090995
  7. 0x7462fa0e672facf91cc83552e9177810c134978c534859c91c5ec6286213d34b
  8. 0x732fabd717c36e930e47a999d89abfb9944b8a1cef213f47dba5ed76e165967c
  9. 0xfad341df9f0650e5cda8e3dfaac4ac724c361673dc56b69456c2ae2d27c06c26
  10. 0x86c56520a247c0dd1499f40b00669d0f980768d7f2c1c990aed4a43e7b31c44a
  11. 0x162e0da99198c9cdc9c43bf4626e85f4a7092fdb31ea15c7126e1f98b20eaa56
  12. 0x2fc38b57208d692aab1ee89b6e26917df292126314027c27360c5644a63fd0bc
  13. 0xc0924a0807e534382f518663123231c317124338831a2b310de2c17b09677086
  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