mirror of
https://github.com/Luchexx/wacrm.git
synced 2026-11-02 09:19:51 +00:00
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>
59 lines
2.0 KiB
Markdown
59 lines
2.0 KiB
Markdown
# MCP server
|
|
|
|
wacrm ships a [Model Context Protocol](https://modelcontextprotocol.io)
|
|
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/`](../mcp-server) and is published to npm as
|
|
[`wacrm-mcp`](https://www.npmjs.com/package/wacrm-mcp). Under the hood
|
|
it's a thin wrapper over the [public API](./public-api.md), 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:
|
|
|
|
```jsonc
|
|
{
|
|
"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](../mcp-server/README.md) for the full tool list and
|
|
safety model.
|