mcpField
L
leclerc-drive

leclerc-drive

ローカル
github.com/skunkobiビジネス・マーケティング2616 週間前に更新

leclerc-drive について

mcp-leclerc-drive は E.Leclerc Drive 向けの非公式 MCP サーバーで、Claude から商品検索、カート管理、食料品の注文準備を行えます。利用者自身のインストール済み Chrome に CDP で接続してリクエストを実行し、個人の買い物を対象としています。

主な機能

  1. 01価格や在庫情報を含む商品検索
  2. 02カート商品の追加、削除、数量変更
  3. 03郵便番号や市区町村による店舗検索
  4. 04CDP 経由で実際の Chrome 上で実行
  5. 05リクエストの間隔調整と再試行

活用シーン

  1. 01会話内での商品検索とカートへの追加
  2. 02カートの内容と合計金額の確認
  3. 03Web サイトを使わない個人向けの食料品注文の準備

MCP 対応

本プロジェクトは MCP サーバーとして、店舗検索、商品検索、カート管理のツールを MCP クライアントに公開します。

設定

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

mcp.json · 共通設定
{
"mcpServers": {
"skunkobi-leclerc-drive": {
"command": "npx",
"args": [
"-y",
"mcp-leclerc-drive"
],
"env": {
"LECLERC_STORE_ID": "<LECLERC_STORE_ID>",
"LECLERC_HOST": "<LECLERC_HOST>",
"LECLERC_COOKIE": "<LECLERC_COOKIE>",
"LECLERC_CHROME_PROFILE": "<LECLERC_CHROME_PROFILE>"
}
}
}
}
起動コマンドnpx -y mcp-leclerc-drive
設定が必要な環境変数
LECLERC_STORE_IDLeclerc Drive store id, e.g. 053701 (defaults to 053701).
LECLERC_HOSTBackend host for your store, e.g. fd9-courses.leclercdrive.fr (the fdN prefix varies by region).
LECLERC_COOKIEシークレットOptional raw Cookie header override for headless hosts; by default the session is read from your local Chrome profile.
LECLERC_CHROME_PROFILEChrome profile directory to read the session cookie from (defaults to "Default").

ローカルサーバーにはマシン上の実行環境(Node.js 18 以上など)が必要です。設定ファイルの場所はクライアントごとに異なります。

パッケージ
npmmcp-leclerc-drive0.3.0

ツール

8

掲載時のツール一覧 · 2 週間前に更新

パラメーター型必須説明
querystringはいTermes de recherche, ex. 'lait demi-écrémé bio'

詳細

mcp-leclerc-drive

E.Leclerc Drive 向け初のオープンソース MCP サーバーです。Claude がウェブサイトをクリックして操作する代わりに、ネイティブに商品を検索し、カートを管理して、食料品の注文を準備できます。

🟢 v0.3 — 動作確認済みで、DataDome にも対応しています。 8 つすべてのツールが、実際のサイトに対するエンドツーエンドの検証を通過しています。リクエストは CDP 経由で操作する実際の Chrome 内で実行されるため、ヘッドレスクライアントや Cookie の再利用をブロックする DataDome のボット対策を通過できます。最初に開くウィンドウで Leclerc Drive にログインすると、そのセッションは保持されます。リバースエンジニアリングした API については、docs/api-capture.md をご覧ください。

理由

E.Leclerc Drive には公開 API がありません。現在、自動化する唯一の方法はブラウザーの自動操作ですが、時間がかかり(商品ごとに約 3〜5 秒)、不安定です(状況を考慮しないクリック)。このプロジェクトでは、内部の操作を適切な MCP ツールとして公開するため、任意の MCP クライアント(Claude Desktop、Claude Code)から直接操作できます。

ツール

