Communication
whatsapp - Claude MCP Skill
Send and receive WhatsApp messages via the unofficial linked-device client pywhats (pip install pywhats) — pair with QR, send text/images, group chat, read receipts, presence/typing, and a long-running JSON event stream. Use when the user wants to script WhatsApp as a linked companion device (like WhatsApp Web), pair a device, send a WhatsApp from Python, or listen for inbound messages. Triggers: 'whatsapp', 'send whatsapp', 'pair whatsapp', 'pywhats', 'linked device', 'whatsapp web client'. NOT the official WhatsApp Business/Cloud API.
SEO Guide: Enhance your AI agent with the whatsapp tool. This Model Context Protocol (MCP) server allows Claude Desktop and other LLMs to send and receive whatsapp messages via the unofficial linked-device client pywhats (pip install pywh... Download and configure this skill to unlock new capabilities for your AI workflow.
Documentation
SKILL.md# WhatsApp (pywhats) Drive a WhatsApp account as a **linked companion device** (like WhatsApp Web) from async Python via [`pywhats`](https://pypi.org/project/pywhats/) (pre-alpha, text/image only). This is an **unofficial** multi-device client — **not** the official WhatsApp Business / Cloud API. CLI entrypoint: `scripts/wa.py` (auto-bootstraps a managed venv on first run). ## Mental model - **Pairing = one-time QR scan.** `wa.py pair` shows an ASCII QR; scan it in WhatsApp → Linked Devices. Credentials persist to `$PYWHATS_HOME/<session>.session` (+ `.signal.db`). - **Resuming = silent.** Later commands reconnect with the same session — no QR. - **JIDs address chats.** Bare phone `15550001234` → `15550001234@s.whatsapp.net`; groups use `...@g.us`. - **Events are how you receive.** `wa.py listen` prints one JSON object per event. ## ⚠️ Never bare-await Client calls inside a handler Event handlers run **inline on the receive loop**. Awaiting `send_*`, `mark_read`, `get_group_info`, `download_media`, etc. inside a handler **deadlocks** the connection. Always `asyncio.create_task(...)`. The `listen` subcommand already does this for `--read`. ## Commands ```bash scripts/wa.py pair # one-time QR pair scripts/wa.py send-text 15550001234 "hello" # 1:1 text scripts/wa.py send-image 15550001234 photo.jpg --caption hi # 1:1 image scripts/wa.py group-info 120363000000000000@g.us # group metadata JSON scripts/wa.py group-send 120363000000000000@g.us "hi all" # group text scripts/wa.py mark-read 15550001234 MSGID [--sender JID] # blue ticks scripts/wa.py presence available # global presence scripts/wa.py typing 15550001234 composing [--media audio] # typing indicator scripts/wa.py listen --read --events message,receipt # JSONL event stream scripts/wa.py --session work send-text 15550001234 "hi" # named session ``` | Command | Behavior | |---------|----------| | `pair` | Fresh link via ASCII QR; idempotent if already paired | | `send-text <to> <text>` | Send 1:1 text; print message id | | `send-image <to> <path> [--caption C]` | Send image (jpg/png/webp, ≤16MB); print id | | `group-info <gid>` | Print group JSON (subject, owner, participants, …) | | `group-send <gid> <text>` | Resolve members then send group text; print id | | `mark-read <chat> <ids...>` | Blue-tick; `--sender` for groups | | `presence <available\|unavailable>` | Global presence | | `typing <to> <composing\|paused>` | Chat presence; optional `--media audio` | | `listen` | Long-running JSON lines; `--read`, `--events`, `--subscribe JID` (required for presence events) | Global: `--session NAME` (default `default`, or env `PYWHATS_SESSION`) — goes **before** the subcommand: `wa.py --session work pair`. ## Sessions / multi-account ``` $PYWHATS_HOME/ # default: ~/.pywhats venv/ # managed Python + pywhats default.session # --session default default.session.signal.db work.session # --session work ``` Override home with `PYWHATS_HOME`. Unpaired / logged-out sessions print a clear message to re-run `wa.py --session <name> pair`. If `pair` reports the device was logged out right after scanning, that is WhatsApp device-churn reaping, not a failure of the skill — the dead session is deleted automatically; follow the recovery steps it prints (remove linked devices, wait 15–20 min, pair once). ## Full reference [references/api.md](references/api.md) — every `Client` method, every event payload, JID construction, and the `download_media` note.
Signals
Information
- Repository
- sanjay3290/ai-skills
- Author
- sanjay3290
- Last Sync
- 9/4/2026
- Repo Updated
- 9/3/2026
- Created
- 7/10/2026
Reviews (0)
No reviews yet. Be the first to review this skill!
Related Skills
upgrade-nodejs
Upgrading Bun's Self-Reported Node.js Version
cursorrules
CrewAI Development Rules
cn-check
Install and run the Continue CLI (`cn`) to execute AI agent checks on local code changes. Use when asked to "run checks", "lint with AI", "review my changes with cn", or set up Continue CI locally.
firecrawl-build-search
Integrate Firecrawl `/search` into product code and agent workflows. Use when an app needs discovery before extraction, when the feature starts with a query instead of a URL, or when the system should search the web and optionally hydrate result content.
Related Guides
Bear Notes Claude Skill: Your AI-Powered Note-Taking Assistant
Learn how to use the bear-notes Claude skill. Complete guide with installation instructions and examples.
OpenAI Whisper API Claude Skill: Complete Guide to AI-Powered Audio Transcription
Learn how to use the openai-whisper-api Claude skill. Complete guide with installation instructions and examples.
Mastering the Oracle CLI: A Complete Guide to the Claude Skill for Database Professionals
Learn how to use the oracle Claude skill. Complete guide with installation instructions and examples.