mcpField
A
Albert Heijn

Albert Heijn

ローカル
github.comビジネス・マーケティング05 日前に更新

Albert Heijn について

Albert Heijnは、商品やセール情報を匿名で調べたいクライアント向けの、Albert Heijn Belgium非公式MCPサーバーです。7つの読み取り専用ツールで商品検索、今週のBonus、グループ、代替品、レシピを扱い、ベルギーの匿名モードではアカウントを使う買い物機能はありません。

主な機能

  1. 01アカウント不要の匿名アクセス
  2. 02商品とBonus情報の検索
  3. 03Bonusグループの閲覧
  4. 04代替商品の検索
  5. 05レシピの検索

活用シーン

  1. 01今週のBonusセールの確認
  2. 02品切れ商品の代替品探し
  3. 03レシピと材料の検索

MCP 対応

ah.be向けに、7つの読み取り専用ツールをMCP経由で提供します。匿名モードではログイン不要で、stdioとStreamable HTTPに対応します。

設定

ローカルサーバーの設定はどのクライアントでも共通です。コピーしてクライアントの MCP 設定ファイルに貼り付けてください。

インストール方法は未掲載です

このサーバーのパッケージやリモートエンドポイントはまだ取得できていません。プロジェクトの README の手順に従ってください。

リポジトリ
パッケージ
mcpbalbert-heijn-be-mcp.mcpb
ocighcr.io/arnouthoebreckx/albert-heijn-be-mcp:1.2.0

ツール

ツール一覧はまだ取得されていません

ローカルサーバーのツールはマシン上で起動して初めて取得できます。メンテナーはまだツール一覧を提供していません。

詳細

albert-heijn-be-mcp

非公式プロジェクトです。Albert Heijn または Ahold Delhaize とは関係ありません。ログイン不要で ah.be 向けに提供する、olekpuchka/albert-heijn-mcp v1.7.1 をベースにしたプロジェクトです。

Albert Heijn Belgium(ah.be)向けの MCP サーバーです。アカウントは不要です。--anonymous を指定すると、7 つの読み取り専用ツール(商品、今週のボーナスオファー、ボーナスグループ、商品の代替品、レシピ)を利用でき、ログイン、リスト、注文に関わる機能はありません。olekpuchka/albert-heijn-mcp v1.7.1 のコードをベースにしており(NOTICE を参照)、上流プロジェクトには追従していません。ベルギーのログイン機能は v1 には含まれていません。以下には、ah.nl 向けでログインが必要な上流プロジェクトの README が続きます。

Claude Desktop(.mcpb):リリースページから albert-heijn-be-mcp.mcpb をダウンロードしてダブルクリックするか、Settings → Extensions → Advanced settings → Install Extension… に移動してファイルを選択してください。ログイン不要(匿名)で起動し、必要なものはすべて含まれているため、トークンも不要です。

docker run(ポート 3000 で Streamable HTTP、AH_SITE=be、匿名)。イメージにトークンは不要です。

docker run --rm --read-only -p 127.0.0.1:3000:3000 ghcr.io/arnouthoebreckx/albert-heijn-be-mcp

MCP エンドポイントは http://127.0.0.1:3000/mcp です。GET /healthz は ok を返します。呼び出し元の認証は行われないため、ゲートウェイの背後にあるプライベートネットワークでのみ公開してください。

LiteLLM:コンテナをプロキシの config.yaml に追加します。これにより、エージェントからツールを ah_be-<tool> として利用できます。たとえば、ah_be-ah_search_products です。

mcp_servers:
  ah_be:
    url: "http://albert-heijn-be-mcp:3000/mcp"
    transport: "http"

npx(stdio):GitHub の npm レジストリでは、公開パッケージを含むすべてのインストールにトークンが必要です。イメージと .mcpb にはトークンは不要です。まず、次の 2 行を ~/.npmrc に記述してください(トークンは read:packages スコープを持つクラシック GitHub トークンです)。

@arnouthoebreckx:registry=https://npm.pkg.github.com
//npm.pkg.github.com/:_authToken=<a classic GitHub token with read:packages>

次に実行します。Node.js 24 が必要です。

npx -y @arnouthoebreckx/albert-heijn-be-mcp --anonymous

代わりにデスクトップアプリから起動するには、たとえば claude_desktop_config.json(Settings → Developer → Edit Config)など、アプリの MCP 設定に次の内容を追加してください。