ツール説明
find_stores(query)郵便番号または都市名の近くにあるドライブを検索します → 名前、ID、サービス種別、距離、ホスト。
set_store(store_id)利用する店舗を選択して記憶します(適切なホストを自動的に解決します)。
get_store()現在選択されている店舗を表示します。
search_product(query)カタログを検索します → 価格、1 kg あたりの価格、Nutri-Score、在庫状況、id を含む商品。
add_to_cart(product_id, quantity?)商品をカートに追加します。
remove_from_cart(product_id)カートから商品を削除します。
update_quantity(product_id, quantity)商品の数量を設定します(0 にすると削除されます)。
get_cart()合計金額を含むカートの全内容を取得します。

ステータス

  • Leclerc Drive のエンドポイントをリバースエンジニアリングしました(検索/カート/店舗検索 — docs/api-capture.md を参照)
  • 8 つすべてのツールが、実際の店舗に対するエンドツーエンドの検証を通過しました
  • 実行時の店舗選択と永続化(find_stores / set_store)
  • v0.3:実際の Chrome を CDP 経由で操作し、DataDome に対応(Cookie の再利用を阻止したアクティブなボットチャレンジを突破)✅
  • npm および MCP レジストリに公開済み
  • チェックアウト/配送時間枠の予約

要件

  • Node.js ≥ 22(組み込みの WebSocket を使用)
  • Google Chrome のインストールが必要です(サーバーは CDP 経由で Chrome を操作します)

開発用インストール

git clone https://github.com/skunkobi/mcp-leclerc-drive.git
cd mcp-leclerc-drive
npm install
npm run build

認証の仕組み(CDP 経由の実際の Chrome)

Leclerc Drive は DataDome によって保護されており、アクティブチャレンジモードに移行すると、ブラウザー以外のトラフィック(ヘッドレスクライアント、Cookie の再利用)は HTTP 403 でブロックされます。確実に通過できるのは、チャレンジを実行する実際のブラウザーだけです。そのため、このサーバーでは次のようにしています。

  1. 最初のリクエスト時に、専用の永続プロファイル(~/.mcp-leclerc-drive/chrome)とデバッグポートを指定して、インストール済みの Google Chrome を起動します。自動化フラグは使用しないため、navigator.webdriver は false のままです。
  2. Chrome のウィンドウが開きます。そのウィンドウで Leclerc Drive に一度ログインしてください。永続プロファイルにより、再起動後もログイン状態が維持されます。
  3. すべてのリクエストは CDP 経由でそのページ内から実行されるため、ブラウザーの Cookie、TLS フィンガープリント、解決済みの DataDome チャレンジが使われ、リクエストが通過します。

Cookie は読み取られず、保存もされません。キーチェーンの確認画面も表示されません。サーバーは Chrome と同じマシンで実行する必要があり、ウィンドウも開きます(DataDome はヘッドレスを検出できるため、リスクを理解していない場合は有効にしないでください)。

Env varDefaultDescription
LECLERC_STORE_ID053701デフォルトの店舗 ID(実行時に set_store で上書きされます)。
LECLERC_HOSTfd9-courses.leclercdrive.frデフォルトのバックエンドホスト(fdN のプレフィックスは店舗によって異なります)。
LECLERC_CHROME_PATHautoChrome がデフォルトの場所にない場合に指定する、Chrome バイナリのパスです。
LECLERC_CHROME_PROFILE_DIR~/.mcp-leclerc-drive/chromeChrome の永続プロファイルディレクトリです。
LECLERC_CHROME_PORT9222CDP のリモートデバッグポートです。
LECLERC_HEADLESSfalseChrome をヘッドレスで実行します(⚠️ DataDome に検出されます。推奨しません)。
LECLERC_MIN_INTERVAL_MS10002 件のリクエスト間に設ける最小遅延(適切な利用のため)。
LECLERC_JITTER_MS400リクエスト間に追加するランダムなジッターです。
LECLERC_MAX_RETRIES3あきらめる前に、一時的な 403/429 に対して再試行する回数です。
LECLERC_BACKOFF_BASE_MS1500再試行時の基本バックオフ時間(試行ごとに倍増します)。

DataDome の処理をブラウザーが担うようになっても、適切な利用のため、サーバーは引き続きリクエストを直列化して間隔を空けます(単一キュー、約 1 秒+ジッター、バックオフ付き再試行)。

