Skip to main content
Glama

Search products across merchants

global_search
Read-onlyIdempotent

Use this when a user wants to find or compare product candidates across participating WooCommerce merchants. Search with q and/or a canonical category leaf; results contain snapshot price and stock, match evidence, provenance, and merchant Bridge handoff links. Do not use this as final price, variant, stock, checkout, or payment authority; verify the selected offer through its handoff.

Input Schema

TableJSON Schema
NameRequiredDescriptionDefault
qNoFree-text product query. Each term must match as a whole word in the native merchant catalog text (name, short description, description) or in the canonical category path, so English category terms reach catalogs written in other languages: q="mattress" returns products under home.bedroom.mattress even when their text is Italian. There is no server-side translation of product text; for language-neutral retrieval by category use leaf and the canonical filters.
leafNoCanonical category node. Accepts a terminal leaf (e.g. beverages.alcohol.sparkling_prosecco) or any parent node (e.g. jewellery, home.bedroom): a parent matches the node and its whole subtree, so you can widen or narrow the search by moving up or down the tree. Use list_categories to browse the tree.
brandNoBrand facet filter (normalized, e.g. "nike")
colorNoBridge color family (e.g. "blue"). Common aliases are resolved to a family available in the active index. A family match does not guarantee an exact shade; read filter_semantics.color and verify the chosen product via handoff.bridge_product_url.
limitNoMax offers to return (1-25, default 10). No pagination; raise to get more in one call
genderNoCanonical gender facet. Filtering is discovery-tolerant: untagged and unisex products can remain candidates, so verify the chosen product. Allowed values: female, male, unisex.
in_stockNotrue filters product-level stock in the indexed snapshot. Does not verify a selected variant or a booking slot.
max_priceNoUpper bound in major currency units (for example 1550 means EUR 1,550 for EUR offers). A matching range may include variants above this bound; verify the chosen variant. Per-offer currency, no FX conversion.
min_priceNoLower bound in major currency units (for example 50 means EUR 50 for EUR offers). Matches overlapping variant price ranges in each offer currency; no FX conversion. Verify the chosen variant.

Output Schema

TableJSON Schema
NameRequiredDescriptionDefault
errorNo
scopeNo
offersNo
coverageNo
federatedNo
result_countNo
guidance_codeNo
applied_filtersNo

Schema Changelog

