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 
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
| Modo | Transporte | Login | Melhor para |
|---|---|---|---|
| HTTP + OAuth 2.1 | HTTP transmissível | OTP real do iFood (e‑mail / SMS / WhatsApp) em uma página de login hospedada | Implantações multiusuário, MCP remoto, compartilhamento com amigos |
| stdio | Entrada / saída padrão | Tokens colados do DevTools do navegador em um arquivo .env | Configuraçã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:
- Abra o iFood e faça login
- DevTools → aba Network → recarregue, faça qualquer ação (ex.: abra um restaurante)
- Clique em qualquer requisição
site-api - Copie o valor do cabeçalho
authorization(remova o prefixoBearer) - Na aba de cookies, copie
aRefreshToken,aDeviceId,aSessionIdeaAccountId - 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
| Ferramenta | Descrição |
|---|---|
ifood_customer_me | Perfil do cliente autenticado |
ifood_addresses | Endereços de entrega salvos |
ifood_contact_methods | E‑mails e telefones verificados |
ifood_external_identities | Provedores de identidade vinculados (Google, Apple, OTP) |
📦 Pedidos
| Ferramenta | Descrição |
|---|---|
ifood_orders_list | Pedidos anteriores, paginados |
ifood_order_detail | Detalhes completos de um único pedido |
ifood_reorder | Pré-preenche o carrinho com itens de um pedido anterior |
🔍 Descoberta
| Ferramenta | Descrição |
|---|---|
ifood_search | Pesquisa restaurantes e itens por termo + localização |
ifood_filter_options | Filtros de pesquisa disponíveis (categorias, dietéticos, preço) |
ifood_home | Feed inicial localizado |
ifood_browse_page | Páginas de navegação selecionadas vinculadas ao feed inicial |
ifood_categories | Categorias de nível superior (restaurantes, mercado, farmácia, …) |
🍔 Comerciantes
| Ferramenta | Descrição |
|---|---|
ifood_merchant_info | Taxas de entrega, métodos, horários, avaliação, endereço |
ifood_merchant_catalog | Cardápio completo com itens, preços, adicionais |
ifood_item_detail | Detalhes de um único item (preço, descrição, opções) |
ifood_customer_merchant_items | Itens pedidos anteriormente pelo cliente em um comerciante |
ifood_reviews | Avaliações/classificações de clientes, paginadas |
ifood_merchant_payment_methods | Métodos de pagamento aceitos por um comerciante específico |
🎁 Fidelidade e Carteira
| Ferramenta | Descrição |
|---|---|
ifood_loyalty_cards | iFood Club, selos, etc. |
ifood_benefits | Benefícios de carteira, cupons e promoções perto de uma localização |
ifood_payment_methods | Métodos de pagamento salvos do cliente |
🛒 Carrinho e Checkout
| Ferramenta | Descrição |
|---|---|
ifood_cart_create | Cria um novo carrinho com itens para um comerciante |
ifood_cart_set_delivery_method | DEFAULT / PRIORITY / TAKEOUT |
ifood_cart_set_payment_method | Aplica UUIDs de métodos de pagamento ao carrinho |
ifood_checkout | Faz 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/longitudee você não souber os seus, peça à IA para chamarifood_addressesprimeiro — 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
/mcpcria um novoStreamableHTTPServerTransport+McpServervinculado à 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.gitignorebloqueia 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/pastepara 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.