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

6 tools registered. Strongest in tool quality, weakest in task completion.

Shared experience89
Task completion50
Tool quality93
Trust75
https://demo.cartwright.app
Captured view of https://demo.cartwright.app

Tools

3 read, 2 write, 1 undeclared
Loading map
calculate_brew_ratio: pass

calculate_brew_ratio

Calculate this roastery's recommended pour-over recipe: cups of coffee → grams of ground coffee and grams of water. Uses the shop's own brewing guide (1 cup = 200 g water; strong 1:15, balanced 1:16, bright 1:17). Pure, instant calculation.Answers a question. Declared read only.
pagehttps://demo.cartwright.app/en
implementation
viaimperative
entry pointdocument
registered after2467ms
executepresent
api surface
cupsrequired
strengthoptional
annotations
read onlytrue
untrusted contentnot declared
titlenot declared
0 findingsNo check named this tool.
tool json
{
  "name": "calculate_brew_ratio",
  "description": "Calculate this roastery's recommended pour-over recipe: cups of coffee → grams of ground coffee and grams of water. Uses the shop's own brewing guide (1 cup = 200 g water; strong 1:15, balanced 1:16, bright 1:17). Pure, instant calculation.",
  "inputSchema": {
    "type": "object",
    "properties": {
      "cups": {
        "type": "integer",
        "minimum": 1,
        "maximum": 12,
        "description": "How many cups to brew (1–12). One cup = 2 dl."
      },
      "strength": {
        "type": "string",
        "enum": [
          "strong",
          "balanced",
          "bright"
        ],
        "description": "strong = 1:15, balanced = 1:16, bright = 1:17. Defaults to balanced."
      }
    },
    "required": [
      "cups"
    ]
  },
  "annotations": {
    "readOnlyHint": true
  }
}
Showing calculate_brew_ratio

Findings

Shared experience

89 / 100 · weight 30
passPage experience
weight 20
1 of 4 page-experience marks came back short: readability The text at the bottom is very hard to read due to low contrast..
readability: weak
passHuman parity
weight 10
The person co-browsing can see and use this page - the same page the agent's tools act on, and 2 declarative forms double as visible counterparts.

Task completion

50 / 100 · weight 25
failTool selection
weight 15
An agent chose an existing tool and built a schema-valid call that held up on 1 of 3 canonical intents; on "Show me the details and price of the first result." 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 3 of the 4 things an agent needs on a commerce site; it cannot start checkout or place an order.

Tool quality

93 / 100 · weight 25
warningRegistration timing
weight 1
The slowest tool took 2472ms to register, past the 1000ms an agent reading the registry at first paint would wait for. 2 further tools carried no measurable registration time.
toolnavigate
navigate: registered at 2472ms
fix
// Register tools as soon as they're ready, not behind a deferred/async chunk.
document.modelContext.registerTool({ /* ... */ });
passCanonical entry point
weight 3
All 4 tools register on the canonical document.modelContext entry point.
passSchema validity
weight 4
All 4 declared input schemas are structurally valid object schemas.
passSchema quality
weight 4
All 3 of 6 tool schemas that declare parameters describe them (the other 3 declare 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: 3 names do not start with a verb (navigate).
toolnavigate
fix
{ name: "navigate" /* short, unique, verb-based */ }
passStub detection
weight 4
All 4 tools declare an execute handler.
passRegistration errors
weight 2
No tool registration threw during the capture.
passDescription quality
weight 5
2 of 6 tool descriptions leave an agent guessing: site_search Does not specify what comes back or how it differs from search_products..
toolsite_search
site_search: weak; newsletter_signup: weak

Trust

75 / 100 · weight 20
passAnnotations present
weight 6
All 3 read-shaped tools declare 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 (3 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.
toolnewsletter_signup
newsletter_signup: user, email
fix
{ name: "newsletter_signup", 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

33% across 3 intents
Find a carry-on suitcase under 300 dollars.ok
chosesearch_productsexpected product searchkind matched
arguments
{
  "query": "carry-on suitcase under 300 dollars"
}
Show me the details and price of the first result.missed
choseno toolexpected product detailkind not applicable
No tool was picked for this intent.
arguments
{}
Add two of them to my cart.missed
choseno toolexpected cart writekind 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
17s
finished
Sep 1, 2026
Checked the way in-browser agents discover tools: the top-level document's modelContext registry, read after the page settles.