16 tools registered. Strongest in usefulness, weakest in human experience.
No agent run recorded yet.
search_products: registered at 1646.4000000953674ms// Register tools as soon as they're ready, not behind a deferred/async chunk.
document.modelContext.provideContext({ tools: [/* ... */] });search_products, get_product, list_categories, view_cart, add_to_cart// Use the canonical entry point - navigator.modelContext is deprecated.
document.modelContext.provideContext({ tools: [/* ... */] });search_products: 1 parameter has no description (limit); list_categories: declares no required list, so an agent cannot tell which parameters are mandatory; add_to_cart: 1 parameter has no description{
name: "search_products",
inputSchema: {
type: "object",
properties: {
query: { type: "string", description: "What to search for" }
},
required: ["query"]
}
}search_products, get_product, list_categories, view_cart, add_to_cart<!-- Give the tool a visible counterpart: a declarative form is one the person can see and use too. -->
<form toolname="search_products" tooldescription="...">
<!-- the same action, as UI -->
</form>{
"name": "search_products",
"description": "Search for apparel products by name, category (taxon permalink), price range, or stock status. Returns up to 20 results with name, price, and URL.",
"inputSchema": {
"type": "object",
"properties": {
"query": {
"type": "string",
"description": "Keyword to match against product names, e.g. 'denim shirt'."
},
"taxon": {
"type": "string",
"description": "Permalink filter, e.g. 'categories/men/shirts' or 'collections/new-arrivals'."
},
"min_price": {
"type": "number",
"minimum": 0,
"description": "Minimum price in USD."
},
"max_price": {
"type": "number",
"minimum": 0,
"description": "Maximum price in USD."
},
"in_stock": {
"type": "boolean",
"description": "If true, only return purchasable items in stock.",
"default": true
},
"sort": {
"type": "string",
"enum": [
"popularity",
"-popularity",
"price",
"-price",
"name",
"-name",
"-available_on"
],
"description": "Sort order.",
"default": "-popularity"
},
"limit": {
"type": "integer",
"minimum": 1,
"maximum": 20,
"default": 10
}
}
},
"annotations": {
"readOnlyHint": true
}
}search_products: registered at 1646.4000000953674ms// Register tools as soon as they're ready, not behind a deferred/async chunk.
document.modelContext.provideContext({ tools: [/* ... */] });search_products, get_product, list_categories, view_cart, add_to_cart// Use the canonical entry point - navigator.modelContext is deprecated.
document.modelContext.provideContext({ tools: [/* ... */] });search_products: 1 parameter has no description (limit); list_categories: declares no required list, so an agent cannot tell which parameters are mandatory; add_to_cart: 1 parameter has no description{
name: "search_products",
inputSchema: {
type: "object",
properties: {
query: { type: "string", description: "What to search for" }
},
required: ["query"]
}
}duplicate tool name registered: search_productstry {
document.modelContext.provideContext({ tools: [/* ... */] });
} catch (err) {
console.error("WebMCP registration failed", err);
}document.modelContext.dispatchEvent(new Event("toolchange"));{ name: "go_to_checkout" /* short, unique, verb-based */ }search_products, get_product, list_categories, view_cart, add_to_cart<!-- Give the tool a visible counterpart: a declarative form is one the person can see and use too. -->
<form toolname="search_products" tooldescription="...">
<!-- the same action, as UI -->
</form>