Skip to main content
Glama
KrivchenkoEgor

mcp-recipe-shopping-list

Recipe Shopping List — MCPサーバー

MCPサーバー(Model Context Protocol)で、以下のことができます:

  1. food.ruのレシピを読む — リンクから材料、手順、カロリー・栄養成分(КБЖУ)を取得

  2. magnit.ruで商品を検索 — 特定の店舗を指定して検索

  3. 買い物リストを作成 — レシピに合わせて価格付きの商品を見つけ、合計を計算

  4. 店舗情報を表示 — 店舗コードから情報を取得

結果:レシピのリンクを渡すと、マグニットの価格と商品への直接リンク付きの 買い物リストが完成します。

🎓 学習用プロジェクト: このプロジェクトは、小売チェーンのカテゴリーマネージャーに MCPサーバーの作成を教えるために使用されました。アイデアと技術仕様から、 AIアシスタントが使用する実働するMCPサーバーまで、完全なサイクルを備えた 実践的なケースです。参加者はAIエージェントの助けを借りて、実際に動作する アプリケーション(food.ruのレシピパーサー、magnit.ruの商品検索、価格付きの 買い物リスト)を構築し、1回のセッションで成果を得られます。

🌐 ウェブ版: MCPインターフェースに加えて、ローカルのウェブインターフェースも あります。MCPクライアントは不要で、ブラウザで動作します。起動は1コマンド:

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

ウェブ版では、レシピのリンクを貼り付けて買い物リストの表を取得し、 Excelに保存できます。詳細は「ウェブインターフェース」セクションを参照してください。


インストール

簡単な方法:インストーラー install.py

スクリプト install.py(Python標準ライブラリのみ使用 — 追加のインストールは 不要)がすべて自動で行います:仮想環境の作成、依存関係とPlaywright用ブラウザの インストール、.envの作成、選択したMCPクライアントへのサーバー登録、 動作確認まで行います。

Python 3.11+が必要です(uvを推奨 — インストーラーはuvと 通常のPythonの両方を見つけます)。

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

すべてのフラグはオプションです:

フラグ

機能

--yes

すべての質問にデフォルト値で回答

--shop-code КОД

マグニットの店舗コード(デフォルト:543440)

--shop-type dostavka|supermarket|hypermarket

店舗タイプ(デフォルト:dostavka)

--clients opencode,claude

サーバーを登録するMCPクライアント(カンマ区切り)

--no-browser

Chromiumブラウザをダウンロードしない

--force

.venvを再作成し、.envを上書き

--check

環境の確認のみ行う — 変更はしない

--project ПУТЬ

プロジェクトフォルダ(デフォルト:インストーラーのフォルダ)

例:

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

手動インストール

Python 3.11+が必要です(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

起動

.venv/bin/python src/server.py

サーバーはstdio経由のMCPプロトコルで動作します — AIアシスタント (Claude Desktop、LM Studioなど)が呼び出します。単体では ターミナルで「沈黙」したままです。

ウェブインターフェース

MCPクライアントを接続したくない人のためのローカルウェブページ: レシピのリンクを貼り付けると、買い物リストの表とExcel保存ボタンが表示されます。

起動(サーバーが自動的にブラウザでページを開きます):

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

サーバー稼働中に再度./start.shを実行すると、ページが開くだけです。 手動で起動する場合(スクリプトが使えない場合):

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

ブラウザで開く:http://127.0.0.1:8000

ページでできること:

  • food.ruのレシピリンクを貼り付けてボタンを押す — サーバーが買い物リストを 作成します(サイトへのリクエストに30〜90秒かかります。ローディングインジケーターが表示されます);

  • 表を表示:材料、数量、マグニットの商品、価格、購入数量、合計、商品へのリンク;

  • 「Excelに保存」ボタンでリストをExcelファイルに保存。

Excelファイルはプロジェクトルートのexports/フォルダに保存されます (ファイル名形式:shopping_list_<レシピ>_<日付>.xlsx)。

OpenCodeへの接続

~/.config/opencode/opencode.jsonc(グローバル)またはプロジェクトルートの opencode.jsonに、mcpセクションを追加してください — 形式が Claude Desktopとは異なります(キーはmcp、commandは配列、 変数は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
    }
  }
}

OpenCodeを再起動すると、サーバーがMCPリストに表示されます(アプリ内で/mcpコマンド)。 ターミナルからの確認(opencode mcp list)は、OpenCode.app経由のインストールでは 機能しません — CLIはElectronラッパーであるためです。

Claude Desktopへの接続

claude_desktop_config.jsonに追加します(パスは絶対パスである必要があります):

{
  "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"
      }
    }
  }
}

ツール

ツール

機能

parse_foodru_recipe(recipe_url)

food.ruのレシピ:材料、手順、カロリー・栄養成分

search_magnit_product(query, shop_code, shop_type, filters)

magnit.ruでの商品検索

get_shopping_list(recipe_url, shop_code, shop_type)

価格と合計付きの買い物リスト

get_shop_info(shop_code)

店舗情報

例

「レシピはこちら:https://food.ru/recipes/269806-sous-iz-iogurta-s-ukropom-i-chesnokom-1766588076」

エージェントはget_shopping_listを呼び出し、以下を返します:

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

テスト

ロジックの高速テスト(サイトにはアクセスしません — パーサーはモックに置き換えられます):

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

実環境の統合テスト — 実際にPlaywright経由でfood.ruとmagnit.ruを開きます (実稼働サーバーと同様、約1分、リクエスト間に待機時間あり):

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

実環境テストのルール:サイトにアクセスできない場合(ネットワーク)— テストはスキップ; サイトは応答したが構造が異なる場合 — テストは失敗(レイアウトが変更されたため、 セレクターを更新してLESSONS.mdにレッスンを記録する時期です)。

構造

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

重要な注意点

  • 両サイト(food.ru、magnit.ru)はSPAです:データはJavaScriptで読み込まれます。 そのため、パーサーは単純なHTTPではなくPlaywright(ヘッドレスブラウザ)経由で動作します。

  • サイトへのリクエスト間には2〜5秒の待機時間があり、結果はキャッシュされます (レシピは24時間、商品は15分)。

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