MCP Tools Reference
All tools are called via the MCP protocol over SSE transport. Each tool requires authentication unless running in demo mode.
Gendered Languages
Languages like Hebrew, Arabic, French, Spanish, Portuguese, Italian, German, Russian, Polish, and Hindi conjugate verbs and adjectives by gender. For these languages:
- Client gender (
clientGender) — set during provisioning (male/female/neutral). Determines how the AI refers to itself. - Target gender (
targetGender) — set per-interaction on outbound tools (male/female/unknown). Determines how the AI addresses the recipient.
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.
| Parameter | Type | Required | Description |
|---|---|---|---|
message | string | No | Echo message |
{
"status": "ok",
"server": "agentos-comms",
"echo": "hello",
"pool": { "maxClients": 5, "activeClients": 1, "slotsRemaining": 4 },
"providers": { "telephony": "twilio", "email": "resend", "tts": "edge-tts" }
}
comms_send_message
Send SMS, email, or WhatsApp message.
| Parameter | Type | Required | Description |
|---|---|---|---|
clientId | string | No | Auto-detected from client token |
to | string | Yes | Recipient (E.164 phone or email) |
body | string | No | Message text (required unless media is provided) |
channel | enum | No | sms, email, whatsapp, or line (default: sms) |
subject | string | No | Email subject (required for email) |
html | string | No | HTML body for email |
media | string[] | No | Media URLs to attach. WhatsApp: one message per file (body sent as caption). Email: fetched and attached. SMS: first URL sent as MMS. |
templateId | string | No | WhatsApp template SID |
templateVars | object | No | Template variables |
targetGender | enum | No | male, 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.
| Parameter | Type | Required | Description |
|---|---|---|---|
clientId | string | No | Auto-detected from client token |
to | string | Yes | Phone number in E.164 format |
systemPrompt | string | No | AI instructions for this call |
greeting | string | No | First thing the AI says |
voice | string | No | TTS voice ID |
language | string | No | Language code (e.g. en-US) |
targetGender | enum | No | male, female, or unknown — gender of the call recipient. For gendered languages, gender conjugation instructions are automatically appended to the system prompt. |
recipientTimezone | string | No | IANA 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.
| Parameter | Type | Required | Description |
|---|---|---|---|
clientId | string | No | Auto-detected from client token |
to | string | Yes | Phone number in E.164 |
text | string | Yes | Text to speak |
voice | string | No | TTS voice ID |
targetGender | enum | No | male, 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.
| Parameter | Type | Required | Description |
|---|---|---|---|
clientId | string | Yes | Client 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.
| Parameter | Type | Required | Description |
|---|---|---|---|
clientId | string | No | Auto-detected from client token |
callSid | string | Yes | Active call SID |
to | string | Yes | Destination phone or client ID |
announcementText | string | No | Text to say before transfer |
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.
| Parameter | Type | Required | Description |
|---|---|---|---|
clientId | string | No | Auto-detected from client token |
target | string | Yes | Phone number to call (E.164) |
requesterPhone | string | Yes | Your phone number — where to bridge if they say yes |
targetName | string | No | Name of the person being called |
requesterName | string | No | Your name |
message | string | No | Reason for the call |
targetGender | enum | No | male, female, or unknown — gender of the person being called |
recipientTimezone | string | No | IANA timezone. Auto-detected from phone prefix if omitted |
comms_bridge_call
Manage call bridges — route inbound local calls to outbound local numbers via VoIP.
| Parameter | Type | Required | Description |
|---|---|---|---|
action | enum | Yes | setup, remove, list, or call |
fromNumber | string | No | (setup) Caller ID to match, or * for any |
localNumber | string | No | (setup) Twilio number that receives the call |
destinationNumber | string | No | (setup/call) Number to dial outbound |
label | string | No | (setup) Human-readable label |
bridgeId | string | No | (remove/call) Bridge route ID |
callerNumber | string | No | (call) Number to call first |
comms_send_otp
Send a one-time verification code via SMS, email, or WhatsApp. Code expires in 5 minutes.
| Parameter | Type | Required | Description |
|---|---|---|---|
clientId | string | No | Auto-detected from client token |
to | string | Yes | Recipient (phone E.164 or email) |
channel | enum | Yes | sms, email, or whatsapp |
purpose | string | No | Description like "account verification" |
comms_verify_otp
Verify a one-time code. Returns whether the code is valid.
| Parameter | Type | Required | Description |
|---|---|---|---|
clientId | string | No | Auto-detected from client token |
contactAddress | string | Yes | Phone or email that received the code |
code | string | Yes | The 6-digit code to verify |
comms_record_consent
Record that a contact has given consent to be contacted on a channel.
| Parameter | Type | Required | Description |
|---|---|---|---|
clientId | string | No | Auto-detected from client token |
contactAddress | string | Yes | Phone number or email |
channel | enum | Yes | sms, voice, email, or whatsapp |
consentType | enum | No | express, implied, or transactional (default: express) |
source | string | No | How consent was obtained (web_form, verbal, etc.) |
comms_revoke_consent
Revoke a contact's consent on a channel. No further outbound allowed.
| Parameter | Type | Required | Description |
|---|---|---|---|
clientId | string | No | Auto-detected from client token |
contactAddress | string | Yes | Phone number or email |
channel | enum | Yes | sms, voice, email, or whatsapp |
comms_check_consent
Check whether a contact has granted consent on a channel.
| Parameter | Type | Required | Description |
|---|---|---|---|
clientId | string | No | Auto-detected from client token |
contactAddress | string | Yes | Phone number or email |
channel | enum | Yes | sms, voice, email, or whatsapp |
comms_expand_client_pool
Resize the client pool. Admin only.
| Parameter | Type | Required | Description |
|---|---|---|---|
maxClients | number | Yes | New maximum client count (1–10000) |
comms_provision_channels
Provision phone/SMS/WhatsApp/email/voice for a new client.
| Parameter | Type | Required | Description |
|---|---|---|---|
clientId | string | Yes | Client ID to provision |
clientName | string | Yes | Display name |
callbackUrl | string | Yes | Webhook URL for inbound messages and delivery status |
capabilities | array | Yes | Channels: sms, voice, whatsapp, email, line |
country | string | No | Country code for phone number |
emailDomain | string | No | Custom email domain |
clientGender | enum | No | male, 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.
| Parameter | Type | Required | Description |
|---|---|---|---|
clientId | string | Yes | Client 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.
| Parameter | Type | Required | Description |
|---|---|---|---|
clientId | string | Yes | Client ID |
clientName | string | Yes | Display name |
capabilities | array | Yes | Channels to provision |
emailDomain | string | No | Custom email domain |
greeting | string | No | Voice greeting |
systemPrompt | string | No | Voice system prompt |
comms_register_provider
Register or update third-party provider credentials. Admin only.
| Parameter | Type | Required | Description |
|---|---|---|---|
provider | enum | Yes | twilio, vonage, resend, elevenlabs, openai, deepgram, s3, r2, turso, convex |
credentials | object | Yes | Provider-specific credential fields |
verify | boolean | No | Test before saving (default: true) |
comms_set_client_limits
Configure rate limits and spending caps. Admin only.
| Parameter | Type | Required | Description |
|---|---|---|---|
clientId | string | Yes | Client ID to configure |
limits.maxActionsPerMinute | number | No | Per-minute burst limit |
limits.maxActionsPerHour | number | No | Hourly limit |
limits.maxActionsPerDay | number | No | Daily limit |
limits.maxSpendPerDay | number | No | Daily spending cap |
limits.maxSpendPerMonth | number | No | Monthly spending cap |
comms_get_usage_dashboard
Usage statistics, costs, and rate limits per client.
| Parameter | Type | Required | Description |
|---|---|---|---|
clientId | string | No | Specific client (omit for all, admin only) |
period | enum | No | today, 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.
| Tier | Actions/min | Actions/day | Spend/month |
|---|---|---|---|
| Free | 5 | 100 | $10 |
| Starter | 10 | 500 | $100 |
| Pro | 30 | 5,000 | $1,000 |
| Enterprise | 100 | 50,000 | $50,000 |