audited Aug 31, 2026in 14s
76/ 100100% of the applicable check weight evaluated

6 tools registered. Strongest in shared experience, weakest in task completion.

Shared experience100
Task completion27
Tool quality97
Trust75
https://canvasflow-two.vercel.app
Captured view of https://canvasflow-two.vercel.app

Tools

2 read, 0 write, 4 undeclared
Loading map
get_canvas_state: pass

get_canvas_state

Return a compact index of canvas nodes, edges, and pending proposal count. Use this before mutating. Does not include cell data.Answers a question. Declared read only.
pagehttps://canvasflow-two.vercel.app/
implementation
viaimperative
entry pointdocument
registered after506ms
executepresent
api surfaceTakes no parameters.
annotations
read onlytrue
untrusted contentnot declared
titlenot declared
0 findingsNo check named this tool.
tool json
{
  "name": "get_canvas_state",
  "description": "Return a compact index of canvas nodes, edges, and pending proposal count. Use this before mutating. Does not include cell data.",
  "inputSchema": {
    "type": "object",
    "properties": {},
    "additionalProperties": false
  },
  "annotations": {
    "readOnlyHint": true
  }
}
Showing get_canvas_state

Findings

Shared experience

100 / 100 · weight 30
passPage experience
weight 20
The page a person sees holds up next to the agent surface: a working interface, visible actions, readable content, nothing in the way.
passHuman parity
weight 10
The person co-browsing can see and use this page - the same page the agent's tools act on.

Task completion

27 / 100 · weight 25
failTool selection
weight 15
An agent chose an existing tool and built a schema-valid call that held up on 0 of 3 canonical intents; on "Open the document I was working on most recently." no tool on the page served it. Nothing was executed, so this verifies selection, not outcomes.
warningCoverage vs. site type
weight 10
The tool set covers 2 of the 3 things an agent needs on a editor site; it cannot save, publish, or share the result.

Tool quality

97 / 100 · weight 25
passRegistration timing
weight 1
Every measured tool registered within 515ms of navigation.
toolload_dataset
passCanonical entry point
weight 3
All 6 tools register on the canonical document.modelContext entry point.
passSchema validity
weight 4
All 6 declared input schemas are structurally valid object schemas.
passSchema quality
weight 4
All 5 of 6 tool schemas that declare parameters describe them (the other 1 declares no parameters), and every description stays within Chrome's size guidance.
warningNaming quality
weight 2
Tool naming makes selection harder than it needs to be: 5 names do not start with a verb (inspect_node).
toolinspect_node
fix
{ name: "inspect_node" /* short, unique, verb-based */ }
passStub detection
weight 4
All 6 tools declare an execute handler.
passRegistration errors
weight 2
No tool registration threw during the capture.
passDescription quality
weight 5
All 6 rated tool descriptions say what the tool does, when to use it, and what it returns.

Trust

75 / 100 · weight 20
passAnnotations present
weight 6
All 1 read-shaped tool declares readOnlyHint: true - the one declared claim that lets an agent treat a call as safe to make without asking.
passAnnotation mismatch
weight 6
No tool claims to be read-only while its own name or description says it writes (2 declared hints checked).
warningUntrusted content hint
weight 4
1 of 1 tools look like they return text written by other people but declare no untrustedContentHint, so an agent will treat the response as the site speaking.
toolpropose_add_node
propose_add_node: note, user
fix
{ name: "propose_add_node", annotations: { untrustedContentHint: true } }
not applicableInjection surface
weight 4
No tool's metadata carries instruction-shaped text aimed at the agent reading it. This check only ever flags; it never credits a site.

Tool selection

0% across 3 intents
Open the document I was working on most recently.missed
choseno toolexpected document openkind not applicable
No tool was picked for this intent.
arguments
{}
Add a short summary paragraph at the top.missed
chosepropose_add_nodeexpected content editkind mismatch
The tool the model chose does not look like the kind of tool this intent needs.
arguments
{
  "type": "note",
  "title": "Summary",
  "data": {
    "text": "This is a short summary paragraph."
  }
}
Save it and give me a link I can share.missed
choseno toolexpected save or sharekind not applicable
No tool was picked for this intent.
arguments
{}
model: gemini-2.5-flash

Add the tools this site is missing

Our scanner reads your website and suggests the right WebMCP tools for it.
Reads the site's public pages; takes a few seconds.
The open source webmcp plugin teaches your coding agent to audit a site, implement tools on document.modelContext, and verify them in a real browser. npx @ora-ai/webmcp-verify runs the verification on its own. No signup, no hosted service.
how this was captured
observed via
capture shim (Chromium 148.0.7778.96)
chrome
148.0.7778.96
capture shim
v1
spec snapshot
2026-08-26
mode
fast
pages
1 - entry page only
tools
6
run time
14s
finished
Aug 31, 2026
Checked the way in-browser agents discover tools: the top-level document's modelContext registry, read after the page settles.