Voodoo SMS MCP by usefulapi
Read Voodoo SMS credits, reports, inbox and lists; send one SMS; manage the opt-out blacklist.
Should I use this
Quality & Safety
Findings (3)
- LOWin voodoosms_list_delivery_reports
- LOWin voodoosms_list_scheduled_messages
- LOWin voodoosms_cancel_scheduled_message
Based on automated analysis of tool definitions and protocol compliance.
Context Cost
This is the approximate number of tokens consumed each time the server's tools are loaded into a model's context. Higher counts reduce the attention available for other tasks.
Install
One-Click Install
Add this to your `claude_desktop_config.json` file:
{
"mcpServers": {
"voodoo-sms": {
"url": "https://voodoo-sms.usefulapi.io/mcp"
}
}
}Remote endpoints
https://voodoo-sms.usefulapi.io/mcpstreamable-httpWhat it can do
Tool inventory
Tools (13)
🟢voodoosms_get_credits
Get the SMS credit balance of the account. One credit pays for one 160-character SMS part (153 characters per part in a long message). Voodoo SMS REST: GET /credits.
Input Schema
{
"type": "object",
"properties": {},
"$schema": "https://json-schema.org/draft/2020-12/schema"
}🟢voodoosms_list_delivery_reports(message_id, sender_id, to, sent_at, delivered_at, ...)
List delivery reports of sent messages (message_id, sender_id, to, sent_at, delivered_at, price, status), optionally filtered. Use it to check whether a message was delivered. Dates accept a UNIX timestamp, ISO 8601 (2026-10-01T09:00:00+00:00) or plain English ('yesterday', '2 weeks'). Voodoo SMS REST: GET /report.
Input Schema
{
"type": "object",
"properties": {
"message_id": {
"description": "The messages[].id returned when the SMS was sent.",
"type": "string",
"minLength": 1,
"maxLength": 200
},
"sender_id": {
"description": "The sender id the messages were sent with.",
"type": "string",
"minLength": 1,
"maxLength": 30
},
"to": {
"description": "Only messages sent to this number (international format, e.g. 447700900123).",
"type": "string"
},
"sent_at": {
"description": "Only messages sent at this date/time.",
"type": "string",
"minLength": 1,
"maxLength": 100
},
"delivered_at": {
"description": "Only messages delivered at this date/time.",
"type": "string",
"minLength": 1,
"maxLength": 100
},
"external_reference": {
"description": "The external_reference used when sending.",
"type": "string",
"minLength": 1,
"maxLength": 200
},
"status": {
"description": "Only messages with this status.",
"type": "string",
"enum": [
"Delivered",
"Sent - Awaiting Delivery",
"Undelivered",
"Expired",
"Rejected"
]
},
"start": {
"description": "Start of the date range to filter on.",
"type": "string",
"minLength": 1,
"maxLength": 100
},
"end": {
"description": "End of the date range to filter on.",
"type": "string",
"minLength": 1,
"maxLength": 100
},
"limit": {
"description": "Number of reports to return (default 25, max 1000).",
"type": "integer",
"minimum": 1,
"maximum": 1000
}
},
"$schema": "https://json-schema.org/draft/2020-12/schema"
}🟢voodoosms_list_scheduled_messages
List SMS that were scheduled through the send API and are still waiting to go out (messages scheduled in the portal's Web SMS are not shown). Voodoo SMS REST: GET /schedule.
Input Schema
{
"type": "object",
"properties": {},
"$schema": "https://json-schema.org/draft/2020-12/schema"
}🟢voodoosms_list_inbox(keyword, start, end, from, to, ...)
List SMS received on the account's Virtual Mobile Numbers (replies and keyword messages). Needs a purchased number; an empty inbox returns an empty result. Dates accept a UNIX timestamp, ISO 8601 or plain English. Voodoo SMS REST: GET /inbox.
Input Schema
{
"type": "object",
"properties": {
"keyword": {
"description": "The keyword (first word of the message).",
"type": "string",
"minLength": 1,
"maxLength": 100
},
"start": {
"description": "Oldest date of the messages to return.",
"type": "string",
"minLength": 1,
"maxLength": 100
},
"end": {
"description": "Newest date of the messages to return.",
"type": "string",
"minLength": 1,
"maxLength": 100
},
"from": {
"description": "The number the message came from (international format).",
"type": "string"
},
"to": {
"description": "The number the message was sent to: your virtual number (international format).",
"type": "string"
},
"reference": {
"description": "The external_reference of the original outgoing message.",
"type": "string",
"minLength": 1,
"maxLength": 200
},
"sort": {
"description": "Sort by id, ASC or DESC (default DESC).",
"type": "string",
"enum": [
"ASC",
"DESC"
]
},
"skip": {
"description": "Where to start the returned results (default 0).",
"type": "integer",
"minimum": 0,
"maximum": 1000000
},
"limit": {
"description": "Number of messages to return (default 25, max 1000).",
"type": "integer",
"minimum": 1,
"maximum": 1000
}
},
"$schema": "https://json-schema.org/draft/2020-12/schema"
}🟢voodoosms_list_numbers
List the Virtual Mobile Numbers (VMNs) the account has purchased, used to receive SMS. Returns an empty result if there are none. Voodoo SMS REST: GET /numbers.
Input Schema
{
"type": "object",
"properties": {},
"$schema": "https://json-schema.org/draft/2020-12/schema"
}🟢voodoosms_list_contact_lists(skip, limit)
List the account's contact lists (id, name, status, size, created/updated times) without their contacts. Returns an empty result if there are none. Voodoo SMS REST: GET /contacts.
Input Schema
{
"type": "object",
"properties": {
"skip": {
"description": "Where to start the returned results (default 0).",
"type": "integer",
"minimum": 0,
"maximum": 1000000
},
"limit": {
"description": "Number of lists to return (default 100, max 5000).",
"type": "integer",
"minimum": 1,
"maximum": 5000
}
},
"$schema": "https://json-schema.org/draft/2020-12/schema"
}🟢voodoosms_get_contact_list(contact_list_id, skip, limit)
Get one contact list including its contacts (id, number, status, dynamic_data, created_at). Voodoo SMS REST: GET /contacts?contact_list_id=.
Input Schema
{
"type": "object",
"properties": {
"contact_list_id": {
"type": "integer",
"exclusiveMinimum": 0,
"maximum": 9007199254740991,
"description": "The contact list id (id from list_contact_lists)."
},
"skip": {
"description": "Where to start the returned results (default 0).",
"type": "integer",
"minimum": 0,
"maximum": 1000000
},
"limit": {
"description": "Number of contacts to return (default 100, max 5000).",
"type": "integer",
"minimum": 1,
"maximum": 5000
}
},
"required": [
"contact_list_id"
],
"$schema": "https://json-schema.org/draft/2020-12/schema"
}🟢voodoosms_list_blacklist(number, start, end, sort, skip, ...)
List the numbers on the account's opt-out blacklist (no SMS is ever sent to them), or look up one number (`{empty: true}` means it is not on the list). Returns an empty result when the blacklist is empty. Voodoo SMS REST: GET /blacklist.
Input Schema
{
"type": "object",
"properties": {
"number": {
"description": "Look up a single number (international format, e.g. 447700900123).",
"type": "string"
},
"start": {
"description": "Oldest date a number was added.",
"type": "string",
"minLength": 1,
"maxLength": 100
},
"end": {
"description": "Newest date a number was added.",
"type": "string",
"minLength": 1,
"maxLength": 100
},
"sort": {
"description": "Sort by id, ASC or DESC (default DESC).",
"type": "string",
"enum": [
"ASC",
"DESC"
]
},
"skip": {
"description": "Where to start the returned results (default 0).",
"type": "integer",
"minimum": 0,
"maximum": 1000000
},
"limit": {
"description": "Number of entries to return (default 25, max 1000).",
"type": "integer",
"minimum": 1,
"maximum": 1000
}
},
"$schema": "https://json-schema.org/draft/2020-12/schema"
}🔴voodoosms_send_sms(to, from, msg, country_code, schedule, ...)
WRITE: SENDS A REAL SMS to ONE recipient and USES THE ACCOUNT'S CREDITS (1 credit per message part, charged whether or not it is delivered; it cannot be undone). `sandbox` is required: true validates and prices the message without sending or charging, false sends it for real. Optional `schedule` queues it for later (cancel with cancel_scheduled_message). Do not retry after an error or timeout without checking list_delivery_reports / list_scheduled_messages, or the recipient may get it twice. One recipient per call; there is no bulk or list send. Voodoo SMS REST: POST /sendsms.
Input Schema
{
"type": "object",
"properties": {
"to": {
"type": "string",
"description": "ONE recipient number: international format with the country code and no leading 0 (447700900123), or a national number if country_code is given."
},
"from": {
"type": "string",
"description": "Sender id shown to the recipient: 4 to 11 letters/digits or a number of up to 15 digits."
},
"msg": {
"type": "string",
"minLength": 1,
"maxLength": 918,
"description": "The message text. 160 characters per part (153 in a long message), 70 (67) if it has emoji or other non-GSM characters; maximum 918 (402 with Unicode)."
},
"country_code": {
"description": "Country calling code of the recipient (e.g. 44), when `to` has no country code.",
"type": "integer",
"minimum": 1,
"maximum": 999
},
"schedule": {
"description": "Send later: a UNIX timestamp, ISO 8601 (2026-12-25T09:00:00+00:00) or plain English ('2 weeks'). Must be in the future.",
"type": "string",
"minLength": 1,
"maxLength": 100
},
"timezone": {
"description": "Timezone for `schedule` (default UTC).",
"type": "string",
"minLength": 1,
"maxLength": 64
},
"external_reference": {
"description": "Your own reference for this SMS (e.g. an order number); shown in reports.",
"type": "string",
"minLength": 1,
"maxLength": 100
},
"sandbox": {
"type": "boolean",
"description": "REQUIRED. true = validate and price the message only: nothing is sent and no credits are used. false = really send the SMS and use credits. Use true first unless the user clearly asked to send now."
}
},
"required": [
"to",
"from",
"msg",
"sandbox"
],
"$schema": "https://json-schema.org/draft/2020-12/schema"
}🔴voodoosms_cancel_scheduled_message(id)
WRITE: cancels one SMS that was scheduled through the send API, so it will not be sent. A message that has already gone out cannot be cancelled. Whether credits are refunded for a cancelled message is not documented by the vendor. Voodoo SMS REST: DELETE /schedule/{id}.
Input Schema
{
"type": "object",
"properties": {
"id": {
"type": "integer",
"exclusiveMinimum": 0,
"maximum": 9007199254740991,
"description": "The scheduled message id (id from list_scheduled_messages)."
}
},
"required": [
"id"
],
"$schema": "https://json-schema.org/draft/2020-12/schema"
}🔴voodoosms_add_to_blacklist(number)
WRITE: adds one number to the account's opt-out blacklist; from then on no SMS is sent to it (sends to it fail with error 20). Use it for a recipient who asked to stop. This tool cannot remove a number again. Voodoo SMS REST: POST /blacklist.
Input Schema
{
"type": "object",
"properties": {
"number": {
"type": "string",
"description": "Phone number in international format with the country code and no leading 0, e.g. 447700900123."
}
},
"required": [
"number"
],
"$schema": "https://json-schema.org/draft/2020-12/schema"
}🔴voodoosms_create_contact_list(name, description, country, contacts)
WRITE: creates a new contact list with up to 500 contacts (the list name must be unique, at most 32 characters). It does not send anything. Voodoo SMS REST: POST /contacts.
Input Schema
{
"type": "object",
"properties": {
"name": {
"type": "string",
"minLength": 1,
"maxLength": 32,
"description": "Unique list name, at most 32 characters."
},
"description": {
"description": "Optional description.",
"type": "string",
"maxLength": 255
},
"country": {
"description": "Default country calling code for the list (default 44).",
"type": "integer",
"minimum": 1,
"maximum": 999
},
"contacts": {
"minItems": 1,
"maxItems": 500,
"type": "array",
"items": {
"type": "object",
"properties": {
"number": {
"type": "string",
"description": "Phone number in international format with the country code and no leading 0, e.g. 447700900123."
},
"dynamic_data": {
"description": "Custom fields for this contact as {name: value}, at most 7 (usable in messages as {name}).",
"type": "object",
"propertyNames": {
"type": "string",
"minLength": 1,
"maxLength": 64
},
"additionalProperties": {
"type": "string",
"maxLength": 255
}
}
},
"required": [
"number"
]
},
"description": "Contacts to put in the list: [{number, dynamic_data?}]."
}
},
"required": [
"name",
"contacts"
],
"$schema": "https://json-schema.org/draft/2020-12/schema"
}🔴voodoosms_update_contact_list(contact_list_id, name, contacts)
WRITE: renames a contact list and/or adds up to 500 contacts to it (existing contacts are not removed). Adding dynamic data needs a list created as dynamic. It does not send anything. Voodoo SMS REST: PUT /contacts/{contact_list_id}.
Input Schema
{
"type": "object",
"properties": {
"contact_list_id": {
"type": "integer",
"exclusiveMinimum": 0,
"maximum": 9007199254740991,
"description": "The contact list id (id from list_contact_lists)."
},
"name": {
"description": "New list name, at most 32 characters.",
"type": "string",
"minLength": 1,
"maxLength": 32
},
"contacts": {
"description": "Contacts to add: [{number, dynamic_data?}].",
"minItems": 1,
"maxItems": 500,
"type": "array",
"items": {
"type": "object",
"properties": {
"number": {
"type": "string",
"description": "Phone number in international format with the country code and no leading 0, e.g. 447700900123."
},
"dynamic_data": {
"description": "Custom fields for this contact as {name: value}, at most 7 (usable in messages as {name}).",
"type": "object",
"propertyNames": {
"type": "string",
"minLength": 1,
"maxLength": 64
},
"additionalProperties": {
"type": "string",
"maxLength": 255
}
}
},
"required": [
"number"
]
}
}
},
"required": [
"contact_list_id"
],
"$schema": "https://json-schema.org/draft/2020-12/schema"
}Community
Evidence