MCP Tools Reference

All tools are called via the MCP protocol over SSE transport. Each tool requires authentication unless running in demo mode.

Tokens

Two token types pass over the wire — both are bearer tokens, only the

scope differs:

`POST /api/orgs/verify`. Pass it on `/api/v1/agents`, provision flows,

and admin tools. The same value used to be called team_token,

owner_token, or ownerToken — those names are deprecated; use

teamToken.

registers a new agent (`POST /api/v1/agents`). Scopes a session to ONE

agent. Used for runtime tools (send-message, make-call, etc.). The

agentId parameter is auto-detected from this token.

Each tool's description starts with a [scope: ...] prefix indicating

which token tier may call it. The four scopes form a strict hierarchy

— a higher scope subsumes every lower scope:

token. The vast majority of tools (49 of ~57). Send-message, make-call,

channel-status, etc.

administration: provisioning, agent registration, billing, channel ops. operations. Today: `comms_create_team`, `comms_list_teams`.

A super-admin token can call every tool. An org-admin token can call

agent and org-admin tools but not super-admin ones. An agent

token can call only agent tools (and any).

Tool name convention

Every Butt-Dial tool starts with the comms_ prefix (e.g. comms_send_message,

comms_get_channel_status). The prefix is a stable namespace, not a wart

— it de-conflicts our tools from other MCP servers an agent may have

mounted alongside ours. The prefix is intentional and will not be removed.

Naming convention

All input and output fields are camelCase (agentId, displayName,

callbackUrl, retryAfter). Some legacy snake_case keys are still

accepted on input and emitted on output for backward compatibility, but

they are marked deprecated and will be removed in a future release.

Gendered Languages

Languages like Hebrew, Arabic, French, Spanish, Portuguese, Italian, German, Russian, Polish, and Hindi conjugate verbs and adjectives by gender. For these languages:

For voice calls, gender conjugation instructions are automatically appended to the system prompt. For text messages, gender context is returned as metadata in the response so your AI can conjugate correctly.

Non-gendered languages (English, Chinese, Japanese, etc.) are unaffected — the gender parameters are accepted but produce no instructions.


comms_ping

Health check and connectivity test.

ParameterTypeRequiredDescription
messagestringNoEcho message
{

"status": "ok",

"server": "agentos-comms",

"version": "0.1.0",

"echo": "hello"

}

comms_send_message

Send SMS, email, or WhatsApp message.

ParameterTypeRequiredDescription
agentIdstringNoAuto-detected from agent token
tostringYesRecipient: E.164 phone, WhatsApp group ID (120363...@g.us), or email
bodystringNoMessage text (required unless media is provided)
channelenumNosms, email, whatsapp, or line (default: sms)
subjectstringNoEmail subject (required for email)
htmlstringNoHTML body for email
mediastring[]NoMedia URLs to attach. WhatsApp: one message per file (body sent as caption). Email: fetched and attached. SMS: first URL sent as MMS.
templateIdstringNoWhatsApp template SID
templateVarsobjectNoTemplate variables
targetGenderenumNomale, female, or unknown — gender of the message recipient. Used for gendered languages (Hebrew, Arabic, French, etc.). Returns gender context metadata in the response so your AI can conjugate correctly.
{

"type": "status",

"status": "accepted",

"messageId": "uuid",

"channel": "sms",

"to": "+15559876543"

}

After sending, delivery status updates (sent, delivered, failed) are POSTed to your callbackUrl.

Compliance checks: Content filter, DNC list, TCPA time-of-day, CAN-SPAM (email).


comms_make_call

Initiate an outbound AI voice call.

ParameterTypeRequiredDescription
agentIdstringNoAuto-detected from agent token
tostringYesPhone number in E.164 format
systemPromptstringNoAI instructions for this call
greetingstringNoFirst thing the AI says
voicestringNoTTS voice ID
languagestringNoLanguage code (e.g. en-US)
targetGenderenumNomale, female, or unknown — gender of the call recipient. For gendered languages, gender conjugation instructions are automatically appended to the system prompt.
recipientTimezonestringNoIANA timezone (e.g. America/New_York). Auto-detected from phone prefix if omitted
{

"success": true,

"callSid": "CAxxxxxx",

"sessionId": "uuid",

"status": "queued",

"from": "+15551234567",

"to": "+15559876543"

}

comms_send_voice_message

Generate TTS audio and deliver via phone call.

ParameterTypeRequiredDescription
agentIdstringNoAuto-detected from agent token
tostringYesPhone number in E.164
textstringYesText to speak
voicestringNoTTS voice ID
targetGenderenumNomale, female, or unknown — gender of the call recipient

