WhatsApp MCP

io.github.adelaidasofia由 GitHub 帳號 adelaidasofia 發布v0.1.1更新於 Oct 24, 2026

WhatsApp MCP. SQLCipher-encrypted, scrubber-CI-gated, draft-and-confirm sends, voice transcription.

已驗證STDIO僅桌面效率與工作流溝通與協作

概覽

AI 產生的概覽

一個本機 WhatsApp MCP 伺服器,讓助理在草稿加確認的安全機制下讀取、搜尋並傳送 WhatsApp 訊息。

可以做什麼
透過本機 Go 橋接程式對接 WhatsApp Web 多裝置協定,並由 Python MCP 層對外提供 11 個工具。助理可以讀取聊天、訊息與聯絡人,執行忽略重音、容忍拼字錯誤的搜尋,查看正在輸入、線上等狀態,並傳送文字、表情回應與引用回覆。傳送必須在草稿與送出之間經過明確的 confirm_send 步驟。語音訊息可用 whisper.cpp 在本機轉寫,也能從 Obsidian 儲存庫中拉取相符的 CRM 內容。
適用情境
適合希望助理在本機操作自己 WhatsApp 帳號的情境,例如搜尋對話、整理串文,或起草由你確認後再送出的回覆。也適合重視本機儲存、靜態加密與稽核紀錄,而不想使用雲端服務的使用者。
執行需求
僅限桌面端,以 stdio 方式在本機執行。需要 Go 橋接程式(預先編譯版本,或以 Go 1.26+ 與 C 工具鏈自行建置)、Python 3.11+ 與 uv,以及與手機進行一次 QR 碼或配對碼綁定。選用的語音轉寫需要 FFmpeg 與 whisper.cpp;當 WHATSAPP_WHISPER_BACKEND 為 openai-api 時需要 WHATSAPP_WHISPER_API_KEY 密鑰。設定使用 WHATSAPP_BRIDGE_HOST、WHATSAPP_BRIDGE_PORT、WHATSAPP_DB_KEY、WHATSAPP_VAULT_CRM_PATH 等變數。
安裝前請注意
它會接觸你全部的 WhatsApp 訊息流,應視為高信任元件。它可以傳送訊息、表情回應與回覆,但必須經過 confirm_send 步驟。資料庫密鑰存放在平台密鑰儲存區;密鑰遺失或被覆寫,或設定 WHATSAPP_DB_KEY,可能導致已存訊息永久無法解密。選用的 OpenAI Whisper 後端會把語音訊息傳送給第三方,並需要 WHATSAPP_WHISPER_API_KEY。除非設定 MYCELIUM_NO_PING=1,否則首次載入會送出一次匿名安裝訊號。使用本工具可能違反 WhatsApp 的服務條款。

安裝

在 SourceWeft 中

  1. 開啟 儀表板中的 WhatsApp MCP,將其新增到工作區。
  2. 為需要使用其工具的對話啟用該服務。

Desktop only,透過 STDIO。 STDIO 服務會啟動本機處理程序,因此需要 SourceWeft 桌面主機。

其他 MCP 客戶端

參照 儲存庫 中的啟動說明。

README

whatsapp-mcp

[License] [GitHub stars] [Last commit] [Open issues] [PyPI version] [PyPI downloads] [Built by Mycelium AI]

A WhatsApp MCP server for Claude, built directly on whatsmeow. Encrypted at rest, prompt-injection-scrubbed, draft-and-confirm on every send, full audit trail, daily CI security gates. Actively maintained.

Why this one?

The most-starred WhatsApp MCP (lharries/whatsapp-mcp, 5.6K stars) is the architectural reference for this pattern, but has not shipped since July 2025 and leaves the lethal-trifecta problem entirely to the user. This implementation closes the gaps:

CanonicalThis implementation
Last shippedJuly 2025Active
DB encryptionPlain SQLiteSQLCipher with key in the platform secret store (macOS Keychain / Windows Credential Manager / libsecret)
Prompt-injection scrubberNoneEvery inbound message
Send safetyFires immediatelyMandatory confirm_send between draft and delivery
Audit logNoneEvery tool call, 30-day retention
Voice notesNot transcribedwhisper.cpp local, language detected per note, turned on with one command
LID alias resolutionOpen issue cluster upstreamShipped, with backfill migration for legacy threads
CI securityNonegovulncheck + pip-audit + Dependabot, daily

Not a fork. The Go bridge is built directly against whatsmeow; the Python MCP layer and SQLite schema are original. Other implementations (lharries, LukasHaas, verygoodplugins) were read as reference only.

What this gives you

Claude can:

  • Read your WhatsApp chats, messages, and contacts
  • Search messages with accent-insensitive, typo-tolerant matching
  • Transcribe voice notes locally via whisper.cpp (language detected per note). Off until you say yes; Claude offers it once, and python3 whatsapp-mcp-server/enable_transcription.py turns it on in one step
  • Resolve LID (Linked IDentifier) names instead of numeric placeholders
  • Send text messages, reactions, and reply-quotes, with a mandatory confirm_send step between draft and delivery
  • Pull matching CRM context from your Obsidian vault when reading a chat
  • See only prompt-injection-scrubbed message text, never raw adversarial input

Everything runs locally on your machine. No cloud sync. No telemetry. Optional OpenAI Whisper backend is opt-in, off by default.

Architecture

Two components, both local:

  • whatsapp-bridge/ (Go). Binds to 127.0.0.1 only. Wraps whatsmeow for the WhatsApp Web multidevice protocol. Owns SQLite persistence with SQLCipher encryption. Handles QR and pairing-code auth (live-refreshing terminal QR with Windows-safe rendering, plus a headless auth API — GET /api/auth/qr, POST /api/auth/pair-phone, POST /api/auth/reconnect — so a GUI or supervisor can drive pairing without a terminal), media up/download, session recovery from StreamReplaced conflicts, call history capture. Exposes a REST API the Python MCP layer consumes.
  • whatsapp-mcp-server/ (Python, FastMCP). Consumes the Go bridge REST API. Exposes 11 MCP tools to Claude: full read surface (chats, messages, contacts), accent-insensitive search, presence (typing, online, mark-read), and text-send + reactions + reply-quotes with mandatory confirm_send. Runs via uv and stdio transport.

Install

Open Claude Code, paste:

/plugin marketplace add adelaidasofia/whatsapp-mcp/plugin install whatsapp-mcp@whatsapp-mcp

This installs the Python MCP server side. The Go bridge still needs the one-time QR pairing flow with your phone — see the legacy install block below for those steps.

Manual install (full Go bridge + QR pairing)

See SETUP.md for step-by-step install per OS. In short:

  1. Grab a prebuilt bridge binary from Releases (Windows/macOS/Linux — no compiler needed), or build from source (Go 1.26+ and a C toolchain)
  2. Python 3.11+ and uv for the MCP server layer
  3. Clone this repo; verify with scripts/check_prerequisites.sh (Windows: scripts\check_prerequisites.ps1)
  4. Start the bridge: ./bin/whatsapp-bridge (Windows: .\bin\whatsapp-bridge.exe)
  5. Scan the QR (it refreshes in place — always scan the one on screen), or pair by typed code with --pair-phone +15551234567
  6. Register the MCP in your Claude Code .mcp.json
  7. Restart Claude Code

FFmpeg and whisper.cpp are only needed if you enable voice-note transcription (off by default); enable_transcription.py configures them for you, and installs them with Homebrew on a Mac (SETUP.md step 4).

Configuration

All configurable via environment variables. See .env.example for the full list.

Key variables:

VariableDefaultPurpose
WHATSAPP_BRIDGE_PORT8080Go bridge REST API port
WHATSAPP_DB_PATH$HOME/.claude/whatsapp-mcp/store/messages.dbEncrypted SQLite database
WHATSAPP_MEDIA_PATH$HOME/.claude/whatsapp-mcp/media/Media file storage
WHATSAPP_VAULT_CRM_PATHemptyAbsolute path to your vault CRM folder for auto-injection (e.g., Obsidian 👤 CRM/). When unset, CRM injection is disabled.
WHATSAPP_WHISPER_BACKENDoffoff (zero-config boot), local-cpp (private, needs a whisper model), or openai-api (opt-in)
WHATSAPP_WHISPER_API_KEYemptyRequired only when backend is openai-api
WHATSAPP_WHISPER_MODELlarge-v3-turbowhisper.cpp model name
WHATSAPP_WHISPER_LANGUAGEautoLanguage passed to whisper. auto detects it per voice note; a fixed code (es, en) forces every note through it
WHATSAPP_KEEP_VOICE_AUDIOtrueWhile transcription is off, save each incoming voice note's audio (voice notes only, never view-once or disappearing ones) under WHATSAPP_MEDIA_PATH, so turning transcription on later also covers notes older than WhatsApp's ~14 days. Set false to stop
WHATSAPP_SCRUB_PROMPT_INJECTIONtrueStrip known prompt-injection patterns from incoming messages before Claude sees them
WHATSAPP_AUDIT_LOGtrueLog every tool call to audit.log
WHATSAPP_ENCRYPT_DBtrueEnable SQLCipher DB encryption; key in the platform secret store (macOS Keychain / Windows Credential Manager / libsecret)
WHATSAPP_DB_KEYemptyExplicit 64-hex-char SQLCipher key override (skips the platform store). Escape hatch for headless/CI/custom secret managers, and the recovery path when the secret store cannot be read — see below

The DB key and WHATSAPP_DB_KEY

With WHATSAPP_ENCRYPT_DB=true (the default), the bridge encrypts the message store with a 256-bit SQLCipher key kept in the platform secret store. The key lifecycle is deliberately conservative, because a wrong key silently orphans every stored message:

  • A fresh key is minted only when the secret store definitively answers "no such item" (macOS errSecItemNotFound, Windows ERROR_NOT_FOUND, libsecret clean miss) and no non-empty store database exists yet.
  • Any other failed read — locked keychain, no D-Bus session, revoked access — makes the bridge exit with an error instead of minting: the key may still exist, and overwriting it would make the encrypted store permanently undecryptable. The error names the fix (e.g. security unlock-keychain).
  • If the secret store has no key but a populated store database exists, the bridge also refuses to mint and asks you to supply the original key.

WHATSAPP_DB_KEY (64 hex chars = 32 bytes, e.g. openssl rand -hex 32) is the escape hatch for all of these: when set, it is used directly and the platform secret store is never touched. Use it for headless/CI machines, custom secret managers, restoring a store on a new machine, or booting while the platform store is unavailable.

Security

This MCP is the highest-trust component in your Claude stack because every WhatsApp message you receive flows through it. See SECURITY.md for the threat model, tool risk-tier classification, and the full list of hardening decisions.

Short version:

  • Bridge binds to 127.0.0.1 only, never 0.0.0.0
  • SQLite encrypted at rest with SQLCipher; key stored in the platform secret store (macOS Keychain / Windows Credential Manager / libsecret), with an explicit WHATSAPP_DB_KEY escape hatch
  • Every tool call logged to audit.log with 30-day retention
  • Send tools require an explicit confirm_send step between draft and delivery
  • Incoming message text passes through a prompt-injection scrubber before Claude sees it
  • whatsmeow pinned to a specific commit; upgrades require diff review
  • No telemetry, no external API calls by default

Status

v0.1.0, actively maintained.