{
  "mcpServers": {
    "ah-be": {
      "command": "npx",
      "args": ["-y", "@arnouthoebreckx/albert-heijn-be-mcp", "--anonymous"]
    }
  }
}

README の画像

albert-heijn-mcp

Release License: Apache-2.0 Node.js 24 MCP

Albert Heijn のアカウントを AI アシスタントで。

Albert Heijn のアカウントを Claude、ChatGPT、Cursor などの AI アシスタントに接続し、話しかけるだけで食料品の買い物ができます。商品やボーナスセールを見つけたり、Allerhande のレシピから食事を計画したり、買い物リストや配送注文を最新の状態に保ったり、購入した商品を振り返ったりできます。

技術的には、Albert Heijn 🇳🇱 向けの Model Context Protocol(MCP)サーバーです。MCP は、AI アプリが他のサービスに接続するための標準規格であるため、MCP に対応するあらゆるアプリで利用できます。

メモ

非公式プロジェクトであり、Albert Heijn とは関係なく、同社の承認も受けていません。AH モバイルアプリと同じ API を使用しており、この API は予告なく変更される場合があります。


目次

すべての方向け

技術的な詳細

質問できること

オランダ語、英語、またはアシスタントが話せる言語で質問できます。

「今週、普段買っている商品のうち、ボーナス対象になっているものはありますか?」

食事を計画する

「30分以内に作れる、2人分のベジタリアン向けAllerhandeレシピを探して、材料を買い物リストに追加してください。オリーブオイルと塩は持っています。」

「panlasagneのレシピを6人分に増やして、サーモンがどれくらい必要か教えてください。」

「今週のボーナス対象商品を使って、平日の夕食を3日分計画してください。」

節約する

「普段買っている商品のうち、今週ボーナス対象になっているものはどれですか?」

「今夜の炒め物を、レシピを大きく変えずに、ボーナス対象の材料で作り直してください。」

「来週のボーナスはもう公開されていますか? まだなら、いつ公開されますか?」

「チーズの2+1無料セールでは、何が対象ですか?」

買い物する

「これまでに3回以上配達してもらった商品を、買い物リストに戻してください。」

「オーガニックでグルテンフリーのパスタを探してください。安いものから並べてください。」

「この3種類のヨーグルトのタンパク質と糖質を比較して、一番よいものをリストに追加してください。」

「土曜日は何時にAHの配達を利用できますか?」

「ズッキーニが売り切れです。このレシピで使える代わりのものはありますか?」

「次回の配達に牛乳をあと2パック追加してください。」

「このレシピの材料をすべて入れた、お気に入りリスト「パスタナイト」を作成してください。」

「近くのAHに、今夜買いに行く価値のある今日中に値下げされたパンや野菜はありますか?」

購入履歴を振り返る

「9月に店舗でもらったレシートの合計はいくらで、最も高かった商品5点は何でしたか?」

「前回の買い物のレシートを表示して、複数回購入した商品をリストアップしてください。」

はじめに

Albert Heijnのアカウントが必要です。その後、次の手順に進みます。

  1. アプリを接続する:以下から使用するアプリを選びます。
  2. Albert Heijnにログインする:アシスタントにログインを依頼します。必要なのは一度だけです。
  3. 質問してみましょう。 質問できることをご覧ください。

クライアントの接続

アプリ方法
Claude Desktopダウンロードしてダブルクリックします。最も簡単な方法です。ほかにインストールするものはありません。
Cursor、VS Codeワンクリックインストールボタン
ChatGPT、Claude.ai(ウェブとモバイル)独自のサーバーが必要です(技術的な手順)
その他のアプリアプリの設定にコマンドを追加します
Claude Desktop
  1. albert-heijn-be-mcp.mcpbをダウンロードします。
  2. ダブルクリックして、Installを選択します。Claudeで開かない場合は、Settings → Extensions → Advanced settings → Install Extension…の順に進み、ファイルを選択してください。

これで完了です。このファイルには、必要なものがすべて含まれています。更新するには、最新リリースのファイルを使って同じ手順を行ってください。

MCP Bundles(.mcpbファイル)に対応しているほかのデスクトップアプリでも、同じ方法でインストールできます。

CursorとVS Code

Node.js 24 (LTS)をインストールし、このページの先頭にある2行の~/.npmrcを先に設定してください(GitHubのnpmレジストリでは、インストールのたびにトークンが必要です)。その後、次をクリックします。

Cursorにインストール VS Codeにインストール

ChatGPT と Claude.ai

