Entwickler-Handbuch: KI-Agenten treffen auf Echtzeit-Lebensmitteldaten via MCP
KI-Assistenten wie Claude, ChatGPT und maßgeschneiderte Python-Agenten sind hervorragend im logischen Denken – aber sie sind blind für die physische Welt. Sie können dir nicht sagen, ob der Aldi in Schwabing gerade Bio-Olivenöl im Angebot hat oder ob sich der Umweg zu Lidl wegen der zusätzlichen 12 Minuten auf dem Fahrrad wirklich lohnt.
offerhopper.ai schließt diese Lücke. Indem wir unseren Einkaufsrouten-Optimierer als Model Context Protocol (MCP) Server bereitstellen, kannst du jedem MCP-kompatiblen KI-Agenten Live-Zugriff geben auf:
- Echtzeit-Preise und Angebote von Aldi, Lidl, Rewe, Edeka, Penny, Norma, Netto, DM, Rossmann und Müller
- Filialstandorte und Öffnungszeiten in deiner Nähe
- KI-optimierte Routen für mehrere Geschäfte, die Fahrtzeit, Fahrt-/Fahrradkosten und die tatsächliche Ersparnis abwägen
- Eine teilbare interaktive Karte des Ergebnisses
TL;DR / Schnellstart
Für die schnelle Verbindung zum MCP-Server von offerhopper.ai verwende bitte die folgenden Verbindungsparameter:
- MCP-Server-URL:
https://mcp.offerhopper.ai/mcp - Authentifizierung: Keine (kein API-Key erforderlich)
- Verfügbare Tools:
plan_optimal_shopping_route,swap_route_item
Dieses Handbuch führt dich durch die Einrichtung für Claude Desktop, ChatGPT (Entwicklermodus), OpenClaw und reines Python / curl – plus einen Abschnitt darüber, was du von der Tool-Antwort erwarten kannst und wie du effektive Prompts schreibst.
Was ist MCP und warum ist es hier wichtig?
Das Model Context Protocol ist ein offener Standard (ursprünglich von Anthropic entwickelt, inzwischen breit akzeptiert), der definiert, wie KI-Clients externe Tools entdecken und aufrufen. Anstatt Preise von einer Website manuell in deinen Chat zu kopieren, kann ein MCP-fähiger Agent das Tool plan_optimal_shopping_route direkt aufrufen, strukturierte JSON-Daten empfangen und darüber nachdenken – alles in einem einzigen Konversationsschritt.
Für offerhopper.ai bedeutet das konkret:
- Kein Datenabruf oder Polling auf deiner Seite – der MCP-Server übernimmt alle Live-Händlerabfragen
- Keine halluzinierten Preise – der Agent erhält verifizierte Live-Daten
- Strukturierte Ausgabe – Warenkorbpreis, Aufschlüsselung pro Geschäft, Routennachteil (Zeit-/Weg-Strafe) und eine
share_url, die du anklicken kannst, um die interaktive Karte zu öffnen
Der offerhopper.ai MCP-Server-Endpunkt lautet:
https://mcp.offerhopper.ai/mcp
Er verwendet den Streamable-HTTP-Transport (den aktuellen Standard der MCP-Spezifikation für Remote-Server). Für Desktop-Clients, die nur stdio unterstützen, wird supergateway as lokaler Tunnel verwendet – erklärt im Abschnitt für Claude Desktop weiter unten.
Unterstützte KI-Plattformen
| Plattform | Integrationsmethode |
|---|---|
| Claude Desktop | supergateway + claude_desktop_config.json |
| Claude.ai (Web / App) | Nativer MCP-Connector |
| ChatGPT | App im Entwicklermodus |
| OpenClaw | ClawHub-Plugin |
| Python / curl | Direkter HTTP-POST |
Schritt 1: Konfiguriere deine KI-App
Wähle deine bevorzugte KI-Anwendung oder -Plattform aus, um die MCP-Integration von offerhopper.ai zu konfigurieren:
1. Einstellungen öffnen
Klicke unten links auf dein Profilbild und öffne die Settings (Einstellungen).

