addrbookFor publishers
← The evidence ledger

Evidence row 571962

Observed , by probe.mcp/1.

Kind
mcp.tools
About
endpoint 864297ee-8d48-4d55-8bac-cdeb6141a0ad
Recorded
Previous row
None: the first of its kind about this subject
Body SHA-256
b5533c8316cdc6c0d2582bfb395cecd5d694466fc1945eda6937637ba15a71d3
Leaf
0xe42012744931d4b6091dc44f80912bdb74e104bc6cf21ec4e48800b7fc46ef50

What was observed

{
  "count": 12,
  "tools": [
    {
      "description": "Get the compact briefing an agent should read before editing this repository: index status, verified commands, agent tips, top conventions, open documentation gaps, and queued documentation opportunities. Read-only; no side effects. Returns a single Markdown document. Call this first at the start of a task; once you know which files you'll change, follow up with get_doc_impact for path-scoped guidance.",
      "inputSchema": {
        "properties": {
          "repository": {
            "description": "The target repository as \"owner/name\" (e.g. \"acme/app\"). Always pass this unless your token is scoped to a single repository. Matching is case-insensitive. If omitted when the token serves multiple repos, the call returns the list of repositories to choose from instead of an answer.",
            "type": "string"
          }
        },
        "type": "object"
      },
      "name": "moxie.get_ai_context"
    },
    {
      "description": "Given file paths an agent is about to touch, return structured context for any API endpoints they map to: method, path, request/response schema, and known consumers/features. Read-only; no side effects. Call this before editing API route or schema code, alongside get_doc_impact.",
      "inputSchema": {
        "properties": {
          "paths": {
            "description": "Repository-relative file paths to inspect for API endpoint context.",
            "items": {
              "type": "string"
            },
            "type": "array"
          },
          "repository": {
            "description": "The target repository as \"owner/name\" (e.g. \"acme/app\"). Always pass this unless your token is scoped to a single repository. Matching is case-insensitive. If omitted when the token serves multiple repos, the call returns the list of repositories to choose from instead of an answer.",
            "type": "string"
          }
        },
        "type": "object"
      },
      "name": "moxie.get_api_context"
    },
    {
      "description": "Get the coding conventions Moxie Docs inferred for the repository. Read-only; no side effects. Returns a Markdown list grouped by category (e.g. testing, structure, docs, review); each convention has a title, summary, confidence score, agent guidance, and the source file paths that evidence it. Use this for the general rules to follow; when you already know the files you're about to edit, prefer moxie.get_doc_impact for conventions scoped to those paths.",
      "inputSchema": {
        "properties": {
          "category": {
            "description": "Optional category filter, such as testing, structure, docs, or review.",
            "type": "string"
          },
          "repository": {
            "description": "The target repository as \"owner/name\" (e.g. \"acme/app\"). Always pass this unless your token is scoped to a single repository. Matching is case-insensitive. If omitted when the token serves multiple repos, the call returns the list of repositories to choose from instead of an answer.",
            "type": "string"
          }
        },
        "type": "object"
      },
      "name": "moxie.get_conventions"
    },
    {
      "description": "List the unresolved documentation gaps Moxie Docs found - areas of the codebase that lack docs. Read-only; no side effects. Returns a Markdown list, each gap with a title, severity, summary, and suggested file paths. This is gaps only; for the full prioritized work queue that also includes drift repairs and PR-template work, use get_documentation_opportunities, and to scope gaps to files you're about to edit use get_doc_impact.",
      "inputSchema": {
        "properties": {
          "repository": {
            "description": "The target repository as \"owner/name\" (e.g. \"acme/app\"). Always pass this unless your token is scoped to a single repository. Matching is case-insensitive. If omitted when the token serves multiple repos, the call returns the list of repositories to choose from instead of an answer.",
            "type": "string"
          },
          "severity": {
            "description": "Optional severity filter: high, medium, low, or info.",
            "type": "string"
          }
        },
        "type": "object"
      },
      "name": "moxie.get_doc_gaps"
    },
    {
      "description": "Given the file paths an agent is about to change (and optionally a subset being deleted), return the conventions, documentation gaps, and existing/related docs whose evidence overlaps those paths, plus a net-new/undocumented analysis and any removal candidates. Read-only; no side effects. Returns a Markdown report. Call this BEFORE writing code so doc updates land in the same PR; then use propose_doc_update to write a doc, or propose_doc_removal for an orphaned one.",
      "inputSchema": {
        "properties": {
          "changedPaths": {
            "description": "Repository-relative file paths the agent intends to modify (e.g., apps/web/src/app/api/billing/webhook/route.ts).",
            "items": {
              "type": "string"
            },
            "type": "array"
          },
          "deletedPaths": {
            "description": "Subset of paths that are being DELETED. Moxie Docs flags any doc whose every cited source path is in this list as a removal candidate for moxie.propose_doc_removal.",
            "items": {
              "type": "string"
            },
            "type": "array"
          },
          "repository": {
            "description": "The target repository as \"owner/name\" (e.g. \"acme/app\"). Always pass this unless your token is scoped to a single repository. Matching is case-insensitive. If omitted when the token serves multiple repos, the call returns the list of repositories to choose from instead of an answer.",
            "type": "string"
          }
        },
        "required": [
          "changedPaths"
        ],
        "type": "object"
      },
      "name": "moxie.get_doc_impact"
    },
    {
      "description": "List the actionable documentation updates Moxie Docs recommends as a prioritized queue: missing docs, drift repairs, and PR-template work. Read-only; no side effects. Returns a Markdown list, each opportunity with a title, kind (documentation_gap | documentation_drift | pr_template), severity, summary, suggested action, estimated files changed, and source paths. Use this to pick the next doc task; it is the superset of get_doc_gaps (which lists gaps only).",
      "inputSchema": {
        "properties": {
          "kind": {
            "description": "Optional kind filter: documentation_gap, documentation_drift, or pr_template.",
            "type": "string"
          },
          "repository": {
            "description": "The target repository as \"owner/name\" (e.g. \"acme/app\"). Always pass this unless your token is scoped to a single repository. Matching is case-insensitive. If omitted when the token serves multiple repos, the call returns the list of repositories to choose from instead of an answer.",
            "type": "string"
          },
          "severity": {
            "description": "Optional severity filter: high, medium, low, or info.",
            "type": "string"
          }
        },
        "type": "object"
      },
      "name": "moxie.get_documentation_opportunities"
    },
    {
      "description": "Get Moxie Docs' summary of how THIS repository organizes and maintains documentation - where docs live relative to code and how they are kept current. Read-only; no side effects. Returns a Markdown list of pattern entries, each with a title, explanation, and source citations. Use this to decide WHERE a new doc should go before calling propose_doc_update; for the list of WHICH docs need work, use get_documentation_opportunities instead.",
      "inputSchema": {
        "properties": {
          "repository": {
            "description": "The target repository as \"owner/name\" (e.g. \"acme/app\"). Always pass this unless your token is scoped to a single repository. Matching is case-insensitive. If omitted when the token serves multiple repos, the call returns the list of repositories to choose from instead of an answer.",
            "type": "string"
          }
        },
        "type": "object"
      },
      "name": "moxie.get_documentation_patterns"
    },
    {
      "description": "List the repository's generated documentation as a browsable table of contents - every doc page, not a query-filtered subset. Read-only; no side effects. Returns Markdown grouped by section, each entry with its title, slug, repository path, and source paths, plus the total count and a pagination cursor so you can tell whether more pages remain (no silent truncation). Use this to see what docs already exist before adding one (so you don't duplicate) or to find the slug to pass to propose_doc_update; when you are hunting for a specific topic, search_docs is more direct.",
      "inputSchema": {
        "properties": {
          "limit": {
            "description": "Maximum docs to return (1-200, default 50).",
            "type": "number"
          },
          "offset": {
            "description": "Number of docs to skip for pagination (default 0). Use the cursor in the response to fetch the next page.",
            "type": "number"
          },
          "repository": {
            "description": "The target repository as \"owner/name\" (e.g. \"acme/app\"). Always pass this unless your token is scoped to a single repository. Matching is case-insensitive. If omitted when the token serves multiple repos, the call returns the list of repositories to choose from instead of an answer.",
            "type": "string"
          },
          "section": {
            "description": "Optional section/collection filter (case-insensitive substring), e.g. \"Backend\" or \"Billing\". Omit to list every section.",
            "type": "string"
          }
        },
        "type": "object"
      },
      "name": "moxie.list_docs"
    },
    {
      "description": "Propose deleting a Moxie Docs-tracked documentation file that your change makes irrelevant, as part of YOUR current change. Moxie Docs validates the path and returns it for you to delete in your working branch; Moxie Docs itself does not delete files or open a PR - the deletion happens in your branch, so it lands in the SAME PR as the code. Returns the resolved path to delete. Provide either slug or targetPath.",
      "inputSchema": {
        "properties": {
          "reason": {
            "description": "Why this doc is no longer relevant.",
            "type": "string"
          },
          "removedSourcePaths": {
            "description": "Code paths being deleted that made this doc irrelevant, for provenance.",
            "items": {
              "type": "string"
            },
            "type": "array"
          },
          "repository": {
            "description": "The target repository as \"owner/name\" (e.g. \"acme/app\"). Always pass this unless your token is scoped to a single repository. Matching is case-insensitive. If omitted when the token serves multiple repos, the call returns the list of repositories to choose from instead of an answer.",
            "type": "string"
          },
          "slug": {
            "description": "Slug of the existing generated doc to remove.",
            "type": "string"
          },
          "targetPath": {
            "description": "Repository-relative path of the doc to remove (must be a Moxie Docs-tracked doc). Use instead of slug.",
            "type": "string"
          }
        },
        "type": "object"
      },
      "name": "moxie.propose_doc_removal"
    },
    {
      "description": "Propose a documentation file to add or update as part of YOUR current change. Records a new proposal each call (not idempotent) and does NOT modify your repository or open a PR - Moxie Docs resolves the target path and returns the path + Markdown for YOU to write into your working branch, so the docs land in the SAME PR as the code. Returns the resolved target path and the content to write. Provide either targetPath or baseSlug.",
      "inputSchema": {
        "properties": {
          "baseSlug": {
            "description": "Slug of an existing generated doc to update instead of supplying targetPath.",
            "type": "string"
          },
          "markdown": {
            "description": "The documentation content (Markdown) to write to the target file.",
            "type": "string"
          },
          "reason": {
            "description": "Why this doc is being added or changed.",
            "type": "string"
          },
          "repository": {
            "description": "The target repository as \"owner/name\" (e.g. \"acme/app\"). Always pass this unless your token is scoped to a single repository. Matching is case-insensitive. If omitted when the token serves multiple repos, the call returns the list of repositories to choose from instead of an answer.",
            "type": "string"
          },
          "sourcePaths": {
            "description": "Code paths this doc documents, for provenance.",
            "items": {
              "type": "string"
            },
            "type": "array"
          },
          "targetPath": {
            "description": "Repository-relative path to write the doc to (e.g., docs/billing.md). Omit to resolve from baseSlug.",
            "type": "string"
          },
          "title": {
            "description": "Short human title for the documentation update.",
            "type": "string"
          }
        },
        "required": [
          "title",
          "markdown"
        ],
        "type": "object"
      },
      "name": "moxie.propose_doc_update"
    },
    {
      "description": "Self-review a change you are about to commit BEFORE opening the PR. Pass the proposed new state of each changed file (and any deleted paths); Moxie Docs returns a severity-ranked list of violations to fix: convention breaches, docs your change makes factually false, net-new API/surface added without docs, and doc references broken by deletions. Read-only; no side effects and no writes. Returns a Markdown verdict (clean | warnings | must-fix) with each finding's location, fix, and - for doc issues - the slug to pass to propose_doc_update. Call this as the final step of the edit flow, then fix findings and re-run.",
      "inputSchema": {
        "properties": {
          "changedFiles": {
            "description": "The files your change adds or modifies, in their PROPOSED new state. Provide newContent (the full new file text) for each; you may also/instead provide patch (a unified diff). Max 20 files per call.",
            "items": {
              "properties": {
                "newContent": {
                  "description": "The full new contents of the file after your change.",
                  "type": "string"
                },
                "patch": {
                  "description": "Optional unified diff for the file (used if newContent is omitted).",
                  "type": "string"
                },
                "path": {
                  "description": "Repository-relative path, e.g. apps/web/src/app/api/foo/route.ts.",
                  "type": "string"
                },
                "status": {
                  "description": "Either \"added\" or \"modified\".",
                  "type": "string"
                }
              },
              "required": [
                "path"
              ],
              "type": "object"
            },
            "type": "array"
          },
          "deletedPaths": {
            "description": "Repository-relative paths your change DELETES, so Moxie Docs can flag docs whose references break.",
            "items": {
              "type": "string"
            },
            "type": "array"
          },
          "repository": {
            "description": "The target repository as \"owner/name\" (e.g. \"acme/app\"). Always pass this unless your token is scoped to a single repository. Matching is case-insensitive. If omitted when the token serves multiple repos, the call returns the list of repositories to choose from instead of an answer.",
            "type": "string"
          }
        },
        "required": [
          "changedFiles"
        ],
        "type": "object"
      },
      "name": "moxie.review_change"
    },
    {
      "description": "Keyword and semantic search across the connected repository's generated docs, conventions, documentation gaps, AI-context notes, and indexed code. Read-only; no side effects. Returns ranked matches in Markdown grouped into Documentation and Code sections, each with a title, snippet, and source paths. Use for open-ended lookups when you don't know which category holds the answer; when you do, the specific getters (get_conventions, get_doc_gaps, get_documentation_opportunities) are more direct. Omitting query returns recent context instead.",
      "inputSchema": {
        "properties": {
          "limit": {
            "description": "Maximum matches to return (1-20, default 8).",
            "type": "number"
          },
          "query": {
            "description": "Search phrase or topic. Omit to return recent context for the repository.",
            "type": "string"
          },
          "repository": {
            "description": "The target repository as \"owner/name\" (e.g. \"acme/app\"). Always pass this unless your token is scoped to a single repository. Matching is case-insensitive. If omitted when the token serves multiple repos, the call returns the list of repositories to choose from instead of an answer.",
            "type": "string"
          }
        },
        "type": "object"
      },
      "name": "moxie.search_docs"
    }
  ]
}