Web アプリやモバイルアプリはコンピューター上で何も実行できず、インターネット上のサーバーに接続するだけです。そのため、まずサーバー上で実行する必要があり、ある程度の技術知識が求められます。その後、コネクターとして追加します。

  • ChatGPT では開発者モードが必要です(Plus、Pro、Business、Enterprise、Education)。設定 → 詳細設定を開き、開発者モードをオンにして、https://your-server/mcp を指定してコネクターを作成します。認証方式は OAuth に設定します。
  • Claude.ai:設定 → コネクター → カスタムコネクターを追加を開き、https://your-server/mcp を貼り付けて「接続」を選択します。

その後、アプリによってサーバー上のログインページが開きます。そこで AH_MCP_TOKEN を一度入力してください。

その他のアプリ

MCP サーバーをローカルコマンドとして起動するアプリでは、Node.js 24 (LTS) が必要です。また、npx -y @arnouthoebreckx/albert-heijn-be-mcp を実行すると、GitHub Packages から最新バージョンがダウンロードされ、実行されます。そのため、このページの上部にある ~/.npmrc の2行が必要です。ほとんどのアプリでは、MCP の設定に次の JSON を入力します。

{
  "mcpServers": {
    "ah": {
      "command": "npx",
      "args": ["-y", "@arnouthoebreckx/albert-heijn-be-mcp"]
    }
  }
}

設定の保存場所はアプリによって異なります。各アプリのドキュメントを参照してください。コマンドラインに対応したアプリでは、代わりに追加コマンドを使える場合があります。例:<client> mcp add ah -- npx -y @arnouthoebreckx/albert-heijn-be-mcp。また、MCP Registryにも登録されており、そこからインストールするアプリもあります。

代わりに恒久的にインストールするには、npm install --global @arnouthoebreckx/albert-heijn-be-mcp を実行し、albert-heijn-be-mcp コマンドを使用します。更新するには、同じコマンドを再度実行してください。

ヒント

デスクトップアプリはシェルのプロファイルを読み込まないため、npx が見つからないことがあります(nvm でよく発生します)。その場合は、command に which npx の出力を設定してください。

ログイン

ベルギー(--site be、デフォルト): ベルギーでのログインは v1 には含まれておらず、テストも行われていません。ログインツールは login.ah.be を参照しますが、動作するかどうかは確認されていません。ah.be では、--anonymous を指定してサーバーを実行してください(Configuration を参照)。ログインは不要で、検索、商品、ボーナスを利用できます。

アシスタントに Albert Heijn へのログインを頼んでください。ログインは一度だけ行えばよく、その後は自動的に保存・更新されます。

お使いのコンピューター(Claude Desktop、Cursor、VS Code などのローカルアプリ)では、別のブラウザーウィンドウが開き、AH のログインページが表示されます。そこで通常どおりログインしてください。ウィンドウは自動的に閉じ、ログインが完了します。その後、アシスタントに完了したことを伝えてください。

ウィンドウでは、新しく作成された空のブラウザープロファイルが使われるため、パスワードを入力してください。保存済みのパスワードやパスワードマネージャーの拡張機能は利用できません。Chrome、Edge、Brave、Chromium(Ubuntu の snap 版を除く)と画面が必要です。これらを利用できない場合は、以下の手順でコードを手動でコピーしてください。

サーバー上(ChatGPT、Claude.ai)で実行している場合、またはログインウィンドウを開けない場合は、コードを手動でコピーします。AH のログインページにある CAPTCHA は AH のウェブサイト上でしか機能しないため、ブラウザーからコードを取得する必要があります。

スマートフォンやタブレットではなく、コンピューターを使ってください。これらのブラウザーには開発者コンソールがありません。Chrome、Edge、Brave が最適です。

  1. アシスタントから受け取ったリンクを開きます。ただし、まだログインしないでください。

  2. そのタブで開発者コンソールを開きます。これはウェブ開発者向けのパネルで、安全に開くことができます。Mac では ⌘ ⌥ J、Windows と Linux では Ctrl Shift J を押してください。

  3. 通常どおりログインします。すると AH はスマートフォンアプリを開こうとしますが、ブラウザーでは開けないため、ページが止まったように見えます。コンソールで、次の赤い行を探してください。

    Failed to launch 'appie://login-exit?code=…' because the scheme does not have a registered handler.
    
  4. appie:// から閉じ引用符までをコピーして、チャットに貼り付けます。コードは一度しか使えず、すぐに期限切れになるため、すぐに貼り付けてください。

