wacrm/docs/mcp.md
Arnas Donauskas 78f2f79d3b Add MCP server for the public API
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>
2026-07-08 17:30:24 +03:00

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_update template 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

  1. Create an API key in the dashboard: Settings → API keys. Grant only the scopes your assistant needs (a read-only assistant only needs the *:read scopes).

  2. 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 confirm and 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.