MCP server gains 5 new tools
Released: June 2, 2026
MCP server Added
Section titled “MCP server ”Five new tools land on the Kirimdev MCP server today — the surface grows from 6 to 11 tools. The additions close three gaps that came up repeatedly in AI-assistant workflows:
- Delivery status visibility — after
send_messagereturns apendingrow, the assistant could not poll for transitions tosent/delivered/read/failedwithout dropping back to the REST API or the dashboard. - Read-then-reply loop — the read-receipt branch of the messages
endpoint was deliberately excluded from MCP at launch because we
thought assistants would not hold a
wamid. In practice, every call toget_conversationalready returns inboundwamids — so the workflow was achievable but the tool was missing. - Light CRM — assistants could read contacts via
search_contactsbut could not create or edit them, so even simple triage flows required a human round-trip.
The new tools:
get_message
Section titled “get_message”Fetch a single message by its msg_ id. Returns the same shape as
list_messages entries, including the error: { code, message, provider_code } triple on failed sends.
list_messages
Section titled “list_messages”Browse messages on a connected account, ordered newest-first. Filter
by conversation_id, direction, status, or a created_after /
created_before time window. Useful for “show me all failed sends
today” audits and conversation-history sync jobs.
mark_as_read
Section titled “mark_as_read”Send a “read” receipt back to the original sender (turns the
double-tick blue on their phone) and flip the local row to
status: "read". Optionally show a typing indicator alongside —
Meta combines the two in a single upstream call.
Takes the Meta-native wamid (from your inbound webhook payload, or
from get_conversation / get_message output), not a Kirim
msg_ external id. Only inbound messages can be marked as read;
outbound sends return invalid_field_value. Repeated calls on an
already-read message are idempotent.
create_contact
Section titled “create_contact”Create a new contact on a connected WhatsApp account. Keyed by
(account, phone_number); duplicates return invalid_field_value
so the caller can fall back to search_contacts. Phone numbers
accept +62… or 62… (normalised to the canonical digit-only form
the rest of the platform uses).
update_contact
Section titled “update_contact”Patch an existing contact by its ctc_ id. At least one of name
/ email / metadata must be provided. Phone number is
intentionally not patchable — it is the identity column; create
a new contact and migrate if the number changes.
All five tools follow the same multi-tenant scoping, error envelope,
and rate-limiting as the existing six. The matching /v1 REST
endpoints (GET /v1/{phone_number_id}/messages, GET .../messages/{id},
POST .../contacts, PATCH .../contacts/{id}, plus the read-receipt
branch of POST .../messages) are unchanged — these tools wrap surface
that already shipped.