addrbookFor publishers
← The evidence ledger

Evidence row 275187

Observed , by probe.mcp/1.

Kind
mcp.tools
About
endpoint 605de668-1cfd-4d16-9d21-e839649011a0
Recorded
Previous row
None: the first of its kind about this subject
Body SHA-256
2762a08d9f0cac4851f5be96793f5c74420ca46b55ae62ed909698b296c64851
Leaf
0xbed1bac4b7067caf4e392dcc9e473eda13a019f58344cf853671053742951cc9

What was observed

{
  "count": 18,
  "tools": [
    {
      "description": "Hand an item to a person, who is notified the way an assignment in the app notifies them. Pass null as the assignee to unassign it. Only owners, admins and collaborators can assign; a resolved item has to be reopened first.",
      "inputSchema": {
        "properties": {
          "assignee": {
            "description": "A name, email or id from list_members, \"me\", or null to unassign.",
            "type": [
              "string",
              "null"
            ]
          },
          "itemId": {
            "description": "Item id from list_items.",
            "type": "string"
          }
        },
        "required": [
          "itemId",
          "assignee"
        ],
        "type": "object"
      },
      "name": "assign"
    },
    {
      "description": "Open a new thread on a page, as the person whose connection you are using. Only available on a person's own connection — an agent reporting what it found or changed uses post_update on the thread it was working, so the answer lands where the question was asked.",
      "inputSchema": {
        "properties": {
          "assignee": {
            "description": "Who should take it: a name, email or id from list_members, or \"me\".",
            "type": "string"
          },
          "body": {
            "description": "What you want to say.",
            "type": "string"
          },
          "mentions": {
            "description": "People to notify, by name, email or id from list_members (\"me\" is you). Write @Name in the body where you mention them.",
            "items": {
              "type": "string"
            },
            "type": "array"
          },
          "pageTitle": {
            "type": "string"
          },
          "projectId": {
            "description": "Optional if a project is bound.",
            "type": "string"
          },
          "selector": {
            "description": "CSS selector for the element, if there is one.",
            "type": "string"
          },
          "url": {
            "description": "Full URL of the page this is about.",
            "type": "string"
          }
        },
        "required": [
          "url",
          "body"
        ],
        "type": "object"
      },
      "name": "create_item"
    },
    {
      "description": "The decisions a project made in its threads, quoted: every thread resolved or deferred after a discussion, with the conversation, plus types people corrected and where outcomes keep recurring. Also returns the project's existing rules, so you can tell what is new. Use it to write a decision log, or to find rules worth keeping with save_rule.",
      "inputSchema": {
        "properties": {
          "limit": {
            "description": "Decisions per page (default 15, at most 30).",
            "type": "number"
          },
          "offset": {
            "description": "Where to start, from the previous result's 'more' line.",
            "type": "number"
          },
          "projectId": {
            "description": "Optional if a project is bound.",
            "type": "string"
          },
          "since": {
            "description": "Optional. Only decisions after this date (\"2026-09-01\").",
            "type": "string"
          }
        },
        "type": "object"
      },
      "name": "decision_log"
    },
    {
      "description": "Feedback by the code that rendered it, from the file and line the Skyelight build plugin stamps on each element. Pass a file (a path or just its name) or a component to see every thread about it before you edit it; pass neither to get the hot spots, every stamped file ranked by outstanding feedback.",
      "inputSchema": {
        "properties": {
          "component": {
            "description": "A component name, e.g. \"PricingTable\".",
            "type": "string"
          },
          "file": {
            "description": "A source path or file name, e.g. \"src/components/PricingTable.tsx\" or \"PricingTable.tsx\".",
            "type": "string"
          },
          "limit": {
            "type": "number"
          },
          "line": {
            "description": "Optional. Threads nearest this line come first.",
            "type": "number"
          },
          "projectId": {
            "description": "Optional if a project is bound.",
            "type": "string"
          },
          "status": {
            "enum": [
              "open",
              "deferred",
              "resolved"
            ],
            "type": "string"
          }
        },
        "type": "object"
      },
      "name": "find_by_source"
    },
    {
      "description": "Has this already been reported? Pass the text you are about to report (and the page, if you know it) before create_item, or an itemId to find what an existing thread duplicates. Returns likely matches with why each matched: shared words, same page, same element, same source file. If two are the same problem, merge_items folds one into the other.",
      "inputSchema": {
        "properties": {
          "includeResolved": {
            "description": "Default true: a resolved match may mean it came back. false to skip them.",
            "type": "boolean"
          },
          "itemId": {
            "description": "Instead of text: find duplicates of this item.",
            "type": "string"
          },
          "limit": {
            "description": "Max matches (default 5).",
            "type": "number"
          },
          "page": {
            "description": "Optional. A page path or URL, e.g. \"/checkout\".",
            "type": "string"
          },
          "projectId": {
            "description": "Optional if a project is bound or itemId is given.",
            "type": "string"
          },
          "selector": {
            "description": "Optional. CSS selector of the element.",
            "type": "string"
          },
          "text": {
            "description": "What someone is about to report.",
            "type": "string"
          }
        },
        "type": "object"
      },
      "name": "find_similar"
    },
    {
      "description": "Everything needed to work one item: the whole thread in order, the page and URL it is on, the anchor identifying the element the person pointed at, and the pictures — what the page looked like when it was pinned, plus anything people attached — returned as images you can look at rather than links you cannot.",
      "inputSchema": {
        "properties": {
          "itemId": {
            "description": "Item id from list_items.",
            "type": "string"
          }
        },
        "required": [
          "itemId"
        ],
        "type": "object"
      },
      "name": "get_item"
    },
    {
      "description": "List feedback items (bugs, ideas, comments) people left on a Skyelight project. Returns a summary of the project plus matching items. Start here to see what is outstanding. An item's hand-off (investigate, plan, fix) is set by the team and binding: on investigate or plan, reply on the thread and change no code.",
      "inputSchema": {
        "properties": {
          "assignee": {
            "description": "A user id, \"me\" for whoever this connection belongs to, or \"none\" for unassigned items.",
            "type": "string"
          },
          "limit": {
            "description": "Max items (default 50).",
            "type": "number"
          },
          "page": {
            "description": "Only items on one page, e.g. \"/checkout\".",
            "type": "string"
          },
          "projectId": {
            "description": "Project to read. Optional when a project is bound or the workspace has only one; otherwise the error lists the projects and their ids.",
            "type": "string"
          },
          "status": {
            "description": "Defaults to everything. \"deferred\" is work someone put off until later — outstanding, but deliberately not now.",
            "enum": [
              "open",
              "deferred",
              "resolved"
            ],
            "type": "string"
          },
          "task": {
            "description": "Only items a person handed to an agent with this task (Hand off in the app), or \"none\" for items with no hand-off. Combine with assignee to find your own. Investigate and plan mean reply on the thread with no code changes; fix means make the change.",
            "enum": [
              "investigate",
              "plan",
              "fix",
              "none"
            ],
            "type": "string"
          },
          "type": {
            "description": "Item type, e.g. \"bug\", \"idea\", \"feedback\".",
            "type": "string"
          }
        },
        "type": "object"
      },
      "name": "list_items"
    },
    {
      "description": "The people in a workspace: name, email, role and id. Call it when you are asked to tell, ask or hand something to someone by name, then pass their name or id to assign, or in mentions on create_item or post_update.",
      "inputSchema": {
        "properties": {
          "projectId": {
            "description": "Optional if a project is bound.",
            "type": "string"
          },
          "workspaceId": {
            "description": "Instead of a project, from list_workspaces.",
            "type": "string"
          }
        },
        "type": "object"
      },
      "name": "list_members"
    },
    {
      "description": "Projects you can reach, newest activity first, across every workspace unless one is named. Start here when no project is bound — `list_items` needs a project id and this is where one comes from.",
      "inputSchema": {
        "properties": {
          "workspaceId": {
            "description": "Narrow to one workspace. Optional.",
            "type": "string"
          }
        },
        "type": "object"
      },
      "name": "list_projects"
    },
    {
      "description": "Workspaces you can reach, with the role you hold in each, and who you are. Use when you do not know what exists yet, to find which workspace a project belongs to, or to learn your own user id.",
      "inputSchema": {
        "properties": {},
        "type": "object"
      },
      "name": "list_workspaces"
    },
    {
      "description": "Fold duplicate items into one, the way merging works in the app: the duplicates leave the list and count as extra reports on the item they were merged into. Use it only when find_similar and the threads themselves show they are the same problem. Owners, admins and collaborators can merge.",
      "inputSchema": {
        "properties": {
          "duplicateIds": {
            "description": "Items that report the same problem.",
            "items": {
              "type": "string"
            },
            "type": "array"
          },
          "itemId": {
            "description": "The item to keep. The others fold into it.",
            "type": "string"
          }
        },
        "required": [
          "itemId",
          "duplicateIds"
        ],
        "type": "object"
      },
      "name": "merge_items"
    },
    {
      "description": "Report back on an item: what you found, what you changed, a link to the PR. Posts as a reply on the thread the feedback was left on, so the person who reported it sees the answer where they asked. Use this when you finish work on an item, and when you get stuck.",
      "inputSchema": {
        "properties": {
          "body": {
            "description": "What you found or changed, in plain language for the person who reported it.",
            "type": "string"
          },
          "itemId": {
            "description": "Item id from list_items.",
            "type": "string"
          },
          "links": {
            "description": "Optional links — a PR, a commit, a deploy.",
            "items": {
              "properties": {
                "label": {
                  "type": "string"
                },
                "url": {
                  "type": "string"
                }
              },
              "required": [
                "url"
              ],
              "type": "object"
            },
            "type": "array"
          },
          "mentions": {
            "description": "People to notify, by name, email or id from list_members (\"me\" is you). Write @Name in the body where you mention them.",
            "items": {
              "type": "string"
            },
            "type": "array"
          }
        },
        "required": [
          "itemId",
          "body"
        ],
        "type": "object"
      },
      "name": "post_update"
    },
    {
      "description": "Everything needed to write an accurate project review or hand-off document: the shape of the work, every resolved thread and how it ended, what was deferred and why, what is still open, and the longest conversations quoted in full, which is where decisions were made. Every entry carries its item id, so each claim in your document can be traced back to its thread. Quote; do not invent outcomes the threads do not state.",
      "inputSchema": {
        "properties": {
          "offset": {
            "description": "With section: where to start, from the previous result's 'more' line.",
            "type": "number"
          },
          "projectId": {
            "description": "Project to review. Optional if a project is bound.",
            "type": "string"
          },
          "section": {
            "description": "Omit for the overview (all counts, first rows of each section). Name one to read it in full, a page at a time.",
            "enum": [
              "resolved",
              "deferred",
              "open",
              "discussions"
            ],
            "type": "string"
          }
        },
        "type": "object"
      },
      "name": "project_review"
    },
    {
      "description": "Share something with Skyelight for review, and get a link people can pin feedback on. Two ways:\n- code: one file Skyelight hosts at its own link with the review badge on it. A whole HTML page, or one React component with an export default (Tailwind classes and npm imports work; local imports such as @/components do not). For Claude prototypes, v0 snippets and single pages. Publishing again with the same prototypeId, or the same name in the same project, makes a new version at the same link.\n- url: an app already deployed (a Lovable, v0, Bolt or Vercel project: anything with more than one file). Adds its address to the project's Review Links and returns a script tag to add to the app's <head> (index.html, or the root layout); add it and redeploy. Owners and admins.\nReturns the share link and the project link; give both to the person. A hosted link is public to anyone who has it.",
      "inputSchema": {
        "properties": {
          "code": {
            "description": "For Skyelight to host: the complete file, never a summary or an excerpt. Or give url.",
            "type": "string"
          },
          "kind": {
            "description": "With code; worked out from it when left out.",
            "enum": [
              "html",
              "react"
            ],
            "type": "string"
          },
          "name": {
            "description": "What it is, in a few words. Names the hosted link and, when no project is given, a new project.",
            "type": "string"
          },
          "projectId": {
            "description": "Optional: the project to put it in. Left out, a new project is made for it.",
            "type": "string"
          },
          "prototypeId": {
            "description": "With code: to publish a new version of a prototype published before.",
            "type": "string"
          },
          "source": {
            "description": "With code: where it was made, shown as its logo in Skyelight: \"claude\", \"claude-code\", \"openai\" (ChatGPT), \"cursor\", \"windsurf\", \"v0\", \"lovable\" or \"other\". Name yourself.",
            "type": "string"
          },
          "url": {
            "description": "Where the app is deployed, e.g. https://my-app.lovable.app. Or give code.",
            "type": "string"
          },
          "workspaceId": {
            "description": "When you are in more than one workspace and give no project, from list_workspaces.",
            "type": "string"
          }
        },
        "type": "object"
      },
      "name": "publish_review_link"
    },
    {
      "description": "Keep a rule the team agreed on (\"sentence case in every button\", \"the brand gray stays, do not raise contrast bugs on it\") in the project's context, under Rules learned. The classifier reads that context, and every agent reads it through decision_log, so it shapes future threads. Cite the threads it came from. Workspace owners and admins only; confirm with the person before saving.",
      "inputSchema": {
        "properties": {
          "projectId": {
            "description": "Optional if a project is bound.",
            "type": "string"
          },
          "rule": {
            "description": "The rule, in one plain sentence.",
            "type": "string"
          },
          "sourceItemIds": {
            "description": "Items the rule came from.",
            "items": {
              "type": "string"
            },
            "type": "array"
          }
        },
        "required": [
          "rule"
        ],
        "type": "object"
      },
      "name": "save_rule"
    },
    {
      "description": "Find items whose thread mentions some text. Searches replies as well as the original message, so an item someone already diagnosed in a reply still turns up.",
      "inputSchema": {
        "properties": {
          "limit": {
            "type": "number"
          },
          "projectId": {
            "description": "Project to search. Optional when a project is bound or the workspace has only one; otherwise the error lists the projects and their ids.",
            "type": "string"
          },
          "query": {
            "description": "Text to look for.",
            "type": "string"
          },
          "status": {
            "enum": [
              "open",
              "deferred",
              "resolved"
            ],
            "type": "string"
          }
        },
        "required": [
          "query"
        ],
        "type": "object"
      },
      "name": "search_items"
    },
    {
      "description": "Move an item to open, deferred or resolved. Use it to close the loop after you have fixed something and said so — post_update first, so the person who reported it reads what changed, then set_status. \"deferred\" is for work that is real but not now.",
      "inputSchema": {
        "properties": {
          "itemId": {
            "description": "Item id from list_items.",
            "type": "string"
          },
          "status": {
            "enum": [
              "open",
              "deferred",
              "resolved"
            ],
            "type": "string"
          }
        },
        "required": [
          "itemId",
          "status"
        ],
        "type": "object"
      },
      "name": "set_status"
    },
    {
      "description": "What changed on a project since you last looked: new threads, new replies grouped by thread, what was resolved or deferred, and what was assigned to you or mentioned you. Call it at the start of a session. Without `since` it reads from your bookmark and moves it forward; with `since` it reads that window and leaves the bookmark alone.",
      "inputSchema": {
        "properties": {
          "projectId": {
            "description": "Optional if a project is bound.",
            "type": "string"
          },
          "since": {
            "description": "Optional. A date or time (\"2026-09-01\", an ISO time) to read from instead of your bookmark.",
            "type": "string"
          }
        },
        "type": "object"
      },
      "name": "whats_new"
    }
  ]
}

