MCP Server

Forage Shopping

io.github.jalexspringer/forage-shopping
Commerce & Retail Public & reachable MCP 2025-11-25

What this MCP does

Searches products across merchants, compares prices and deals, and supports checkout, payment escalation, purchase completion, and order status checks.

check_order
Check the status of a checkout session or order. Use this after the user has completed an escalation step (e.g. payment in the browser) to see if the checkout can now proceed, or to check on a completed order's status.
Input schema
{'type': 'object', 'title': 'check_orderArguments', 'required': ['checkout_id'], 'properties': {'checkout_id': {'type': 'string', 'title': 'Checkout Id', 'description': 'The checkout session ID to check'}}}
Output schema
{'type': 'object', 'title': 'check_orderOutput', 'required': ['result'], 'properties': {'result': {'type': 'string', 'title': 'Result'}}}
compare_prices
Compare prices for a specific product across multiple merchants. Finds the same product at different retailers and shows price differences.
Input schema
{'type': 'object', 'title': 'compare_pricesArguments', 'required': ['product_name'], 'properties': {'session_id': {'anyOf': [{'type': 'string'}, {'type': 'null'}], 'title': 'Session Id', 'default': None, 'description': 'Optional session identifier to link tool calls in one conversation.'}, 'product_name': {'type': 'string', 'title': 'Product Name', 'description': "Specific product to compare prices for, e.g. 'Nike Pegasus 41'"}}}
Output schema
{'type': 'object', 'title': 'compare_pricesOutput', 'required': ['result'], 'properties': {'result': {'type': 'string', 'title': 'Result'}}}
complete_purchase
Complete a checkout and place the order. Only call this when the checkout status is 'ready_for_complete'. Records the purchase as a conversion in telemetry and ends the attribution session. Returns the order confirmation with order ID and receipt link.
Input schema
{'type': 'object', 'title': 'complete_purchaseArguments', 'required': ['checkout_id'], 'properties': {'session_id': {'anyOf': [{'type': 'string'}, {'type': 'null'}], 'title': 'Session Id', 'default': None, 'description': 'Session identifier for telemetry. Use the same one from search/checkout.'}, 'checkout_id': {'type': 'string', 'title': 'Checkout Id', 'description': 'The checkout session ID to complete'}}}
Output schema
{'type': 'object', 'title': 'complete_purchaseOutput', 'required': ['result'], 'properties': {'result': {'type': 'string', 'title': 'Result'}}}
find_deals
Find the best current deals in a product category. Searches for discounted, on-sale, or best-value products.
Input schema
{'type': 'object', 'title': 'find_dealsArguments', 'required': ['category'], 'properties': {'budget': {'anyOf': [{'type': 'string'}, {'type': 'null'}], 'title': 'Budget', 'default': None, 'description': "Optional budget limit, e.g. '£100', '$50'"}, 'category': {'type': 'string', 'title': 'Category', 'description': "Product category, e.g. 'headphones', 'running shoes', 'coffee machines'"}, 'session_id': {'anyOf': [{'type': 'string'}, {'type': 'null'}], 'title': 'Session Id', 'default': None, 'description': 'Optional session identifier to link tool calls in one conversation.'}}}
Output schema
{'type': 'object', 'title': 'find_dealsOutput', 'required': ['result'], 'properties': {'result': {'type': 'string', 'title': 'Result'}}}
search_products
Search for products across merchants and return comparison results. Returns structured product listings with prices, merchants, and checkout links. Searches Shopify's global catalogue (50M+ products across all Shopify merchants) and Channel3's affiliate network. Results include direct checkout links.
Input schema
{'type': 'object', 'title': 'search_productsArguments', 'required': ['query'], 'properties': {'query': {'type': 'string', 'title': 'Query', 'description': "What to search for, e.g. 'running shoes under £120'"}, 'session_id': {'anyOf': [{'type': 'string'}, {'type': 'null'}], 'title': 'Session Id', 'default': None, 'description': 'Optional session identifier to link tool calls in one conversation. Pass a stable string (e.g. conversation ID) across multiple tool calls.'}, 'max_results': {'type': 'integer', 'title': 'Max Results', 'default': 10, 'description': 'Maximum number of results to return'}}}
Output schema
{'type': 'object', 'title': 'search_productsOutput', 'required': ['result'], 'properties': {'result': {'type': 'string', 'title': 'Result'}}}
start_checkout
Start a UCP checkout session for a product. Discovers the merchant's UCP capabilities, creates a checkout session, and attaches content attribution data from the current session's search and comparison activity. Returns the checkout status and any information the merchant still needs (email, shipping address, etc).
Input schema
{'type': 'object', 'title': 'start_checkoutArguments', 'required': ['product_url'], 'properties': {'quantity': {'type': 'integer', 'title': 'Quantity', 'default': 1, 'description': 'Number of items to purchase'}, 'session_id': {'anyOf': [{'type': 'string'}, {'type': 'null'}], 'title': 'Session Id', 'default': None, 'description': 'Session identifier to link checkout with earlier search telemetry.'}, 'product_url': {'type': 'string', 'title': 'Product Url', 'description': "URL of the product to purchase. The merchant's domain is used for UCP discovery."}}}
Output schema
{'type': 'object', 'title': 'start_checkoutOutput', 'required': ['result'], 'properties': {'result': {'type': 'string', 'title': 'Result'}}}
update_checkout_info
Update a checkout session with buyer information. Provide the information the merchant requested (email, name, shipping address, discount codes). Call this after start_checkout when the merchant indicates what information is still needed. If the response has status 'requires_escalation', share the continue_url with the user so they can complete payment in their browser.
Input schema
{'type': 'object', 'title': 'update_checkout_infoArguments', 'required': ['checkout_id'], 'properties': {'buyer_name': {'anyOf': [{'type': 'string'}, {'type': 'null'}], 'title': 'Buyer Name', 'default': None, 'description': "Buyer's full name"}, 'buyer_email': {'anyOf': [{'type': 'string'}, {'type': 'null'}], 'title': 'Buyer Email', 'default': None, 'description': "Buyer's email address"}, 'checkout_id': {'type': 'string', 'title': 'Checkout Id', 'description': 'The checkout session ID from start_checkout'}, 'discount_code': {'anyOf': [{'type': 'string'}, {'type': 'null'}], 'title': 'Discount Code', 'default': None, 'description': 'Discount or promo code to apply'}, 'shipping_address': {'anyOf': [{'type': 'string'}, {'type': 'null'}], 'title': 'Shipping Address', 'default': None, 'description': 'Shipping address as a single string (the merchant will parse it)'}}}
Output schema
{'type': 'object', 'title': 'update_checkout_infoOutput', 'required': ['result'], 'properties': {'result': {'type': 'string', 'title': 'Result'}}}
Added
check_order
Sept. 17, 2026, 12:42 p.m.
Added
complete_purchase
Sept. 17, 2026, 12:42 p.m.
Added
update_checkout_info
Sept. 17, 2026, 12:42 p.m.
Added
start_checkout
Sept. 17, 2026, 12:42 p.m.
Added
find_deals
Sept. 17, 2026, 12:42 p.m.
Added
compare_prices
Sept. 17, 2026, 12:42 p.m.
Added
search_products
Sept. 17, 2026, 12:42 p.m.