weav.com WebMCP audit

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

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

Shared experience100
Tool selection9
Tool quality76
Trust0
https://weav.com
Captured view of https://weav.com

Tools

0 read, 0 write, 11 undeclared
Loading map
get_pricing: fail

get_pricing

Return Weav public pricing: Lite, Plus, Pro, Max monthly prices, annual discount, add-ons, and signup/sales links. Use this instead of scraping weav.com/pricing.No behaviour hints declared. Agents should treat it as possibly state-changing.
pagehttps://weav.com/
implementation
viaimperative
entry pointprovideContext
registered after699ms
executepresent
api surfaceTakes no parameters.
annotations
read onlynot declared
untrusted contentnot declared
titlenot declared
4 findings
warningCanonical entry point
weight 3
5 of 11 tools use the removed provideContext API instead of document.modelContext.registerTool().
fix
// document.modelContext is the canonical entry point - the navigator.modelContext alias is deprecated.
document.modelContext.registerTool({ /* ... */ });
warningSchema quality
weight 4
6 of 11 tool schemas are harder for an agent to use than they need to be: get_pricing 2 parameter descriptions are over Chrome's 150-character guidance.
get_pricing: 2 parameter descriptions are over Chrome's 150-character guidance; get_product_overview: 2 parameter descriptions are over Chrome's 150-character guidance; get_signup: 2 parameter descrip
fix
{
  name: "get_pricing",
  inputSchema: {
    type: "object",
    properties: {
      query: { type: "string", description: "What to search for" }
    },
    required: ["query"]
  }
}
failAnnotations present
weight 5
11 of 11 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.)
get_pricing, get_product_overview, get_signup, get_demo, get_comparison
fix
{
  name: "get_pricing",
  // 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 }
}
warningInjection surface
weight 3
6 of 11 tools carry instruction-shaped text in their own metadata: get_pricing Description instructs agent to prefer this tool..
get_pricing: Description instructs agent to prefer this tool.; get_demo: Description instructs agent on output format.; get_product_overview: Schema field description instructs agent on content.; get_signup: Schema field description instructs agent on content.
fix
{
  name: "get_pricing",
  // 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": "get_pricing",
  "description": "Return Weav public pricing: Lite, Plus, Pro, Max monthly prices, annual discount, add-ons, and signup/sales links. Use this instead of scraping weav.com/pricing.",
  "inputSchema": {
    "type": "object",
    "properties": {},
    "additionalProperties": false
  },
  "annotations": {}
}
Showing get_pricing

Findings

Shared experience

100 / 100 · weight 30
not applicableVisible effect
weight 6
Not invoked on this run: this audit did not call any tool. Scheduled re-audits only read the registry; a live audit from the report page calls the tools that declare readOnlyHint: true.
passPage experience
weight 16
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 8
The person co-browsing can see and use this page - the same page the agent's tools act on.

Tool selection

9 / 100 · weight 25
not applicableInvoke success rate
weight 6
Not invoked on this run: this audit did not call any tool. Scheduled re-audits only read the registry; a live audit from the report page calls the tools that declare readOnlyHint: true.
failTool selection
weight 12
An agent chose an existing tool and built a schema-valid call that held up on 0 of 3 canonical intents; on "Find a carry-on suitcase under 300 dollars." no tool on the page served it. Nothing was executed, so this verifies selection, not outcomes.
failCoverage vs. site type
weight 7
The tool set covers 1 of the 4 things an agent needs on a commerce site; it cannot search or browse the catalog or add to or read the cart or start checkout or place an order.

Tool quality

76 / 100 · weight 25
passRegistration timing
weight 1
Every measured tool registered within 710ms of navigation.
toolget_demo
warningCanonical entry point
weight 3
5 of 11 tools use the removed provideContext API instead of document.modelContext.registerTool().
toolget_pricing
fix
// document.modelContext is the canonical entry point - the navigator.modelContext alias is deprecated.
document.modelContext.registerTool({ /* ... */ });
passSchema validity
weight 4
All 11 declared input schemas are structurally valid object schemas.
warningSchema quality
weight 4
6 of 11 tool schemas are harder for an agent to use than they need to be: get_pricing 2 parameter descriptions are over Chrome's 150-character guidance.
toolget_pricing
get_pricing: 2 parameter descriptions are over Chrome's 150-character guidance; get_product_overview: 2 parameter descriptions are over Chrome's 150-character guidance; get_signup: 2 parameter descrip
fix
{
  name: "get_pricing",
  inputSchema: {
    type: "object",
    properties: {
      query: { type: "string", description: "What to search for" }
    },
    required: ["query"]
  }
}
passNaming quality
weight 2
All 11 tool names are consistent, verb-led, and within Chrome's size guidance.
passStub detection
weight 4
All 11 tools declare an execute handler.
failRegistration errors
weight 2
5 tool registrations threw during the capture, so the registry an agent reads is incomplete.
duplicate tool name registered: get_pricing
fix
document.modelContext.registerTool({ /* ... */ }).catch(function (err) {
  console.error("WebMCP registration failed", err);
});
passDescription quality
weight 5
1 of 6 tool descriptions leave an agent guessing: get_more_tools Does not specify what kind of tools it might return. 5 of 11 tools were not rated and are excluded from this score.
toolget_more_tools
get_more_tools: weak

Trust

0 / 100 · weight 20
failAnnotations present
weight 5
11 of 11 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.)
toolget_pricing
get_pricing, get_product_overview, get_signup, get_demo, get_comparison
fix
{
  name: "get_pricing",
  // 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 5
No tool declares a readOnlyHint, so there is no safety claim to contradict.
not applicableUntrusted content hint
weight 3
No tool's contract suggests it returns text written by somebody other than the site, so there is nothing to flag as untrusted.
not applicableHint vs. observed
weight 4
Not invoked on this run: this audit did not call any tool. Scheduled re-audits only read the registry; a live audit from the report page calls the tools that declare readOnlyHint: true.
warningInjection surface
weight 3
6 of 11 tools carry instruction-shaped text in their own metadata: get_pricing Description instructs agent to prefer this tool..
toolget_pricing
get_pricing: Description instructs agent to prefer this tool.; get_demo: Description instructs agent on output format.; get_product_overview: Schema field description instructs agent on content.; get_signup: Schema field description instructs agent on content.
fix
{
  name: "get_pricing",
  // 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

0% across 3 intents
Find a carry-on suitcase under 300 dollars.missed
choseno toolexpected product searchkind not applicable
No tool was picked for this intent.
arguments
{}
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 151.0.7922.34)
chrome
151.0.7922.34
capture shim
v3
spec snapshot
2026-08-26
mode
fast
pages
1 - entry page only
tools
11
invoked
not invoked; a live audit calls them
run time
19s
finished
Sep 16, 2026
Checked the way in-browser agents discover tools: the top-level document's modelContext registry, read after the page settles.