nusole.com.au WebMCP audit

audited Oct 13, 2026in 22s
87/ 100100% of the applicable check weight evaluated

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

Shared experience100
Tool selection100
Tool quality83
Trust58
https://nusole.com.au
Captured view of https://nusole.com.au

Tools

4 read, 8 write
Loading map
search_catalog: warning

search_catalog

Search the store catalog for products, collections, articles, and pages. Does NOT add anything to the cart; use add_to_cart for cart changes. If the user asks for a specific product variant, call get_product after search_catalog to inspect available variants, then show_variant to display one.Answers a question. Declared read only.
pagehttps://nusole.com.au/
implementation
viaimperative
entry pointdocument
registered after1819ms
executepresent
api surface
catalogrequired
annotations
read onlytrue
untrusted contenttrue
titlenot declared
2 findings
warningSchema quality
weight 4
7 of 12 tool schemas are harder for an agent to use than they need to be: search_catalog 1 parameter has no description (catalog).
search_catalog: 1 parameter has no description (catalog); browse_store: description is 891 characters, over Chrome's 500-character guidance; browse_store: 2 parameter descriptions are over Chrome's 15
fix
{
  name: "search_catalog",
  inputSchema: {
    type: "object",
    properties: {
      query: { type: "string", description: "What to search for" }
    },
    required: ["query"]
  }
}
warningInjection surface
weight 3
9 of 12 tools carry instruction-shaped text in their own metadata: search_catalog Description instructs agent on tool use and preferences.
search_catalog: Description instructs agent on tool use and preferences; browse_store: Description instructs agent on tool use and preferences; get_product: Description instructs agent on tool use and preferences; show_variant: Description instructs agent on tool use and preferences
fix
{
  name: "search_catalog",
  // 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": "search_catalog",
  "description": "Search the store catalog for products, collections, articles, and pages. Does NOT add anything to the cart; use add_to_cart for cart changes. If the user asks for a specific product variant, call get_product after search_catalog to inspect available variants, then show_variant to display one.",
  "inputSchema": {
    "type": "object",
    "required": [
      "catalog"
    ],
    "properties": {
      "catalog": {
        "type": "object",
        "required": [
          "query"
        ],
        "properties": {
          "query": {
            "type": "string",
            "description": "Search query string."
          },
          "pagination": {
            "type": "object",
            "properties": {
              "limit": {
                "type": "integer",
                "description": "Max results per type (1-10). Defaults to 5.",
                "default": 5,
                "minimum": 1,
                "maximum": 10
              }
            }
          }
        }
      }
    }
  },
  "annotations": {
    "readOnlyHint": true,
    "untrustedContentHint": true
  }
}
Showing search_catalog

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

100 / 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.
passTool selection
weight 12
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.
passCoverage vs. site type
weight 7
The tool set covers the whole core commerce flow: search or browse the catalog, read one item in detail, add to or read the cart, start checkout or place an order.

Tool quality

83 / 100 · weight 25
warningRegistration timing
weight 1
The slowest tool took 1820ms to register, past the 1000ms an agent reading the registry at first paint would wait for.
toolproceed_to_checkout
proceed_to_checkout: registered at 1820ms
fix
// Register tools as soon as they're ready, not behind a deferred/async chunk.
document.modelContext.registerTool({ /* ... */ });
passCanonical entry point
weight 3
All 12 tools register on the canonical document.modelContext entry point.
passSchema validity
weight 4
All 12 declared input schemas are structurally valid object schemas.
warningSchema quality
weight 4
7 of 12 tool schemas are harder for an agent to use than they need to be: search_catalog 1 parameter has no description (catalog).
toolsearch_catalog
search_catalog: 1 parameter has no description (catalog); browse_store: description is 891 characters, over Chrome's 500-character guidance; browse_store: 2 parameter descriptions are over Chrome's 15
fix
{
  name: "search_catalog",
  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: 2 names do not start with a verb (proceed_to_checkout).
toolproceed_to_checkout
fix
{ name: "proceed_to_checkout" /* short, unique, verb-based */ }
passStub detection
weight 4
All 12 tools declare an execute handler.
passRegistration errors
weight 2
No tool registration threw during the capture.
warningDescription quality
weight 5
5 of 12 tool descriptions leave an agent guessing: browse_store Description is truncated, omitting what comes back or changes..
toolbrowse_store
browse_store: weak; get_product: weak; show_variant: weak; add_to_cart: weak
fix
{
  name: "browse_store",
  description: "Describe what this tool does, when to use it, and what it returns."
}

Trust

58 / 100 · weight 20
warningAnnotations present
weight 5
3 of 7 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.)
toolbrowse_store
browse_store, get_product, show_variant
fix
{
  name: "browse_store",
  // 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 5
No tool claims to be read-only while its own name or description says it writes (12 declared hints checked).
warningUntrusted content hint
weight 3
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.
toolmanage_orders
manage_orders: user, customer
fix
{ name: "manage_orders", annotations: { untrustedContentHint: true } }
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
9 of 12 tools carry instruction-shaped text in their own metadata: search_catalog Description instructs agent on tool use and preferences.
toolsearch_catalog
search_catalog: Description instructs agent on tool use and preferences; browse_store: Description instructs agent on tool use and preferences; get_product: Description instructs agent on tool use and preferences; show_variant: Description instructs agent on tool use and preferences
fix
{
  name: "search_catalog",
  // 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
Find a carry-on suitcase under 300 dollars.ok
chosesearch_catalogexpected product searchkind matched
arguments
{
  "catalog": {
    "query": "carry-on suitcase under $300"
  }
}
Show me the details and price of the first result.ok
choseget_productexpected product detailkind matched
arguments
{
  "catalog": {
    "id": "{{steps.0.tool_results.products.0.id}}",
    "navigate": true
  }
}
Add two of them to my cart.ok
choseadd_to_cartexpected cart writekind matched
arguments
{
  "cart": {
    "line_items": [
      {
        "item": {
          "id": "{{steps.1.tool_results.product.variants.0.id}}"
        },
        "quantity": 2
      }
    ]
  }
}
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
native modelContext
chrome
151.0.7922.34
capture shim
v3
spec snapshot
2026-08-26
mode
fast
pages
1 - entry page only
tools
12
invoked
not invoked; a live audit calls them
run time
22s
finished
Oct 13, 2026
Checked the way in-browser agents discover tools: the top-level document's modelContext registry, read after the page settles.