Skip to main content
Glama
maximeallanic

Carrefour Drive MCP

Carrefour Drive MCP — Lebensmitteleinkauf für Ihren KI-Agenten

MCP-Server für Carrefour Drive (carrefour.fr). Lassen Sie Claude, Cursor oder einen beliebigen anderen Model Context Protocol-Client den französischen Lebensmittelkatalog durchsuchen, einen Warenkorb aufbauen, einen Drive-Abhol- oder Lieferslot wählen, Treuepunkte und frühere Belege lesen – auf Ihrem eigenen Carrefour-Konto.

48 Tools. 43 echte carrefour.fr-API-Endpunkte, die als JSON beschrieben und von einem generischen Ausführer ausgeführt werden, plus 5 Sitzungsverwaltungstools. Einen Endpunkt hinzuzufügen bedeutet, eine JSON-Datei einzufügen – ganz ohne Code.

"What did I buy last month?"            → get_loyalty_order_receipts
"Refill my usual weekly groceries."     → get_frequent_purchases + add_item_to_cart
"Cheapest organic pasta under 2 €?"     → search_products
"Book the Saturday morning Drive slot." → get_delivery_timeslots + select_cart_delivery_slot
  • Eigenständig – kein spectral-Binär, kein externes Gateway, kein API-Schlüssel. Klonen, bauen, ausführen.

  • Cloudflare-fest – jeder Aufruf wird von einer echten Chromium-Seite ausgesendet, denn nichts anderes bekommt eine 200.

  • Bleibt angemeldet – Sie melden sich einmal in einem Browserfenster an; der Server erneuert die Sitzung von selbst durch die OAuth2-SSO-Schleife.


Inhaltsverzeichnis


Related MCP server: mcp-leclerc-drive

Installation

Nichts zu klonen. Node.js 20+ ist die einzige Voraussetzung (native fetch, FormData, node:test).

npx -y github:maximeallanic/CarrefourDriveMCP

Dieser einzelne Befehl holt, baut und startet den Server auf stdio – beim ersten Ausführen wird auch das Chromium heruntergeladen, das er als HTTP-Transport verwendet. Meist müssen Sie den Befehl nie selbst tippen: Sie fügen ihn in die Konfiguration Ihres MCP-Clients ein (nächster Abschnitt) und der Client führt ihn für Sie aus.

Bevorzugt einmalig global installiert?

npm install -g github:maximeallanic/CarrefourDriveMCP
carrefour-drive-mcp

Ihre Sitzung, Ihr Browserprofil und Ihre Protokolle liegen in ~/.carrefour-drive-mcp ($XDG_DATA_HOME/carrefour-drive-mcp, wenn gesetzt), sodass Upgrades Sie nie abmelden. Überschreiben Sie dies mit CARREFOUR_DATA_DIR.

git clone https://github.com/maximeallanic/CarrefourDriveMCP.git
cd CarrefourDriveMCP
npm install     # builds, and downloads the Chromium transport
node dist/index.js

Ein Quelltext-Checkout behält seine Daten im eigenen data/-Verzeichnis des Repositorys.

Verbinden Sie es mit Ihrem Agenten

Claude Code

claude mcp add carrefour-drive -- npx -y github:maximeallanic/CarrefourDriveMCP

Dann, in jeder Sitzung:

> Log me in to Carrefour        (runs carrefour_browser_login)
> Add 2 L of semi-skimmed milk to my Drive cart

Claude Desktop

Bearbeiten Sie claude_desktop_config.json:

  • macOS~/Library/Application Support/Claude/claude_desktop_config.json

  • Windows%APPDATA%\Claude\claude_desktop_config.json

  • Linux~/.config/Claude/claude_desktop_config.json

{
  "mcpServers": {
    "carrefour-drive": {
      "command": "npx",
      "args": ["-y", "github:maximeallanic/CarrefourDriveMCP"]
    }
  }
}

Starten Sie Claude Desktop neu; die Carrefour-Tools erscheinen im Tool-Menü.

Unter Windows verwenden Sie "command": "cmd" mit "args": ["/c", "npx", "-y", "github:maximeallanic/CarrefourDriveMCP"].

Cursor, Windsurf, Zed, VS Code und andere MCP-Clients

Jeder Client, der MCP über stdio spricht, akzeptiert dieselben zwei Felder:

{
  "command": "npx",
  "args": ["-y", "github:maximeallanic/CarrefourDriveMCP"]
}
  • Cursor:~/.cursor/mcp.json (oder .cursor/mcp.json in einem Projekt)

  • Windsurf:~/.codeium/windsurf/mcp_config.json

  • VS Code / Copilot:.vscode/mcp.json, unter "servers"

  • Zed:settings.json, unter "context_servers"

Global installiert oder geklont? Stattdessen tauschen Sie {"command": "carrefour-drive-mcp"} oder {"command": "node", "args": ["/absoluter/pfad/zu/dist/index.js"]} ein.

Haben Sie bereits Cookies? Übergeben Sie sie in einem "env"-Block anstelle der Anmeldung: {"CARREFOUR_COOKIES": "…Cookie-Header…"}.

Anmelden

carrefour.fr meldet Sie mit Cookies an, hinter einem Cloudflare-Turnstile-CAPTCHA und einem OTP. Die Anmeldung ist also einmalig interaktiv:

  1. Bitten Sie Ihren Agenten, carrefour_browser_login auszuführen.

  2. Ein Browserfenster öffnet sich auf der Carrefour-Anmeldeseite. Geben Sie selbst Ihre E-Mail-Adresse, Ihr PasswortTel. und den OTP-Code ein.

  3. Schließen Sie das Fenster nicht – der Server erkennt das Ende der OAuth-Schleife, übernimmt die Sitzungs-Cookies aus dem Speicher und schließt es dann von selbst.

Ab dann erneuert sich die Sitzung still und leise: Den Server wiederspielt die SSO-Autorisierung → Callback-Umleitung vor authentifizierten Aufrufen, nach einem 401/403 und alle 30 Minuten als Keep-Alive. Sie melden sich nur wieder an, wenn das SSO-Cookie selbst abläuft (max. 24 Std., oder 60 Min. ohne Aktivität) – die Tools sagen dies explizit.

Überprüfen Sie den Status jederzeit mit carrefour_session_status (verify: true macht einen echten Aufruf).

Sitzungstool

Was es tut

carrefour_browser_login

Fenster zum Anmelden öffnen (CAPTCHA + OTP)

carrefour_session_status

Gespeicherte Cookies, Browserprofil, verbleibende SSO-Zeit

carrefour_refresh_session

Erneuerung erzwingen (selten nötig – automatisch)

carrefour_set_cookies

Cookies manuell importieren (Header, JSON-Map oder JSON-Array)

carrefour_clear_session

Lokale Sitzung löschen

Für carrefour_set_cookies trägt nur das JSON-Array-Format die Cookie-Domäne, – es ist das einzige, das c4iamsecuretk liefern kann, ohne das eine automatische Verlängerung unmöglich ist.

Der Cookie-Topf lebt in <data dir>/sessions/cookies.json (0600) und wird bei jedem Start in das Browserprofil neu injiziert.

Tool-Referenz

Suche & Katalog (kein Konto nötig)

Tool

Endpunkt

Erforderliche Parameter

search_products

GET /s

q

autocomplete_search

GET /autocomplete

q

get_products_by_gtins

POST /products

gtins

get_products_by_query

GET /products/query/{query_id}

query_id

get_product_reviews

GET /product/{ean}/reviews

ean

get_navigation_tree

GET /navigation

get_marketing_placements

POST /api/marketing/{placement}

placement, searchTerm, categories, productFilters

get_donation_products

GET /donation

get_chat_preprompts

POST ocb.carrefour.fr/preprompts

modes, count, navigationCurrentPageTitle, navigationCurrentPageType

get_eligible_drive_stores

GET /api/eligibility/drive

latitude, longitude, postalCode, city

Warenkorb & Checkout

Tool

Adresse

Erforderliche Parameter

get_cart

GET /api/cart

add_item_to_cart

PATCH /api/cart

ean, counter, basketServiceId, subBasketType

add_item_to_cart_by_ean

PATCH /api/cart/items

ean, basketServiceId, subBasketType

apply_promo_code_to_cart

POST /api/cart/promo_code

code, facilityServiceId, subBasketType

simulate_cart_for_store

GET /api/cart/simulate

storeRef

get_delivery_timeslots

GET /api/timeslots

facilityServiceId