該当する行がありませんか?Troubleshooting を参照してください。開発者コンソールを使わずにサーバーにログインする方法は、Running it on a server を参照してください。

ログイン情報の保存場所

ログイン情報はお使いのコンピューターに保存され、自動的に更新されます。ファイルを読み取れるのはお使いのユーザーだけです。

OS場所
macOS~/Library/Application Support/albert-heijn-mcp/tokens.json
Linux~/.config/albert-heijn-mcp/tokens.json (または $XDG_CONFIG_HOME の下)
Windows%AppData%\albert-heijn-mcp\tokens.json

保存場所は AH_TOKENS_PATH で変更できます。

## トラブルシューティング
ログインウィンドウが開かない

ログインウィンドウを開くには、通常の場所に Chrome、Edge、Brave、または Chromium がインストールされており、画面が必要です。SSH 経由では使えず、Ubuntu の snap 版 Chromium も使えません。どちらも利用できない場合、アシスタントが代わりにリンクを提示するので、コードを手動でコピーしてください。ログインを完了する前にウィンドウを閉じてしまった場合は、もう一度ログインを依頼してください。

ログイン後に「Failed to launch」の行が表示されない

ログインする前に、開発者コンソールを開いておく必要があります。コンソールを開き、同じタブでログインリンクをもう一度開いてログインしてください。まだログイン中のため AH がログインフォームを省略しても問題ありません。その場合も行は表示されます。また、Network タブで appie://login-exit?code=… リクエストを探すこともできます。Chrome、Edge、Brave 以外のブラウザーでは、代わりにエラーページやダイアログにリンクが表示される場合があります。

「exchange code」でログインに失敗する

コードは一度しか使えず、すぐに有効期限が切れます。もう一度ログインを依頼し、新しいリンクをすぐに貼り付けてください。

「Not logged in」と表示される、またはセッションが壊れているように見える

アシスタントにログアウトと再ログインを依頼するか、ログイン場所から tokens.json を削除して、もう一度ログインしてください。

「The Albert Heijn login has expired」と表示される

Albert Heijn が保存済みのログインを受け付けなくなっています。アシスタントに Albert Heijn への再ログインを依頼してください。アプリをサーバーに再接続しても解決しません。これは別のログインです。

サーバーでログインが繰り返し期限切れになる場合は、再起動や再デプロイ後も保持されるストレージに tokens.json を保存し、インスタンスを 1 つだけ実行してください。AH はログインが更新されるたびにログイン情報を置き換えるため、古いファイルのコピーや、独自に更新する 2 つ目のインスタンスは拒否されます。

ログインコードを貼り付けたときに「Already connected as …」と表示される

コードで有効なログインが置き換わることはないため、別のアカウントのコードを使って切り替えることはできません。アカウントを切り替えるには、まずログアウトを依頼してから、もう一度ログインしてください。

「There is no active delivery order to change」と表示される

AH では、注文が存在する場合にのみ注文を変更できます。まず AH アプリまたは ah.nl で配送時間枠を選択してください。

「The shopping list is not available while a delivery order is active」と表示される

時間枠を選択すると、リストが注文に移動します。配達またはキャンセルが完了するまでは、代わりにアシスタントに注文の変更(ah_get_cart、ah_update_cart_item)を依頼してください。

サーバーが起動しない:「needs AH_MCP_TOKEN of at least 32 characters」

AH_MCP_TOKEN に長いランダムな値(例:openssl rand -hex 32 の出力)を設定して、再起動してください。値を変更すると、すべてのクライアントがログアウトされます。各クライアントを一度再接続してください。

サーバーのログインページに「This login link is not valid」と表示される

アプリから接続をもう一度開始してください。トークンを入力した直後に引き続き問題が起きる場合は、AH_MCP_BASE_URL がブラウザーに表示されているアドレスと完全に一致していることを確認してください。https:// も含めてください。ログインフォームは、そのアドレスからのアクセスのみ受け付けます。

サーバーのログインページが localhost で開く、またはアプリから接続できない

AH_MCP_BASE_URL にサーバーの公開用 https:// URL を設定し、サーバーを再起動してください。アプリはログインのためにその URL に転送されます。

ポート 3000 が使用中

環境変数または .env で AH_MCP_PORT に別のポートを設定してください。


HTTP での匿名モードと Docker イメージ

