Skip to main content
Glama
razvangirgiz

wazap-mcp

by razvangirgiz
██╗    ██╗ █████╗ ███████╗ █████╗ ██████╗
██║    ██║██╔══██╗╚══███╔╝██╔══██╗██╔══██╗
██║ █╗ ██║███████║  ███╔╝ ███████║██████╔╝
██║███╗██║██╔══██║ ███╔╝  ██╔══██║██╔═══╝
╚███╔███╔╝██║  ██║███████╗██║  ██║██║
 ╚══╝╚══╝ ╚═╝  ╚═╝╚══════╝╚═╝  ╚═╝╚═╝

WhatsApp für deinen KI-Agenten. Ein MCP-Server, der dein WhatsApp-Konto – Chats, Nachrichten, Medien, Kontakte, Gruppen – hinter 22 Tools stellt, die jeder MCP-Client aufrufen kann. Anmeldung per Pairing-Code, kein Browser, kein Telefonnummern-Wiederverkäufer, ~20 MB RAM.

Basiert auf Baileys, das das WhatsApp-Multi-Device-Protokoll über eine WebSocket-Verbindung spricht.

Erste Schritte

Das npm-Paket ist wazap-mcp; der Befehl, den es installiert, ist wazap.

npx wazap-mcp setup

Das ist die gesamte Installation. Es verknüpft dein Konto, findet die auf diesem Rechner installierten MCP-Clients, schreibt deren Konfiguration und sagt dir, was du neu starten musst.

Oder lass deinen Agenten das erledigen. Füge dies ein:

Richte WhatsApp für mich ein: Führe npx wazap-mcp setup --agent aus und folge dem, was es ausgibt.

Dann frag deinen Agenten: „Was habe ich heute auf WhatsApp verpasst?"

Im Folgenden sind die Schritte, die setup für dich ausführt. Jeder ist weiterhin ein eigener Befehl, wenn du ihn von Hand ausführen möchtest.

npx wazap-mcp login zeigt einen QR-Code; scanne ihn unter Einstellungen → Verknüpfte Geräte → Gerät verknüpfen. Keine Kamera zur Hand oder Verknüpfung über SSH? npx wazap-mcp login --phone +15550100 gibt einen 8-stelligen Code aus, den du unter Stattdessen mit Telefonnummer verknüpfen eingibst. Am Ende fragt es, ob der Agent Nachrichten senden darf; die Antwort ist nein, es sei denn, du sagst ja, und npx wazap-mcp config writes on ändert das später.

npx wazap-mcp connect claude-code schreibt den MCP-Eintrag für einen Client. Die Tabelle unter Client verbinden enthält den Rest.

npx wazap-mcp allein ist sicher auszuführen: Es zeigt, wo du stehst und was als Nächstes zu tun ist, und startet keinen Server. Wenn etwas nicht stimmt, ist npx wazap-mcp status das Erste, was du ausführen solltest – es prüft Node, das Datenverzeichnis, die Sperre, die Anmeldedaten und ob eine neuere Version verfügbar ist, und zeigt neben jedem Problem die Lösung an.

Client verbinden

wazap connect <client> schreibt den Eintrag für dich, behält alles andere in der Datei und sichert sie einmal vor der ersten Änderung. --dry-run zeigt, was es schreiben würde.

Client

Was connect schreibt

claude-code

führt claude mcp add whatsapp für dich aus

claude-desktop

claude_desktop_config.json im Claude-Anwendungsverzeichnis

cursor

~/.cursor/mcp.json

codex

[mcp_servers.whatsapp] in ~/.codex/config.toml

vscode

./.vscode/mcp.json, für den aktuellen Arbeitsbereich

gemini

~/.gemini/settings.json

alles Remote

MCP-URL-Feld des Clients: https://your-host/mcp mit Header Authorization: Bearer <token> (siehe Self-host)

Jeder MCP-Client funktioniert auf die gleiche Weise: Der Befehl ist npx -y wazap-mcp, der Transport ist stdio. Sag dem Agenten, er soll zuerst learn aufrufen – es gibt die ID-Formate, die Arbeitsabläufe und jeden Fehlercode mit Hinweisen zur Behebung zurück.

{
  "mcpServers": {
    "whatsapp": {
      "command": "npx",
      "args": ["-y", "wazap-mcp"]
    }
  }
}

Claude Desktop, Cursor und Gemini CLI übernehmen genau das. VS Code verschachtelt es unter servers und möchte ein "type": "stdio" neben command. Codex CLI ist TOML:

