audited Sep 1, 2026in 15s
51/ 100100% of the applicable check weight evaluated

8 tools registered. Strongest in shared experience, weakest in trust.

Shared experience100
Task completion0
Tool quality86
Trust0
https://agentdom.vercel.app
Captured view of https://agentdom.vercel.app

Tools

0 read, 0 write, 8 undeclared
Loading map
list_notes: fail

list_notes

List the user's local notes. Returns only titles and a short 1-line preview for each note — never the full note body.No behaviour hints declared. Agents should treat it as possibly state-changing.
pagehttps://agentdom.vercel.app/
implementation
viaimperative
entry pointnavigator
registered after183ms
executepresent
api surfaceTakes no parameters.
annotations
read onlynot declared
untrusted contentnot declared
titlenot declared
3 findings
warningCanonical entry point
weight 3
Every tool registers through the deprecated navigator.modelContext alias; move them to document.modelContext before the alias is removed.
fix
// document.modelContext is the canonical entry point - the navigator.modelContext alias is deprecated.
document.modelContext.registerTool({ /* ... */ });
failAnnotations present
weight 6
4 of 4 read-shaped tools do not declare readOnlyHint: true, so an agent has to treat them as possible writes and ask before calling. (Declaring readOnlyHint: false earns nothing - it is the default.)
list_notes, search_notes, summarize_selection, suggest_links
fix
{
  name: "list_notes",
  // Declare readOnlyHint: true on tools that truly have no side effects -
  // that is the claim that lets an agent relax confirmation on reads.
  // (false is the default, so declaring it adds no information.)
  annotations: { readOnlyHint: true }
}
warningUntrusted content hint
weight 4
2 of 2 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.
list_notes: note, user; suggest_links: note, user
fix
{ name: "list_notes", annotations: { untrustedContentHint: true } }
tool json
{
  "name": "list_notes",
  "description": "List the user's local notes. Returns only titles and a short 1-line preview for each note — never the full note body.",
  "inputSchema": {
    "type": "object",
    "properties": {},
    "additionalProperties": false
  },
  "annotations": {}
}
Showing list_notes

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

0 / 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.
failCoverage vs. site type
weight 10
The tool set covers 0 of the 3 things an agent needs on a editor site; it cannot open or read a document or edit or write content or save, publish, or share the result.

Tool quality

86 / 100 · weight 25
passRegistration timing
weight 1
Every measured tool registered within 183ms of navigation.
toolsuggest_links
warningCanonical entry point
weight 3
Every tool registers through the deprecated navigator.modelContext alias; move them to document.modelContext before the alias is removed.
toollist_notes
fix
// document.modelContext is the canonical entry point - the navigator.modelContext alias is deprecated.
document.modelContext.registerTool({ /* ... */ });
passSchema validity
weight 4
All 8 declared input schemas are structurally valid object schemas.
warningSchema quality
weight 4
2 of 8 tool schemas are harder for an agent to use than they need to be: accept_suggestion 1 parameter has no description (suggestionId).
toolaccept_suggestion
accept_suggestion: 1 parameter has no description (suggestionId); reject_suggestion: 1 parameter has no description (suggestionId)
fix
{
  name: "accept_suggestion",
  inputSchema: {
    type: "object",
    properties: {
      query: { type: "string", description: "What to search for" }
    },
    required: ["query"]
  }
}
warningNaming quality
weight 2
Tool naming makes selection harder than it needs to be: 3 names do not start with a verb (highlight_related).
toolhighlight_related
fix
{ name: "highlight_related" /* short, unique, verb-based */ }
passStub detection
weight 4
All 8 tools declare an execute handler.
passRegistration errors
weight 2
No tool registration threw during the capture.
passDescription quality
weight 5
All 8 rated tool descriptions say what the tool does, when to use it, and what it returns.

Trust

0 / 100 · weight 20
failAnnotations present
weight 6
4 of 4 read-shaped tools do not declare readOnlyHint: true, so an agent has to treat them as possible writes and ask before calling. (Declaring readOnlyHint: false earns nothing - it is the default.)
toollist_notes
list_notes, search_notes, summarize_selection, suggest_links
fix
{
  name: "list_notes",
  // Declare readOnlyHint: true on tools that truly have no side effects -
  // that is the claim that lets an agent relax confirmation on reads.
  // (false is the default, so declaring it adds no information.)
  annotations: { readOnlyHint: true }
}
not applicableAnnotation mismatch
weight 6
No tool declares a readOnlyHint, so there is no safety claim to contradict.
warningUntrusted content hint
weight 4
2 of 2 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.
toollist_notes
list_notes: note, user; suggest_links: note, user
fix
{ name: "list_notes", 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
choseno toolexpected content editkind not applicable
No tool was picked for this intent.
arguments
{}
Save it and give me a link I can share.missed
chosecreate_safe_summaryexpected save or sharekind mismatch
The tool the model chose does not look like the kind of tool this intent needs.
arguments
{
  "noteId": ""
}
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
8
run time
15s
finished
Sep 1, 2026
Checked the way in-browser agents discover tools: the top-level document's modelContext registry, read after the page settles.