Manage DialMyCalls contacts and groups; read broadcasts; send text and voice broadcasts on approval.
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.
Cancel an outgoing or scheduled call broadcast that has not finished. Calls already placed are not undone.
The call broadcast id.
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.
Cancel an outgoing or scheduled call broadcast that has not finished. Calls already placed are not undone.
| Argument | Type | Description |
|---|---|---|
| id* | string | The call broadcast id. |
{
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"required": [
"id"
],
"properties": {
"id": {
"type": "string",
"pattern": "^[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}$",
"description": "The call broadcast id."
}
}
}Cancel an outgoing or scheduled text broadcast that has not finished. Texts already sent are not undone.
| Argument | Type | Description |
|---|---|---|
| id* | string | The text broadcast id. |
{
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"required": [
"id"
],
"properties": {
"id": {
"type": "string",
"pattern": "^[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}$",
"description": "The text broadcast id."
}
}
}Add a contact (phone number required) to the contact list, optionally into contact groups. Sends nothing to the contact.
| Argument | Type | Description |
|---|---|---|
| string | ||
| phone* | string | Phone number, e.g. 5555555555. |
| extra1 | string | Miscellaneous data about the contact. |
| lastname | string | |
| extension | string | Phone extension. |
| firstname | string | |
| group_ids | array | Contact groups the contact belongs to (from dialmycalls_list_groups). |
{
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"required": [
"phone"
],
"properties": {
"email": {
"type": "string",
"format": "email",
"pattern": "^(?:[A-Za-z0-9_'+\\-]+\\.)*[A-Za-z0-9_'+\\-]*[A-Za-z0-9_+-]@(?:[A-Za-z0-9][A-Za-z0-9\\-]*\\.)+[A-Za-z]{2,}$",
"maxLength": 254
},
"phone": {
"type": "string",
"maxLength": 30,
"minLength": 7,
"description": "Phone number, e.g. 5555555555."
},
"extra1": {
"type": "string",
"maxLength": 500,
"description": "Miscellaneous data about the contact."
},
"lastname": {
"type": "string",
"maxLength": 100
},
"extension": {
"type": "string",
"maxLength": 10,
"description": "Phone extension."
},
"firstname": {
"type": "string",
"maxLength": 100
},
"group_ids": {
"type": "array",
"items": {
"type": "string",
"pattern": "^[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}$",
"description": "A contact group id."
},
"maxItems": 100,
"description": "Contact groups the contact belongs to (from dialmycalls_list_groups)."
}
}
}Create an empty contact group. Sends nothing.
| Argument | Type | Description |
|---|---|---|
| name* | string | Group name. |
{
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"required": [
"name"
],
"properties": {
"name": {
"type": "string",
"maxLength": 100,
"minLength": 1,
"description": "Group name."
}
}
}Create a voice recording from text (text-to-speech) that a call broadcast can then play. Makes no call and sends nothing.
| Argument | Type | Description |
|---|---|---|
| name* | string | Recording name. |
| text* | string | The text to speak. |
| gender* | string | Voice gender: M or F. |
| language* | string | Language: en or es. |
{
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"required": [
"name",
"text",
"gender",
"language"
],
"properties": {
"name": {
"type": "string",
"maxLength": 100,
"minLength": 1,
"description": "Recording name."
},
"text": {
"type": "string",
"maxLength": 5000,
"minLength": 1,
"description": "The text to speak."
},
"gender": {
"enum": [
"M",
"F"
],
"type": "string",
"description": "Voice gender: M or F."
},
"language": {
"enum": [
"en",
"es"
],
"type": "string",
"description": "Language: en or es."
}
}
}Get the account: credits available (calls and texts spend credits) and the account creation date.
No arguments.
{
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"properties": {}
}Get one voice call broadcast by id (name, recipients, credit cost, send time, pending_cancel).
| Argument | Type | Description |
|---|---|---|
| id* | string | The call broadcast id. |
{
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"required": [
"id"
],
"properties": {
"id": {
"type": "string",
"pattern": "^[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}$",
"description": "The call broadcast id."
}
}
}Get one contact by id.
| Argument | Type | Description |
|---|---|---|
| id* | string | The contact id. |
{
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"required": [
"id"
],
"properties": {
"id": {
"type": "string",
"pattern": "^[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}$",
"description": "The contact id."
}
}
}Get one contact group (name, contacts_count) by id.
| Argument | Type | Description |
|---|---|---|
| id* | string | The contact group id. |
{
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"required": [
"id"
],
"properties": {
"id": {
"type": "string",
"pattern": "^[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}$",
"description": "The contact group id."
}
}
}Get one incoming text message by id.
| Argument | Type | Description |
|---|---|---|
| id* | string | The incoming text id. |
{
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"required": [
"id"
],
"properties": {
"id": {
"type": "string",
"pattern": "^[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}$",
"description": "The incoming text id."
}
}
}Get one voice recording by id (includes its audio file url and whether it is processed and ready).
| Argument | Type | Description |
|---|---|---|
| id* | string | The recording id. |
{
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"required": [
"id"
],
"properties": {
"id": {
"type": "string",
"pattern": "^[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}$",
"description": "The recording id."
}
}
}Get one outgoing text broadcast by id (name, recipients, credit cost, send time, pending_cancel).
| Argument | Type | Description |
|---|---|---|
| id* | string | The text broadcast id. |
{
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"required": [
"id"
],
"properties": {
"id": {
"type": "string",
"pattern": "^[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}$",
"description": "The text broadcast id."
}
}
}List the recipients of a call broadcast with the result per number (answered, voicemail, busy, no answer...), 100 per page.
| Argument | Type | Description |
|---|---|---|
| id* | string | The call broadcast id. |
| limit | integer | Records per page, 1-100 (default 100). |
| start | integer | First record to return, 1-based (default 1). Use next_start from the previous reply to get the next page. |
{
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"required": [
"id"
],
"properties": {
"id": {
"type": "string",
"pattern": "^[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}$",
"description": "The call broadcast id."
},
"limit": {
"type": "integer",
"maximum": 100,
"minimum": 1,
"description": "Records per page, 1-100 (default 100)."
},
"start": {
"type": "integer",
"maximum": 1000000,
"minimum": 1,
"description": "First record to return, 1-based (default 1). Use next_start from the previous reply to get the next page."
}
}
}List caller ID phone numbers on the account (id, name, phone, approved). A call broadcast needs an approved caller ID.
| Argument | Type | Description |
|---|---|---|
| limit | integer | Records per page, 1-100 (default 100). |
| start | integer | First record to return, 1-based (default 1). Use next_start from the previous reply to get the next page. |
{
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"properties": {
"limit": {
"type": "integer",
"maximum": 100,
"minimum": 1,
"description": "Records per page, 1-100 (default 100)."
},
"start": {
"type": "integer",
"maximum": 1000000,
"minimum": 1,
"description": "First record to return, 1-based (default 1). Use next_start from the previous reply to get the next page."
}
}
}List voice call broadcasts (name, recording, recipients, credit cost, send time), 100 per page.
| Argument | Type | Description |
|---|---|---|
| limit | integer | Records per page, 1-100 (default 100). |
| start | integer | First record to return, 1-based (default 1). Use next_start from the previous reply to get the next page. |
{
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"properties": {
"limit": {
"type": "integer",
"maximum": 100,
"minimum": 1,
"description": "Records per page, 1-100 (default 100)."
},
"start": {
"type": "integer",
"maximum": 1000000,
"minimum": 1,
"description": "First record to return, 1-based (default 1). Use next_start from the previous reply to get the next page."
}
}
}List contacts in the account (name, phone, email, groups), 100 per page.
| Argument | Type | Description |
|---|---|---|
| limit | integer | Records per page, 1-100 (default 100). |
| start | integer | First record to return, 1-based (default 1). Use next_start from the previous reply to get the next page. |
{
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"properties": {
"limit": {
"type": "integer",
"maximum": 100,
"minimum": 1,
"description": "Records per page, 1-100 (default 100)."
},
"start": {
"type": "integer",
"maximum": 1000000,
"minimum": 1,
"description": "First record to return, 1-based (default 1). Use next_start from the previous reply to get the next page."
}
}
}List the contacts that belong to one contact group (from dialmycalls_list_groups), 100 per page.
| Argument | Type | Description |
|---|---|---|
| limit | integer | Records per page, 1-100 (default 100). |
| start | integer | First record to return, 1-based (default 1). Use next_start from the previous reply to get the next page. |
| group_id* | string | The contact group id. |
{
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"required": [
"group_id"
],
"properties": {
"limit": {
"type": "integer",
"maximum": 100,
"minimum": 1,
"description": "Records per page, 1-100 (default 100)."
},
"start": {
"type": "integer",
"maximum": 1000000,
"minimum": 1,
"description": "First record to return, 1-based (default 1). Use next_start from the previous reply to get the next page."
},
"group_id": {
"type": "string",
"pattern": "^[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}$",
"description": "The contact group id."
}
}
}List phone numbers on the account's do-not-contact lists (type call or text); these opted out.
| Argument | Type | Description |
|---|---|---|
| limit | integer | Records per page, 1-100 (default 100). |
| start | integer | First record to return, 1-based (default 1). Use next_start from the previous reply to get the next page. |
{
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"properties": {
"limit": {
"type": "integer",
"maximum": 100,
"minimum": 1,
"description": "Records per page, 1-100 (default 100)."
},
"start": {
"type": "integer",
"maximum": 1000000,
"minimum": 1,
"description": "First record to return, 1-based (default 1). Use next_start from the previous reply to get the next page."
}
}
}List contact groups with their contact counts, 100 per page.
| Argument | Type | Description |
|---|---|---|
| limit | integer | Records per page, 1-100 (default 100). |
| start | integer | First record to return, 1-based (default 1). Use next_start from the previous reply to get the next page. |
{
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"properties": {
"limit": {
"type": "integer",
"maximum": 100,
"minimum": 1,
"description": "Records per page, 1-100 (default 100)."
},
"start": {
"type": "integer",
"maximum": 1000000,
"minimum": 1,
"description": "First record to return, 1-based (default 1). Use next_start from the previous reply to get the next page."
}
}
}List text messages people sent to the account's numbers (from, to, message, time), 100 per page.
| Argument | Type | Description |
|---|---|---|
| limit | integer | Records per page, 1-100 (default 100). |
| start | integer | First record to return, 1-based (default 1). Use next_start from the previous reply to get the next page. |
{
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"properties": {
"limit": {
"type": "integer",
"maximum": 100,
"minimum": 1,
"description": "Records per page, 1-100 (default 100)."
},
"start": {
"type": "integer",
"maximum": 1000000,
"minimum": 1,
"description": "First record to return, 1-based (default 1). Use next_start from the previous reply to get the next page."
}
}
}List text-message keywords (id, keyword, status). A text broadcast must be tied to one active keyword.
| Argument | Type | Description |
|---|---|---|
| limit | integer | Records per page, 1-100 (default 100). |
| start | integer | First record to return, 1-based (default 1). Use next_start from the previous reply to get the next page. |
{
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"properties": {
"limit": {
"type": "integer",
"maximum": 100,
"minimum": 1,
"description": "Records per page, 1-100 (default 100)."
},
"start": {
"type": "integer",
"maximum": 1000000,
"minimum": 1,
"description": "First record to return, 1-based (default 1). Use next_start from the previous reply to get the next page."
}
}
}List voice recordings (the messages a call broadcast can play): id, name, type, length, processed. A call needs a processed recording.
| Argument | Type | Description |
|---|---|---|
| limit | integer | Records per page, 1-100 (default 100). |
| start | integer | First record to return, 1-based (default 1). Use next_start from the previous reply to get the next page. |
{
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"properties": {
"limit": {
"type": "integer",
"maximum": 100,
"minimum": 1,
"description": "Records per page, 1-100 (default 100)."
},
"start": {
"type": "integer",
"maximum": 1000000,
"minimum": 1,
"description": "First record to return, 1-based (default 1). Use next_start from the previous reply to get the next page."
}
}
}List shortcodes available to send texts from.
| Argument | Type | Description |
|---|---|---|
| limit | integer | Records per page, 1-100 (default 100). |
| start | integer | First record to return, 1-based (default 1). Use next_start from the previous reply to get the next page. |
{
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"properties": {
"limit": {
"type": "integer",
"maximum": 100,
"minimum": 1,
"description": "Records per page, 1-100 (default 100)."
},
"start": {
"type": "integer",
"maximum": 1000000,
"minimum": 1,
"description": "First record to return, 1-based (default 1). Use next_start from the previous reply to get the next page."
}
}
}List the recipients of a text broadcast with the delivery status per number (delivered, undeliverable, queued...), 100 per page.
| Argument | Type | Description |
|---|---|---|
| id* | string | The text broadcast id. |
| limit | integer | Records per page, 1-100 (default 100). |
| start | integer | First record to return, 1-based (default 1). Use next_start from the previous reply to get the next page. |
{
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"required": [
"id"
],
"properties": {
"id": {
"type": "string",
"pattern": "^[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}$",
"description": "The text broadcast id."
},
"limit": {
"type": "integer",
"maximum": 100,
"minimum": 1,
"description": "Records per page, 1-100 (default 100)."
},
"start": {
"type": "integer",
"maximum": 1000000,
"minimum": 1,
"description": "First record to return, 1-based (default 1). Use next_start from the previous reply to get the next page."
}
}
}List outgoing text (SMS) broadcasts (name, recipients, credit cost, send time), 100 per page.
| Argument | Type | Description |
|---|---|---|
| limit | integer | Records per page, 1-100 (default 100). |
| start | integer | First record to return, 1-based (default 1). Use next_start from the previous reply to get the next page. |
{
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"properties": {
"limit": {
"type": "integer",
"maximum": 100,
"minimum": 1,
"description": "Records per page, 1-100 (default 100)."
},
"start": {
"type": "integer",
"maximum": 1000000,
"minimum": 1,
"description": "First record to return, 1-based (default 1). Use next_start from the previous reply to get the next page."
}
}
}Send (or schedule) an automated VOICE CALL broadcast that plays a recording to real people. THIS SPENDS ACCOUNT CREDITS AND PHONES THE RECIPIENTS; it cannot be undone once it goes out (a scheduled one can be stopped with dialmycalls_cancel_call). Needs an approved caller_id (dialmycalls_list_caller_ids) and a processed recording (dialmycalls_list_recordings or dialmycalls_create_recording_tts). Ask the user to approve the recipients, recording and time first; with confirm false nothing is sent and a preview is returned.
| Argument | Type | Description |
|---|---|---|
| name* | string | Name of the broadcast. |
| confirm* | boolean | MUST be true to send. Set it to true ONLY after the user has explicitly approved the recipients and content in this conversation. With false the tool sends nothing and returns a preview. |
| send_at | string | When to send, an ISO 8601 date-time WITH time zone (e.g. 2026-11-05T14:00:00-05:00). Omit to send immediately. |
| use_amd | boolean | Detect answering machines (default: off). |
| group_id | string | Send to every contact in this contact group (from dialmycalls_list_groups); contacts without a phone number are skipped. |
| recipients | array | People to send to, by phone number (up to 1000). Give recipients, group_id, or both. |
Send (or schedule) a TEXT MESSAGE (SMS) broadcast to real people. THIS SPENDS ACCOUNT CREDITS AND TEXTS THE RECIPIENTS; it cannot be undone once it goes out (a scheduled one can be stopped with dialmycalls_cancel_text). Needs an active keyword (dialmycalls_list_keywords). Up to 10 messages per broadcast. Ask the user to approve the recipients, wording and time first; with confirm false nothing is sent and a preview is returned.
| Argument | Type | Description |
|---|---|---|
| name* | string | Name of the broadcast. |
| confirm* | boolean | MUST be true to send. Set it to true ONLY after the user has explicitly approved the recipients and content in this conversation. With false the tool sends nothing and returns a preview. |
| send_at | string | When to send, an ISO 8601 date-time WITH time zone (e.g. 2026-11-05T14:00:00-05:00). Omit to send immediately. |
| group_id | string | Send to every contact in this contact group (from dialmycalls_list_groups); contacts without a phone number are skipped. |
| messages* | array | The message texts (1-10, each up to 1600 characters). |
| keyword_id* | string | The keyword to tie the broadcast to (an active one from dialmycalls_list_keywords). |
Update a contact. DialMyCalls requires the phone number on every update. Fields you omit are left as they are; if you pass group_ids the contact's groups are REPLACED by that list.
| Argument | Type | Description |
|---|---|---|
| id* | string | The contact id. |
| string | ||
| phone* | string | Phone number, e.g. 5555555555. |
| extra1 | string | Miscellaneous data about the contact. |
| lastname | string | |
| extension | string | Phone extension. |
| firstname | string | |
| group_ids | array | Contact groups the contact belongs to (from dialmycalls_list_groups). |
{
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"required": [
"id",
"phone"
],
"properties": {
"id": {
"type": "string",
"pattern": "^[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}$",
"description": "The contact id."
},
"email": {
"type": "string",
"format": "email",
"pattern": "^(?:[A-Za-z0-9_'+\\-]+\\.)*[A-Za-z0-9_'+\\-]*[A-Za-z0-9_+-]@(?:[A-Za-z0-9][A-Za-z0-9\\-]*\\.)+[A-Za-z]{2,}$",
"maxLength": 254
},
"phone": {
"type": "string",
"maxLength": 30,
"minLength": 7,
"description": "Phone number, e.g. 5555555555."
},
"extra1": {
"type": "string",
"maxLength": 500,
"description": "Miscellaneous data about the contact."
},
"lastname": {
"type": "string",
"maxLength": 100
},
"extension": {
"type": "string",
"maxLength": 10,
"description": "Phone extension."
},
"firstname": {
"type": "string",
"maxLength": 100
},
"group_ids": {
"type": "array",
"items": {
"type": "string",
"pattern": "^[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}$",
"description": "A contact group id."
},
"maxItems": 100,
"description": "Contact groups the contact belongs to (from dialmycalls_list_groups)."
}
}
}| callerid_id* | string | Caller ID to call from (an approved one from dialmycalls_list_caller_ids). |
| recording_id* | string | Recording to play (from dialmycalls_list_recordings). |
{
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"required": [
"name",
"callerid_id",
"recording_id",
"confirm"
],
"properties": {
"name": {
"type": "string",
"maxLength": 100,
"minLength": 1,
"description": "Name of the broadcast."
},
"confirm": {
"type": "boolean",
"description": "MUST be true to send. Set it to true ONLY after the user has explicitly approved the recipients and content in this conversation. With false the tool sends nothing and returns a preview."
},
"send_at": {
"type": "string",
"minLength": 1,
"description": "When to send, an ISO 8601 date-time WITH time zone (e.g. 2026-11-05T14:00:00-05:00). Omit to send immediately."
},
"use_amd": {
"type": "boolean",
"description": "Detect answering machines (default: off)."
},
"group_id": {
"type": "string",
"pattern": "^[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}$",
"description": "Send to every contact in this contact group (from dialmycalls_list_groups); contacts without a phone number are skipped."
},
"recipients": {
"type": "array",
"items": {
"type": "object",
"required": [
"phone"
],
"properties": {
"phone": {
"type": "string",
"maxLength": 30,
"minLength": 7,
"description": "Phone number, e.g. 5555555555 (spaces, dashes and a leading + are allowed)."
},
"lastname": {
"type": "string",
"maxLength": 100
},
"firstname": {
"type": "string",
"maxLength": 100
}
}
},
"maxItems": 1000,
"description": "People to send to, by phone number (up to 1000). Give recipients, group_id, or both."
},
"callerid_id": {
"type": "string",
"pattern": "^[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}$",
"description": "Caller ID to call from (an approved one from dialmycalls_list_caller_ids)."
},
"recording_id": {
"type": "string",
"pattern": "^[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}$",
"description": "Recording to play (from dialmycalls_list_recordings)."
}
}
}| recipients | array | People to send to, by phone number (up to 1000). Give recipients, group_id, or both. |
| shortcode_id | string | Send from this shortcode (from dialmycalls_list_shortcodes); default: the account's number. |
| concatenate_sms | boolean | Combine all messages into one on the recipient's phone. |
{
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"required": [
"name",
"keyword_id",
"messages",
"confirm"
],
"properties": {
"name": {
"type": "string",
"maxLength": 100,
"minLength": 1,
"description": "Name of the broadcast."
},
"confirm": {
"type": "boolean",
"description": "MUST be true to send. Set it to true ONLY after the user has explicitly approved the recipients and content in this conversation. With false the tool sends nothing and returns a preview."
},
"send_at": {
"type": "string",
"minLength": 1,
"description": "When to send, an ISO 8601 date-time WITH time zone (e.g. 2026-11-05T14:00:00-05:00). Omit to send immediately."
},
"group_id": {
"type": "string",
"pattern": "^[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}$",
"description": "Send to every contact in this contact group (from dialmycalls_list_groups); contacts without a phone number are skipped."
},
"messages": {
"type": "array",
"items": {
"type": "string",
"maxLength": 1600,
"minLength": 1
},
"maxItems": 10,
"minItems": 1,
"description": "The message texts (1-10, each up to 1600 characters)."
},
"keyword_id": {
"type": "string",
"pattern": "^[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}$",
"description": "The keyword to tie the broadcast to (an active one from dialmycalls_list_keywords)."
},
"recipients": {
"type": "array",
"items": {
"type": "object",
"required": [
"phone"
],
"properties": {
"phone": {
"type": "string",
"maxLength": 30,
"minLength": 7,
"description": "Phone number, e.g. 5555555555 (spaces, dashes and a leading + are allowed)."
},
"lastname": {
"type": "string",
"maxLength": 100
},
"firstname": {
"type": "string",
"maxLength": 100
}
}
},
"maxItems": 1000,
"description": "People to send to, by phone number (up to 1000). Give recipients, group_id, or both."
},
"shortcode_id": {
"type": "string",
"pattern": "^[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}$",
"description": "Send from this shortcode (from dialmycalls_list_shortcodes); default: the account's number."
},
"concatenate_sms": {
"type": "boolean",
"description": "Combine all messages into one on the recipient's phone."
}
}
}