Picnic について
Picnic は、オンラインスーパー Picnic での買い物を AI アシスタントから扱う非公式の MCP サーバーです。商品検索、カート管理、配達枠の選択、レシピ操作に対応しますが、注文は確定できません。
主な機能
- 01商品の検索と詳細表示
- 02カート商品の追加・変更・削除
- 03配達枠の表示と選択
- 04特売品と定番商品の確認
- 05レシピ検索と材料の追加
活用シーン
- 01商品を探して候補を比較
- 02カートを準備して配達時間を選択
- 03レシピの材料をカートに追加
MCP 対応
stdio または HTTP で、Picnic の買い物、配達、商品探索、レシピのツールを MCP クライアントに提供します。注文の確定には対応しません。
設定
ローカルサーバーの設定はどのクライアントでも共通です。コピーしてクライアントの MCP 設定ファイルに貼り付けてください。
このサーバーのパッケージやリモートエンドポイントはまだ取得できていません。プロジェクトの README の手順に従ってください。
ツール
10掲載時のツール一覧 · 6 日前に更新
| パラメーター | 型 | 必須 | 説明 |
|---|---|---|---|
| query | string | はい | 検索する商品。オランダ語で指定します。 |
詳細
picnic-mcp
オンラインスーパーマーケットのPicnic向けのMCPサーバーです。モデルを使ってPicnicの商品を検索し、ショッピングカートに商品を入れ、配達枠を選択し、キャンペーンや普段購入する商品を表示して、レシピを利用できます。注文の確定はできません。
非公式プロジェクトです。Picnicによる開発・サポートはありません。picnic-apiを基盤にしています。オランダのアカウントでテスト済みです。ドイツとフランスのアカウントでも動作するはずですが、テストはしていません。
関連プロジェクト
picnic-api、picnic-web、picnic-mcpは一緒に開発・リリースされています。Picnicアプリがデータの取得方法を変更すると、picnic-apiがそれに追従し、picnic-webとpicnic-mcpも同じ変更で更新されるため、常に最新バージョン同士が連携して動作します。
| プロジェクト | 概要 |
|---|---|
| picnic-api | PicnicのAPIを利用するNode.jsライブラリです。商品、カート、配達枠、配達、レシピに対応しています。 |
| picnic-web | ブラウザーから買い物ができるPicnicのウェブインターフェースです。picnic.maartenvandenhoven.comで公開中です。 |
| picnic-mcp | AIアシスタントが商品を検索し、カートに商品を入れ、配達枠を選択できるMCPサーバーです。 |
ツール
ツールはグループに分かれています。cart、slots、product、discoverはデフォルトで有効です。PICNIC_MCP_TOOLSを使ってグループの有効・無効を切り替えます(セットアップを参照)。
| グループ | ツール | 機能 |
|---|---|---|
cart | search_products | 商品を検索します。1つの商品が適合する場合(通常は以前に購入した商品)、bestMatchを返します。確認が必要な場合は、2つまたは3つのchoicesを返します。 |
add_to_cart | IDで1つ以上の商品をカートに追加します。カート内の商品ごとの数量、追加に失敗した商品、カートの合計金額、および配送できない商品の代替品を返します。 | |
set_cart_quantity | カート内の商品数を設定します。0にすると削除されます。 | |
remove_from_cart | IDで商品を削除します。 | |
get_cart | カートの内容(商品、数量、価格、合計金額、配送時間帯)と、配送できない商品の代替品を表示します。 | |
slots | get_delivery_slots | 2日分ずつ、または指定した日付の配送時間帯を一覧表示します。 |
select_delivery_slot | カートの配送時間帯を選択します。 | |
product | get_product | 商品の原材料、アレルゲン、栄養情報、保存方法、プロモーション、価格を表示します。 |
discover | get_promotions | 今週のプロモーションをセクション別(カテゴリ別など)に一覧表示するか、特定セクションのすべてのプロモーション、または1つのプロモーション対象商品を一覧表示します。 |
get_favorites | アプリの「Favorieten」タブと同様に、購入する商品を通路別に一覧表示します。「いつもの食料品を追加する」ためのツールです。 | |
deliveries | get_deliveries | 今後の配送(時間帯、商品数、合計金額、配達員が配送中の場合は到着予定時刻)、または過去の直近の配送を表示します。オプションで、同じ商品を再注文する場合などに商品の一覧も表示できます。 |
recipes | search_recipes | Picnicのレシピを検索します。 |
get_saved_recipes | アプリで保存したレシピを一覧表示します。 | |
get_recipe | レシピの材料、アレルゲン、手順を表示します。レシピ関連ツールには、Picnicアプリから共有されたレシピリンクも渡せます。 | |
add_recipe_to_cart | 指定した人数分のレシピの材料をカートに追加します。 | |
remove_recipe_from_cart | レシピとその材料をカートから削除します。 | |
save_recipe | アプリにレシピを保存します。 | |
unsave_recipe | 保存したレシピから削除します。 | |
| 出力はコンパクトな JSON で、モデルが必要とする情報だけを含みます。名前、住所、支払い情報、注文番号など、アカウントに関するその他の情報は含まれません。ツールが返す内容は、MCP クライアントが使用するモデルに送信されることにご留意ください。 |
検索で明確に一致するものがなく、MCP クライアントでフォーム(エリシテーション)を表示できる場合は、チャットでモデルに尋ねさせるのではなく、クライアント上でご自身で商品を選択します。
セットアップ
Node.js 20 以降が必要です。
1. 認証キーを取得する
npx picnic-mcp login
国、メールアドレス、パスワード、およびアカウントで二要素認証が有効な場合に Picnic から SMS で届くコードを入力します。認証キーが表示され、情報は保存されません。キーは Picnic アカウントへのアクセスを許可するため、秘密にしてください。
2. MCP クライアントにサーバーを追加する
Claude Desktop などの MCPB クライアント: 最新のリリースから picnic-mcp.mcpb をダウンロードして開き、認証キーを入力します。
その他のクライアントでは、次のような設定を使用します。
{
"mcpServers": {
"picnic": {
"command": "npx",
"args": ["-y", "picnic-mcp"],
"env": {
"PICNIC_AUTH_KEY": "<your auth key>",
"PICNIC_COUNTRY_CODE": "NL"
}
}
}
}
PICNIC_COUNTRY_CODE は NL、DE、FR のいずれかです(デフォルトは NL)。ツールグループを選ぶには、カンマ区切りのリスト(例:"cart,slots,product,discover,deliveries,recipes")を指定した PICNIC_MCP_TOOLS を追加します(デフォルトは cart,slots,product,discover)。ツールの数を減らすと、小規模なモデルでも適切なツールを選びやすくなります。サーバーは stdio 経由で実行されます。ネットワーク経由で接続するには、HTTP をご覧ください。
このサーバーは、MCP レジストリにも io.github.MRVDH/picnic-mcp として掲載されています(MCP Registry)。
キーの有効期限が切れると、ツールがその旨を通知します。その場合は npx picnic-mcp login を再度実行してください。
HTTP
picnic-mcp http は、URL に接続するクライアント向けに、同じツールを /mcp で HTTP 経由で提供します。クライアントが Authorization: Bearer <token> として送信するトークンが必要です。次のコマンドで生成してください。
openssl rand -hex 32
PICNIC_AUTH_KEY=<auth key> PICNIC_MCP_HTTP_TOKEN=<token> npx picnic-mcp http
| 変数 | |
|---|---|
PICNIC_MCP_HTTP_TOKEN | 必須です。32 文字以上にしてください。この情報を知っている人は誰でもカートを変更できるため、秘密にしてください。 |
PICNIC_MCP_HTTP_HOST | リッスンするアドレスです。デフォルトは 127.0.0.1 で、このマシンからのみ接続できます。 |
PICNIC_MCP_HTTP_PORT | デフォルトは 3000 です。 |
PICNIC_MCP_HTTP_ALLOWED_HOSTS | localhost 以外で許可するホスト名です。カンマ区切りで指定します(例:このサーバーの前段にあるリバースプロキシの名前)。別の Host または Origin ヘッダーを含むリクエストは拒否されます。 |
このサーバーは HTTPS に対応していません。別のマシンから使用するには、HTTPS 対応のリバースプロキシの背後に配置し、そのプロキシのホスト名を PICNIC_MCP_HTTP_ALLOWED_HOSTS に追加してください。
独自のコードで使用する
createServer は、環境変数やファイルを読み込まずに MCP サーバーを返すため、独自のプロセスで実行し、任意の MCP トランスポートに接続できます。
import { createServer } from "picnic-mcp";
const server = createServer({ authKey: "<auth key>", countryCode: "NL" });
await server.connect(transport);
tools を渡すとツールグループを選択できます(例:tools: ["cart", "recipes"])。すでにお持ちの picnic-api クライアントを使用するには authKey の代わりに client を渡し、Picnic からのエラーをご自身で処理するには onError を渡します(デフォルトでは標準エラー出力に記録されます)。
商品画像
商品を一覧表示する結果(検索、カート、追加した商品、プロモーション、お気に入り、商品詳細)には、商品 ID ごとに各商品の画像 URL が _meta["picnic-mcp/images"] に含まれています。MCP クライアントは _meta をモデルに渡さないため、画像によるトークンの消費はありません。独自のコードで、たとえば商品写真の表示に利用できます。画像に認証キーは必要ありません。キーは IMAGES_META_KEY としてエクスポートされています。
コメント
AI アプリケーションが外部のツールやデータソースに統一的な方法で接続するためのオープンなプロトコルです。クライアントはモデルとの対話を担い、MCP サーバーはツール・リソース・プロンプトテンプレートを提供します。標準メッセージでやり取りするため、1 つのサーバーを複数のクライアントで再利用できます。