French Grocery

io.github.maxime-desmarchelier由 GitHub 帳號 maxime-desmarchelier 發布v0.1.1更新於 Oct 30, 2026

Search, compare and manage E.Leclerc Drive and Super U grocery carts without ordering.

已驗證STDIO僅桌面瀏覽器自動化商業與電商

概覽

AI 產生的概覽

此 MCP 伺服器讓助理在法國 E.Leclerc Drive 與 Super U 上搜尋商品、查看成分並管理購物車,但不會下單。

可以做什麼
  • 搜尋商品並讀取價格、單位價格、促銷與最優惠方案
  • 讀取商品頁的成分、過敏原與產地資訊
  • 讀取並比較購物車:明細、總額、最低消費與可預約時段
  • 修改購物車:加入商品、設定數量、移除商品,並回讀確認
  • 列出已接入的零售商與工作階段狀態,尋找或選擇 Leclerc 門市
適用情境
適合讓助理依食譜或家庭需求建立購物清單、查詢法國超市商品與價格、在 Leclerc 與 Super U 分別裝好購物車,並在你自行預約時段與付款前比較哪一家較便宜。
執行需求
需在本機以 npx 執行 Node.js 26 或更新版本的行程,僅限桌面端。需要一個以 9222 埠開啟遠端偵錯並已登入各零售商網站的 Chrome。可透過 FR_GROCERY_CONFIG 指定選用的 JSON 設定檔(未提供時僅啟用 Super U);FR_GROCERY_CHROME_PORT 與 FR_GROCERY_STATE_DIR 為選用的覆寫項目。
安裝前請注意
它操作的是你自己已登入的瀏覽器工作階段,助理會以你的零售商帳號身分操作。購物車變更會實際寫入(加入、改數量、刪除),但不會下單、預約時段或付款。須遵守零售商網站的使用條款,本專案與零售商無關聯;遇到反機器人攔截會直接停止。商品資料為法文並會傳送給模型。

安裝

在 SourceWeft 中

  1. 開啟 儀表板中的 French Grocery,將其新增到工作區。
  2. 為需要使用其工具的對話啟用該服務。

Desktop only,透過 STDIO。 STDIO 服務會啟動本機處理程序,因此需要 SourceWeft 桌面主機。

其他 MCP 客戶端

參照 儲存庫 中的啟動說明。

README

fr-grocery-mcp

An MCP server that gives an agent domain-level access to the online grocery services ("drive") of French retailers: E.Leclerc Drive and Super U (coursesu.com) today, others through a new adapter. Search products, read their composition, manage the cart, read slots and minimum order amounts, compare carts. Nothing else.

The reasoning (recipes, ingredients, quantities for N people, product choice, price/promotion trade-offs) belongs to the agent. For example:

Order what I need to cook spaghetti bolognese and a four-cheese pizza for 4, at the cheapest of Leclerc and Super U.

The agent builds the list, searches each ingredient at each retailer, fills the carts, then compares them. The order is never placed: slot booking and payment are left to the user, on the site.

[!WARNING] This project is not affiliated with, endorsed by or supported by E.Leclerc, Système U or any retailer. It drives your own logged-in browser session, at a human pace, for personal use. Retailer sites change without notice and their terms of use apply: use it at your own risk.

Tools

Every retailer tool takes store (leclerc, superu: an enum generated from the configuration).

ToolEffectAnnotations
list_stores(check=false)plugged-in retailers and capabilities; with check, status of each session and active storeread-only
search_products(store, query, limit=20)products: id, label, price_eur, unit_price (€/kg, €/l, €/piece), available, typed promotions, best_offer (net cost, bundles and loyalty included)read-only
get_product(store, product_id)product page: ingredients (allergens in capitals; null for a raw product), declared allergens, originread-only
get_cart(store)lines (product_id, name, quantity, line_total_eur, unit_price) and total_eurread-only
get_order_conditions(store?)store, booked slot, slot attached to the cart, dated next slots (ISO start), minimums; store omitted = every retailerread-only
add_to_cart(store, product_id, quantity=1)adds to the quantity already present
set_quantity(store, product_id, quantity)sets the quantity (0 = removal)idempotent
remove_from_cart(store, product_id)removes the productdestructive, idempotent
find_stores(store, query)stores around a postcode or town (if the retailer supports it)read-only
set_store(store, store_id)selects and remembers the active storeidempotent
compare_carts(mode="drive")each retailer's cart: total, lines, minimum and missing amount, next slots; sorted from cheapest to most expensiveread-only

Every change reads the cart back and returns confirmed: true if the site holds the targeted quantity. Results are typed (outputSchema + structuredContent) and the server sends instructions describing the flow to the agent. A cap of 50 units per product guards against unit mistakes.

Errors (isError, error field): ValidationError (fix the call), NotSupportedError (the retailer does not support it), SessionExpiredError (log in again in Chrome), SiteBlockedError (anti-bot: stop), TransientError (retried automatically, then reported).

