mcp-intermarche-drive
Provides tools to search products, retrieve basket, add/update/remove items, and manage substitutions on Intermarché's online grocery platform.
Click on "Install Server".
Wait a few minutes for the server to deploy. Once ready, it will show a "Started" state.
In the chat, type
@followed by the MCP server name and your instructions, e.g., "@mcp-intermarche-drivesearch for organic milk"
That's it! The server will respond to your query, and you can continue using it as needed.
Here is a step-by-step guide with screenshots.
mcp-intermarche-drive
Unofficial MCP server for Intermarché Courses / Drive. It searches the catalogue of the store selected in Intermarché and reads or updates the current basket through one visible Chromium tab.
It does not place orders. Checkout, payment, account changes, and delivery-slot booking stay on the website.
Current status
This is an early adapter for a private, undocumented web API.
TypeScript build, unit tests, MCP initialization,
tools/list, and tool annotations pass locally.Product search and basket retrieval were checked against the live Intermarché frontend on 2026-07-27.
Basket writes are covered by tests against the event contract observed in the site. The automated live smoke test is deliberately read-only, so it does not prove that every write still works after an Intermarché release.
The project is not published to npm. Install it from source.
Review the basket in the visible Intermarché tab before checkout. A green test suite cannot make an undocumented retail API stable.
Related MCP server: Instacart MCP Server
Why the browser is part of the design
Intermarché puts DataDome in front of its shopping site. A separate HTTP client with copied cookies is both fragile and a poor security boundary. This server uses the browser session that the user can already see:
It attaches to Chromium over the Chrome DevTools Protocol (CDP).
It keeps one Intermarché tab on
https://www.intermarche.com.It runs
window.fetchin that page, so the browser applies its own cookies and challenge state.It serializes requests and adds a small delay between them.
If DataDome shows a challenge, the server stops retrying and tells the user to handle it in the browser.
This is not a CAPTCHA solver or a DataDome bypass. Login, store selection, challenge handling, and checkout remain visible browser actions.
The adapter does not export the browser cookie jar. Its page helper extracts only the values derived from itm_device_id and itm_usid, which Intermarché's frontend sends as request headers. Those values stay in process memory and never appear in MCP results, logs, or project files. See security boundaries for the limits of that guarantee.
What came from the Leclerc reference
The browser/CDP and throttling approach was adapted from skunkobi/mcp-leclerc-drive. The Intermarché implementation is not a renamed Leclerc client:
Area | Leclerc reference | This project |
Store | Locator tools plus a persisted store/host | Store and Drive mode come from the visible Intermarché tab |
Catalogue | Product records parsed from store HTML | JSON product endpoint under |
Basket | Form-encoded mutations and HTML cart extraction | Event-based JSON synchronization with the previous basket snapshot |
Substitutions | No separate contract | Explicit tool; additions default to refusal |
Browser target | General page target reused for the store host | One Intermarché tab, or one blank tab; unrelated tabs are left alone |
The full design review is in docs/design-review.md. Upstream attribution and license text are in NOTICE.
Tools
Tool | Reads or writes | Contract |
| Read | Reports CDP state, active store reference, delivery mode, whether a basket id was found, and visible DataDome action required. |
| Read | Searches the active store. Returns Intermarché |
| Read | Returns the complete normalized basket and total. |
| Write | Increases the current quantity by |
| Write | Sets an absolute quantity. |
| Write | Removes one product line. |
| Write | Sets substitution consent for a product already in the basket. |
product_id means the id returned by search_product or get_cart. It is normally Intermarché's itemId, not the EAN printed on the package.
Cart mutations happen as soon as the MCP client calls the tool. There is no second confirmation layer inside this server; the MCP host is responsible for its own approval UI.
Requirements
Node.js 22 or newer. The server uses Node's built-in
WebSocket.A visible Chromium-family browser with CDP enabled.
A graphical desktop session. Automatic launch is not suitable for a display-less server.
An Intermarché store and the Drive withdrawal mode selected in the dedicated browser profile.
Automatic browser detection currently expects:
macOS: Google Chrome in
/Applications;Windows: Google Chrome in
Program Files;Linux: a
chromiumexecutable onPATH.
Set INTERMARCHE_CHROME_PATH when your browser lives elsewhere, such as google-chrome on Linux.
Install from source
git clone https://github.com/nicolasestrem/mcp-intermarche-drive.git
cd mcp-intermarche-drive
npm ci
npm run build
npm test
npm run smokeThe repository is private, so the clone command requires GitHub access to it.
The executable entry point after the build is:
/absolute/path/mcp-intermarche-drive/dist/src/index.jsConnect an MCP client
Use the built file as a local stdio server. The common JSON form is:
{
"mcpServers": {
"intermarche-drive": {
"command": "node",
"args": ["/absolute/path/mcp-intermarche-drive/dist/src/index.js"],
"env": {
"INTERMARCHE_AUTO_LAUNCH": "true"
}
}
}
}Replace the path with the real absolute path. Do not use npx mcp-intermarche-drive; there is no published package.
The server is lazy about browser startup. Starting the MCP process does not open Chromium immediately. The first tool call that needs the browser, normally browser_status, connects to CDP and launches the dedicated profile if necessary.
First use
Start or reload the MCP client after adding the configuration.
Call
browser_status. A dedicated Chromium profile should open on CDP port9222.In its single tab, open Intermarché if needed.
Select the intended store and the Drive withdrawal mode.
Log in if you want to use the account basket. Anonymous baskets also work when the site permits them.
Resolve any DataDome challenge in the visible tab.
Call
browser_statusagain, then try a product search.
Keep one Intermarché tab in this profile. Multiple tabs can hold different store or basket state, and the server has no sensible way to guess which one you meant.
Attach to a browser you launch yourself
Set automatic launch off in the MCP environment:
{
"env": {
"INTERMARCHE_AUTO_LAUNCH": "false",
"INTERMARCHE_CHROME_PORT": "9222"
}
}Then start Chromium with a dedicated profile and a loopback-only debugging endpoint:
chromium \
--remote-debugging-address=127.0.0.1 \
--remote-debugging-port=9222 \
--user-data-dir="$HOME/.mcp-intermarche-drive/chrome" \
--no-first-run \
--no-default-browser-check \
about:blankDo not point this server at your everyday browser profile. CDP grants control over the attached tab, and the profile directory contains a persistent browser session.
Configuration
Variable | Default | Meaning |
|
| Loopback CDP port. |
| platform default | Chromium or Chrome executable. |
|
| Dedicated persistent browser profile. |
|
| Launch the browser when no CDP endpoint is listening. |
|
| Unsupported for normal use; it is more likely to trigger anti-bot checks and removes manual challenge handling. |
| browser-derived | Diagnostic fallback for store discovery. It must match the store selected in the tab. It does not switch stores. |
|
| Compatibility metadata fallback reported in browser context. It does not choose the store catalogue. |
|
| Minimum delay between queued web requests. |
|
| Random delay added to the minimum. |
|
| Bounded retries for HTTP 403 and 429. |
|
| Base for exponential retry backoff. |
|
| Timeout for CDP commands and browser fetches. |
Avoid setting INTERMARCHE_PDV_REF unless browser-state discovery is broken. An override that points at another store can mix that store's API path with the basket state held by the visible tab.
Security boundaries
CDP is account-level browser access. Keep it on
127.0.0.1; never expose port9222to a LAN, container bridge, tunnel, or public interface.Use a dedicated profile only for Intermarché. Any local process that can access the CDP port or profile directory should be treated as trusted.
Browser cookies still accompany same-origin requests because the fetch runs in the page. The server does not return the cookie jar through MCP or persist cookie values itself.
The browser-state snapshot is limited to store and basket keys. Do not replace it with a dump of local storage when debugging.
Cart tools modify the real current basket. There is no checkout tool, but basket changes are still external side effects.
Use the project only with your own account and in accordance with the site's terms.
Troubleshooting
browser_status says CDP is unavailable
Check that the configured browser executable exists.
Check that another process is not using the port: change
INTERMARCHE_CHROME_PORTon both the browser and MCP server if needed.On Linux, set
INTERMARCHE_CHROME_PATH=google-chromeifchromiumis not installed.On a remote or headless machine, launch the visible browser in the desktop session and use
INTERMARCHE_AUTO_LAUNCH=false.
No active store is found
Select the store and Drive mode in the attached tab, then call browser_status again. Store selection belongs to the website. INTERMARCHE_PDV_REF is a last-resort fallback, not a replacement for the visible selection.
DataDome or HTTP 403/429
Stop calling tools. Bring the existing Intermarché tab to the expected page, complete any visible challenge, and wait before retrying. Do not open more tabs or increase the retry count to hammer through it.
If the browser session or login changed, restart the MCP process so cached request identifiers are rebuilt from the current page.
The wrong basket or store appears
Close extra Intermarché tabs in the dedicated profile. Remove a stale INTERMARCHE_PDV_REF override. Confirm the store and withdrawal mode in the website before making another cart change.
Chromium reports that the profile is already in use
Reuse the already-running CDP instance on the configured port, or close that dedicated Chromium process before starting another one. Do not reuse the same profile directory from two browser processes.
Development and verification
npm run typecheck
npm test
npm run smoke
npm audit --audit-level=low
npm pack --dry-runWhat these checks cover:
browser-state extraction from a narrow set of keys;
normalization of current product and basket response shapes;
absolute quantity and explicit substitution events;
serialization of concurrent cart mutations;
a real JSON-RPC
initializeandtools/listexchange over stdio;MCP read-only, idempotent, and destructive annotations.
The optional live smoke test connects to the configured browser and performs only browser_status, product search, and basket retrieval:
npm run build
INTERMARCHE_AUTO_LAUNCH=false npm run smoke:liveIt does not add or remove products. Run it manually, never as unattended public CI.
Adapter details and the revalidation checklist live in:
Known limitations
Intermarché can change these private endpoints or storage shapes without notice.
Store selection is manual; there are no
find_storesorset_storetools.One server instance operates one tab, one browser profile, and one active store.
The login-status field is best-effort. The website is the authority on whether the session is authenticated.
Headless operation is not a supported path.
There is no checkout, order placement, payment, slot booking, or account-management tool.
Only stdio transport is implemented.
License and attribution
MIT. See LICENSE for this project and NOTICE for the upstream mcp-leclerc-drive attribution and MIT license text.
Intermarché is a trademark of its respective owner. This project is unofficial and is not affiliated with or endorsed by Intermarché.
Maintenance
Resources
Unclaimed servers have limited discoverability.
Looking for Admin?
If you are the server author, to access and configure the admin panel.
Latest Blog Posts
- Who's Calling? MCP Hosts Are an Identity Blind Spot (And the Spec Knows It)By Om-Shree-0709 on .mcpAgent IdentityOAuth 2.1
- Your AI Chatbot Just Exposed Your CEO's Salary to an InternBy Om-Shree-0709 on .Agent IdentityMCP SecurityOAuth Delegation
- Why MCP Servers Need Execution Sandboxing (And Why Your Current Stack Isn't Enough)By Om-Shree-0709 on .Agentic AiPrompt InjectionWebAssembly
MCP directory API
We provide all the information about MCP servers via our MCP API.
curl -X GET 'https://glama.ai/api/mcp/v1/servers/nicolasestrem/mcp-intermarche-drive'
If you have feedback or need assistance with the MCP directory API, please join our Discord server