{"_id":"@elnora-ai/whatsapp","_rev":"2-11a2aae6dfc8a336cdd00230393eedbf","name":"@elnora-ai/whatsapp","dist-tags":{"latest":"0.1.1"},"versions":{"0.1.0":{"name":"@elnora-ai/whatsapp","version":"0.1.0","keywords":["whatsapp","cli","mcp","claude-code","messaging","agents"],"author":{"name":"Elnora AI","email":"opensource@elnora.ai"},"license":"Apache-2.0","_id":"@elnora-ai/whatsapp@0.1.0","maintainers":[{"name":"risto.jamul","email":"risto.jamul@elnora.ai"},{"name":"carmen.kivisild","email":"carmen.kivisild@elnora.ai"}],"homepage":"https://github.com/Elnora-AI/elnora-whatsapp#readme","bugs":{"url":"https://github.com/Elnora-AI/elnora-whatsapp/issues"},"bin":{"wa":"cli/wa.js","elnora-whatsapp":"cli/wa.js"},"dist":{"shasum":"4bf374f12c358e7c3c9df6d51856df0ad48ff5f3","tarball":"https://registry.npmjs.org/@elnora-ai/whatsapp/-/whatsapp-0.1.0.tgz","fileCount":18,"integrity":"sha512-RWfW8gV7xtoisIi+fK7UuR+QolOr60FZiNOaTEsBzeAqV05kCMsC7QeWbr1r4B/w5JaxCTLYSjoKaC077cca9Q==","signatures":[{"sig":"MEQCIB5si5Zbnc/RtdSGJs6LdaiXJfwjxIrlS60LkpcMhNm8AiABYbQM1GMNTKfCHNmfRhitt1NZ9+SYhzDwrRio9FYrPg==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":85852},"engines":{"node":">=22.13.0 <23.0.0 || >=23.4.0"},"gitHead":"c3ec88182867aeaf886e2234929be0bd2ae14d23","scripts":{"test":"node --test \"test/*.test.js\""},"_npmUser":{"name":"carmen.kivisild","email":"carmen.kivisild@elnora.ai"},"repository":{"url":"git+https://github.com/Elnora-AI/elnora-whatsapp.git","type":"git"},"_npmVersion":"11.12.1","description":"WhatsApp CLI + Claude Code plugin — read, search, and send WhatsApp messages from your own paired account, 100% locally.","directories":{},"_nodeVersion":"25.9.0","publishConfig":{"access":"public"},"_hasShrinkwrap":false,"_npmOperationalInternal":{"tmp":"tmp/whatsapp_0.1.0_1784011276012_0.221395760521236","host":"s3://npm-registry-packages-npm-production"}},"0.1.1":{"name":"@elnora-ai/whatsapp","version":"0.1.1","description":"WhatsApp CLI + Claude Code plugin — read, search, and send WhatsApp messages from your own paired account, 100% locally.","license":"Apache-2.0","author":{"name":"Elnora AI","email":"opensource@elnora.ai"},"repository":{"type":"git","url":"git+https://github.com/Elnora-AI/elnora-whatsapp.git"},"homepage":"https://github.com/Elnora-AI/elnora-whatsapp#readme","bugs":{"url":"https://github.com/Elnora-AI/elnora-whatsapp/issues"},"keywords":["whatsapp","cli","mcp","claude-code","messaging","agents"],"bin":{"elnora-whatsapp":"cli/wa.js","wa":"cli/wa.js"},"engines":{"node":">=22.13.0 <23.0.0 || >=23.4.0"},"scripts":{"test":"node --test \"test/*.test.js\""},"publishConfig":{"access":"public"},"gitHead":"c79dd84d4aec1547864885d8e16a700cccffe495","_id":"@elnora-ai/whatsapp@0.1.1","_nodeVersion":"25.9.0","_npmVersion":"11.12.1","dist":{"integrity":"sha512-M2Hb78k8Oe8DxvQonALTMKEYVYUdkHmNYQ4gxceltx3WgPuq9tpOaoMux0s3d5Q0AUYzhMq2UqNGTdTGVn8nvw==","shasum":"47c6bcf24ea9d899a533bd1da44cd765c209cfab","tarball":"https://registry.npmjs.org/@elnora-ai/whatsapp/-/whatsapp-0.1.1.tgz","fileCount":18,"unpackedSize":88493,"signatures":[{"keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U","sig":"MEUCIQDYTNX+csN0JuQnR3MeHXtb7SBMN82m9/JYtzwXJxPfTgIgQYkjuVaJEi+sPQM+L+eY4VQ2Ce56iZf8bOCQiQ7rRGU="}]},"_npmUser":{"name":"carmen.kivisild","email":"carmen.kivisild@elnora.ai"},"directories":{},"maintainers":[{"name":"risto.jamul","email":"risto.jamul@elnora.ai"},{"name":"carmen.kivisild","email":"carmen.kivisild@elnora.ai"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages-npm-production","tmp":"tmp/whatsapp_0.1.1_1784013480519_0.9912002493497067"},"_hasShrinkwrap":false}},"time":{"created":"2026-07-14T06:41:15.843Z","modified":"2026-07-14T07:18:00.815Z","0.1.0":"2026-07-14T06:41:16.147Z","0.1.1":"2026-07-14T07:18:00.662Z"},"bugs":{"url":"https://github.com/Elnora-AI/elnora-whatsapp/issues"},"author":{"name":"Elnora AI","email":"opensource@elnora.ai"},"license":"Apache-2.0","homepage":"https://github.com/Elnora-AI/elnora-whatsapp#readme","keywords":["whatsapp","cli","mcp","claude-code","messaging","agents"],"repository":{"type":"git","url":"git+https://github.com/Elnora-AI/elnora-whatsapp.git"},"description":"WhatsApp CLI + Claude Code plugin — read, search, and send WhatsApp messages from your own paired account, 100% locally.","maintainers":[{"name":"risto.jamul","email":"risto.jamul@elnora.ai"},{"name":"carmen.kivisild","email":"carmen.kivisild@elnora.ai"}],"readme":"# WhatsApp for Claude Code\n\nRead, search, and send WhatsApp messages from Claude Code — on your own\npersonal account, 100% locally. Your messages live in SQLite on your machine;\nnothing is sent to any cloud, and sends always go through your approval.\n\n```text\n\"What did Ana say about the invoice last week?\"\n\"Summarize my unread group chats.\"\n\"Send the address to Tom on WhatsApp.\"   ← asks for your approval first\n\"Download the PDF Maria sent me yesterday.\"\n```\n\n## What you get\n\n- **A `wa` CLI** for scripts, cron jobs, and any agent harness — reads answer\n  in ~50 ms straight from the local store (even with the bridge down), sends\n  go through the authenticated bridge. JSON in, JSON out:\n  ```bash\n  wa contacts \"ana\"                 # search people and group chats\n  wa chats --limit 10               # recent chats, newest first\n  wa messages \"Ana Torres\" --from-them --since 2026-07-01\n  wa send \"Team PRs\" \"https://github.com/org/repo/pull/42\"\n  wa doctor                         # health as JSON, exit code = status\n  ```\n- **14 MCP tools** — search contacts, list/read chats and messages, message\n  context, send text / files / voice notes / reactions, download media.\n- **A skill** that teaches Claude the fast paths: direct SQLite for bulk\n  reads, contact-first lookups, and the safety rules (approval-gated sends,\n  incoming content treated as untrusted).\n- **Automated setup** — `/whatsapp-setup` installs everything; the only\n  manual step is scanning one QR code with your phone.\n- **Runs automatically** — a keep-alive service (launchd on macOS, systemd on\n  Linux, Task Scheduler on Windows) keeps the bridge running across reboots\n  and crashes. `/whatsapp-doctor` checks and repairs the install.\n- **Hardened defaults** — localhost-only REST API behind a bearer token,\n  message store readable only by you, webhook forwarding disabled.\n\n## How it works\n\nYour phone pairs this machine as a WhatsApp **linked device** (same mechanism\nas WhatsApp Web). Three local pieces, all from the open-source\n[whatsapp-mcp](https://github.com/verygoodplugins/whatsapp-mcp) project:\n\n```text\nWhatsApp on your phone\n   │  (linked device, end-to-end encrypted)\n   ▼\nGo bridge (whatsmeow) ──► SQLite store        ~/.whatsapp-mcp/whatsapp-bridge/store/\n   │  localhost REST, bearer token\n   ▼\nPython MCP server ──► Claude Code (14 tools)\n```\n\nThis plugin adds what the upstream project leaves to you: one-command setup,\na pinned reviewed revision, permission hardening, the keep-alive service,\npairing and health tooling, and the Claude Code skill/commands.\n\n## Quick start (Claude Code)\n\n```text\n/plugin marketplace add Elnora-AI/elnora-whatsapp\n/plugin install whatsapp@elnora-whatsapp\n/whatsapp-setup\n```\n\nScan the QR code when asked (WhatsApp > Settings > Linked Devices), restart\nClaude Code, and ask it about your chats. Total time ≈ 5 minutes, most of it\nthe Go build.\n\n**Prerequisites:** [Go](https://go.dev/dl/), [uv](https://docs.astral.sh/uv/),\n[Node.js](https://nodejs.org), git, curl (preinstalled on macOS). CGO needs a\nC compiler: preinstalled on macOS (CLT), `build-essential` on Debian/Ubuntu,\nand on Windows `pacman -S mingw-w64-ucrt-x86_64-gcc` in\n[MSYS2](https://www.msys2.org/). Optional: FFmpeg for sending arbitrary audio\nas voice notes.\n\n## CLI install (any terminal, any agent)\n\n```bash\nnpm install -g @elnora-ai/whatsapp   # puts `wa` and `elnora-whatsapp` on PATH\nwa doctor                            # then see `wa --help`\n```\n\nNeeds Node ≥22.13 and a completed setup (below or `/whatsapp-setup`). Name\nresolution is agent-friendly: `wa send \"Ana Torres\" hi` works when the name\nis unique, and an ambiguous name fails with the candidate list instead of\nguessing. One recipient per send — bulk sending is refused by design.\n\n## Manual install (any MCP client)\n\nThe setup scripts work without Claude Code:\n\n```bash\ngit clone https://github.com/Elnora-AI/elnora-whatsapp\nbash elnora-whatsapp/scripts/setup.sh        # Windows: scripts\\setup.ps1\n```\n\nThen register the MCP server in your client:\n\n```json\n{\n  \"mcpServers\": {\n    \"whatsapp\": {\n      \"command\": \"uv\",\n      \"args\": [\"--directory\", \"<home>/.whatsapp-mcp/whatsapp-mcp-server\", \"run\", \"main.py\"]\n    }\n  }\n}\n```\n\nUseful flags: `--dir <path>` (custom location; also set `WHATSAPP_MCP_DIR`),\n`--webhook <url>` (forward incoming messages — off by default), `--port <n>`\n(bridge REST port), `--no-service` (skip the keep-alive service), `--update`\n(move an existing checkout to the pinned revision). Re-pair anytime with\n`scripts/pair.sh` (Windows: `scripts\\pair.ps1`); check health with\n`scripts/doctor.sh` (`scripts\\doctor.ps1`).\n\n## Security & privacy\n\n- **Local-only.** Messages sync into SQLite on your machine and are read from\n  there. The bridge's REST API binds to 127.0.0.1 and requires a bearer token\n  (`store/.bridge-token`, mode 600).\n- **Webhook forwarding is OFF by default.** The upstream bridge would\n  otherwise POST every incoming message to a localhost port that any local\n  process could claim; setup points it at a root-only discard port. Opt in\n  with `--webhook <url>` if you actually consume it.\n- **Store hardening.** `store/` is chmod 700 (user-only ACL on Windows), the\n  DBs and token 600. The store holds your full message history and session\n  keys — never commit or copy it.\n- **Pinned upstream.** Setup checks out a specific reviewed revision of\n  whatsapp-mcp, not `main`. Update deliberately with `--update`.\n- **Prompt injection.** Incoming message content is untrusted input. The\n  skill instructs Claude to treat it as data and never follow instructions\n  embedded in messages.\n- **Honest caveat: this is unofficial.** Linked-device automation is not an\n  official WhatsApp API. Read-heavy use with human-approved sends has been\n  fine in practice, but bulk or spammy sending patterns can get an account\n  banned. This project enforces nothing server-side — the skill's rules and\n  your judgment do. Use at your own risk.\n\n## Uninstall\n\nIn Claude Code first: `/plugin uninstall whatsapp@elnora-whatsapp`. Then:\n\n```bash\n# macOS\nlaunchctl bootout gui/$(id -u)/com.whatsapp-mcp.bridge\nrm ~/Library/LaunchAgents/com.whatsapp-mcp.bridge.plist\nrm -rf ~/.whatsapp-mcp      # deletes all synced messages + session\n# Linux\nsystemctl --user disable --now whatsapp-bridge.service\nrm ~/.config/systemd/user/whatsapp-bridge.service\nrm -rf ~/.whatsapp-mcp\n```\n\n```powershell\n# Windows\nUnregister-ScheduledTask -TaskName \"WhatsApp MCP Bridge\" -Confirm:$false\nRemove-Item -Recurse -Force \"$env:USERPROFILE\\.whatsapp-mcp\"\n```\n\nAlso remove the linked device from your phone: WhatsApp > Settings > Linked\nDevices.\n\n## For agents\n\nSetting this up for a user? Follow [INSTALL_FOR_AGENTS.md](INSTALL_FOR_AGENTS.md).\nDriving an existing install from a non-Claude harness? See [AGENTS.md](AGENTS.md).\n\n## Part of the Elnora family\n\nThis plugin is one of a set of universal, config-driven Claude Code tools from [Elnora AI](https://github.com/Elnora-AI). Each works 100% standalone — install several and Claude chains them: a WhatsApp thread becomes a vault note, a task, a Linear issue, or an email follow-up in one conversation.\n\n- **[knowledge-vault](https://github.com/Elnora-AI/knowledge-vault)** — Obsidian vault power tools. Chain: \"summarize my chat with Ana and save it to the vault\" turns WhatsApp messages into CRM notes and tasks in your own vault, searchable later.\n- **[elnora-google-workspace](https://github.com/Elnora-AI/elnora-google-workspace)** — Gmail, Calendar, Drive, Docs, Sheets, and any Google API. Chain: cross-channel follow-ups — \"she confirmed on WhatsApp, put it on the calendar and email the details\".\n- **[elnora-slack](https://github.com/Elnora-AI/elnora-slack)** — the full Slack Web API as a CLI with a draft-and-approve send gate. Chain: relay between channels — \"forward the gist of that WhatsApp group discussion to #team\".\n- **[elnora-linear](https://github.com/Elnora-AI/elnora-linear)** — Linear search, bulk edit, agents, and a config-driven curator. Chain: \"the client reported this bug on WhatsApp — file it in Linear with the message context\".\n- **[elnora-merit-aktiva](https://github.com/Elnora-AI/elnora-merit-aktiva)** — Merit Aktiva accounting + Merit Palk payroll CLI. Chain: \"find the invoice Ana asked about on WhatsApp and check whether it's been paid\".\n\nBrowse the full set at [github.com/Elnora-AI](https://github.com/Elnora-AI).\n\n## Credits & license\n\nWraps [verygoodplugins/whatsapp-mcp](https://github.com/verygoodplugins/whatsapp-mcp)\n(maintained fork of [lharries/whatsapp-mcp](https://github.com/lharries/whatsapp-mcp), MIT),\nbuilt on [whatsmeow](https://github.com/tulir/whatsmeow). This repo:\nApache-2.0, © Elnora AI.\n","readmeFilename":"README.md"}