Ir para o conteúdo

Módulo 7 — Consultor de Tráfego (MCP)

Um servidor MCP (Model Context Protocol) que conecta o app do Claude aos dados da Veggi. Não é uma tela: é um conector que dá ao Claude acesso de leitura aos KPIs, memória própria do negócio e poder de criar campanha na Meta.

Vive na pasta mcp/ do repositório veggi-ads-dashboard, mas é um Worker próprio, com deploy próprio. Compartilha com o Módulo 6 apenas o KV VEGGI_DATA — de onde lê os números que o robô já calculou.

Item Valor
Worker veggi-mcp
URL https://veggi-mcp.veggiageral.workers.dev
Health /mcp/health (sem token)
Código mcp/src/index.js (1.502 linhas, JS puro, sem build)
Protocolo MCP rev 2025-11-25, Streamable HTTP stateless
KV binding VEGGI_DATA — o mesmo do robô
Secrets MCP_TOKEN, META_TOKEN, RD_MKT_CLIENT_ID, RD_MKT_CLIENT_SECRET, RD_MKT_REFRESH_TOKEN
Custo de API zero — roda no plano Max do app do Claude

O token vai na URL

https://veggi-mcp.veggiageral.workers.dev/mcp/<MCP_TOKEN>

Por que na URL e não em header

O conector do Claude não tem campo Bearer. Sem token na URL → 404. Consequência: a URL do conector é o segredo — tratar como senha.

O que ele lê e escreve

Recurso Acesso
KV latest lê
KV consultor_memory lê e escreve — memória do negócio
Meta escreve — cria campanha, conjunto, anúncio e lookalike, sempre PAUSADOS; pausa/ativa
RD Marketing lê — segmentações, via OAuth

Modo arquiteto

O consultor propõe o plano → a dona aprova → ele cria campanha + conjuntos + anúncio (pausados, com imagem provisória) → a dona troca a arte e ativa.

Nada nasce ativo

Toda criação é PAUSADA por decisão de projeto. E nas permissões do conector, criar_campanha_pausada deve ficar em "perguntar", nunca em "sempre permitir" — ela escreve na conta de anúncios.

A régua muda conforme a conta

O consultor atende as duas contas, e a diferença não é um filtro — é o que conta como sucesso. A tabela completa está em Os dois mundos, no Módulo 6. Em resumo:

  • B2B (padrão): sucesso é negociação no RD CRM
  • B2C (conta="B2C"): sucesso é pedido real na VTEX

O dado do B2C mora em latest.b2c. O robô sempre gravou ali; até ago/2026 o consultor é que só lia o bloco B2B. Corrigido com pedeB2C(), que detecta o pedido, e dataB2C(), que empacota o bloco no mesmo formato — então janela, ranking e detalhe são reaproveitados sem duplicar lógica.

As 16 ferramentas

Ver Ferramentas para o detalhe de cada uma.

Grupo Quantas O que fazem
Análise 7 Leem o latest. Todas atendem as duas contas
Memória 4 Leem e escrevem o consultor_memory
Criação / integração 5 Escrevem na Meta ou leem o RD Marketing

Cliente: o app do Claude

  • Conector personalizado apontando para /mcp/<MCP_TOKEN>
  • Usado dentro de um Projeto chamado "Veggi · Consultor de Tráfego", que isola dos outros usos da conta
  • As instruções do Projeto mais as instructions do próprio MCP definem o comportamento

Regra de manutenção que se esquece sempre

Depois de qualquer deploy do MCP é preciso atualizar o conector (Configurações → Conectores → o conector → atualizar) e abrir um chat NOVO. As ferramentas e instruções não recarregam num chat já aberto — você continuaria falando com a versão antiga sem perceber.

Constantes da Meta que não são óbvias

Ficam no mcp/src/index.js:

Constante Valor Por quê
Página 525081527913478 (UseVeggi) É a que o System User gerencia e tem o Instagram conectado. A página 110481565698340 dos anúncios antigos não funciona
Instagram 17841408402133337 Usar o campo instagram_user_id, não instagram_actor_id
Imagem provisória hash 34365f872e48b7bebd111b1d5b6ae759 Bege 1080×1350, já na biblioteca

Pré-requisitos: o System User precisa ter a Página e o Instagram atribuídos no Business Settings, e o token precisa dos escopos pages_*.

Deploy

cd "C:\Projetos\veggi-ads-dashboard\mcp"
npx wrangler deploy                    # atalho: 1-publicar-mcp.bat
npx wrangler secret put MCP_TOKEN      # atalho: 2-definir-token.bat
npx wrangler secret put META_TOKEN
npx wrangler secret put RD_MKT_CLIENT_ID
npx wrangler secret put RD_MKT_CLIENT_SECRET
npx wrangler secret put RD_MKT_REFRESH_TOKEN

Depois: atualizar o conector no Claude → chat novo.

Diagnóstico

Sintoma Causa provável e ação
Conector retorna 404 Token errado ou ausente na URL. Conferir /mcp/<MCP_TOKEN>
Ferramenta nova não aparece no Claude Conector não foi atualizado, ou o chat é antigo. Atualizar e abrir chat novo
Consultor responde com dado velho O robô não rodou. O MCP só lê o latest — ver Robô updater
Erro ao criar anúncio Token sem os escopos pages_*, ou Página/Instagram não atribuídos ao System User no Business Settings
listar_segmentacoes_rd vem vazio OAuth do RD Marketing expirado. Rodar conectar-rd-marketing.bat e regravar os 3 secrets RD_MKT_*
Consultor "não acha" uma campanha Pode estar na outra conta. detalhar_campanha já procura na B2C sozinho quando não acha na B2B
Health check falha GET /mcp/health não exige token — se falhar, o Worker está fora do ar