WhatsApp MCP Server
# đą WhatsApp MCP Server

Un serveur MCP (Model Context Protocol) pour contrĂŽler WhatsApp Web via **Puppeteer Stealth**, permettant Ă ton IA (Claude/Antigravity) de lire et envoyer des messages comme un humain.
---
## đ Architecture
```
whatsapp-server/
âââ src/
â âââ index.ts â EntrĂ©e FastMCP, enregistre les outils
â âââ services/
â â âââ whatsappService.ts â Singleton : gĂšre browser/page/delays
â âââ tools/
â âââ connectWhatsappTool.ts â Outil : se connecter Ă WhatsApp Web
â âââ listChatsTool.ts â Outil : lister les discussions
â âââ sendMessageTool.ts â Outil : envoyer un message
â âââ readMessageTool.ts â Outil : lire les messages
âââ assets/ â Screenshots README
âââ .gitignore â ProtĂšge session, .env, configs perso
âââ eslint.config.js
âââ tsconfig.json
âââ package.json
```
**Flow :**
```
AI (Claude/Antigravity)
â tool calls (MCP stdio)
âŒ
whatsapp-mcp-server (FastMCP)
âââ ConnectWhatsappTool
âââ ListChatsTool
âââ SendMessageTool
âââ ReadMessageTool
â shared singleton
âŒ
WhatsappService
â puppeteer-extra + stealth plugin
âŒ
Chrome (headless ou visible)
â
âŒ
https://web.whatsapp.com/
```
---
## âïž Installation
### 1. Copier le dossier
```bash
cd "whatsapp-server"
```
### 2. Installer les dépendances
```bash
pnpm install
```
### 3. Compiler
```bash
pnpm run build
```
### 4. Ajouter dans `mcp_config.json`
```json
"whatsapp-server": {
"command": "node",
"args": [
"/chemin/vers/whatsapp-server/dist/index.js"
],
"disabled": false
}
```
---
## đ Utilisation
### Ătape 1 â Connexion (premiĂšre fois)
Demande Ă l'IA :
> _"Connecte-toi Ă WhatsApp en mode non headless"_
L'outil `connect_whatsapp` ouvre Chrome et affiche le QR code :

**Sur ton téléphone :**
1. Ouvre **WhatsApp**
2. **Menu > Appareils connectés** (Android) ou **ParamÚtres > Appareils connectés** (iPhone)
3. **Connecter un appareil**
4. **Scanne le QR code**
â
La session est sauvegardĂ©e dans `./whatsapp_session/` â pas besoin de rescanner.
---
### Ătape 2 â Lister les discussions
Demande Ă l'IA :
> _"Liste mes conversations WhatsApp"_

---
### Ătape 3 â Envoyer un message
Demande Ă l'IA :
> _"Envoie 'Bonjour !' Ă [Nom du contact] sur WhatsApp"_

---
### Ătape 4 â Lire les messages
Demande Ă l'IA :
> _"Lis les derniers messages de [Nom du contact] sur WhatsApp"_
L'outil `read_messages` extrait l'historique récent avec l'expéditeur et l'horodatage.
---
## đĄïž Anti-Ban â Comportement Humain
| Protection | Détail |
| ----------------------- | ------------------------------------------------------------- |
| **Puppeteer Stealth** | Masque les empreintes Puppeteer (`navigator.webdriver`, etc.) |
| **DĂ©lais alĂ©atoires** | 300msâ5000ms entre chaque action |
| **Frappe humaine** | 100â300ms par touche pour la recherche |
| **Session persistante** | `whatsapp_session/` évite les reconnexions fréquentes |
| **User Agent réaliste** | Chrome 120 / Windows 10 64-bit |
| **Auto-dismiss dialog** | Clique automatiquement sur "Utiliser ici" si détecté |
| **Reconnexion propre** | Ferme l'ancien browser avant d'en ouvrir un nouveau |
---
## đ§ Outils MCP disponibles
### `connect_whatsapp`
Lance le navigateur et ouvre WhatsApp Web.
| ParamÚtre | Type | Défaut | Description |
| ---------- | ------- | ------- | ------------------------------------------------------- |
| `headless` | boolean | `false` | Mode invisible. Mettre `false` pour scanner le QR code. |
### `list_chats`
Liste les discussions récentes.
| ParamÚtre | Type | Défaut | Description |
| --------- | ------ | ------ | -------------------------------- |
| `limit` | number | `10` | Nombre max de chats Ă retourner. |
### `send_message`
Envoie un message Ă un contact ou groupe.
| ParamĂštre | Type | Requis | Description |
| ---------- | ------ | ------ | ------------------------------- |
| `chatName` | string | â
| Nom exact du contact ou groupe. |
| `message` | string | â
| Contenu du message Ă envoyer. |
### `read_messages`
Lit les messages récents d'une discussion spécifique.
| ParamĂštre | Type | Requis | Description |
| ---------- | ------ | ------ | ---------------------------------------------- |
| `chatName` | string | â
| Nom exact du contact ou groupe. |
| `limit` | number | 10 | Nombre de messages à récupérer (max visibles). |
---
## đ Commandes
```bash
pnpm install # Installer les dépendances
pnpm run build # Compiler TypeScript â dist/
pnpm run dev # Lancer en mode développement (tsx)
pnpm run lint # Vérifier le code avec ESLint
pnpm run format # Formater avec Prettier
```
---
## â ïž Recommandations
- **Ne pas spammer** : laisser des délais naturels entre les usages.
- **Session warmup** : aprĂšs le premier QR scan, ouvre 2-3 discussions manuellement avant de fermer Chrome.
- **Headless=false** pour le premier scan. Ensuite `true` est possible pour les relances.
- **1 compte = 1 session** : ne pas utiliser le mĂȘme numĂ©ro sur plusieurs instances simultanĂ©es.
---
## đ SĂ©curitĂ© â Ce qui est protĂ©gĂ© par `.gitignore`
| Dossier/Fichier | Raison |
| ------------------- | ---------------------------------------------------- |
| `whatsapp_session/` | Cookies et tokens de session WhatsApp |
| `.env` | Variables sensibles (clés API, numéros de téléphone) |
| `mcp_config.json` | Chemins locaux et configs privées |
| `dist/` | Build gĂ©nĂ©rĂ© â reconstruit avec `pnpm build` |
| `node_modules/` | DĂ©pendances â reconstruit avec `pnpm install` |
---
_DĂ©veloppĂ© par Deamon â Architecture calquĂ©e sur le serveur SMS/VoIP.ms MCP_
TDQS
Scored across 3 tools
Each tool has a clearly distinct purpose: connect_whatsapp handles authentication, list_chats retrieves chat data, and send_message sends messages. There is no overlap in functionality, making it easy for an agent to select the right tool without confusion.
All tool names follow a consistent snake_case pattern with a verb_noun structure (connect_whatsapp, list_chats, send_message). This predictability enhances readability and usability for agents.
With only 3 tools, the server feels thin for a WhatsApp integration, lacking operations like reading messages, managing contacts, or handling media. While the tools cover basic actions, the scope is limited and may require workarounds for common use cases.
The toolset is significantly incomplete for a WhatsApp server. It misses essential CRUD operations such as reading messages, updating chats, deleting messages, and handling media files. Agents will likely fail when trying to perform common WhatsApp tasks beyond the basics provided.