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

15 tools registered. Strongest in tool quality, weakest in trust.

Shared experience75
Task completion90
Tool quality91
Trust60
https://tools-it.fly.dev
Captured view of https://tools-it.fly.dev

Tools

10 read, 5 write
Loading map
search_products: pass

search_products

Search the live catalog (e.g. "men's pants", "women linen blazer") with filters on ANYTHING: price range, sale state, colors, keywords to include/exclude, availability in a specific size or in the human's saved size, plus sorting. Returns products with ids, prices, sale flags, colors and image URLs, and shows the result grid in the shop UI. Always the first step — its product ids feed every other tool.Answers a question. Declared read only.
pagehttps://tools-it.fly.dev/
implementation
viaimperative
entry pointdocument
registered after153ms
executepresent
api surface
queryrequired
sectionoptional
limitoptional
min_priceoptional
max_priceoptional
on_sale_onlyoptional
min_discount_pctoptional
colorsoptional
include_wordsoptional
exclude_wordsoptional
sizeoptional
in_my_size_onlyoptional
sortoptional
annotations
read onlytrue
untrusted contentnot declared
titlenot declared
0 findingsNo check named this tool.
tool json
{
  "name": "search_products",
  "description": "Search the live catalog (e.g. \"men's pants\", \"women linen blazer\") with filters on ANYTHING: price range, sale state, colors, keywords to include/exclude, availability in a specific size or in the human's saved size, plus sorting. Returns products with ids, prices, sale flags, colors and image URLs, and shows the result grid in the shop UI. Always the first step — its product ids feed every other tool.",
  "inputSchema": {
    "type": "object",
    "properties": {
      "query": {
        "type": "string",
        "minLength": 2,
        "description": "What to look for, natural language, e.g. \"men's pants\""
      },
      "section": {
        "description": "Force a store section; otherwise inferred from the query",
        "type": "string",
        "enum": [
          "MAN",
          "WOMAN",
          "KID"
        ]
      },
      "limit": {
        "description": "Max products to return (default 24)",
        "type": "integer",
        "minimum": 1,
        "maximum": 60
      },
      "min_price": {
        "description": "Only items at or above this price, in the store currency",
        "type": "number"
      },
      "max_price": {
        "description": "Only items at or below this price, in the store currency (e.g. 200 = ₪200)",
        "type": "number"
      },
      "on_sale_only": {
        "description": "Only items currently reduced",
        "type": "boolean"
      },
      "min_discount_pct": {
        "description": "Only items reduced by at least this percent (e.g. 30)",
        "type": "number",
        "minimum": 1,
        "maximum": 90
      },
      "colors": {
        "description": "Only items available in any of these colors, e.g. [\"black\",\"beige\"]",
        "type": "array",
        "items": {
          "type": "string"
        }
      },
      "include_words": {
        "description": "Product name must contain all of these words, e.g. [\"linen\"]",
        "type": "array",
        "items": {
          "type": "string"
        }
      },
      "exclude_words": {
        "description": "Drop items whose name contains any of these words, e.g. [\"jogging\"]",
        "type": "array",
        "items": {
          "type": "string"
        }
      },
      "size": {
        "description": "Only items with THIS size in live stock (e.g. \"M\", \"42\"). Checks real per-size availability.",
        "type": "string"
      },
      "in_my_size_only": {
        "description": "Only items in live stock in the human's saved size (size systems converted automatically)",
        "type": "boolean"
      },
      "sort": {
        "description": "Result order (default relevance)",
        "type": "string",
        "enum": [
          "relevance",
          "price_asc",
          "price_desc",
          "discount"
        ]
      }
    },
    "required": [
      "query"
    ],
    "additionalProperties": false
  },
  "annotations": {
    "readOnlyHint": true
  }
}
Showing search_products

Findings

Shared experience

75 / 100 · weight 30
warningPage experience
weight 20
2 of 4 page-experience marks came back short: usable The page is a demo/landing page, not a functional shopping interface..
usable: weak; clarity: weak
warningHuman parity
weight 10
The page the person sees came back short of the agent surface (2 of 4 page-experience marks came back short: usable The page is a demo/landing page, not a functional shopping inter...), so the two are not sharing an equal experience.
fix
// Make the tool's effect visible on the page the person is looking at:
// update the same UI your existing human flow uses when your_tool_name runs,
// so the person co-browsing sees what the agent just did.
execute: async (args, { signal }) => {
  const result = await performAction(args, signal);
  renderResultInPage(result); // the human-visible half of the same action
  return result;
}

Task completion

90 / 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.
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

91 / 100 · weight 25
passRegistration timing
weight 1
Every measured tool registered within 154ms of navigation. 1 further tool carried no measurable registration time.
toolview_cart
passCanonical entry point
weight 3
All 14 tools register on the canonical document.modelContext entry point.
passSchema validity
weight 4
All 14 declared input schemas are structurally valid object schemas.
warningSchema quality
weight 4
4 of 15 tool schemas are harder for an agent to use than they need to be: set_my_sizes declares no required list, so an agent cannot tell which parameters are mandatory.
toolset_my_sizes
set_my_sizes: declares no required list, so an agent cannot tell which parameters are mandatory; find_reviews: description is 541 characters, over Chrome's 500-character guidance; find_reviews: declar
fix
{
  name: "set_my_sizes",
  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: names mix kebab and snake conventions; 1 name does not start with a verb (love_item).
toollove_item
fix
{ name: "love_item" /* short, unique, verb-based */ }
passStub detection
weight 4
All 14 tools declare an execute handler.
passRegistration errors
weight 2
No tool registration threw during the capture.
passDescription quality
weight 5
1 of 15 tool descriptions leave an agent guessing: search-the-shop Bare restatement of tool name, omits what it returns..
toolsearch-the-shop
search-the-shop: weak

Trust

60 / 100 · weight 20
passAnnotations present
weight 6
All 10 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 (14 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.
toolfind_reviews
find_reviews: review, user, user-generated
fix
{ name: "find_reviews", annotations: { untrustedContentHint: true } }
warningInjection surface
weight 4
2 of 15 tools carry instruction-shaped text in their own metadata: find_reviews Description instructs agent to use another tool.
toolfind_reviews
find_reviews: Description instructs agent to use another tool; love_item: Description instructs agent when to call tool
fix
{
  name: "find_reviews",
  // 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_productsexpected product searchkind matched
arguments
{
  "query": "carry-on suitcase",
  "max_price": 300
}
Show me the details and price of the first result.ok
choseget_productexpected product detailkind matched
arguments
{
  "product_id": 1
}
Add two of them to my cart.ok
choseadd_to_cartexpected cart writekind matched
arguments
{
  "product_id": 1,
  "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
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
15
run time
15s
finished
Aug 31, 2026
Checked the way in-browser agents discover tools: the top-level document's modelContext registry, read after the page settles.