Files
mop-skills/skills/shopping/SKILL.md
T

7.7 KiB
Raw Blame History

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 an is_all_time_low.

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).
  • 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.
  • 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_staples or 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: \le 1,10 € (z.B. Netto 0,88 € oder Penny 1,19 €)
    • Marken-Pasta (Barilla / De Cecco):
      • Normal: 1,89 € – 2,29 €
      • 🟢 Top-Vorratspreis: \le 0,99 €
    • Kaffee ganze Bohnen (Lavazza, Segafredo, Melitta):
      • Normal: 14,99 € – 17,99 € / kg
      • 🟢 Top-Vorratspreis: \le 11,99 € / kg

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:

  1. Model & Quality Check:
    • Inspect test_reviews_count and test_reviews_metascore in geizhals_search.
    • If needed, run a quick web search on Stiftung Warentest / Chip / Reddit for common faults.
  2. Timing & Price History Check:
    • Run geizhals_price_history(product_id).
    • If is_all_time_low is true: „🟢 Aktuell auf Tiefstpreis-Niveau!“
    • If significantly higher than period_min_price: advise waiting or setting a price alert.
  3. Refurbished / B-Ware Option:
    • Query ebay_search with condition="refurbished" or "used" to compare savings against brand-new retail.

📝 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!:

  1. Einkaufsladen (Default): Groceries, supermarket items, drugstore (dm/Rossmann), household staples. Used for all general shopping queries unless another store is explicitly mentioned.
  2. Baumarkt: Hardware store items, DIY supplies, tools, screws/nails, timber, paint, plumbing, garden supplies.
  3. Ikea: Furniture, home decor, Swedish food market, home organization items.
  4. 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_item with list_name="Gewuerzeinkaufsliste" (or bring_add_batch)
    • "Brauchen neue Kissenbezüge von Ikea" -> bring_add_item(item_name="Kissenbezüge", list_name="Ikea")
  • 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.“
  • Reading / Checking:
    • When asked "Was steht auf der Einkaufsliste?": call bring_get_items(list_name="Einkaufsladen") and summarize the items clearly.

🔗 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.