Skip to main content
Glama

Channel3 Shopping

Search Products

search_products
Read-onlyIdempotent

Search 100M+ products across thousands of retailers for one product type. Call once for each distinct product type, and send independent calls together. Put relevant constraints in query. Returns up to 8 product cards plus structured product data. The result includes a thread_id. You MUST include it unchanged as the thread_id parameter on every subsequent Channel3 tool call in this conversation — including searches for new, unrelated products. Never omit it once you have one.

Input Schema

NameRequiredDescriptionDefault
queryNoOne product type and its constraints in natural language (brand, color, material, size, price, gender). Good: "red leather jacket under $200"; "leather golf glove under $40". Bad: "gift ideas for dad"; "cool sneakers"; "golf glove or rangefinder".
image_urlNoPublic image URL for visual search. Combine with `query` for text + image.
thread_idNoConversation thread ID. Omit ONLY on the very first Channel3 call of a conversation. From then on, always pass the `thread_id` from the most recent Channel3 result, unchanged — even when the new call is a completely different product search.

Output Schema

NameRequiredDescriptionDefault
seqNo
as_ofYesISO timestamp of when this result was produced; prices are live as of this moment.
queryNoThe text query this result answers.
productsYes
image_urlNoThe image URL this result answers.
thread_idYesConversation thread ID. Pass it back unchanged as `thread_id` on every follow-up call in this conversation.
session_idNoPostHog MCP session ID for analytics correlation.
server_originNoOrigin of this MCP server; the storefront UI posts analytics events here.
next_page_tokenYesOpaque pagination token used by the storefront UI; not usable via this tool.

Schema Changelog

Changes observed during successful MCP inspections.

  1. Changed4 schema fields changed
    • removedOutput schema / properties / next_page_token / anyOf
      Removed value: -[
      -  {
      -    "type": "string"
      -  },
      -  {
      -    "type": "null"
      -  }
      -]
    • addedOutput schema / properties / next_page_token / type
      Added value: +[
      +  "string",
      +  "null"
      +]
    • removedOutput schema / properties / products / items / properties / offers / items / properties / price / properties / compare_at_price / anyOf
      Removed value: -[
      -  {
      -    "type": "number"
      -  },
      -  {
      -    "type": "null"
      -  }
      -]
    • addedOutput schema / properties / products / items / properties / offers / items / properties / price / properties / compare_at_price / type
      Added value: +[
      +  "number",
      +  "null"
      +]
  2. Changed5 schema fields changed
    • addedInput schema / properties / thread_id
      Added value: +{
      +  "description": "Conversation thread ID. Omit ONLY on the very first Channel3 call of a conversation. From then on, always pass the `thread_id` from the most recent Channel3 result, unchanged — even when the new call is a completely different product search.",
      +  "type": "string"
      +}
    • addedOutput schema / properties / server_origin
      Added value: +{
      +  "description": "Origin of this MCP server; the storefront UI posts analytics events here.",
      +  "type": "string"
      +}
    • addedOutput schema / properties / session_id
      Added value: +{
      +  "description": "PostHog MCP session ID for analytics correlation.",
      +  "type": "string"
      +}
    • addedOutput schema / properties / thread_id
      Added value: +{
      +  "description": "Conversation thread ID. Pass it back unchanged as `thread_id` on every follow-up call in this conversation.",
      +  "type": "string"
      +}
    • changedOutput schema / required
      Previous value: -[
      -  "products",
      -  "next_page_token",
      -  "as_of"
      -]New value: +[
      +  "products",
      +  "next_page_token",
      +  "as_of",
      +  "thread_id"
      +]
  3. First observed

TDQS

A3.9/5.0
Behavior4/5

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

Annotations already declare readOnly/idempotent/non-destructive/openWorld, so the safety profile is covered. The description adds genuinely non-obvious behavior: the return payload is up to 8 product cards plus structured data, it emits a `thread_id`, and that ID must be threaded through every subsequent Channel3 call. That session-continuation contract is real context beyond the annotations.

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?

Front-loaded with the capability, then usage rules, then the return/thread contract. It is dense and purposeful, though the thread_id obligation is stated in both the description and the schema, which is mild redundancy rather than waste.

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?

An output schema exists, so return values need not be fully explained, and the description still flags the card count and structured data. Combined with the thread_id lifecycle and batching rules, an agent has what it needs to call correctly; only the sibling tool selection is left unspecified.

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%, including examples of good vs bad `query` strings and the thread_id omission rule, so the baseline is 3. The description reinforces the 'one product type per query' semantics and the thread_id persistence rule but adds no syntax or meaning the schema does not already carry.

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+resource with scope: 'Search 100M+ products across thousands of retailers for one product type.' An agent immediately knows this is the broad product-discovery search. It does not, however, differentiate itself from siblings like browse_products or get_products, so the boundary between the search tools must be inferred.

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 concrete operational guidance: call once per distinct product type, batch independent calls together, and keep the `query` to a single product type. What is missing is when to reach for this tool versus the sibling search/browse tools, which is exactly the choice an agent faces.

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.