Ifood MCP

Servidor não oficial do Model Context Protocol para iFood — navegue, pesquise, adicione ao carrinho e peça comida via IA

Documentação

Servidor iFood MCP

License: MIT Node.js TypeScript MCP

Servidor não oficial do Model Context Protocol para o iFood — a maior plataforma de entrega de comida do Brasil. Navegue por restaurantes, pesquise comidas, gerencie seu carrinho e faça pedidos por meio de qualquer assistente de IA que fale MCP.

Não afiliado ao iFood. Utiliza a API pública de consumo web para uso pessoal.

O Que Este Servidor MCP Faz

Este servidor MCP dá aos assistentes de IA (Claude Code, Claude Desktop, Cursor, Codex, etc.) acesso à sua conta iFood. Ele expõe 25 ferramentas que permitem que uma IA:

  • 🔍 Pesquise restaurantes e comidas perto de você
  • 🍔 Navegue por comerciantes, catálogos completos, detalhes de itens e avaliações de clientes
  • 🛒 Monte um carrinho com itens, método de entrega e pagamento
  • 💳 Liste seus métodos de pagamento e endereços salvos
  • 📦 Liste pedidos anteriores, obtenha detalhes de pedidos e faça novos pedidos
  • 🎁 Consulte cartões de fidelidade, benefícios de carteira e cupons
  • 📍 Explore o feed inicial, categorias e páginas de navegação selecionadas

Dois Modos de Autenticação

ModoTransporteLoginMelhor para
HTTP + OAuth 2.1HTTP transmissívelOTP real do iFood (e‑mail / SMS / WhatsApp) em uma página de login hospedadaImplantações multiusuário, MCP remoto, compartilhamento com amigos
stdioEntrada / saída padrãoTokens colados do DevTools do navegador em um arquivo .envConfiguração local de usuário único, mais rápida de conectar

Você pode executar qualquer um dos modos de forma independente; as mesmas definições de ferramentas suportam ambos.

Pré-requisitos

  • Node.js ≥ 20
  • Uma conta iFood ativa (qualquer região do Brasil)
  • Para o modo HTTP+OAuth: nada mais — a interface de login cuida de tudo
  • Para o modo stdio: um JWT recente extraído do DevTools do navegador (veja abaixo)

Verifique sua instalação com node -v e npm -v.

Instalação

1. Clone e compile

git clone https://github.com/AriOliv/ifood-mcp.git
cd ifood-mcp
npm install
npm run build

2. Escolha um modo

Opção 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

Em seguida, registre o servidor no seu cliente.

Claude Code
claude mcp add --transport http ifood http://localhost:3001/mcp

Execute /mcp dentro do Claude Code → clique em ifood → ele abrirá o navegador na página de login OTP. Autentique-se com seu e‑mail do iFood e o código de 6 dígitos que chega via WhatsApp/SMS/Email.

Cursor

Adicione ao ~/.cursor/mcp.json:

{
  "mcpServers": {
    "ifood": {
      "type": "http",
      "url": "http://localhost:3001/mcp"
    }
  }
}

O Cursor acionará o fluxo OAuth no primeiro uso.

Codex
codex mcp add --transport http ifood http://localhost:3001/mcp

Opção B — stdio (usuário único)

Extraia suas credenciais do iFood do DevTools do navegador:

  1. Abra o iFood e faça login
  2. DevTools → aba Network → recarregue, faça qualquer ação (ex.: abra um restaurante)
  3. Clique em qualquer requisição site-api
  4. Copie o valor do cabeçalho authorization (remova o prefixo Bearer )
  5. Na aba de cookies, copie aRefreshToken, aDeviceId, aSessionId e aAccountId
  6. Coloque-os em um .env:
cp .env.example .env
# fill in IFOOD_ACCESS_TOKEN, IFOOD_ACCOUNT_ID, IFOOD_DEVICE_ID, IFOOD_SESSION_ID
Claude Desktop

Edite ~/Library/Application Support/Claude/claude_desktop_config.json (macOS) ou %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

Ferramentas Disponíveis

👤 Cliente

