Multiple accounts
Connect each number by QR code, like a linked device. Sessions persist between launches.
ZapDesk is an open-source desktop app for macOS that runs entirely on your machine. Chat from several accounts, send personalized messages to lead lists, track deals on a Kanban — and let Claude do it for you through 69 MCP tools.
Apple Silicon · macOS 14+ · not notarized yet — see Quick start
// 01 — features
A full WhatsApp client plus the tools to work a lead list — all running on your Mac.
Connect each number by QR code, like a linked device. Sessions persist between launches.
Groups, search, media, voice notes, quotes, reactions, edits, stickers, labels, notes and / templates. Voice and video calls are not supported.
{nome} variables, attachments, scheduling, a sending window and random intervals with hourly and daily limits. Per-recipient report, exportable to CSV.
Import CSV/XLSX, paste numbers or pick contacts. Every phone is normalized to E.164 and deduplicated, with a report of new, existing and invalid numbers.
69 tools let Claude Code or Claude Desktop read conversations, import leads, create sends and move deals.
As many funnels as you need, with stages on a Kanban board and the history of every move.
Build menus, questions and hand-offs in a visual node editor, or trigger → condition → action flows. Test them in a simulated chat.
Write an automation as a small TypeScript project with a typed ctx API and Claude models. Each one runs in its own locked-down process.
// 02 — tour
What a working day looks like in ZapDesk. Real screens, fictional data.
Bulk send
Pick the interval range, hourly and daily limits, pauses and a sending window. If the pace is aggressive the app tells you; you decide.
Report
Sent, delivered, read, replied or failed — per recipient, live. Export the whole thing to CSV.
Funnel
Drag contacts across stages, or let an automation move them for you.
// 03 — mcp
ZapDesk ships an MCP server. Add it to Claude Code or Claude Desktop and Claude can work the app with the same tools you have.
69
tools in 10 groups
listar_contasstatus_zapdeskimportar_leadslistar_leadslistar_conversasler_mensagensbuscar_mensagensenviar_mensagemreagir_mensagemeditar_mensagemapagar_mensagemmarcar_como_lidaver_statuslistar_contatosatualizar_contatolistar_etiquetascriar_etiquetaatualizar_etiquetaexcluir_etiquetalistar_templatescriar_templateatualizar_templateexcluir_templatecriar_disparolistar_disparosver_disparoiniciar_disparopausar_disparoretomar_disparocancelar_disparoexportar_relatoriolistar_funiscriar_funileditar_funilexcluir_etapaexcluir_funillistar_cards_funilmover_card_funilremover_card_funilhistorico_funilatualizar_leadlistar_automacoesver_automacaover_formatos_automacaocriar_automacaoeditar_automacaovalidar_automacaoexcluir_automacaoativar_automacaodesativar_automacaoexecutar_automacaotestar_automacaosimular_chatbotver_tipos_sdklistar_modelos_automacao_iacriar_automacao_ialistar_arquivos_automacaoler_arquivo_automacaoescrever_arquivo_automacaorenomear_arquivo_automacaoexcluir_arquivo_automacaocompilar_automacaolistar_execucoesver_execucaolistar_pausaspausar_conversaretomar_conversalistar_segredosver_configuracao_automacoesSends created through MCP start right away, without a confirmation step — review the prompt before you run it.
// 04 — automations
Three ways to automate, from drag-and-drop to code.
Trigger → conditions → actions, including waits that survive restarts.
A visual node editor with menus, questions, conditions and hand-off to a human.
A TypeScript project per automation, with the typed ctx SDK and Claude models.
Real template shipped with the app: motor/
import { definirAutomacao } from '@zapdesk/automacao';
import { ACOES, CATEGORIAS, FUNIL } from './categorias';
// Classifica o contato pelas últimas mensagens e move o lead no funil, com uma etiqueta.
// Não envia nada ao contato.
export default definirAutomacao({
async aoReceberMensagem(ctx, msg) {
if (!msg.texto || !ctx.conversa) return;
const historico = await ctx.conversa.historicoParaIA({ limite: 10 });
const texto = historico.map((m) => `${m.papel === 'user' ? 'Contato' : 'Loja'}: ${m.texto}`).join('\n');
const { categoria } = await ctx.ia.classificar(texto, CATEGORIAS, {
instrucoes: 'Classifique o interesse de compra do contato. Na dúvida, escolha "morno".',
});
const acao = ACOES[categoria];
await ctx.funil.mover(FUNIL, acao.etapa);
await ctx.etiquetas.adicionar(acao.etiqueta);
ctx.log.info('classificado como', categoria);
},
});automacao.json
fetch, empty process.env, no API token, no Anthropic key in the process.ctx call is checked against the permissions declared in automacao.json.Isolation protects against mistakes and accidents, not against malicious code. Only run automations you trust.
// 05 — architecture
Every piece runs on your Mac and talks over 127.0.0.1. No cloud in the middle.
// 06 — quick start
Download the app, or build it from source — then connect it to Claude.
Download
Download ZapDesk-<version>-arm64.dmg from GitHub Releases.
Drag ZapDesk to Applications.
The build is not notarized yet: open it once, then go to System Settings › Privacy & Security and click "Open Anyway".
Scan the QR code with your phone (Linked devices).
Build from source
Clone the repository and install the dependencies.
npm run dev compiles the Go engine and the shared packages, then starts the app.
npm run empacotar builds the DMG in app/dist/ (optional).
git clone https://github.com/Gabriel-Almeida0/zapdesk.git
cd zapdesk
npm install
npm run dev # compiles the Go engine + shared packages, then starts the app
npm run empacotar # optional: builds app/dist/ZapDesk-<version>-arm64.dmgConnect to Claude
Run this once.
claude mcp add -s user -e ELECTRON_RUN_AS_NODE=1 zapdesk -- \
"/Applications/ZapDesk.app/Contents/MacOS/ZapDesk" \
"/Applications/ZapDesk.app/Contents/Resources/mcp/zapdesk-mcp.mjs"
claude mcp listAdd this to claude_desktop_config.json and restart Claude.
Config file~/Library/Application Support/Claude/claude_desktop_config.json
{
"mcpServers": {
"zapdesk": {
"command": "/Applications/ZapDesk.app/Contents/MacOS/ZapDesk",
"args": ["/Applications/ZapDesk.app/Contents/Resources/mcp/zapdesk-mcp.mjs"],
"env": { "ELECTRON_RUN_AS_NODE": "1" }
}
}
}The same commands are in the app under Ajustes › Usar com Claude. No separate Node install needed.
// 07 — responsible use
Read this before you connect a number.
ZapDesk connects through whatsmeow, an open-source, unofficial implementation of the WhatsApp multi-device protocol.
ZapDesk is not affiliated with, endorsed by or sponsored by WhatsApp or Meta. "WhatsApp" is a trademark of its owner.
WhatsApp may restrict or ban numbers that send unsolicited messages. You are responsible for how you use the app.
Message only people who agreed to hear from you, and follow the LGPD, the GDPR and WhatsApp's terms.
Conversations, leads and reports are stored locally. Nothing is sent to a ZapDesk server — there isn’t one.
The software is provided "as is", without warranty of any kind, under the MIT License.
// 08 — open source
Read the code, open an issue, send a pull request. The specs that guided the build are in the repo.
docs/features and specs/ before larger changes.npm test and npm run motor:testar before a PR.v0.1.0 — early