[mcp_servers.whatsapp]
command = "npx"
args = ["-y", "wazap-mcp"]

Der Ordner skills/ folgt dem Agent Skills-Format, sodass Codex, Cursor und andere skill-bewusste Agenten dieselben fünf Skills laden können.

Related MCP server: wa-bridge

Tools

Tool

Kind

Was es tut

learn

read

Der Leitfaden zu jedem Tool, ID-Format und Fehlercode. Rufe es zuerst auf.

get_status

read

Verbindungsstatus, Synchronisierungszustand, verknüpftes Konto, Versionen, Datenverzeichnis.

list_chats

read

Unterhaltungen neueste zuerst; filtere all/unread/groups/individual/archived.

read_messages

read

Nachrichten in einem Chat; before blättert weiter zurück und holt ältere Verläufe vom Telefon.

get_recent_messages

read

Alles aus den letzten N Stunden, gruppiert nach Chat. Das Aufhol-Tool.

search_messages

read

Textsuche über die lokal gespeicherten Nachrichten.

get_message

read

Eine Nachricht vollständig, mit der zitierten Nachricht und Reaktionen.

search_contacts

read

Kontakte nach Name oder Nummer finden.

get_contact

read

Name, Nummer, Info-Text, Profilbild.

get_group_info

read

Teilnehmer, Administratoren, Ankündigungsmodus, Einladungslink (wenn du Admin bist).

download_media

read

Speichert einen Anhang auf der Festplatte; kleine Bilder werden auch inline zurückgegeben.

send_message

write

Text senden, optional als Antwort, mit @-Erwähnungen.

send_media

write

Ein Bild, Video, Audio, Sprachnachricht oder Dokument von einem Pfad oder einer URL senden.

send_poll

write

Eine Umfrage mit 2–12 Optionen senden.

send_location

write

Einen Karten-Pin senden.

edit_message

write

Bearbeite deine eigene Nachricht innerhalb des 15-Minuten-Fensters von WhatsApp.

react_to_message

write

Eine Emoji-Reaktion hinzufügen oder entfernen.

forward_message

write

Eine Nachricht an einen anderen Chat weiterleiten.

delete_message

write

Ziehe deine eigene Nachricht innerhalb des 2-Tage-Fensters von WhatsApp zurück.

manage_chat

write

Archivieren, anheften, stummschalten (standardmäßig 8h), als gelesen/ungelesen markieren.

create_group

write

Eine Gruppe erstellen und Teilnehmer hinzufügen.

manage_group

write

Hinzufügen, entfernen, befördern, degradieren, verlassen, umbenennen, Einladungslinks.

Jede Nachricht wird mit einem nicht-leeren text zurückgegeben: Medien- und Systemnachrichten enthalten einen Platzhalter wie [image] caption, [voice message], [deleted] oder [poll] Pizza or pasta?. Zeitstempel sind ISO 8601 mit dem UTC-Offset der Maschine, zusammen mit einem menschlichen age wie 2h ago.

Skills

wazap enthält fünf Agent Skills, die einem Agenten die Arbeitsabläufe hinter den Tools beibringen, nicht nur die Tools:

Skill

Was der Agent tut

wazap-setup

Diagnose mit wazap status, Verknüpfung per QR- oder Pairing-Code, Client mit wazap connect verbinden, abgelaufene Sitzung reparieren

whatsapp-inbox

„Was habe ich verpasst?" Triage in braucht dich / zur Info / Rauschen, sortiert, plus vergessene Antworten. Nur lesen

whatsapp-recall

„Finde die Rechnung, die Dan geschickt hat." Suche mit Suchvarianten, blättere in der Zeit zurück, lade die Datei herunter und lies sie. Nur lesen

whatsapp-groups

Hole in einer 300-Nachrichten-Gruppe auf: Entscheidungen, Termine, was von dir verlangt wird. Nur lesen

whatsapp-send

Entwurf im eigenen Register des Chats, Empfänger und Text anzeigen, nur senden, nachdem der Benutzer ja gesagt hat

Installiere alles (Server und Skills) als Claude-Code-Plugin:

/plugin marketplace add razvangirgiz/wazap
/plugin install wazap@wazap

Oder kopiere skills/<name>/ in ein beliebiges Skills-Verzeichnis, das dein Agent liest.

Fehler

Jeder Fehler ist ein strukturiertes { error, message, fix } anstelle eines Stack-Trace, sodass ein Agent entscheiden kann, ob er es erneut versuchen, den Benutzer fragen oder aufhören soll.