Product labels, promotion texts and search terms stay in French, as on the sites.

Capabilities per retailer

CapabilityE.Leclerc DriveSuper U
Search, cart, promotionsyes (immediate, multibuy, Ticket)yes (immediate, multibuy, Carte U)
Product pageingredients, allergens, originingredients, origin
Store selection from the agentfind_stores / set_storeno: on the site
Minimum ordernot exposed when logged outyes
Slotsnext slot, cart datenext slots, booked slot

Requirements

  • Node ≥ 26 (runs TypeScript natively: no build step). With mise: mise install --locked installs the version recorded in mise.lock.
  • A Chrome started with --remote-debugging-port=9222 and logged in to the sites (mise run chrome starts a dedicated profile in ~/.fr-grocery-mcp/chrome). One tab per site is found, or opened, by its domain.

Requests go through the browser session, one at a time and spaced out: the server replays what the site does on a click (see docs/retailers/). No protection is bypassed: an anti-bot block stops the server, it is never retried.

Configuration

FR_GROCERY_CONFIG points to a JSON file. Without a file, only Super U is plugged in.

json
{  "chrome": { "port": 9222, "timeoutMs": 30000 },  "stores": [    {      "retailer": "leclerc",      "store": {        "storeId": "123456",        "retrievalPointId": "123456",        "host": "fd7-courses.leclercdrive.fr",        "name": "My Leclerc Drive"      }    },    { "retailer": "superu", "minIntervalMs": 300 }  ]}

The order of the retailers is the order of preference. minIntervalMs sets the spacing between requests (default: 1000 ms for Leclerc, 300 ms for Super U). Your Leclerc store's values can be found with find_stores / set_store: the store picked with set_store is remembered in $FR_GROCERY_STATE_DIR/leclerc-store.json (default ~/.fr-grocery-mcp) and takes precedence over the configuration. FR_GROCERY_CHROME_PORT overrides the port of the file. The Super U store is chosen on coursesu.com.

Usage

The server is distributed as the fr-grocery-mcp npm package and runs locally over stdio. Claude Code (.mcp.json):

json
{  "mcpServers": {    "fr-grocery-mcp": {      "command": "npx",      "args": ["-y", "fr-grocery-mcp@latest"],      "env": { "FR_GROCERY_CONFIG": "/path/to/fr-grocery-mcp.json" }    }  }}

Pin an exact version (for example [email protected]) instead of @latest for a reproducible setup. The same package is described in the official MCP Registry by io.github.maxime-desmarchelier/fr-grocery-mcp. Each release is published on npm, GitHub Releases and the MCP Registry; see docs/releasing.md.

From a source checkout, use "command": "node" and "args": ["/path/to/fr-grocery-mcp/src/main.ts"] instead. Manual inspection: npm run inspect (MCP Inspector).

Development

sh
npm cinpm run check                      # typecheck + lint + tests with coverage thresholdsmise run lint                      # the git hook's ruleset on the whole repository (what CI runs)npm test                           # unit, adapter contract, integration (no access to the sites)npm run doctor                     # real sites, read-only: session, search, product page, cart per retailernpm run test:live                  # real sites: changes then removes an item that is not in the cartLIVE_STORES=leclerc npm run test:livenpm run fixtures -- leclerc        # captures a retailer's reference pages againnpm run format                     # Biome

Architecture and technical choices: docs/architecture.md. Adding a retailer: docs/adding-a-retailer.md. Releases: docs/releasing.md.

Contributing

Issues and pull requests are welcome: see CONTRIBUTING.md for the setup, the code rules and what npm run check must show before a pull request. main is protected and CI must be green.

Security

Please report vulnerabilities privately through the repository's Security tab, never in a public issue: see SECURITY.md.

License

MIT. The E.Leclerc Drive adapter builds on knowledge from mcp-leclerc-drive (MIT): see NOTICE.

來源:README.md,提交 fa25af4

工具

0
SourceWeft 尚未在沙箱中啟動過該軟體包,因此其工具未知。

版本歷史

1
  1. v0.1.1最新Oct 29, 2026

評分

已滿足適用檢查項的 50%

該評分衡量此收錄條目的完整程度,依據註冊中心條目、端點與公開來源計算得出。它不是對伺服器本身的評價,也不表示伺服器安全或目前可用:可連通性是帶日期的檢查結果,評分也不包含安裝量或使用者評價。

  • 近 30 天內可連通25 分

    請保持端點能夠回應 MCP 握手;SourceWeft 每 30 天探測一次。

  • 已宣告認證方式10 分

    請在註冊中心條目中宣告憑證請求標頭,或保持端點能夠回應探測,以便判定其認證方式。

  • 已列出工具15 分

    請讓伺服器在無憑證時回應 tools/list,或發布可在沙箱中無憑證啟動的軟體包。

  • 描述必需15 分
  • 圖示10 分
  • 文件15 分
  • 授權條款10 分