Skip to main content
Glama
KrivchenkoEgor

mcp-recipe-shopping-list

Recipe Shopping List — MCP-Server

MCP-Server (Model Context Protocol), der Folgendes kann:

  1. Rezepte von food.ru lesen — über den Link werden Zutaten, Schritte, Nährwerte (Kcal, Eiweiß, Fett, Kohlenhydrate) abgerufen

  2. Produkte auf magnit.ru suchen — unter Berücksichtigung des konkreten Geschäfts

  3. Einkaufsliste erstellen — für ein Rezept werden Produkte mit Preisen gefunden und die Gesamtsumme berechnet

  4. Informationen über das Geschäft anzeigen — anhand des Geschäftscodes

Ergebnis: Sie geben einen Rezeptlink ein — Sie erhalten eine fertige Einkaufsliste mit Preisen von Magnit und direkten Links zu den Produkten.

🎓 Lernprojekt: Das Projekt wurde verwendet, um Kategoriemanager einer Einzelhandelskette in die Erstellung von MCP-Servern einzuweisen. Es ist ein praktischer Fall mit einem vollständigen Zyklus: von der Idee und dem Lastenheft bis zum funktionierenden MCP-Server, der von einem KI-Assistenten genutzt wird. Die Teilnehmer erstellen mit Hilfe eines KI-Agenten eine funktionierende Anwendung — einen Rezept-Parser für food.ru, eine Produktsuche auf magnit.ru und eine Einkaufsliste mit Preisen — und erzielen ein positives Ergebnis innerhalb einer einzigen Sitzung.

🌐 Web-Version: Neben der MCP-Schnittstelle gibt es eine lokale Webschnittstelle — sie benötigt keinen MCP-Client und funktioniert im Browser. Start mit einem einzigen Befehl:

./start.sh   # запустить и открыть страницу в браузере (http://127.0.0.1:8000)
./stop.sh    # остановить сервер

In der Web-Version können Sie einen Rezeptlink einfügen, eine Tabelle mit der Einkaufsliste erhalten und sie in Excel speichern. Details finden Sie im Abschnitt „Web-Schnittstelle“.


Installation

Schneller Weg: Installationsprogramm install.py

Das Skript install.py (nur Standard-Python-Bibliothek — nichts zusätzlich installieren) erledigt alles selbst: Es erstellt eine virtuelle Umgebung, installiert Abhängigkeiten und den Browser für Playwright, erstellt .env, trägt den Server in die ausgewählten MCP-Clients ein und prüft, dass alles funktioniert.

Erforderlich ist Python 3.11+ (wir empfehlen uv — das Installationsprogramm findet sowohl uv als auch normales Python).

python install.py      # или: python3 install.py

Alle Flags sind optional:

Flag

Funktion

--yes

Alle Fragen mit Standardwerten beantworten

--shop-code CODE

Magnit-Geschäftscode (Standard: 543440)

--shop-type dostavka|supermarket|hypermarket

Geschäftstyp (Standard: dostavka)

--clients opencode,claude

Welchen MCP-Clients der Server hinzugefügt wird (kommagetrennt)

--no-browser

Chromium-Browser nicht herunterladen

--force

.venv neu erstellen und .env überschreiben

--check

Nur Umgebung prüfen — nichts ändern

--project PFAD

Projektordner (Standard: Ordner des Installationsprogramms)

Beispiele:

python install.py --check              # проверка окружения без изменений
python install.py --yes                # установка «на все по умолчанию»
python install.py --shop-code 992301 --clients opencode,claude

Manuell

Erforderlich ist Python 3.11+ (wir empfehlen uv).

# 1. Виртуальное окружение и зависимости
uv venv --python 3.11 .venv
uv pip install --python .venv/bin/python -r requirements.txt

# 2. Браузер для Playwright (оба сайта — SPA, без браузера никак)
.venv/bin/python -m playwright install chromium

# 3. Секреты
cp .env.example .env   # при необходимости поправь код магазина по умолчанию

Related MCP server: Recipe Commerce Intelligence MCP

Start

.venv/bin/python src/server.py

Der Server arbeitet über das MCP-Protokoll über stdio — er wird vom KI-Assistenten (Claude Desktop, LM Studio usw.) aufgerufen, von sich aus „schweigt“ er im Terminal.

Web-Schnittstelle

Eine lokale Webseite für alle, die keinen MCP-Client anschließen möchten: Sie fügen einen Rezeptlink ein — Sie erhalten eine Tabelle mit der Einkaufsliste und eine Schaltfläche zum Speichern in Excel.

Start (der Server öffnet die Seite selbst im Browser):

./start.sh     # запустить и открыть браузер
./stop.sh      # остановить сервер

Ein erneutes ./start.sh bei laufendem Server öffnet einfach die Seite. Manuell (falls die Skripte nicht geeignet sind):

.venv/bin/python src/web/server.py

Öffnen Sie im Browser: http://127.0.0.1:8000

Was die Seite kann:

  • einen food.ru-Rezeptlink einfügen und auf die Schaltfläche klicken — der Server erstellt die Einkaufsliste (die Anfrage an die Websites dauert 30–90 Sekunden, ein Ladeindikator wird angezeigt);

  • eine Tabelle anzeigen: Zutat, Menge, Produkt bei Magnit, Preis, zu kaufende Menge, Summe, Produktlink;

  • die Liste mit der Schaltfläche „In Excel speichern“ in eine Excel-Datei speichern.

