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¶
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
instructionsdo 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 |
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 |