--anonymous を指定すると、サーバーに Albert Heijn アカウントは必要ありません。また、アカウントなしで動作するツールのみを登録します。ah_search_products、ah_get_products、ah_get_bonus_offers、ah_get_bonus_group_products、ah_get_product_alternatives、ah_search_recipes、ah_get_recipe です。previously_bought: true を指定した ah_get_bonus_offers にはアカウントが必要なため、エラーが返されます。

Streamable HTTP では、匿名モードに OAuth も AH_MCP_TOKEN も必要ありません。ログインする人はおらず、アカウントや個人データも関係しません。AH_MCP_HOST(デフォルトは 127.0.0.1)と AH_MCP_PORT(デフォルトは 3000)で /mcp を提供し、GET /healthz は 200 と ok を返します。

npx -y @arnouthoebreckx/albert-heijn-be-mcp --transport streamable-http --anonymous

警告

このモードでは、呼び出し元を認証する仕組みがありません。公開する場合は、必ずゲートウェイの背後にあるプライベートネットワーク内に限定してください(LiteLLM、または認証を行うリバースプロキシを使用)。インターネットに直接公開しないでください。

Docker イメージはこのモードで起動します。AH_SITE=be、--anonymous、Streamable HTTP を使用し、0.0.0.0:3000 で待ち受けます。非 root ユーザーとして実行され、ディスクへの書き込みは行わず、シークレットも保持せず、/healthz に対するヘルスチェックを行います。

docker build -t albert-heijn-be-mcp .
docker run --rm --read-only -p 127.0.0.1:3000:3000 albert-heijn-be-mcp

--anonymous を指定しない場合、Streamable HTTP はアップストリームのモードとなり、引き続き AH_MCP_TOKEN が必要です。以下を参照してください。


サーバー上で実行する

ChatGPT や Claude.ai などのウェブアプリやモバイルアプリには、Streamable HTTP と HTTPS を使って、インターネット上でサーバーにアクセスできる必要があります。エンドポイントは https://your-server/mcp です。

アプリは OAuth でログインします。OAuth(または自動)認証を使ってエンドポイントを追加すると、アプリがサーバー上のログインページを開きます。そこで AH_MCP_TOKEN を一度入力すると、アプリは独自のトークンを取得して更新します。サーバーが受け付けるのはこれらの OAuth トークンのみで、AH_MCP_TOKEN 自体は受け付けません。そのため、OAuth に対応していないアプリは HTTP 経由で接続できません。代わりにローカルで実行してください。

重要

AH_MCP_TOKEN を持っている人は誰でもログインして、あなたの Albert Heijn アカウントを使用できます。長くランダムな値を使用してください(openssl rand -hex 32)。値を変更すると、すべてのクライアントがログアウトします。

GitHub Packages からインストールし、リバースプロキシの背後で強化された systemd サービスとして実行します。インストールにはトークンが必要です(このページの冒頭にある ~/.npmrc の 2 行を、npm install を実行するユーザー用に設定してください)。

  1. サーバーを準備します。 Node.js 24 をインストールし、サービスユーザーを作成します。

    sudo useradd -r -m -d /home/albert-heijn-be-mcp -s /sbin/nologin albert-heijn-be-mcp
    
  2. /home/albert-heijn-be-mcp/.env で設定します。

    AH_MCP_BASE_URL=https://albert-heijn-be-mcp.example.com
    AH_MCP_TOKEN=<output of: openssl rand -hex 32>
    

    サービスユーザーだけが読み取れるように設定します。sudo chown albert-heijn-be-mcp: /home/albert-heijn-be-mcp/.env && sudo chmod 600 /home/albert-heijn-be-mcp/.env。

  3. パッケージに含まれるサービスユニットを使ってインストールします(--remote モードで実行されます)。

    sudo npm install --global --prefix /usr/local --ignore-scripts @arnouthoebreckx/albert-heijn-be-mcp
    sudo install -m 644 /usr/local/lib/node_modules/@arnouthoebreckx/albert-heijn-be-mcp/deploy/albert-heijn-be-mcp.service /etc/systemd/system/
    sudo systemctl daemon-reload
    sudo systemctl enable --now albert-heijn-be-mcp
    

    更新するには、同じコマンドを実行してから sudo systemctl restart albert-heijn-be-mcp を実行します。

  4. 127.0.0.1:3000 に転送するリバースプロキシでTLS を追加します。Caddy を使う場合:

    albert-heijn-be-mcp.example.com {
        reverse_proxy 127.0.0.1:3000
    }
    

