Skip to main content
Glama
maximeallanic

Carrefour Drive MCP

Carrefour Drive MCP — compra de supermercado para tu agente de IA

Servidor MCP para Carrefour Drive (carrefour.fr). Permite que Claude, Cursor o cualquier cliente del Model Context Protocol busque en el catálogo de supermercado francés, cree una cesta, elija una franja de recogida en Drive o de entrega, consulte los puntos de fidelidad y los recibos anteriores, con tu propia cuenta de Carrefour.

48 herramientas. 43 endpoints reales de la API de carrefour.fr descritos como JSON y ejecutados por un ejecutor genérico, más 5 herramientas de gestión de sesión. Añadir un endpoint significa añadir un archivo JSON, sin código.

"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
  • Independiente — sin binario spectral, sin pasarela externa, sin clave de API. Clona, compila, ejecuta.

  • A prueba de Cloudflare — cada llamada se realiza desde una página Chromium real, porque nada más obtiene un 200.

  • Mantiene la sesión iniciada — inicias sesión una vez en una ventana del navegador; el servidor renueva la sesión por sí mismo mediante el bucle SSO de OAuth2.


Índice


Related MCP server: mcp-leclerc-drive

Instalación

No hay nada que clonar. Node.js 20+ es el único requisito (fetch, FormData y node:test nativos).

npx -y github:maximeallanic/CarrefourDriveMCP

Ese único comando descarga, compila e inicia el servidor en stdio; la primera ejecución también descarga el Chromium que usa como transporte HTTP. La mayoría de las veces no lo escribes tú: lo pones en la configuración de tu cliente MCP (siguiente sección) y el cliente lo ejecuta por ti.

¿Prefieres instalarlo una sola vez, de forma global?

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

Tu sesión, perfil de navegador y registros viven en ~/.carrefour-drive-mcp ($XDG_DATA_HOME/carrefour-drive-mcp si está definido), así que las actualizaciones nunca te cierran la sesión. Anula con 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

Una copia del código fuente guarda sus datos en el directorio data/ del propio repositorio.

Conéctalo a tu agente

Claude Code

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

Luego, en cualquier sesión:

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

Claude Desktop

Edita 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"]
    }
  }
}

Reinicia Claude Desktop; las herramientas de Carrefour aparecen en el menú de herramientas.

En Windows, usa "command": "cmd" con "args": ["/c", "npx", "-y", "github:maximeallanic/CarrefourDriveMCP"].

Cursor, Windsurf, Zed, VS Code y otros clientes MCP

Cualquier cliente que hable MCP sobre stdio acepta los mismos dos campos:

{
  "command": "npx",
  "args": ["-y", "github:maximeallanic/CarrefourDriveMCP"]
}
  • Cursor~/.cursor/mcp.json (o .cursor/mcp.json en un proyecto)

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

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

  • Zedsettings.json, bajo "context_servers"

¿Instalado globalmente o clonado? Sustituye por {"command": "carrefour-drive-mcp"} o {"command": "node", "args": ["/absolute/path/to/dist/index.js"]}.

¿Ya tienes cookies? Pásalas en un bloque "env" en lugar de iniciar sesión: {"CARREFOUR_COOKIES": "…cookie header…"}.

Iniciar sesión

carrefour.fr te identifica con cookies, detrás de un captcha de Cloudflare Turnstile y un OTP. Por eso el inicio de sesión es interactivo, una sola vez:

  1. Pide a tu agente que ejecute carrefour_browser_login.

  2. Se abre una ventana del navegador en la página de inicio de sesión de Carrefour. Escribe tú mismo tu correo electrónico, contraseña y el código OTP.

  3. No cierres la ventana — el servidor detecta el final del bucle OAuth, captura las cookies de sesión de la memoria y la cierra por ti.

A partir de entonces, la sesión se renueva sola silenciosamente: el servidor reproduce la redirección de autorización → callback del SSO antes de las llamadas autenticadas, después de un 401/403, y cada 30 minutos como keep-alive. Solo tienes que volver a iniciar sesión cuando la propia cookie SSO caduque (máx. 24 h, o 60 min de inactividad) — las herramientas lo indican explícitamente.

