wsp-mcp
Your personal WhatsApp in Claude Code over MCP: local SQLite mirror, local voice-note transcription, sending gated by an allowlist and a confirmation dialog (macOS)
Install / Use
claude mcp add le-quesne -- npx -y github:le-quesne/wsp-mcpIf the server publishes to npm under a different name, use that package instead — check the repo README.
MCP Server
Model Context Protocol server
Quality Score
Category
Data & AnalyticsSupported Platforms
Our assessment of wsp-mcp
wsp-mcp scores 83/100 on our quality scale, 483rd of 593 Data & Analytics skills we index.
Its MCP Server is 16 KB long, well organised into 18 sections with 6 code examples: a thorough specification that gives an agent plenty to work with.
It has 3 GitHub stars, so there is little community track record yet; judge it on its content.
Maintenance, license and trust
- The repository was last updated 11 days ago, so wsp-mcp is actively maintained.
- It is released under the MIT license, a permissive license that allows use, modification and commercial use with attribution.
- Its trust signals score 92/100, with 1 caution from licensing, adoption, age or documentation. These come from repository metadata, not a code audit — read the skill file before letting an agent act on it.
wsp-mcp compared with similar skills
All 4 of these similar skills score higher than wsp-mcp; compare them before choosing.
| Skill | Score | Stars | Updated | Format |
|---|---|---|---|---|
| wsp-mcp (this skill)by le-quesne | 83 | 3 | 11d ago | MCP Server |
| claude-memby thedotmack | 100 | 102.1k | today | CLAUDE.md |
| Agent-Reachby Panniantong | 100 | 100.5k | 1d ago | CLAUDE.md |
| headroomby headroomlabs-ai | 100 | 77.0k | today | CLAUDE.md |
| CowAgentby zhayujie | 100 | 47.5k | today | CLAUDE.md |
Frequently asked questions
- How do I install wsp-mcp?
- Run
claude mcp add le-quesne -- npx -y github:le-quesne/wsp-mcp. The install tabs above show the steps for each supported agent. - Which AI agents does wsp-mcp work with?
- It is written for Claude Code and Claude Desktop, as a MCP Server file. Other agents that read the same format can often use it too.
- Is wsp-mcp safe to use?
- It is MIT-licensed and scores 92/100 on trust signals. Skills are instructions an agent will follow, so read the file before installing it and do not approve commands you do not understand.
- Is wsp-mcp still maintained?
- The repository was last updated 11 days ago, so wsp-mcp is actively maintained.
Skill content
View source on GitHub[!WARNING] Not affiliated with WhatsApp or Meta. It connects through Baileys, an unofficial client of the WhatsApp Web protocol, which goes against WhatsApp's terms. Reading is low-risk; automated or bulk sending can get a number banned. Use it with your own account, at your own risk.
What you can ask
- "What did the family group decide about Saturday?"
- "Summarize what I missed in the work chats since yesterday."
- "Find the message where Ana sent the apartment address."
- "What does Pedro's voice note say?"
- "Tell Ana I'll be there at 8." It goes out from your number right away, or after your click if you turn that on, written the way you'd write it to Ana.
Why this one
- Your messages stay on your Mac. They live in a local SQLite file only your user can read, and voice notes are transcribed on-device with whisper.cpp. Claude only sees what a tool returns to it.
- Sends like a person, not a bot. Messages to different people go out at least 15 s apart, Claude is told never to repeat a text or work through a list, and the bridge warns it when the same text already went to other chats. See Avoiding a ban.
- Writes like you.
pnpm run voicelearns how you text from your own messages: length, how you split a thought into several messages, punctuation, laughter, emoji, your words and the ones you never use, and how all of that changes from chat to chat. Claude reads it before writing, and anything that doesn't sound like you is sent back to rewrite instead of going out. See Writing like you. - Locks when you want them. A list of who Claude may write to, and a dialog that asks you before every message, are one setting away. Both live in the bridge, outside Claude, so they hold even with Claude Code's permission prompts turned off.
- Ready for prompt injection. Anyone can message you, so every read tells the model that message text is data, not instructions.
- Quiet. It doesn't show you as online and doesn't send read receipts. Your phone keeps its notifications.
- Your whole history, searchable. It imports your history when you link it, keeps syncing, and search ignores accents and covers what was said in voice notes.
Quick start
You need macOS, Node 24+, pnpm, Claude Code and, for voice notes, Homebrew.
Ask Claude Code to install it
Paste this into Claude Code, with your number:
Install the WhatsApp MCP from https://github.com/le-quesne/wsp-mcp: clone it into ~/wsp-mcp and run
`pnpm run setup --yes --phone +56912345678` in the background (it takes a few minutes). As soon as
the output shows a PAIRING CODE, tell me the code and wait while I type it on my phone.
If Node 24+ or pnpm is missing, install it first.
When Claude shows you the code, open WhatsApp on your phone → Settings → Linked devices → Link a device → Link with phone number instead, and type it. When setup finishes, restart Claude Code.
--yes accepts every step: ffmpeg and whisper.cpp, the speech model (about 870 MB), the background
bridge, the Claude Code registration and the menu bar icon. To choose step by step, use a terminal.
Or in a terminal
git clone https://github.com/le-quesne/wsp-mcp.git
cd wsp-mcp
pnpm run setup
Setup installs the dependencies, offers ffmpeg, whisper.cpp and the speech model, asks for your number to link your phone with a code (press Enter to scan a QR code instead), keeps the bridge running in the background, and registers the server with Claude Code. Each step checks first, so it's safe to run again.
Then
Claude can send from your number right away, without asking: read Avoiding a ban
first, and see Sending to restrict it.
When something doesn't work, pnpm run doctor checks every piece and tells you the command that fixes it.
How it works
WhatsApp ⇄ bridge (linked device, Baileys) ──writes──▶ ~/.whatsapp-mcp/messages.db (SQLite)
▲ │ reads
└──── Unix socket (send only) ──── MCP server ◀┘ ◀── Claude Code
- The bridge (
src/bridge.ts) links as a device, like WhatsApp Web, imports your history and keeps syncing. It's the only part that talks to WhatsApp, and the only one that can send. - The MCP server (
src/mcp.ts) reads the database and asks the bridge to send or download.
Node 24 runs the TypeScript directly: there's no build step.
Tools
| Tool | What it does |
| --- | --- |
| status | Whether the bridge is connected, how much history is stored, and who sending is allowed to |
| list_chats | Chats by latest activity, with a preview of the last message; direct, groups or both |
| search_contacts | People and groups by name or phone digits |
| get_messages | A conversation (or every chat) in a time window, in order |
| search_messages | Full-text search across chats, voice notes included |
| get_media | The photo, voice note, video or document behind a message: photos as images, audio and video as transcripts |
| style_guide | How you write, in general and in a given chat, with your own recent messages there to imitate |
| send_message | Text to a chat, as one or several short messages with "typing…" before each, checked against your style and paced so it doesn't look like a bot |
| send_file | A video, image or document to a chat, with the same pacing (and the caption checked the same way) |
Setting it up by hand
pnpm run setup does all of this. Here it is step by step, if you'd rather see each part.
-
Install and link your phone, in a terminal window:
pnpm install pnpm bridgeScan the QR code: WhatsApp → Settings → Linked devices → Link a device. Or use a pairing code instead:
pnpm bridge --phone 5491112345678. Then wait while it printsHistory sync: …lines (the full import can take a few minutes). -
Keep it running. Either leave that terminal open, or run it in the background:
pnpm agent:install # launchd, starts at login, restarts on crash pnpm agent:status pnpm agent:uninstallStop the terminal bridge first (Ctrl+C): only one bridge can hold the session. The agent is pinned to the current
nodebinary; reinstall it after switching Node versions. -
Menu bar icon (optional, needs the Xcode command line tools):
pnpm menubar:install. A speech bubble with a dot: green = connected (↓ 141kwhile history imports), orange = connecting, red = bridge not running. Click it for counts, last message, data folder.build/whatsapp-status --checkprints the same in the terminal. Remove:pnpm menubar:uninstall. -
Register with Claude Code, from the repo folder:
claude mcp add whatsapp --scope user -- node --disable-warning=ExperimentalWarning "$PWD/src/mcp.ts"
Photos, audio, video and documents
Message lines show (media id: …); get_media downloads that file into ~/.whatsapp-mcp/media:
- Photos come back as images Claude can see.
- Voice notes, audio, video are transcribed locally with whisper.cpp
(
brew install whisper-cpp ffmpeg, model~/.cache/whisper-cpp/ggml-large-v3-turbo-q8_0.bin, override withWA_WHISPER_MODEL). Videos also return three still frames. - Documents are saved and their path returned (Claude opens PDFs with its Read tool).
Incoming voice notes (≤ 10 min) are transcribed as they arrive, so search_messages finds what was
said in them; turn that off with "autoTranscribe": false in config.json.
The bridge keeps each message's download keys from now on. Messages imported before that have none:
get_media then asks your phone to resend that stretch of the chat (~15–40 s), which only works if
the phone still has the file. A message deleted "for everyone" also deletes its downloaded file.
Sending
On by default: Claude can send text and files to anyone, from your number, without asking. Four
settings in ~/.whatsapp-mcp/config.json change that (the file is re-read on every send):
| Setting | Default | What it does |
| --- | --- | --- |
| allowedRecipients | ["*"] | Who Claude may write to: phone numbers with country code (any formatting), exact chat ids for groups, or "*" for anyone. [] turns sending off. |
| confirmBeforeSending | false | true shows a macOS dialog with the recipient and the full text for every message. Only clicking Send sends; Return and Escape cancel, and it gives up after 2 minutes. |
| minSecondsBetweenRecipients | 15 | A message to someone other than the last recipient waits until this many seconds after the previous send. 0 turns it off. |
| autoTranscribe | true | Transcribes incoming voice notes as they arrive (see above). |
All of them are enforced in the bridge, so they hold even when Claude Code runs with permission prompts off. To approve every message and limit who gets them:
{ "allowedRecipients": ["5491112345678", "120363000000000000@g.us"], "confirmBeforeSending": true }
send_message sends text (max 2000 characters). send_file sends a local file with an optional
caption: videos as playable videos (over 16 MB they're compressed to 720p first, which needs
ffmpeg), anything else as a document under 16 MB.
Writing like you
Whatever Claude sends goes out as you, so it should read like you wrote it.
pnpm run voice # learn your style from your own messages (local, takes seconds)
pnpm run voice --narrative # also have Claude read a sample of your chats and write your archetype
pnpm run voice measures your messages against what your contacts write and saves the result to
~/.whatsapp-mcp/voice.json:
- Shape: how long your messages are, how many you send in a row, how often a single word is enough.
- Punctuation and marks: ¿ and ¡, final periods, "!", stretched words (sooo), accents, emoji, laughter.
- Words: the short replies you use most, the words that are typically yours, and the ones your contacts use and you never do (q, porfa, jeje… whatever it is for you).
- Each chat: the same measures per chat, plus the words you use everywhere else but never there. That's how it learns you swear with friends and never with a client, or say estimado only to customers.
--narrative adds ~/.whatsapp-mcp/voice.md: Claude Code reads a random sample of your conversations
(about 1,500 of your messages, with what the other side said) and writes your archetype: rules, how you
write to each kind of person, examples in your own words. That sample goes to Anthropic like anything
else Claude reads, and it uses your Claude plan (--model opus for a deeper read; Sonnet by default).
Read the file and fix anything that isn't you: Claude reads it before writing as you.
Then, in Claude Code:
style_guidegiv
Truncated for display — read the full file on GitHub.
Related Skills
claude-mem
102.1kPersistent Context Across Sessions for Every Agent – Captures everything your agent does during sessions, compresses it with AI, and injects relevant context back into future sessions. Works with Claude Code, OpenClaw, Codex, Gemini, Hermes, Copilot, OpenCode + More
Agent-Reach
100.5kGive your AI agent eyes to see the entire internet. Read & search Twitter, Reddit, YouTube, GitHub, Bilibili, XiaoHongShu — one CLI, zero API fees.
headroom
77.0kCompress tool outputs, logs, files, and RAG chunks before they reach the LLM. 20% fewer tokens for coding agents, 60-95% fewer tokens for JSON, same answers. Library, proxy, MCP server.
CowAgent
47.5kOpen-source personal AI assistant & Agent Harness. Plans tasks, runs tools and skills, self-evolves with memory and knowledge. Multi-agent, multi-model, multi-channel. Lightweight, extensible, one-line install.
Languages
Trust signals
From repository metadata: license, adoption, age and documentation. Not a code audit — see the Safety scan above for what the skill file itself contains.