Changes observed during successful MCP inspections.

  1. Changed8 schema fields changed
    • changedInput schema / properties / gender / description
      Previous value: -"Gender facet. Use a value from get_meta.accepted_filters.gender; aliases may be normalized. If the value is unknown, the search returns an explicit error rather than broadening the result."New value: +"Canonical gender facet. Filtering is discovery-tolerant: untagged and unisex products can remain candidates, so verify the chosen product. Allowed values: female, male, unisex."
    • addedInput schema / properties / gender / enum
      Added value: +[
      +  "female",
      +  "male",
      +  "unisex"
      +]
    • removedInput schema / properties / gender / maxLength
      Removed value: -64
    • changedInput schema / properties / max_price / description
      Previous value: -"Upper bound of the requested interval. A matching range may include variants above this bound; verify the chosen variant. Per-offer currency, no FX conversion."New value: +"Upper bound in major currency units (for example 1550 means EUR 1,550 for EUR offers). A matching range may include variants above this bound; verify the chosen variant. Per-offer currency, no FX conversion."
    • addedInput schema / properties / max_price / minimum
      Added value: +0
    • changedInput schema / properties / min_price / description
      Previous value: -"Lower bound of the requested interval. Matches overlapping variant price ranges in each offer currency; no FX conversion. Verify the chosen variant."New value: +"Lower bound in major currency units (for example 50 means EUR 50 for EUR offers). Matches overlapping variant price ranges in each offer currency; no FX conversion. Verify the chosen variant."
    • addedInput schema / properties / min_price / minimum
      Added value: +0
    • changedOutput schema / (root)
      Previous value: -nullNew value: +{
      +  "$schema": "http://json-schema.org/draft-07/schema#",
      +  "additionalProperties": true,
      +  "properties": {
      +    "applied_filters": {
      +      "additionalProperties": {},
      +      "type": "object"
      +    },
      +    "coverage": {
      +      "additionalProperties": true,
      +      "properties": {
      +        "limit": {
      +          "exclusiveMinimum": 0,
      +          "type": "integer"
      +        },
      +        "more_results_possible": {
      +          "type": "boolean"
      +        },
      +        "returned": {
      +          "minimum": 0,
      +          "type": "integer"
      +        },
      +        "total_known": {
      +          "type": "boolean"
      +        }
      +      },
      +      "required": [
      +        "returned",
      +        "limit",
      +        "total_known",
      +        "more_results_possible"
      +      ],
      +      "type": "object"
      +    },
      +    "error": {
      +      "type": "string"
      +    },
      +    "federated": {
      +      "type": "boolean"
      +    },
      +    "guidance_code": {
      +      "type": "string"
      +    },
      +    "offers": {
      +      "items": {
      +        "additionalProperties": true,
      +        "properties": {
      +          "availability_status": {
      +            "type": [
      +              "string",
      +              "null"
      +            ]
      +          },
      +          "category_leaf": {
      +            "type": [
      +              "string",
      +              "null"
      +            ]
      +          },
      +          "handoff": {},
      +          "merchant_domain": {
      +            "type": "string"
      +          },
      +          "name": {
      +            "type": "string"
      +          },
      +          "p2209_id": {
      +            "type": "string"
      +          },
      +          "price": {},
      +          "provenance": {}
      +        },
      +        "required": [
      +          "p2209_id",
      +          "merchant_domain",
      +          "name"
      +        ],
      +        "type": "object"
      +      },
      +      "type": "array"
      +    },
      +    "result_count": {
      +      "minimum": 0,
      +      "type": "integer"
      +    },
      +    "scope": {
      +      "additionalProperties": true,
      +      "properties": {
      +        "type": {
      +          "type": "string"
      +        }
      +      },
      +      "required": [
      +        "type"
      +      ],
      +      "type": "object"
      +    }
      +  },
      +  "type": "object"
      +}
  2. Changed6 schema fields changed
    • changedInput schema / properties / gender / description
      Previous value: -"Gender facet (normalized): male, female, unisex, kids"New value: +"Gender facet. Use a value from get_meta.accepted_filters.gender; aliases may be normalized. If the value is unknown, the search returns an explicit error rather than broadening the result."
    • removedInput schema / properties / gender / enum
      Removed value: -[
      -  "male",
      -  "female",
      -  "unisex",
      -  "kids"
      -]
    • addedInput schema / properties / gender / maxLength
      Added value: +64
    • changedInput schema / properties / in_stock / description
      Previous value: -"Only offers with availability_status=in_stock"New value: +"true filters product-level stock in the indexed snapshot. Does not verify a selected variant or a booking slot."
    • changedInput schema / properties / max_price / description
      Previous value: -"Maximum price filter (numeric; per-offer merchant currency, no FX conversion)"New value: +"Upper bound of the requested interval. A matching range may include variants above this bound; verify the chosen variant. Per-offer currency, no FX conversion."
    • changedInput schema / properties / min_price / description
      Previous value: -"Minimum price filter (numeric; per-offer merchant currency, no FX conversion)"New value: +"Lower bound of the requested interval. Matches overlapping variant price ranges in each offer currency; no FX conversion. Verify the chosen variant."
  3. Changed1 schema field changed
    • changedInput schema / properties / color / description
      Previous value: -"Color family (e.g. \"blue\")"New value: +"Bridge color family (e.g. \"blue\"). Common aliases are resolved to a family available in the active index. A family match does not guarantee an exact shade; read filter_semantics.color and verify the chosen product via handoff.bridge_product_url."
  4. Changed1 schema field changed
    • changedInput schema / properties / leaf / description
      Previous value: -"Canonical category leaf (e.g. beverages.alcohol.sparkling_prosecco)"New value: +"Canonical category node. Accepts a terminal leaf (e.g. beverages.alcohol.sparkling_prosecco) or any parent node (e.g. jewellery, home.bedroom): a parent matches the node and its whole subtree, so you can widen or narrow the search by moving up or down the tree. Use list_categories to browse the tree."
  5. Changed1 schema field changed
    • changedInput schema / properties / q / description
      Previous value: -"Free-text product query matched against native merchant catalog text; no server-side translation. Translate when needed, or use leaf and canonical filters for language-neutral retrieval."New value: +"Free-text product query. Each term must match as a whole word in the native merchant catalog text (name, short description, description) or in the canonical category path, so English category terms reach catalogs written in other languages: q=\"mattress\" returns products under home.bedroom.mattress even when their text is Italian. There is no server-side translation of product text; for language-neutral retrieval by category use leaf and the canonical filters."
  6. Changed1 schema field changed
    • changedInput schema / properties / q / description
      Previous value: -"Free-text query, any language (e.g. \"prosecco\", \"materasso memory foam\")"New value: +"Free-text product query matched against native merchant catalog text; no server-side translation. Translate when needed, or use leaf and canonical filters for language-neutral retrieval."
  7. Changed4 schema fields changed
    • addedInput schema / properties / gender / description
      Added value: +"Gender facet (normalized): male, female, unisex, kids"
    • addedInput schema / properties / limit / description
      Added value: +"Max offers to return (1-25, default 10). No pagination; raise to get more in one call"
    • addedInput schema / properties / max_price / description
      Added value: +"Maximum price filter (numeric; per-offer merchant currency, no FX conversion)"
    • addedInput schema / properties / min_price / description
      Added value: +"Minimum price filter (numeric; per-offer merchant currency, no FX conversion)"
  8. First observed

TDQS

A4.9/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnly/idempotent/openWorld, and the description adds material behavior beyond them: results are snapshot (not live) data, verification must happen through the merchant Bridge handoff, and filters are discovery-tolerant rather than authoritative. This is exactly the extra context the annotations cannot carry.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Three sentences, front-loaded with the use case, then the result shape, then the guardrail. Every clause carries distinct information; no restatement of the name or title.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

With an output schema present the description need not enumerate return fields, yet it still characterizes the result payload and the handoff requirement. Combined with full schema coverage, an agent has everything needed to call this correctly and interpret the response.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100%, so the schema already documents all nine parameters in depth; the baseline would be 3. The description still adds the combination rule ('q and/or a canonical category leaf') and the pagination-free limit behavior, which is helpful beyond the schema text.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb and resource ('find or compare product candidates across participating WooCommerce merchants') and scopes the result contents (snapshot price/stock, match evidence, provenance, handoff links). An agent can distinguish this discovery tool from the detail-oriented siblings (get_product, lookup_merchant) without opening a schema.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Explicitly gives the trigger condition ('when a user wants to find or compare product candidates') and an explicit exclusion ('Do not use this as final price, variant, stock, checkout, or payment authority'), naming the correct alternative path (the handoff link). The schema additionally routes tree browsing to list_categories.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

Try in Browser

Glama MCP Gateway

Add one secure layer between your agents and this server.