サーバーを Albert Heijn にログインさせるには、接続済みのアプリにログインを依頼し、コードを手動でコピーしてください。または、コードを使わずに、ご自身のコンピューターでログインウィンドウからログインして、そのログイン情報をサーバーにコピーすることもできます。

AH_TOKENS_PATH=./server-tokens.json npx -y @arnouthoebreckx/albert-heijn-be-mcp login
scp server-tokens.json your-server:ah-tokens.json && rm server-tokens.json
ssh -t your-server 'sudo sh -c "install -d -o albert-heijn-be-mcp -g albert-heijn-be-mcp -m 700 /home/albert-heijn-be-mcp/.config/albert-heijn-mcp && install -o albert-heijn-be-mcp -g albert-heijn-be-mcp -m 600 $HOME/ah-tokens.json /home/albert-heijn-be-mcp/.config/albert-heijn-mcp/tokens.json.new && mv /home/albert-heijn-be-mcp/.config/albert-heijn-mcp/tokens.json.new /home/albert-heijn-be-mcp/.config/albert-heijn-mcp/tokens.json && rm $HOME/ah-tokens.json"'

サーバーは次のリクエスト時にログイン情報を読み込みます。再起動は不要です。別ファイルに保存することで、ご自身のコンピューターのログイン情報と分離できます。AH はログイン情報を更新するたびに以前のログインを置き換えるため、1 つのログインを使用できる場所は 1 か所だけです。SSH を使えないホストでは、サーバーがログイン情報を保存する場所(AH_TOKENS_PATH、または実行ユーザーのデフォルトの場所)にファイルをアップロードしてください。

サービスが書き込み可能なのは、トークンを保存する /home/albert-heijn-be-mcp のみです。AH_LOG_FILE を別の場所に設定する場合は、そのパスをユニットファイルの ReadWritePaths に追加してください。

設定

設定は環境変数で指定します。作業ディレクトリ内の .env ファイルに記述することもできます(.env.example を参照)。環境にすでに設定されている変数が優先されます。ホスティングプラットフォームでは、.env ファイルではなく、環境変数またはシークレットの設定に指定してください。これにより、AH_MCP_TOKEN がアプリのファイルに保存されずに済みます。

