
Compare Israeli grocery prices
SuperMCP prices a shopping list against Israeli online supermarkets and tells you which store delivers it for the least, to your address. Give it a list in Hebrew and a delivery address.
https://supermcp.web.app/mcpShopping list to be DELIVERED → call exactly once with all items and the delivery address. Never price each line separately. Israeli online supermarket storefronts: catalogue, price and promotion data from the same regulated feeds as the shelf prices, plus each storefront's delivery terms. Online prices are NOT shelf prices — a chain's website runs its own price book, so quote what this server returns rather than a branch price. Call with items[{query|gtin|product_id, pack_qty|amount+unit}] and address (free-text, e.g. 'מנדלסון 1, תל אביב') or city. EVERY item query must be in HEBREW, whatever language the shopper used: the catalogue is Hebrew and a Latin brand name ('Pampers', 'Coca Cola') matches nothing, so the line is silently dropped. Translate before you call (פמפרס, קוקה קולה). If status is needs_confirmation, answer every required question and call again with only {continuation, answers}. ASK WHERE THE SHOPPER LIVES BEFORE PRICING, whenever you can get it in the same breath. A city is enough, and it usually decides the answer rather than sharpening it: most towns here are served by a single chain. It is also the cheap path, a handful of storefronts against every one in the country. Cannot ask? Call once with the items and no destination. Status needs_destination prices the list at every storefront in the country but tests none of them against a service area, so quote it as a range, never name a cheapest and never offer a link to order. Ask for the shopper's city, then call again with only {continuation, city}. THE HEADLINE NUMBER IS deliveredTotal, not the item subtotal: a ₪29 delivery fee outweighs most price differences between chains, so a storefront with dearer items can still win. Read each plan's itemsSubtotal, deliveryFee, deliveredTotal and deliveryTerms.confidence. Compare storefronts on deliveredComparableTotal, never on deliveredTotal: totalScope is priced_lines_only, so a storefront that stocks four of your twelve items reports a small deliveredTotal precisely because it cannot fill the basket. pricedLines out of requestedLines says how much of the list a plan actually covers, and imputedLines how many the comparable figure had to price at a market reference. Say so when coverage is partial. deliveryTerms.confidence=verified means we checked the retailer's own published terms on deliveryTerms.verifiedAt; reported means a cited secondary source. When it is unknown the fee is null and the ranking used assumedDeliveryFee, which is NOT a price and must not be repeated as one. When deliveryFeeIsFloor is true the fee is a published lower bound (a marketplace sets the real figure at checkout from the distance), so say 'from ₪X' and treat deliveredTotal as a minimum. meetsMinimum=false means the order CANNOT be placed as it stands: report amountToMinimum, the shekels of extra goods needed. Such a plan still appears in plans, after every orderable one, because a storefront held back only by its minimum is the shopper's call to make. Show it as an option that needs a top-up of that many shekels, never as one they can order now. cheapestDelivered ranks on a total that prices missing lines at a market reference, so it can win by not stocking things; bestSingleOrder is the most of the list obtainable in ONE order. When they differ, say so and let the shopper choose. Those three recommendation fields carry the totals only; look the storefront up in plans by serviceSlug for its priced lines. nextFeeBreak names a cheaper fee tier the shopper could reach: gap is the extra spend, saving is what it takes off the fee, and worthTopUp=true means spending it leaves them better off overall. Volunteer that unprompted. A priced line carrying cheaperAlternative can be met for less at the SAME storefront: it names the product, the packs needed, the new line total and the saving. Every one is cheaper per 100g/ml/piece as well as per line, so it is a real saving and not a smaller pack; quote the saving as it stands. Volunteer these when the shopper cares about money, present them as a choice, and never swap one in silently. splitOrder is the same list bought from two shops rather than one, with each leg's items, its own published fees and its own handoffUrl. reason=cheaper saves money after BOTH delivery fees; reason=more_of_the_list means no single shop stocks the whole list, costs more, and reports a negative saving. Volunteer it unprompted. null means one order is the right answer. asks the same question on its own and can spread over three shops. A line that names no quantity is priced as ONE pack and reported in assumptions with reason=quantity_defaulted — pass the shopper's own words through and do not invent numbers. reason=pack_multiple_applied is the opposite end of the same question: the line counted PACKS and the chosen product holds several items each, so pack_qty=4 on a six-pack is 24 bottles. Read it back to the shopper before quoting the line, and re-send with amount+unit=יח if they were counting items. reason=unit_count_assumed is the mirror of it and the one to watch: the line counted ITEMS and nothing states how many the chosen product holds, so it was priced as that many of the listing. The message names the filed size. If that listing is a multipack or a per-kilogram shelf price, the line is a multiple of what was asked, so check it before quoting the total and re-send that line with a mass or volume amount to price it exactly. Storefronts that cannot serve this basket are in unavailableStores with a reason, not silently dropped. At the default detail only the actionable ones are listed: below_minimum_order, and price_feed_stale for a chain that delivers here but whose price feed has been silent over a week, which is left out of plans rather than quoted from a dead feed. The rest are counted in unavailableStoresOmitted. Conditional prices are flagged exactly as on the shelf: clubOnly needs the chain loyalty card, couponOnly needs a clipped coupon. Set preference=cheapest to take the lowest delivered figure outright; leave it balanced (default) to prefer a storefront whose terms we verified when the money is close. Set slot_type=pickup for click-and-collect, which is cheaper where offered but means the shopper travels. Use to answer 'who delivers to me' without pricing a basket, and for one storefront's fee schedule, minimum and slots. Use / for single lines only. Given a city or address, answers 'how much is X': each hit carries fromPrice, the lowest at any storefront delivering there across pricedAtStorefronts shops, and normalizedUnitPrice, the same money per 100g/ml/piece. Compare on normalizedUnitPrice, quote fromPrice as 'from ₪X' and never as a national price, and never add those figures up into a basket — they sit at different storefronts, each with its own delivery fee. If the shopper says a priced line is wrong, call with their words in Hebrew and the rejected product_id, then call again with that product_id on the line. This is the SuperMCP server: Israeli online supermarket delivery and click-and-collect. protocol=delivery-optimize-v1; build=f8f69b0
None in the store listings or on the server