SendKuy

com.sendkuyPublished by sendkuy.comv1.0.0Updated Oct 30, 2026

Send WhatsApp, SMS and email, verify OTP codes and run campaigns with SendKuy.

Overview

AI-generated overview

SendKuy MCP lets an assistant send WhatsApp, SMS and email, verify OTP codes, and run or monitor campaigns through a SendKuy account.

What you can do
  • Send one message to up to 100 recipients, or up to 500 individually written messages in a batch, on WhatsApp, SMS or email
  • Send one-time verification codes and check the code a user typed
  • Read message status by id or list recent messages by channel, status and time, and cancel messages not yet sent
  • Look up contacts, contact groups, templates and WhatsApp number registration
  • List, start, inspect and pause, resume or cancel campaigns
  • Read account plan, credits and usage, and inspect webhook delivery attempts
When to use it
Useful when an assistant should reach people directly: on-call alerts, per-customer order updates, daily summaries per branch, or OTP flows. Also handy while building an integration, to send a test message or find out why a webhook or message failed.
Requirements
Runs locally over stdio via the npm package, so Node.js and npx are needed. Requires a SendKuy account and an API key in the SENDKUY_API_KEY environment variable, with account:read plus the scopes of the tools you want. Network access to the SendKuy API is required; SENDKUY_BASE_URL can point at a proxy or mock.
Before you install
Sending tools really send messages and spend SendKuy credit, including OTPs and campaign starts; a group send charges every member. Campaign cancel cannot be undone. Grant only the scopes needed, since a key with write scopes exposes sending tools. Recipient phone numbers, emails and message content go to SendKuy as a third party.

Installation

In SourceWeft

  1. Open SendKuy in the dashboard and add it to a workspace.
  2. Enable the server for the chats that should use its tools.

Desktop only via STDIO. STDIO servers start a local process, so they need the SourceWeft desktop host.

Other MCP clients

Follow the launch instructions in the repository.

README

[SendKuy MCP server]

SendKuy MCP server

Give AI assistants and agents a way to reach people: send WhatsApp, SMS and email, verify OTP codes and run campaigns through your SendKuy account.

[npm] [CI] [License: MIT] [sendkuy/sendkuy-mcp MCP server]

Use it while you build an integration ("send a test OTP to my number", "why is my webhook failing?"), or as the notification step of an agent that runs on its own: an on-call alert, a daily revenue summary, an order update per customer.

Full guide with scenarios: docs.sendkuy.com/mcp

Get a key

Create an API key at app.sendkuy.com/user/api. Give it account:read plus the scopes of the tools you want, and nothing more. The server lists only the tools your key can use, so a key with read scopes never sees a tool that sends.

Install

Claude Code:

bash
claude mcp add --transport stdio --env SENDKUY_API_KEY=sk_live_YOUR_API_KEY sendkuy -- npx -y @sendkuy/mcp

Cursor (.cursor/mcp.json), Windsurf and Claude Desktop:

json
{  "mcpServers": {    "sendkuy": {      "command": "npx",      "args": ["-y", "@sendkuy/mcp"],      "env": { "SENDKUY_API_KEY": "sk_live_YOUR_API_KEY" }    }  }}

VS Code (.vscode/mcp.json):

json
{  "inputs": [    {      "type": "promptString",      "id": "sendkuy-key",      "description": "SendKuy API key",      "password": true    }  ],  "servers": {    "sendkuy": {      "type": "stdio",      "command": "npx",      "args": ["-y", "@sendkuy/mcp"],      "env": { "SENDKUY_API_KEY": "${input:sendkuy-key}" }    }  }}

Claude Desktop can also install sendkuy-mcp.mcpb from the latest release with one click.

Tools