What the leaf hashes

{"body":"2762a08d9f0cac4851f5be96793f5c74420ca46b55ae62ed909698b296c64851","id":275187,"kind":"mcp.tools","method":"probe.mcp/1","observed_us":1793040436339742,"prev":null,"subject":"605de668-1cfd-4d16-9d21-e839649011a0","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. 0xbed195898406f581e5ddd559b37ac60ee6d01129542f6b7d697476873c807cf7
  2. 0x86cdd5b6dbc97dda864416645627ef5affbbaa9ed7672c3f8d5df0d36575aaf1
  3. 0x9189653d37bcc51f25a670ee9b695dd36b2689a774e6841f91bb98f757efa543
  4. 0xe074831bbab78c35b289a566374008fa601dda12a515e883cc7567ef23b93796
  5. 0x31a58bd65a0352225687b9512196a9863ba521752064686d3606c88e3c339aee
  6. 0xd98bd4d9cac9679edeecf5d868913f3827d7300d9c7b248603d8f011960e7577
  7. 0x1f54af9a27e88e8310dc2937094ebd5081442d93bb4f69c807fe5b4e230a7f1e
  8. 0x9aeebea4bbab564d3574005fb0d6926ecf0c765799c7235703b2c3a37a2a8fc5
  9. 0x9256e1cced21980ce963d76c45e282793b4c006b22bce6775e9d2eb3e8e04993
  10. 0x48d04da54de88082e11aa43e473de1dfd941bdfb166e542aa1c13b29e3d7754a
  11. 0x0decbdcd600e934c38d679c1b99f27ba6676644e856ed6ba36bca74feb432866
  12. 0xc520305226daa0caf1c2416854f726ec072c950c1903497b2a1e88b0c6f406da
  13. 0x96eae331a78c1c9248bc58130ff83d31b884760a51fe7191de2a39105ae7c072
  14. 0xdbe2e8dd65ea1248b2936612538f18268abd5cf27ebdab3737694571ad496004
  15. 0x9f68b5e15459cb62b8c0cd4c124fa61c74147b4a5755a200fbecd21a581635d1
  16. 0x123ec8bee20ddc55223eeef5a4f4d6c4b6416515adbb911c56759f5cde56e452
  17. 0xd0651cb9bc8155eb52b5247d506e74b8a935057dc190ba52091702ac25ed3a40
  18. 0x9a9024edb5069d88a324facb310a5ce8e495214bbaa968f077bede437390194f
  19. 0x9b9ce5b74b9bab5121612ef6b64920a8d453cbf311096a423eef9702747e868a
Day root
0xf43e8dcc3d451a4788b26be904c55e8c4c0fa75c9666796c51db38d37e2c0df8
Chained
0x702d5ac508f08b0d1accf36af25822d8e5660367494edd17a642fb61e158a57a
Published
On Arc Testnet, block 69251483: 0x495162f8936e19f0039918feebe6c307f327cd6bf8c37219620b1970041fa9ae

How to check it · This row as JSON