Comprueba el estado en cualquier momento con carrefour_session_status (verify: true hace una llamada real).

Herramienta de sesión

Qué hace

carrefour_browser_login

abre una ventana para iniciar sesión (captcha + OTP)

carrefour_session_status

cookies almacenadas, perfil de navegador, tiempo restante de SSO

carrefour_refresh_session

fuerza una renovación (rara vez necesario — es automático)

carrefour_set_cookies

importa cookies manualmente (cabecera, mapa JSON o array JSON)

carrefour_clear_session

borra la sesión local

Para carrefour_set_cookies, solo el formato array JSON incluye el dominio de la cookie — es el único que puede proporcionar c4iamsecuretk, sin el cual la renovación automática es imposible.

El almacén de cookies vive en <data dir>/sessions/cookies.json (0600) y se reinyecta en el perfil del navegador en cada inicio.

Referencia de herramientas

Herramienta

Endpoint

Parámetros requeridos

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

Cesta y pago

Herramienta

Endpoint

Parámetros requeridos

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 cobra un pago real. Cuatro de sus parámetros se capturaron como cadena de consulta mientras que su descripción sugiere cabeceras HTTP — compruébalo con un rastro real antes de usarlo en producción.

Cuenta, pedidos y fidelidad

Herramienta

Endpoint

Parámetros requeridos

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

Listas de la compra

Herramienta

Endpoint

Parámetros requeridos

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

Por qué un navegador real

carrefour.fr está detrás de un desafío gestionado de Cloudflare que toma la huella del cliente. Medido desde una IP, el mismo día:

Cliente

GET /api/cart

fetch (undici)

403 cf-mitigated: challenge, en la primera petición

curl

200 durante unas llamadas, luego 403

Chrome

200

Ninguna manipulación de cabeceras cambia eso: el único transporte viable es un navegador. Y las peticiones deben emitirse desde una página — el APIRequestContext de Playwright usa una pila HTTP de Node y se bloquea como fetch.

Así que el servidor mantiene un Chromium persistente y ejecuta cada llamada API como un fetch dentro de una página anclada en el origen de destino (una página por origen, por CORS). Se ejecuta sin ventana, pero no en modo headless estándar:

Modo de lanzamiento

Resultado

headless: true (headless shell)

403 — el UA anuncia HeadlessChrome

headless: false

200

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

200, navigator.webdriver es false

La última línea es la que se distribuye.

Cómo funciona la autenticación

Dos sistemas de cookies distintos:

Dominio

Rol

Duración

moncompte.carrefour.fr

ForgeRock SSO, cookie c4iamsecuretk

24 h máx., caduca tras 60 min de inactividad

www.carrefour.fr

sesión de tienda (cookies HttpOnly)

corta, renovable

El inicio de sesión es interactivo por dos restricciones: el formulario está detrás de un captcha Cloudflare Turnstile que se niega a validar en un navegador controlado por CDP, y c4iamsecuretk es una cookie de sesión que Chromium nunca escribe en disco. Así que la ventana es un Chromium normal con un puerto de depuración abierto pero nada conectado hasta que el inicio de sesión termina; el servidor consulta la pestaña por HTTP normal en /json/list (sin dominio CDP habilitado, así que no hay rastro de automatización), se conecta en el momento en que el bucle OAuth vuelve a la tienda, y lee las cookies de la memoria.

La renovación posterior es una navegación normal: Chromium sigue las redirecciones y establece las cookies por sí mismo:

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)

Cómo funciona el ejecutor

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

Cada archivo en tools/ se autodescribe:

{
  "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
}

El motor (src/spec/):

  • sustituye recursivamente los nodos {"$param": "name"} en headers, query y body, conservando el tipo original (número, booleano, array);

  • elimina los placeholders sin argumento, de modo que los parámetros opcionales desaparecen de la petición en lugar de enviarse como null;

  • rellena los segmentos de URL {basket_service_type}, {store_id}, … con codificación, fallando con un mensaje claro cuando falta un segmento obligatorio;

  • serializa los arrays como claves de consulta repetidas (codes[]=14&codes[]=15);

  • codifica el cuerpo según content_type: JSON, x-www-form-urlencoded o multipart/form-data (el boundary se deja a fetch);

  • aplica un límite de tasa deslizante con jitter, además de cabeceras de navegador.

