beeper-mcp-addon
Supports working with iMessage conversations through Beeper Desktop: downloading message attachments, sending local files with captions, searching contacts, starting new direct chats, and deleting messages.
Supports working with Signal conversations through Beeper Desktop: downloading message attachments, sending local files with captions, searching contacts, starting new direct chats, and deleting messages.
Supports working with Telegram conversations through Beeper Desktop: downloading message attachments, sending local files with captions, searching contacts, starting new direct chats, and deleting messages.
Supports working with WhatsApp conversations through Beeper Desktop: downloading message attachments, sending local files with captions, searching contacts, starting new direct chats, and deleting messages.
This server does not currently have a deployable release on Glama. Follow the repository's setup instructions to install and configure it for your MCP client, including any required credentials and local dependencies.
beeper-mcp-addon
Unofficial. Not affiliated with or endorsed by Beeper.
The missing tools for Beeper Desktop's MCP server: files and new conversations.
Beeper Desktop ships a built-in MCP server, so an AI assistant can search and send messages across WhatsApp, Signal, Telegram, iMessage and more. It has two gaps, though:
It only handles text: the assistant can see that a message holds a video, but it can't open it, and it can't send a photo or a PDF.
It can only write in existing conversations. To message someone new, you have to send the first message yourself.
The Beeper Client API that runs alongside it already supports both. This small MCP server exposes them as five tools:
Tool | What it does |
| Saves a message attachment (video, image, audio, document) to disk and returns the local path |
| Uploads a local file and sends it to any chat, with an optional caption |
| Finds people on an account (WhatsApp, Signal…), including ones you've never chatted with; phone numbers, emails and @usernames are looked up exactly |
| Opens a direct chat with someone and returns its |
| Deletes (unsends) a message, for everyone when the network allows it |
It runs next to the official Beeper MCP, not instead of it. Keep using the official server for search, chats and text messages.
Requirements
Beeper Desktop with its API enabled (Settings → Developers)
Node.js 20+ — except for the Claude Desktop bundle, which uses Claude's built-in Node
Optional: ffmpeg, so
send_filecan fix videos that phones play badly
Works on macOS, Windows and Linux.
Related MCP server: openmessage
Install
One command, every client
npx -y beeper-mcp-addon installIt finds the MCP clients on your machine — Claude Code, Claude Desktop, Cursor, VS Code, Windsurf, Kimi Code, Gemini CLI, Codex — asks before adding the server to each one (backing up the config first), then opens Beeper once so you can approve access. Restart your apps and you're done.
Options: --client cursor,vscode (only these), --yes (no questions), --dry-run (show what would change), --read-only. Undo with npx -y beeper-mcp-addon uninstall.
One click
Claude Desktop: download beeper-mcp-addon.mcpb from the latest release and double-click it. No Node.js needed.
On first use, Beeper opens and asks you to approve access.
By hand
claude mcp add beeper-mcp-addon -- npx -y beeper-mcp-addon # Claude CodeAny other client:
{
"mcpServers": {
"beeper-mcp-addon": { "command": "npx", "args": ["-y", "beeper-mcp-addon"] }
}
}On Windows, use "command": "cmd", "args": ["/c", "npx", "-y", "beeper-mcp-addon"].
Then connect once with npx -y beeper-mcp-addon login, or just use a tool: Beeper will ask you to approve.
Security
You approve access in Beeper.
loginuses Beeper's own OAuth screen (with PKCE); nothing is copied by hand. Beeper's approval screen decides the access level (read only, or read + write to send).The token stays in your system's secret store: macOS Keychain, Windows DPAPI (encrypted for your user), or the Linux keyring (GNOME Keyring / KWallet via
secret-tool). Without a keyring, it falls back to a file readable only by you — the same way Claude Code stores its own credentials on Linux. If a keyring shows up later, the token moves into it automatically and the file is deleted. It is never written to MCP client configs, and never passed on a command line.Everything is local. The server only talks to Beeper Desktop on
localhost.Sending is explicit.
send_file,start_chatanddelete_messageact on your behalf; keep your client's per-call approval on.npx -y beeper-mcp-addon statusshows where the token lives and whether it's valid;logoutrevokes and deletes it.
From source
git clone https://github.com/juulieen/beeper-mcp-addon
cd beeper-mcp-addon && npm install && npm run build
node dist/index.js install --local # clients run this checkout, not the npm packageUpdates
Nothing updates on its own. install writes the exact version (for example beeper-mcp-addon@1.2.3) into each client's config, so a new release never runs on your machine before you've chosen to take it.
When you use one of the tools and a newer version exists, the first tool result of that session carries a short notice for your assistant: the new version, its release notes and the command to update. Your assistant tells you; you decide. The check is a plain request to the public npm and GitHub APIs, made at most once a day and only when a tool is actually used. Nothing about you is sent. Turn it off with BEEPER_ADDON_NO_UPDATE_CHECK=1.
To update: npx -y beeper-mcp-addon@<version> install. For Claude Desktop, open the new .mcpb from the releases.
There is no telemetry: the addon never reports usage or installs anywhere.
Configuration
Variable | Default | |
| token saved by | Beeper Desktop API token; overrides the saved one |
|
| Base URL of the Beeper Client API |
| — | Force a plain token file instead of the system secret store |
|
| Where downloads go when no |
| — | Set to |
|
| ffmpeg used to fix videos before sending (ffprobe is looked up next to it) |
Tools
download_attachment
Identify the attachment in any of these ways:
url: anmxc:///localmxc://media URL, or abeeper-mcp://attachments/{chatID}/{messageID}/{index}URI as printed by the official Beeper MCP's search resultschatID+messageID(+indexif the message has several attachments)
Optional outputPath chooses where to save it. Returns { path, fileName, mimeType, sizeBytes }.
send_file
chatID, filePath, and optionally text (caption), fileName (name shown to the recipient) and replyToMessageID. Files up to 500 MB. The MIME type comes from the file extension, so videos and images show up as media rather than generic files.
Videos are fixed before sending. Phone cameras often record videos that messaging apps play badly: HEVC, 60 fps, full-range color, rotation stored as metadata. The recipient then sees a black frame, a sideways picture, or nothing. When ffmpeg is installed, send_file checks each video with ffprobe and, only if needed, re-encodes it to H.264 + AAC MP4 (30 fps and 1280 px max, rotation applied). The result says what was fixed (reasons). Pass convert: "never" to send the original, or "always" to force it. Set BEEPER_FFMPEG if ffmpeg is not on your PATH.
search_contacts
accountID (from the official MCP's get_accounts), query, optional limit. Returns contact id, name, phone number, username, email.
start_chat
accountID plus one of userID (from search_contacts), phoneNumber, username or email. Returns the chatID to use with send_message or send_file. If a network refuses to create an empty chat, pass messageText: it becomes the first message and is sent right away.
delete_message
chatID, messageID, optional forEveryone (default true). Most networks only let you delete your own, recent messages. It needs the final message ID: the pendingMessageID returned by send_file can't be deleted until the message is sent.
send_file, start_chat and delete_message act on your behalf. Most MCP clients ask you to approve each call; keep that confirmation on.
Example
"Find the videos my dad posted in the family group in June and send the French ones to him."
The assistant searches with the official Beeper MCP, calls download_attachment on each video (for instance to transcribe and check the language), then send_file to forward the right ones.
"Send the flyer PDF to +33 6 12 34 56 78 on WhatsApp."
start_chat with the phone number, then send_file on the returned chatID. No need to open the conversation by hand first.
Real-time: beeper-watch
MCP tools can only be called, so an assistant never learns on its own that someone replied. The package also ships a small command that listens to Beeper's WebSocket and prints one JSON line per incoming message:
npx -p beeper-mcp-addon beeper-watch --chat 22565 --once
# {"event":"message","chat":"Pierre","sender":"Pierre","text":"Ok pour samedi !",...}Option | |
| Only this chat (chat ID or local chat ID). Repeatable. Default: all chats |
| Only senders whose name or ID contains |
| Exit after the first matching message |
| Also print your own messages (skipped by default) |
| Read the token from this file |
Agents that can be woken by a command's output can use it to wait for a reply. In Claude Code, run it with the Monitor tool: each line wakes the assistant, and --once ends the watch after the reply. A read token is enough.
If the connection drops, it prints {"event":"disconnected",...} and reconnects. Beeper does not replay messages sent in the meantime, so re-read the chat after a disconnect.
How it works
It's about 450 lines of TypeScript that call the local Beeper Client API: /v1/assets/download, /v1/assets/upload, /v1/chats/{chatID}/messages (send and delete), /v1/accounts/{accountID}/contacts and /v1/chats/start. Everything stays on your machine; the server only talks to Beeper Desktop on localhost.
License
MIT
Tool Schema Changelog
Recent tool additions, removals, and schema changes observed during successful MCP inspections.
Loading tool schema changelog…
This server cannot be deployed
Maintenance
Related MCP Connectors
MCP connector for iMessage & Contacts via a local Mac agent + Vercel relay
Nifty's MCP server — exposes tasks, projects, messages, and files as tools for AI agents.
Remote streamable-HTTP MCP server running on a single Cloudflare Worker. Your assistant gets live Airbnb, Amazon, Booking.com, Google Flights, Maps and Reddit data, social search on X, Instagram and TikTok, the Meta Ad Library, and image/video generation without any keys. Connect your own accounts to let it send WhatsApp or Telegram messages, work an IMAP inbox, manage Meta Ads campaigns and publish to X and LinkedIn. OAuth 2.1 with PKCE; stored credentials are AES-256-GCM encrypted.
Send and read WhatsApp, email and SMS from Claude, ChatGPT, Cursor or any MCP client, from your own accounts: your WhatsApp number (linked by QR code), your mailbox (IMAP/SMTP) and your Android phone (SMS from its SIM). Tools: list-accounts, get-account, add-account, add-email-account, list-messages, send-message (one channel or several in one call). Hosted, OAuth 2.1, nothing to install. Free plan with unlimited messages; paid plans from 19 EUR/month remove the footer and add media and webhooks. Docs and client configs: github.com/UnlimitedMessaging/unlimited-messaging-mcp
Related MCP Servers
- AlicenseNot gradedqualityDmaintenanceEnables reading and sending iMessages on macOS through MCP, with tools for managing chats, messages, and attachments via AI agents.MIT
- AlicenseNot gradedqualityBmaintenanceMCP server for a local-first messaging workspace that integrates Google Messages, WhatsApp, and Signal. It enables reading, sending, searching messages, and managing conversations through MCP tools.72-
- AlicenseAqualityDmaintenanceLocal-only MCP server that exposes Beeper Texts data (messages, chats, contacts) from the macOS Beeper Desktop SQLite database for AI assistants and automation tools, supporting search and media retrieval across multiple platforms.64MIT
- AlicenseAqualityCmaintenanceEnables MCP-compatible clients such as Claude, Cursor, Cline, and Codex to send and read iMessages from the user's own Mac and Apple ID, with tools for conversation history, contacts, drafts, and Mac connector health.11336 npmMIT