Skip to content
2026

MCP server gains 5 new tools

Released: June 2, 2026

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_message returns a pending row, the assistant could not poll for transitions to sent / delivered / read / failed without 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 to get_conversation already returns inbound wamids — so the workflow was achievable but the tool was missing.
  • Light CRM — assistants could read contacts via search_contacts but could not create or edit them, so even simple triage flows required a human round-trip.

The new tools:

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.

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.

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 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).

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.