Code

Bedeutung

NOT_LINKED

Kein Konto verknüpft. Führe npx wazap-mcp login aus.

SESSION_EXPIRED

Vom Telefon entkoppelt. Führe npx wazap-mcp login aus.

SESSION_CORRUPT

Anmeldedaten nicht lesbar. Führe npx wazap-mcp logout und dann login aus.

NOT_CONNECTED

Verbindet sich noch oder verbindet sich erneut.

SYNC_IN_PROGRESS

Die Verlaufssynchronisierung ist noch nicht abgeschlossen; Ergebnisse können unvollständig sein.

INVALID_PHONE

Die Nummer ist nicht im internationalen Format.

INVALID_ID

Keine WhatsApp-Chat-, Kontakt- oder Gruppen-ID.

NOT_ON_WHATSAPP

Diese Nummer hat kein WhatsApp-Konto.

CHAT_NOT_FOUND / MESSAGE_NOT_FOUND / CONTACT_NOT_FOUND / GROUP_NOT_FOUND

Unbekannte ID.

NOT_A_PARTICIPANT / NOT_ADMIN / GROUP_ANNOUNCEMENT_ONLY

Gruppenberechtigungen.

MEDIA_UNAVAILABLE

WhatsApp hat die Datei ablaufen lassen, oder sie wurde hier nie synchronisiert.

FILE_NOT_FOUND / FILE_TOO_LARGE / URL_FETCH_FAILED

Probleme mit ausgehenden Medien.

TEXT_TOO_LONG

Über WhatsApps Nachrichtenlimit.

EDIT_WINDOW_EXPIRED / RETRACT_WINDOW_EXPIRED / NOT_OWN_MESSAGE

WhatsApps eigene Grenzen beim Bearbeiten und Löschen.

READ_ONLY

wazap läuft im Nur-Lesen-Modus.

RATE_LIMITED

Zu viele Schreibvorgänge; fix sagt, wie lange du warten musst.

TIMEOUT / WHATSAPP_ERROR

WhatsApp hat nicht geantwortet oder die Operation abgelehnt.

Datenverzeichnis

Alles befindet sich in ~/.wazap (überschreibbar mit --data-dir oder WAZAP_DATA_DIR), erstellt mit 0700 und Anmeldedaten mit 0600 geschrieben:

~/.wazap/
  auth/         WhatsApp credentials — treat this like a password
  media/        downloads from download_media
  history/      per-chat message history, so a restart is not amnesia
  store.json    chat-list snapshot
  server.lock   pid of the running server
  daemon.json   loopback endpoint a second wazap bridges to
  .env          optional settings, see .env.example

Anmeldedaten werden in eine temporäre Datei geschrieben und dann an Ort und Stelle umbenannt, sodass ein Abbrechen des Prozesses während des Schreibens nicht dazu führen kann, dass du dein Telefon erneut verknüpfen musst.

Mehrere Clients gleichzeitig

{"type": "text"}

Claude Desktop, Claude Code und Cursor starten jeweils ihr eigenes wazap. WhatsApp erlaubt einen Socket pro verknüpftem Gerät, daher teilen sie sich eine Sitzung, statt darum zu kämpfen. Das erste wazap in einem Datenverzeichnis besitzt die Sitzung und öffnet einen MCP-Endpunkt auf 127.0.0.1; jedes weitere stellt über diesen Endpunkt eine Brücke zu ihm her. Es gibt nichts zu konfigurieren, und kein Client kann den Unterschied erkennen. Der Besitzer veröffentlicht <data-dir>/daemon.json (0600) mit seiner PID, seinem Port und dem Token, mit dem sich eine Brücke authentifiziert.

Eine Brücke bedient das, was der Besitzer bereitstellt, sodass ein mit --read-only gestarteter Besitzer jeden Client schreibgeschützt macht, unabhängig davon, mit welchen Flags dieser Client gestartet wurde.

Wenn der Besitzer beendet wird, beenden sich auch die Brücken mit ihm, und das nächste wazap, das ein Client startet, wird der neue Besitzer.

WAZAP_NO_SHARE=1 verzichtet darauf: Ein zweites wazap im selben Verzeichnis beendet sich mit Code 2 und nennt die PID des bereits laufenden. Ein explizites --http ist ein eigener Server statt einer Brücke und wird auf dieselbe Weise abgelehnt.

Schreibgeschützter Modus

