Yandex Eats MCP
Yandex Eats MCP
Ein Single-User-Streamable-HTTP-MCP-Server für ChatGPT. Er spricht direkt die private Web-API an, die von https://eats.yandex.com verwendet wird; es wird keine Browser-Automatisierung eingesetzt.
Aktuelle Version:
durchsucht Restaurants und passende Artikel in der Nähe eines serverkonfigurierten Lieferpunkts;
lädt Verfügbarkeit und vollständige Menüs von Restaurants;
listet und liest serverseitige Warenkörbe;
überwacht aktive Bestellungen mit servergesteuertem Polling, einem persistenten Ereignis-Cursor und optionaler Telegram-Zustellung;
kann nach Aktivierung eines expliziten Feature-Flags Restaurant-Warenkorbartikel hinzufügen, aktualisieren und entfernen, einschließlich als „Erwachsen“ markierter Artikel;
schützt den öffentlichen MCP-Endpunkt mit einem persistenten Single-User-OAuth-2.1- und PKCE-Flow;
gibt das Yandex-Cookie, das Passport-Token, exakte Koordinaten, Telefon, Adresse oder Zahlungsdaten niemals als MCP-Ergebnisse aus.
Checkout, place_order, Abholung, SKU-/Einzelhandels-Warenkörbe und Multiorder sind bewusst nicht implementiert. Produkte für Erwachsene können zu einem Restaurant-Warenkorb hinzugefügt werden, aber der MCP umgeht keine Berechtigungsprüfungen und führt keine Altersverifikation durch; diese Anforderungen werden weiterhin von Yandex Eats durchgesetzt. Ein Warenkorb ist keine Bestellung.
Risikohinweis
Dieses Projekt hängt von einer undokumentierten privaten API ab. Endpunkte und Antwortstrukturen können sich ohne Vorankündigung ändern, das Verhalten kann durch A/B-Flags gesteuert werden, und die automatisierte Nutzung kann durch die Yandex-Bedingungen oder Anti-Bot-Kontrollen eingeschränkt sein. Automatisieren Sie niemals CAPTCHA oder OTP. Verwenden Sie nach Möglichkeit ein dediziertes Konto und veröffentlichen Sie diesen Dienst nicht für andere Benutzer ohne eine separate rechtliche und sicherheitstechnische Prüfung.
Der kopierte Cookie-Header kann Zugriff auf mehr als nur Yandex Eats gewähren. Behandeln Sie ihn wie ein Kontopasswort.
Related MCP server: doordash-mcp
Architektur
ChatGPT
│ HTTPS + OAuth 2.1/PKCE
▼
Cloudflare hostname / Tunnel
│ http://127.0.0.1:3000
▼
Docker: yandex-eats-mcp
│ private Cookie + stable device/session IDs
▼
https://eats.yandex.comDer prozessweite OrderMonitor ist unabhängig von MCP-Anfragesitzungen. Er pollt die schreibgeschützten Bestell-Endpunkte von Yandex, schreibt bereinigten Zustand nach /app/state/order-monitor-state.json, hängt cursor-adressierbare Ereignisse an /app/state/order-events.jsonl an und sendet optional eine minimale Telegram-Nachricht.
Ein MCP-Server kann in einer schlafenden ChatGPT-Konversation keine Nachricht initiieren. ChatGPT kann get_order_events regelmäßig aufrufen (zum Beispiel über eine geplante Aufgabe), während Telegram den nahezu Echtzeit-Push-Kanal bereitstellt.
Der MCP-Endpunkt ist /mcp. OAuth-Discovery, Client-Registrierung, Autorisierungs-, Token- und Metadaten-Endpunkte für geschützte Ressourcen werden vom selben Container bereitgestellt. OAuth-Clients und gehashte Access-/Refresh-Tokens werden im Docker-Volume yandex-eats-state persistiert. Das Besitzer-Passwort ist ein Docker-Secret und wird niemals im OAuth-Zustand persistiert.
Voraussetzungen
Docker Engine mit Compose;
ein bestehender Cloudflare Tunnel und ein Hostname, den Sie kontrollieren;
eine angemeldete Browser-Sitzung für
eats.yandex.com;Liefer-Breitengrad/Längengrad für die gewünschte Adresse.
Secrets konfigurieren
Erstellen Sie die ignorierten lokalen Dateien. Der Container läuft als unprivilegierter Benutzer node mit UID/GID 1000:1000, daher müssen die Secret-Dateien für GID 1000 lesbar sein, für andere Host-Benutzer jedoch unzugänglich bleiben:
mkdir -p secrets
chown root:1000 secrets
chmod 750 secrets
umask 077
openssl rand -base64 32 > secrets/mcp_oauth_passwordFür secrets/yandex_eats_cookie:
Melden Sie sich in Chrome bei
https://eats.yandex.coman.Öffnen Sie DevTools → Network und laden Sie die Seite neu.
Wählen Sie eine authentifizierte Anfrage aus und kopieren Sie nur den Wert des vollständigen
Cookie-Anfrageheaders.Fügen Sie diesen einzeiligen Wert in
secrets/yandex_eats_cookieein. Fügen Sie das PräfixCookie:nicht hinzu.Gewähren Sie der Gruppe des Containers Lesezugriff auf beide Secrets:
chown root:1000 secrets/yandex_eats_cookie secrets/mcp_oauth_password chmod 640 secrets/yandex_eats_cookie secrets/mcp_oauth_password
Docker Compose implementiert dateibasierte Secrets als schreibgeschützte Bind-Mounts. Daher kann eine Host-Datei im Besitz von root:root mit Modus 0600 von diesem unprivilegierten Container nicht gelesen werden und führt zu einem EACCES-Startfehler.
Fügen Sie keines der beiden Secrets in ChatGPT, Shell-Befehlsargumente, Logs, Issues oder Commits ein.
Erstellen Sie für Telegram-Benachrichtigungen einen Bot mit BotFather, ermitteln Sie die Ziel-Chat-ID und legen Sie die beiden Rohwerte in separaten ignorierten Dateien ab:
printf '%s\n' '<bot token>' > secrets/order_notify_telegram_token
printf '%s\n' '<chat id>' > secrets/order_notify_telegram_chat_id
chown root:1000 secrets/order_notify_telegram_token secrets/order_notify_telegram_chat_id
chmod 640 secrets/order_notify_telegram_token secrets/order_notify_telegram_chat_idFügen Sie in keiner der beiden Dateien Anführungszeichen oder Variablennamen ein. Der Bot muss dem ausgewählten Chat Nachrichten senden können.
Dienst konfigurieren
cp .env.example .envBearbeiten Sie .env:
PUBLIC_BASE_URL=https://eats-mcp.example.com
YANDEX_EATS_LATITUDE=40.000000
YANDEX_EATS_LONGITUDE=44.000000
YANDEX_EATS_CITY=Yerevan
YANDEX_EATS_ADDRESS_LABEL=home
YANDEX_EATS_ENABLE_MUTATIONS=false
YANDEX_EATS_ENABLE_ORDER_MONITORING=true
ORDER_NOTIFY_PROVIDER=telegramYANDEX_EATS_ADDRESS_LABEL ist sicherer Text, der an das Modell zurückgegeben wird. Exakte Koordinaten bleiben im Client und werden niemals in MCP-Antworten aufgenommen.
Starten Sie den Server:
docker compose up -d --build
docker compose ps
curl http://127.0.0.1:3000/healthzDer Compose-Port ist an 127.0.0.1 gebunden, nicht an alle Host-Schnittstellen.
Cloudflare Tunnel
Erstellen Sie eine veröffentlichte Anwendungsroute von Ihrem gewählten Hostnamen zu:
http://127.0.0.1:3000Diese Dienstadresse ist korrekt, wenn cloudflared auf dem Host läuft. Wenn cloudflared in einem anderen Container läuft, platzieren Sie ihn im selben Docker-Netzwerk und routen Sie zu http://mcp:3000 anstelle der Host-Loopback-Adresse.
Wichtige Cloudflare-Einstellungen:
cachen Sie
/mcp,/authorize,/token,/register,/revoke,/oauth/*oder/.well-known/*nicht;bewahren Sie Streaming-Antworten und den öffentlichen
Host-Header;WAF- und Rate-Limit-Regeln sind in Ordnung, aber platzieren Sie keinen interaktiven Cloudflare-Access-Login vor diesen Pfaden – ChatGPT muss die MCP-OAuth-Discovery und Callbacks direkt erreichen;
halten Sie
PUBLIC_BASE_URLidentisch mit dem externen HTTPS-Origin, ohne/mcpoder einen nachgestellten Pfad.
Cloudflare Tunnel macht den Origin erreichbar; der MCP-OAuth-Flow bleibt die Autorisierungsgrenze auf Anwendungsebene.
Von ChatGPT aus verbinden
Bestätigen Sie, dass
https://your-domain.example/healthz{"status":"ok"}zurückgibt.Fügen Sie im ChatGPT-Entwicklermodus einen benutzerdefinierten MCP-/Plugin-Endpunkt hinzu:
https://your-domain.example/mcpChatGPT sollte die OAuth-Metadaten erkennen und die Autorisierungsseite von Yandex Eats MCP öffnen.
Geben Sie den Wert aus
secrets/mcp_oauth_passwordein. Dies ist das MCP-Besitzer-Passwort, kein Yandex-Passwort.Überprüfen Sie die Werkzeugliste.
remove_cart_itemist destruktiv; Checkout und Bestellaufgabe sollten nicht erscheinen.
Die OAuth-Besitzerseite stellt ausdrücklich klar, dass sie nur Such-/Warenkorbzugriff gewährt.
Tools
Tool | State change | Notes |
| Nein | Nur bereinigter Cookie-Sitzungsstatus |
| Nein | Nur Stadt/Label, niemals exakte Koordinaten |
| Nein | Volltextsuche mit undurchsichtigem Cursor |
| Nein | Verfügbarkeit und voraussichtliche Ankunftszeit (ETA) |
| Nein | Optionale lokale Abfrage-/Kategoriefilterung |
| Nein | Listet Warenkörbe oder lädt einen frischen Warenkorb |
| Nein | Bereinigte gecachte aktive Bestellungen und Monitor-Health |
| Nein | Gecachter Status oder explizite schreibgeschützte Aktualisierung |
| Nein | Persistente Ereignisse nach einem exklusiven Sequenz-Cursor |
| Ja | Validiert aktuelles Menü, erforderliche Optionen und Verfügbarkeit; als „Erwachsen“ markierte Artikel werden unterstützt |
| Ja | Nur auf ausdrückliche Benutzeranfrage |
| Ja, destruktiv | Niemals eine automatische Optimierung |
| Nein | Meldet aktivierte Sicherheitsgrenzen |
Jede Mutation akzeptiert eine optionale UUID operationId; die Wiederholung derselben Operation innerhalb von zehn Minuten liefert dasselbe prozessinterne Ergebnis, anstatt die Upstream-Mutation zu wiederholen. Die Wiederverwendung der ID mit anderen Argumenten wird abgelehnt. Unsichere Upstream-Anfragen werden niemals automatisch wiederholt. Wenn die Antwort verloren geht oder ein Timeout auftritt, gibt das Tool MUTATION_STATUS_UNKNOWN zurück; rufen Sie get_cart auf, um den Zustand abzugleichen.
Nach jeder erfolgreichen Mutation lädt der MCP den Server-Warenkorb neu und gibt ihn zurück. Budgetprüfungen müssen diese frische Summe und ihre verletzten Einschränkungen verwenden, nicht eine lokale Summe.
Bestellüberwachung und Telegram
Die Überwachung ist unabhängig von Warenkorbmutationen und verwendet nur lesende Anfragen. Aktivieren Sie sie mit:
YANDEX_EATS_ENABLE_ORDER_MONITORING=true
ORDER_NOTIFY_PROVIDER=telegramDie Listen- und Tracking-Intervalle werden von Yandex bereitgestellt und durch YANDEX_EATS_ORDER_POLL_MIN_MS / YANDEX_EATS_ORDER_POLL_MAX_MS begrenzt. Netzwerk-, 429- und 5xx-Fehler verwenden ein begrenztes Backoff. Ein 401/403 erzeugt ein monitor.auth_expired-Ereignis; nachdem das Cookie ersetzt wurde, weckt SIGHUP den Monitor sofort auf, und die Wiederherstellung erzeugt monitor.recovered.
Der erste erfolgreiche Snapshot ist eine Basislinie, sodass die Bereitstellung des Monitors nicht über historische Bestellungen benachrichtigt. Spätere Entdeckungen und Fingerprint-Änderungen erzeugen monoton sequenzierte Ereignisse. Telegram-Nachrichten maskieren die Bestellnummer und lassen Adresse, Koordinaten, Telefon, Zahlung, Karten-Payload und Kurieridentität weg.
Um von ChatGPT aus zu pollen, behalten Sie nextSequence aus get_order_events und übergeben Sie es als afterSequence zurück. Der Cursor ist exklusiv, und das Lesen bestätigt keine Ereignisse für andere Clients.
Warenkorbmutationen aktivieren
Lassen Sie dies während der ersten Bereitstellung deaktiviert:
YANDEX_EATS_ENABLE_MUTATIONS=falseÜberprüfen Sie zuerst auth_status, search, get_menu und get_cart. Bereiten Sie dann einen Wegwerf-Restaurantartikel ohne erforderliche Modifikatoren vor, aktivieren Sie das Flag und führen Sie ein kontrolliertes add_to_cart aus, gefolgt von get_cart und dem Entfernen nur der neu erstellten cartItemId.
YANDEX_EATS_ENABLE_MUTATIONS=trueStarten Sie den Container nach dem Ändern des Flags neu. Verwenden Sie clear-cart niemals als Test; es ist absichtlich nicht verfügbar.
Cookie aktualisieren
Wenn auth_status AUTH_EXPIRED oder needsRefresh: true meldet, ersetzen Sie secrets/yandex_eats_cookie durch einen frischen einzeiligen Cookie-Wert und erstellen Sie den Docker-Secret-Mount neu:
chown root:1000 secrets/yandex_eats_cookie
chmod 640 secrets/yandex_eats_cookie
docker compose up -d --force-recreate mcpIn einer Nicht-Compose-Bereitstellung, bei der das gemountete Secret direkt aktualisiert wird, lädt SIGHUP das Cookie neu:
docker compose kill -s HUP mcpEs ist keine automatische Passport-Anmeldung, OTP-, CAPTCHA-Behandlung oder Token-Ernte implementiert.
Entwicklung und Tests
npm install
npm run check
docker compose config
docker compose buildDie normale Testsuite verwendet bereinigte Fixtures und simulierte Upstream-Antworten. Sie prüft Mapper-Toleranz, exakte Anfrageverdrahtung, kein Retry bei mehrdeutigen Mutationen, Mutationsserialisierung/-idempotenz, Authentifizierungspersistenz und MCP-Tool-Annotationen.
Schreibgeschützte Live-Vertragstests sind optional und erfordern Ihr lokales Cookie und Ihre Koordinaten:
export YANDEX_EATS_COOKIE_FILE="$PWD/secrets/yandex_eats_cookie"
export YANDEX_EATS_LATITUDE="40.000000"
export YANDEX_EATS_LONGITUDE="44.000000"
npm run test:live:readonly
npm run test:live:orders:readonlyKein Live-Test in diesem Repository erstellt eine Bestellung. Normale Tests kontaktieren Yandex niemals.
Betriebshinweise
Der Zustand unter
/app/stateenthält sensible Cookie-Jar- und OAuth-Daten; sichern Sie ihn und schützen Sie den Docker-Host entsprechend./readyzmeldet den Gesundheitszustand des Monitors, ohne eine Upstream-Anfrage zu stellen oder Bestell-IDs offenzulegen.Logs enthalten Endpunkt, Status, Dauer und Yandex-Korrelations-IDs. Anfrage-/Antworttexte, Cookies, Autorisierungsheader, Sitzungs-IDs, Telefon-, Adress- und Zahlungsfelder werden geschwärzt oder nicht protokolliert.
AUTH_NOT_CONFIGURED: Das Cookie-Secret fehlt oder ist nicht lesbar.AUTH_EXPIRED: Kopieren Sie einen frischen Browser-Cookie-Header.DELIVERY_LOCATION_NOT_CONFIGURED: Konfigurieren Sie sowohl Breitengrad als auch Längengrad.MUTATIONS_DISABLED: Erwartet, bis das Feature-Flag bewusst aktiviert wird.REQUIRES_CONFIGURATION: Prüfen Sieget_menuund bitten Sie den Benutzer, die erforderlichen Optionen auszuwählen.UNSUPPORTED_CART_MODE: Die aktuelle Version lehnt nicht unterstützte SKU-/Abhol-Warenkorbabläufe ab.MUTATION_STATUS_UNKNOWN: Nicht blind wiederholen; gleichen Sie mitget_cartab.
This server cannot be installed
Maintenance
Resources
Unclaimed servers have limited discoverability.
Looking for Admin?
If you are the server author, to access and configure the admin panel.
Related MCP Servers
- FlicenseBqualityDmaintenanceEnables AI agents to search restaurants, browse menus, and manage DoorDash carts through structured JSON data. It leverages a background browser to handle authentication and direct GraphQL API calls for efficient interaction.72
- FlicenseBqualityDmaintenanceEnables AI agents to search restaurants, browse menus, manage carts, and place orders on DoorDash programmatically. It utilizes a headless browser to interact with DoorDash's GraphQL API and bypass anti-bot protections for the full delivery lifecycle.222
- AlicenseAqualityDmaintenanceIntegrates with Yandex Market Partner API, providing search and execute tools for managing orders, returns, shipments, offers, prices, and other seller operations via natural language.181MIT
- AlicenseNot gradedqualityDmaintenanceEnables accessing Yelp Business API to search businesses, get reviews, menus, and business details.MIT
Related MCP Connectors
AI-native restaurant discovery: verified/menu-indexed/discovered tiers + signed allergy-safety data.
Web search, AI agent, and content extraction via You.com APIs
Federated commerce search across independent WooCommerce merchants. Keyless, read-only MCP server.
Latest Blog Posts
- Who's Calling? MCP Hosts Are an Identity Blind Spot (And the Spec Knows It)By Om-Shree-0709 on .mcpAgent IdentityOAuth 2.1
- Your AI Chatbot Just Exposed Your CEO's Salary to an InternBy Om-Shree-0709 on .Agent IdentityMCP SecurityOAuth Delegation
- Why MCP Servers Need Execution Sandboxing (And Why Your Current Stack Isn't Enough)By Om-Shree-0709 on .Agentic AiPrompt InjectionWebAssembly
MCP directory API
We provide all the information about MCP servers via our MCP API.
curl -X GET 'https://glama.ai/api/mcp/v1/servers/sptmru/yandex-eats-mcp'
If you have feedback or need assistance with the MCP directory API, please join our Discord server