FerramentaDescrição
ifood_customer_mePerfil do cliente autenticado
ifood_addressesEndereços de entrega salvos
ifood_contact_methodsE‑mails e telefones verificados
ifood_external_identitiesProvedores de identidade vinculados (Google, Apple, OTP)

📦 Pedidos

FerramentaDescrição
ifood_orders_listPedidos anteriores, paginados
ifood_order_detailDetalhes completos de um único pedido
ifood_reorderPré-preenche o carrinho com itens de um pedido anterior

🔍 Descoberta

FerramentaDescrição
ifood_searchPesquisa restaurantes e itens por termo + localização
ifood_filter_optionsFiltros de pesquisa disponíveis (categorias, dietéticos, preço)
ifood_homeFeed inicial localizado
ifood_browse_pagePáginas de navegação selecionadas vinculadas ao feed inicial
ifood_categoriesCategorias de nível superior (restaurantes, mercado, farmácia, …)

🍔 Comerciantes

FerramentaDescrição
ifood_merchant_infoTaxas de entrega, métodos, horários, avaliação, endereço
ifood_merchant_catalogCardápio completo com itens, preços, adicionais
ifood_item_detailDetalhes de um único item (preço, descrição, opções)
ifood_customer_merchant_itemsItens pedidos anteriormente pelo cliente em um comerciante
ifood_reviewsAvaliações/classificações de clientes, paginadas
ifood_merchant_payment_methodsMétodos de pagamento aceitos por um comerciante específico

🎁 Fidelidade e Carteira

FerramentaDescrição
ifood_loyalty_cardsiFood Club, selos, etc.
ifood_benefitsBenefícios de carteira, cupons e promoções perto de uma localização
ifood_payment_methodsMétodos de pagamento salvos do cliente

🛒 Carrinho e Checkout

FerramentaDescrição
ifood_cart_createCria um novo carrinho com itens para um comerciante
ifood_cart_set_delivery_methodDEFAULT / PRIORITY / TAKEOUT
ifood_cart_set_payment_methodAplica UUIDs de métodos de pagamento ao carrinho
ifood_checkoutFaz o pedido (etapa final)

Exemplos de Prompts

Depois de conectado, pergunte ao seu assistente 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] Se uma ferramenta precisar de latitude/longitude e você não souber os seus, peça à IA para chamar ifood_addresses primeiro — seus endereços salvos incluem coordenadas.

Arquitetura

┌──────────────────┐    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 sem estado: cada chamada /mcp cria um novo StreamableHTTPServerTransport + McpServer vinculado à sessão do usuário autenticado — lida com usuários concorrentes sem sessões fixas.
  • Armazenamentos de token em memória: pares de JWT do iFood por usuário são atualizados automaticamente a cada 60s. Processo único; para escalonamento horizontal, migre para Redis.
  • OAuth 2.1 + PKCE S256, JWTs HS256 vinculados ao público, tokens de atualização rotativos opacos.
  • Fluxo OTP do iFood em 5 etapas encapsulado em src/http/ifood-auth.ts: /authorization-codes/access-tokens/challenges/authentications.

Desenvolvimento

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

Estrutura do projeto:

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

Segurança e Aviso Legal

  • 🔒 No modo HTTP, os tokens do iFood ficam apenas na memória — nunca são gravados em disco. Reiniciar o processo = fazer login novamente.
  • 🚫 Não envie .env, arquivos HAR ou capturas do DevTools — eles contêm tokens de portador. O .gitignore bloqueia todos os pontos comuns.
  • ⚠️ Não oficial. O iFood não publica uma API pública. Isso encapsula os endpoints do site de consumo, que podem mudar sem aviso. Use por sua conta e risco e respeite os Termos de Serviço do iFood.
  • 🛡️ O fluxo de login pode eventualmente acionar a detecção de bots do iFood. Se você vir erros opacos durante o login, tente o fallback /login/paste para fornecer tokens manualmente.

Contribuindo

Issues e PRs são bem-vindos. Ao abrir uma issue, inclua:

  • Saída de npm run typecheck
  • Se você está usando o modo stdio ou HTTP+OAuth
  • Requisição/resposta editada (sem tokens) ao relatar uma falha de API

Licença

Lançado sob a Licença MIT.


Feito por Ari e Claude, também conhecido como Claudão.