Schreibvorgänge sind Opt-in. login fragt einmal nach und speichert die Antwort in <data-dir>/.env; wazap config writes on|off ändert sie, und wazap config allein gibt jede wirksame Einstellung samt ihrer Herkunft aus.

WAZAP_READ_ONLY=1 oder wazap serve --read-only registriert die Schreib-Tools gar nicht erst. Der Agent sieht sie nie und kann daher niemanden von Ihrer Nummer aus anschreiben, nicht einmal versehentlich – nützlich, wenn das verknüpfte Konto Ihr persönliches ist.

Schreibvorgänge sind außerdem auf WAZAP_RATE_LIMIT pro Minute begrenzt (Standard 20, 0 deaktiviert). Schneller zu senden, als ein Mensch es täte, ist ein Weg, wie Konten gesperrt werden.

HTTP-Modus

WAZAP_READ_TOKEN=$(openssl rand -hex 32) \
WAZAP_WRITE_TOKEN=$(openssl rand -hex 32) \
npx wazap-mcp serve --http --host 0.0.0.0 --port 8766

Streamable HTTP unter /mcp, mit einem Health-Check unter /healthz. Zwei Bearer-Tokens: Das Lese-Token erhält die Lese-Tools, das Schreib-Token schaltet zusätzlich die Schreib-Tools frei, sodass ein durchgesickertes Lese-Token niemals jemanden anschreiben kann. wazap weigert sich, eine Nicht-Loopback-Adresse ohne Lese-Token zu binden.

Selbst gehostet

Betreiben Sie wazap auf einem eigenen Server, wenn der Agent nicht auf Ihrem Laptop läuft: einem anderen Rechner, einem VPS, der Infrastruktur eines Kunden. Die Sitzung bleibt auf diesem Server; nichts läuft über einen Dritten.

Mit systemd

npm install -g wazap-mcp
sudo useradd --system --home /var/lib/wazap --create-home wazap
sudo -u wazap WAZAP_DATA_DIR=/var/lib/wazap wazap login --phone +15550100   # pairing code works over SSH
sudo -u wazap tee /var/lib/wazap/.env >/dev/null <<END
WAZAP_READ_TOKEN=$(openssl rand -hex 32)
WAZAP_WRITE_TOKEN=$(openssl rand -hex 32)
END
sudo curl -fsSL https://raw.githubusercontent.com/razvangirgiz/wazap/main/deploy/wazap.service -o /etc/systemd/system/wazap.service
sudo systemctl enable --now wazap
curl -s http://127.0.0.1:8766/healthz

Die Unit bindet nur Loopback. Setzen Sie TLS davor mit der zweizeiligen deploy/Caddyfile (caddy run --config deploy/Caddyfile nach dem Bearbeiten des Hostnamens) oder einem beliebigen Reverse-Proxy, und richten Sie den Client dann auf https://your-host/mcp mit Authorization: Bearer <Lese- oder Schreib-Token> aus.

Mit Docker

git clone https://github.com/razvangirgiz/wazap && cd wazap
printf 'WAZAP_READ_TOKEN=%s\nWAZAP_WRITE_TOKEN=%s\n' $(openssl rand -hex 32) $(openssl rand -hex 32) > .env
docker compose run --rm wazap login --phone +15550100   # once; the session lands in the wazap-data volume
docker compose up -d
curl -s http://127.0.0.1:8766/healthz

Der Container veröffentlicht 8766 nur auf Loopback; fügen Sie denselben TLS-Proxy davor hinzu. Ein Upgrade ist git pull && docker compose up -d --build; das Volume behält die Sitzung.

Welche Clients darauf zugreifen können

Claude Code, Claude Desktop, Cursor, Codex, VS Code und jeder Client mit einem Feld „MCP-URL + Header" verbinden sich mit dem Bearer-Token. claude.ai-Connectors erfordern OAuth statt eines statischen Tokens und können daher noch kein selbst gehostetes wazap verwenden. Behalten Sie das Lese-Token in Clients, die nur lesen müssen; geben Sie das Schreib-Token bewusst heraus.

Einstellungen

Variable

Standard

Bedeutung

WAZAP_DATA_DIR

~/.wazap

Wo alles gespeichert wird.

WAZAP_READ_ONLY

0

Die Schreib-Tools nicht registrieren.

WAZAP_SYNC_FULL_HISTORY

0

WhatsApp um eine vollständigere Verlaufssynchronisierung bitten.

WAZAP_PERSIST_HISTORY

