Introduce mcp-server/ — a stdio Model Context Protocol server that wraps the /api/v1 public API so MCP clients (Claude, Cursor, etc.) can drive a self-hosted wacrm instance in natural language. - Thin wrapper over the existing REST API; all auth, scoping, and rate limiting stay server-side. No new backend surface. - Read-only by default: write and broadcast tools are only registered when WACRM_ENABLE_WRITES / WACRM_ENABLE_BROADCASTS are set, layered on top of the API key's own scopes. send_broadcast also requires an explicit confirm and is marked destructive. - Registry-ready: server.json manifest, package.json mcpName linked to it (io.github.arnasdon/wacrm-mcp), and glama.json for discovery. - Docs: docs/mcp.md + README bullet + mcp-server/README.md. Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2.0 KiB
MCP server
wacrm ships a Model Context Protocol server so you can drive your CRM from AI assistants — Claude Desktop, Claude Code, Cursor, and any other MCP client — in natural language:
"How many conversations are still open today?" "Show the last five messages with +1 415 555 0123." "Send the
order_updatetemplate to that contact."
It lives in mcp-server/ and is published to npm as
wacrm-mcp. Under the hood
it's a thin wrapper over the public API, so every
request is authenticated and scoped by your instance exactly like any
other API call.
Quick start
-
Create an API key in the dashboard: Settings → API keys. Grant only the scopes your assistant needs (a read-only assistant only needs the
*:readscopes). -
Add the server to your MCP client config:
{ "mcpServers": { "wacrm": { "command": "npx", "args": ["-y", "wacrm-mcp"], "env": { "WACRM_BASE_URL": "https://crm.example.com", "WACRM_API_KEY": "wacrm_live_xxxxxxxxxxxxxxxxxxxxxxxx" } } } }
That's read-only — the safe default. To let the assistant change
data or send messages, add "WACRM_ENABLE_WRITES": "true" (and
"WACRM_ENABLE_BROADCASTS": "true" for mass sends) to env.
What it exposes
- Reads (always on):
whoami, contacts (list/get), conversations (list/get), messages (list), broadcast status. - Writes (opt-in): send a message, create/update a contact.
- Broadcasts (opt-in): launch a template broadcast — requires an
explicit
confirmand is marked destructive.
Safety
Because sending WhatsApp messages is a real side effect, the server is read-only until you opt in, layered on top of the API key's own scopes. Give an assistant a read-only key and read-only config and it physically cannot send anything. See the server README for the full tool list and safety model.