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.
Kirimdev exposes a remote Model Context Protocol (MCP) server at
https://api.kirimdev.com/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.
Focused, well-described tools
Send messages, browse conversations, manage contacts, create and list templates, discover phone numbers — plus multi-tenant customer tools on Business plans. The 90% of WhatsApp automation in a small, well-described surface the model can 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.
Kirimdev’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 Kirimdev account can:
POST https://api.kirimdev.com/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.
The server exposes 24 tools — 19 messaging-essentials tools always
available, plus 5 multi-tenant customer tools that require the Business
plan (they appear in tools/list on every plan but return 402 when
invoked without the entitlement).
| 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). |
mark_as_read | Send a read receipt (+ optional typing indicator) for an inbound message. |
get_message | Fetch a single message by msg_ id; poll delivery status / inspect failures. |
list_messages | Browse messages newest-first, with direction / status / time filters. |
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. |
create_contact | Create a contact on a connected account. |
update_contact | Patch a contact’s name / email / metadata. |
list_labels | List team labels (lbl_... ids) across the org. |
create_label | Create a new label (name + preset color). |
update_label | Patch a label’s name or color. |
delete_label | Delete a label (removes from all contacts / conversations). |
add_contact_label | Attach a label to a contact (syncs to conversations). |
remove_contact_label | Detach a label from a contact (syncs to conversations). |
list_templates | List Meta templates available on a phone number. |
create_template | Create a template and submit it to Meta for review. |
sync_templates | Pull the latest template inventory from Meta and upsert it. |
Plus the customer tools (Business plan): list_customers,
get_customer, create_customer, update_customer,
create_customer_setup_link.
See Available Tools for the full schema of every tool, including input arguments and example responses.
Once connected (see Setup), 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.