1

Chats und Nachrichten über Neustarts hinweg behalten.

WAZAP_RATE_LIMIT

20

Schreib-Tool-Aufrufe pro Minute; 0 deaktiviert.

WAZAP_TRANSPORT

stdio

stdio oder http.

WAZAP_HOST / WAZAP_PORT

127.0.0.1 / 8766

HTTP-Bind-Adresse.

WAZAP_READ_TOKEN / WAZAP_WRITE_TOKEN

nicht gesetzt

HTTP-Bearer-Tokens.

WAZAP_NO_UPDATE_CHECK

0

1 verhindert, dass status npm nach einer neueren Version fragt.

Flags schlagen Umgebungsvariablen, die wiederum <data-dir>/.env schlagen.

Bekannte Einschränkungen

  • Inoffiziell. Baileys hat das WhatsApp-Multi-Geräte-Protokoll per Reverse Engineering erschlossen. Dies ist nicht die WhatsApp Business API, und Meta unterstützt es nicht.

  • Sperrrisiko ist real. Automatisiertes Senden, Massen-Nachrichten oder alles, was ein Mensch nicht plausibel tippen würde, kann zur Sperrung der Nummer führen, und das ist von hier aus nicht rückgängig zu machen. Die Ratenbegrenzung hilft; sie ist keine Garantie.

  • Medienschlüssel laufen ab. WhatsApp entfernt alte Anhänge von seinen Servern, daher gibt download_media bei einer alten Nachricht MEDIA_UNAVAILABLE zurück.

  • Der Verlauf ist das, was das Telefon synchronisiert. wazap sieht den Verlauf, den WhatsApp dem verknüpften Gerät übergibt, nicht Ihr vollständiges Telefonarchiv. read_messages mit before fragt nach mehr, innerhalb dessen, was WhatsApp noch aufbewahrt.

  • @lid-IDs. Neuere Konten werden über eine Datenschutz-ID statt einer Telefonnummer adressiert. wazap übersetzt sie zurück in Telefonnummern, wenn es die Zuordnung gelernt hat, und reicht die @lid durch, wenn nicht.

  • Ihr Telefon muss erreichbar bleiben. Ein verknüpftes Gerät empfängt nicht mehr, sobald das Telefon lange genug offline war; get_status sagt das in hint.

Entwicklung

npm install
npm run typecheck
npm test                       # builds, then runs node --test
node test/smoke-stdio.mjs      # drives the built binary over MCP stdio
npm run dev -- status          # run from source with tsx

npm test benötigt keine WhatsApp-Sitzung. Der Stdio-Smoke-Test startet die gebaute Binärdatei mit einem Wegwerf-Datenverzeichnis und prüft, ob eine nicht verknüpfte Installation weiterhin initialize, tools/list und get_status beantwortet.

MIT-lizenziert.

Install Server
A
license - permissive license
A
quality
A
maintenance

Maintenance

Maintainers
Response time
0dRelease cycle
8Releases (12mo)
Commit activity

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

  • F
    license
    Not graded
    quality
    C
    maintenance
    WhatsApp MCP server that exposes messaging, groups, contacts, and profile management as tools and resources for AI agents, supporting Baileys and Meta Cloud API.
    19
  • A
    license
    Not graded
    quality
    A
    maintenance
    A self-hosted WhatsApp bridge that exposes a stdio MCP server with ~20 tools for reading conversations, sending messages, managing groups, contacts, and aliases, enabling AI agents to operate WhatsApp directly.
    2
    MIT
  • A
    license
    Not graded
    quality
    C
    maintenance
    MCP server that connects AI agents to WhatsApp using the multi-device API, enabling messaging, group management, and more as a regular user.
    15
    MIT
  • A
    license
    Not graded
    quality
    A
    maintenance
    A native MCP server for SocialMate that gives your AI a WhatsApp, enabling it to send and read messages, manage contacts and groups, and more through 44 tools.
    83
    1
    MIT

View all related MCP servers

Related MCP Connectors

  • Free public MCP for AI agents — 193 tools, 44 workflows. No API key.

  • Hosted MCP with 91 agent tools: X, domains, SEO, Maps, Trends, Search, YouTube, TikTok, and more.

  • Managed LinkedIn MCP server for AI agents: search, connect, message and enrich on accounts you own.

View all MCP Connectors

Latest Blog Posts

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/razvangirgiz/wazap'

If you have feedback or need assistance with the MCP directory API, please join our Discord server