Ifood MCP
Servidor no oficial del Protocolo de Contexto de Modelo para iFood: explora, busca, gestiona el carrito y pide comida a través de IA.
Documentación
Servidor MCP de iFood 
Servidor no oficial de Model Context Protocol para iFood, la plataforma de entrega de comida más grande de Brasil. Explora restaurantes, busca comida, gestiona tu carrito y realiza pedidos a través de cualquier asistente de IA que hable MCP.
No está afiliado a iFood. Envuelve la API web pública de consumo para uso personal.
Qué Hace Este Servidor MCP
Este servidor MCP brinda a los asistentes de IA (Claude Code, Claude Desktop, Cursor, Codex, etc.) acceso a tu cuenta de iFood. Expone 25 herramientas que permiten a una IA:
- 🔍 Buscar restaurantes y alimentos cerca de ti
- 🍔 Explorar comercios, catálogos completos, detalles de artículos y reseñas de clientes
- 🛒 Armar un carrito con artículos, método de entrega y pago
- 💳 Listar tus métodos de pago y direcciones guardados
- 📦 Listar pedidos anteriores, obtener detalles de pedidos y volver a pedir
- 🎁 Consultar tarjetas de fidelidad, beneficios de billetera y cupones
- 📍 Explorar el feed de inicio, categorías y páginas de navegación seleccionadas
Dos Modos de Autenticación
| Modo | Transporte | Inicio de sesión | Mejor para |
|---|---|---|---|
| HTTP + OAuth 2.1 | HTTP transmisible | OTP real de iFood (correo electrónico / SMS / WhatsApp) en una página de inicio de sesión alojada | Implementaciones multiusuario, MCP remoto, compartir con amigos |
| stdio | Entrada / salida estándar | Tokens pegados desde DevTools del navegador en un archivo .env | Configuración local de un solo usuario, la más rápida de conectar |
Puedes ejecutar cualquiera de los dos modos de forma independiente; las mismas definiciones de herramientas respaldan ambos.
Requisitos Previos
- Node.js ≥ 20
- Una cuenta de iFood activa (cualquier región de Brasil)
- Para el modo HTTP+OAuth: nada más — la interfaz de inicio de sesión maneja todo
- Para el modo stdio: un JWT reciente extraído de DevTools del navegador (ver más abajo)
Verifica tu instalación con node -v y npm -v.
Instalación
1. Clonar y compilar
git clone https://github.com/AriOliv/ifood-mcp.git
cd ifood-mcp
npm install
npm run build
2. Elegir un modo
Opción A — HTTP + OAuth 2.1 (recomendado)
# Generate a JWT signing secret (≥32 chars)
echo "MCP_JWT_SECRET=$(openssl rand -hex 32)" >> .env
echo "PORT=3001" >> .env
# Run with auto-reload
npm run dev
Luego registra el servidor con tu cliente.
Claude Code
claude mcp add --transport http ifood http://localhost:3001/mcp
Ejecuta /mcp dentro de Claude Code → haz clic en ifood → abrirá el navegador en la página de inicio de sesión con OTP. Autentícate con tu correo electrónico de iFood y el código de 6 dígitos que llega por WhatsApp/SMS/Correo electrónico.
Cursor
Agrega a ~/.cursor/mcp.json:
{
"mcpServers": {
"ifood": {
"type": "http",
"url": "http://localhost:3001/mcp"
}
}
}
Cursor activará el flujo OAuth en el primer uso.
Codex
codex mcp add --transport http ifood http://localhost:3001/mcp
Opción B — stdio (usuario único)
Extrae tus credenciales de iFood desde DevTools del navegador:
- Abre iFood e inicia sesión
- DevTools → pestaña Red → recarga, realiza cualquier acción (por ejemplo, abre un restaurante)
- Haz clic en cualquier solicitud
site-api - Copia el valor del encabezado
authorization(elimina el prefijoBearer) - Desde la pestaña de cookies, copia
aRefreshToken,aDeviceId,aSessionIdyaAccountId - Colócalos en un
.env:
cp .env.example .env
# fill in IFOOD_ACCESS_TOKEN, IFOOD_ACCOUNT_ID, IFOOD_DEVICE_ID, IFOOD_SESSION_ID
Claude Desktop
Edita ~/Library/Application Support/Claude/claude_desktop_config.json (macOS) o %APPDATA%\Claude\claude_desktop_config.json (Windows):
{
"mcpServers": {
"ifood": {
"command": "node",
"args": ["/absolute/path/to/ifood-mcp/build/index.js"],
"env": {
"IFOOD_ACCESS_TOKEN": "eyJraWQi...",
"IFOOD_ACCOUNT_ID": "fa0ac7f3-...",
"IFOOD_DEVICE_ID": "1141f82b-...",
"IFOOD_SESSION_ID": "97fe984b-..."
}
}
}
}
Claude Code (stdio)
claude mcp add --transport stdio ifood \
--env IFOOD_ACCESS_TOKEN=eyJraWQi... \
--env IFOOD_ACCOUNT_ID=fa0ac7f3-... \
--env IFOOD_DEVICE_ID=1141f82b-... \
--env IFOOD_SESSION_ID=97fe984b-... \
-- node /absolute/path/to/ifood-mcp/build/index.js
Herramientas Disponibles
👤 Cliente
| Herramienta | Descripción |
|---|---|
ifood_customer_me | Perfil de cliente autenticado |
ifood_addresses | Direcciones de entrega guardadas |
ifood_contact_methods | Correos electrónicos y teléfonos verificados |
ifood_external_identities | Proveedores de identidad vinculados (Google, Apple, OTP) |
📦 Pedidos
| Herramienta | Descripción |
|---|---|
ifood_orders_list | Pedidos anteriores, paginados |
ifood_order_detail | Detalles completos de un solo pedido |
ifood_reorder | Precargar carrito con artículos de un pedido anterior |
🔍 Descubrimiento
| Herramienta | Descripción |
|---|---|
ifood_search | Buscar restaurantes y artículos por término + ubicación |
ifood_filter_options | Filtros de búsqueda disponibles (categorías, dietéticos, precio) |
ifood_home | Feed de inicio localizado |
ifood_browse_page | Páginas de navegación seleccionadas vinculadas desde el feed de inicio |
ifood_categories | Categorías de nivel superior (restaurantes, supermercados, farmacia, …) |
🍔 Comercios
| Herramienta | Descripción |
|---|---|
ifood_merchant_info | Tarifas de entrega, métodos, horarios, calificación, dirección |
ifood_merchant_catalog | Menú completo con artículos, precios, complementos |
ifood_item_detail | Detalles de un solo artículo (precio, descripción, opciones) |
ifood_customer_merchant_items | Artículos pedidos anteriormente por el cliente en un comercio |
ifood_reviews | Reseñas/calificaciones de clientes, paginadas |
ifood_merchant_payment_methods | Métodos de pago aceptados por un comercio específico |
🎁 Fidelidad y Billetera
| Herramienta | Descripción |
|---|---|
ifood_loyalty_cards | iFood Club, sellos, etc. |
ifood_benefits | Beneficios de billetera, cupones y promociones cerca de una ubicación |
ifood_payment_methods | Métodos de pago guardados del cliente |
🛒 Carrito y Pago
| Herramienta | Descripción |
|---|---|
ifood_cart_create | Crear un nuevo carrito con artículos para un comercio |
ifood_cart_set_delivery_method | DEFAULT / PRIORITY / TAKEOUT |
ifood_cart_set_payment_method | Aplicar UUIDs de métodos de pago al carrito |
ifood_checkout | Realizar el pedido (paso final) |
Ejemplos de Prompts
Una vez conectado, pregúntale a tu asistente de IA:
"encontre opções de açaí perto de -23.59182, -46.648688"
"qual é o cardápio da hamburgueria mais bem avaliada na minha região?"
"liste meus 5 últimos pedidos e me mostre o status de cada um"
"crie um carrinho no Burger King com 2 Whoppers e finalize com Pix"
"me mostre as avaliações do restaurante <id> nas últimas 30 reviews"
"existe algum cupom ativo na minha carteira pra delivery agora?"
[!TIP] Si una herramienta necesita
latitude/longitudey no conoces los tuyos, pídele a la IA que llame aifood_addressesprimero — tus direcciones guardadas incluyen coordenadas.
Arquitectura
┌──────────────────┐ OAuth 2.1 ┌─────────────────────┐ Bearer JWT ┌─────────────────┐
│ AI assistant │◄────────────────►│ ifood-mcp server │◄─────────────────►│ iFood API │
│ (Claude/Cursor) │ /mcp endpoint │ (Express + MCP) │ site-api / wsl. │ (consumer web) │
└──────────────────┘ └─────────────────────┘ └─────────────────┘
│
▼
┌──────────────┐
│ /login │ HTML — iFood OTP
│ (browser) │ e‑mail / SMS / WhatsApp
└──────────────┘
- Transporte sin estado: cada llamada a
/mcpcrea unStreamableHTTPServerTransport+McpServernuevo vinculado a la sesión del usuario autenticado — maneja usuarios concurrentes sin sesiones persistentes. - Almacenes de tokens en memoria: pares de JWT de iFood por usuario auto‑refrescados cada 60s. Proceso único; para escalado horizontal, muévete a Redis.
- OAuth 2.1 + PKCE S256, JWTs HS256 vinculados a audiencia, tokens de refresco rotativos opacos.
- Flujo OTP de iFood en 5 pasos envuelto en
src/http/ifood-auth.ts:/authorization-codes→/access-tokens→/challenges→/authentications.
Desarrollo
npm run dev # http-server with auto-reload (tsx watch)
npm run dev:stdio # stdio with auto-reload
npm run build # tsc → build/
npm run typecheck # tsc --noEmit
Estructura del proyecto:
src/
index.ts tool definitions + executeTool dispatcher + stdio entry
http-server.ts Express + OAuth + Streamable HTTP transport
http/
store.ts in-memory OAuth + iFood token stores
provider.ts OAuthServerProvider implementation
session-provider.ts SessionTokenProvider + background refresh loop
login-router.ts OTP login HTML pages
ifood-auth.ts chained iFood OTP HTTP client
Seguridad y Aviso Legal
- 🔒 En modo HTTP, los tokens de iFood viven solo en memoria — nunca se escriben en disco. Reinicio del proceso = volver a iniciar sesión.
- 🚫 No confirmes
.env, archivos HAR ni capturas de DevTools — contienen tokens de portador. El.gitignorebloquea todos los lugares comunes. - ⚠️ No oficial. iFood no publica una API pública. Esto envuelve los endpoints del sitio web de consumo, que pueden cambiar sin previo aviso. Úsalo bajo tu propio criterio y respeta los Términos de Servicio de iFood.
- 🛡️ El flujo de inicio de sesión puede eventualmente activar la detección de bots de iFood. Si ves errores opacos durante el inicio de sesión, prueba el respaldo
/login/pastepara proporcionar tokens manualmente.
Contribuciones
Las issues y PRs son bienvenidas. Al abrir una issue, incluye:
- Salida de
npm run typecheck - Si estás usando el modo stdio o HTTP+OAuth
- Solicitud/respuesta redactada (sin tokens) al reportar una falla de API
Licencia
Publicado bajo la Licencia MIT.
Hecho por Ari y Claude, también conocido como Claudão.