7.7 KiB
7.7 KiB
name, description
| name | description |
|---|---|
| shopping | Intelligent shopping advisory, price comparisons across German supermarkets (Edeka, Rewe, Aldi, Lidl, Kaufland, Netto, Penny, dm, Rossmann), Geizhals retail best prices & price history, eBay marketplace searches, and Bring! shopping list management (Einkaufsladen, Baumarkt, Ikea, Gewuerzeinkaufsliste). Use when the user asks for shopping advice, supermarket offers, adding items to their shopping lists, or checking off items. |
🛒 Smart Shopper & Vorrats-Concierge
Comprehensive shopping advisor for the Graf family. Combines live German supermarket weekly brochures (Regensburg default), Geizhals retail price comparison & price histories, and eBay marketplace searches.
🛠️ MCP Tools Overview
1. Supermarket & Grocery Deals (supermarket)
supermarket_search(query, city="Regensburg", lat=49.0134, lng=12.1016):- Searches live weekly offers and digital brochures across Edeka, Rewe, Aldi Süd, Lidl, Kaufland, Netto Marken-Discount, Penny, dm, Rossmann, V-Markt, Müller.
- Returns price in EUR, retailer, brand, validity dates, distance in km, and brochure page.
supermarket_compare_staples(staples=["Mutti", "Oro di Parma"], city="Regensburg"):- Batch search for multiple staple brands or product categories to compare discounts across all local supermarkets in one view.
2. Retail Price Comparison & History (geizhals)
geizhals_search(query, country="de", limit=8):- Full-text search across Geizhals.de (and .at). Returns the best price, average price, offer count across all web shops, cheapest shop name, star ratings, and test review count & metascore.
geizhals_price_history(product_id, days=31, country="de"):- Analyzes 31, 91, 183, or 365-day price trends. Reports
period_min_price,current_best_price, and flags if it is anis_all_time_low.
- Analyzes 31, 91, 183, or 365-day price trends. Reports
3. Marketplace & Second-Hand (ebay)
ebay_search(query, condition, buying_format, min_price, max_price, limit=10):- Searches eBay.de using the official Browse API. Supports filtering by condition (
used/refurbished/new) and buying format (fixed_price/auction).
- Searches eBay.de using the official Browse API. Supports filtering by condition (
ebay_get_item(item_id):- Fetches listing details, photos, location, and seller reputation.
4. Bring! Shopping Lists (bring)
bring_add_item(item_name, specification="", list_name="Einkaufsladen"):- Adds an item with optional quantity/specification (e.g.
specification="2L","100 Stück") to the target list.
- Adds an item with optional quantity/specification (e.g.
bring_add_batch(items=[{"name": "...", "specification": "..."}], list_name="Einkaufsladen"):- Adds multiple items at once (ideal for recipe ingredients or bulk additions).
bring_get_items(list_name="Einkaufsladen"):- Retrieves active to-buy items and recently bought items for the specified list.
bring_complete_item(item_name, list_name="Einkaufsladen"):- Marks an item as purchased/completed (moves it to "recently bought").
bring_remove_item(item_name, list_name="Einkaufsladen"):- Completely deletes an item from the list.
bring_list_lists():- Lists all Bring! shopping lists with their UUIDs and item counts.
🍅 Vorratskauf & Supermarkt Protocol
When the user asks for groceries, weekly offers, or staples to stock up on:
1. Multi-Brand / Equivalency Queries (e.g. „Mutti oder Oro Tomatensauce“)
- Always run a comparative search (using
supermarket_compare_staplesor parallel queries). - Group results by retailer and rank by best price.
- Price Benchmarks for Staples:
- Tomaten / Passata / Polpa (Mutti / Oro di Parma):
- Normal: 1,69 € – 1,99 €
- 🟢 Top-Vorratspreis:
\le1,10 € (z.B. Netto 0,88 € oder Penny 1,19 €)
- Marken-Pasta (Barilla / De Cecco):
- Normal: 1,89 € – 2,29 €
- 🟢 Top-Vorratspreis:
\le0,99 €
- Kaffee ganze Bohnen (Lavazza, Segafredo, Melitta):
- Normal: 14,99 € – 17,99 € / kg
- 🟢 Top-Vorratspreis:
\le11,99 € / kg
- Tomaten / Passata / Polpa (Mutti / Oro di Parma):
2. Windeln Größe X (Stückpreis-Berechnung)
Windel-Packungsgrößen variieren stark (Single-Pack vs. XXL-Box vs. Monatsbox).
- Berechne immer den Cent-Preis pro Windel:
\text{Stückpreis} = \frac{\text{Gesamtpreis}}{\text{Stückzahl}} \times 100\ \text{ct} - Orientierungswerte:
- Eigenmarke (Lupilu / babylove): 11 – 14 ct / Windel
- Markenwindeln (Pampers Baby-Dry): 18 – 24 ct / Windel (über 26 ct ist teuer)
- Beispiel-Antwort: „Bei Lidl gibt es Lupilu Gr. 4 (84 Stück) für 10,35 € (12,3 ct/Windel). Bei V-Markt sind Pampers Pants für 6,99 € im Angebot.“
3. Location & Store Distance
- Default location is Regensburg (Lat:
49.0134, Lng:12.1016). - Mention the retailer and approximate distance (e.g. „Netto Marken-Discount (0,5 km)“ oder „Penny (1,4 km)“).
- Mention the validity dates (z.B. „Gültig bis Samstag, 12.09.“).
💻 Tech & Electronics Advisory Protocol
When the user asks whether to buy a gadget, phone, laptop, or appliance:
- Model & Quality Check:
- Inspect
test_reviews_countandtest_reviews_metascoreingeizhals_search. - If needed, run a quick web search on Stiftung Warentest / Chip / Reddit for common faults.
- Inspect
- Timing & Price History Check:
- Run
geizhals_price_history(product_id). - If
is_all_time_lowis true: „🟢 Aktuell auf Tiefstpreis-Niveau!“ - If significantly higher than
period_min_price: advise waiting or setting a price alert.
- Run
- Refurbished / B-Ware Option:
- Query
ebay_searchwithcondition="refurbished"or"used"to compare savings against brand-new retail.
- Query
📝 Bring! Shopping Lists Protocol
OpenClaw manages the Graf family's Bring! shopping lists using the bring MCP tools:
bring_add_item(item_name, specification="", list_name="Einkaufsladen")bring_add_batch(items=[{"name": "...", "specification": "..."}], list_name="Einkaufsladen")bring_get_items(list_name="Einkaufsladen")bring_complete_item(item_name, list_name="Einkaufsladen")bring_remove_item(item_name, list_name="Einkaufsladen")bring_list_lists()
1. List Routing & Defaults
The family maintains multiple distinct lists in Bring!:
Einkaufsladen(Default): Groceries, supermarket items, drugstore (dm/Rossmann), household staples. Used for all general shopping queries unless another store is explicitly mentioned.Baumarkt: Hardware store items, DIY supplies, tools, screws/nails, timber, paint, plumbing, garden supplies.Ikea: Furniture, home decor, Swedish food market, home organization items.Gewuerzeinkaufsliste: Dedicated list for spices, herbs, and seasonings.
2. Interaction Rules
- Adding Items:
- "Pack Milch auf die Einkaufsliste" ->
bring_add_item(item_name="Milch", list_name="Einkaufsladen") - "Schreib 50er Spax Schrauben auf die Baumarkt-Liste" ->
bring_add_item(item_name="Spax Schrauben", specification="50er", list_name="Baumarkt") - "Wir brauchen Koriander und Kardamom" ->
bring_add_itemwithlist_name="Gewuerzeinkaufsliste"(orbring_add_batch) - "Brauchen neue Kissenbezüge von Ikea" ->
bring_add_item(item_name="Kissenbezüge", list_name="Ikea")
- "Pack Milch auf die Einkaufsliste" ->
- Confirmation:
- Always give a concise confirmation with markdown bolding:
- „✅ Milch (3.8%) auf die Liste Einkaufsladen gesetzt.“
- „✅ Spax Schrauben (50er) auf die Liste Baumarkt gesetzt.“
- Always give a concise confirmation with markdown bolding:
- Reading / Checking:
- When asked "Was steht auf der Einkaufsliste?": call
bring_get_items(list_name="Einkaufsladen")and summarize the items clearly.
- When asked "Was steht auf der Einkaufsliste?": call
🔗 Presentation Rules
- Follow OpenClaw's SOUL protocol: Hide hyperlinks behind descriptive text (
[Händler (Preis €)](url)). - Never send raw search URLs or unverified Google links.