Skip to main content
Glama

calls_make

Destructive

Place an outbound AUDIO/VOICE phone call via Twilio (PSTN) or Telegram (MTProto 1:1 call). Use this any time the user asks to 'call', 'ring', 'phone', 'dial', or have a spoken conversation. Do NOT use messages.send when the user asks to call someone — a call is real-time voice, not a text message. You conduct the conversation as the voice agent using the provided greeting and instructions.

Input Schema

TableJSON Schema
NameRequiredDescriptionDefault
appNoAndroid package that places the call (generic — any app with a dispatch recipe, or manual UI dispatch). Example: 'com.whatsapp'. Used only when channel='android'. Ignored for other channels.
channelNoVoice transport: 'twilio' or 'telnyx' (phone via PSTN — both require phone_number in E.164; pick the carrier the workspace has connected), 'telegram' (MTProto 1:1 call — requires telegram_user_id, NOT a phone number or thread_id), 'maxru' (Max.ru voice call — requires maxru_user_id), 'android' (Android device voice call — requires phone_number in E.164), 'whatsapp' (WhatsApp voice call via the workspace's connected WhatsApp account — requires phone_number in E.164), 'whatsapp_business' (a Meta Cloud API number; requires phone_number in E.164; the contact must have allowed calls, otherwise a permission request is sent instead). OMIT to auto-select based on the current thread (e.g. inside a Telegram DM → uses 'telegram').
greetingYesThe first sentence the agent speaks immediately when the call connects. ALWAYS provide a greeting — without it the caller hears silence. Keep it short and natural. Example: 'Hi, this is Diana calling from DialogBrain. Do you have a moment to chat?'
contact_idNoLINE only: the contact entity ID for storing the confirmed display name after placement. Ignored for other channels/apps.
report_backNoWhen to re-invoke you after the call ends. 'on_answer' (default) = only if the call was answered, 'always' = even on missed/failed calls, 'never' = fire and forget. Transcript is always stored regardless of this setting.
in_workspaceNoRun this one call in this workspace id instead of the session's. Nothing is stored; other sessions are not affected.
instructionsNoWhat to do during the call — objective, questions, tone. The AI generates a natural opening and guides the conversation. Example: 'Call about invoice #1234. Ask if they received it and when payment is expected. Be friendly and professional.'
phone_numberNoDestination phone number in E.164 format (e.g., '+15551234567', '+66812345678'). Required when channel='twilio'.
viber_numberNoDestination Viber number in E.164 (e.g., '+15551234567'). Required when channel='viber' — the call is placed from the workspace's connected Viber account.
maxru_user_idNoDestination Max.ru user/chat ID. Required when channel='maxru'.
skip_dispatchNoSet true after you placed the call manually with the android_* UI tools — skips the automatic recipe and attaches straight to the already-live call. OMIT for the normal automatic dispatch. Used only when channel='android'. Ignored for other channels.
voice_agent_idNoID of the agent that conducts the call (an `id` from agents.list). If omitted, uses the workspace's default voice-capable agent when one exists. Pass this when the call fails with 'No voice agent configured'.
telegram_user_idNoDestination Telegram user ID (decimal int64 as string, e.g. '123456789'). Required when channel='telegram'. The caller account must have had prior interaction with this user — a cold contact cannot be reached via voice.
target_display_nameNoLINE only: the contact's LINE display name to place the voice call to (resolved by the planner from the contact). Ignored for other channels/apps.
permission_request_textNoOnly for channel='whatsapp_business': the text of the call-permission request WhatsApp sends when the contact has not yet allowed calls. Omit for a generic default.

Schema Changelog

Changes observed during successful MCP inspections.

  1. Changed3 schema fields changed
    • changedInput schema / properties / channel / description
      Previous value: -"Voice transport: 'twilio' or 'telnyx' (phone via PSTN — both require phone_number in E.164; pick the carrier the workspace has connected), 'telegram' (MTProto 1:1 call — requires telegram_user_id, NOT a phone number or thread_id), 'maxru' (Max.ru voice call — requires maxru_user_id), 'android' (Android device voice call — requires phone_number in E.164), 'whatsapp' (WhatsApp voice call via the workspace's connected WhatsApp account — requires phone_number in E.164). OMIT to auto-select based on the current thread (e.g. inside a Telegram DM → uses 'telegram')."New value: +"Voice transport: 'twilio' or 'telnyx' (phone via PSTN — both require phone_number in E.164; pick the carrier the workspace has connected), 'telegram' (MTProto 1:1 call — requires telegram_user_id, NOT a phone number or thread_id), 'maxru' (Max.ru voice call — requires maxru_user_id), 'android' (Android device voice call — requires phone_number in E.164), 'whatsapp' (WhatsApp voice call via the workspace's connected WhatsApp account — requires phone_number in E.164), 'whatsapp_business' (a Meta Cloud API number; requires phone_number in E.164; the contact must have allowed calls, otherwise a permission request is sent instead). OMIT to auto-select based on the current thread (e.g. inside a Telegram DM → uses 'telegram')."
    • changedInput schema / properties / channel / enum
      Previous value: -[
      -  "twilio",
      -  "telnyx",
      -  "telegram",
      -  "maxru",
      -  "android",
      -  "whatsapp",
      -  "viber"
      -]New value: +[
      +  "twilio",
      +  "telnyx",
      +  "telegram",
      +  "maxru",
      +  "android",
      +  "whatsapp",
      +  "whatsapp_business",
      +  "viber"
      +]
    • addedInput schema / properties / permission_request_text
      Added value: +{
      +  "description": "Only for channel='whatsapp_business': the text of the call-permission request WhatsApp sends when the contact has not yet allowed calls. Omit for a generic default.",
      +  "maxLength": 1024,
      +  "type": "string"
      +}
  2. Changed1 schema field changed
    • addedInput schema / properties / in_workspace
      Added value: +{
      +  "description": "Run this one call in this workspace id instead of the session's. Nothing is stored; other sessions are not affected.",
      +  "type": "integer"
      +}
  3. Added
  4. Removed
  5. Changed3 schema fields changed
    • changedInput schema / properties / channel / description
      Previous value: -"Voice transport: 'twilio' (phone via PSTN — requires phone_number in E.164) or 'telegram' (MTProto 1:1 call — requires telegram_user_id, NOT a phone number or thread_id) or 'android' (Android device voice call — requires phone_number in E.164). OMIT to use the current conversation's channel (e.g. a Telegram DM → a Telegram call to that contact)."New value: +"Voice transport: 'twilio' (phone via PSTN — requires phone_number in E.164), 'telegram' (MTProto 1:1 call — requires telegram_user_id, NOT a phone number or thread_id), 'maxru' (Max.ru voice call — requires maxru_user_id), 'android' (Android device voice call — requires phone_number in E.164), or 'whatsapp' (WhatsApp Web voice bridge — requires phone_number in E.164; single-tenant dev only). OMIT to auto-select based on the current thread (e.g. inside a Telegram DM → uses 'telegram')."
    • changedInput schema / properties / channel / enum
      Previous value: -[
      -  "twilio",
      -  "telegram",
      -  "android"
      -]New value: +[
      +  "twilio",
      +  "telegram",
      +  "maxru",
      +  "android",
      +  "whatsapp"
      +]
    • addedInput schema / properties / maxru_user_id
      Added value: +{
      +  "description": "Destination Max.ru user/chat ID. Required when channel='maxru'.",
      +  "type": "string"
      +}
  6. Changed3 schema fields changed
    • addedInput schema / properties / contact_id
      Added value: +{
      +  "description": "LINE only: the contact entity ID for storing the confirmed display name after placement. Ignored for other channels/apps.",
      +  "type": "integer"
      +}
    • changedInput schema / properties / skip_dispatch / description
      Previous value: -"Set true after you placed the call manually with the android_* UI tools — skips the automatic recipe and attaches straight to the already-live call. Used only when channel='android'. Ignored for other channels."New value: +"Set true after you placed the call manually with the android_* UI tools — skips the automatic recipe and attaches straight to the already-live call. OMIT for the normal automatic dispatch. Used only when channel='android'. Ignored for other channels."
    • addedInput schema / properties / target_display_name
      Added value: +{
      +  "description": "LINE only: the contact's LINE display name to place the voice call to (resolved by the planner from the contact). Ignored for other channels/apps.",
      +  "maximum": 200,
      +  "type": "string"
      +}
  7. Changed4 schema fields changed
    • addedInput schema / properties / app
      Added value: +{
      +  "description": "Android package that places the call (generic — any app with a dispatch recipe, or manual UI dispatch). Example: 'com.whatsapp'. Used only when channel='android'. Ignored for other channels.",
      +  "type": "string"
      +}
    • changedInput schema / properties / channel / description
      Previous value: -"Voice transport: 'twilio' (phone via PSTN — requires phone_number in E.164) or 'telegram' (MTProto 1:1 call — requires telegram_user_id, NOT a phone number or thread_id). OMIT to use the current conversation's channel (e.g. a Telegram DM → a Telegram call to that contact)."New value: +"Voice transport: 'twilio' (phone via PSTN — requires phone_number in E.164) or 'telegram' (MTProto 1:1 call — requires telegram_user_id, NOT a phone number or thread_id) or 'android' (Android device voice call — requires phone_number in E.164). OMIT to use the current conversation's channel (e.g. a Telegram DM → a Telegram call to that contact)."
    • changedInput schema / properties / channel / enum
      Previous value: -[
      -  "twilio",
      -  "telegram"
      -]New value: +[
      +  "twilio",
      +  "telegram",
      +  "android"
      +]
    • addedInput schema / properties / skip_dispatch
      Added value: +{
      +  "description": "Set true after you placed the call manually with the android_* UI tools — skips the automatic recipe and attaches straight to the already-live call. Used only when channel='android'. Ignored for other channels.",
      +  "type": "boolean"
      +}
  8. Changed1 schema field changed
    • addedInput schema / properties / voice_agent_id
      Added value: +{
      +  "description": "ID of the agent that conducts the call (an `id` from agents.list). If omitted, uses the workspace's default voice-capable agent when one exists. Pass this when the call fails with 'No voice agent configured'.",
      +  "type": "integer"
      +}
  9. Changed1 schema field changed
    • changedInput schema / properties / channel / description
      Previous value: -"Voice transport: 'twilio' (phone via PSTN — requires phone_number in E.164) or 'telegram' (MTProto 1:1 call — requires telegram_user_id, NOT a phone number or thread_id). OMIT to use 'twilio' (the default)."New value: +"Voice transport: 'twilio' (phone via PSTN — requires phone_number in E.164) or 'telegram' (MTProto 1:1 call — requires telegram_user_id, NOT a phone number or thread_id). OMIT to use the current conversation's channel (e.g. a Telegram DM → a Telegram call to that contact)."
  10. Changed2 schema fields changed
    • removedInput schema / properties / channel_account_id
      Removed value: -{
      -  "description": "Specific calling channel_account ID. For channel='twilio' this is the Twilio number; for channel='telegram' this is the connected Telegram account. If omitted, auto-selects the first active account of the matching channel.",
      -  "type": "integer"
      -}
    • removedInput schema / properties / voice_agent_id
      Removed value: -{
      -  "description": "Override: specific agent to conduct the call. If omitted, uses the workspace's default voice-capable agent. The agent should have at least one incoming_call trigger.",
      -  "type": "integer"
      -}
  11. Changed1 schema field changed
    • changedInput schema / properties / voice_agent_id / description
      Previous value: -"Override: specific voice agent to conduct the call. If omitted, uses the workspace's default voice agent. Must be an agent with execution_mode='voice'."New value: +"Override: specific agent to conduct the call. If omitted, uses the workspace's default voice-capable agent. The agent should have at least one incoming_call trigger."
  12. Changed1 schema field changed
    • changedInput schema / properties / voice_agent_id / description
      Previous value: -"Override: specific agent to conduct the call. If omitted, uses the workspace's default voice-capable agent. The agent should have at least one incoming_call trigger."New value: +"Override: specific voice agent to conduct the call. If omitted, uses the workspace's default voice agent. Must be an agent with execution_mode='voice'."
  13. Changed1 schema field changed
    • changedInput schema / properties / voice_agent_id / description
      Previous value: -"Override: specific voice agent to conduct the call. If omitted, uses the workspace's default voice agent. Must be an agent with execution_mode='voice'."New value: +"Override: specific agent to conduct the call. If omitted, uses the workspace's default voice-capable agent. The agent should have at least one incoming_call trigger."
  14. Changed1 schema field changed
    • changedInput schema / properties / channel / description
      Previous value: -"Voice transport: 'twilio' (phone via PSTN — requires phone_number in E.164) or 'telegram' (MTProto 1:1 call — requires telegram_user_id, NOT a phone number or thread_id). Defaults to 'twilio'."New value: +"Voice transport: 'twilio' (phone via PSTN — requires phone_number in E.164) or 'telegram' (MTProto 1:1 call — requires telegram_user_id, NOT a phone number or thread_id). OMIT to use 'twilio' (the default)."
  15. First observed

TDQS

A4.3/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare destructive=false... rather destructiveHint=true, openWorldHint=true, idempotentHint=false, so safety is covered. The description adds non-annotation behavior: the agent itself conducts the live conversation using the greeting and instructions, which is important operational context. It stops short of describing call lifecycle/outcome behavior, so not a 5.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Four sentences, front-loaded with the action and transports, then triggers, then the exclusion, then the agent role. Every sentence carries weight, though the final sentence about conducting the conversation is slightly vague and could be tighter.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a 15-parameter, high-complexity tool with no output schema, the definition covers purpose, triggers, exclusion, and the agent's conversational role, while the fully-covered schema handles parameters. It does not note the non-idempotent/destructive nature, but annotations already supply that, leaving only minor gaps.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, so every parameter (channel, phone_number, greeting, report_back, etc.) is already documented in the schema. The description adds no parameter-level detail beyond generically referencing the greeting and instructions, so the baseline 3 applies.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb and resource ('Place an outbound AUDIO/VOICE phone call') and names the transports (Twilio PSTN, Telegram MTProto). It also distinguishes itself from the closest textual alternative, messages.send, so an agent can route correctly without opening schemas.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Provides explicit trigger vocabulary ('call', 'ring', 'phone', 'dial', spoken conversation) and a clear when-not rule against messages.send with the reason ('a call is real-time voice, not a text message'). This is exactly the when/when-not/alternative guidance the dimension asks for.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

Try in Browser

Glama MCP Gateway

Add one secure layer between your agents and this server.

Resources