select_cart_delivery_slot

PUT /api/cart/slot

slotRef, storeRef

validate_checkout_slot

POST /api/checkout/{basket_service_type}/validate/slot

basket_service_type, deviceFingerPrintId

validate_checkout_summary

POST /api/checkout/{basket_service_type}/validate/summary

basket_service_type, deviceFingerPrintId

get_checkout_recommendations

GET /api/checkout/recommendations/{facility_id}/{basket_service}

facility_id, basket_service

submit_checkout_payment ⚠️

POST /api/checkout/payment

checkout_type, device_fingerprint_id, payments

⚠️ submit_checkout_payment verlangt eine echte Zahlung. Vier seiner Parameter wurden als Anfragezeichen-Zeichenzeichenkette erfasst, während ihre Beschreibung über HTTP-Header vermuten lässt – überprüfen Sie dies gegen eine echte Ablaufspur, bevor Sie es in Produktion verwenden.

Konto, Bestellungen & Treueprogramm

Werkzeug

Endpunkt

Erforderliche Parameter

get_orders

GET /api/user/orders

get_last_orders

GET /api/user/orders/last

get_frequent_purchases

GET /mon-compte/achats-frequents

get_loyalty_balance

GET /api/user/secured/loyalty/balance

get_loyalty_cards

GET /api/user/secured/loyalty/my-cards

get_loyalty_coupons_dashboard

GET /api/user/loyalty/coupons-dashboard

get_loyalty_coupon_collection

GET /api/user/loyalty/coupon-collection

get_loyalty_order_receipts

GET /api/user/secured/loyalty/orders/receipts

loyaltyCardNumber, loyaltyCardType

get_loyalty_order_receipt_details

GET /api/user/secured/loyalty/orders/receipt/{gln}/{date_key}/{receipt_number}

gln, date_key, receipt_number

get_advantage_codes

GET /api/advantage-code

get_vignettes_products

GET /api/user/products/vignettes-products

get_olympic_games_prime

GET /api/user/loyalty/olympic-games/prime

get_account_kpis

GET /api/user/my-account/kpis

codes

get_user_consents

GET /api/user/my-account/consents

get_favorite_store

GET /api/favoritestore

get_store_information_inserts

POST /api/information-insert/stores/{store_id}

store_id, insert_ids

get_homepage_returning_banner

GET /api/homepage/returningBanner

get_personalized_recommendations

GET /api/user/recommendation/cdp

get_product_recommendations

GET /api/recommendations

context

Einkaufslisten

Werkzeug

Endpunkt

Erwartete Parameter

get_shopping_lists

GET /api/shopping-lists

get_shopping_list

GET /api/shopping-lists-id/{list_id}

list_id

create_shopping_list

POST /api/shopping-lists/memo-list

title

Warum ein echter Browser

carrefour.fr liegt hinter einer Cloudflare managed challenge, die den Client per Fingerprint identifiziert. Gemessen von einer IP aus, am selben Tag:

Client

GET /api/cart

fetch (undici)

403 cf-mitigated: challenge, bei der allerersten Anfrage

curl

200 für ein paar Aufrufe, dann 403

Chrome

200

Kein noch so großes Herumtüfteln an Headern ändert das: Der einzige gangbare Transport ist ein Browser. Und die Anfragen müssen von einer Seite aus erfolgen – Playwrights APIRequestContext verwendet einen Node-HTTP-Stack und wird wie fetch blockiert.

Der Server hält also ein persistentes Chromium und führt jeden API-Aufruf als fetch innerhalb einer Seite aus, die auf der Ziel-Origin geparkt ist (eine Seite pro Origin, wegen CORS). Er läuft fensterlos, aber nicht im Standard-Headless-Modus:

Startmodus

Ergebnis

headless: true (Headless-Shell)

403 – der UA kündigt HeadlessChrome an

headless: false

200

channel: 'chromium' + maskierter UA + --disable-blink-features=AutomationControlled

200, navigator.webdriver ist false

Die letzte Zeile ist das, was ausgeliefert wird.

Wie die Authentifizierung funktioniert

Zwei getrennte Cookie-Systeme:

Domain

Rolle

Lebensdauer

moncompte.carrefour.fr

ForgeRock SSO, Cookie c4iamsecuretk

max. 24 h, stirbt nach 60 min Inaktivität

