
Security News
Happy Birthday, Shai-Hulud
It has been one year since Shai-Hulud made its first appearance on npm.
uni-msg-mcp-server
Advanced tools
Model Context Protocol server for uni-msg — drive WhatsApp from Claude, Cursor or any MCP client.
Drive WhatsApp from Claude, Cursor, or any MCP client — using the same API key as the REST API. No separate credential, no OAuth.
Create a key in Dashboard → API Keys, then point your client at the hosted endpoint. Nothing to install, and it stays current without anyone upgrading a package.
https://uni-msg.com/mcp Authorization: Bearer <key>
https://uni-msg.com/mcp/<key> for clients that cannot send headers
claude mcp add --transport http uni-msg https://uni-msg.com/mcp \
--header "Authorization: Bearer wsa_your_key"
~/.cursor/mcp.json{ "mcpServers": { "uni-msg": {
"url": "https://uni-msg.com/mcp",
"headers": { "Authorization": "Bearer wsa_your_key" }
} } }
~/.gemini/settings.jsonhttpUrl selects Streamable HTTP; url would mean SSE.
{ "mcpServers": { "uni-msg": {
"httpUrl": "https://uni-msg.com/mcp",
"headers": { "Authorization": "Bearer wsa_your_key" }
} } }
Settings → Connectors → Add custom connector, URL https://uni-msg.com/mcp,
header Authorization: Bearer wsa_your_key.
Developer mode (Settings → Apps → Advanced), then add a connector with URL
https://uni-msg.com/mcp/wsa_your_key and No authentication. It is the only
client that cannot send a header, which is why the key sits in the path — and
why nginx disables access logging on /mcp.
Not required — the hosted endpoint above needs no install. Use this if you would rather the API calls left your own machine.
{ "mcpServers": { "uni-msg": {
"command": "npx",
"args": ["-y", "uni-msg-mcp-server"],
"env": { "UNIMSG_API_KEY": "wsa_your_key" }
} } }
Needs Node 20+. ChatGPT cannot use this form — it has no way to run a local process.
Three steps, and the tool descriptions walk the assistant through them:
create_device with a name and the number in international formatconnect_device returns an 8-character pairing codeThe code expires in about two minutes. If it lapses use request_pairing_code
rather than reconnecting — it is cheaper and avoids churning the session. Poll
get_device_status until it reports connected.
Sends are immediate and cannot be recalled. The tool descriptions instruct the assistant to confirm the recipient first, but that is guidance, not a guarantee — treat this as you would a shell with production access.
Only a device whose status is connected can deliver. list_devices first
saves a confusing failure later.
Reading message history is exposed: list_conversations finds the peer
value, then read_thread returns that thread newest-first with paging.
Errors come back as tool results rather than thrown exceptions, so the model can read the reason and correct itself. Anything key-shaped in an error is redacted before it reaches the model. Diagnostics go to stderr — stdout is the JSON-RPC stream and a stray byte there corrupts the protocol.
FAQs
Model Context Protocol server for uni-msg — drive WhatsApp from Claude, Cursor or any MCP client.
We found that uni-msg-mcp-server demonstrated a healthy version release cadence and project activity because the last version was released less than a year ago. It has 1 open source maintainer collaborating on the project.

Security News
It has been one year since Shai-Hulud made its first appearance on npm.

Research
/Security News
Operators behind PolinRider used a compromised GitHub account to plant malware in four development versions of a Packagist package with 700,000+ downloads.

Security News
GitHub Actions now supports cache-mode, a least-privilege control on the Actions cache aimed at the cache poisoning technique behind recent compromises.