Skip to main content
O zapo traz dois pacotes opcionais voltados puramente a desenvolvimento e testes — nenhum é para produção:
  • Servidor MCP (@zapo-js/mcp-server) — expõe um WaClient ao vivo a um agente de IA (Claude Code, Cursor) para conectar, parear, enviar e inspecionar o estado de forma interativa.
  • Fake server (@zapo-js/fake-server) — um servidor WhatsApp falso in-process usado para benchmarks e cross-check tests da lib. Para os testes E2E do seu próprio app, veja o guia Testes end-to-end.

Servidor MCP

Apenas desenvolvimento e testes. O @zapo-js/mcp-server é um auxílio de depuração, não um servidor de protocolo de produção. Ele expõe um WaClient ao vivo — e todo o módulo zapo-js — a um agente de IA que pode enviar mensagens, ler estado e executar chamadas arbitrárias da biblioteca em uma conta real do WhatsApp. Use-o apenas com contas que você controla.
Ele expõe uma instância de WaClient ao vivo e o namespace do módulo zapo-js como ferramentas MCP. Um agente LLM pode então conduzir fluxos completos do WhatsApp — conectar, parear, enviar, consultar grupos/newsletters, inspecionar eventos, percorrer o estado SQL — sem você escrever scripts descartáveis.

Superfície de ferramentas

Cada ferramenta embute seu próprio schema e exemplos — o agente os lê em tempo de execução, em vez de memorizar flags.

Instalar e registrar

Registre no Claude Code em escopo de usuário (faça o build primeiro), para funcionar de qualquer diretório:
Para iteração rápida na própria biblioteca, registre o código-fonte via tsx — sem build, e o zapo-js resolve direto de src/:
Um transporte HTTP com node --watch dá o loop de dev mais suave: edite um .ts → o processo reinicia → a próxima chamada de ferramenta reconecta automaticamente, sem reconexão manual de /mcp. Veja o README do pacote para o script dev e a configuração HTTP.

Detalhe do pareamento

client.connect() bloqueia até o pareamento terminar, então sempre inicie sem aguardar (await) e depois consulte o buffer de eventos:
Mostre a string de auth_qr ao usuário, espere por auth_paired e continue.

Variáveis de ambiente principais

Um WaClient por processo (multi-sessão exige múltiplos servidores com MCP_AUTH_PATH + MCP_SESSION_ID distintos); sem reconexão automática (chame connect de novo em connection: close); o restart soft não aplica mudanças de código, enquanto process_exit + um supervisor aplica. Referência completa: packages/mcp-server/README.md.

Fake server

O @zapo-js/fake-server é o servidor WhatsApp Web falso in-process que a lib usa para testes cross-check e benchmarks. Também é o caminho recomendado para rodar testes end-to-end do seu próprio app sem tocar no WhatsApp — veja o guia dedicado Testes end-to-end, que cobre install, API programática, fixtures FakePeer, isolamento multi-sessão e recipes de CI. O resto desta seção é limitado ao uso interno da lib — benchmarking.

Benchmarking

O pacote inclui um profiler de mensagens (send/recv × 1:1/grupo) usado para acompanhar a performance da biblioteca, além de suítes focadas para connect lifecycle, history sync, bulk usync, provisionamento de grupo, upload de mídia, receipts flood, reconnect/resume, app-state, mídia no envio, e o round-trip do retry Signal:
bench:media:messaging varre todos os tipos de mídia (image / video / audio / ptt / document / sticker) em 1:1 send, fan-out de grupo (SKDM + SKMSG) e receive + download. Default é input streaming (Readable.from(...)) pra lib percorrer o caminho de upload streaming; troque para modo in-memory com ZAPO_BENCH_MEDIA_INPUT=buffer pra A/B. bench:retry valida o round-trip completo de retry contra o parser de referência do wa-web: incoming retry, recovery e replay de retry outbound depois que o peer rotaciona o bundle de prekeys. Ajuste a carga com variáveis ZAPO_BENCH_* (ZAPO_BENCH_CONTACTS, ZAPO_BENCH_GROUP_MEMBERS, ZAPO_BENCH_MESSAGES, ZAPO_BENCH_SCENARIOS, …) e adicione --cpu / --heap / --separate-process para profiles. Com --separate-process, o bench roda o fake server em um processo filho através de uma ponte RPC e emite um CPU profile e um heap snapshot do lado do servidor junto com os do lado da lib. Escolha o backend de store com ZAPO_BENCH_STORE (memory, sqlite, postgres, mysql, redis ou mongo) — valem as mesmas variáveis ZAPO_TEST_* de conexão usadas pelo harness cross-store. Para varrer todos os benches em vários stores de uma vez:
Adicione --start-docker para subir os serviços Postgres/MySQL/Redis/Mongo empacotados em portas efêmeras e derrubá-los ao final. Veja packages/fake-server/README.md para a referência completa de flags.
bench:all-stores só varre as oito suítes de cenários (connect-lifecycle, history-sync, bulk-usync, group-provision, media-upload, receipts-flood, reconnect-resume, appstate) mais messaging. Os mais novos bench:media:messaging e bench:retry ainda não estão no conjunto --benches= dele; rode-os diretamente quando precisar.
O fake server é um harness de teste in-process, não um runtime que você faz deploy. Combine-o com a store memory para testes rápidos e isolados que resetam a cada execução.
Última modificação em 24 de julho de 2026