2. Konfiguration bearbeiten
Klicke auf Developer und wähle dann Edit Config.

3. Konfigurationsdatei anpassen
Fügen Sie Folgendes zur Datei claude_desktop_config.json hinzu:
Windows:
{
"mcpServers": {
"offerhopper.ai": {
"command": "cmd",
"args": [
"/C",
"npx -y supergateway --sessionTimeout 180000 --streamableHttp https://mcp.offerhopper.ai/mcp"
]
}
}
}
macOS / Linux:
{
"mcpServers": {
"offerhopper.ai": {
"command": "npx",
"args": [
"-y",
"supergateway",
"--sessionTimeout", "180000",
"--streamableHttp", "https://mcp.offerhopper.ai/mcp"
]
}
}
}
Diese Konfiguration verwendet das Tool supergateway, um den streambaren HTTP-Endpunkt in das von Claude Desktop geforderte stdio-Protokoll umzuleiten.
Claude.ai Web & Mobile App Setup
Die Claude.ai Web- und Mobil-Apps unterstützen Remote-MCP-Connectors nativ – kein supergateway erforderlich.
- Gehe zu Settings → Connectors
- Klicke oben links auf „Add" → Add custom connector
- Füge einen neuen Connector mit der Server-URL hinzu:
https://mcp.offerhopper.ai/mcp - Setze die Authentifizierung auf None.
- Speichern — das Tool
plan_optimal_shopping_routeist jetzt in all deinen Chats verfügbar.



1. Einstellungen öffnen
Klicke unten links auf dein Profilbild und öffne die Settings (Einstellungen).

2. Entwicklermodus aktivieren
Gehe im linken Menü auf Apps, aktiviere den Schalter Developer mode und klicke oben auf die Schaltfläche Create app.

3. Verbindungsdetails hinzufügen
Trage im Modal New App die folgenden Verbindungsdetails ein. Du kannst jedes Feld über die Kopieren-Schaltflächen direkt kopieren:
offerhopper.ai
Tool for grocery trip planning in Germany, including real-time prices from Aldi, Rewe, DM, Müller as well as deals from Lidl, Norma, Netto, etc.
https://mcp.offerhopper.ai/mcp
Wähle als Authentifizierungsmethode No Auth, aktiviere das Kontrollkästchen I understand and want to continue (Ich verstehe und möchte fortfahren) und klicke auf Create.