www.carrefour.fr

Shop-Sitzung (HttpOnly-Cookies)

kurz, erneuerbar

Der Login ist interaktiv, weil zwei Einschränkungen bestehen: Das Formular liegt hinter einem Cloudflare Turnstile-Captcha, das sich in einem CDP-gesteuerten Browser nicht validieren lässt, und c4iamsecuretk ist ein Session-Cookie, das Chromium nie auf die Festplatte schreibt. Das Fenster ist daher ein normales Chromium mit offenem Debug-Port, aber nichts ist angehängt, bis der Login abgeschlossen ist; der Server pollt die Tab über einfaches HTTP auf /json/list (keine CDP-Domain aktiviert, daher keine Automatisierungsspur), hängt sich an, sobald die OAuth-Schleife wieder auf dem Shop landet, und liest die Cookies aus dem Speicher.

Die Erneuerung danach ist eine einfache Navigation – Chromium folgt den Weiterleitungen und setzt die Cookies selbst:

GET moncompte.carrefour.fr/iam/oauth2/CarrefourConnect/authorize?client_id=…&redirect_uri=https://www.carrefour.fr/login/check
  └─302─► www.carrefour.fr/login/check?code=…   (the BFF exchanges the code)
      └─302─► www.carrefour.fr/                  (fresh session cookies)

So funktioniert der Executor

