zapo traz dois pacotes opcionais voltados puramente a desenvolvimento e testes — nenhum é para produção:
- Servidor MCP (
@zapo-js/mcp-server) — expõe umWaClientao 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
Ele expõe uma instância deWaClient 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
tsx — sem build, e o zapo-js resolve direto de src/:
Detalhe do pareamento
client.connect() bloqueia até o pareamento terminar, então sempre inicie sem aguardar (await) e depois consulte o buffer de eventos:
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:
--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.
