Enables programmatic control of WhatsApp Web, providing capabilities to list recent chat conversations and send messages to contacts or groups.
Click on "Install Server".
Wait a few minutes for the server to deploy. Once ready, it will show a "Started" state.
In the chat, type
@followed by the MCP server name and your instructions, e.g., "@WhatsApp MCP ServerSend 'I'll be there in 10 minutes' to Sarah"
That's it! The server will respond to your query, and you can continue using it as needed.
Here is a step-by-step guide with screenshots.
🟢 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.jsonFlow :
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
cd "whatsapp-server"2. Installer les dépendances
pnpm install3. Compiler
pnpm run build4. Ajouter dans mcp_config.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 :
Ouvre WhatsApp
Menu > Appareils connectés (Android) ou Paramètres > Appareils connectés (iPhone)
Connecter un appareil
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 ( |
Délais aléatoires | 300ms–5000ms entre chaque action |
Frappe humaine | 100–300ms par touche pour la recherche |
Session persistante |
|
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 |
| boolean |
| Mode invisible. Mettre |
list_chats
Liste les discussions récentes.
Paramètre | Type | Défaut | Description |
| number |
| Nombre max de chats à retourner. |
send_message
Envoie un message à un contact ou groupe.
Paramètre | Type | Requis | Description |
| string | ✅ | Nom exact du contact ou groupe. |
| string | ✅ | Contenu du message à envoyer. |
read_messages
Lit les messages récents d'une discussion spécifique.
Paramètre | Type | Requis | Description |
| string | ✅ | Nom exact du contact ou groupe. |
| number | 10 | Nombre de messages à récupérer (max visibles). |
📋 Commandes
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
trueest 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 |
| Cookies et tokens de session WhatsApp |
| Variables sensibles (clés API, numéros de téléphone) |
| Chemins locaux et configs privées |
| Build généré — reconstruit avec |
| Dépendances — reconstruit avec |
Développé par Deamon — Architecture calquée sur le serveur SMS/VoIP.ms MCP