mcp-recipe-shopping-list
Recipe Shopping List — MCPサーバー
MCPサーバー(Model Context Protocol)で、以下のことができます:
food.ruのレシピを読む — リンクから材料、手順、カロリー・栄養成分(КБЖУ)を取得
magnit.ruで商品を検索 — 特定の店舗を指定して検索
買い物リストを作成 — レシピに合わせて価格付きの商品を見つけ、合計を計算
店舗情報を表示 — 店舗コードから情報を取得
結果:レシピのリンクを渡すと、マグニットの価格と商品への直接リンク付きの 買い物リストが完成します。
🎓 学習用プロジェクト: このプロジェクトは、小売チェーンのカテゴリーマネージャーに 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すべてのフラグはオプションです:
フラグ | 機能 |
| すべての質問にデフォルト値で回答 |
| マグニットの店舗コード(デフォルト:543440) |
| 店舗タイプ(デフォルト:dostavka) |
| サーバーを登録するMCPクライアント(カンマ区切り) |
| Chromiumブラウザをダウンロードしない |
|
|
| 環境の確認のみ行う — 変更はしない |
| プロジェクトフォルダ(デフォルト:インストーラーのフォルダ) |
例:
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"
}
}
}
}ツール
ツール | 機能 |
| food.ruのレシピ:材料、手順、カロリー・栄養成分 |
| magnit.ruでの商品検索 |
| 価格と合計付きの買い物リスト |
| 店舗情報 |
例
「レシピはこちら: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分)。
This server cannot be deployed
Maintenance
Related MCP Connectors
Your kitchen in chat: pantry stock, shopping lists, recipes and scanned grocery receipts.
Turn any shopping list into a ready-to-checkout grocery cart across 26 European supermarkets.
Household-aware cooking brain: pantry, meal suggestions, dietary safety, recipes, shopping lists.
AI-powered kitchen management — pantry, recipes, meal plans, shopping lists
Related MCP Servers
- AlicenseAqualityBmaintenanceMCP 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).751 npm7MIT
- AlicenseAqualityDmaintenanceExtracts branded ingredients and kitchen tools from recipes, matches them to affiliate products, and generates shoppable ingredient lists to turn recipes into affiliate revenue.347 npm1MIT
- FlicenseBqualityDmaintenanceEnables 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-
- AlicenseNot gradedqualityCmaintenanceEnables automated weekly meal planning and grocery price comparison across Swedish supermarkets through a Claude/GPT interface.3MIT