Read Voodoo SMS credits, reports, inbox and lists; send one SMS; manage the opt-out blacklist.
Maintain this server? Claim it
Call this server's tools from your browser. Nothing to install.
Requests go through mcptry because browsers can't call most MCP servers directly. Header values are sent to the server for that request only and are never stored or logged.
Tool list from our last check. Connect live to refresh it.
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.
Phone number in international format with the country code and no leading 0, e.g. 447700900123.
The server marks this tool as destructive. Running it may delete or overwrite data on the server or in any account you connected with your headers.
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.
| Argument | Type | Description |
|---|---|---|
| number* | string | Phone number in international format with the country code and no leading 0, e.g. 447700900123. |
{
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"required": [
"number"
],
"properties": {
"number": {
"type": "string",
"description": "Phone number in international format with the country code and no leading 0, e.g. 447700900123."
}
}
}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}.
| Argument | Type | Description |
|---|---|---|
| id* | integer | The scheduled message id (id from list_scheduled_messages). |
{
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"required": [
"id"
],
"properties": {
"id": {
"type": "integer",
"maximum": 9007199254740991,
"description": "The scheduled message id (id from list_scheduled_messages).",
"exclusiveMinimum": 0
}
}
}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.
| Argument | Type | Description |
|---|---|---|
| name* | string | Unique list name, at most 32 characters. |
| country | integer | Default country calling code for the list (default 44). |
| contacts* | array | Contacts to put in the list: [{number, dynamic_data?}]. |
| description | string | Optional description. |
{
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"required": [
"name",
"contacts"
],
"properties": {
"name": {
"type": "string",
"maxLength": 32,
"minLength": 1,
"description": "Unique list name, at most 32 characters."
},
"country": {
"type": "integer",
"maximum": 999,
"minimum": 1,
"description": "Default country calling code for the list (default 44)."
},
"contacts": {
"type": "array",
"items": {
"type": "object",
"required": [
"number"
],
"properties": {
"number": {
"type": "string",
"description": "Phone number in international format with the country code and no leading 0, e.g. 447700900123."
},
"dynamic_data": {
"type": "object",
"description": "Custom fields for this contact as {name: value}, at most 7 (usable in messages as {name}).",
"propertyNames": {
"type": "string",
"maxLength": 64,
"minLength": 1
},
"additionalProperties": {
"type": "string",
"maxLength": 255
}
}
}
},
"maxItems": 500,
"minItems": 1,
"description": "Contacts to put in the list: [{number, dynamic_data?}]."
},
"description": {
"type": "string",
"maxLength": 255,
"description": "Optional description."
}
}
}Get one contact list including its contacts (id, number, status, dynamic_data, created_at). Voodoo SMS REST: GET /contacts?contact_list_id=.
| Argument | Type | Description |
|---|---|---|
| skip | integer | Where to start the returned results (default 0). |
| limit | integer | Number of contacts to return (default 100, max 5000). |
| contact_list_id* | integer | The contact list id (id from list_contact_lists). |
{
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"required": [
"contact_list_id"
],
"properties": {
"skip": {
"type": "integer",
"maximum": 1000000,
"minimum": 0,
"description": "Where to start the returned results (default 0)."
},
"limit": {
"type": "integer",
"maximum": 5000,
"minimum": 1,
"description": "Number of contacts to return (default 100, max 5000)."
},
"contact_list_id": {
"type": "integer",
"maximum": 9007199254740991,
"description": "The contact list id (id from list_contact_lists).",
"exclusiveMinimum": 0
}
}
}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.
No arguments.
{
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"properties": {}
}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.
| Argument | Type | Description |
|---|---|---|
| end | string | Newest date a number was added. |
| skip | integer | Where to start the returned results (default 0). |
| sort | string | Sort by id, ASC or DESC (default DESC). |
| limit | integer | Number of entries to return (default 25, max 1000). |
| start | string | Oldest date a number was added. |
| number | string | Look up a single number (international format, e.g. 447700900123). |
{
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"properties": {
"end": {
"type": "string",
"maxLength": 100,
"minLength": 1,
"description": "Newest date a number was added."
},
"skip": {
"type": "integer",
"maximum": 1000000,
"minimum": 0,
"description": "Where to start the returned results (default 0)."
},
"sort": {
"enum": [
"ASC",
"DESC"
],
"type": "string",
"description": "Sort by id, ASC or DESC (default DESC)."
},
"limit": {
"type": "integer",
"maximum": 1000,
"minimum": 1,
"description": "Number of entries to return (default 25, max 1000)."
},
"start": {
"type": "string",
"maxLength": 100,
"minLength": 1,
"description": "Oldest date a number was added."
},
"number": {
"type": "string",
"description": "Look up a single number (international format, e.g. 447700900123)."
}
}
}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.
| Argument | Type | Description |
|---|---|---|
| skip | integer | Where to start the returned results (default 0). |
| limit | integer | Number of lists to return (default 100, max 5000). |
{
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"properties": {
"skip": {
"type": "integer",
"maximum": 1000000,
"minimum": 0,
"description": "Where to start the returned results (default 0)."
},
"limit": {
"type": "integer",
"maximum": 5000,
"minimum": 1,
"description": "Number of lists to return (default 100, max 5000)."
}
}
}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.
| Argument | Type | Description |
|---|---|---|
| to | string | Only messages sent to this number (international format, e.g. 447700900123). |
| end | string | End of the date range to filter on. |
| limit | integer | Number of reports to return (default 25, max 1000). |
| start | string | Start of the date range to filter on. |
| status | string | Only messages with this status. |
| sent_at | string | Only messages sent at this date/time. |
| sender_id | string | The sender id the messages were sent with. |
| message_id | string | The messages[].id returned when the SMS was sent. |
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.
| Argument | Type | Description |
|---|---|---|
| to | string | The number the message was sent to: your virtual number (international format). |
| end | string | Newest date of the messages to return. |
| from | string | The number the message came from (international format). |
| skip | integer | Where to start the returned results (default 0). |
| sort | string | Sort by id, ASC or DESC (default DESC). |
| limit | integer | Number of messages to return (default 25, max 1000). |
| start | string | Oldest date of the messages to return. |
| keyword | string | The keyword (first word of the message). |
| reference | string |
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.
No arguments.
{
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"properties": {}
}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.
No arguments.
{
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"properties": {}
}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.
| Argument | Type | Description |
|---|---|---|
| to* | string | ONE recipient number: international format with the country code and no leading 0 (447700900123), or a national number if country_code is given. |
| msg* | string | 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). |
| from* | string | Sender id shown to the recipient: 4 to 11 letters/digits or a number of up to 15 digits. |
| sandbox* | boolean | 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. |
| schedule | string | Send later: a UNIX timestamp, ISO 8601 (2026-12-25T09:00:00+00:00) or plain English ('2 weeks'). Must be in the future. |
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}.
| Argument | Type | Description |
|---|---|---|
| name | string | New list name, at most 32 characters. |
| contacts | array | Contacts to add: [{number, dynamic_data?}]. |
| contact_list_id* | integer | The contact list id (id from list_contact_lists). |
{
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"required": [
"contact_list_id"
],
"properties": {
"name": {
"type": "string",
"maxLength": 32,
"minLength": 1,
"description": "New list name, at most 32 characters."
},
"contacts": {
"type": "array",
"items": {
"type": "object",
"required": [
"number"
],
"properties": {
"number": {
"type": "string",
"description": "Phone number in international format with the country code and no leading 0, e.g. 447700900123."
},
"dynamic_data": {
"type": "object",
"description": "Custom fields for this contact as {name: value}, at most 7 (usable in messages as {name}).",
"propertyNames": {
"type": "string",
"maxLength": 64,
"minLength": 1
},
"additionalProperties": {
"type": "string",
"maxLength": 255
}
}
}
},
"maxItems": 500,
"minItems": 1,
"description": "Contacts to add: [{number, dynamic_data?}]."
},
"contact_list_id": {
"type": "integer",
"maximum": 9007199254740991,
"description": "The contact list id (id from list_contact_lists).",
"exclusiveMinimum": 0
}
}
}| delivered_at |
| string |
| Only messages delivered at this date/time. |
| external_reference | string | The external_reference used when sending. |
{
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"properties": {
"to": {
"type": "string",
"description": "Only messages sent to this number (international format, e.g. 447700900123)."
},
"end": {
"type": "string",
"maxLength": 100,
"minLength": 1,
"description": "End of the date range to filter on."
},
"limit": {
"type": "integer",
"maximum": 1000,
"minimum": 1,
"description": "Number of reports to return (default 25, max 1000)."
},
"start": {
"type": "string",
"maxLength": 100,
"minLength": 1,
"description": "Start of the date range to filter on."
},
"status": {
"enum": [
"Delivered",
"Sent - Awaiting Delivery",
"Undelivered",
"Expired",
"Rejected"
],
"type": "string",
"description": "Only messages with this status."
},
"sent_at": {
"type": "string",
"maxLength": 100,
"minLength": 1,
"description": "Only messages sent at this date/time."
},
"sender_id": {
"type": "string",
"maxLength": 30,
"minLength": 1,
"description": "The sender id the messages were sent with."
},
"message_id": {
"type": "string",
"maxLength": 200,
"minLength": 1,
"description": "The messages[].id returned when the SMS was sent."
},
"delivered_at": {
"type": "string",
"maxLength": 100,
"minLength": 1,
"description": "Only messages delivered at this date/time."
},
"external_reference": {
"type": "string",
"maxLength": 200,
"minLength": 1,
"description": "The external_reference used when sending."
}
}
}| The external_reference of the original outgoing message. |
{
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"properties": {
"to": {
"type": "string",
"description": "The number the message was sent to: your virtual number (international format)."
},
"end": {
"type": "string",
"maxLength": 100,
"minLength": 1,
"description": "Newest date of the messages to return."
},
"from": {
"type": "string",
"description": "The number the message came from (international format)."
},
"skip": {
"type": "integer",
"maximum": 1000000,
"minimum": 0,
"description": "Where to start the returned results (default 0)."
},
"sort": {
"enum": [
"ASC",
"DESC"
],
"type": "string",
"description": "Sort by id, ASC or DESC (default DESC)."
},
"limit": {
"type": "integer",
"maximum": 1000,
"minimum": 1,
"description": "Number of messages to return (default 25, max 1000)."
},
"start": {
"type": "string",
"maxLength": 100,
"minLength": 1,
"description": "Oldest date of the messages to return."
},
"keyword": {
"type": "string",
"maxLength": 100,
"minLength": 1,
"description": "The keyword (first word of the message)."
},
"reference": {
"type": "string",
"maxLength": 200,
"minLength": 1,
"description": "The external_reference of the original outgoing message."
}
}
}| timezone | string | Timezone for `schedule` (default UTC). |
| country_code | integer | Country calling code of the recipient (e.g. 44), when `to` has no country code. |
| external_reference | string | Your own reference for this SMS (e.g. an order number); shown in reports. |
{
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"required": [
"to",
"from",
"msg",
"sandbox"
],
"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."
},
"msg": {
"type": "string",
"maxLength": 918,
"minLength": 1,
"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)."
},
"from": {
"type": "string",
"description": "Sender id shown to the recipient: 4 to 11 letters/digits or a number of up to 15 digits."
},
"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."
},
"schedule": {
"type": "string",
"maxLength": 100,
"minLength": 1,
"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."
},
"timezone": {
"type": "string",
"maxLength": 64,
"minLength": 1,
"description": "Timezone for `schedule` (default UTC)."
},
"country_code": {
"type": "integer",
"maximum": 999,
"minimum": 1,
"description": "Country calling code of the recipient (e.g. 44), when `to` has no country code."
},
"external_reference": {
"type": "string",
"maxLength": 100,
"minLength": 1,
"description": "Your own reference for this SMS (e.g. an order number); shown in reports."
}
}
}