
French Grocery
io.github.maxime-desmarchelierPublished by GitHub account maxime-desmarchelierv0.1.1Updated Oct 30, 2026
Search, compare and manage E.Leclerc Drive and Super U grocery carts without ordering.
Overview
MCP server that lets an assistant search products, read ingredients and manage grocery carts on E.Leclerc Drive and Super U in France, without placing orders.
- What you can do
- Search products and read prices, unit prices, promotions and best offers per retailer
- Read product pages for ingredients, allergens and origin
- Read and compare carts: lines, totals, minimum order amounts and next slots
- Change carts: add items, set quantities, remove products, with read-back confirmation
- List plugged-in retailers and session status, and find or select a Leclerc store
- When to use it
- Useful when you want an assistant to build a shopping list for recipes or a household, look up French grocery products and prices, fill carts at Leclerc and Super U, and compare which cart is cheapest before you book a slot and pay yourself.
- Requirements
- Local Node.js 26 or newer process run via npx, on desktop only. A Chrome instance started with remote debugging on port 9222 and already logged in to the retailer sites. Optional JSON config file via FR_GROCERY_CONFIG (without it only Super U is enabled); FR_GROCERY_CHROME_PORT and FR_GROCERY_STATE_DIR are optional overrides.
Installation
In SourceWeft
- Open French Grocery in the dashboard and add it to a workspace.
- Enable the server for the chats that should use its tools.
Desktop only via STDIO. STDIO servers start a local process, so they need the SourceWeft desktop host.
Other MCP clients
Follow the launch instructions in the repository.
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).
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
Requirements
- Node ≥ 26 (runs TypeScript natively: no build step). With mise:
mise install --lockedinstalls the version recorded inmise.lock. - A Chrome started with
--remote-debugging-port=9222and logged in to the sites (mise run chromestarts 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.
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):
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
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.
Source: README.md at commit fa25af4
Tools
0Version history
1- v0.1.1LatestOct 29, 2026
Score
50% of the applicable checks met
How complete this listing is, computed from the registry entry, the endpoint and public sources. Not a rating of the server and not a statement that it is safe or working today: reachability is a dated check, and no installs or reviews go into the score.
- Reached in the last 30 days25 pts
Keep the endpoint answering the MCP handshake; SourceWeft probes it every 30 days.
- Auth declared10 pts
Declare the credential headers in the registry entry, or keep the endpoint answering the probe so its auth can be classified.
- Tools listed15 pts
Answer tools/list without a credential, or ship a package that starts in a sandbox without one.
- DescriptionRequired15 pts
- Logo10 pts
- Documentation15 pts
- License10 pts