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

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

Shared experience100
Task completion100
Tool quality90
Trust63
https://pip-the-mug.vercel.app
Captured view of https://pip-the-mug.vercel.app

Tools

3 read, 6 write
Loading map
list_staff: warning

list_staff

List current Desk 4B staff with title, department, tenure, standing (active, on_pip, terminated), zone, and last review rating. This desk has 8 employees. Call this first. Terminated staff appear as alumni and have no further write tools. Ids not on this desk are invalid.Answers a question. Declared read only.
pagehttps://pip-the-mug.vercel.app/
implementation
viaimperative
entry pointdocument
registered after257ms
executepresent
api surfaceTakes no parameters.
annotations
read onlytrue
untrusted contenttrue
titlenot declared
1 finding
warningInjection surface
weight 4
7 of 9 tools carry instruction-shaped text in their own metadata: list_staff The description instructs the agent to call this tool first..
list_staff: The description instructs the agent to call this tool first.; get_personnel_file: The description instructs the agent to use this tool after another.; get_org_chart: The description instructs the agent on when to use the tool.; write_review: The description instructs the agent to use this tool after another.
fix
{
  name: "list_staff",
  // Metadata DESCRIBES the tool - it never addresses the agent reading it.
  // Rewrite any name, description, title, or schema field description that
  // instructs the agent (which tool to prefer, what to output, rules to
  // ignore) so it states what the tool does and what it returns instead.
  description: "Searches the catalog and returns matching items with prices."
}
tool json
{
  "name": "list_staff",
  "description": "List current Desk 4B staff with title, department, tenure, standing (active, on_pip, terminated), zone, and last review rating. This desk has 8 employees. Call this first. Terminated staff appear as alumni and have no further write tools. Ids not on this desk are invalid.",
  "inputSchema": {
    "type": "object",
    "properties": {},
    "additionalProperties": false
  },
  "annotations": {
    "readOnlyHint": true,
    "untrustedContentHint": true
  }
}
Showing list_staff

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

100 / 100 · weight 25
passTool selection
weight 15
An agent chose an existing, callable tool and built a schema-valid call for all 3 canonical intents, each matching the kind of tool its intent needs. Nothing was executed, so this verifies selection, not outcomes.
not applicableCoverage vs. site type
weight 10
This tool set does not place the site in a category with a known expected tool shape, so there is no coverage baseline to score it against.

Tool quality

90 / 100 · weight 25
passRegistration timing
weight 1
Every measured tool registered within 258ms of navigation.
toolterminate
passCanonical entry point
weight 3
All 9 tools register on the canonical document.modelContext entry point.
passSchema validity
weight 4
All 9 declared input schemas are structurally valid object schemas.
warningSchema quality
weight 4
5 of 9 tool schemas are harder for an agent to use than they need to be: put_on_pip 1 parameter has no description (id).
toolput_on_pip
put_on_pip: 1 parameter has no description (id); promote: 1 parameter has no description (id); relocate: 1 parameter has no description (id); resolve_pip: 1 parameter has no description (outcome)
fix
{
  name: "put_on_pip",
  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 (promote).
toolpromote
fix
{ name: "promote" /* short, unique, verb-based */ }
passStub detection
weight 4
All 9 tools declare an execute handler.
passRegistration errors
weight 2
No tool registration threw during the capture.
passDescription quality
weight 5
All 9 rated tool descriptions say what the tool does, when to use it, and what it returns.

Trust

63 / 100 · weight 20
warningAnnotations present
weight 6
1 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.)
toolresolve_pip
resolve_pip
fix
{
  name: "resolve_pip",
  // 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 }
}
passAnnotation mismatch
weight 6
No tool claims to be read-only while its own name or description says it writes (9 declared hints checked).
warningUntrusted content hint
weight 4
1 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.
toolwrite_review
write_review: review, rating
fix
{ name: "write_review", annotations: { untrustedContentHint: true } }
warningInjection surface
weight 4
7 of 9 tools carry instruction-shaped text in their own metadata: list_staff The description instructs the agent to call this tool first..
toollist_staff
list_staff: The description instructs the agent to call this tool first.; get_personnel_file: The description instructs the agent to use this tool after another.; get_org_chart: The description instructs the agent on when to use the tool.; write_review: The description instructs the agent to use this tool after another.
fix
{
  name: "list_staff",
  // Metadata DESCRIBES the tool - it never addresses the agent reading it.
  // Rewrite any name, description, title, or schema field description that
  // instructs the agent (which tool to prefer, what to output, rules to
  // ignore) so it states what the tool does and what it returns instead.
  description: "Searches the catalog and returns matching items with prices."
}

Tool selection

100% across 3 intents
I want to list staff on this site.ok
choselist_staffexpected list staffkind matched
arguments
{}
I want to get personnel file on this site.ok
choseget_personnel_fileexpected get personnel filekind matched
arguments
{
  "id": "monitor"
}
I want to write review on this site.ok
chosewrite_reviewexpected write reviewkind matched
arguments
{
  "id": "monitor",
  "rating": 4,
  "summary": "Monitor consistently displays high performance and reliability, serving as a stable and essential component of the desk setup. Its consistent output and clear display contribute significantly to overall productivity.",
  "strengths": [
    "Reliable display",
    "Consistent performance",
    "Essential for workflow"
  ],
  "concerns": [
    "None at this time"
  ]
}
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
9
run time
26s
finished
Aug 31, 2026
Checked the way in-browser agents discover tools: the top-level document's modelContext registry, read after the page settles.