OpenClaw-Plugin-Integration
OpenClaw unterstützt die native Integration von offerhopper.ai über ClawHub. Du kannst das verifizierte Plugin direkt über die OpenClaw-CLI installieren:
openclaw plugins install clawhub:offerhopper.ai
Dieses Plugin registriert das Tool plan_optimal_shopping_route nativ auf deinem OpenClaw-Agenten zur sofortigen Verwendung ohne manuelle Konfiguration. Es sind keine zusätzlichen Serverschemata erforderlich.
Weitere Details, Sicherheitsaudits und die Dokumentation findest du auf der offiziellen ClawHub-Plugin-Seite.
Python-Integration einrichten
Wenn du einen eigenen Agenten entwickelst, kannst du den MCP-Server direkt über HTTP unter Verwendung des JSON-RPC 2.0-Protokolls aufrufen.
Zuerst installierst du die Abhängigkeiten:
pip install httpx
Verwende dann den folgenden Code, um das Tool aufzurufen:
import httpx, json
MCP_URL = "https://mcp.offerhopper.ai/mcp"
payload = {
"jsonrpc": "2.0",
"id": 1,
"method": "tools/call",
"params": {
"name": "plan_optimal_shopping_route",
"arguments": {
"items": "pasta, organic olive oil, 500g salmon",
"location": "80331", # PLZ München Hauptbahnhof
"travel_mode": "bicycle",
"max_radius_km": 5,
"hour_cost": 12.0
}
}
}
with httpx.Client(timeout=60) as client:
# MCP Streamable HTTP: Zuerst Session initialisieren
init = client.post(MCP_URL, json={
"jsonrpc": "2.0", "id": 0,
"method": "initialize",
"params": {"protocolVersion": "2025-03-26", "clientInfo": {"name": "my-agent", "version": "1.0"}}
})
session_id = init.headers.get("mcp-session-id")
headers = {"mcp-session-id": session_id} if session_id else {}
response = client.post(MCP_URL, json=payload, headers=headers)
result = response.json()
print(json.dumps(result, indent=2, ensure_ascii=False))
Schritt 2: Teste die Integration
Teste nun deine Einrichtung. Kopiere die folgende Anfrage und füge sie direkt in das Chat-Fenster von Claude ein:
Plane mit offerhopper.ai einen Einkauf, um Nudeln, Bio-Olivenöl und 500g Lachs zu kaufen, beginnend am Hauptbahnhof München (PLZ 80331). Ich fahre mit dem Fahrrad.
Dein Agent ruft das Tool plan_optimal_shopping_route auf. Es übernimmt das Geocoding, fragt die Live-Preise ab, berechnet die TPSO-Route und gibt eine detaillierte Aufstellung aus – inklusive Fahrtkosten, Gesamtkorbpreis und dem share_url Link zur interaktiven Karte.
Tool-Referenz: plan_optimal_shopping_route
| Parameter | Typ | Erforderlich | Beschreibung |
|---|---|---|---|
items |
String | ✅ | Einkaufsliste in natürlicher Sprache, z. B. "3x Milch, Eier, Brot" |
location |
String | ✅ | Startpunkt — Postleitzahl, Stadt oder Adresse in Deutschland |
end_location |
String | — | Optionale Zieladresse für Korridor-Routen (A → B) |
travel_mode |
car / bicycle / pedestrian |
— | Standard: car |
max_radius_km |
Nummer | — | Suchradius (wird bei Fehlen automatisch je nach Travel-Mode gesetzt) |
max_stores |
Integer | — | Maximale Anzahl an Zwischenstopps (Standard: alle optimalen) |
hour_cost |
Nummer | — | Zeit-Strafe in EUR/Stunde (Standard: 12.0) |
km_cost |
Nummer | — | Fahrtkosten pro Kilometer (für Fahrrad/Fußgänger auf 0 gesetzt) |
shopping_time_per_store |
Integer | — | Minuten pro Einkaufsstopp (Standard: 10) |
Aufbau der Rückgabe-Struktur
Die Antwort liefert ein schlankes, token-optimiertes JSON-Format für KI-Agenten:
| Feld | Position | Beschreibung |
|---|---|---|
route_segments |
optimized_route |
Geordnete Zwischenstopps mit Distanzen (distance_km), Fahrzeiten (duration_minutes) und Fahrtkosten (travel_cost). |
products_to_buy |
route_segments[] |
Liste der zu kaufenden Artikel pro Stopp mit name, selected_product, price, regular_price, discount_pct, quantity und unit. Wenn vorhanden, werden Kunden-App-Vorteile direkt angegeben: app_price (reduzierter Kassenpreis bei App-Scan), app_savings (zusätzliche Ersparnis gegenüber dem Regalpreis price), app_credit (digitales Cashback auf das Kundenkonto, z. B. REWE Bonus — der Regalpreis gilt für alle Kunden, app_credit ist zusätzliches Guthaben im Wallet) und app_label (Lidl Plus, REWE Bonus etc.). |
layout_dimension |
products_to_buy[] |
Regal-/Warengruppen-Kategorie im Supermarkt: FF (Obst & Gemüse), FB (Bäckerei), CM (Fleisch/Wurst), CD (Molkereiprodukte), FR (Tiefkühl), SH (Trockensortiment/Vorrat), DR (Getränke), NF (Non-Food). |
offer_id |
products_to_buy[] |
ID des aktuellen Treffers dieser Zeile. Übergib sie als offer_id an swap_route_item, um die Zeile zu ändern. |
alternatives |
products_to_buy[] |
Bis zu 3 weitere Artikel im selben Laden. Jeder hat eine eigene offer_id und optionale Kunden-App-Vorteile (app_price, app_savings, app_credit, app_label). Nutze sie für eine Ersatz-Begründung oder als alt_id für swap_route_item. |
cross_store_alternatives |
products_to_buy[] |
Derselbe Artikel bei anderen Läden, die schon auf der Route liegen. Jeder hat offer_id, store, at_route_stop und optionale Kunden-App-Vorteile (app_price, app_savings, app_credit, app_label). Ebenfalls als alt_id für swap_route_item nutzbar. |
decision_model |
mcp_hints |
Berechnete 2-Achsen-Urteile (worth_it, not_worth_travel, not_worth_time, not_worth_both), die bewerten, ob sich die Fahrt lohnt. |
single_item_comparison |
mcp_hints |
Direkter Vergleich bei Einzelprodukten, der aufschlüsselt, warum geringere Fahrtkosten oft den Gesamtsieg gegenüber dem niedrigsten Regalpreis bringen. |
share_url |
Root-Ebene | Link zur interaktiven Karte (Produkt-Weblinks werden weggelassen, um Token zu sparen). |
Tipp: Der Parameter
hour_costist die wichtigste Einstellschraube. Setze ihn niedrig (1–3), wenn du Zeit hast und maximale Ersparnis wünschst; setze ihn hoch (20–30), wenn Zeit Geld ist und du den schnellsten Einkaufsplan bei möglichst nur einem Geschäft bevorzugst. Für Details dazu, wie Artikellisten automatisch normiert, mit ADV-Dichtebrücken umgerechnet und Mengen interpretiert werden, lies Wie offerhopper deine Einkaufsliste versteht. Wie diese Dichtebrücken hergeleitet und verglichen werden, erfährst du in Welche Packung ist wirklich günstiger. Für das Einrichten eines stehenden Haushaltskontextes und automatisierter Wochen-Checks lies unseren Leitfaden zum persönlichen AI-Einkaufsassistenten.
Tool-Referenz: swap_route_item
Ändert das Angebot eines einzelnen Artikels auf einer bestehenden Route, ohne die ganze Liste neu zu planen. Die Route behält dieselben Läden und dieselbe Reihenfolge. Du bekommst die aktualisierte Route zurück, mit neuen Preisen und neuem Lohnt-sich-Urteil. Die geteilte Karte aktualisiert sich direkt. Eine share_url, die du schon verschickt hast, funktioniert weiter.
| Parameter | Typ | Erforderlich | Beschreibung |
|---|---|---|---|
share |
string | ✅ | Die share_url aus einer früheren plan_optimal_shopping_route-Antwort oder ihre 8-stellige ID |
offer_id |
string | ✅ | Die aktuelle offer_id des Artikels, kopiert aus products_to_buy |
alt_id |
string | ✅ | Die offer_id des Ersatzes, kopiert aus den alternatives (selber Laden) oder cross_store_alternatives (ein Laden, der schon auf der Route liegt) des Artikels |
Kopiere beide IDs aus der früheren Antwort. Baue sie nie selbst. Die alt_id muss dieselbe Art von Artikel sein, und ihr Laden muss schon ein Stopp auf der Route sein. Ein Tausch verschiebt einen Artikel zwischen Stopps, die es schon gibt. Er kann keinen neuen Laden hinzufügen. Für einen neuen Laden ruf plan_optimal_shopping_route erneut auf.
buy_count wird neu berechnet, damit das neue Angebot die angefragte Menge weiter deckt. Ein Tausch kann also Menge und Summe der Zeile ändern, nicht nur den Stückpreis.
Die Antwort hat dieselbe Struktur wie plan_optimal_shopping_route, mit einem neuen mcp_hints-Urteil und neuen cross_store_alternatives. Lies sie genauso.
Bei einem Fehler bekommst du eine kurze Meldung statt einer kaputten Route: Share nicht gefunden oder abgelaufen, offer_id passt zu keinem Artikel auf der Route, alt_id ist keine gültige Alternative für diesen Artikel, oder der Ziel-Laden liegt nicht auf der Route. Gib die Meldung weiter und wähle eine gültige ID. Versuch es nicht blind erneut.
Prompt-Muster, die gut funktionieren
Diese Prompts sind verlässliche Startpunkte — passe sie für deinen Anwendungsfall an:
Wocheneinkauf mit Budget-Fokus
Ich muss kaufen: 2L Vollmilch, 6 Eier, 500g Rinderhackfleisch, 1kg Kartoffeln, griechischen Joghurt und ein Paket Spaghetti. Start am Hauptbahnhof Trier, mit dem Auto. Priorisiere Ersparnisse vor Geschwindigkeit.
Schnelle Erledigung zu Fuß
Ich brauche nur Brot und Butter. Ich bin am Hauptbahnhof Köln und gehe zu Fuß. Was ist die nächste und günstigste Option?
Pendelstrecke (Korridor-Trip)
Ich pendle jeden Morgen mit dem Auto vom Hauptbahnhof Potsdam nach Berlin Mitte. Findest du den besten Ort, um auf dem Weg Kaffee, Milch und eine Banane zu besorgen?
Reiner Preisvergleich
Was kostet 1kg Bio-Äpfel aktuell bei Rewe, Aldi und Edeka in der Nähe der PLZ 10115 (Berlin Mitte)?
Häufig gestellte Fragen (FAQ)
Benötigt der MCP-Server einen API-Key? Nein. Der MCP-Endpunkt von offerhopper.ai ist derzeit offen und erfordert keine Authentifizierung. Dies kann sich ändern, wenn die Nutzung steigt – prüfe diese Seite für Updates.
Ist dies für die kommerzielle Nutzung oder Produktion geeignet? offerhopper.ai ist ein nicht-kommerzielles Hobbyprojekt. Automatisierte Abfragen sind gemäß den Nutzungsbedingungen nicht gestattet. Die MCP-Integration ist für die private Nutzung durch KI-Assistenten gedacht, nicht für den Aufbau kommerzieller Datenpipelines.
Welche Händler werden abgedeckt? Derzeit: Aldi, Lidl, Rewe, Edeka, Penny, Norma, Netto, DM, Rossmann und Müller – nur in Deutschland.
Wie aktuell sind die Preisdaten? Preise werden zum Abfragezeitpunkt live aus den öffentlich zugänglichen Angeboten der Händler abgerufen. Wöchentliche Angebotszyklen (z. B. Angebote ab Donnerstag bei Aldi) spiegeln sich in Echtzeit wider.
Was passiert, wenn meine Stadt nicht erkannt wird? Gib eine Postleitzahl statt eines Stadtnamens an, um die zuverlässigsten Ergebnisse zu erhalten. Die 5-stelligen deutschen Postleitzahlen funktionieren am besten.
Kann ich dies mit LangChain oder LlamaIndex verwenden?
Ja — beide Frameworks unterstützen MCP-Tool-Aufrufe über ihre jeweiligen MCP-Client-Integrationen. Verwende https://mcp.offerhopper.ai/mcp als Server-URL in deiner Tool-Konfiguration.
Fazit
Die MCP-Integration von offerhopper.ai bietet jedem MCP-kompatiblen KI-Agenten eine direkte Live-Verbindung zu deutschen Lebensmittelpreisen und Routenoptimierungen in einem einzigen Tool-Aufruf. Das LLM übernimmt das logische Denken und die Kommunikation mit dem Nutzer; offerhopper.ai übernimmt die schwierigen Teile: Live-Preisabfrage, Geocodierung und Routenoptimierung über mehrere Geschäfte hinweg.
Egal, ob du einen persönlichen Haushaltsassistenten, einen sparsamen Einkaufs-Chatbot baust oder einfach nur möchtest, dass dein Claude- oder ChatGPT-Setup wirklich nützliche Einkaufstipps gibt – diese Integration ist der schnellste Weg von „Was kaufe ich wo am besten?“ zu einer echten, optimierten Antwort.
Für fortgeschrittene Prompts, Haushaltskonfigurationen und automatisierte Wochen-Checks lies unseren Leitfaden: Persönlicher AI-Einkaufsassistent mit Claude, ChatGPT & OpenClaw. Wenn du dich für das mathematische Modell interessierst, schau dir Der Routenoptimierungs-Algorithmus an.