ToolWhat it doesScopes
sendkuy_get_accountPlan, credits per channel, usage this period, the key's scopesaccount:read
sendkuy_send_messageOne body to 1–100 recipients, contacts or a group, on one channelmessages:write
sendkuy_send_batchUp to 500 messages with different content, answered row by rowmessages:write
sendkuy_get_messagesStatus of up to 20 messages by idmessages:read
sendkuy_list_messagesRecent messages by channel, status and timemessages:read
sendkuy_cancel_messageCancel a message not sent yetmessages:write
sendkuy_send_verificationSend an OTP codeverifications:write
sendkuy_check_verificationCheck the code a user typedverifications:write
sendkuy_check_whatsapp_numbersWhich numbers are on WhatsAppnumbers:read
sendkuy_find_contactsA contact by phone or external_idcontacts:read
sendkuy_list_templatesSaved message templatestemplates:read
sendkuy_list_groupsContact groups and their sizegroups:read
sendkuy_list_campaignsCampaigns prepared in the dashboardcampaigns:read
sendkuy_start_campaignStart a campaigncampaigns:write
sendkuy_get_campaignProgress and delivery statscampaigns:read
sendkuy_control_campaignPause, resume or cancelcampaigns:write
sendkuy_list_webhook_deliveriesWebhooks and their latest delivery attemptswebhooks:read

Tools that send really send and spend credit. They take an optional dedupe_key: an agent that repeats a step with the same key gets the first answer back instead of sending twice.

Examples

  • On-call alert. "When the health check fails, WhatsApp the on-call group with the service name and the error." The agent sends to the group's grp_ id with dedupe_key set to the incident id.
  • Daily revenue summary. "Every evening, send each branch manager their own numbers." One sendkuy_send_batch call, a different body per manager.
  • Debugging an integration. "Which WhatsApp messages failed in the last hour, and why?" sendkuy_list_messages, then sendkuy_list_webhook_deliveries.

Configuration

Variable
SENDKUY_API_KEYYour API key. Without it, or when the key is invalid or SendKuy can't be reached at start-up, the server still starts and lists its tools, and every call answers with the reason until you fix it and restart the client.
SENDKUY_BASE_URLOnly for a proxy or a mock server in tests. Defaults to https://app.sendkuy.com/api/v1.

License

MIT

Source: README.md at commit bdf9282

Tools

17

sendkuy_get_account

Get SendKuy account

Read the SendKuy account behind this API key: plan, remaining credits per channel (WhatsApp, SMS, email), messages used this billing period, the rate limit, and the scopes this key holds. Check credits before a large send. plan, credits and usage are null for SendKuy staff keys.

Takes no parameters.

sendkuy_send_message

Send a message

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.

Parameterstorequiredbodyrequiredmediachannelrequiredsubjectdedupe_keygateway_idattachmentsschedule_attemplate_idtemplate_parameters

sendkuy_send_batch

Send a batch of messages

Send up to 500 independent messages in one call, each with its own channel, recipient and body. Use it when the content differs per recipient: a revenue summary per branch, a notification per order, a reminder per invoice. Every row is answered on its own: one bad number or a channel out of credit fails that row only, and the rest still go out. The answer lists the message id of every row in input order (null where the row failed) and each failed row with its error. Messages are queued and sent in the background, paced per number. 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. Pass dedupe_key so a retried step does not send the batch twice.

Parametersmessagesrequireddedupe_key

sendkuy_get_messages

Get message status

Read the current status of 1 to 20 messages by id (msg_...): queued, scheduled, sending, sent, delivered, read, failed, cancelled and so on, with the error when one failed. Use it after a send to confirm delivery, or to find out why a message failed.

Parametersidsrequired

sendkuy_list_messages

List recent messages

List recent messages, newest first, filtered by channel, status and creation time. Use it to answer "which WhatsApp messages failed in the last hour?" while debugging an integration. To check specific messages, use sendkuy_get_messages.

Parameterslimitcursorstatuschannelcreated_aftercreated_before

sendkuy_cancel_message

Cancel a message

Cancel a message that has not been sent yet, such as a scheduled one or one still queued in a batch. A message already handed to the provider cannot be called back.