店舗の選択(環境変数は不要)

最も簡単な方法は、会話の中で尋ねることです。環境変数は必要ありません。

> "trouve mon drive vers 44000"     → find_stores lists nearby drives
> "prends Rezé Atout Sud"           → set_store remembers it (correct host resolved)
> "cherche du lait"                  → runs on that store

set_store は選択内容を ~/.mcp-leclerc-drive/config.json に保存するため、セッションをまたいで維持されます。また、適切なバックエンドホストを自動で解決します(fdN のプレフィックスは店舗によって実際に異なり、fd8、fd9、fd14 などがあります)。

⚠️ 一度に利用できるのは 1 つのドライブだけです。 Leclerc はセッションを単一のドライブに紐付けます。set_store で選択する店舗は、Chrome のセッションでログインしている店舗でなければなりません。通常はご自身のドライブを使用するため、これが一般的なケースです。ブラウザーで利用していない任意の別のドライブに切り替えると、「セッションの有効期限が切れました」というエラーが返されます。

必要であれば、環境変数 LECLERC_STORE_ID/LECLERC_HOST で店舗を明示的に設定することもできます(例:ヘッドレスでデプロイする場合)。手動で確認するには、Drive の URL を見てください。URL は https://fd9-courses.leclercdrive.fr/magasin-053701-053701-Your-Town/ のような形式です。6 桁の数字が店舗 ID で、fdN-courses.leclercdrive.fr の部分がホストです。

Claude Desktop / Claude Code(mcp 設定)

npm から直接インストールできます。クローンは不要です。

# Claude Code
claude mcp add leclerc-drive -- npx -y mcp-leclerc-drive

または、Claude Desktop の設定で次のようにします。

{
  "mcpServers": {
    "leclerc-drive": {
      "command": "npx",
      "args": ["-y", "mcp-leclerc-drive"]
    }
  }
}

環境変数は不要です。会話の中で find_stores/set_store を使って店舗を選択してください。初回利用時に Chrome のウィンドウが開きます。Leclerc Drive に一度ログインすれば、準備完了です。

開発

npm run dev        # tsc --watch
npm run typecheck  # type-check without emitting
npm run inspect    # run under the MCP Inspector

アーキテクチャ

src/
  index.ts          # MCP server: registers the 8 tools over stdio
  config.ts         # env-based config (store, host, Chrome/CDP, throttle)
  types.ts          # Product / CartItem / Cart
  store.ts          # active store selection + persistence (~/.mcp-leclerc-drive)
  browser.ts        # ChromeSession: drives real Chrome via CDP → beats DataDome
  leclerc/
    client.ts       # Leclerc Drive backend client (search + cart)
    locator.ts      # store finder: postal code / city → nearby drives
    throttle.ts     # request serialization + spacing + retry (hygiene)
docs/
  api-capture.md    # the reverse-engineered Leclerc Drive API

貢献

このツールはコミュニティによって開発されています。バグ修正、お使いの店舗への対応、新機能(チェックアウト、配送時間枠、保存済みリストなど)の追加を問わず、貢献を心より歓迎します。

開発環境のセットアップ、ご自身のアカウントを使ったスモークテスト(npm run smoke)、そしてこのプロジェクトで特に役立つ、新しい Leclerc Drive エンドポイントをリバースエンジニアリングして組み込む方法を簡潔にまとめたガイドについては、**CONTRIBUTING.md**をご覧ください。取り組みやすい最初の課題は、上記のステータスチェックリストに記載されています。

フィードバックとお問い合わせ

フィードバック、バグ報告、アイデアを心より歓迎します。

免責事項

非公式プロジェクトです。E.Leclerc との提携関係はなく、同社から承認も受けていません。ご自身のアカウントを使用し、ご自身の責任において、サイトの利用規約に従ってご利用ください。ご自身の食料品購入を個人的に自動化することを目的としています。

ライセンス

MIT

コメント

MCP は初めてですか?

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

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