Irgendwo da draußen hat jemand offerhopper.ai fest in seinen Morgen integriert. Jeden Montag gegen acht Uhr, bevor jemand ans Einkaufen denkt, trifft eine Anfrage von einem geplanten Agenten ein und prüft, ob sich heute eine Fahrt lohnt.
Ich habe offerhopper.ai ursprünglich als Webanwendung gebaut — lies die Geschichte, warum offerhopper.ai existiert, um die Entscheidungsmüdigkeit im Supermarkt zu beenden. Du öffnest die App, wenn du bereits einkaufen willst, tippst deine Liste ein und die App berechnet den optimalen Weg und ob sich die Fahrt rechnet. Das war das Erste, was existierte, und für eine Website hält es sich gut.
Der MCP-Server war kein nachträglicher Zusatz. Er entstand, weil KI-Agenten ohne reale Daten beim Thema Preise und Wege halluzinieren. Ein Sprachmodell, das gefragt wird "Lohnt sich die Fahrt zu Aldi heute?", erfindet eine plausibel klingende Antwort ohne Route, ohne Live-Preise und ohne tatsächliche Arithmetik dahinter. offerhopper.ai übernimmt die Arithmetik. Über das Model Context Protocol (MCP) erhält der Agent eine echte Multi-Store-Kostenberechnung statt einer als Berechnung getarnten Schätzung.
Was ich nicht vollkommen erwartet hatte: Wie stark sich das Tool verändert, wenn der Agent die Anfragen stellt statt du selbst. Die Website wartet darauf, dass du an sie denkst. Ein Agent braucht keine Erinnerung und kennt bereits Dinge über deinen Haushalt, die die Website niemals wissen wird.
Dieser Leitfaden zeigt, wie du offerhopper.ai in deinen persönlichen Einkaufsassistenten in Claude, ChatGPT oder selbstgehosteten Agenten wie OpenClaw verwandelst. Jedes durchgerechnete Beispiel unten ist reales Ergebnis aus einem deutschen Haushalt, inklusive der Läufe, die schiefgingen. Wenn du es nicht von Hand einrichten möchtest, springe direkt zum Agentic Setup Flow am Ende und übergib diese ganze Seite deinem Agenten.
Wichtig vorab: offerhopper.ai beantwortet "Wohin muss ich für diese Liste fahren und lohnt sich die Fahrt?". Es beantwortet nicht "Was ist in meiner Nähe im Angebot?". Du bringst die Liste; das Tool übernimmt das Routing und die Arithmetik.
Schnellstart
Drei Schritte zur funktionierenden Antwort. Zwei weitere zur vollständigen Automation.
1. Server verbinden
| Parameter | Wert |
|---|---|
| MCP Server URL | https://mcp.offerhopper.ai/mcp |
| Authentifizierung | Keine (öffentlicher Endpunkt) |
| Tool-Name | plan_optimal_shopping_route |
| Unterstützte Assistenten | Claude (Web, Mobile, Desktop), ChatGPT (Developer Mode), OpenClaw |
In Claude Web und Mobil öffnest du Einstellungen, dann Connectors, dann Custom Connector hinzufügen und gibst die URL ohne Authentifizierung ein. Füge sie auf Account-Ebene hinzu, nicht in einem einzelnen Projekt, sonst sehen spätere geplante Tasks sie nicht.
In Claude Desktop fügst du die Stdio-zu-HTTP-Bridge-Konfiguration in claude_desktop_config.json ein. Das exakte JSON findest du im Entwickler-Guide.
In ChatGPT (Plus, Team oder Enterprise) öffnest du Einstellungen, dann Apps, aktivierst den Developer Mode, erstellst eine App und gibst dieselbe URL ein.
In OpenClaw installierst du aus der ClawHub-Registry:
openclaw plugins install clawhub:offerhopper.ai
Screenshots und den vollständigen Walkthrough findest du im MCP Developer Setup Guide.
2. Dem Agenten Kontext geben
Füge den Master-Kontext-Block unten in deine Custom Instructions ein oder in ein Skill, falls du später etwas automatisieren möchtest. Fünf Werte tragen die Hauptlast: deine PLZ, Haushaltsgröße, Transportmittel, dein Stundensatz und deine zwei Einkaufslisten auf Deutsch.
Master-Kontext-Prompt anzeigen & kopieren
Füge dies in die Custom Instructions oder die Skill-Datei deines Assistenten ein (Ersetze alle Klammerwerte):
# Einkaufsplanung & offerhopper.ai Kontext
## Haushalt
- Standort: [ERSETZE MICH mit deiner PLZ oder Stadt]. Alle Anfragen nutzen dies,
außer ich sage etwas anderes.
- Haushaltsgröße: [ERSETZE MICH mit z.B. 3 Personen, 1 Erwachsener und 2 Jugendliche]
- Transportmittel: [ERSETZE MICH mit Auto bei €0.30/km, oder Fahrrad oder E-Scooter
bei €0/km, oder Zu Fuß]
- Zeitwert: [ERSETZE MICH mit deinem €/Stunde]. Wird als hour_cost übergeben.
- Ernährung: [ERSETZE MICH mit z.B. Milch muss laktosefrei sein, sonst nichts]
- Einkaufsrhythmus: [ERSETZE MICH mit z.B. alle paar Tage, oder ein Wocheneinkauf]
## Körbe
- Frischekorb: [ERSETZE MICH mit deinen Grundnahrungsmitteln, auf Deutsch]. Bemessen für den
Haushalt über [ERSETZE MICH mit Anzahl] Tage.
- Vorratsliste: [ERSETZE MICH mit deinen haltbaren Artikeln, auf Deutsch].
Lange Haltbarkeit, daher entscheidet das Timing.
## Regeln
1. Artikelnamen auf Deutsch angeben. Bei konkretem Wunsch genaue
Produktabsicht nennen (Kopfsalat statt Salat, Gouda am Stück 400g statt
Käse). Allgemeine Begriffe (wie Obst) nur nutzen, wenn die Sorte
egal ist.
2. Mengen passend zur Haushaltsgröße schätzen. Frischekorb für die
angegebene Anzahl an Tagen, Vorratsartikel für eine vollständige Aufstockung.
3. Urteil (verdict), Fahrkosten-Anteil in %, Gesamtsumme und
Laden-Zeitaufwand separat ausweisen.
4. Jedes selected_product nennen, das von der Anfrage abweicht, sowie
jeden Artikel über dem market_average. Verlasse dich nicht auf den
Confidence-Score. Ein allgemeines Wort, das zu einem guten Preis aufgelöst
wurde, oder eine Packungsgröße, die die gezählte Einheit schlägt, ist kein Fehler.
5. Vorrats-Alerts nur wenn ein Artikel mehr als 25% reduziert ist UND das
Urteil worth_it ist. Sonst melden, dass sich nichts lohnt.
6. Bei Zwischenstopps auf der Fahrt end_location übergeben.
7. Keine zusätzlichen Stopps vorschlagen, die das Tool nicht berechnet hat.
3. Eine Anfrage ausführen
Prüfe meinen Frischekorb. Lohnt sich heute ein Einkauf?
Das ist die ganze Anfrage. Standort, Transportmittel, Haushaltsgröße und Ausgabeformat stammen komplett aus dem Block, den du gerade installiert hast. Wenn du Schritt 2 übersprungen hast, musst du diese Werte jedes Mal manuell angeben.
Für den Haushalt aus diesem Beispiel ergab eine Version dieses Korbs mit vier Artikeln einen Stopp in einem 643m entfernten REWE: 10,06 € insgesamt (davon 7,79 € Lebensmittel), 7% Fahrtkosten-Anteil, Urteil: lohnt sich (worth_it).
Lies selected_product in jeder Zeile, bevor du der Gesamtsumme vertraust. Ein erster Lauf enthält meist einen Artikel, den der Matcher anders aufgelöst hat als gedacht. Drei Dinge, die wie Fehler aussehen, aber keine sind: ein allgemeines Wort, das zu einem Preis-Leistungs-Sieger wurde, eine Packungsgröße, die deine gezählte Einheit schlägt, und eine Route mit nur einem Laden.
4. Eine Optimierung testen
Plane meine Woche an Abendessen. Zuerst: Sondiere den Markt mit zwei breiten
Abfragen (Proteine + Gemüse/Kohlenhydrate) über offerhopper.ai. Extrahiere die
Preissignale aus den Ergebnissen. Dann stelle ein Menü zusammen, das sich auf
das stützt, was diese Woche am günstigsten ist. Zum Schluss den finalen
Einkaufszettel für die Route durchlaufen lassen.
Der Preissignal-Schritt ist der eigentliche Trick. Praxisbeispiel hier.
5. Vorrats-Check automatisieren
Wöchentlich, Montag 08:00 Uhr. In Claude ist das Cowork, dann Scheduled, dann New Task. Halte die Konfiguration in einem Skill, den Verlauf in einer State-Datei und den Task-Prompt kurz.
Oder überspringe alle fünf Schritte und übergib diese Seite deinem Agenten.
Einkaufslisten richtig formulieren
Dies ist der Abschnitt, der dir am meisten Ärger erspart, deshalb steht er vor der Konfiguration.
offerhopper.ai führt keinen sturen Textvergleich gegen Produktnamen durch. Es löst deine Worte zur plausibelsten Kaufabsicht auf und sucht dann Produkte für diese Absicht. Meistens ist das genau das, was du willst: "Hackfleisch" findet Hackfleisch, ohne dass du Marke, Packungsgröße oder Fettgehalt angeben musst.
Das Problem entsteht nicht, weil vage Worte fehlschlagen, sondern weil ein Wort mehr als eine sinnvolle Absicht tragen kann und der Matcher eine davon auswählt.
Hier sind zwei reale Auflösungen aus einem Lauf mit der allgemeinen Standardliste, die dieser Leitfaden früher empfohlen hat:
| Angefragt | Gematcht auf |
|---|---|
| Salat | Cherry Romatomaten 250g |
| Käse | Exquisa Frischkäse Fitline Kräuter 200g |
Beides ist nicht absurd. Aus Cherrytomaten kann man Salat machen, und Frischkäse ist Käse. Es sind vertretbare Lesarten eines mehrdeutigen Wortes. Es war nur nicht das, was der Einkäufer meinte, und die Gesamtsumme wurde darauf basierend berechnet.
Die Lösung besteht darin, die konkrete Absicht statt der Kategorie zu nennen.
| Statt | Schreibe |
|---|---|
| Salat | Kopfsalat, oder Salatmischung, oder Cherry Tomaten |
| Käse | Gouda am Stück 400g, oder Emmentaler Scheiben 200g |
Manchmal ist die Mehrdeutigkeit gewollt
Nicht jedes allgemeine Wort muss verengt werden. Obst liefert eine sinnvolle Frucht basierend auf dem Preis-Leistungs-Verhältnis zurück — exakt richtig, wenn du "irgendein Obst, was diese Woche gut ist" meintest. Du hast die Wahl delegiert und das System hat sie nach Preis getroffen.
Lass ein Wort allgemein, wenn dir wirklich egal ist, was ankommt, und verenge es, wenn es dir wichtig ist. Obst und Äpfel 1kg sind beides korrekte Anweisungen. Sie sagen nur unterschiedliche Dinge.
Mengen werden nach Nutzen verglichen, nicht nach deiner Einheit
Eine Anfrage nach 10 Rollen Toilettenpapier kam mit einer 8-Rollen-Packung zurück. Das sieht nach einem Fehler aus, ist aber keiner. Rollen sind eine schlechte Einheit für Toilettenpapier, da die Blattanzahl variiert. Acht Rollen mit je 220 Blatt können zehn kürzere Rollen sowohl bei der Menge als auch beim Preis schlagen. Das System vergleicht das, was am Ende tatsächlich bei dir ankommt.
Dieselbe Logik gilt für die gesamte Liste. Ein 1kg-Becher Joghurt gewinnt gegen sechs 150g-Becher, wenn er das bessere Preis-Leistungs-Verhältnis hat, obwohl du in Bechern gezählt hast. Das ist die Optimierung bei der Arbeit.
Deutsch bietet die beste Präzision
Die Suche läuft gegen deutsche Einzelhandelsdaten, daher sind deutsche Substantive die zuverlässigste Eingabe. Englisch funktioniert ebenfalls, und auf unserer Seite findet viel Normalisierung statt, aber nicht in 100% aller Fälle.
Hier ist ein Fall, der durchgerutscht ist. Ein Menüplanungs-Lauf fragte nach 1 bag mixed salad. Es existierte kein Katalog-Match, daher fiel das System auf einen synthetisch angenommenen Preis von 2,50 € ohne Produktlink und mit einem Null-Relevanz-Score zurück. Der identische Releaselauf mit 1 bag Salatmischung matchte ein reales Produkt: ja! Mischsalat Rohkost Mix 200g für 1,98 € für zwei Packungen, Relevanz 1,0.
Der Folgeeffekt war größer als die Korrektur selbst. Die Korrektur dieses einen Begriffs verbesserte auch den Gemüse-Match an anderer Stelle im selben Korb, tauschte einen teuren Wok-Mix gegen günstigeres Suppengemüse aus, und die Gesamt-Confidence des Korbs stieg von mittel auf hoch ohne verbleibende geschätzte Artikel.
Sprich mit deinem Agenten in welcher Sprache du möchtest. Lass ihn die Artikelliste auf Deutsch schreiben, wo er kann.
Markennamen nennen funktioniert
Präzision wird belohnt, wenn dir das Produkt wichtig ist. Swirl Müllbeutel 35L matchte exakt: Swirl Reißfest und Dicht Tragegriff 35l, 15 Stück. Marke plus Volumen plus Absicht lässt nichts mehr aufzulösen.
Schlechte Matches werden mit der Zeit korrigiert
Schlechte Auflösungen werden korrigiert. Der Cherrytomaten-Fall oben wurde inzwischen auf Matcher-Ebene behoben. Wenn ein Ergebnis falsch aussieht, lohnt sich ein erneuter Lauf.
Kosten-Output verstehen: Urteil, Ersparnis & Confidence
Drei unabhängige Fragen kommen zurück. Sie zu vermischen ist der häufigste Denkfehler.
Ist die Fahrt lohnenswert?
Dies beurteilt Anfahrts- und Zeitaufwand im Verhältnis zum Korb. Sonst nichts. Eine einzelne Tube Zahnpasta für 2,99 €, die eine 12-minütige Fahrt erfordert, erzeugt etwa 200% Fahrtkosten-Anteil und das Urteil not_worth_it ("nicht lohnenswert"), selbst wenn die Zahnpasta zum halben Preis im Angebot ist.
Wichtig: worth_it bedeutet nicht, dass dies deine günstigste Option ist. In einem Vergleichslauf mit drei Menüs für einen Haushalt ergaben alle drei Kandidaten-Menüs worth_it, während sie sich in den Gesamtkosten um 4,59 € unterschieden. Das Urteil beantwortete eine andere Frage als die, die dem Einkäufer wichtig war.
Die Gesamtsumme ist nicht der Komplettpreis
total_estimated_cost ist Produktpreis plus Fahrtkosten. Der Zeitaufwand im Laden wird separat in cost_analysis.in_store_time_cost erfasst und ist nicht in der Hauptsumme enthalten.
Für einen einzelnen Lauf ändert das selten die Entscheidung. Für den Vergleich von Optionen tut es das, weil Optionen mit mehr Stopps mehr Zeit im Laden bedeuten. Addiere sie beim Vergleichen manuell:
| Menü | Läden | Hauptsumme | Zeit im Laden | Komplettpreis |
|---|---|---|---|---|
| A | 2 | 39,74 € | 4,25 € | 43,99 € |
| B | 1 | 37,48 € | 3,10 € | 40,58 € |
| C | 2 | 35,60 € | 3,80 € | 39,40 € |
Confidence misst den Match, nicht die Wahrheit
Ein Confidence-Score zeigt, wie gut das System glaubt, deine Worte aufgelöst zu haben. Er zeigt nicht, ob das Produkt das ist, was du wolltest. Der Lauf mit Cherrytomaten als Salat lieferte zehn von zehn bepreisten Artikeln, hohe Confidence, null Warnungen.
Verlasse dich also nicht nur auf den Score. Lies selected_product. Zwei Dinge solltest du jedes Mal prüfen:
Ein selected_product-Name, der nicht dem ähnelt, wonach du gefragt hast. Das ist eine Abweichung der Absicht, und es liegt an dir, die Formulierung anzupassen.
Ein price, der über dem market_average liegt. Das ist eine Preisfrage, keine Match-Frage, und hat meist eine plausible Erklärung. Manchmal akzeptiert das System bewusst einen schlechteren Einzelpreis, um einen teuren Extra-Stopp zu vermeiden.
Zwei Warnungen zu market_average selbst. Es ist der Durchschnitt der günstigsten 30% der Gesamtkosten, die deine gewünschte Menge erfüllen, geteilt durch buy_count — also ein amortisierter Pro-Packung-Wert, keine Pro-Kilo-Zahl. Verschiedene Produkte lassen sich damit nicht vergleichen, weil Packungsgrößen und buy_counts unterschiedlich sind. Und es spiegelt unsere Datenabdeckung wider, die asymmetrisch ist: Sonderangebote in allen großen deutschen Supermärkten und Drogerien, Live-Regalpreise nur für Aldi, REWE, dm, Rossmann und Müller.
Diese Asymmetrie prägt das Routing stärker als jeden einzelnen Preis. Wo wir nur die Aktionen einer Kette sehen, ist das Angebot selbst real. Was fehlt, ist alles drumherum. Wir wissen nichts über den Rest des Regals dieses Ladens, sodass jeder andere Artikel in deinem Korb dort geschätzt werden muss. Und ein Laden mit vielen geschätzten Artikeln gewinnt selten einen Gesamtkorb-Vergleich, selbst wenn er den einzeln günstigsten Artikel deiner Liste hält.
Das ist das Tool wie entwickelt. Es wählt ein Ziel für deine gesamte Liste, keinen Gewinner pro Artikel.
Synthetische Artikel
Wenn kein Katalog-Match in Reichweite existiert, fällt das System auf einen angenommenen Preis ohne Produktlink und mit einem Null-Relevanz-Score zurück. Das ist das stärkste Signal, dass deine Formulierung Überarbeitung braucht. Der Fall 1 bag mixed salad erzeugte genau das.
Agenten-Kontext einrichten
offerhopper.ai weiß nichts über dich. Kein Login, kein Profil, keine Erinnerung an letzte Woche. Jede Suche startet bei null.
Das ist Absicht. Es kann nicht lernen, dass du Vegetarier bist, dass dein Stammladen der REWE 600 Meter von deiner Tür entfernt ist oder dass du jeden Donnerstag dieselben zwölf Artikel kaufst. Ein Tool, das nichts über dich speichert, kann auch nichts über dich verlieren.
Dein Assistent ist der richtige Ort für diesen Kontext. Er bleibt bei dir und wird nur an offerhopper.ai übergeben, wenn eine Anfrage ihn braucht.
Entscheide zuerst, wo er abgelegt wird
Diese Wahl entscheidet darüber, ob deine Automatisierung später funktioniert.
Wenn du nur chatten möchtest, füge den Block unten in die Custom Instructions deines Assistenten ein: Project Custom Instructions in Claude, MEMORY.md in OpenClaw, Saved Memory in ChatGPT.
Wenn du automatisierte Checks planen möchtest, lege ihn stattdessen in einem Skill ab. Geplante Läufe sind separate Sitzungen, die Skills laden können, aber möglicherweise nicht die Instructions eines Projekts erben. Wenn du die Konfiguration in ein Skill legst, lesen deine Chat-Sitzungen und dein Montagslauf aus einer Quelle.
Der Block
Ersetze jeden Platzhalter in Klammern, bevor du dies verwendest.
# Einkaufsplanung & offerhopper.ai Kontext
## Haushalt
- Standort: [ERSETZE MICH mit deiner PLZ oder Stadt]. Alle Anfragen nutzen dies,
außer ich sage etwas anderes.
- Haushaltsgröße: [ERSETZE MICH mit z.B. 3 Personen, 1 Erwachsener und 2 Jugendliche]
- Transportmittel: [ERSETZE MICH mit Auto bei €0.30/km, oder Fahrrad oder E-Scooter
bei €0/km, oder Zu Fuß]
- Zeitwert: [ERSETZE MICH mit deinem €/Stunde]. Wird als hour_cost übergeben.
- Ernährung: [ERSETZE MICH mit z.B. Milch muss laktosefrei sein, sonst nichts]
- Einkaufsrhythmus: [ERSETZE MICH mit z.B. alle paar Tage, oder ein Wocheneinkauf]
## Körbe
- Frischekorb: [ERSETZE MICH mit deinen Grundnahrungsmitteln, auf Deutsch]. Bemessen für den
Haushalt über [ERSETZE MICH mit Anzahl] Tage.
- Vorratsliste: [ERSETZE MICH mit deinen haltbaren Artikeln, auf Deutsch].
Lange Haltbarkeit, daher entscheidet das Timing.
## Regeln
1. Artikelnamen auf Deutsch angeben. Bei konkretem Wunsch genaue
Produktabsicht nennen (Kopfsalat statt Salat, Gouda am Stück 400g statt
Käse). Allgemeine Begriffe (wie Obst) nur nutzen, wenn die Sorte
egal ist.
2. Mengen passend zur Haushaltsgröße schätzen. Frischekorb für die
angegebene Anzahl an Tagen, Vorratsartikel für eine vollständige Aufstockung.
3. Urteil (verdict), Fahrkosten-Anteil in %, Gesamtsumme und
Laden-Zeitaufwand separat ausweisen.
4. Jedes selected_product nennen, das von der Anfrage abweicht, sowie
jeden Artikel über dem market_average. Verlasse dich nicht auf den
Confidence-Score. Ein allgemeines Wort, das zu einem guten Preis aufgelöst
wurde, oder eine Packungsgröße, die die gezählte Einheit schlägt, ist kein Fehler.
5. Vorrats-Alerts nur wenn ein Artikel mehr als 25% reduziert ist UND das
Urteil worth_it ist. Sonst melden, dass sich nichts lohnt.
6. Bei Zwischenstopps auf der Fahrt end_location übergeben.
7. Keine zusätzlichen Stopps vorschlagen, die das Tool nicht berechnet hat.
Warum die Zahlen zählen
Die Haushaltsgröße verändert die Bedeutung eines einzelnen Wortes. Joghurt ohne Mengenangabe verwendet standardmäßig einen 150g-Becher. Für eine Drei-Personen-Woche ist es ein 1kg-Eimer, wodurch das System Großpackungen korrekt mit Kleinpackungen vergleichen kann. Mehr dazu unter Wie offerhopper.ai deine Einkaufsliste versteht, und zum Vergleich dieser Packungsgrößen untereinander unter welche Packung ist wirklich günstiger.
Der Zeitwert wirkt in beide Richtungen, und der Standard liegt bei 12,00 €/Stunde.
Über dem Standard fallen knappe Stopps weg. Bei 25 €/Stunde kostet ein 15-minütiger Umweg 6,25 €, sodass eine Ersparnis von 1,00 € bei Kaffee ein klarer Verlust ist und das Tool dir das sagt.
Unter dem Standard werden sie attraktiv. Bei 6,00 €/Stunde kostet derselbe Umweg 1,50 €, und zweite Stopps werden sinnvoll. Ein Haushalt bei 6,00 €/Stunde hatte Zwei-Laden-Routen, die ihre erzwungenen Einzel-Laden-Äquivalente um 1,25 € und 4,28 € bei zwei verschiedenen Menüs schlugen.
Die häufige Behauptung, dass sich das Aufteilen auf zwei Läden fast nie lohnt, ist also kein Gesetz des deutschen Einzelhandels. Es ist eine Folge des Standard-Stundensatzes. Setze deinen ehrlich an und die Empfehlungen passen sich an.
Die Aufteilung in Frische- und Vorratskorb ist wichtig, weil beide Kategorien unterschiedlichen Regeln folgen. Milch und Salat werden gekauft, egal ob es ein Angebot gibt. Kaffee und Waschmittel sollten nur dann einen Einkauf auslösen, wenn ein echter Rabatt mit einer Route zusammenfällt, die du sowieso gefahren wärst.
MCP Tool Parameter Referenz
Das Tool akzeptiert mehr Stellschrauben als die meisten Anleitungen erwähnen.
| Parameter | Standard | Hinweise |
|---|---|---|
items |
Pflicht | Liste in natürlicher Sprache. Deutsch, konkret. |
location |
Pflicht | Deutsche PLZ, Stadt oder Adresse. |
end_location |
keine | Setzen für A-nach-B-Fahrten. Routet Läden entlang der Strecke statt Rundfahrt. |
travel_mode |
car |
car, bicycle, pedestrian. |
hour_cost |
12.0 | Dein Zeitwert in €/Stunde. |
km_cost |
modus-abhängig | Bei Fahrrad und Zu Fuß auf 0.0 erzwungen. |
max_radius_km |
Auto 15, Fahrrad 5, Zu Fuß 2 | Siehe Hinweis unten. |
shopping_time_per_store |
10 | Basis-Minuten pro Stopp vor der Fahrt. |
max_stores |
100 | Maximalanzahl an Stopps begrenzen. |
Die Radius-Standards sind abgeleitet, nicht willkürlich. Ein Fahrradkorb ist durch die Tragekapazität begrenzt, und eine 5km-Plus-Rundfahrt mit dem Rad dauert fast eine Stunde für eine Ladung, die auf das Rad passt. Das System lehnt diese Fahrten ohnehin ab.
Wahl des Transportmittels
Betrachte dies eher als Frage der Tragekapazität denn der Kosten.
Auf kurzen Strecken konvergieren die Kosten. Bei einer 643m-Fahrt bei 6,00 €/Stunde kam das Auto auf 0,33 € pro Strecke (0,14 € Zeit plus 0,19 € Strecke) und das Fahrrad auf 0,33 € pro Strecke, alles Zeit. Der Geschwindigkeitsvorteil des Autos gleicht seine Betriebskosten fast exakt aus. Was sich unterscheidet, ist die Frage, ob der Korb in einen Rucksack passt.
Nutze bicycle für E-Scooter, E-Bikes und Lastenräder. Der Unterschied, der das System interessiert, ist das Vorhandensein von Pro-Kilometer-Betriebskosten, nicht der Name des Fahrzeugs.
Die Routen-Arithmetik ausschalten
Wenn du das absolut günstigste Produkt unabhängig vom Aufwand willst, setze hour_cost und km_cost auf 0. Ohne Zeit- oder Streckenstrafe im Modell zählen nur die Produktpreise, und das System schickt dich für ein einzelnes günstiges Produkt zu einem Discounter am äußeren Rand des Suchradius. Erhöhe max_radius_km und es fährt noch weiter.
Das ist eine treue Antwort auf die Frage, aber fast nie eine lohnenswerte Fahrt. Alles andere in diesem Leitfaden existiert, weil die Anfahrtskosten der Teil sind, den Menschen unterschätzen. Gut zu wissen, dass der Regler da ist. Gut, ihn in Ruhe zu lassen.
Prompt-Vorlagen für häufige Einkaufsanfragen
Ein Prompt wie "Was ist in meiner Nähe günstig?" zwingt den Assistenten, eine Liste zu erfinden, und die berechnete Route gilt für diese erfundene Liste. Gib ihm reale Artikel.
Diese Vorlagen setzen voraus, dass du den Kontext-Block installiert hast. Ohne ihn musst du Standort und Transportmittel jedes Mal hinzufügen.
Der reguläre Einkauf:
Prüfe meinen Frischekorb. Lohnt sich heute eine Fahrt?
Der Umweg auf einer geplanten Fahrt:
Ich brauche [ARTIKEL]. Ich fahre heute Nachmittag nach [ZIEL]. Übergebe das
als end_location und sage mir, ob es sich lohnt, dies auf dem Weg mitzunehmen
statt eine separate Fahrt zu machen.
Der Vorrats-Check, manuell oder geplant:
Führe meine Vorratsliste aus, inklusive Drogerien.
Überschreibe die stehenden Werte inline, wenn eine Fahrt ungewöhnlich ist:
Prüfe meinen Frischekorb, aber ich bin heute mit dem E-Scooter unterwegs und brauche nur genug für zwei Tage.
Wochen-Checks mit geplanten Tasks automatisieren
Deutsche Angebotszyklen laufen wöchentlich, beginnend montags oder donnerstags je nach Kette. Ein täglicher Check führt identische Prospektdaten erneut aus und verbrennt unnötig Tokens. Montag um 08:00 Uhr ist das richtige Zeitfenster.
Wo Automatisierung lebt
| Plattform | Wo | Ausführung |
|---|---|---|
| Claude | Cowork, auf der Scheduled-Seite. Nur kostenpflichtige Tarife. | Remote. Läuft während dein Rechner schläft, außer der Task weist auf einen lokalen Ordner. |
| OpenClaw | Natürliche Sprache, in jeder Sitzung. | Läuft über dein Gateway. |
| ChatGPT | Keine native Hintergrundausführung für benutzerdefinierte MCP-Connectoren. | Nur manueller Auslöser. |
Einrichtung in Claude
Klicke in der linken Seitenleiste auf Scheduled, dann auf New task.
"Create with Claude" öffnet eine Sitzung, die dich befragt, den Task vorschlägt, Name, Frequenz und Verhalten anzeigt und beim Klick auf Schedule speichert.
"Set up manually" gibt dir die Felder direkt: Task-Name, Prompt, Approval Mode, Frequenz (stündlich, täglich, wöchentlich, werktags oder manuell), Modell und optional ein Arbeitsordner.
Zwei Einstellungen entscheiden darüber, ob es unbeaufsichtigt funktioniert. Lass das Ordner-Feld leer, denn das Verweisen auf einen lokalen Ordner erzwingt eine rein lokale Ausführung. Und prüfe den Approval Mode, denn ein Task, der auf Erlaubnis wartet, ist nicht gelaufen, sondern blockiert.
Einrichtung in OpenClaw
Kein JSON, kein Crontab:
Hi, kannst du jeden Montagmorgen um 8:00 Uhr einen wöchentlichen Vorrats-Check für mich machen?
Der Agent bestätigt den Zeitplan und die Zeitzone.
Einem geplanten Task ein Gedächtnis geben
Jeder Lauf ist eine neue Sitzung. Er erinnert sich an nichts aus der Vorwoche. Ohne Gedächtnis meldet er drei Montage hintereinander dasselbe Pizza-Angebot und weiß nicht, ob 1,79 € ein echter Tiefstpreis oder nur der normale Aktionspreis ist.
Löse das mit drei Schichten:
Die dauerhafte Konfiguration gehört in einen Skill. Standort, Haushaltsgröße, Stundensatz, Transportregeln und die Listen ändern sich nicht von Woche zu Woche, und geplante Tasks können Skills laden.
Der Verlaufs-Status gehört in eine Datei in deinem Claude-Account (nicht in einen lokalen Ordner). Der Task liest sie zu Beginn und ergänzt sie am Ende.
Der Task-Prompt enthält nur den Auslöser und die Berichtsregeln.
Ein Beispiel für eine State-Datei:
# Vorrats-Status
## Beobachtete Tiefstpreise
| Artikel | Niedrigster Preis | Laden | Datum | Regalpreis |
|---|---|---|---|---|
| Dr. Oetker Tradizionale Salame 385g | 1.79 | REWE | 2026-07-28 | 3.69 |
| Swirl Müllbeutel 35L, 15 Stück | 2.59 | REWE | 2026-07-28 | 2.59 |
## Einkäufe
| Datum | Artikel | Menge | Bezahlt | Nachbestellen ab |
|---|---|---|---|---|
| 2026-07-28 | Swirl Müllbeutel 35L | 15 Beutel | 2.59 | 2026-09-08 |
## Gesendete Alerts
| Datum | Artikel | Preis | Gekauft? |
|---|---|---|---|
| 2026-07-28 | Dr. Oetker Tradizionale | 1.79 | ja |
Und der Task-Prompt:
Führe meinen wöchentlichen Vorrats-Check aus.
1. Lies stock-up-state.md.
2. Führe die Vorratsliste über offerhopper.ai mit meiner Konfiguration aus.
3. Vergleiche jeden Preis mit dem niedrigsten Preis aus der State-Datei,
nicht mit dem vom Laden gemeldeten Regalpreis.
4. Benachrichtige mich nur, wenn ein Artikel auf oder unter seinem Tiefstpreis
liegt UND das Urteil worth_it ist UND das Nachbestelldatum erreicht ist.
Sonst antworte "Diese Woche lohnt sich nichts."
5. Ergänze die Preise dieses Laufs in der Tabelle. Protokolliere gesendete Alerts.
Mahlzeitenplanung mit Live-Preisen
Die meisten Mahlzeitenplanungen funktionieren rückwärts. Man entscheidet, was man kochen will, und schaut dann, ob die Zutaten erschwinglich sind. Der bessere Ansatz kehrt das um: Zuerst herausfinden, was gerade günstig ist, dann Mahlzeiten um diese Zutaten herum planen.
offerhopper.ai wurde nicht für Mahlzeitenplanung gebaut, aber das Preissignal, das bei jeder Abfrage zurückkommt, macht es zu einem starken Orakel für einen planenden Agenten. Jeder Artikel in der Antwort trägt zwei Zahlen: price (was die Engine gefunden hat) und market_average (der Durchschnitt der günstigsten 30% der Gesamtkosten für deine gewünschte Menge, geteilt durch buy_count — ein amortisierter Pro-Packung-Wert). Das Verhältnis sagt dir, ob eine Zutat diese Woche ein Deal ist oder nicht.
Hier ist eine reale Sitzung aus Köln, 50667, mit dem Auto.
Schritt 1: Markt sondieren
Der erste Zug ist eine breite Abfrage über alle großen Zutatenkategorien. Du kaufst noch nicht ein. Du fragst: "Wie sieht der Markt heute aus?"
Nutze offerhopper.ai um diese Artikel ab 50667 Köln zu bepreisen, max 3 Läden:
Hähnchen, Hackfleisch, Lachs, Eier, Joghurt, Nudeln, Reis, Kartoffeln,
Tomaten, Paprika, Zwiebeln, Äpfel, Bananen, Butter
Und eine zweite Abfrage für alternative Proteine und Gemüse:
Nutze offerhopper.ai um diese Artikel ab 50667 Köln zu bepreisen, max 3 Läden:
Putenfleisch, Thunfisch, Linsen, Couscous, Zucchini, Brokkoli, Möhren,
Spinat, Quark, Sahne
Zwei Aufrufe, vierundzwanzig Kategorien sondiert. Die Ergebnisse kommen mit echten Preisen und Marktdurchschnitten für alles zurück.
Schritt 2: Preissignale lesen
Aus diesen beiden Läufen extrahiere einen Value Score für jede Zutat: 1 - (price / market_average). Höher bedeutet ein besseres Angebot relativ zur lokalen Norm.
Aus einem realen Lauf vom 5. August 2026:
| Zutat | Preis | Markt Ø | Value Score | Signal |
|---|---|---|---|---|
| Tomaten | 0,14 €/100g | 0,40 € | 0,65 | herausragend |
| Spinat | 0,89 €/500g | 1,69 € | 0,47 | herausragend |
| Thunfisch | 1,99 €/Dose | 3,76 € | 0,47 | herausragend |
| Putenfleisch | 1,80 €/500g | 2,80 € | 0,36 | stark |
| Äpfel | 1,59 €/kg | 2,26 € | 0,30 | stark |
| Zwiebeln | 1,59 €/kg | 2,31 € | 0,31 | stark |
| Hackfleisch | 5,58 €/500g | 7,02 € | 0,21 | moderat |
| Linsen | 1,45 €/500g | 1,73 € | 0,16 | moderat |
| Zucchini | 0,48 €/Stk | 0,55 € | 0,13 | moderat |
| Hähnchen | 4,19 €/500g | 4,57 € | 0,08 | schwach |
| Kartoffeln | 2,49 €/2kg | 2,65 € | 0,06 | schwach |
| Lachs | 6,39 €/200g | 6,75 € | 0,05 | schwach |
Der Markt sendet ein klares Signal: Pute ist 36% unter dem Normalniveau, während Hähnchen kaum reduziert ist. Tomaten und Spinat sind absurd günstig. Lachs hat kein Angebot. Ein Menü aus der oberen Hälfte dieser Tabelle kostet deutlich weniger als eines aus der unteren.
Schritt 3: Menü aus den Gewinnern zusammenstellen
Jetzt den Agenten instruieren, Mahlzeiten mit den tatsächlich günstigen Zutaten zu planen:
Basierend auf den Preissignalen oben, plane eine volle Woche Abendessen für 2 Personen.
Regeln:
- Stütze dich stark auf die "herausragend" und "stark" Deal-Artikel: Putenfleisch,
Tomaten, Spinat, Thunfisch, Zwiebeln, Äpfel
- Nutze Linsen, Zucchini, Hackfleisch als Nebenbestandteile
- Vermeide Lachs und Hähnchen diese Woche (keine nennenswerten Angebote)
- Nutze Nudeln, Reis oder Kartoffeln als Kohlenhydratbasis
- Kein Gericht wiederholt. Vernünftige Abwechslung über die Woche.
- Schreibe die finale Einkaufsliste auf Deutsch mit Mengen für 2 Personen.
Schritt 4: Zusammengestellten Warenkorb validieren
Den finalen Einkaufszettel durch offerhopper.ai laufen lassen, um die tatsächlich optimierte Route und Kosten zu bekommen:
Nutze offerhopper.ai um dies ab 50667 Köln zu bepreisen, max 3 Läden:
Putenfleisch 1kg, Hähnchen 500g, Thunfisch 2 Dosen, Eier 10 Stück,
Nudeln 1kg, Reis 1kg, Kartoffeln 2kg, Linsen 500g, Tomaten 1kg,
Zucchini 3 Stück, Spinat 500g, Zwiebeln 1kg, Äpfel 1kg, Joghurt 500g,
Quark 500g, Butter, Brot
Das ergab 42,04 € Produktkosten, 15,91 € Ersparnis, ein einziger Stopp bei REWE. Siebzehn Artikel für eine volle Woche für zwei Personen bei hoher Konfidenz (null synthetische Artikel, nur zwei Low-Confidence-Matches).
Warum das besser funktioniert als "3 Menüs generieren und vergleichen"
Der alte Ansatz — drei Menüs blind entwerfen, jedes bepreisen, das günstigste wählen — hat einen strukturellen Fehler. Der Agent plant Mahlzeiten ohne zu wissen was günstig ist, und entdeckt die Preise erst im Nachhinein. Menü 4, dasjenige das komplett aus den besten Deals der Woche zusammengesetzt ist, wird nie generiert, weil niemand danach gefragt hat.
Der Preissignal-Ansatz kehrt den Ablauf um. Du beobachtest zuerst den Markt, dann konstruierst du ein Menü das die Angebote ausnutzt. Das Ergebnis ist nicht nur günstiger als ein zufällig gutes Menü — es besteht aus Zutaten, die diese Woche wirklich unter ihrem Marktniveau liegen, was bedeutet die Ersparnis ist real und nicht zufällig.
Die gesamten Agent-Kosten für diesen Ansatz: zwei Tool-Aufrufe zum Sondieren, einer zum Validieren. Drei Aufrufe insgesamt. Vergleichbar mit einer einzelnen regulären Einkaufsabfrage.
Der Prompt, komplett zum Kopieren
Agiere als Einkaufsoptimierer. Plane eine volle Woche Abendessen für meinen Haushalt.
1. Sondiere den Markt. Führe zwei breite Abfragen über offerhopper.ai aus:
- Proteine und Basics: Hähnchen, Hackfleisch, Putenfleisch, Lachs,
Thunfisch, Eier, Joghurt, Quark
- Kohlenhydrate und Gemüse: Nudeln, Reis, Kartoffeln, Linsen, Couscous,
Tomaten, Paprika, Zucchini, Spinat, Brokkoli, Möhren, Zwiebeln,
Äpfel, Bananen, Butter, Brot
2. Extrahiere Preissignale. Berechne für jeden Artikel einen Value Score:
1 - (price / market_average). Sortiere absteigend.
Artikel über 0,25 sind starke Deals. Artikel unter 0,10 sind kein Deal.
3. Stelle das Wochenmenü zusammen. Plane 7 Abendessen, die sich stark auf
die Deal-Artikel stützen, mittlere Deals als Nebenbestandteile nutzen
und No-Deal-Artikel möglichst meiden. Abwechslung sicherstellen: kein
Protein mehr als 3x, verschiedene Kohlenhydratbasen über die Woche.
4. Erstelle die Einkaufsliste auf Deutsch mit Mengen für meinen Haushalt.
Lasse sie über offerhopper.ai für Route und Endpreis laufen.
5. Berichte: Wochenmenü, Einkaufsliste mit Route, Gesamtkosten (Hauptsumme
+ Ladenzeit), und welche Deals die größten Ersparnisse getrieben haben.
Zeige die Value-Score-Tabelle, damit ich sehe was diese Woche günstig war.
Den gesamten Setup-Flow dem Agenten übergeben
Alles Obenstehende kann von Hand gemacht werden. Es muss aber nicht.
Wenn dein Assistent eine URL lesen und das Tool aufrufen kann, gib ihm diese Seite und lass ihn die Einrichtung durchführen.
Verbinde zuerst den MCP-Server und füge dann dies ein:
Lies https://offerhopper.ai/blog/de/ai-grocery-shopping-assistant und richte meine Einkaufs-Automatisierung komplett ein.
Gehe in dieser Reihenfolge vor und überspringe nichts:
1. Bestätige, dass du das offerhopper.ai Tool siehst. Falls nicht, stoppe und sage mir, wie ich es verbinde.
2. Befrage mich zu allen Haushaltsdaten, die der Kontext-Block braucht: PLZ/Stadt, Haushaltsgröße, Transportmittel, Stundensatz, Ernährungsregeln, Einkaufsrhythmus, Drogerie-Scope und meine zwei Listen. Frage in kleinen Blöcken.
3. Entwerfe meinen Frischekorb und meine Vorratsliste auf Deutsch mit konkreten Begriffen. Zeige mir beide Listen und lass mich sie korrigieren, bevor du etwas ausführst.
4. Führe den Frischekorb einmal aus. Berichte Urteil, Fahrtkosten-Anteil, Hauptsumme und Laden-Zeitaufwand als separate Zahl.
5. Auditiere diesen Lauf gründlich. Vergleiche für jeden Artikel selected_product mit dem Geforderten. Markiere Abweichungen, synthetische Preise und Artikel über market_average. Schlage bessere Formulierungen vor und führe einen Re-Run durch.
6. Schreibe meinen finalen Kontext-Block mit den bestätigten Werten.
7. Erkläre mir exakt, wie ich den wöchentlichen Vorrats-Task erstelle, und gib mir den Task-Prompt sowie die Start-State-Datei dazu.
Häufig gestellte Fragen
Wie verbinde ich offerhopper.ai mit meinem KI-Assistenten?
Server-URL https://mcp.offerhopper.ai/mcp, keine Authentifizierung, in Claude oder ChatGPT eintragen. In OpenClaw openclaw plugins install clawhub:offerhopper.ai. Vollständiger Walkthrough im MCP Entwickler-Guide.
Welche Märkte und Preise werden abgedeckt?
Sonderangebote bei Aldi Nord/Süd, Lidl, REWE, Edeka, Penny, Norma, Netto, dm, Rossmann und Müller. Live-Regalpreise bei Aldi, REWE, dm, Rossmann und Müller.
Speichert offerhopper.ai meinen Standort oder meine Gewohnheiten?
Nein. Keine Konten, keine gespeicherten Standorte, Suchen werden gelöscht. Dein Kontext bleibt bei dir.
Warum schickt es mich meistens zu einem Laden?
Ein zweiter Stopp kostet pauschal 10 Minuten Zeit im Laden plus Fahrweg. Einzel-Preisunterschiede decken das selten ab.
Kann es mit bestimmten Marken umgehen?
Ja. Swirl Müllbeutel 35L matchte exakt. Je präziser die Eingabe, desto weniger muss geraten werden.
Was ist bei Einkäufen alle paar Tage?
Teile die Körbe auf. Frischekorb manuell für 2-3 Tage, Vorrats-Check wöchentlich.
Funktioniert es außerhalb Deutschlands?
Nein. Nur deutsche Märkte mit deutscher 5-stelliger PLZ oder Ort.
Kann ich Google Gemini nutzen?
Gemini beschränkt benutzerdefiniertes MCP aktuell auf Vertex AI und Spark Accounts in ausgewählten Regionen. Für Verbraucher in Europa sind Claude, ChatGPT und OpenClaw die funktionierenden Optionen.
Weitere Details zur Arithmetik findest du im Artikel Der Routenoptimierungs-Algorithmus, im Guide Wie offerhopper.ai deine Einkaufsliste versteht und unter welche Packung ist wirklich günstiger, wo es um den Vergleich von Packungsgrößen geht, wenn der Grundpreis nicht weiterhilft.