Skip to content

MCP retries, limits, and audit controls hardened

Released: September 20, 2026

Every mutating MCP tool now accepts an optional idempotency_key. Reuse the same key and identical arguments when retrying after a timeout; Kirimdev replays the first successful result for 24 hours instead of executing the mutation twice. JSON-RPC request IDs remain correlation identifiers and do not deduplicate retries.

MCP now applies the same inactive-subscription write policy as /v1. Read-only tools remain available, while message sends and other mutations return subscription_inactive until billing is restored. Feature and quota failures from the Business customer tools now use the documented structured tool error envelope.

Read-only calls use the read rate-limit bucket and mutations use the write bucket, even though both travel through HTTP POST. Every authenticated tools/call admitted by the rate limiter is also recorded in API request logs under a sanitized /mcp/tools/<tool_name> path without copying tool arguments or message content.

Tools now publish MCP safety hints for read-only, destructive, idempotent, and open-world behavior. Contact tools also match the Public API contract: invalid exact phone filters are rejected, BSUID/username fields are documented, and update_contact can update a WhatsApp username.