whatsapp-mcp-local
MCP server que dá a agentes IA visão e escrita no WhatsApp — o paralelo do chrome-devtools MCP para o WhatsApp.
- Ver: conversas, mensagens e histórico completo.
- Escrever: rascunho pre-preenchido + Enter com confirmação explícita (gate). Nada é enviado sem aprovação.
- Seguro por design: zero protocolo não-oficial (sem Baileys/whatsmeow → sem risco de banimento), dados locais.
Plataformas (auto-detect)
| Driver | Onde funciona | Como detecta |
|---|---|---|
| local (app nativo) | macOS com o app WhatsApp instalado e logado | Banco ChatStorage.sqlite existe |
| web (web.whatsapp.com) | Qualquer SO com Google Chrome | Banco do macOS não existe (ou WHATSAPP_DRIVER=web) |
O server escolhe o driver automaticamente. Force com WHATSAPP_DRIVER=local|web|auto.
Requisitos
- Python 3.12+ e uv
- Driver local (macOS): app WhatsApp nativo instalado e logado + permissão de Acessibilidade para o processo (só para o Enter do envio)
- Driver web (qualquer SO): Google Chrome instalado. Na primeira execução, escaneie o QR uma vez (o MCP abre o Chrome com perfil dedicado; depois o login é permanente)
Instalação
uvx whatsapp-mcp-local
Integração com opencode
Adicione em ~/.config/opencode/opencode.json (ou opencode.json do projeto):
{
"mcp": {
"whatsapp": {
"type": "local",
"command": ["uvx", "whatsapp-mcp-local"],
"enabled": true
}
}
}
Reinicie o opencode. As tools send_message e confirm_send são marcadas destructive e pedem confirmação por padrão no cliente.
Integração com Claude Code
claude mcp add whatsapp-mcp -- uvx whatsapp-mcp-local
Ou via .mcp.json:
{
"mcpServers": {
"whatsapp-mcp": {
"command": "uvx",
"args": ["whatsapp-mcp-local"]
}
}
}
Tools
| Tool | Descrição | Driver | Flag |
|---|---|---|---|
list_chats |
Lista conversas (nome, não-lidas, última msg) | local (chat_id) / web (chat_name) | RO |
get_messages |
Lê mensagens de uma conversa | local (chat_id) / web (chat_name) | RO |
search_messages |
Busca texto nas mensagens | local | RO |
get_chat_info |
Metadados da conversa | local | RO |
export_chat |
Exporta histórico para JSON/Markdown | local | RO |
send_message |
Pre-preenche rascunho (não envia) | ambos | ⚠️ destrutiva |
confirm_send(draft_id) |
Pressiona Enter (envia) — exige draft_id válido de send_message, expira em 120s | ambos | ⚠️ destrutiva |
verify_sent |
Verifica no banco se a mensagem foi enviada | local | RO |
Modelo de segurança
- Leitura:
mode=rosempre; o banco nunca é modificado (testes verificam hash antes/depois). - Escrita em 2 passos:
send_messagesó preenche o campo — sem Enter, sem envio (comportamento do próprio WhatsApp). O envio exigeconfirm_sendou Enter manual. - Nunca grava em
ChatStorage.sqlite/Axolotl.sqlite(cripto) — corrompe o app e não transmite ao servidor. - JIDs mascarados nos outputs; textos truncados por config.
- Dados processados localmente; só o que o proprietário pedir vai para o modelo.
Testes
uv run pytest
Roadmap
- Driver local (macOS) — validado E2E
- Driver web (cross-platform via Chrome CDP) — implementado e testado com mocks
- Auto-detecção de driver
- Publicado no PyPI (
uvx whatsapp-mcp-local) e GitHub - Validação E2E do driver web com QR logado (manual, depende de escanear QR 1x)
Aviso
Ferramenta para uso pessoal com a própria conta. O schema do banco e o DOM do web.whatsapp.com são do WhatsApp e podem mudar entre versões. Não use para enviar mensagens em nome de terceiros ou para fins não autorizados.
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file whatsapp_mcp_local-0.2.3.tar.gz.
File metadata
- Download URL: whatsapp_mcp_local-0.2.3.tar.gz
- Upload date:
- Size: 42.8 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: uv/0.11.21 {"installer":{"name":"uv","version":"0.11.21","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"macOS","version":null,"id":null,"libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":null}
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
9c9227584383be0931288961e713b1ff0c49e997d61bf94ed3400eab767a42fa
|
|
| MD5 |
098fdf75230cfa4dc65e6b3484cd910b
|
|
| BLAKE2b-256 |
01bce41804542124faa0c520a5fe953d9ede062d4930ec6d5f43a1a7c53fc586
|
File details
Details for the file whatsapp_mcp_local-0.2.3-py3-none-any.whl.
File metadata
- Download URL: whatsapp_mcp_local-0.2.3-py3-none-any.whl
- Upload date:
- Size: 18.2 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: uv/0.11.21 {"installer":{"name":"uv","version":"0.11.21","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"macOS","version":null,"id":null,"libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":null}
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
a82d3a26dc1a05cc58ea634e2bc69a901f84b3c3fbf9a03ab7f523d95cbe4748
|
|
| MD5 |
892341021c7f1606e898d048e389dd3c
|
|
| BLAKE2b-256 |
24e3d7e99f05747419be59751b9f64f22bcd09fa2a864d06b8040237f6486f5b
|