migros-mcp について
migros-mcpは、AIアプリからMigrosの商品、店舗、プロモーション、レシピを検索する非公式のMCPサーバーです。ログインすると買い物かごやリストの管理、注文やCumulusポイントの確認もできます。認証情報とセッションはローカルに保存され、注文や決済は行いません。
主な機能
- 01商品、プロモーション、レシピの検索
- 02栄養情報、原材料、在庫の確認
- 03店舗と営業時間の検索
- 04買い物かごとリストの管理
- 05注文、レシート、Cumulusポイントの確認
活用シーン
- 01キーワードや食材から商品やレシピを検索
- 02指定店舗での商品在庫を確認
- 03買い物かごを整理してチェックアウトリンクを取得
- 04過去の注文やCumulusクーポンを確認
MCP 対応
MCPサーバーとして、Migrosの商品、店舗、プロモーション、レシピを検索するツールをクライアントに提供します。ログイン後は買い物かご、リスト、注文、Cumulus関連の操作も可能ですが、注文や決済は行わず、migros.chでユーザーがチェックアウトします。
設定
ローカルサーバーの設定はどのクライアントでも共通です。コピーしてクライアントの MCP 設定ファイルに貼り付けてください。
docker run -i --rm -e MIGROS_EMAIL -e MIGROS_PASSWORD -e MIGROS_TOTP_SECRET ghcr.io/herp75/migros-mcp:0.6.1MIGROS_EMAILMigros login e-mail (leave out to only use the tools without an account)MIGROS_PASSWORDシークレットMigros password (use one you use nowhere else)MIGROS_TOTP_SECRETシークレット2FA setup key, so no code is ever asked for (works like a second password)ローカルサーバーにはマシン上の実行環境(Node.js 18 以上など)が必要です。設定ファイルの場所はクライアントごとに異なります。
ghcr.io/herp75/migros-mcp:0.6.1stdioツール
ローカルサーバーのツールはマシン上で起動して初めて取得できます。メンテナーはまだツール一覧を提供していません。
詳細
migros-mcp
Claude(およびほかの AI アプリ)からMigrosの商品、レシピ、店舗、キャンペーンを検索できます。サインインすると、買い物かごの管理や注文、レシート、Cumulus ポイントの確認もできます。
非公式です。 Migros が作成またはサポートしているものではありません。Migros のウェブサイトと同じ非公開の接続先を利用しているため、Migros 側で変更があると動作しなくなることがあります。ご自身の責任でご利用ください。
インストール
これはフォークです。 herp75/migros-mcp は lewpgs/migros-mcp をベースに、セキュリティ強化、実環境でのテスト、ツールの追加を行ったものです(CHANGELOGを参照)。Docker イメージ
ghcr.io/herp75/migros-mcpとして提供されており、MCP Registry にはio.github.herp75/migros-mcpとして登録されています。npm パッケージmigros-mcpと Claude Desktop インストーラーmigros-mcp.mcpbは、上流版のものです。
ご自身のコンピューター上で動作するため、Claude Desktop、Claude Code、Cursor など、プログラムを起動できるデスクトップアプリで利用できます。ブラウザー版 claude.ai や Claude のスマートフォンアプリでは利用できません。Docker または Podman が必要です。
ログイン情報は、自分だけが読み取れるファイルに保存します。 検索のみの場合は、この手順を省略してください。
install -m 600 /dev/null ~/.config/migros-mcp.env
"${EDITOR:-nano}" ~/.config/migros-mcp.env
[email protected]
MIGROS_PASSWORD=your-password
各行に 1 つずつ記述し、引用符は付けません。パスワードに $、#、引用符が含まれていても問題ありません(Docker はファイルの内容をそのまま読み取ります)。コードの入力を求められないように 2FA を設定するには、MIGROS_TOTP_SECRET=... を追加してください(Migros アカウントを参照)。
保存したログイン情報は Docker ボリューム migros-mcp に保管されるため、再起動後も残ります。これは重要です。Migros は、サインインを頻繁に行うコンピューターをブロックします。
Claude Code
claude mcp add migros -- docker run -i --rm \
--env-file ~/.config/migros-mcp.env -v migros-mcp:/config \
ghcr.io/herp75/migros-mcp:0.6
検索のみの場合は、--env-file … を省略してください。Podman を使う場合は、docker の代わりに podman と記述します。
Claude Desktop、Cursor、その他のアプリ
アプリの MCP 設定ファイルに、パス内のホームフォルダーを指定して、次の内容を追加します。
- Claude Desktop: Settings > Developer > Edit Config
- Cursor:
~/.cursor/mcp.json(すべてのプロジェクト)または.cursor/mcp.json(1 つのプロジェクト)
{
"mcpServers": {
"migros": {
"command": "docker",
"args": [
"run", "-i", "--rm",
"--env-file", "/home/you/.config/migros-mcp.env",
"-v", "migros-mcp:/config",
"ghcr.io/herp75/migros-mcp:0.6"
]
}
}
}
VS Code、Windsurf、Zed などのほかのアプリでも同じコマンドを実行しますが、設定の書式が少し異なります。ご利用のアプリの MCP に関する説明を確認してください。
イメージの確認(任意)
各イメージには、このリポジトリのリリースワークフローによって、cosign で鍵を使わずに署名しています。
cosign verify ghcr.io/herp75/migros-mcp:0.6 \
--certificate-identity-regexp '^https://github.com/herp75/migros-mcp/\.github/workflows/(docker|release)\.yml@' \
--certificate-oidc-issuer https://token.actions.githubusercontent.com
動作確認
新しいチャットを開始して、次のように尋ねてください。「Migros でオーツミルクを検索してください。」
Migros アカウント
任意です。アカウントがなくても、商品検索、商品詳細、在庫、店舗、キャンペーン、レシピはすべて利用できます。
アカウントがあれば、Claude は買い物かごや買い物リストの確認と変更、注文履歴、店舗でのレシート、Cumulus ポイントの照会、Cumulus クーポンのカードへの追加もできます。注文や支払いを行うことはありません。チェックアウト用のリンクを提示するので、migros.ch でご自身で手続きを完了してください。
migros.ch へのサインイン方法によって、入力する内容が異なります。
| サインイン方法 | 入力する内容 |
|---|---|
| メールアドレスとパスワード | メールアドレスとパスワードを入力します。これで完了です。他で使っていないパスワードを使用してください。サーバーはパスワードをお使いのコンピューター上のファイルに保存します。 |
| メールアドレス、パスワード、認証アプリの6桁コード | メールアドレスとパスワードを入力します。Claude がサインインを必要とするときに、現在のコードを求められます。これは Migros が保存済みのログインを終了した場合にのみ発生し、チャットのたびに求められるわけではありません。 |
| 同じ方法だが、コードを求められたくない場合 | メールアドレス、パスワード、セットアップキー(下記を参照)を入力します。 |
セットアップキーの確認方法(最後の方法を選ぶ場合のみ必要)
セットアップキー(TOTP シークレットとも呼ばれます)は、6桁のコードではありません。Migros を認証アプリに最初に追加したときに取得した、JBSWY3DPEHPK3PXP... のような約32文字の英数字からなる長いコードです。このコードは変わりません。
- パスワードマネージャーに保存していますか? Migros の項目を開き、「ワンタイムパスワードのシークレットを表示」のようなオプションを探してください。
otpauth://で始まるリンクが表示された場合、セットアップキーはsecret=の後ろの部分です。 - どこにも保存していませんか? Migros がセットアップキーを表示するのは、2FA の設定中だけです。Migros アカウントの設定で 2FA を削除し、もう一度設定してください。QR コードの下に、「または、以下のキーを認証アプリに入力してください」 と書かれたボックスがあります。設定を完了する前にそのキーをコピーし、新しい項目を認証アプリに追加してください。
~/.config/migros-mcp.env に MIGROS_TOTP_SECRET=... を1行追加してください(インストールを参照)。
認証アプリのコードのみ使用できます。アカウントでパスキーのみを使用している場合、またはSMSでコードを受信している場合は、先に Migros アカウントの設定で認証アプリを追加してください。
設定
すべての設定は環境変数です。Docker を使用する場合は、~/.config/migros-mcp.env に設定してください(インストールを参照)。いずれも必須ではありません。
| 変数 | デフォルト | 説明 |
|---|---|---|
MIGROS_EMAIL | なし | Migros のログイン用メールアドレスです。メールアドレスとパスワードがない場合、アカウント不要のツールのみ利用できます。 |
MIGROS_PASSWORD | なし | Migros のパスワードです。送信先は login.migros.ch のみです。 |
MIGROS_TOTP_SECRET | なし | コードを求められないようにするための、2FA セットアップキーです。2つ目のパスワードのようなものなので、同様に安全に保管してください。パスワードと同じファイルに保存すると、そのファイルを入手した人は両方の要素を手にすることになります。 |
MIGROS_MCP_UPDATE_CHECK | オン(イメージではオフ) | false、0、off、no を指定すると、GitHub でこのフォークの新しいリリースがないか毎日確認する機能を無効にします(ソースから実行する場合のみ)。 |
MIGROS_API_WRAPPER_USERAGENT | 組み込み | アカウントが不要な検索で送信するブラウザー名を上書きします。通常は不要です。 |
XDG_CONFIG_HOME(Linux)、APPDATA(Windows) | 通常の場所(イメージでは /config) | 保存済みのログイン情報(migros-mcp/session.json)の保存先です。Mac では常に ~/Library/Application Support/migros-mcp/ です。 |
開発時のみ使用する変数:MIGROS_TEST_EMAIL、MIGROS_TEST_PASSWORD、MIGROS_TEST_TOTP_SECRET、MIGROS_LIVE_ENV_FILE、MIGROS_LIVE_SESSION_DIR(開発を参照)。
質問できること
アカウントがなくても:
- 「Migrosでプロテインバーを検索して」
- 「この商品の栄養情報を教えて」
- 「チューリッヒ近郊のMigros店舗を探して」
- 「Migrosでは現在どんなキャンペーンを実施していますか?」
- 「リゾットのレシピを探して」
アカウントがあれば:
- 「Migrosの買い物かごには何が入っていますか?」
- 「牛乳を2リットル、買い物かごに追加して」
- 「このレシピの材料を買い物かごに追加して」
- 「Migrosでの直近5件の注文を見せて」
- 「先月、Migrosでいくら使いましたか?」
- 「先月はどのMigros店舗で買い物をして、それぞれいくら使いましたか?」
- 「Cumulusクーポンは何がありますか?コーヒーのクーポンを有効にして」
- 「週末用の新しい買い物リストを作って」
- 「チェックアウトを完了するためのリンクを教えて」
更新
:0.6 は最新の0.6.xリリース(修正のみ)に追従します。利用するには、イメージをプルしてアプリを再起動してください。
docker pull ghcr.io/herp75/migros-mcp:0.6
新機能は新しいマイナーバージョン(:0.7)として提供されます。設定のタグを変更してください。リリース一覧はリリースページとCHANGELOGで確認できます。イメージは更新を自動で確認しません(MIGROS_MCP_UPDATE_CHECK は無効になっています)。
プライバシーと安全性
- メールアドレス、パスワード、セットアップキーが送信されるのは、Migros独自のログインページ(
login.migros.ch)だけです。Claudeに渡す6桁のコードは、その1回のサインインにのみ使用され、保存も記録もされません。 - パスワードとセットアップキーは
~/.config/migros-mcp.envに保存されます。このファイルを読み取れるのはあなただけで、アプリの設定ファイルには保存されません。 - サインイン後、保存されたログイン情報(Cookieとアクセストークン)は、Dockerボリューム
migros-mcp内のsession.jsonに保存され、あなたのコンピューター上に保管されます。docker volume rm migros-mcpを実行するとサインアウトします。ボリューム内の情報を読み取れるのはサーバーのユーザーだけです。(Dockerを使わずに実行する場合、Linuxでは~/.config/migros-mcp/、Macでは~/Library/Application Support/migros-mcp/、Windowsでは%APPDATA%\migros-mcp\に保存されます。) - エラーメッセージ内では、メールアドレス、パスワード、セットアップキー、Cookie、アクセストークンがマスキングされます。
- 買い物かごを変更するツールには、その旨が示されます。そのため、アプリは実行前に確認を求めることができます。この確認を有効にしておいてください。
- 6桁のコードは自分でClaudeに渡してください。アカウントを操作できるAIに、コードも読み取らせないでください(たとえばパスワードマネージャーから読み取らせるなど)。そうすると、AIが読み取ったテキストを使ってサインインできてしまい、二要素目による保護が機能しなくなります。
- 商品説明、レシピ、注文データはMigrosや他の人から提供されます。migros-mcpは、それらを指示ではなく情報として扱うようAIに指示します。
- 注文や支払いは行いません。
get_checkout_linkはリンクを提示するだけなので、migros.chでご自身で手続きを完了してください。 - セキュリティ上の問題を見つけた場合は、SECURITY.mdをご覧ください。
トラブルシューティング
- 「リクエストが多すぎます」などのサインインエラー。 Migrosは、サインインを頻繁に行うコンピューターをブロックします。その場合、migros-mcpはしばらくの間、自動的に再試行を停止します(最初は30秒で、繰り返し発生するとさらに長くなります)。現在のログインが有効な間は、そのまま使い続けます。エラーメッセージには、再試行できる時刻が表示されます。その時刻になるまで待ってから、もう一度試してください。アプリを何度も再起動したり、パスワードを間違えたりすると、状況が悪化します。
- 以前は動作していた機能が失敗する。 Migrosのウェブサイトが変更された可能性があります。最新バージョンに更新し(更新を参照)、それでも解決しない場合はissueを作成してください。
ツール
これらは、Claudeが裏側で呼び出すツールです。利用するために、ツールを知っておく必要はありません。
Kind列は、ツールがアカウントに対して行う操作を示します。reads(読み取り)、changes(変更。情報は失われません)、deletes(削除または上書き)があります。アプリはこれを使って、事前に確認するタイミングを判断します。reads 以外の操作では、確認を有効にしておいてください。
アカウント不要(すべて reads)
| ツール | 機能 |
|---|---|
search_products | 名前またはキーワードで商品を検索します。オンライン限定販売の商品(「Partner」商品など)も検索できます。 |
get_product_details | 栄養成分、原材料、アレルゲン、価格、評価を取得します。オンライン限定商品には、オンライン価格とPartnerフラグも表示されます。 |
get_stock | 指定した店舗で商品が在庫切れかどうかを確認します。1日1回更新されます。Migrosにデータがない場合は「不明」と表示されます。 |
get_categories | Migrosのすべての商品カテゴリーを取得します。 |
search_stores | 指定した場所の近くにある店舗を、住所と営業時間とともに検索します。 |
get_promotions | 現在のプロモーションとお買い得情報を取得します。 |
search_recipes | MigrosのレシピサイトMigustoを、テキストや材料で検索します。ドイツ語、フランス語、イタリア語のみ対応しています。 |
get_recipe_details | 材料、手順、写真、栄養情報を含むレシピ全体を取得します。 |
get_recipe_products | レシピに合わせてMigustoが提案するMigrosの商品を、名前と価格とともに取得します。add_to_basketですぐに使用できます。 |
アカウントを使用する場合
| ツール | 種別 | 機能 |
|---|---|---|
authenticate | 変更 | 現在の6桁コードでサインインします。セットアップキーが保存されていない場合にのみ使用します。 |
get_profile | 読み取り | 名前、メールアドレス、言語を取得します。 |
get_addresses | 読み取り | 保存済みの配送先住所と請求先住所を取得します。 |
get_shopping_lists | 読み取り | 買い物リストが複数ある場合、名前ごとに取得します。 |
create_shopping_list | 変更 | 空のリストを新規作成します。 |
rename_shopping_list | 削除 | リストに新しい名前を付けます(以前の名前は置き換えられます)。 |
delete_shopping_list | 削除 | リストとその商品を削除します。確認後にのみ実行され、唯一のリストは削除されません。 |
get_basket | 読み取り | 買い物リストであるバスケットの中身を取得します。 |
add_to_basket | 削除 | 商品を追加します(既定では1個)。すでに追加されている場合、数量は加算されず、新しい数量に置き換えられます。 |
update_basket_quantity | 削除 | 商品の数量を指定します(0にすると削除されます)。 |
remove_from_basket | 削除 | 商品を削除します。 |
set_item_note | 削除 | 商品に「laktosefrei」などのメモを追加します(以前のメモは置き換えられます)。 |
get_checkout_link | 読み取り | migros.chでチェックアウトを完了するためのリンクを取得します。すべてのリストで同じリンクが使われるため、リストが複数ある場合はmigros.chで正しいリストが表示されていることを確認してください。 |
get_orders | 読み取り | オンライン注文をページごとに取得します。ステータスで絞り込めます。 |
get_order_details | 読み取り | 1件の注文の詳細をすべて取得します。 |
get_cumulus_status | 読み取り | Cumulusカードの情報を取得します。今期の獲得ポイント、カード番号、カード名義人、会員資格が含まれます。 |
get_cumulus_coupons | 読み取り | 現在の個人用Cumulusクーポンと、有効化できるクーポンを取得します。 |
activate_cumulus_coupon | 変更 | 次回の購入に使うクーポンをCumulusカードに追加します。購入は行われません。 |
deactivate_cumulus_coupon | 変更 | カードからクーポンを取り消します。 |
get_cumulus_bons | 読み取り | Cumulusのボン(バウチャー)を取得します。チェックアウト時にご自身で使用してください。 |
get_in_store_receipts | 読み取り | 指定した期間の店舗レシート(Kassenbons)を取得します。店舗、日付、金額、ポイントが含まれます。 |
get_receipt_details | 読み取り | migros.chのレシートページへのリンクを取得します。ページを開くと各レシートの商品を確認できます(すべてのレシートで同じリンクです。このサーバーでは商品情報を取得できません)。 |
仕組み
- **アカウントがない場合**は、[migros-api-wrapper](https://www.npmjs.com/package/migros-api-wrapper) と、Migros のウェブサイトが呼び出すものと同じアドレスを使用し、起動時に取得したゲストトークンを使います。 - **アカウントがある場合**は、ブラウザーと同じ方法で `login.migros.ch` にサインインし(メールアドレス、次にパスワード、アカウントで設定されている場合は2FAコードの順)、ログイン情報を保存します。アクセストークンの有効期間は短いため、再度サインインすることなく、保存したログイン情報を使ってバックグラウンドで更新します。完全なサインインが必要になるのは、Migros が保存したログイン情報を無効にした場合だけです。 - Migros のサインインページは Cloudflare の背後にあり、頻繁にサインインするコンピューターはブロックされるため、ログイン情報を保存することが重要です。 - セットアップキーがない場合、アカウントにコードが必要だとわかると、Claude がコードを取得するまで待ってからパスワードを送信します。これにより、完了できないサインインが開始されることはありません。
開発
コードの構成とツールの追加方法については、docs/architecture.md をご覧ください。コントリビューション方法については、CONTRIBUTING.md をご覧ください。
git clone https://github.com/herp75/migros-mcp.git
cd migros-mcp
npm install
npm run build
npm test
プルリクエストを作成する前に、CI と同じチェックを実行してください。
npm run typecheck # TypeScript, including the tests
npm run lint # ESLint
npm run format:check # Prettier (npm run format fixes it)
npm run test:coverage # tests, failing below 80 % line coverage of src/
git config blame.ignoreRevsFile .git-blame-ignore-revs を設定すると、git blame で大規模なフォーマット変更のコミットが非表示になります。
アカウント不要のツールを、実際の Migros ウェブサイトで確認してください。GitHub でも毎週月曜日に実行されるため、Migros 側の変更を早期に把握できます。
npm run live-check
専用のテストアカウント(自分のアカウントは絶対に使用しないでください)で、アカウントが必要なツールを確認してください。ログイン情報を .env.live(Git で無視されるファイル。chmod 600)に MIGROS_TEST_EMAIL、MIGROS_TEST_PASSWORD、および2FAを使う場合は MIGROS_TEST_TOTP_SECRET として設定します。--write は商品をバスケットに追加し、数量を変更してから削除する処理も実行し、最後にバスケットの状態が元に戻っていることを確認します。テスト用のログイン情報は .live-session/ に保存されるため、繰り返し実行してもそのたびにサインインする必要はありません。
Migros は GitHub のサーバーからのログインにボットチェックを要求するため、これは代わりにコンピューター上で毎週実行します。scripts/migros-live-check.sh は公開済みのイメージ(main からビルドされた edge)を取得し、cosign 署名を確認して、rootless podman を使い、そのイメージ内で --write を付けてチェックを実行します。これにより、ユーザーがインストールするものをテストし、リポジトリ内のものがコンテナー外で実行されないようにします。podman、skopeo、cosign が必要です。保存したテスト用ログイン情報は ~/.local/state/migros-live-check/ に保持されます。スケジュールするには、scripts/systemd/migros-live-check.service と .timer を ~/.config/systemd/user/ にコピーし、systemctl --user enable --now migros-live-check.timer を実行します。結果は journalctl --user -u migros-live-check で確認できます。GitHub の live ワークフローは引き続き手動で開始でき、GitHub のサーバーから再び接続できるかどうかを確認できます。
npm run live-account # read-only
npm run live-account -- --write # with the basket round trip
MCP Inspector で試してください。
npx -y @modelcontextprotocol/inspector node dist/index.js
ライセンス
MIT。詳細は LICENSE をご覧ください。
コメント
AI アプリケーションが外部のツールやデータソースに統一的な方法で接続するためのオープンなプロトコルです。クライアントはモデルとの対話を担い、MCP サーバーはツール・リソース・プロンプトテンプレートを提供します。標準メッセージでやり取りするため、1 つのサーバーを複数のクライアントで再利用できます。