12 tools registered. Strongest in shared experience, weakest in trust.
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{
name: "search_catalog",
inputSchema: {
type: "object",
properties: {
query: { type: "string", description: "What to search for" }
},
required: ["query"]
}
}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{
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."
}{
"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
}
}proceed_to_checkout: registered at 1820ms// Register tools as soon as they're ready, not behind a deferred/async chunk.
document.modelContext.registerTool({ /* ... */ });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{
name: "search_catalog",
inputSchema: {
type: "object",
properties: {
query: { type: "string", description: "What to search for" }
},
required: ["query"]
}
}{ name: "proceed_to_checkout" /* short, unique, verb-based */ }browse_store: weak; get_product: weak; show_variant: weak; add_to_cart: weak{
name: "browse_store",
description: "Describe what this tool does, when to use it, and what it returns."
}browse_store, get_product, show_variant{
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 }
}manage_orders: user, customer{ name: "manage_orders", annotations: { untrustedContentHint: true } }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{
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."
}{
"catalog": {
"query": "carry-on suitcase under $300"
}
}{
"catalog": {
"id": "{{steps.0.tool_results.products.0.id}}",
"navigate": true
}
}{
"cart": {
"line_items": [
{
"item": {
"id": "{{steps.1.tool_results.product.variants.0.id}}"
},
"quantity": 2
}
]
}
}