Skip to main content
Glama
WhatsApp Meta Onboarding MCP Server

WhatsApp Meta Onboarding MCP Server

WhatsApp Meta Onboarding — MCP Server

MCP Node TypeScript Graph API Idioma Licença M8ven Score

#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

Escolher o caminho

#cloud-api #numero-virtual #coexistencia

Número novo/virtual, número existente ou coexistência — portas com pré-condições opostas

2

Portfólio e verificação

#portfolio #irreversivel

Sem empresa verificada não há registro de número real

3

App da Meta

#app #seguranca

Um app por sistema: o webhook é por app

4

WABA e número

#waba #numero-virtual #cloud-api

Número virtual exige nome de exibição aprovado (131037)

5

IDs certos

#ids #waba

O ID do Gerenciador não é o WABA ID da API

6

Usuário do Sistema e token

#token #seguranca

Token que nunca expira, com acesso mínimo

7

Webhook

#webhook #seguranca

"A mensagem não chegou": callback vazio e WABA não inscrita

8

Faturamento

#faturamento #irreversivel

Moeda é irreversível; sem cartão só a janela de 24h

9

Templates

#templates

Só REJECTED edita; não migram entre WABAs

10

Primeiro envio

#envio

Aceito pela API ≠ entregue: leia o webhook de status

11

Coexistência

#coexistencia #irreversivel

Parâmetros v4, smb_app_data uma vez em 24h, o que se perde

12

Suporte da Meta

#suporte

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ê

wa_guide_overview

As 12 fases, quem faz o quê, o que o agente nunca faz

wa_guide_get_phase

Uma fase: passos VOCÊ / AUTOMÁTICO / JUNTOS, checklist, armadilhas

wa_guide_search

Busca por texto e/ou tag em passos, armadilhas e erros

wa_explain_error

Código ou texto de erro → significado, o que fazer, fase

wa_glossary

WABA × conta de mensagens × Phone Number ID etc.

Diagnóstico (Graph API, somente leitura)

Ferramenta

Para quê

wa_diagnose

Checklist completo ✅/⚠️/❌ e a próxima fase a corrigir

wa_check_token

Tipo (SYSTEM_USER?), validade, permissões, WABAs visíveis — nunca mostra o token

wa_discover_ids

WABA IDs e Phone Number IDs corretos a partir do token

wa_check_waba

Análise da conta, verificação da empresa, moeda

wa_list_phone_numbers

Status, nome de exibição, plataforma, qualidade, tier

wa_check_webhook

Apps inscritos na WABA

wa_check_app_webhook

Callback e campos assinados do app (precisa de META_APP_ID/META_APP_SECRET)

wa_list_templates

Templates e status, paginado

wa_check_coexistence

Prova oficial: is_on_biz_app + platform_type

Ações (alteram algo — exigem confirm=true)

Ferramenta

O que faz

wa_subscribe_webhooks

Inscreve o app na WABA (opcional: override_callback_uri por WABA)

wa_send_template_test

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 + docs

No npm 11+, se o tsx reclamar do esbuild, rode npm 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

META_ACCESS_TOKEN

Token de Usuário do Sistema (nunca expira). Necessário para diagnóstico e ações.

META_WABA_ID

WABA ID padrão (o wa_discover_ids descobre)

META_PHONE_NUMBER_ID

Phone Number ID padrão

META_GRAPH_VERSION

Padrão v25.0

META_APP_ID / META_APP_SECRET

Só para wa_check_app_webhook (token de app)

Claude Code

claude mcp add whatsapp-meta --scope user -- node /caminho/para/whatsApp-meta-onboarding-mcp-server/dist/index.js

Para 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_search com tag: 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

#cloud-api

API oficial hospedada pela Meta (registro padrão)

#numero-virtual

Número fornecido pelo próprio WhatsApp

#coexistencia

App WhatsApp Business + Cloud API no mesmo número

#portfolio

Portfólio empresarial e verificação

#app

App no Meta for Developers

#waba

Conta do WhatsApp e número

#ids

IDs que confundem

#token

Usuário do Sistema, token, permissões

#webhook

Recebimento de mensagens e status

#faturamento

Moeda, pagamento, cobrança

#templates

Modelos de mensagem

#envio

Envio, entrega e erros

#suporte

Onde pedir ajuda à Meta

#seguranca

Segredos, permissões mínimas

#irreversivel

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 PR

Contribuir

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 tools
wa_check_app_webhookConferir o webhook do appA
Read-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ênciaA
Read-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 tokenA
Read-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)A
Read-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 webhookA
Read-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 caminhoA
Read-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 IDA
Read-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 erroA
Read-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árioA
Read-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 faseA
Read-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 caminhoA
Read-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_list_phone_numbersListar números da WABAA
Read-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 templatesA
Read-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)A
Idempotent

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

    A4/5.0

    Scored across 16 tools

    Disambiguation4/5

    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.

    Naming Consistency5/5

    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.

    Tool Count4/5

    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.

    Completeness4/5

    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

    ActivityMaintained
    ResponsivenessNo recent community issues

    Related MCP Connectors

    Related MCP Servers

    • A
      license
      A
      quality
      D
      maintenance
      Connects 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.
      18
      13 npm
      25
      MIT
    • A
      license
      Not graded
      quality
      B
      maintenance
      Enables 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