MCP Server

Channel3 Shopping

com.trychannel3/shopping
Commerce & Retail Public & reachable MCP 2025-11-25

What this MCP does

Searches a large multi-retailer product catalog, compares offers and prices, retrieves price history, and finds similar products.

browse_products
Browse Products
Search and page through products for the storefront UI.
Read only Idempotent
Input schema
{'type': 'object', '$schema': 'https://json-schema.org/draft/2020-12/schema', 'properties': {'limit': {'type': 'integer', 'default': 20, 'maximum': 30, 'minimum': 1}, 'query': {'type': 'string', 'minLength': 1, 'description': '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".'}, 'device_id': {'type': 'string'}, 'image_url': {'type': 'string', 'description': 'Public image URL for visual search. Combine with `query` for text + image.'}, 'thread_id': {'type': 'string'}, 'page_token': {'type': 'string', 'description': "Token from a previous response's next_page_token."}}}
Output schema
{'type': 'object', '$schema': 'https://json-schema.org/draft/2020-12/schema', 'required': ['products', 'next_page_token'], 'properties': {'products': {'type': 'array', 'items': {'type': 'object', 'required': ['id', 'title'], 'properties': {'id': {'type': 'string'}, 'title': {'type': 'string'}}, 'additionalProperties': {}}}, 'next_page_token': {'type': ['string', 'null']}}, 'additionalProperties': False}
get_details
Get Product Details
Fetch a product with live offers, for the storefront UI.
Read only Idempotent
Input schema
{'type': 'object', '$schema': 'https://json-schema.org/draft/2020-12/schema', 'required': ['product_id'], 'properties': {'device_id': {'type': 'string'}, 'thread_id': {'type': 'string'}, 'product_id': {'type': 'string', 'description': 'Canonical product ID.'}, 'selected_options': {'type': 'object', 'description': 'Variant configuration as `{ optionName: label }` for re-resolving offers.', 'propertyNames': {'type': 'string'}, 'additionalProperties': {'type': 'string'}}}}
Output schema
{'type': 'object', '$schema': 'https://json-schema.org/draft/2020-12/schema', 'required': ['product'], 'properties': {'product': {'type': 'object', 'required': ['id', 'title'], 'properties': {'id': {'type': 'string'}, 'title': {'type': 'string'}}, 'additionalProperties': {}}}, 'additionalProperties': False}
get_price_history
Get Price History
Fetch 30-day price history for a product, for the storefront UI.
Read only Idempotent
Input schema
{'type': 'object', '$schema': 'https://json-schema.org/draft/2020-12/schema', 'required': ['product_id'], 'properties': {'device_id': {'type': 'string'}, 'thread_id': {'type': 'string'}, 'product_id': {'type': 'string', 'description': 'Canonical product ID.'}, 'selected_options': {'type': 'object', 'description': 'Variant configuration as `{ optionName: label }` for re-resolving offers.', 'propertyNames': {'type': 'string'}, 'additionalProperties': {'type': 'string'}}}}
Output schema
{'type': 'object', '$schema': 'https://json-schema.org/draft/2020-12/schema', 'required': ['canonical_product_id', 'history', 'statistics'], 'properties': {'history': {'type': 'array', 'items': {'type': 'object', 'required': ['currency', 'price', 'timestamp'], 'properties': {'price': {'type': 'number'}, 'currency': {'type': 'string'}, 'timestamp': {'type': 'string'}}, 'additionalProperties': False}}, 'statistics': {'anyOf': [{'type': 'object', 'required': ['currency', 'current_price', 'current_status', 'max_price', 'mean', 'min_price', 'std_dev'], 'properties': {'mean': {'type': 'number'}, 'std_dev': {'type': 'number'}, 'currency': {'type': 'string'}, 'max_price': {'type': 'number'}, 'min_price': {'type': 'number'}, 'current_price': {'type': 'number'}, 'current_status': {'enum': ['low', 'typical', 'high'], 'type': 'string'}}, 'additionalProperties': False}, {'type': 'null'}]}, 'canonical_product_id': {'type': 'string'}}, 'additionalProperties': False}
get_products
Get Products
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.
Read only Idempotent
Input schema
{'type': 'object', '$schema': 'https://json-schema.org/draft/2020-12/schema', 'required': ['product_ids'], 'properties': {'thread_id': {'type': 'string', '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 â\x80\x94 even when the new call is a completely different product search.'}, 'product_ids': {'type': 'array', 'items': {'type': 'string', 'description': 'Product ID (from a `search_products` result) or URL.'}, 'maxItems': 40, 'minItems': 1, 'description': 'Products to fetch in parallel.'}}}
Output schema
{'type': 'object', '$schema': 'https://json-schema.org/draft/2020-12/schema', 'required': ['products', 'as_of', 'thread_id'], 'properties': {'as_of': {'type': 'string', 'description': 'ISO timestamp of when this result was produced; prices are live as of this moment.'}, 'products': {'type': 'array', 'items': {'type': 'object', 'required': ['id', 'title'], 'properties': {'id': {'type': 'string'}, 'title': {'type': 'string'}}, 'additionalProperties': {}}}, 'thread_id': {'type': 'string', 'description': 'Conversation thread ID. Pass it back unchanged as `thread_id` on every follow-up call in this conversation.'}, 'session_id': {'type': 'string', 'description': 'PostHog MCP session ID for analytics correlation.'}, 'unresolved': {'type': 'array', 'items': {'type': 'string'}}, 'server_origin': {'type': 'string', 'description': 'Origin of this MCP server; the storefront UI posts analytics events here.'}}, 'additionalProperties': False}
get_similar
Get Similar Products
Find products similar to a given product, for the storefront UI.
Read only Idempotent
Input schema
{'type': 'object', '$schema': 'https://json-schema.org/draft/2020-12/schema', 'required': ['product_id'], 'properties': {'limit': {'type': 'integer', 'default': 20, 'maximum': 30, 'minimum': 1}, 'device_id': {'type': 'string'}, 'thread_id': {'type': 'string'}, 'product_id': {'type': 'string', 'description': 'Canonical product ID to find similar products for.'}}}
Output schema
{'type': 'object', '$schema': 'https://json-schema.org/draft/2020-12/schema', 'required': ['products', 'next_page_token'], 'properties': {'products': {'type': 'array', 'items': {'type': 'object', 'required': ['id', 'title'], 'properties': {'id': {'type': 'string'}, 'title': {'type': 'string'}}, 'additionalProperties': {}}}, 'next_page_token': {'type': ['string', 'null']}}, 'additionalProperties': False}
search_products
Search Products
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.
Read only Idempotent
Input schema
{'type': 'object', '$schema': 'https://json-schema.org/draft/2020-12/schema', 'properties': {'query': {'type': 'string', 'minLength': 1, 'description': '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".'}, 'image_url': {'type': 'string', 'description': 'Public image URL for visual search. Combine with `query` for text + image.'}, 'thread_id': {'type': 'string', '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 â\x80\x94 even when the new call is a completely different product search.'}}}
Output schema
{'type': 'object', '$schema': 'https://json-schema.org/draft/2020-12/schema', 'required': ['products', 'next_page_token', 'as_of', 'thread_id'], 'properties': {'seq': {'type': 'integer', 'maximum': 9007199254740991, 'minimum': -9007199254740991}, 'as_of': {'type': 'string', 'description': 'ISO timestamp of when this result was produced; prices are live as of this moment.'}, 'query': {'type': 'string', 'description': 'The text query this result answers.'}, 'products': {'type': 'array', 'items': {'type': 'object', 'required': ['id', 'title'], 'properties': {'id': {'type': 'string'}, 'title': {'type': 'string'}, 'brands': {'type': 'array', 'items': {'type': 'object', 'required': ['id', 'name'], 'properties': {'id': {'type': 'string'}, 'name': {'type': 'string'}}, 'additionalProperties': {}}}, 'images': {'type': 'array', 'items': {'type': 'object', 'required': ['url'], 'properties': {'url': {'type': 'string'}}, 'additionalProperties': {}}}, 'offers': {'type': 'array', 'items': {'type': 'object', 'required': ['availability', 'domain', 'price', 'url'], 'properties': {'url': {'type': 'string'}, 'price': {'type': 'object', 'required': ['currency', 'price'], 'properties': {'price': {'type': 'number'}, 'currency': {'type': 'string'}, 'compare_at_price': {'type': ['number', 'null']}}, 'additionalProperties': False}, 'domain': {'type': 'string'}, 'availability': {'enum': ['InStock', 'OutOfStock'], 'type': 'string'}}, 'additionalProperties': {}}}}, 'additionalProperties': {}}}, 'image_url': {'type': 'string', 'description': 'The image URL this result answers.'}, 'thread_id': {'type': 'string', 'description': 'Conversation thread ID. Pass it back unchanged as `thread_id` on every follow-up call in this conversation.'}, 'session_id': {'type': 'string', 'description': 'PostHog MCP session ID for analytics correlation.'}, 'server_origin': {'type': 'string', 'description': 'Origin of this MCP server; the storefront UI posts analytics events here.'}, 'next_page_token': {'type': ['string', 'null'], 'description': 'Opaque pagination token used by the storefront UI; not usable via this tool.'}}, 'additionalProperties': False}
Added
get_price_history
Sept. 17, 2026, 12:38 p.m.
Added
get_details
Sept. 17, 2026, 12:38 p.m.
Added
get_similar
Sept. 17, 2026, 12:38 p.m.
Added
browse_products
Sept. 17, 2026, 12:38 p.m.
Added
get_products
Sept. 17, 2026, 12:38 p.m.
Added
search_products
Sept. 17, 2026, 12:38 p.m.