WhatsApp Meta Onboarding MCP Server
MCP server for WhatsApp Meta onboarding that teaches the 12-step setup path, diagnoses Graph API configuration read-only, and performs two explicitly confirmed actions.
Teaches the onboarding path offline: overview, phase details, text/tag search, error explanations, and glossary.
Diagnoses token type/permissions, WABA IDs and phone number IDs, WABA status, phone numbers, webhook subscriptions, app webhook callbacks, templates, and coexistence status.
Runs a full checklist via
wa_diagnoseand identifies the next phase needing attention.Performs two config-changing actions only with
confirm=true: subscribe the app to a WABA and send a real template test message.Protects secrets: never displays the access token and does not perform irreversible Meta actions.
Integrates with the Meta Graph API to inspect and configure WhatsApp Business onboarding resources, including access tokens, WABA IDs, phone numbers, app webhooks, templates, billing status, and coexistence checks.
Provides tools for onboarding and troubleshooting WhatsApp Cloud API numbers, including guided setup phases, error explanations, diagnostics for phone numbers, WABA status, webhooks, templates, and coexistence, plus limited actions such as subscribing webhooks and sending template test messages.
Click on "Deploy Server".
Wait a few minutes for the server to deploy. Once ready, it will show a "Started" state.
In the chat, type
@followed by the MCP server name and your instructions, e.g., "@WhatsApp Meta Onboarding MCP Server diagnose why my WhatsApp Cloud API webhook isn't receiving messages"
That's it! The server will respond to your query, and you can continue using it as needed.
Here is a step-by-step guide with screenshots.
WhatsApp Meta Onboarding — MCP Server
#mcp #whatsapp-cloud-api #numero-virtual #coexistencia #meta-graph-api #onboarding
Apoie o projeto
A imagem acima é um QR Code Pix. Se este guia poupou seu tempo, considere apoiar com um café. A contribuição ajuda a manter o projeto atualizado: acompanhar as mudanças da Meta na Cloud API e na Coexistência, registrar novas armadilhas e erros e incluir novas verificações.
Reclamações, ideias, falhas encontradas ou sugestões: contato@lumenaxis.dev.br
Servidor MCP (Model Context Protocol) que ensina o caminho completo para colocar um número de WhatsApp — inclusive um número virtual criado direto na Meta — enviando pela API oficial (Cloud API), cobre a Coexistência (app WhatsApp Business + API no mesmo número) e diagnostica cada etapa na Graph API.
O conteúdo nasceu de implantações reais (jul–out/2026), com todos os erros e becos sem saída do caminho. Cada armadilha vem marcada:
vivido— aconteceu na prática, com a causa real e o que resolveu;doc-meta— vem da documentação pública da Meta; confirme na tela, porque a Meta muda.
Related MCP server: Whatsapp Universal MCP Server
Sumário
O caminho
flowchart TD
A[1. Escolher o caminho] --> B[2. Portfólio + Verificação da empresa]
B --> C[3. App no Meta for Developers]
C --> D[4. WABA + número<br/>próprio ou virtual]
D --> E[5. IDs certos<br/>WABA ID × Phone Number ID]
E --> F[6. Usuário do Sistema<br/>+ token permanente]
F --> G[7. Webhook<br/>callback + assinatura]
G --> H[8. Moeda + pagamento]
H --> I[9. Templates aprovados]
I --> J[10. Primeiro envio ✅]
A -.caminho C.-> K[11. Coexistência]
K -.bloqueio da Meta.-> L[12. Suporte da Meta]# | Fase | Tags | Em uma frase |
1 |
| Número novo/virtual, número existente ou coexistência — portas com pré-condições opostas | |
2 |
| Sem empresa verificada não há registro de número real | |
3 |
| Um app por sistema: o webhook é por app | |
4 |
| Número virtual exige nome de exibição aprovado (131037) | |
5 |
| O ID do Gerenciador não é o WABA ID da API | |
6 |
| Token que nunca expira, com acesso mínimo | |
7 |
| "A mensagem não chegou": callback vazio e WABA não inscrita | |
8 |
| Moeda é irreversível; sem cartão só a janela de 24h | |
9 |
| Só REJECTED edita; não migram entre WABAs | |
10 |
| Aceito pela API ≠ entregue: leia o webhook de status | |
11 |
| Parâmetros v4, | |
12 |
| Onde há humano e onde é parede de IA |
Referência completa em docs/: ferramentas · erros · glossário · tags.
Ferramentas
Ensino (offline, sem token)
Ferramenta | Para quê |
| As 12 fases, quem faz o quê, o que o agente nunca faz |
| Uma fase: passos VOCÊ / AUTOMÁTICO / JUNTOS, checklist, armadilhas |
| Busca por texto e/ou tag em passos, armadilhas e erros |
| Código ou texto de erro → significado, o que fazer, fase |
| WABA × conta de mensagens × Phone Number ID etc. |
Diagnóstico (Graph API, somente leitura)
Ferramenta | Para quê |
| Checklist completo ✅/⚠️/❌ e a próxima fase a corrigir |
| Tipo (SYSTEM_USER?), validade, permissões, WABAs visíveis — nunca mostra o token |
| WABA IDs e Phone Number IDs corretos a partir do token |
| Análise da conta, verificação da empresa, moeda |
| Status, nome de exibição, plataforma, qualidade, tier |
| Apps inscritos na WABA |
| Callback e campos assinados do app (precisa de |
| Templates e status, paginado |
| Prova oficial: |
Ações (alteram algo — exigem confirm=true)
Ferramenta | O que faz |
| Inscreve o app na WABA (opcional: |
| Envia um template de verdade (pode ser cobrado) |
Também expõe recursos (wa-guide://visao-geral, wa-guide://glossario, wa-guide://tags, wa-guide://erros, wa-guide://fase/{id}) e o prompt wa_conduzir_onboarding, que conduz a conversa fase a fase.
Instalação
Requer Node.js 20.3+.
git clone https://github.com/lucianumm/whatsApp-meta-onboarding-mcp-server.git
cd whatsApp-meta-onboarding-mcp-server
npm install
npm run check # build + smoke test + docsNo npm 11+, se o
tsxreclamar doesbuild, rodenpm approve-scripts esbuild.
Configuração
Todas as variáveis são opcionais: sem nenhuma, as ferramentas de ensino funcionam. Veja .env.example.
Variável | Uso |
| Token de Usuário do Sistema (nunca expira). Necessário para diagnóstico e ações. |
| WABA ID padrão (o |
| Phone Number ID padrão |
| Padrão |
| Só para |
Claude Code
claude mcp add whatsapp-meta --scope user -- node /caminho/para/whatsApp-meta-onboarding-mcp-server/dist/index.jsPara as ferramentas de rede, acrescente --env META_ACCESS_TOKEN=... você mesmo no terminal (o agente não digita segredos).
Claude Desktop (claude_desktop_config.json)
{
"mcpServers": {
"whatsapp-meta": {
"command": "node",
"args": ["/caminho/para/whatsApp-meta-onboarding-mcp-server/dist/index.js"],
"env": {
"META_ACCESS_TOKEN": "cole-aqui",
"META_WABA_ID": "",
"META_PHONE_NUMBER_ID": ""
}
}
}
}Como usar
Peça ao Claude em linguagem natural; ele escolhe as ferramentas:
"Quero conectar um número virtual para disparos. Por onde começo?" →
wa_guide_overview→wa_guide_get_phase"Em que ponto estou?" →
wa_diagnose"Deu 131037 no envio." →
wa_explain_error"Qual é o meu WABA ID de verdade?" →
wa_discover_ids"Mandei mensagem e não chegou no sistema." →
wa_check_webhook+wa_check_app_webhook"A coexistência ativou?" →
wa_check_coexistence"Tudo sobre coisas irreversíveis." →
wa_guide_searchcomtag: irreversivel
Ou use o prompt wa_conduzir_onboarding para um passo a passo guiado.
Tags
Vocabulário fechado, definido em src/knowledge/types.ts. Cada fase e cada erro tem as suas; o índice completo está em docs/tags.md.
Tag | Assunto |
| API oficial hospedada pela Meta (registro padrão) |
| Número fornecido pelo próprio WhatsApp |
| App WhatsApp Business + Cloud API no mesmo número |
| Portfólio empresarial e verificação |
| App no Meta for Developers |
| Conta do WhatsApp e número |
| IDs que confundem |
| Usuário do Sistema, token, permissões |
| Recebimento de mensagens e status |
| Moeda, pagamento, cobrança |
| Modelos de mensagem |
| Envio, entrega e erros |
| Onde pedir ajuda à Meta |
| Segredos, permissões mínimas |
| Ação que não dá para desfazer |
Segurança
O token nunca aparece em respostas nem em mensagens de erro (é removido antes de sair).
Só duas ferramentas alteram algo, e ambas exigem
confirm=true.O agente não digita tokens/App Secret/senhas, não cadastra cartão, não exclui portfólio/WABA/número e não aceita termos sem confirmação.
Detalhes em SECURITY.md.
Estrutura do repositório
├── src/
│ ├── index.ts # servidor: ferramentas, recursos, prompt (stdio)
│ ├── graph.ts # cliente da Graph API, erros com dica, remoção de segredos
│ ├── api.ts # chamadas tipadas (token, WABA, números, templates, webhook)
│ ├── knowledge/ # ← o conhecimento: edite aqui
│ │ ├── types.ts # tipos + vocabulário de tags
│ │ ├── phases.ts # as 12 fases (passos, checagens, armadilhas)
│ │ ├── errors.ts # catálogo de erros + glossário
│ │ └── render.ts # Markdown, busca, índice de tags
│ └── tools/ # ferramentas wa_* por domínio
├── scripts/
│ ├── smoke.ts # teste ponta a ponta como cliente MCP
│ └── generate-docs.ts # gera docs/ a partir de src/knowledge/
├── docs/ # gerado — não edite à mão
├── evals/evaluation.xml # perguntas de avaliação do MCP
├── imagens/ # QR Code Pix "Me pague um Café"
└── .github/ # CI, templates de issue e PRContribuir
Descobriu uma armadilha nova? Veja CONTRIBUTING.md — em resumo: acrescente em src/knowledge/, rode npm run check e faça commit de docs/ junto. O histórico de versões está no CHANGELOG.md.
Créditos
Criado e mantido por Lucianum — Instagram @lucianum · GitHub @lucianumm
Aviso
Projeto independente, sem vínculo com a Meta Platforms. WhatsApp, Meta e Facebook são marcas de seus respectivos donos. As telas e regras da Meta mudam com frequência: confirme no painel antes de qualquer ação irreversível.
Licença
Copyright (c) 2026 Lucianum.
Distribuído sob a Licença MIT: você pode usar, copiar, modificar e redistribuir livremente, inclusive para fins comerciais, desde que mantenha o aviso de copyright e a licença.
Available Tools
16 toolswa_check_app_webhookConferir o webhook do appARead-onlyIdempotent
Mostra a URL de callback e os campos assinados do app (GET /{app_id}/subscriptions). Exige META_APP_ID e META_APP_SECRET no ambiente do MCP (token de app). Use quando 'a mensagem não chega no sistema': callback vazio ou campo 'messages' faltando foi uma causa real comprovada. Para coexistência, confere também smb_message_echoes, history e smb_app_state_sync.
Inputs: response_format.
wa_check_coexistenceConferir coexistênciaARead-onlyIdempotent
Teste oficial da Meta para coexistência: GET /{phone_number_id}?fields=is_on_biz_app,platform_type. is_on_biz_app=true + CLOUD_API = o número está no app WhatsApp Business E na Cloud API. Mostra também a vazão (fixa em 20 mps com coexistência).
Use depois de concluir o Cadastro Incorporado (fase 'coexistencia') ou para provar que um número NÃO está em coexistência.
Inputs: phone_number_id, response_format.
wa_check_tokenConferir o tokenARead-onlyIdempotent
Valida o META_ACCESS_TOKEN com debug_token: se é de Usuário do Sistema (SYSTEM_USER), se expira, quais permissões tem e a quais contas de WhatsApp dá acesso. Nunca mostra o token.
Use logo depois de gerar o token (fase 'usuario-sistema-token') ou quando aparecer 'Session has expired'.
Inputs: response_format.
wa_check_wabaConferir a conta (WABA)ARead-onlyIdempotent
Lê a WABA: nome, moeda, status da análise da conta e da verificação da empresa. Falha com #100 se o WABA ID estiver trocado ou o usuário não tiver acesso (fases 'ids' e 'usuario-sistema-token').
Inputs: waba_id, response_format.
wa_check_webhookConferir a inscrição do webhookARead-onlyIdempotent
Lista os apps inscritos na WABA (GET /{waba_id}/subscribed_apps). Se estiver vazio, a Meta não entrega eventos desta conta (mensagem enviada e 'não chegou no sistema'). A URL de callback e os campos assinados ficam no painel do app e não aparecem aqui.
Inputs: waba_id, response_format.
wa_diagnoseDiagnóstico completo do caminhoARead-onlyIdempotent
Roda o checklist inteiro pela Graph API (somente leitura): token, WABA, moeda, verificação da empresa, números (status, nome de exibição, plataforma), webhook e templates. Devolve ✅/⚠️/❌ por item e a PRÓXIMA FASE do caminho que precisa de atenção.
É a ferramenta para "em que ponto estou?" e "por que a mensagem não sai/chega?". Se waba_id for omitido, usa META_WABA_ID ou a única WABA que o token enxerga. Não verifica forma de pagamento (a API não expõe): confira no billing hub.
Inputs: waba_id, response_format.
wa_discover_idsDescobrir WABA ID e Phone Number IDARead-onlyIdempotent
A partir do token, lista as contas de WhatsApp (WABA) a que ele tem acesso e os números de cada uma, já com os IDs certos para colocar no sistema. Resolve a confusão entre o ID do Gerenciador do WhatsApp e o WABA ID da API (fase 'ids').
Se a conta que você procura não aparece, o Usuário do Sistema não foi atribuído a ela.
Inputs: response_format.
wa_explain_errorExplicar um erroARead-onlyIdempotent
Traduz um erro da Meta/WhatsApp (código ou texto da tela) em significado, causa e o que fazer, apontando a fase do caminho relacionada. Cobre 27 erros: os vividos na prática (131037, 131042, 141006, #3441034, #2200, #200, #100, 'Conta com restrição'…) e os mais comuns da documentação pública (131047, 131030, 132001…).
Exemplos:
"Deu 131037 no envio" -> query="131037"
"A tela diz Conta com restrição" -> query="conta com restrição" Retorna vazio com sugestões se nada bater.
Inputs: query (required).
wa_glossaryGlossárioARead-onlyIdempotent
Define os termos que mais confundem no caminho: WABA, conta de mensagens, Phone Number ID, Usuário do Sistema, janela de 24h, tier, relay… Use quando o usuário misturar IDs ou conceitos.
Inputs: no named parameters.
wa_guide_get_phaseDetalhar uma faseARead-onlyIdempotent
Devolve uma fase do caminho: passos (marcados VOCÊ / AUTOMÁTICO / JUNTOS), como saber que terminou e as armadilhas reais (sintoma → causa → o que fazer).
Fases (id): escolher-caminho, empresa-portfolio, app-meta, conta-e-numero, ids, usuario-sistema-token, webhook, faturamento, templates, primeiro-envio, coexistencia, suporte-meta.
Exemplos:
"Como crio o token permanente?" -> phase_id="usuario-sistema-token"
"Qual ID é o WABA ID?" -> phase_id="ids"
"Vale a pena tentar coexistência?" -> phase_id="coexistencia"
Inputs: phase_id (required).
wa_guide_overviewVisão geral do caminhoARead-onlyIdempotent
Mostra o caminho completo para ter um número (inclusive virtual) na API oficial do WhatsApp da Meta: as 12 fases em ordem, quem faz cada coisa (você / automático / juntos) e o que o agente nunca faz.
Use no início de qualquer conversa sobre "conectar número", "disparos pela API oficial" ou "número virtual". Depois aprofunde com wa_guide_get_phase. Não acessa a rede.
Inputs: no named parameters.
wa_guide_searchBuscar no guia (texto ou tag)ARead-onlyIdempotent
Busca em todos os passos, armadilhas e erros do guia, por texto (todas as palavras precisam aparecer, sem acento/caixa) e/ou por tag. Sem query e sem tag, devolve o índice de tags com as fases e erros de cada uma.
Tags: #cloud-api, #numero-virtual, #coexistencia, #portfolio, #app, #waba, #ids, #token, #webhook, #faturamento, #templates, #envio, #suporte, #seguranca, #irreversivel.
Exemplos:
"Onde fica o Phone Number ID?" -> query="phone number id"
"Tudo de coexistência" -> tag="coexistencia"
"O que é irreversível?" -> tag="irreversivel"
Inputs: tag, query.
wa_list_phone_numbersListar números da WABAARead-onlyIdempotent
Lista os números da WABA com Phone Number ID, status (CONNECTED), verificação do código, plataforma (CLOUD_API), nome de exibição (name_status: APPROVED libera envio; PENDING_REVIEW causa o erro 131037), qualidade e tier de mensagens.
Inputs: waba_id, response_format.
wa_list_templatesListar templatesARead-onlyIdempotent
Lista os templates da WABA com status (APPROVED, IN_REVIEW, REJECTED…), categoria e idioma. Pagina com limit/after. Erro #200 = Usuário do Sistema sem 'Modelos de mensagem' na conta de mensagens.
Inputs: after, limit, waba_id, response_format.
wa_send_template_testEnviar template de teste (envia de verdade)A
ENVIA uma mensagem real de template pelo número e pode gerar cobrança. Use só na fase 'primeiro-envio', para um contato seu, depois de wa_diagnose sem FAIL.
Exige confirm=true e o destinatário explícito (somente dígitos com DDI, ex.: 5511999999999). O padrão é hello_world / en_US. Devolve o wamid; a entrega real aparece no webhook de status (erros como 131037 e 131042 só aparecem lá).
Inputs: to (required), confirm (required), language_code, template_name, +1 more.
wa_subscribe_webhooksInscrever o app na WABA (altera configuração)AIdempotent
POST /{waba_id}/subscribed_apps: faz a Meta entregar os eventos desta WABA ao app do token. Sem isso nenhuma mensagem recebida nem status chega. Opcional: override_callback_uri + verify_token para um callback só desta WABA (app compartilhado entre sistemas) — a URL precisa responder ao handshake com esse verify_token.
Altera configuração na Meta: exige confirm=true depois de o usuário concordar. Repetir é inofensivo.
Inputs: confirm (required), waba_id, verify_token, override_callback_uri.
Tool Schema Changelog
Recent tool additions, removals, and schema changes observed during successful MCP inspections.
Loading tool schema changelog…
TDQS
Scored across 16 tools
Tools are mostly distinct: guide tools (overview/get_phase/search), diagnostic checkers, and acting tools occupy separate roles. The webhook trio (wa_check_webhook, wa_check_app_webhook, wa_subscribe_webhooks) is genuinely close and could be confused, and wa_diagnose overlaps with the individual check tools, but descriptions do clarify the boundaries.
Every tool uses the same wa_ prefix in snake_case with a predictable verb_noun pattern (wa_check_token, wa_list_templates, wa_send_template_test, wa_explain_error). Minor noun-form outliers like wa_glossary and wa_diagnose are still readable and unsurprising.
16 tools is at the upper edge but each fills a real role across guide, diagnostics, and actions for the onboarding lifecycle. It leans heavy given the composite wa_diagnose already aggregates several individual checks, but nothing feels wholly redundant.
The surface covers the onboarding journey well: token validation, ID discovery, WABA/number checks, webhook verification and subscription, templates, coexistence, a guarded test send, error translation, and full diagnosis. Gaps exist around template creation and broader messaging operations, plus payment verification is explicitly out of reach via the API.
Maintenance
Related MCP Connectors
Official WhatsApp Business API (Meta Cloud API) for your own CRM or SaaS, from WasapFlow, a Meta Tech Provider. Your AI can search the Bridge docs, list connected numbers, create Embedded Signup links so clients connect their own WhatsApp (Coexistence supported), send text and template messages, list templates, check and retry failed webhooks, see usage and open support tickets. Docs tools work without a key; account tools use the x-partner-key header.
Check your WhatsApp numbers, connection status and webhooks, and send a text when you confirm.
WhatsApp Business on Meta's Cloud API: team inbox, templates, AI support agents and analytics.
WhatsApp for your app or AI agent over OAuth2 — the same connections WASync runs inside your CRM.
Related MCP Servers
- AlicenseAqualityDmaintenanceConnects AI assistants to the official Meta WhatsApp Cloud API for managing conversations and sending various message types through natural language. It provides tools for media management, template messages, and real-time webhook processing without the risk of account bans.1813 npm25MIT
- AlicenseNot gradedqualityDmaintenanceProvides a standardized interface for interacting with WhatsApp's tools and services through a unified API.1MIT
- AlicenseNot gradedqualityDmaintenanceEnables interaction with WhatsApp Business tools and services through a unified API.2MIT
- AlicenseNot gradedqualityBmaintenanceEnables AI assistants to manage WhatsApp instances, send messages and campaigns, handle incoming messages, webhooks, members, and metrics through 30 authenticated tools, with an optional WhatsApp-to-assistant bridge.Apache 2.0