tools/*.json ──► loader (validation) ──► params (JSON Schema ➜ zod) ──► MCP tools/list
                                     └─► resolve ($param ➜ URL/query/headers/body)
                                              └─► http.service (cookies + rate limit + fetch)

Jede Datei in tools/ ist selbstbeschreibend:

{
  "name": "add_item_to_cart",
  "parameters": { "type": "object", "properties": { … }, "required": [ … ] },
  "request": {
    "method": "PATCH",
    "url": "https://www.carrefour.fr/api/cart",
    "headers": { … },
    "query": {},
    "body": { "items": [ { "ean": { "$param": "ean" }, … } ] },
    "content_type": "application/json"
  },
  "requires_auth": true
}

Die Engine (src/spec/):

  • ersetzt rekursiv {"$param": "name"}-Knoten in headers, query und body, wobei der ursprüngliche Typ (Zahl, Boolean, Array) erhalten bleibt;

  • verwirft Platzhalter ohne Argument, sodass optionale Parameter aus der Anfrage verschwinden, statt als null gesendet zu werden;

  • füllt URL-Segmente {basket_service_type}, {store_id}, … mit Kodierung und schlägt mit einer klaren Meldung fehl, wenn ein erforderliches Segment fehlt;

  • serialisiert Arrays als wiederholte Query-Schlüssel (codes[]=14&codes[]=15);

  • kodiert den Body gemäß content_type: JSON, x-www-form-urlencoded oder multipart/form-data (Boundary bleibt fetch überlassen);

  • wendet ein gleitendes Rate-Limit mit Jitter an, plus Browser-Header.

Einen Endpunkt hinzuzufügen = eine neue JSON-Datei in tools/ ablegen. Kein Code zu schreiben.

Konfiguration

Siehe .env.example. Hauptvariablen:

Variable

Standard

Rolle

CARREFOUR_COOKIES

Session-Cookies (Header, JSON-Map oder JSON-Array)

CARREFOUR_COOKIE_FILE

Pfad zu einem JSON-Cookie-Export

CARREFOUR_DATA_DIR

~/.carrefour-drive-mcp (Repo data/ aus Quelle)

Wurzel für alles, was unten geschrieben wird

CARREFOUR_SESSION_FILE

<data>/sessions/cookies.json

persistiertes Session-Cookie

CARREFOUR_BROWSER_PROFILE

<data>/browser-profile

persistentes Chromium-Profil

CARREFOUR_KEEPALIVE_MINUTES

30

SSO-Keep-Alive-Zeitraum; 0 deaktiviert

CARREFOUR_OAUTH_CLIENT_ID

carrefour_onecarrefour_web

OAuth2-Client für die Aktualisierung

CARREFOUR_OAUTH_REDIRECT_URI

https://www.carrefour.fr/login/check

BFF-Callback

CARREFOUR_OAUTH_SCOPE

openid iam

angeforderte Bereiche

CARREFOUR_TOOLS_DIR

<project>/tools

Verzeichnis für JSON-Tool-Definitionen

CARREFOUR_MAX_RESPONSE_CHARS

60000

Kürzung großer Antworten

REQUEST_TIMEOUT_MS

30000

HTTP-Timeout

RATE_LIMIT_REQUESTS / RATE_LIMIT_WINDOW_MS

10 / 60000

Rate-Limit-Fenster

MIN_DELAY_MS / MAX_DELAY_MS

100 / 500

Jitter zwischen Anfragen

LOG_LEVEL, CARREFOUR_LOG_DIR

info, <data>

Winston-Logs (Dateien + stderr, nie stdout)

Installation überprüfen

Aus einem Quellcode-Checkout:

npm run build     # tsc
npm test          # build + unit tests (node:test)
npm run smoke     # build + real MCP stdio handshake + tools/list
npm run verify    # all three

Die Tests decken die $param-Substitution, URL-Segmente, Arrays in Query-Strings, die drei Body-Kodierungen und die Cookie-Jar-Verwaltung ab. Der Smoke-Test startet tatsächlich den Server, führt den JSON-RPC-Handshake durch und listet die Tools auf.

Netzwerkaufrufe an carrefour.fr werden nicht automatisiert getestet – sie benötigen ein echtes Konto und gültige Cookies.

FAQ

Brauche ich einen API-Schlüssel? Nein. Carrefour hat keine öffentliche API; dieser Server nutzt dieselben privaten Endpunkte wie die Website, mit deiner eigenen Sitzung.

Funktioniert es außerhalb Frankreichs? Der Katalog und die Filialen sind französisch (carrefour.fr). Cloudflare kann von manchen IPs aus strenger sein.

Wird mein Passwort gespeichert? Nein. Du gibst es in einem Browserfenster ein; nur Cookies werden gespeichert, in ~/.carrefour-drive-mcp/sessions/cookies.json mit 0600-Berechtigungen. Keine Zugangsdaten liegen in diesem Repo, und data/ und .env sind gitignored.

Kann es eine echte Bestellung aufgeben? Ja – submit_checkout_payment belastet eine echte Zahlung. Behandle es entsprechend.

Kann ich Endpunkte hinzufügen? Lege eine JSON-Datei in tools/ ab. Siehe So funktioniert der Executor.

Welche Clients werden unterstützt? Alles, was MCP über stdio spricht: Claude Code, Claude Desktop, Cursor, Windsurf, VS Code / Copilot, Zed, Continue, benutzerdefinierte Agenten, die das MCP SDK verwenden.

Haftungsausschluss

Inoffizielles Projekt, nicht mit Carrefour verbunden, von Carrefour unterstützt oder befürwortet. Für den persönlichen und pädagogischen Gebrauch auf deinem eigenen Konto. Respektiere die Nutzungsbedingungen von Carrefour und begrenze deine Anfragen entsprechend.

Lizenz

MIT © Maxime Allanic

Keywords: Carrefour MCP server · Carrefour Drive API · Model Context Protocol Lebensmittel · Claude Desktop MCP · Claude Code MCP server · Cursor MCP · Französischer KI-Agent für Lebensmitteleinkauf · courses en ligne · drive · liste de courses · fidélité Carrefour · MCP Warenkorb-Automatisierung.

Install Server
A
license - permissive license
-
quality - not tested
B
maintenance

Maintenance

Maintainers
Response time
Release cycle
Releases (12mo)
Commit activity

Resources

Unclaimed servers have limited discoverability.

Looking for Admin?

If you are the server author, to access and configure the admin panel.

Related MCP Servers

  • A
    license
    -
    quality
    D
    maintenance
    MCP server that connects Carrefour Drive to Claude and other MCP clients, enabling product search with real prices, nutriscore, availability, and natural language cart management.
    MIT

View all related MCP servers

Related MCP Connectors

  • MCP server for AI agents to plan, verify, and deploy Cloudflare-native apps.

  • Shopping MCP for AI agents: search, compare, Amazon buy links. Auto-register.

  • Agent-native product catalog for AI shopping agents. 296M+ products, 28 countries.

View all MCP Connectors

Latest Blog Posts

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/maximeallanic/CarrefourDriveMCP'

If you have feedback or need assistance with the MCP directory API, please join our Discord server