plugins/sjawhar/skills/whatsapp/SKILL.md
Use when reading WhatsApp messages, searching conversations, sending messages, listing chats, or interacting with WhatsApp workspaces
npx skillsauth add sjawhar/dotfiles whatsappInstall this skill globally with one command. Works with Claude Code, Cursor, and Windsurf.
3 of 9 scanners reported clean
Some scanners were skipped, did not run, or reported a non-clean status. Review each row below.
Interact with WhatsApp via the whatsapp-mcp server. Use skill_mcp(mcp_name="whatsapp", ...) to invoke tools.
The WhatsApp MCP runs as a persistent HTTP server. It's configured in your environment:
WHATSAPP_MCP_URL — URL of the WhatsApp MCP server (e.g., http://ghost-wispr.tailb86685.ts.net:3456/mcp)WHATSAPP_MCP_SECRET — Bearer token for authenticationFor first-time setup of the daemon, see the deployment docs.
For local development or testing, you can run the server directly in stdio mode:
npx --yes @sjawhar/whatsapp-mcp
First run requires QR code pairing — run the command in a terminal, scan with WhatsApp > Linked Devices.
| Tool | Purpose |
| ------------------------ | ---------------------------------------------------- |
| list_chats | List chats sorted by last activity |
| get_chat | Get chat details with recent messages |
| list_messages | Get messages from a chat (most recent first) |
| search_messages | Substring search across messages |
| search_contacts | Find contacts by name or phone number |
| get_message_context | Get messages surrounding a specific message |
| get_my_profile | Get authenticated user's phone number and JID |
| update_contact | Set display name for a contact |
| sync_contacts | Import phone contacts from VCF file or string |
| send_message | Send text message (requires confirmed: true) |
| send_file | Send file (requires confirmed: true, path restricted to uploads dir) |
| delete_message | Delete a message (requires confirmed: true) |
| delete_chat | Delete entire chat (requires confirmed: true) |
| download_media | Download media from a message to local disk |
| transcribe_voice_note | Transcribe voice note via Whisper API |
| resolve_contacts | Resolve unknown LID contacts to phone numbers + sync names |
Destructive tools (send_message, send_file, delete_message, delete_chat) require a two-step confirmation:
confirmed: false (default) → returns previewconfirmed: true → executes the actionskill_mcp(mcp_name="whatsapp", tool_name="list_chats", arguments='{"limit": 10}')
skill_mcp(mcp_name="whatsapp", tool_name="search_messages", arguments='{"query": "meeting tomorrow"}')
skill_mcp(mcp_name="whatsapp", tool_name="send_message", arguments='{"jid": "[email protected]", "text": "Hello!", "confirmed": false}')
skill_mcp(mcp_name="whatsapp", tool_name="download_media", arguments='{"jid": "[email protected]", "messageId": "ABC123"}')
[email protected] (phone number without +)[email protected]search_contacts to find JIDs by nameIf contacts show as phone numbers instead of names, sync them from Google Contacts:
google-workspace skillgws contacts exportsync_contacts via the vcf_content parameter:
skill_mcp(mcp_name="whatsapp", tool_name="sync_contacts", arguments='{"vcf_content": "<vcard data>"}')
exactMatches, fuzzyMatches, and totalUpdatedsend_file only allows files within the configured uploads directorydownload_media sanitizes filenames to prevent path traversalWHISPER_API_URL and WHISPER_API_KEY env varsThis uses the unofficial WhatsApp Web API (Baileys). WhatsApp may ban accounts using unofficial clients. Use a dedicated number you can afford to lose.
development
Use when searching flights, hotels, or rental cars; comparing fares across flexible dates; discovering cheap destinations from a fixed origin; or hunting hidden-city ticketing deals. Trigger on multi-city itineraries, fare calendars, "where can I fly cheaply", price-sensitive trip planning, or any time the user wants a sanity-check against Google Flights pricing — Skiplagged surfaces hidden-city deals other engines deliberately hide.
development
Search the web via Ceramic Search (lexical/keyword-based). Use when looking up current events, recent news, time-sensitive facts, specific people/products/companies, technical docs, or any topic requiring fresh web results. Triggers on "search the web", "look up", "find recent", "latest news", "current", or when built-in knowledge is likely stale.
tools
Watch CI status, fix failures, and merge when green
development
Use when voice mode is active to format responses for listening rather than reading. Triggers on voice interaction, audio output, hands-free mode.