Excel-Dateien werden im Ordner exports/ im Projektstamm gespeichert (Name im Format shopping_list_<Rezept>_<Datum>.xlsx).

Verbindung zu OpenCode

In ~/.config/opencode/opencode.jsonc (global) oder opencode.json im Projektstamm fügen Sie den Abschnitt mcp hinzu — das Format unterscheidet sich von Claude Desktop (Schlüssel mcp, command — Array, Variablen — environment):

{
  "mcp": {
    "recipe-shopping-list": {
      "type": "local",
      "command": [
        "/ПОЛНЫЙ/ПУТЬ/К/MCP_rec/.venv/bin/python",
        "/ПОЛНЫЙ/ПУТЬ/К/MCP_rec/src/server.py"
      ],
      "environment": {
        "MAGNIT_SHOP_CODE": "543440",
        "MAGNIT_SHOP_TYPE": "dostavka",
        "LOG_LEVEL": "INFO"
      },
      "enabled": true
    }
  }
}

Nach dem Neustart von OpenCode erscheint der Server in der MCP-Liste (Befehl /mcp in der Anwendung). Die Überprüfung über das Terminal (opencode mcp list) funktioniert bei einer Installation über OpenCode.app nicht — die CLI ist ein Electron-Wrapper.

Verbindung zu Claude Desktop

In claude_desktop_config.json fügen Sie hinzu (Pfade müssen absolut sein):

{
  "mcpServers": {
    "recipe-shopping-list": {
      "command": "/ПОЛНЫЙ/ПУТЬ/К/MCP_rec/.venv/bin/python",
      "args": ["/ПОЛНЫЙ/ПУТЬ/К/MCP_rec/src/server.py"],
      "env": {
        "MAGNIT_SHOP_CODE": "543440",
        "MAGNIT_SHOP_TYPE": "dostavka",
        "LOG_LEVEL": "INFO"
      }
    }
  }
}

Werkzeuge

Werkzeug

Funktion

parse_foodru_recipe(recipe_url)

Rezept von food.ru: Zutaten, Schritte, Nährwerte

search_magnit_product(query, shop_code, shop_type, filters)

Produktsuche auf magnit.ru

get_shopping_list(recipe_url, shop_code, shop_type)

Einkaufsliste mit Preisen und Gesamtsumme

get_shop_info(shop_code)

Informationen über das Geschäft

Beispiel

„Hier ist das Rezept: https://food.ru/recipes/269806-sous-iz-iogurta-s-ukropom-i-chesnokom-1766588076“

Der Agent ruft get_shopping_list auf und gibt zurück:

Греческий йогурт — 100г → Йогурт греческий Teos 2% 140г — 89,90 ₽ [ссылка]
Чеснок — 2 зубчик =10г → Чеснок свежий 100г — 45,00 ₽ [ссылка]
...
Итого: 356,70 ₽ · 6 товаров

Tests

Schnelle Logiktests (sie greifen nicht auf Websites zu — die Parser werden durch Mocks ersetzt):

.venv/bin/python -m pytest tests/ -v

Live-Integrationstests — sie öffnen tatsächlich food.ru und magnit.ru über Playwright, wie der produktive Server (~1 Minute, mit Pausen zwischen den Anfragen):

.venv/bin/python -m pytest -m integration -v

Regeln für Live-Tests: Website nicht erreichbar (Netzwerk) — Test wird übersprungen; Website hat geantwortet, aber die Struktur stimmt nicht — Test schlägt fehl (das Layout hat sich geändert, es ist Zeit, die Selektoren zu aktualisieren und die Lektion in LESSONS.md festzuhalten).

Struktur

src/
├── server.py                  # Точка входа MCP-сервера
├── tools/                     # MCP-инструменты (бизнес-логика)
├── integrations/              # Парсеры сайтов (Playwright)
├── models/                    # Pydantic-модели
├── utils/                     # Кэш, ограничитель запросов, валидаторы
└── config/                    # Настройки (.env) и селекторы

Wichtig zu wissen

  • Beide Websites (food.ru, magnit.ru) sind SPAs: Die Daten werden per JavaScript nachgeladen. Deshalb arbeiten die Parser über Playwright (Headless-Browser) und nicht über einfaches HTTP.

  • Zwischen den Anfragen an die Websites liegt eine Pause von 2–5 Sekunden, die Ergebnisse werden gecacht (Rezepte für 24 Stunden, Produkte für 15 Minuten).

Related MCP Connectors

Related MCP Servers

  • A
    license
    A
    quality
    B
    maintenance
    MCP server for the Pepesto API — give your agent the ability to turn any recipe (a URL, plain text, or a photo) into a matched basket of real supermarket products with live prices, across 26 European supermarkets. The MCP covers the recipe → matched cart half of the grocery shopping workflow (parse / search / map ingredients to SKUs / check catalogs).
    7
    51 npm
    7
    MIT
  • A
    license
    A
    quality
    D
    maintenance
    Extracts branded ingredients and kitchen tools from recipes, matches them to affiliate products, and generates shoppable ingredient lists to turn recipes into affiliate revenue.
    3
    47 npm
    1
    MIT
  • F
    license
    B
    quality
    D
    maintenance
    Enables cross-store price comparison and recipe-driven cart automation for Israeli grocery stores Shufersal and Tiv Taam, with an extensible architecture for additional stores.
    14
    -
  • A
    license
    Not graded
    quality
    C
    maintenance
    Enables automated weekly meal planning and grocery price comparison across Swedish supermarkets through a Claude/GPT interface.
    3
    MIT