Channel3 Product Search
Server Details
Product search and price comparison for AI agents. Search 100M+ products across thousands of retailers by text or image, compare live offers and prices, and turn any merchant URL into structured product data. No API key required to start; add one for unlimited use and affiliate commission.
- Status
- Healthy
- Last Tested
- Transport
- Streamable HTTP · MCP 2025-11-25
- URL
TDQS
Scored across 6 tools
browse_products and search_products both cover searching and paging, while get_details and get_products both fetch product information by ID. The descriptions provide some hints, but the actual boundaries between these pairs remain unclear and easy for an agent to confuse.
Most tools follow a clear verb_noun pattern like browse_products, get_products, and search_products. However, get_details and get_similar are vaguer and less parallel, creating minor inconsistency.
Six tools is a well-scoped size for a product search server. Each tool contributes to a coherent discovery flow: search, browse, details, price history, and similar products.
The surface covers the core product search lifecycle well: searching, browsing/paging, fetching details, viewing price history, and finding similar products. No significant missing operations are apparent for the stated purpose.
Available Tools
6 toolsbrowse_productsBrowse ProductsCRead-onlyIdempotentInspect
Search and page through products for the storefront UI.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | ||
| query | No | One 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". | |
| device_id | No | ||
| image_url | No | Public image URL for visual search. Combine with `query` for text + image. | |
| thread_id | No | ||
| page_token | No | Token from a previous response's next_page_token. |
Output Schema
| Name | Required | Description |
|---|---|---|
| products | Yes | |
| next_page_token | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, idempotentHint=true, and destructiveHint=false, covering the safety profile. The description adds no additional behavioral context such as pagination details, rate limits, or any caveats. It merely restates the action without enriching understanding of side effects or constraints.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single, compact sentence with no wasted words. It is appropriately brief for a straightforward browsing tool. However, it lacks any structural organization or emphasis; it is merely a phrase without front-loading key distinguishing details.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given six parameters, zero required, and a rich set of siblings, the description is far too thin. It does not explain pagination usage, how to combine query and image_url, or any filtering nuances. An output schema exists, so return values are covered, but the overall usage context is missing.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 50%, with descriptions for query, image_url, and page_token, but none for limit, device_id, or thread_id. The description mentions no parameters at all, so it does not compensate for the undocumented ones. An agent gets no help understanding what device_id or thread_id mean from the description.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a clear verb and resource: 'Search and page through products'. It conveys the core action of browsing with pagination. However, it does not distinguish this tool from the sibling 'search_products' which likely overlaps, so it lacks sibling differentiation.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No guidance is given on when to use this tool versus alternatives like 'search_products' or 'get_products'. There are no exclusions, conditions, or hints about the appropriate context. The only context is 'for the storefront UI', which is a vague purpose indicator, not a usage guideline.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_detailsGet Product DetailsARead-onlyIdempotentInspect
Fetch a product with live offers, for the storefront UI.
| Name | Required | Description | Default |
|---|---|---|---|
| device_id | No | ||
| thread_id | No | ||
| product_id | Yes | Canonical product ID. | |
| selected_options | No | Variant configuration as `{ optionName: label }` for re-resolving offers. |
Output Schema
| Name | Required | Description |
|---|---|---|
| product | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The readOnlyHint annotation already covers the safety profile, and “live offers” adds a small behavioral hint about data freshness (it is not just a static product lookup). The description does not, however, explain how “live” behaves — e.g., whether offers are re-resolved per request, cached, or require selected options.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
An single sentence with the core purpose, the behavioral_distinguisher (“live offers”), and the intended context (storefront UI) — all without roundabout explanation or redundant restatement of the name or title. Every word earns its place.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a read-only product fetch, the description covers the basic task and leaves no missing required inputs (product_id is listed as required). However, there is no output schema and no description of what “live offers” means, and two params (device_id, thread_id) remain opaque, so an agent gets an useful but not debt, complete, complete target.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
product_id and selected_options are already described in the schema, so roughly half of the parameters have provenance. The description's storefront-UI framing gives only weak hints about device_id and thread_id (frontrount route context), but does not really compensate for the undocumented parameters.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific verb (“fetch”) and resource (“product” with a distinctive “live offers” modifier, so an agent clearly knows what the tool returns. It does not name any sibling tools, so full differentiation from similar fetch/list tools is not explicit.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
“For the storefront UI” implies the intended context: use when serving the customer-facing product page. However, there is no explicit when-not-to-use condition, no prerequisite mention, and no alternative tool is named, so routing falls to agent inference.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_price_historyGet Price HistoryBRead-onlyIdempotentInspect
Fetch 30-day price history for a product, for the storefront UI.
| Name | Required | Description | Default |
|---|---|---|---|
| device_id | No | ||
| thread_id | No | ||
| product_id | Yes | Canonical product ID. | |
| selected_options | No | Variant configuration as `{ optionName: label }` for re-resolving offers. |
Output Schema
| Name | Required | Description |
|---|---|---|
| history | Yes | |
| statistics | Yes | |
| canonical_product_id | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The annotations already declare readOnlyHint, openWorldHint, idempotentHint, and destructiveHint, covering the safety profile. The description adds the 30-day window and storefront context, which is useful but limited; it does not explain behavior around variant resolution or filtered results beyond that. This is a modest improvement over 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.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is one effective, front-loaded sentence with no filler. It states the core functionality and intended context without redundant detail, making it easy to scan and parse.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a read-only lookup tool backed by an output schema and active annotations, the description is mostly sufficient, but it lacks any signposting for how this tool compares to siblings and leaves some parameter behavior muddy. The core call is clear, but the surrounding decision of when to use it is omitted.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is only 50%, and the description does not explain any of the parameters directly. It references 'product' which maps to product_id, but leaves device_id, thread_id, and selected_options completely unexplained, so an agent cannot infer their purpose beyond the schema's partial doc.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description names the specific verb—Fetch—and the resource: a 30-day price history for a product, with a context qualifier ('storefront UI'). This clearly differentiates the tool from siblings like search_products or get_details, which serve other purposes. The operation is unambiguous.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
There is no explicit guidance about when to use this tool versus the sibling product tools, and no mention of prerequisites or when not to use it. The phrase 'for the storefront UI' hints at a context but does not direct the agent toward this tool over alternatives.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_productsGet ProductsARead-onlyIdempotentInspect
Get full product data (offers, description, attributes, images) by product ID from a search result, or by retailer URL. Pass several IDs in one call to compare.
Use search_products to find products. Returns details in the storefront UI. 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.
| Name | Required | Description | Default |
|---|---|---|---|
| thread_id | No | 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. | |
| product_ids | Yes | Products to fetch in parallel. |
Output Schema
| Name | Required | Description |
|---|---|---|
| as_of | Yes | ISO timestamp of when this result was produced; prices are live as of this moment. |
| products | Yes | |
| thread_id | Yes | Conversation thread ID. Pass it back unchanged as `thread_id` on every follow-up call in this conversation. |
| session_id | No | PostHog MCP session ID for analytics correlation. |
| unresolved | No | |
| server_origin | No | Origin of this MCP server; the storefront UI posts analytics events here. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already mark the tool as read-only/idempotent, and the description adds critical behavioral context: results are returned in the storefront UI, and the thread_id must be propagated unchanged to every subsequent Channel3 call, including unrelated searches. This goes beyond annotations and is essential for correct stateful usage.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is front-loaded with purpose and usage, and the key behavioral details are present. However, the final two sentences about thread_id largely repeat information already in the schema's thread_id parameter description, adding redundancy that could be trimmed without losing necessary emphasis.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the simple two-parameter tool with an output schema present, the description covers purpose, usage, and the critical thread_id statefulness rule. It does not need to explain return values due to the output schema, and the context is sufficient for correct invocation.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100% for both parameters, so the baseline is 3. The description adds meaning by clarifying that product_ids can be IDs from search results or retailer URLs, and that multiple IDs are fetched in parallel for comparison, which enriches the schema's bare field descriptions.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states a specific action ('Get full product data') with a defined resource (offers, description, attributes, images) and identifies two input methods (product ID or retailer URL). It distinguishes itself from siblings by explicitly referencing search_products and noting batch comparison, making its purpose unambiguous.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides explicit guidance to use search_products to find products first and suggests passing multiple IDs for comparison. However, it does not clarify when to prefer get_products over sibling tools like get_details or get_similar, so it lacks full exclusions or alternative scenarios.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_similarGet Similar ProductsBRead-onlyIdempotentInspect
Find products similar to a given product, for the storefront UI.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | ||
| device_id | No | ||
| thread_id | No | ||
| product_id | Yes | Canonical product ID to find similar products for. |
Output Schema
| Name | Required | Description |
|---|---|---|
| products | Yes | |
| next_page_token | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint, idempotentHint, and destructiveHint, covering the safety profile. The description adds no behavioral detail beyond the basic function and does not explain what it returns, any limitations, or side effects beyond what annotations imply. It is consistent with annotations, so no contradiction, but adds minimal value.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single, concise sentence that front-loads the verb and object. It is efficient, avoids redundancy, and is free of fluff. Every word earns its place.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With 4 parameters and only 25% schema coverage, the description is inadequate. It does not clarify the purpose of limit, device_id, or thread_id, nor does it provide usage context relative to sibling tools. Even with an output schema, the description fails to give an agent enough to confidently invoke the tool correctly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is only 25% (only product_id has a description). The description implicitly covers product_id ('given a product') but provides no semantics for limit, device_id, or thread_id. With such low coverage, the description should compensate but fails to explain the meaning or purpose of these parameters.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the action ('Find products similar to a given product') and the context ('for the storefront UI'). It is specific and distinct from sibling tools like search_products (query-based) and browse_products (general browsing). The verb and resource are unambiguous.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides no guidance on when to use this tool versus its siblings. It only hints at 'storefront UI' but does not explain scenarios, exclusions, or how it differs from search_products or browse_products. An agent is left to infer usage.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
search_productsSearch ProductsARead-onlyIdempotentInspect
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.
| Name | Required | Description | Default |
|---|---|---|---|
| query | No | One 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_url | No | Public image URL for visual search. Combine with `query` for text + image. | |
| thread_id | No | 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. |
Output Schema
| Name | Required | Description |
|---|---|---|
| seq | No | |
| as_of | Yes | ISO timestamp of when this result was produced; prices are live as of this moment. |
| query | No | The text query this result answers. |
| products | Yes | |
| image_url | No | The image URL this result answers. |
| thread_id | Yes | Conversation thread ID. Pass it back unchanged as `thread_id` on every follow-up call in this conversation. |
| session_id | No | PostHog MCP session ID for analytics correlation. |
| server_origin | No | Origin of this MCP server; the storefront UI posts analytics events here. |
| next_page_token | Yes | Opaque pagination token used by the storefront UI; not usable via this tool. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Beyond the annotations (readOnlyHint, idempotentHint), the description discloses key behavior: 'Returns up to 8 product cards plus structured product data' and the critical requirement to propagate the returned thread_id on every subsequent Channel3 call. This adds substantial behavioral context that annotations alone do not provide. No contradiction with annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is concise, with purpose front-loaded in the first sentence and every subsequent sentence earning its place. The detailed thread_id instruction is essential and clearly emphasized. No filler or repetition relative to what annotations already cover.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the annotations, output schema, and fully described parameters, the description covers the essential operational aspects: what to search, how to batch calls, constraints, return format, and mandatory thread_id propagation. It is slightly less complete in not clarifying how it relates to sibling tools, but that is not required for a correct invocation.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the schema already fully documents query, image_url, and thread_id. The description's mention of putting constraints in query and the thread_id propagation echoes the schema without adding new parameter-level detail. The baseline of 3 applies because the schema carries the burden.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific verb and resource: 'Search 100M+ products across thousands of retailers for one product type.' This clearly conveys what the tool does and that it focuses on product-type search. It does not explicitly name or differentiate from sibling search tools such as browse_products or get_products, so it misses the top score.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description gives clear invocation guidance: 'Call once for each distinct product type, and send independent calls together' and 'Put relevant constraints in query.' This provides good context on how to use the tool, though it does not mention when not to use it or how it differs from the sibling alternatives.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
Tool Schema Changelog
Recent tool additions, removals, and schema changes observed during successful MCP inspections.
3 tool updates
- Changed
browse_products2 fields changed- removed
Output schema / properties / next_page_token / anyOfRemoved value: -[ - { - "type": "string" - }, - { - "type": "null" - } -] - added
Output schema / properties / next_page_token / typeAdded value: +[ + "string", + "null" +]
- Changed
get_similar2 fields changed- removed
Output schema / properties / next_page_token / anyOfRemoved value: -[ - { - "type": "string" - }, - { - "type": "null" - } -] - added
Output schema / properties / next_page_token / typeAdded value: +[ + "string", + "null" +]
- Changed
search_products4 fields changed- removed
Output schema / properties / next_page_token / anyOfRemoved value: -[ - { - "type": "string" - }, - { - "type": "null" - } -] - added
Output schema / properties / next_page_token / typeAdded value: +[ + "string", + "null" +] - removed
Output schema / properties / products / items / properties / offers / items / properties / price / properties / compare_at_price / anyOfRemoved value: -[ - { - "type": "number" - }, - { - "type": "null" - } -] - added
Output schema / properties / products / items / properties / offers / items / properties / price / properties / compare_at_price / typeAdded value: +[ + "number", + "null" +]
4 tool updates
- Changed
browse_products1 field changed- added
Input schema / properties / device_idAdded value: +{ + "type": "string" +}
- Changed
get_details1 field changed- added
Input schema / properties / device_idAdded value: +{ + "type": "string" +}
- Changed
get_price_history1 field changed- added
Input schema / properties / device_idAdded value: +{ + "type": "string" +}
- Changed
get_similar1 field changed- added
Input schema / properties / device_idAdded value: +{ + "type": "string" +}
2 tool updates
- Changed
get_details1 field changed- added
Input schema / properties / selected_optionsAdded value: +{ + "additionalProperties": { + "type": "string" + }, + "description": "Variant configuration as `{ optionName: label }` for re-resolving offers.", + "propertyNames": { + "type": "string" + }, + "type": "object" +}
- Changed
get_price_history3 fields changed- added
Input schema / properties / selected_optionsAdded value: +{ + "additionalProperties": { + "type": "string" + }, + "description": "Variant configuration as `{ optionName: label }` for re-resolving offers.", + "propertyNames": { + "type": "string" + }, + "type": "object" +} - added
Output schema / properties / canonical_product_idAdded value: +{ + "type": "string" +} - changed
Output schema / requiredPrevious value: -[ - "history", - "statistics" -]New value: +[ + "canonical_product_id", + "history", + "statistics" +]
6 tool updates
- Changed
browse_products1 field changed- added
Input schema / properties / thread_idAdded value: +{ + "type": "string" +}
- Changed
get_details1 field changed- added
Input schema / properties / thread_idAdded value: +{ + "type": "string" +}
- Changed
get_price_history1 field changed- added
Input schema / properties / thread_idAdded value: +{ + "type": "string" +}
- Changed
get_products5 fields changed- added
Input schema / properties / thread_idAdded 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" +} - added
Output schema / properties / server_originAdded value: +{ + "description": "Origin of this MCP server; the storefront UI posts analytics events here.", + "type": "string" +} - added
Output schema / properties / session_idAdded value: +{ + "description": "PostHog MCP session ID for analytics correlation.", + "type": "string" +} - added
Output schema / properties / thread_idAdded value: +{ + "description": "Conversation thread ID. Pass it back unchanged as `thread_id` on every follow-up call in this conversation.", + "type": "string" +} - changed
Output schema / requiredPrevious value: -[ - "products", - "as_of" -]New value: +[ + "products", + "as_of", + "thread_id" +]
- Changed
get_similar1 field changed- added
Input schema / properties / thread_idAdded value: +{ + "type": "string" +}
- Changed
search_products5 fields changed- added
Input schema / properties / thread_idAdded 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" +} - added
Output schema / properties / server_originAdded value: +{ + "description": "Origin of this MCP server; the storefront UI posts analytics events here.", + "type": "string" +} - added
Output schema / properties / session_idAdded value: +{ + "description": "PostHog MCP session ID for analytics correlation.", + "type": "string" +} - added
Output schema / properties / thread_idAdded value: +{ + "description": "Conversation thread ID. Pass it back unchanged as `thread_id` on every follow-up call in this conversation.", + "type": "string" +} - changed
Output schema / requiredPrevious value: -[ - "products", - "next_page_token", - "as_of" -]New value: +[ + "products", + "next_page_token", + "as_of", + "thread_id" +]
1 tool update
- Changed
search_products6 fields changed- removed
Output schema / properties / products / items / properties / ageRemoved value: -{ - "anyOf": [ - { - "enum": [ - "newborn", - "infant", - "toddler", - "kids", - "adult" - ], - "type": "string" - }, - { - "type": "null" - } - ] -} - removed
Output schema / properties / products / items / properties / categoryRemoved value: -{ - "anyOf": [ - { - "additionalProperties": {}, - "properties": { - "has_children": { - "type": "boolean" - }, - "slug": { - "type": "string" - }, - "title": { - "type": "string" - } - }, - "required": [ - "slug", - "title", - "has_children" - ], - "type": "object" - }, - { - "type": "null" - } - ] -} - removed
Output schema / properties / products / items / properties / descriptionRemoved value: -{ - "anyOf": [ - { - "type": "string" - }, - { - "type": "null" - } - ] -} - removed
Output schema / properties / products / items / properties / genderRemoved value: -{ - "anyOf": [ - { - "enum": [ - "male", - "female", - "unisex" - ], - "type": "string" - }, - { - "type": "null" - } - ] -} - removed
Output schema / properties / products / items / properties / structured_attributesRemoved value: -{ - "additionalProperties": { - "items": { - "type": "string" - }, - "type": "array" - }, - "propertyNames": { - "type": "string" - }, - "type": "object" -} - added
Output schema / properties / seqAdded value: +{ + "maximum": 9007199254740991, + "minimum": -9007199254740991, + "type": "integer" +}
2 tool updates
- Changed
browse_products3 fields changed- changed
Input schema / properties / image_url / descriptionPrevious value: -"A public URL of an image. The tool finds products that look like the image. Add `query` to search with text and the image together."New value: +"Public image URL for visual search. Combine with `query` for text + image." - changed
Input schema / properties / query / descriptionPrevious value: -"One product with its objective attributes, as a retailer prints them on the product page. This tool has no filter parameters. Put every constraint in this text: brand, retailer, color, material, size, price, gender.\nCorrect: \"red leather jacket under $200\"\nCorrect: \"low-top off-white suede sneakers\"\nCorrect: \"leather golf glove under $40\"\nWrong: \"cool sneakers\"\nWrong: \"good birthday gifts for dad\"\nDo not write an opinion word, for example \"cool\", \"stylish\", or \"best\". The search engine matches an opinion word to the names of products. The query \"cool sneakers\" returns a shoe line with the name \"Cool\". Write the attributes that cause the opinion."New value: +"One product type and its constraints in natural language (brand, color, material, size, price, gender).\nGood: \"red leather jacket under $200\"; \"leather golf glove under $40\".\nBad: \"gift ideas for dad\"; \"cool sneakers\"; \"golf glove or rangefinder\"." - added
Input schema / properties / query / minLengthAdded value: +1
- Changed
search_products5 fields changed- changed
Input schema / properties / image_url / descriptionPrevious value: -"A public URL of an image. The tool finds products that look like the image. Add `query` to search with text and the image together."New value: +"Public image URL for visual search. Combine with `query` for text + image." - changed
Input schema / properties / query / descriptionPrevious value: -"One product with its objective attributes, as a retailer prints them on the product page. This tool has no filter parameters. Put every constraint in this text: brand, retailer, color, material, size, price, gender.\nCorrect: \"red leather jacket under $200\"\nCorrect: \"low-top off-white suede sneakers\"\nCorrect: \"leather golf glove under $40\"\nWrong: \"cool sneakers\"\nWrong: \"good birthday gifts for dad\"\nDo not write an opinion word, for example \"cool\", \"stylish\", or \"best\". The search engine matches an opinion word to the names of products. The query \"cool sneakers\" returns a shoe line with the name \"Cool\". Write the attributes that cause the opinion."New value: +"One product type and its constraints in natural language (brand, color, material, size, price, gender).\nGood: \"red leather jacket under $200\"; \"leather golf glove under $40\".\nBad: \"gift ideas for dad\"; \"cool sneakers\"; \"golf glove or rangefinder\"." - added
Input schema / properties / query / minLengthAdded value: +1 - added
Output schema / properties / image_urlAdded value: +{ + "description": "The image URL this result answers.", + "type": "string" +} - added
Output schema / properties / queryAdded value: +{ + "description": "The text query this result answers.", + "type": "string" +}
2 tool updates
- Changed
browse_products2 fields changed- changed
Input schema / properties / image_url / descriptionPrevious value: -"Public image URL for visual search. Combine with `query` for text+image search."New value: +"A public URL of an image. The tool finds products that look like the image. Add `query` to search with text and the image together." - changed
Input schema / properties / query / descriptionPrevious value: -"One specific product, described concretely: item type plus attributes, e.g. 'self-stirring coffee mug' or 'red leather jacket under $200'. This is semantic (meaning-based) search, not keyword matching - synonym lists and generic category words like 'good birthday gifts' dilute the embedding and return generic results. One concrete idea per call; run separate searches for separate ideas. Constraints (brand, retailer, color, size, price range, gender) go inline in the description."New value: +"One product with its objective attributes, as a retailer prints them on the product page. This tool has no filter parameters. Put every constraint in this text: brand, retailer, color, material, size, price, gender.\nCorrect: \"red leather jacket under $200\"\nCorrect: \"low-top off-white suede sneakers\"\nCorrect: \"leather golf glove under $40\"\nWrong: \"cool sneakers\"\nWrong: \"good birthday gifts for dad\"\nDo not write an opinion word, for example \"cool\", \"stylish\", or \"best\". The search engine matches an opinion word to the names of products. The query \"cool sneakers\" returns a shoe line with the name \"Cool\". Write the attributes that cause the opinion."
- Changed
search_products2 fields changed- changed
Input schema / properties / image_url / descriptionPrevious value: -"Public image URL for visual search. Combine with `query` for text+image search."New value: +"A public URL of an image. The tool finds products that look like the image. Add `query` to search with text and the image together." - changed
Input schema / properties / query / descriptionPrevious value: -"One specific product, described concretely: item type plus attributes, e.g. 'self-stirring coffee mug' or 'red leather jacket under $200'. This is semantic (meaning-based) search, not keyword matching - synonym lists and generic category words like 'good birthday gifts' dilute the embedding and return generic results. One concrete idea per call; run separate searches for separate ideas. Constraints (brand, retailer, color, size, price range, gender) go inline in the description."New value: +"One product with its objective attributes, as a retailer prints them on the product page. This tool has no filter parameters. Put every constraint in this text: brand, retailer, color, material, size, price, gender.\nCorrect: \"red leather jacket under $200\"\nCorrect: \"low-top off-white suede sneakers\"\nCorrect: \"leather golf glove under $40\"\nWrong: \"cool sneakers\"\nWrong: \"good birthday gifts for dad\"\nDo not write an opinion word, for example \"cool\", \"stylish\", or \"best\". The search engine matches an opinion word to the names of products. The query \"cool sneakers\" returns a shoe line with the name \"Cool\". Write the attributes that cause the opinion."
7 tool updates
- Added
browse_products - Added
get_details - Added
get_price_history - Removed
get_product - Added
get_products - Added
get_similar - Changed
search_products11 fields changed- changed
Input schema / properties / query / descriptionPrevious value: -"Natural-language product search. Include any constraints inline (brand, retailer, category, color, size, price range, gender, etc.). Required unless `image_url` is given."New value: +"One specific product, described concretely: item type plus attributes, e.g. 'self-stirring coffee mug' or 'red leather jacket under $200'. This is semantic (meaning-based) search, not keyword matching - synonym lists and generic category words like 'good birthday gifts' dilute the embedding and return generic results. One concrete idea per call; run separate searches for separate ideas. Constraints (brand, retailer, color, size, price range, gender) go inline in the description." - added
Output schema / properties / as_ofAdded value: +{ + "description": "ISO timestamp of when this result was produced; prices are live as of this moment.", + "type": "string" +} - added
Output schema / properties / next_page_tokenAdded value: +{ + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "description": "Opaque pagination token used by the storefront UI; not usable via this tool." +} - changed
Output schema / properties / products / items / properties / age / anyOfPrevious value: -[ - { - "type": "string" - }, - { - "type": "null" - } -]New value: +[ + { + "enum": [ + "newborn", + "infant", + "toddler", + "kids", + "adult" + ], + "type": "string" + }, + { + "type": "null" + } +] - removed
Output schema / properties / products / items / properties / brandRemoved value: -{ - "type": "string" -} - added
Output schema / properties / products / items / properties / brandsAdded value: +{ + "items": { + "additionalProperties": {}, + "properties": { + "id": { + "type": "string" + }, + "name": { + "type": "string" + } + }, + "required": [ + "id", + "name" + ], + "type": "object" + }, + "type": "array" +} - changed
Output schema / properties / products / items / properties / category / anyOfPrevious value: -[ - { - "type": "string" - }, - { - "type": "null" - } -]New value: +[ + { + "additionalProperties": {}, + "properties": { + "has_children": { + "type": "boolean" + }, + "slug": { + "type": "string" + }, + "title": { + "type": "string" + } + }, + "required": [ + "slug", + "title", + "has_children" + ], + "type": "object" + }, + { + "type": "null" + } +] - changed
Output schema / properties / products / items / properties / gender / anyOfPrevious value: -[ - { - "type": "string" - }, - { - "type": "null" - } -]New value: +[ + { + "enum": [ + "male", + "female", + "unisex" + ], + "type": "string" + }, + { + "type": "null" + } +] - removed
Output schema / properties / products / items / properties / imageRemoved value: -{ - "type": "string" -} - added
Output schema / properties / products / items / properties / imagesAdded value: +{ + "items": { + "additionalProperties": {}, + "properties": { + "url": { + "type": "string" + } + }, + "required": [ + "url" + ], + "type": "object" + }, + "type": "array" +} - changed
Output schema / requiredPrevious value: -[ - "products" -]New value: +[ + "products", + "next_page_token", + "as_of" +]
2 tool updates
- Changed
get_product2 fields changed- changed
Input schema / $schemaPrevious value: -"http://json-schema.org/draft-07/schema#"New value: +"https://json-schema.org/draft/2020-12/schema" - changed
Output schema / (root)Previous value: -nullNew value: +{ + "$schema": "https://json-schema.org/draft/2020-12/schema", + "additionalProperties": {}, + "properties": { + "id": { + "type": "string" + } + }, + "required": [ + "id" + ], + "type": "object" +}
- Changed
search_products2 fields changed- changed
Input schema / $schemaPrevious value: -"http://json-schema.org/draft-07/schema#"New value: +"https://json-schema.org/draft/2020-12/schema" - changed
Output schema / (root)Previous value: -nullNew value: +{ + "$schema": "https://json-schema.org/draft/2020-12/schema", + "additionalProperties": false, + "properties": { + "products": { + "items": { + "additionalProperties": {}, + "properties": { + "age": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ] + }, + "brand": { + "type": "string" + }, + "category": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ] + }, + "description": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ] + }, + "gender": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ] + }, + "id": { + "type": "string" + }, + "image": { + "type": "string" + }, + "offers": { + "items": { + "additionalProperties": {}, + "properties": { + "availability": { + "enum": [ + "InStock", + "OutOfStock" + ], + "type": "string" + }, + "domain": { + "type": "string" + }, + "price": { + "additionalProperties": false, + "properties": { + "compare_at_price": { + "anyOf": [ + { + "type": "number" + }, + { + "type": "null" + } + ] + }, + "currency": { + "type": "string" + }, + "price": { + "type": "number" + } + }, + "required": [ + "currency", + "price" + ], + "type": "object" + }, + "url": { + "type": "string" + } + }, + "required": [ + "availability", + "domain", + "price", + "url" + ], + "type": "object" + }, + "type": "array" + }, + "structured_attributes": { + "additionalProperties": { + "items": { + "type": "string" + }, + "type": "array" + }, + "propertyNames": { + "type": "string" + }, + "type": "object" + }, + "title": { + "type": "string" + } + }, + "required": [ + "id", + "title" + ], + "type": "object" + }, + "type": "array" + } + }, + "required": [ + "products" + ], + "type": "object" +}
3 tool updates
- Added
get_product - Removed
search - Added
search_products
1 tool update
- First observed
search
Related MCP Servers
- AlicenseAqualityCmaintenanceEnables brand visibility monitoring across major AI platforms like ChatGPT, Claude, Gemini, and Perplexity. It allows users to track visibility scores, analyze competitor data, and receive actionable insights to improve AI-generated brand recommendations.169 npm1MIT
- AlicenseCqualityAmaintenanceCompetitor Monitor AI - MCP server providing AI-powered tools and automation by MEOK AI Labs119 npm107 PyPIMIT
- AlicenseNot gradedqualityBmaintenanceEnables tracking competitor websites, changelogs, blog feeds, and pricing pages with meaningful diffs, classification, and Markdown digests via MCP tools for listing, adding, removing competitors, running checks, and retrieving digests or changes.MIT

industrylens-mcpofficial
AlicenseNot gradedqualityBmaintenanceBrowse IndustryLens's published competitive-intelligence reports and head-to-head competitor comparisons from any AI agent — real, source-backed data.MIT
Glama MCP Gateway
Add one secure layer between your agents and this server.