Skip to main content
Glama
sendkuy

SendKuy MCP server

Official

Send a message

sendkuy_send_message

Sends one message body to up to 100 recipients on WhatsApp, SMS or email. Use it for alerts, summaries or one-off notifications where everyone receives the same text.

Instructions

Send one message body to 1 to 100 recipients on one channel: WhatsApp, SMS or email. Use it for an alert, a summary or a one-off notification where everyone gets the same text. To reach a saved contact group, put its grp_ id in to. When each recipient needs different content (a summary per branch, a notification per order) use sendkuy_send_batch. A campaign prepared in the SendKuy dashboard is started with sendkuy_start_campaign and can be paused or cancelled midway. Phone numbers must be E.164 with the leading + (for example +6281234567890). This really sends and spends SendKuy credit. A recipient on the suppression list or who unsubscribed still gets a message id and fails later; read the final status with sendkuy_get_messages. One recipient is sent while you wait; several are queued and sent in the background, paced per number. Pass dedupe_key so a retried step does not send twice. The answer counts every message per status and lists the first 20; read the rest with sendkuy_list_messages.

Input Schema

NameRequiredDescriptionDefault
toYesRecipients: E.164 phone numbers (or email addresses on email), contact ids (con_...) from sendkuy_find_contacts, or group ids (grp_...) from sendkuy_list_groups. A group sends to every member.
bodyYesThe text. HTML is allowed on email.
mediaNoWhatsApp only. One attachment, fetched from a URL you host.
channelYes
subjectNoRequired on email, refused on other channels.
dedupe_keyNoA key derived from the event this call reports, such as "order-1234-shipped" or "daily-revenue-2026-10-29". Calling again with the same key and the same input returns the first answer instead of sending twice. The same key with different input is refused with idempotency_key_reused, so keep changing values such as the time out of a deduplicated message. A refusal (for example insufficient_credits or a bad number) is remembered under the key too: after fixing it, retry with a new key. Keys are remembered for about 24 hours.
gateway_idNoOptional sender. Leave it out and SendKuy picks a live sender on the channel and moves to the next one if it fails.
attachmentsNoEmail only, at most ten files fetched from URLs you host.
schedule_atNoSend later instead of now, as ISO 8601 with a time zone offset, for example 2026-11-01T09:00:00+07:00.
template_idNoWhatsApp only. A template id from sendkuy_list_templates.
template_parametersNoWhatsApp only. Values for the template variables.

Output Schema

NameRequiredDescriptionDefault
countYes
messagesYes
by_statusYes
truncatedYes

Schema Changelog

Changes observed during successful MCP inspections.

  1. First observedv0.1.0

TDQS

A4.8/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Goes well past the annotations: it warns that this really sends and spends credit, that suppressed/unsubscribed recipients still get a message id and fail later (read final status via sendkuy_get_messages), that one recipient is sent synchronously while several are queued and paced per number, and that the response counts per status but lists only the first 20 messages. The dedupe_key narrative adds retry-safety semantics the annotations do not capture.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Front-loaded with the verb, channel set and recipient cap, then arranged by concern: alternatives, recipient format, side effects, delivery pacing, idempotency, response shape. Long for a description, but nearly every sentence introduces a new operational fact rather than repeating the schema.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a mutating, credit-spending, 11-parameter tool with nested objects, the description covers the risks an agent needs: cost, partial-failure visibility, sync vs queued delivery, idempotency, and where to read the remaining results. An output schema exists, so the brief note about the response is a bonus rather than a gap-filler.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 91%, so the schema carries most parameter meaning, but the description adds operational detail not in the schema: phone numbers must be E.164 with the leading + and a concrete example, and that a grp_ id may be substituted for individual recipients. It still says nothing about media, attachments, schedule_at, template_id or gateway_id, so it does not fully cover the 11-parameter surface.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb and resource (send one message body), plus the hard scope constraint of 1 to 100 recipients on exactly one of three named channels. It also names what it is not: batch sends with per-recipient content and dashboard campaigns, so an agent can distinguish it from sendkuy_send_batch and sendkuy_start_campaign without opening either schema.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Explicit when-to-use (alert, summary, one-off notification where everyone gets the same text), explicit alternative for divergent content (sendkuy_send_batch, with examples of branch/order summaries), and an explicit route for dashboard-prepared campaigns (sendkuy_start_campaign). It even says how to target a saved group by putting its grp_ id in to.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.