addrbookFor publishers
← The evidence ledger

Evidence row 2518832

Observed , by probe.mcp/1.

Kind
mcp.tools
About
endpoint 1e8a73ee-fc0b-4372-8d42-577d1c28e572
Recorded
Previous row
#264725
Body SHA-256
477e8290c1b087c9d03209ff8416505309821e0087b1807b1d531b5b797df26e
Leaf
0xbf0c2a3b8382bccdf8302f4eafc16661894682427ae57716542554c671df2cdf

What was observed

{
  "count": 7,
  "tools": [
    {
      "description": "Search nifra's framework documentation and get back ONLY the matching sections - auth, uploads, ISR, WebSockets, loaders, deployment, anything. Call with no query for the cheap section index; pass query (e.g. \"isr revalidate\") for the top matching sections. Use this instead of reading llms-full.txt (~150 KB) whole. For the EXACT TypeScript of a type/interface/function, call nifra_types instead (don't read .d.ts files).",
      "inputSchema": {
        "additionalProperties": false,
        "properties": {
          "limit": {
            "description": "Max sections to return (default 3, max 5).",
            "type": "number"
          },
          "query": {
            "description": "Keywords to match against doc sections (omit for the index).",
            "maxLength": 256,
            "type": "string"
          }
        },
        "type": "object"
      },
      "name": "nifra_docs"
    },
    {
      "description": "Get a verified, copy-pasteable Nifra code example for a task - auth route, file upload, ISR page, loader/action, typed client, SSE, deployment, and more. Every snippet is typechecked against the installed Nifra version, so it compiles as-is. Returns code as text for direct use. Call with no query for the grouped index; pass query (e.g. \"protected route\", \"upload\", \"isr revalidate\") for matching snippets.",
      "inputSchema": {
        "additionalProperties": false,
        "properties": {
          "limit": {
            "description": "Max examples to return (default 3, max 5).",
            "type": "number"
          },
          "query": {
            "description": "What you want an example of (omit for the index).",
            "maxLength": 256,
            "type": "string"
          }
        },
        "type": "object"
      },
      "name": "nifra_example"
    },
    {
      "description": "Diagnose a client-side Nifra problem by symptom across every adapter (React, Preact, Solid, Vue, Svelte, and vanilla). Returns the likely cause, a concrete fix, and how to verify it. Covers the Nifra server/client seam, hydration mismatches, duplicated framework runtimes, loader-data typing, and adapter-specific reactivity guidance. Call with no args for the index; pass `symptom` (e.g. \"hydration mismatch\", \"value stopped updating\") and/or `adapter` to filter.",
      "inputSchema": {
        "additionalProperties": false,
        "properties": {
          "adapter": {
            "description": "Filter to one adapter's entries (plus the adapter-independent seam entries).",
            "enum": [
              "react",
              "preact",
              "solid",
              "vue",
              "svelte",
              "vanilla"
            ],
            "type": "string"
          },
          "limit": {
            "description": "Max entries to return (default 3, max 5).",
            "type": "number"
          },
          "symptom": {
            "description": "What you observe (omit for the index).",
            "maxLength": 256,
            "type": "string"
          }
        },
        "type": "object"
      },
      "name": "nifra_frontend"
    },
    {
      "description": "Open an interactive, filterable gallery of ALL of nifra's verified code examples (MCP Apps widget) - for browsing and discovering what exists. NOT for fetching one snippet as text: use nifra_example for that. Pass query to pre-filter; the widget also filters client-side.",
      "inputSchema": {
        "additionalProperties": false,
        "properties": {
          "query": {
            "description": "Pre-filter examples by keyword.",
            "type": "string"
          }
        },
        "type": "object"
      },
      "name": "nifra_gallery"
    },
    {
      "description": "Walk the guided path to build a nifra app end to end - an ORDERED sequence (create → page route → loader → typed API → typed client → auth → background jobs → deploy), not the random-access search of nifra_docs/nifra_example. Call with no args for the step index; pass `step: N` for that step's goal, how to do it (which tool emits the correct artifact), and how to verify it. Use it when scaffolding a new app or learning nifra's flow - each step composes the other nifra_* tools.",
      "inputSchema": {
        "additionalProperties": false,
        "properties": {
          "step": {
            "description": "1-based step number to expand (omit for the index).",
            "type": "number"
          }
        },
        "type": "object"
      },
      "name": "nifra_learn"
    },
    {
      "description": "Explain a behavior that differs between Bun, Node, Deno and Cloudflare Workers by symptom. These are runtime behaviors, not Nifra's: request-target and Host handling, pipelining, JSON content-type, engine error messages, recursion depth, .env loading, and runtime-specific APIs. Returns what each runtime does, the fix (and the Nifra option that decides it when there is one), how to verify it, and the versions it was measured on. Call with no args for the index; pass `symptom` (e.g. \"path guard skipped\", \"env var undefined\") and/or `runtime` to filter.",
      "inputSchema": {
        "additionalProperties": false,
        "properties": {
          "limit": {
            "description": "Max entries to return (default 3, max 5).",
            "type": "number"
          },
          "runtime": {
            "description": "Filter to one runtime's entries.",
            "enum": [
              "bun",
              "node",
              "deno",
              "workerd"
            ],
            "type": "string"
          },
          "symptom": {
            "description": "What you observe (omit for the index).",
            "maxLength": 256,
            "type": "string"
          }
        },
        "type": "object"
      },
      "name": "nifra_runtime"
    },
    {
      "description": "Get the exact TypeScript declaration of any exported @nifrajs/* symbol - interface, type, class, function, or const. Each signature is generated from the package's built .d.ts and returns the complete declaration rather than prose. Pass `name` for an exact symbol (e.g. \"RateLimitStore\", \"RouteSchema\", \"Context\", \"rateLimit\"); pass `query` to search by keyword; omit both for the per-package index of names. A `name` lookup is always the complete declaration; a `query` returns a one-line summary plus the signature, collapsing an oversized body - pass `full: true` to override.",
      "inputSchema": {
        "additionalProperties": false,
        "properties": {
          "full": {
            "description": "Query mode only: return whole declarations instead of collapsed ones. Off by default - a search is for picking a symbol, and one match can be tens of thousands of characters.",
            "type": "boolean"
          },
          "limit": {
            "description": "Max results for a query/search (default 5, max 8).",
            "type": "number"
          },
          "name": {
            "description": "Exact symbol name - returns its literal declaration (e.g. RateLimitStore).",
            "type": "string"
          },
          "query": {
            "description": "Keyword search over names + signatures (when you don't know the exact name).",
            "maxLength": 256,
            "type": "string"
          }
        },
        "type": "object"
      },
      "name": "nifra_types"
    }
  ]
}