Añadir un endpoint = colocar un nuevo archivo JSON en tools/. Sin código que escribir.

Configuración

Ver .env.example. Variables principales:

Variable

Por defecto

Rol

CARREFOUR_COOKIES

cookies de sesión (cabecera, mapa JSON o array JSON)

CARREFOUR_COOKIE_FILE

ruta a una exportación de cookies JSON

CARREFOUR_DATA_DIR

~/.carrefour-drive-mcp (repo data/ desde el código fuente)

raíz de todo lo que se escribe debajo

CARREFOUR_SESSION_FILE

<data>/sessions/cookies.json

almacén de cookies persistido

CARREFOUR_BROWSER_PROFILE

<data>/browser-profile

perfil de Chromium persistente

CARREFOUR_KEEPALIVE_MINUTES

30

periodo de keep-alive del SSO; 0 lo desactiva

CARREFOUR_OAUTH_CLIENT_ID

carrefour_onecarrefour_web

cliente OAuth2 usado para el refresco

CARREFOUR_OAUTH_REDIRECT_URI

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

callback BFF

CARREFOUR_OAUTH_SCOPE

openid iam

ámbitos solicitados

CARREFOUR_TOOLS_DIR

<project>/tools

directorio de definiciones de herramientas JSON

CARREFOUR_MAX_RESPONSE_CHARS

60000

truncado de respuestas grandes

REQUEST_TIMEOUT_MS

30000

tiempo de espera HTTP

RATE_LIMIT_REQUESTS / RATE_LIMIT_WINDOW_MS

10 / 60000

ventana de límite de tasa

MIN_DELAY_MS / MAX_DELAY_MS

100 / 500

jitter entre peticiones

LOG_LEVEL, CARREFOUR_LOG_DIR

info, <data>

logs de winston (archivos + stderr, nunca stdout)

Verificar la instalación

Desde una copia del código fuente:

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

Las pruebas cubren la sustitución de $param, los segmentos de URL, los arrays en cadenas de consulta, las tres codificaciones de cuerpo y el manejo del almacén de cookies. La prueba de humo arranca el servidor, realiza el handshake JSON-RPC y lista las herramientas.

Las llamadas de red a carrefour.fr no se prueban automáticamente: necesitan una cuenta real y cookies válidas.

Preguntas frecuentes

¿Necesito una clave API? No. Carrefour no tiene API pública; este servidor usa los mismos endpoints privados que el sitio web, con tu propia sesión.

¿Funciona fuera de Francia? El catálogo y las tiendas son franceses (carrefour.fr). Cloudflare puede ser más estricto desde algunas IPs.

¿Se guarda mi contraseña? No. La escribes en una ventana del navegador; solo se persisten cookies, en ~/.carrefour-drive-mcp/sessions/cookies.json con permisos 0600. Ninguna credencial vive en este repositorio, y data/ y .env están en gitignore.

¿Puede hacer un pedido real? Sí — submit_checkout_payment cobra un pago real. Trátalo en consecuencia.

¿Puedo añadir endpoints? Coloca un archivo JSON en tools/. Ver Cómo funciona el ejecutor.

¿Qué clientes se admiten? Cualquier cosa que hable MCP sobre stdio: Claude Code, Claude Desktop, Cursor, Windsurf, VS Code / Copilot, Zed, Continue, agentes personalizados que usen el MCP SDK.

Descargo de responsabilidad

Proyecto no oficial, no afiliado, respaldado ni soportado por Carrefour. Para uso personal y educativo en tu propia cuenta. Respeta los términos de servicio de Carrefour y limita tu tasa en consecuencia.

Licencia

MIT © Maxime Allanic

Palabras clave: Carrefour MCP server · Carrefour Drive API · Model Context Protocol de supermercado · Claude Desktop MCP · Claude Code MCP server · Cursor MCP · agente de IA para compras de supermercado en Francia · compras en línea · drive · lista de la compra · fidelidad Carrefour · automatización del carrito de la compra MCP.

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