WhatsApp MCP Stream
WhatsApp MCP Stream
Ein WhatsApp-MCP-Server, der auf Streamable HTTP-Transport basiert, Baileys für die WhatsApp-Anbindung verwendet und über eine Web-Admin-Oberfläche sowie bidirektionalen Medienfluss (Upload + Download) verfügt.
Kernpunkte:
Transport: Streamable HTTP unter
/mcpEngine: Baileys
Admin-UI: QR, Status, Logout, Laufzeiteinstellungen, Chatverlauf-Viewer
Medien: Upload-Endpunkte +
/media-Hosting + MCP-Download-Tool
Schnellstart (Docker)
# build and run
docker compose build
docker compose up -dDer Server ist erreichbar unter:
Admin-UI:
http://localhost:3003/adminMCP-Endpunkt:
http://localhost:3003/mcpMediendateien:
http://localhost:3003/media/<filename>
Related MCP server: lingtai-whatsapp
DNS auf Hosts mit --iptables=false
Auf einigen NAS-/gehärteten Hosts (z. B. Synology mit dockerd --iptables=false) besitzt der eingebettete DNS-Proxy von Docker (127.0.0.11) keine iptables-DNAT-Regeln und verweigert Verbindungen innerhalb von Containern.
Lösung: Kopieren Sie resolv.conf.example nach resolv.conf und fügen Sie einen Volume-Override hinzu:
cp resolv.conf.example resolv.confFügen Sie dann Folgendes zu einer lokalen docker-compose.override.yml hinzu (nicht eingecheckt):
services:
mcp-whatsapp:
volumes:
- ./resolv.conf:/etc/resolv.conf:rodocker compose up übernimmt den Override automatisch.
Laufzeiteinstellungen
Einstellungen können in der Admin-UI bearbeitet und unter SETTINGS_PATH gespeichert werden (Standard: MEDIA_DIR/settings.json).
Admin-UI
Admin-Konsole mit Laufzeiteinstellungen, QR-Kopplung, Chatverlauf-Viewer, Export und Status.
Unterstützte Einstellungen:
media_public_base_urlupload_max_mbupload_enabledmax_files_per_uploadrequire_upload_tokenupload_tokenauto_download_mediaauto_download_max_mb
Authentifizierung
Eine eingebaute Authentifizierung ist noch nicht implementiert. Verwenden Sie in der Produktion ein Gateway, das die Authentifizierung durchsetzt. Dieses Projekt funktioniert gut hinter authmcp-gateway:
https://github.com/loglux/authmcp-gatewayMedien-Upload-API
Base64-JSON:
curl -X POST http://localhost:3003/api/upload \
-H "Content-Type: application/json" \
-d {filename:photo.jpg,mime_type:image/jpeg,data:<base64>}Multipart (empfohlen für große Dateien):
curl -X POST http://localhost:3003/api/upload-multipart \
-F "file=@/path/to/file.jpg"Beide geben url und (falls konfiguriert) publicUrl zurück.
Senden lokaler Dateien über send_media
Das Verzeichnis ./files/ im Projektstamm wird per Bind-Mount in den Container unter /app/files eingebunden. Legen Sie dort eine Datei ab und referenzieren Sie sie sofort – kein Container-Neustart erforderlich:
# On host:
cp report.pdf /path/to/whatsapp-mcp-stream/files/
# In send_media:
media_path: /app/files/report.pdfBei einer URL-Quelle übergeben Sie media_url direkt an send_media oder stage_media – der Server lädt die Datei selbst herunter, ohne base64.
Upload-Authentifizierung (optional)
Wenn require_upload_token=true gesetzt ist, übergeben Sie ein Token über eines der folgenden:
x-upload-token: <token>Authorization: Bearer <token>
MCP-Transport
Der Server stellt Streamable HTTP unter /mcp bereit.
Typischer Ablauf:
POST /mcpmit JSON-RPCinitializeVerwenden Sie den zurückgegebenen
mcp-session-id-Header für nachfolgende Anfragen.POST /mcpfür Tool-Aufrufe
Hinweis: Clients müssen bei initialize Accept: application/json, text/event-stream senden.
Smoke-Test
Kurzer Regressions-Smoke-Test für MCP-Tools:
npm run smoke:mcpOptional benutzerdefiniertes Ziel:
MCP_BASE_URL=http://localhost:3003 npm run smoke:mcpMCP-Tools
Authentifizierung
Tool | Beschreibung |
| Ruft den neuesten WhatsApp-QR-Code als Bild zur Authentifizierung ab. |
| Prüft, ob der WhatsApp-Client authentifiziert und bereit ist. |
| Meldet bei WhatsApp ab und löscht die aktuelle Sitzung. |
Kontakte
Tool | Beschreibung |
| Durchsucht Kontakte nach Name oder Telefonnummer. |
| Löst einen Kontakt nach Name oder Telefonnummer auf (beste Übereinstimmungen). |
| Ruft Kontaktdetails anhand der JID ab. |
| Ruft die Profilbild-URL für eine JID ab. |
| Ruft Gruppen-Metadaten und -Teilnehmer anhand der Gruppen-JID ab. |
Chats
Tool | Beschreibung |
| Listet Chats mit Metadaten und optionaler letzter Nachricht auf. |
| Ruft Chat-Metadaten anhand der JID ab. |
| Listet ausschließlich Gruppen-Chats auf. |
| Löst eine direkte Chat-JID anhand einer Telefonnummer auf. |
| Löst einen Kontakt nach Name oder Telefonnummer auf und gibt die Chat-Metadaten zurück. |
| Findet Mitglieder, die in mehreren Gruppen vorkommen. |
| Findet Gruppenmitglieder ohne direkten Chat. |
| Findet Gruppenmitglieder, die in den Kontakten fehlen. |
| Führt eine kombinierte Gruppen-Audit als einen Routinevorgang aus. |
Nachrichten
Tool | Beschreibung |
| Ruft Nachrichten aus einem bestimmten Chat ab. |
| Durchsucht Nachrichten nach Text (optional auf einen Chat eingeschränkt). |
| Ruft eine bestimmte Nachricht anhand der ID ( |
| Ruft die letzten Nachrichten rund um eine bestimmte Nachricht ab. |
| Ruft die neueste Nachricht für eine JID ab. |
| Sendet eine Textnachricht an eine Person oder Gruppe. Unterstützt optionalen |
Medien
Tool | Beschreibung |
| Sendet Medien (Bild/Video/Dokument/Audio). Akzeptiert |
| Speichert eine Datei im Medienverzeichnis des Servers und gibt deren lokalen Pfad zurück. Verwenden Sie den zurückgegebenen |
| Lädt Medien aus einer Nachricht herunter. |
Dienstprogramme
Tool | Beschreibung |
| Health-Check-Tool. |
Wiederherstellungshinweise
Dieser Dienst enthält einen bewusst eingebauten Wiederherstellungs-Workaround für die Korruption des Baileys/WhatsApp-Session-State.
Warum es das gibt:
In Produktion haben wir Fälle beobachtet, in denen der Container am Leben blieb und MCP noch antwortete, die WhatsApp-Sitzung aber funktional gestört war.
Die häufigsten Indikatoren waren Baileys-Fehler wie
failed to find key ... to decode mutationundfailed to sync state from version.In diesem Zustand stellte ein manueller Container-Neustart den Dienst oft wieder her.
Aktuelles Verhalten:
Bei Signalen für App-State-Korruption versucht der Dienst zuerst eine sanfte Wiederherstellung mit
forceResync().Wiederholt sich dieselbe Fehlerklasse innerhalb eines Zeitfensters, eskaliert er zu einem internen Neustart des WhatsApp-Clients.
Bei Trennungen wie
Connection Terminatedplant der Dienst einen Disconnect-Watchdog und eskaliert zu einem internen Neustart, wenn der Socket nicht rechtzeitig wieder inopenübergeht.Der Reconnect-Lebenszyklus ist gegen verschachtelte Lock-Deadlocks abgesichert, sodass die Wiederherstellung nach einer Trennung ohne manuellen Container-Neustart abgeschlossen werden kann.
Aktuelle Produktionsbeobachtungen zeigen wiederholte Socket-Trennungen (
428 Connection Terminated,503 Stream Errored), die automatisch wieder inopenüberführt werden.Ein dedizierter
/healthz-Endpunkt meldet503nur, wenn der Dienst tatsächlich außerhalb des zulässigen Wiederherstellungsfensters festhängt.Docker-Healthchecks verwenden
/healthz, sodass der Container erst dann neu gestartet wird, wenn die In-Process-Wiederherstellung Gelegenheit hatte.
Diese Wiederherstellungsmechanismen reduzieren den Bedarf an manuellen Eingriffen und verbessern die Robustheit gegenüber häufigen WhatsApp/Baileys-Sitzungsfehlern.
Lizenz
MIT
Persistenz
Chats und Nachrichten werden in einer lokalen SQLite-Datenbank im Session-Volume gespeichert.
Umgebungsvariablen:
Variable | Standard | Beschreibung |
|
| SQLite-Datenbankpfad für die Persistenz von Chats/Nachrichten. |
|
| Detaillierte WhatsApp-Ereignisprotokolle aktivieren. |
|
| Rohen Baileys-Ereignisstream für tiefgehendes Debugging in eine Datei schreiben. |
|
| Dateipfad für das Ereignisstream-Protokoll. |
|
| Sicherheitsnetz für Wiederverbindung nach erzwungener Resynchronisierung aktivieren. |
|
| Verzögerung vor der Wiederverbindung nach erzwungener Resynchronisierung (ms). |
|
| Mindestverzögerung zwischen automatischen App-State-Wiederherstellungen. |
|
| Zeitfenster zur Zählung wiederholter App-State-Beschädigungsfehler. |
|
| Anzahl weicher Wiederherstellungen, bevor zu einem internen Neustart eskaliert wird. |
|
| Gnadenfrist während Wiederherstellung/Trennung, bevor |
|
| Wie lange nach einem Socket-Schließen gewartet wird, bevor der Trennungs-Watchdog Wiederverbindung/Neustart erzwingt. |
|
| Durch Kommas getrennte Trennung-Statuscodes, die direkt zu einem internen Neustart-Watchdog eskalieren sollen. |
|
| Exakte doppelte |
|
| Wie lange abgeschlossene |
|
| Maximale In-Memory-Einträge für den Nachrichtenindex ( |
|
| Maximale In-Memory-Einträge für den Nachrichtenschlüsselindex ( |
|
| WhatsApp-Client-Initialisierung gegen diese Frist laufen lassen; auf |
|
| Maximale parallele Auto-Downloads. Auto-Download läuft über eine prozessinterne begrenzte Warteschlange, sodass ein Schub eingehender Medien das I/O nicht sättigen kann. |
|
| Maximale in der Warteschlange befindliche Auto-Download-Aufträge. Überschuss wird FIFO (älteste zuerst) mit einer Warnung im Protokoll verworfen; aktuelle Nachrichten bleiben priorisiert. |
|
| Standardmäßig direkte JSON-Antworten für Streamable-HTTP-POST-Anfragen verwenden. Auf |
Zusätzliche Transportdiagnose:
/mcp-POST-Anfragen protokollieren jetzt Anfrage-Lebenszyklusereignisse inlogs/mcp-whatsapp.logdies umfasst Anfrageeingang, Transport-Dispatch, Abschluss von
transport.handleRequestsowie HTTPfinish/closeVerwenden Sie diese Protokolle, um festzustellen, ob die Latenz auftritt, bevor die Antwort
whatsapp-mcp-streamverlässt, oder danach auf der Gateway-/Client-Seite
Chatverlauf-API
Durchsuchen Sie gespeicherte Chats und Nachrichten über:
GET /api/chats?limit=50&offset=0&q=<search> — paginierte Chatliste, optional nach Name gefiltert.
GET /api/chats/:jid/messages?limit=50&offset=0 — paginierte Nachrichten für einen Chat (neueste zuerst).
Beide Endpunkte werden von der Registerkarte Chats in der Admin-Oberfläche verwendet.
Export
Exportieren Sie einen Chat (JSON + optional heruntergeladene Medien) über:
GET /api/export/chat/:jid?include_media=true
Wenn include_media=true, enthält das ZIP Dateien, die bereits über download_media heruntergeladen wurden. Es ruft fehlende Medien nicht von WhatsApp ab.
This server cannot be installed
Maintenance
Resources
Unclaimed servers have limited discoverability.
Looking for Admin?
If you are the server author, to access and configure the admin panel.
Related MCP Servers
- FlicenseNot gradedqualityNot gradedmaintenanceEnables WhatsApp automation through MCP protocol, allowing users to manage sessions, send messages, handle groups/communities, and access contacts through natural language interactions with AI agents.11

lingtai-whatsappofficial
AlicenseNot gradedqualityFmaintenanceMCP server for interacting with the official Meta WhatsApp Business Platform/Cloud API, enabling sending messages, managing contacts, templates, and handling webhook callbacks.Apache 2.0- AlicenseNot gradedqualityDmaintenanceEnables sending messages, managing templates, uploading media, and configuring webhooks for WhatsApp Business via the MCP protocol.105MIT
- AlicenseNot gradedqualityCmaintenanceIntegrates WhatsApp with AI agents, enabling message sending, chat search, media sharing, approval workflows, and activity summaries via any MCP client.1Apache 2.0
Related MCP Connectors
Search, document and execute authenticated API calls across 700+ apps via one MCP server
Give AI agents real phone numbers, messages, and voice calls via MCP.
Instagram, WhatsApp and Messenger DMs through official Meta Business APIs.
Latest Blog Posts
- Who's Calling? MCP Hosts Are an Identity Blind Spot (And the Spec Knows It)By Om-Shree-0709 on .mcpAgent IdentityOAuth 2.1
- Your AI Chatbot Just Exposed Your CEO's Salary to an InternBy Om-Shree-0709 on .Agent IdentityMCP SecurityOAuth Delegation
- Why MCP Servers Need Execution Sandboxing (And Why Your Current Stack Isn't Enough)By Om-Shree-0709 on .Agentic AiPrompt InjectionWebAssembly
MCP directory API
We provide all the information about MCP servers via our MCP API.
curl -X GET 'https://glama.ai/api/mcp/v1/servers/BusinessNone/WhatsAppMCP'
If you have feedback or need assistance with the MCP directory API, please join our Discord server