What the leaf hashes

{"body":"477e8290c1b087c9d03209ff8416505309821e0087b1807b1d531b5b797df26e","id":2518832,"kind":"mcp.tools","method":"probe.mcp/1","observed_us":1793678243650289,"prev":264725,"subject":"1e8a73ee-fc0b-4372-8d42-577d1c28e572","subject_kind":"endpoint"}

Proof

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

  1. 0xbf0c226e7392435dd003a8a5d447fd894a66404f6da72d969ea9508ddedad5bf
  2. 0xe61fa14a932a84756b2c1c9ac05ae3ef19d0fea47ca71ed1339ab90fc1014375
  3. 0x6f5c63ff2d6e23a4482dfdc7f31259244a0c7c49b254a830a6974d2c47ac42c4
  4. 0x10532341faf900e73dcdeff6b80d8bd73d6cdf7742f23c51c67da929ed41f035
  5. 0x9fa86ec8b402838828c99b0ba0fd37fec2c8344bb218e22ce66ee727d9b7ef28
  6. 0xef8b2ec5750aa8846d1f54bc400c7424932b591b7566c1037d02890597e1f1cf
  7. 0x27493bca0f141c31b46bc6968349c9a91f3e3dba09d3b8115f79783903c2e094
  8. 0xc4a64138acad9cda4576bfe5c4dfa127df1b5839b57e46811ac50b566c280b14
  9. 0xb5088173816ae9ee45322a24e117de27f08b44ecc353677e87d7befb760fa969
  10. 0xe2e47b338021f1697df3ba076a3ae024c89b207d54b84ab596dfe5e3676d4075
  11. 0x127b0e955e1b470371ee4138616cd5658e0d65c53960e48c283c3be14724edcd
  12. 0x2fe3e767a6f063f1532455519e42e1c3f246e86f332f9400b049370483ce0f55
  13. 0x7e57bf3ad9e8414c054c7472c2f2892726935ecc1f17cf00d0654a401e9650da
  14. 0xe48dd050d36f1a75a7d005677c3e962435e7b5ad246de637e9e1fc9be7665b0a
  15. 0xfeca812d56a4bb476433459149c92fcd8a270bdbf2bbbce1949fb4bf7848f5ed
  16. 0xf8c1a0cdf4ba2eb105bc3e83d2f2b121cab4a34fb5a3846fa592909906f7fdaa
  17. 0x39dab39081985bbfffe23b080399a9d1a9cb9c2c8960102350c4212113cb2cba
  18. 0xac5402954216dc6c7020a6405675c8fc3b0828c2ab02943d80de52677a2f1fc3
  19. 0x85f3a27c16056a361d9ba33355a575ca7123f86de901b204c88953c4b8ea441a
Day root
0xb646ffa569e24bf8336b0a15a9d98d0a2f1239f58e10c2b18a9d22e43343566a
Chained
0x35e926359fd19031c6b5e08fb3b44f2524386a57c8fdd353336c185603f53d43
Published
On Arc Testnet, block 70601990: 0xa5f9dadba13cde129126b950e64b815e6833cb8ff53b75026c9dbe769c3768c7

How to check it · This row as JSON