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

License: MIT Node.js TypeScript MCP

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

ModoTransporteInicio de sesiónMejor para
HTTP + OAuth 2.1HTTP transmisibleOTP real de iFood (correo electrónico / SMS / WhatsApp) en una página de inicio de sesión alojadaImplementaciones multiusuario, MCP remoto, compartir con amigos
stdioEntrada / salida estándarTokens pegados desde DevTools del navegador en un archivo .envConfiguració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:

  1. Abre iFood e inicia sesión
  2. DevTools → pestaña Red → recarga, realiza cualquier acción (por ejemplo, abre un restaurante)
  3. Haz clic en cualquier solicitud site-api
  4. Copia el valor del encabezado authorization (elimina el prefijo Bearer )
  5. Desde la pestaña de cookies, copia aRefreshToken, aDeviceId, aSessionId y aAccountId
  6. 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

HerramientaDescripción
ifood_customer_mePerfil de cliente autenticado
ifood_addressesDirecciones de entrega guardadas
ifood_contact_methodsCorreos electrónicos y teléfonos verificados
ifood_external_identitiesProveedores de identidad vinculados (Google, Apple, OTP)

📦 Pedidos

HerramientaDescripción
ifood_orders_listPedidos anteriores, paginados
ifood_order_detailDetalles completos de un solo pedido
ifood_reorderPrecargar carrito con artículos de un pedido anterior

🔍 Descubrimiento

HerramientaDescripción
ifood_searchBuscar restaurantes y artículos por término + ubicación
ifood_filter_optionsFiltros de búsqueda disponibles (categorías, dietéticos, precio)
ifood_homeFeed de inicio localizado
ifood_browse_pagePáginas de navegación seleccionadas vinculadas desde el feed de inicio
ifood_categoriesCategorías de nivel superior (restaurantes, supermercados, farmacia, …)

🍔 Comercios

HerramientaDescripción
ifood_merchant_infoTarifas de entrega, métodos, horarios, calificación, dirección
ifood_merchant_catalogMenú completo con artículos, precios, complementos
ifood_item_detailDetalles de un solo artículo (precio, descripción, opciones)
ifood_customer_merchant_itemsArtículos pedidos anteriormente por el cliente en un comercio
ifood_reviewsReseñas/calificaciones de clientes, paginadas
ifood_merchant_payment_methodsMétodos de pago aceptados por un comercio específico

🎁 Fidelidad y Billetera

HerramientaDescripción
ifood_loyalty_cardsiFood Club, sellos, etc.
ifood_benefitsBeneficios de billetera, cupones y promociones cerca de una ubicación
ifood_payment_methodsMétodos de pago guardados del cliente

🛒 Carrito y Pago

HerramientaDescripción
ifood_cart_createCrear un nuevo carrito con artículos para un comercio
ifood_cart_set_delivery_methodDEFAULT / PRIORITY / TAKEOUT
ifood_cart_set_payment_methodAplicar UUIDs de métodos de pago al carrito
ifood_checkoutRealizar 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/longitude y no conoces los tuyos, pídele a la IA que llame a ifood_addresses primero — 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 /mcp crea un StreamableHTTPServerTransport + McpServer nuevo 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 .gitignore bloquea 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/paste para 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.