Same auth as /v1
Bring your existing kdv_live_... API key. No OAuth dance, no
extra signup. Generate keys from the dashboard exactly like REST.
Kirim exposes a remote Model Context Protocol (MCP) server at
https://api.kirim.chat/mcp so AI assistants can send WhatsApp
messages, search contacts, and browse conversations on your behalf —
using the same API key you already use for the REST API.
Same auth as /v1
Bring your existing kdv_live_... API key. No OAuth dance, no
extra signup. Generate keys from the dashboard exactly like REST.
Six focused tools
Send messages, list/get conversations, search contacts, list templates, discover phone numbers. The 90% of WhatsApp automation in six well-described tools — small enough for the model to use confidently.
Works with major clients
Claude Desktop, ChatGPT, Cursor, VSCode, MCP Inspector — anything that speaks the MCP Streamable HTTP transport (spec 2025-03-26+).
Same rate limits & isolation
Per-organization token bucket, same as /v1. Tools resolve
phone_number_id through the same multi-tenant fence — keys from
other orgs cannot see or send from your numbers.
Kirim’s MCP server is a thin protocol adapter on top of the existing
Public API. Each MCP tool maps to a /v1 endpoint and reuses
the same validation, multi-tenant scoping, error catalogue, and
realtime side effects (BullMQ jobs, WebSocket publish, audit logs).
The result is that an AI assistant connected to your Kirim account can:
POST https://api.kirim.chat/mcpAuthorization: Bearer kdv_live_...Content-Type: application/jsonAccept: application/json, text/event-streamThe transport is MCP Streamable HTTP in stateless mode: every
request is self-contained, no Mcp-Session-Id is issued, and the
server uses single-shot JSON responses (no SSE upgrade) because every
tool is synchronous.
| Tool | Purpose |
|---|---|
list_phone_numbers | Discover connected WhatsApp numbers + their phone_number_id. Call this first. |
send_message | Send a WhatsApp message (text / image / document / video / audio / template / interactive). |
list_conversations | List conversations on a phone number, newest-first, with filters. |
get_conversation | Single conversation + last N messages, for thread drill-down. |
search_contacts | Find a contact by phone or name/email substring. |
list_templates | List Meta-approved templates available on a phone number. |
See Available Tools for the full schema of every tool, including input arguments and example responses.
Once connected (see Setup with Claude), you can ask the assistant in plain language:
“Send a WhatsApp to +628123456789 saying the package arrives tomorrow.”
The model will (typically):
list_phone_numbers to find the sending account.send_message with to, type: "text", and the body you
asked for.msg_... id and its status.You never write a tool call directly — the model picks the right tool from the natural-language request. See Prompting the AI for a cookbook of phrases that work well in Indonesian and English.
MCP uses the same Bearer API keys as the REST /v1 API. Generate a
key from the dashboard (Settings → API Keys), then configure your MCP
client to send it as Authorization: Bearer kdv_live_....
The MCP surface is deliberately narrower than /v1. The following are
not (yet) MCP tools, and you should keep using the REST API or
dashboard for them:
/v1/webhook_subscriptions.If you have a strong use case for one of these, open an issue — we ship MCP tools demand-first to keep the surface small enough for the model to use accurately.
The MCP endpoint shares the same per-organization token bucket as
/v1. Default Starter plan limits:
send_message): 60 / minuteX-RateLimit-* headers ride on every MCP response, same shape as the
REST endpoints. See Rate Limits for the full
tier table.