Skip to main content
Glama

Search products

search_products
Read-only

Search the merchant's products. For a connected store (Shopify, WooCommerce, BigCommerce, Ecwid, Wix) this queries the store live; otherwise it reads products stored in Foldsquare. The ids it returns are exactly what create_catalog takes as products: { from: "ids", ids: [...] }. Not every store can apply every filter, and a filtered search may stop before it has looked at everything — then partial is true and note says what was covered: the result is not the complete set.

Input Schema

NameRequiredDescriptionDefault
sortNoDefault "relevance", which on most stores means the store's own order; "title" gives a predictable alphabetical order. `coverage.sortApplied` reports what was actually used.
tagsNoKeep only products carrying these tags. Not every store exposes tags — same reporting as productType.
limitNoHow many products to return (default 20). A page size, not a total — use `cursor` for the rest.
orderNoDirection for `sort`.
cursorNoContinues a previous search: `nextCursor`, with EVERY OTHER ARGUMENT UNCHANGED. A cursor sent with changed filters is refused.
searchNoFree-text match on title and SKU. On a connected store this is the store's own search, so what counts as a match varies by platform; `coverage` says who did the matching.
sourceNoWhere to read. "auto" (default) queries the connected store if there is one. Use "foldsquare" to find products added with import_products: those are not in the store, so "auto" will never return them.
statusNoPublication status, default active, which leaves drafts out; "any" includes them.active
vendorNoKeep only these vendors/brands. Exact match, case-insensitive; any one counts. Call list_product_facets first to get the real spellings instead of guessing at them.
tagsModeNo"any" (default) keeps a product carrying at least one of the tags; "all" requires every one.
productTypeNoKeep only these product types. Several platforms have no such field; there the filter is reported under `coverage.unsupported` rather than quietly matching nothing.
availabilityNoPurchasability, NOT inventory count: a made-to-order product with zero on hand is in stock. This is what a merchant means by "in stock". Default "any".
collectionIdNoRestrict to one collection/category. Take the id from list_collections — a collection NAME will not work on a connected store.

Output Schema

NameRequiredDescriptionDefault
noteNo
totalYesnull when the store does not say
sourceYesWhere the products were read: the store platform or foldsquare
hasMoreYes
partialYestrue: the search stopped before covering everything; `note` says what was covered
coverageYesWhich filters the store applied, and how far the search looked
productsYes
returnedYes
nextCursorYesPass as `cursor`, with every other argument unchanged, for the next page
totalIsExactYes

Schema Changelog

Changes observed during successful MCP inspections.

  1. First observed

TDQS

A3.9/5.0
Behavior4/5

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

Annotations already cover the read-only, non-destructive, closed-world profile, and the description adds real value beyond them: live vs stored reads, that some stores cannot apply every filter, and that filtered searches can stop early with `partial` and a `note` explaining coverage. It does not discuss rate limits or cost, but the partial-result warning is the important behavioral disclosure.

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

Conciseness4/5

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

Four sentences with no filler, front-loading the resource and backend distinction before the output-contract and partial-result caveat. Dense but each sentence carries information an agent needs.

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

Completeness4/5

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

For a 13-parameter search tool with an output schema and full schema descriptions, the description supplies the pieces the schema cannot: which backend is read, the id contract with create_catalog, and the meaning of `partial`/`note`. Complete enough to call correctly without opening the schema.

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

Parameters3/5

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

Schema description coverage is 100%, so the parameters are already fully documented. The description adds only a general caveat that filters may be unsupported per store; it provides no per-parameter guidance beyond what the schema states, so the baseline 3 applies.

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

Purpose4/5

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

States a specific verb and resource ("Search the merchant's products") and immediately clarifies the two backends it can hit: a live connected store or Foldsquare-stored products. It does not explicitly distinguish itself from near-name siblings like pick_products_search or get_product, so it stops short of a 5.

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

Usage Guidelines4/5

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

Gives a concrete usage rule: connected store → live query, otherwise Foldsquare, and notes that import_products additions are only visible via the Foldsquare source. It omits when an agent should prefer a different search/pick tool, so alternatives are only partially addressed.

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.

Resources