Shipped: live-refreshing QR (in-place redraw on rotation, Windows-safe rendering, auto fresh batch on expiry) + pairing-code auth (typed 8-char code, Android + iOS) + headless auth API for supervisors, full read surface (chats, messages, contacts), accent-insensitive NFD-normalized search, LID alias resolution with backfill migration for legacy threads, Baileys-store import for one-shot history migration, vault-format markdown export, local whisper.cpp voice transcription, presence (typing, online, mark-read), text-send with mandatory confirm_send, reactions, reply-quotes, prompt-injection scrubber, SQLCipher-encrypted persistence with macOS Keychain key handling, audit log, CI security gates.

Not yet shipped: media-send (image, document), audio-message-send (FFmpeg-Opus path), group broadcast helpers.

See CHANGELOG.md for full history.

MCP Registry

Published on the official MCP Registry under io.github.adelaidasofia/whatsapp-mcp. Two live channels:

  • .mcpb bundle (canonical, recommended) — one-click install in Claude Desktop / Cursor / any MCPB-aware client. Published as a GitHub release artifact at releases/latest/download/whatsapp-mcp.mcpb. The release manifest carries the SHA256 for tamper detection.
  • PyPI package (adelaidasofia-whatsapp-mcp) — historical; available via uvx adelaidasofia-whatsapp-mcp for stdio-installer flows. The unprefixed names (whatsapp-mcp, whatsapp-mcp-server) are taken by unrelated projects on PyPI, hence the username-prefixed namespace.

The verification marker mcp-name: io.github.adelaidasofia/whatsapp-mcp is embedded in this README (HTML comment near the top) so the registry can verify package-to-server ownership at publish time.

Publishing pipeline: built and shipped via the Mycelium MCP publishing pipeline (two-phase: .mcpb bundle build, then gh release + mcp-publisher publish). The same pipeline produced all 16 sibling MCPs in this family.

Related MCPs

Same author, same architecture pattern (FastMCP, draft+confirm on writes where applicable, vault auto-export, MIT):

Telemetry

This plugin sends a single anonymous install signal to myceliumai.co the first time it loads in a Claude Code session on a given machine.

What is sent:

  • Plugin name (e.g. slack-mcp)
  • Plugin version (e.g. 0.1.0)

What is NOT sent:

  • No user identifiers, names, emails, tokens, or API keys
  • No file paths, message content, or anything from your work
  • No IP address is stored after dedup processing

Why: Helps the maintainer know which plugins people actually install, so attention goes to the ones that get used.

Opt out: Set the environment variable MYCELIUM_NO_PING=1 before launching Claude Code. The hook will skip the network call entirely. Already-pinged installs leave a sentinel at ~/.mycelium/onboarded-<plugin> — delete it if you want to reset state.

License

MIT. See LICENSE.

Not affiliated with WhatsApp or Meta

WhatsApp is a trademark of Meta Platforms, Inc. This project is an independent open-source tool that uses WhatsApp's public web-multidevice protocol. Use of this tool may violate WhatsApp's Terms of Service. Use at your own risk. The authors provide no warranty and accept no liability for account suspension, data loss, or other consequences.


Built by Mycelium AI. MIT license.

來源:README.md,提交 7bb1b4f

工具

0
SourceWeft 尚未在沙箱中啟動過該軟體包,因此其工具未知。

版本歷史

1
  1. v0.1.1最新Sep 16, 2026

評分

已滿足適用檢查項的 50%

該評分衡量此收錄條目的完整程度,依據註冊中心條目、端點與公開來源計算得出。它不是對伺服器本身的評價,也不表示伺服器安全或目前可用:可連通性是帶日期的檢查結果,評分也不包含安裝量或使用者評價。

  • 近 30 天內可連通25 分

    請保持端點能夠回應 MCP 握手;SourceWeft 每 30 天探測一次。

  • 已宣告認證方式10 分

    請在註冊中心條目中宣告憑證請求標頭,或保持端點能夠回應探測,以便判定其認證方式。

  • 已列出工具15 分

    請讓伺服器在無憑證時回應 tools/list,或發布可在沙箱中無憑證啟動的軟體包。

  • 描述必需15 分
  • 圖示10 分
  • 文件15 分
  • 授權條款10 分