comms_get_waiting_messages

Fetch messages that couldn't be delivered while your client was offline (dead letters). Fetching automatically acknowledges them — no separate step needed.

ParameterTypeRequiredDescription
agentIdstringYesAgent ID
{

"success": true,

"messages": [

{

"id": 1,

"channel": "sms",

"direction": "inbound",

"from": "+15559876543",

"to": "+15551234567",

"body": "Are you there?",

"reason": "callback_failed",

"createdAt": "2026-02-22T10:00:00Z"

}

],

"count": 1

}

Dead letters are stored when: client is offline (inbound), send fails (outbound), or provider errors. Acknowledged messages are auto-purged after 7 days.


comms_transfer_call

Transfer a live voice call to a human or another client.

ParameterTypeRequiredDescription
agentIdstringNoAuto-detected from agent token
callSidstringYesActive call SID
tostringYesDestination phone or client ID
announcementTextstringNoText to say before transfer

comms_get_group_members

List participants of a WhatsApp group. Returns phone numbers so you can DM any member directly.

ParameterTypeRequiredDescription
groupIdstringYesWhatsApp group ID (e.g. 120363XXXXX@g.us)
agentIdstringNoAuto-detected from agent token
{

"success": true,

"groupId": "120363XXXXX@g.us",

"participantCount": 5,

"participants": [

{ "phone": "+15551234567", "isAdmin": true, "displayName": "John" },

{ "phone": "+15559876543", "isAdmin": false, "displayName": "Jane" }

]

}

comms_call_on_behalf

Secretary call — calls someone on your behalf. An AI asks if they're available, and if yes, bridges you into the call.

ParameterTypeRequiredDescription
agentIdstringNoAuto-detected from agent token
targetstringYesPhone number to call (E.164)
requesterPhonestringYesYour phone number — where to bridge if they say yes
targetNamestringNoName of the person being called
requesterNamestringNoYour name
messagestringNoReason for the call
targetGenderenumNomale, female, or unknown — gender of the person being called
recipientTimezonestringNoIANA timezone. Auto-detected from phone prefix if omitted

comms_bridge_call

Manage call bridges — route inbound local calls to outbound local numbers via VoIP.

ParameterTypeRequiredDescription
actionenumYessetup, remove, list, or call
fromNumberstringNo(setup) Caller ID to match, or * for any
localNumberstringNo(setup) Twilio number that receives the call
destinationNumberstringNo(setup/call) Number to dial outbound
labelstringNo(setup) Human-readable label
bridgeIdstringNo(remove/call) Bridge route ID
callerNumberstringNo(call) Number to call first

comms_send_otp

Send a one-time verification code via SMS, email, or WhatsApp. Code expires in 5 minutes.

ParameterTypeRequiredDescription
agentIdstringNoAuto-detected from agent token
tostringYesRecipient (phone E.164 or email)
channelenumYessms, email, or whatsapp
purposestringNoDescription like "account verification"

comms_verify_otp

Verify a one-time code. Returns whether the code is valid.

ParameterTypeRequiredDescription
agentIdstringNoAuto-detected from agent token
contactAddressstringYesPhone or email that received the code
codestringYesThe 6-digit code to verify

comms_record_consent

Record that a contact has given consent to be contacted on a channel.

ParameterTypeRequiredDescription
agentIdstringNoAuto-detected from agent token
contactAddressstringYesPhone number or email
channelenumYessms, voice, email, or whatsapp
consentTypeenumNoexpress, implied, or transactional (default: express)
sourcestringNoHow consent was obtained (web_form, verbal, etc.)

comms_revoke_consent

Revoke a contact's consent on a channel. No further outbound allowed.

ParameterTypeRequiredDescription
agentIdstringNoAuto-detected from agent token
contactAddressstringYesPhone number or email
channelenumYessms, voice, email, or whatsapp

comms_check_consent

Check whether a contact has granted consent on a channel.

ParameterTypeRequiredDescription
agentIdstringNoAuto-detected from agent token
contactAddressstringYesPhone number or email
channelenumYessms, voice, email, or whatsapp

comms_expand_client_pool

Resize the client pool. Admin only.

ParameterTypeRequiredDescription
maxAgentsnumberYesNew maximum client count (1–10000)

comms_provision_channels

Provision phone/SMS/WhatsApp/email/voice for a new client.