Parametersidrequired

sendkuy_send_verification

Send an OTP code

Send a one-time code to a phone number or email address and get a verification id (vrf_...). SendKuy generates the code, sends it, and falls back through the channels you list in order. Check what the user typed with sendkuy_check_verification. This really sends and spends SendKuy credit. Pass dedupe_key so a retried step does not send a second code.

Parameterstottlbrandemaillocalechannelsdedupe_keycode_length

sendkuy_check_verification

Check an OTP code

Check the code a user typed against a verification from sendkuy_send_verification. status approved means the code was right. A wrong code answers verification_code_invalid and uses up one of checks_remaining.

Parametersidrequiredcoderequired

sendkuy_check_whatsapp_numbers

Check WhatsApp numbers

Check whether up to 50 phone numbers are registered on WhatsApp before you send to them. Numbers must be E.164 with the leading +; a local number without the country code comes back registered: null. Limited to 10 calls a minute per key.

Parametersnumbersrequiredgateway_id

sendkuy_find_contacts

Find a contact

Find one saved contact by phone number (E.164) or by external_id, the id your own system gave the customer. Returns contact: null when nobody matches. Use the contact id (con_...) as a recipient in sendkuy_send_message.

Parametersphoneexternal_id

sendkuy_list_templates

List message templates

List the message templates saved in SendKuy, with their channel, subject and body. Variables in a body are written as placeholders the template fills in. Pass a WhatsApp template id as template_id to sendkuy_send_message.

Parameterslimitcursor

sendkuy_list_groups

List contact groups

List the contact groups in SendKuy with how many contacts each holds. Put a group id (grp_...) in the to field of sendkuy_send_message to send to every member; check contact_count first, because every member is charged.

Parameterslimitcursor

sendkuy_list_campaigns

List campaigns

List campaigns, newest first, with their status and audience size (total_contacts). Campaign content is written in the SendKuy dashboard; a draft found here is ready to run with sendkuy_start_campaign.

Parameterslimitcursor

sendkuy_start_campaign

Start a campaign

Start a draft or scheduled campaign. An instant campaign starts sending to every eligible contact in its group, is refused with insufficient_credits when the balance does not cover them, and spends real SendKuy credit. A scheduled or recurring campaign waits for its time. If a person is in the conversation, tell them the campaign name and total_contacts before you start it. Pause or cancel it with sendkuy_control_campaign.

Parametersidrequired

sendkuy_get_campaign

Get campaign progress

Read a campaign: status, progress (processed_contacts of total_contacts), why it is paused, and delivery stats (sent, delivered, failed, opened, replied, unsubscribed) overall and per channel.

Parametersidrequired

sendkuy_control_campaign

Pause, resume or cancel a campaign

Pause a running campaign, resume a paused one, or cancel it for good. Pause is the emergency brake when a campaign is going out wrong: messages not yet sent stay unsent until you resume. Cancel cannot be undone.

Parametersidrequiredactionrequired

sendkuy_list_webhook_deliveries

List webhook deliveries

Show the webhooks on this account and their latest delivery attempts: the HTTP status your endpoint answered, the error, an excerpt of the response, and when the next retry is due. Use it to answer "why is my webhook failing?". Without webhook_id it reads the first five webhooks.

Parameterslimitwebhook_id

Version history

1
  1. v1.0.0LatestOct 29, 2026

Score

90% of the applicable checks met

How complete this listing is, computed from the registry entry, the endpoint and public sources. Not a rating of the server and not a statement that it is safe or working today: reachability is a dated check, and no installs or reviews go into the score.

  • Reached in the last 30 days25 pts
  • Auth declared10 pts

    Declare the credential headers in the registry entry, or keep the endpoint answering the probe so its auth can be classified.

  • Tools listedRequired15 pts
  • DescriptionRequired15 pts
  • Logo10 pts
  • Documentation15 pts
  • License10 pts