{"serverId":"mcp-registry/io.github.48x-ai/marketbasketanalysis-mcp","tools":[{"name":"analyze_basket","fixed":{"name":"analyze_basket","description":"Run market-basket analysis on a proposed basket / bundle to score its cohesion. Given 2+ products, returns a cohesion score 0..1 representing how strongly they bind together (their affinity) in the merchant's order data. Use this to vet a proposed bundle BEFORE recommending it, so agents can avoid suggesting bundles that look plausible but have no statistical signal. Also useful for 'is this a good bundle?', 'analyze this basket', or 'do these products go together?' questions.","inputSchema":{"type":"object","required":["product_ids"],"properties":{"product_ids":{"type":"array","items":{"type":"string"},"maxItems":6,"minItems":2,"description":"The products in the proposed basket (2-6)."}}},"annotations":{"readOnlyHint":true}},"changes":[{"kind":"annotations","detail":"Added readOnlyHint: true (inferred from the name).","verify":true}],"tokensBefore":206,"tokensAfter":206},{"name":"execute_weekly_plan_action","fixed":{"name":"execute_weekly_plan_action","description":"Execute a specific action from the merchant's weekly plan (publish bundle, run mining job, archive rule, etc.). Idempotent by action_id, safe to retry. Use this AFTER the merchant has confirmed which action from get_weekly_plan they want to run; do not call preemptively.","inputSchema":{"type":"object","required":["action_id","confirm"],"properties":{"confirm":{"type":"boolean","default":false,"description":"Must be true to actually execute. Guard against accidental dispatch."},"action_id":{"type":"string","description":"The id of the action to execute, from get_weekly_plan."}}},"annotations":{"readOnlyHint":false,"destructiveHint":false,"idempotentHint":false}},"changes":[{"kind":"annotations","detail":"Added readOnlyHint: false, destructiveHint: false, idempotentHint: false (inferred from the name).","verify":true}],"tokensBefore":178,"tokensAfter":178},{"name":"explain_drift","fixed":{"name":"explain_drift","description":"Explain ONE drift alert: return its prior and current confidence (plus support, lift, and order sample count when the rule is still live) and a short plain-language narrative of how the pair moved versus the prior mining run. Use this when a merchant asks 'why did this pair drift?', 'explain this alert', or 'what changed for these two products?' after seeing it in get_drift_alerts. Different from get_drift_alerts: that lists the feed, this drills into a single alert_id with the change spelled ou","inputSchema":{"type":"object","required":["alert_id"],"properties":{"alert_id":{"type":"string","description":"The id of the drift alert to explain, from get_drift_alerts."}}},"annotations":{"readOnlyHint":true}},"changes":[{"kind":"annotations","detail":"Added readOnlyHint: true (inferred from the name).","verify":true}],"tokensBefore":200,"tokensAfter":200},{"name":"explain_opportunity","fixed":{"name":"explain_opportunity","description":"Explain ONE mined opportunity: return its support, confidence, lift, and order sample count plus a short plain-language narrative of why the pair is a good cross-sell. Use this when a merchant asks 'why is this a good cross-sell?', 'explain this opportunity', or 'why should I bundle these?' after seeing it in get_opportunities. Different from get_opportunities: that lists the ranked set, this drills into a single opportunity_id with the stats spelled out in a sentence. Different from get_rationa","inputSchema":{"type":"object","required":["opportunity_id"],"properties":{"opportunity_id":{"type":"string","description":"The id of the opportunity to explain, from get_opportunities."}}},"annotations":{"readOnlyHint":true}},"changes":[{"kind":"annotations","detail":"Added readOnlyHint: true (inferred from the name).","verify":true}],"tokensBefore":205,"tokensAfter":205},{"name":"find_substitutes","fixed":{"name":"find_substitutes","description":"For a given product, recommend the top substitute items that could REPLACE it (not complement it). Substitutes are the inverse of cross-sell: this answers 'what to buy instead', not 'what to buy with'. Use this when the user asks 'what's a substitute for X?', 'X is out of stock, what's a good alternative?', 'recommend a replacement for Y', 'find an equivalent product', or when a procurement agent needs to swap an unavailable SKU. Returns a ranked list with a similarity score and a reason (contex","inputSchema":{"type":"object","required":["product_id"],"properties":{"limit":{"type":"integer","default":3,"maximum":6,"minimum":1,"description":"Maximum number of substitutes to return. Default 3, max 6."},"product_id":{"type":"string","description":"Product id, either the numeric storefront id (e.g. '8472918765') or the platform-specific GID/SKU. The id of the product the user wants to REPLACE."}}},"annotations":{"readOnlyHint":true}},"changes":[{"kind":"annotations","detail":"Added readOnlyHint: true (inferred from the name).","verify":true}],"tokensBefore":264,"tokensAfter":264},{"name":"get_bundle_for_cart","fixed":{"name":"get_bundle_for_cart","description":"Given a list of products already in the cart, recommend products that frequently bundle with the cart to complete a high-confidence bundle. This is multi-item basket analysis for cart completion. Use when the user describes a multi-item cart and asks 'what else do I need?', 'what completes this set?', 'what's missing from this bundle?', 'recommend add-ons for this cart', or similar. Different from get_recommendations: this takes MULTIPLE products and returns items that pair with the cart as a wh","inputSchema":{"type":"object","required":["product_ids"],"properties":{"limit":{"type":"integer","default":3,"maximum":6,"minimum":1,"description":"Max suggestions to return. Default 3, max 6."},"product_ids":{"type":"array","items":{"type":"string"},"maxItems":20,"minItems":1,"description":"List of product ids currently in the cart (numeric or GID/SKU)."}}},"annotations":{"readOnlyHint":true}},"changes":[{"kind":"annotations","detail":"Added readOnlyHint: true (inferred from the name).","verify":true}],"tokensBefore":253,"tokensAfter":253},{"name":"get_drift_alerts","fixed":{"name":"get_drift_alerts","description":"For a merchant-ops or analytics agent: list active drift alerts, the recommendation rules whose confidence has materially changed (weakened, strengthened, disappeared, emerged) versus the prior mining job. Use this when a merchant asks 'what's changed?', 'is my model still accurate?', 'are any rules drifting?', or wants to investigate a SKU swap / seasonal shift.","inputSchema":{"type":"object","required":[],"properties":{"limit":{"type":"integer","default":10,"maximum":50,"minimum":1,"description":"Max alerts to return. Default 10, max 50."},"severity":{"enum":["high","medium","low","all"],"type":"string","default":"all","description":"Filter alerts by severity. Default 'all'."}}},"annotations":{"readOnlyHint":true}},"changes":[{"kind":"annotations","detail":"Added readOnlyHint: true (inferred from the name).","verify":true}],"tokensBefore":204,"tokensAfter":204},{"name":"get_forecast_alerts","fixed":{"name":"get_forecast_alerts","description":"For an inventory or merchant-ops agent: list forecast-based alerts, the bundles with stockout risk, demand drop, demand spike, or an unreliable forecast curve. Use this when a merchant asks 'what's at risk of stockout?', 'which bundles are losing demand?', 'do I need to reorder anything?', or 'what should I restock?'. Pair with forecast_bundle to drill into a specific bundle.","inputSchema":{"type":"object","required":[],"properties":{"kind":{"enum":["stockout_risk","demand_drop","demand_spike","unreliable_forecast","all"],"type":"string","default":"all","description":"Filter by alert kind. Default 'all'."},"limit":{"type":"integer","default":10,"maximum":50,"minimum":1,"description":"Max alerts to return. Default 10, max 50."},"severity":{"enum":["high","medium","low","all"],"type":"string","default":"all","description":"Filter by severity. Default 'all'."}}},"annotations":{"readOnlyHint":true}},"changes":[{"kind":"annotations","detail":"Added readOnlyHint: true (inferred from the name).","verify":true}],"tokensBefore":255,"tokensAfter":255},{"name":"get_opportunities","fixed":{"name":"get_opportunities","description":"List the merchant's ranked bundle / cross-sell opportunities mined from order history, with support / confidence / lift / revenue-weighted score. Use this when a merchant asks 'what are my top opportunities?', 'show me the best bundles I haven't published yet', or 'what should I prioritize?'. Pair with triage_opportunity to act on a specific one.","inputSchema":{"type":"object","required":[],"properties":{"limit":{"type":"integer","default":10,"maximum":50,"minimum":1,"description":"Max opportunities to return. Default 10, max 50."},"status":{"enum":["proposed","active","paused","archived","all"],"type":"string","default":"proposed","description":"Filter by opportunity status. Defaults to 'proposed' (untriaged)."}}},"annotations":{"readOnlyHint":true}},"changes":[{"kind":"annotations","detail":"Added readOnlyHint: true (inferred from the name).","verify":true}],"tokensBefore":214,"tokensAfter":214},{"name":"get_rationale","fixed":{"name":"get_rationale","description":"Fetch the one-sentence rationale for why product B is recommended alongside product A. Returns a short merchandiser-grade explanation ('these are commonly bought together by customers buying X') suitable for surfacing in a recommendation tile or chat reply. Use this after get_recommendations / get_bundle_for_cart when the agent or user asks 'why are these recommended together?' or 'explain this pairing'.","inputSchema":{"type":"object","required":["product_id","related_product_id"],"properties":{"product_id":{"type":"string","description":"The base product id (the antecedent in the recommendation rule)."},"related_product_id":{"type":"string","description":"The recommended product id (the consequent in the rule)."}}},"annotations":{"readOnlyHint":true}},"changes":[{"kind":"annotations","detail":"Added readOnlyHint: true (inferred from the name).","verify":true}],"tokensBefore":213,"tokensAfter":213},{"name":"get_recommendations","fixed":{"name":"get_recommendations","description":"For a given product, recommend the top complementary, frequently-bought-together products customers also bought, based on mined order-history association rules. This is the single-product cross-sell tool. Use this when the user asks 'what goes with X?', 'what should I bundle with X?', 'what do customers also buy with X?', 'recommend products to cross-sell with X', or similar single-product co-purchase questions. Works for Shopify, Magento, and WooCommerce merchants.","inputSchema":{"type":"object","required":["product_id"],"properties":{"limit":{"type":"integer","default":3,"maximum":6,"minimum":1,"description":"Maximum number of recommendations to return. Default 3, max 6."},"product_id":{"type":"string","description":"Product id, either the numeric storefront id (e.g. '8472918765') or the platform-specific GID/SKU. Both are accepted."}}},"annotations":{"readOnlyHint":true}},"changes":[{"kind":"annotations","detail":"Added readOnlyHint: true (inferred from the name).","verify":true}],"tokensBefore":250,"tokensAfter":250},{"name":"get_weekly_plan","fixed":{"name":"get_weekly_plan","description":"Fetch the current weekly action plan for the merchant: a ranked list of typed actions (publish opportunity, retire stale bundle, reorder inventory, investigate drift, etc.) the merchant should take this week. Use this when a merchant asks 'what should I work on this week?', 'what's on my plate?', 'show me my weekly plan', or wants a summary of pending tasks before opening the admin.","inputSchema":{"type":"object","required":[],"properties":{}},"annotations":{"readOnlyHint":true}},"changes":[{"kind":"annotations","detail":"Added readOnlyHint: true (inferred from the name).","verify":true}],"tokensBefore":137,"tokensAfter":137},{"name":"score_cross_sell","fixed":{"name":"score_cross_sell","description":"Score the cross-sell strength (product affinity) between two specific products. Returns the confidence the merchant's real co-purchase data supports for the pair, or a clear 'no signal' result when there's no qualifying rule. Use this to validate a proposed pair before recommending it, or to answer 'is X a good cross-sell for Y?', 'how strong is the affinity between X and Y?', or 'how often are X and Y bought together?'.","inputSchema":{"type":"object","required":["product_a","product_b"],"properties":{"product_a":{"type":"string","description":"The 'antecedent' product (the one the customer already has)."},"product_b":{"type":"string","description":"The 'consequent' product (the one being evaluated as a cross-sell)."}}},"annotations":{"readOnlyHint":false,"destructiveHint":false,"idempotentHint":false}},"changes":[{"kind":"annotations","detail":"Added readOnlyHint: false, destructiveHint: false, idempotentHint: false (inferred from the name).","verify":true}],"tokensBefore":215,"tokensAfter":215}],"toolsChanged":13,"tokensSaved":0,"todo":[],"note":"Deterministic fixes. Changes marked verify need a human look before shipping (renames, inferred annotations, inferred types, removed text). Parameter descriptions in `todo` need to be written by someone who knows the API."}