変数デフォルト説明
AH_SITEbeAlbert Heijn のサイト:be(ah.be)または nl(ah.nl、上流のサイト)です。--site と同じです。商品、レシピ、ボーナスへのリンクは www.ah.be または www.ah.nl を参照します。
AH_ANONYMOUSfalsetrue の場合、ログインしません。サーバーは Albert Heijn から匿名トークンを取得し(メモリ内に保持し、トークンファイルは作成しません)、アカウント不要の呼び出しに使用します。--anonymous と同じです。
AH_API_BASE_URLサイトごとAPI ホスト(https://api.ah.be または https://api.ah.nl)を置き換えます。テスト専用です。
AH_REMOTEfalseログイン時にブラウザーを開かず、コードをコピーしてログインします(--remote と同じです)。streamable-http では常に有効です。
AH_TOKENS_PATHOS ごとログイントークンの保存先です。
AH_MCP_HOST127.0.0.1HTTP サーバーがリッスンするインターフェースです。リバースプロキシの背後ではデフォルトのままにしてください。
AH_MCP_PORT3000HTTP サーバーのポートです。
AH_MCP_BASE_URLhttp://localhost:3000HTTP サーバーの公開 URL です。サーバー上では設定してください。OAuth クライアントはログイン時にこの URL に送られます。また、ローカル以外の URL の場合は localhost のみに制限された Host チェックが無効になり、リバースプロキシがリクエストを転送できます。
AH_MCP_TOKEN—HTTP トランスポート用のシークレットです。32 文字以上にしてください。--anonymous を指定した場合を除き、これがないとトランスポートは起動しません。OAuth ログインページで入力し、OAuth トークンの署名にも使用します。
AH_LOG_FILE—このファイルにもログを追記します。ログは常に stderr に出力されます。

コマンドラインフラグ:

node dist/index.js [--site be|nl] [--anonymous] [--transport stdio|streamable-http] [--remote] [--version] [--help]
node dist/index.js login [--remote]

stdio(デフォルト)はローカルクライアント向けです。streamable-http は /mcp で MCP を提供し、/authorize で OAuth ログインを提供します(--anonymous を指定した場合は OAuth を使用せず、GET /healthz は ok を返します)。login は端末から Albert Heijn にログインし、トークンを保存して終了します。--remote を指定すると、ログインウィンドウを開く代わりにコードの入力を求めます。

ツール

これらはアシスタントが裏側で使用するもので、ご自身で呼び出す必要はありません。読み取り専用のツールにはその旨が示されるため、アプリは確認を求めずに実行できます。データを削除するツールには破壊的操作であることが示されるため、アプリは事前に確認を求めます。

データを返すツールは、対応するクライアント向けに、宣言済みのスキーマを持つ構造化出力も返します。ツールの結果に含まれる商品やレシピには ah.nl のページへの url が含まれ、サーバーはアシスタントに、それらの名前からページへリンクするよう求めます。

アカウント
ツール説明
ah_loginログインします。コンピューター上でログインウィンドウを開くか、AH のログインリンクを返します。リンクからログインした後、貼り付けたコードを使ってログインを完了します。
ah_logoutアカウントの切り替えやセッションのリセットのため、保存済みのトークンを削除します。
ah_get_member_profile名前、マスキングされたメールアドレス、ボーナスカード番号(下 4 桁)。
商品と特典 | ツール | 説明 | |---|---| | `ah_search_products` | 1つ以上のキーワードを一度に検索します。オランダ語の用語が最適です。`bonus=true` または `filters`(オーガニック、ヴィーガン、グルテンフリーなどの食事制限、アレルゲン、ラベル)で絞り込み、価格、購入頻度、Nutri-Scoreで `sort` できます。 | | `ah_get_products` | 1つ以上の商品の詳細を取得します。`include_nutritional_info=true` を指定すると、栄養成分表も含まれます。 | | `ah_get_product_alternatives` | 商品に対してAHが提案する類似商品や代替品を取得します。 | | `ah_get_bonus_offers` | 今週のボーナスセール、または `period=next` を指定した場合は来週のセールを取得します。`previously_bought=true` を指定すると、以前購入した商品(AHの「Eerder gekocht」)に限定されます。キーワードで絞り込めます。 | | `ah_get_bonus_group_products` | 「2+1 gratis」のようなまとめ買いセールの対象となる個々の商品を取得します。 | | `ah_search_stores` | 郵便番号または自宅住所から近くの店舗を検索します。 | | `ah_get_last_chance_items` | 店舗のVandaag-af値下げ商品を取得します。デフォルトでは、住所から最も近い店舗の商品が対象です。 |
レシピ
ツール説明
ah_search_recipesAllerhandeのレシピを検索します。オランダ語の用語が最適です。
ah_get_recipe材料、手順、1人前あたりの栄養情報を取得します。servings で材料の分量を調整できます。
ah_add_recipe_to_shopping_listレシピの材料に合う商品を見つけて、まとめて買い物リストに追加します。ボーナスセール中の商品が優先されます(prefer_bonus=false で無効化できます)。skip には手持ちの材料を指定し、dry_run=true で候補を確認できます。
買い物リストとお気に入り
ツール説明
ah_get_shopping_list買い物中に商品を入れていく買い物リスト(「Mijn lijst」)を取得します。
ah_add_to_shopping_list数量を指定して商品をリストに追加します。
ah_add_free_text_to_shopping_list「verse bloemen」のような自由入力の項目を追加します。
ah_remove_from_shopping_list商品または自由入力の項目を削除します。
ah_clear_shopping_listすべて削除します。confirm="yes" が必要です。
ah_get_favorite_listsお気に入りリスト(「Mijn lijstjes」)を取得します。
ah_add_to_favorite_listお気に入りリストに商品を追加します。
ah_remove_from_favorite_listお気に入りリストから商品を削除します。
ah_create_favorite_list空のお気に入りリストを新規作成します。
ah_delete_favorite_listお気に入りリストとその項目を削除します。confirm="yes" が必要です。
配達注文

AHアプリで配達または店舗受け取りの時間枠を選ぶと、買い物リストが注文に移されます。ah_get_delivery_slots で配達可能な時間を確認できます。その他のツールはその注文を操作します。

ツール説明
ah_get_delivery_slots今後数日間に住所で利用できる配達時間枠を取得します。
ah_get_cart有効な注文の商品、合計金額、割引を取得します。
ah_update_cart_item商品の数量を変更します。0にすると商品が削除されます。
ah_remove_from_cart注文から商品を削除します。
ah_clear_cart注文からすべて削除します。confirm="yes" が必要です。
注文とレシート
ツール説明
ah_get_orders今後の配達注文を取得します。past=true を指定すると過去の注文を取得します。
ah_get_order_details1件の注文に含まれる商品を取得します。
ah_get_frequent_items配達注文の中で、注文頻度が最も高い商品を取得します。
ah_get_receipts最近の店舗レシート(kassabonnen)を取得します。
ah_get_receipt_details1件のレシートに記載された商品、割引、支払い情報を取得します。
### 制限事項
  • API から配達注文を開始することはできません。 ah_get_delivery_slots で配達時間枠を確認できますが、注文を開始するための予約は AH アプリまたは ah.nl で行う必要があります。注文が有効な間、AH は買い物リストを提供しません。ツールはその旨を伝え、注文用ツールを案内します。
  • 買い物リストの項目にチェックを付けることはできません。 API から利用可能な項目 ID が返されません。
  • AH の毎週の個人向けセールである Bonus Box は利用できません。API が不明なためです。
  • 1 回あたりの上限: 商品は最大 99 個、項目は 50 個、自由入力の項目名またはリスト名は 100 文字です。

開発

git clone https://github.com/arnouthoebreckx/albert-heijn-be-mcp
cd albert-heijn-be-mcp
npm ci
npm run build    # compile to dist/
npm run lint     # type-check

チェックアウトしたディレクトリから node dist/index.js を実行するか、クライアントの設定で /path/to/albert-heijn-be-mcp/dist/index.js を引数に指定し、コマンドとして node を使用してください。

パス内容
src/index.ts、src/config.ts、src/loginCommand.tsエントリーポイント、フラグと設定、login コマンド
src/ahapi/Node 組み込みの fetch を使用する、AH の REST API および GraphQL API 用クライアント
src/auth/ログイン画面、ログインコードの交換、トークンの保存と更新
src/server/ストリーマブル HTTP トランスポートと OAuth ログイン
src/tools/MCP ツール。各領域につき 1 ファイル
deploy/パッケージに含まれる systemd ユニット
manifest.json、.mcpbignore.mcpb バンドルのマニフェストと、バンドルから除外するファイル
listing/コネクター設定やアプリディレクトリで使用する名前、説明、アイコン(手順)
.github/CI、リリースワークフロー、Dependabot、固定バージョンの mcp-publisher インストール
assets/この README のロゴと、MCP クライアントに表示されるサーバーアイコン

実行時の依存関係は、公式の MCP TypeScript SDK と、SDK がツールのスキーマに使用する Zod のみです。

ツールを手動で呼び出すには、MCP Inspector を使用してください。

npx @modelcontextprotocol/inspector node dist/index.js

変更をデプロイする前に、実際のアカウントで簡単な確認を行ってください。ログインし、melk を検索して、商品を買い物リストに追加した後、削除します。その後、カートと注文を表示してください。

リリースするには、npm version 1.2.3 --no-git-tag-version を実行し、server.json(version、.mcpb の URL、イメージタグ)と manifest.json に新しいバージョンを設定して、main にマージし、タグをプッシュします:git tag v1.2.3 && git push origin v1.2.3。v* タグを作成できるのはリポジトリ管理者のみです。リリースワークフロー はバージョンが一致することを確認し、パッケージをビルドして、GitHub リリースに albert-heijn-be-mcp.tgz として添付するとともに、albert-heijn-be-mcp.mcpb バンドルも添付します。また、tarball のビルド来歴を証明し、ワークフロー独自のトークンを使って GitHub Packages に公開します(npm トークンは保存されず、承認待ちもありません)。さらに、マルチアーキテクチャイメージをビルドし、ビルド来歴とともに ghcr.io/arnouthoebreckx/albert-heijn-be-mcp にプッシュします。.mcpb とイメージの公開後、registry ジョブは server.json のコピーに .mcpb の SHA-256 を追加し、GitHub OIDC を通じて MCP Registry に .mcpb とイメージを登録します。レジストリはトークンなしでイメージを取得するため、パッケージを公開設定にしてください(リポジトリの Packages 内)。最初の実行に失敗した場合は、そのジョブを再実行してください。リリースにはリリースノートが付かない状態で作成されるため、GitHub で記入してください。

ライセンス

Apache 2.0

コメント

MCP は初めてですか?

プロトコルの概要から最初のサーバーの導入まで、よくある疑問にまとめて答えます。

AI アプリケーションが外部のツールやデータソースに統一的な方法で接続するためのオープンなプロトコルです。クライアントはモデルとの対話を担い、MCP サーバーはツール・リソース・プロンプトテンプレートを提供します。標準メッセージでやり取りするため、1 つのサーバーを複数のクライアントで再利用できます。