What the leaf hashes

{"body":"b5533c8316cdc6c0d2582bfb395cecd5d694466fc1945eda6937637ba15a71d3","id":571962,"kind":"mcp.tools","method":"probe.mcp/1","observed_us":1793140514326494,"prev":null,"subject":"864297ee-8d48-4d55-8bac-cdeb6141a0ad","subject_kind":"endpoint"}

Proof

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

  1. 0xe41fbd6b5eeff7a106c43da2ca79d18bbffae2a2a428f6963387634ae60aa703
  2. 0x1fdf4e0710867b02e97bc066935bf6effbe7376680b1e1ad8ad1b052960a951c
  3. 0x2ba48038b7d561b3233c6f2029dadbb1ebc8d07c2f71190112577171ab938137
  4. 0x1ae65513d7fb7c32599b1b6d5c632aafdcd23a8fdee3e830427f3c43cd062309
  5. 0x934a46da94d0b39e61b847436c7bededf72c7c98de7e19d1ad541a1a8db7713d
  6. 0x6efb17ffe74e86ee9b05953cf4b2543dceb0ab1aef2245f96ddf278edfd2a397
  7. 0x33098ee242b7530f2eb2a87092c3ab80bffff676376fdf3d1307bb4780494755
  8. 0x8fa0873b5ebf1130415b4fd8c7733eead7235b0db48bc0e373e25f413228d47d
  9. 0x02dbd3b6b750c0e302f5d258078c4151b32606225b6e6112a4d1d4276072996f
  10. 0xcc19c30edda43ff1ebcc1026e0d7a666807e4babbafb9a15e178b7bd8bf27788
  11. 0xb44c2942ddb3464f2b2c770afdcadc509526756e35fc6b54cbe05f81f7639529
  12. 0x46ff3840378aba3ab5311ff9a58e7269ceff45cbef540c18a2bad9af3d6127bb
  13. 0xd98ea318b514153f74841c90aff18a807e61314ec99610bf3bdbb7219da01cbd
  14. 0xf72dee7a0c7534cb19ede4959b957b00c0a8285c36ad49dd2ce1c1092bf60d93
  15. 0x24e3e2bb8ee1e8d20756de35f0e0c4ec8eb1f193bd2cf3f077ee1f92f211c34d
  16. 0x8745bd887f5ce9f7a49558fd2b04cdcd97a05ea9f8a23f62d0e80cb13d328b0f
  17. 0xdf1105afdc109de3c09a98fc8a3864159ad964e6f49b635c105a27a1e1f14310
  18. 0x2bf8151e5f157dd183b9de6fa00469551932a7a6e3f33a694895000ac9061197
  19. 0x9fc354c0ea3efc3f1b6548bb77ea902a50f2c9647647ea61592efce2bd795699
Day root
0xdd77e5e99da32c3f154180d63e3c3e6fe11e896a2c6896412ef6b5c4bcf7e795
Chained
0x23bb4dfd09f55c15ac3962f53578e02c6114d5bfd9bb451cf8794fb6e2817ef4
Published
On Arc Testnet, block 69414147: 0xb2ebd83aafeb765a0ce66e76aefb133ed06606c98038fd56191e2bcd1dcb77b4

How to check it · This row as JSON