ParameterTypeRequiredDescription
agentIdstringYesAgent ID to provision
agentNamestringYesDisplay name
callbackUrlstringYesWebhook URL for inbound messages and delivery status
capabilitiesarrayYesChannels: sms, voice, whatsapp, email, line
countrystringNoCountry code for phone number
emailDomainstringNoCustom email domain
agentGenderenumNomale, female, or neutral (default: male). Used for gendered languages — the client's grammatical gender when speaking/writing in Hebrew, Arabic, French, Spanish, etc.

comms_deprovision_channels

Tear down all channels for a client. Releases phone number and WhatsApp pool slot.

ParameterTypeRequiredDescription
agentIdstringYesAgent ID to deprovision

comms_get_channel_status

Check provisioning and health status of all channels for a client.


comms_onboard_customer

*Enterprise/SaaS edition only.*

Full automated onboarding: provisions all channels, generates DNS records, returns setup package.

ParameterTypeRequiredDescription
agentIdstringYesAgent ID
agentNamestringYesDisplay name
capabilitiesarrayYesChannels to provision
emailDomainstringNoCustom email domain
greetingstringNoVoice greeting
systemPromptstringNoVoice system prompt

comms_register_provider

Register or update third-party provider credentials. Admin only.

ParameterTypeRequiredDescription
providerenumYestwilio, vonage, resend, elevenlabs, openai, deepgram, s3, r2, turso, convex
credentialsobjectYesProvider-specific credential fields
verifybooleanNoTest before saving (default: true)

comms_set_client_limits

Configure rate limits and spending caps. Admin only.

ParameterTypeRequiredDescription
agentIdstringYesAgent ID to configure
limits.maxActionsPerMinutenumberNoPer-minute burst limit
limits.maxActionsPerHournumberNoHourly limit
limits.maxActionsPerDaynumberNoDaily limit
limits.maxSpendPerDaynumberNoDaily spending cap
limits.maxSpendPerMonthnumberNoMonthly spending cap

comms_get_usage_dashboard

Usage statistics, costs, and rate limits per client.

ParameterTypeRequiredDescription
agentIdstringNoSpecific client (omit for all, admin only)
periodenumNotoday, week, month, or all

comms_get_billing_summary

*Enterprise/SaaS edition only.*

Billing summary with provider costs, markup, and billed costs.


comms_set_billing_config

*Enterprise/SaaS edition only.*

Set billing tier, markup, and billing email. Admin only.

TierActions/minActions/daySpend/month
Free5100$10
Starter10500$100
Pro305,000$1,000
Enterprise10050,000$50,000

comms_whatsapp_action

WhatsApp-specific actions (13): send_location, send_contact, typing, mark_read, react, edit, delete, forward, send_poll, send_buttons, post_status, set_chat_ttl, send_view_once.

comms_create_session / comms_get_session / comms_list_sessions / comms_close_session

Session management — isolated communication tunnels. Auto-created on inbound messages.

comms_find_agent / comms_message_agent

Agent-to-Agent directory and messaging within your team.

The system agent

Every org has one indelible Butt-Dial System agent (is_system=1).

alerts, recovery notices, status callbacks). Hosts shouldn't try to

delete or reassign it.

agents your org registered. The Organizations tab's agent count

excludes it (we count user-registered agents only).

No phone number, no WhatsApp. see "Butt-Dial System" as `displayName`.

You cannot register a new agent named "Butt-Dial System" — the name is

reserved per-org. You also cannot deregister the system agent —

attempts return code: SYSTEM_AGENT_PROTECTED.

comms_rotate_token

Rotate your security token. 30-second grace period to reconnect.

comms_update_profile

Update name, greeting, system prompt, voice, language, or gender.

comms_manage_inbound_filter

Add/list/delete keyword or contact-based filters for inbound messages.

Voice Services

Butt-Dial provides 5 voice modes — all work across any voice-capable provider (phone, WhatsApp, LINE, Viber, Telegram):

ModeWhat happensDirection
Voice MessageOne-way audio. Agent text → TTS → audio delivered. Inbound audio → STT → textIn + Out
SecretaryBuilt-in LLM answers/makes calls when agent is offline. Context queued for agentIn + Out
Agent (Live)Agent controls call in real-time. Human ↔ STT/TTS ↔ AgentIn + Out
BridgeConnect two+ parties: human+human, human+agent, conferenceOut (phone only)
ImpersonatorLLM uses agent's prompt & personality. Forwards text to agent liveIn + Out

Voice Notes: Add voiceNote: true to comms_send_message. Smart voice selection: pass a voice ID or description like "warm female narrator". 16 languages auto-detected.

Cross-Channel OTP

Verify identity across channels: comms_send_otp, comms_verify_otp, comms_check_trust. Unknown caller on voice → OTP via SMS → verified.

← Home