Skip to main content
Glama

Place a phone call

place_call
Destructive

Use this when the user needs something from a US or Canadian business that takes a phone call: book, cancel, get prices or availability, check an order or whether a repair is done, reach a person or wait on hold, ask for an upgrade, ask an office how to do something, or ask a vendor if they're free on a date. Places a real call: a voice assistant speaks for the user and works phone menus. Don't use it for personal numbers, emergencies, or just finding a number (find_business). Returns right away with call_id, plus warnings worth telling the user (the place looks closed right now, it's late there, low balance); then call get_call(call_id, wait_seconds=45) repeatedly until status is "ended" and outcome is present. Required: phone and goal (unless retrying with setup_code). Put the user's name in on_behalf_of, everything the business may ask for in details (name, callback number, account or order numbers, the car, dates), and pre-approved decisions in if_asked. Anything missing becomes a mid-call question the business waits about 45 seconds for. If status is "needs_setup" (first real call only), show message_for_user, then call wait_for_setup(setup_code). That isn't an error. Free demo lines (fictional, no setup, no charge): Maple Street Pizza (469) 770-7412, Oak Street Auto (469) 402-2653, Cedar Lane Tire & Brake (469) 437-9838, Elm Avenue Garage (469) 300-6608, Ironwood Fitness (469) 253-8241. $1 per answered call (first 2 min), then 40¢/min; unanswered calls are free. Businesses only: no personal numbers or emergencies.

Tool call template

This tool declares no required parameters. Add optional parameters from the input schema as needed.

{
  "id": 1,
  "jsonrpc": "2.0",
  "method": "tools/call",
  "params": {
    "arguments": {},
    "name": "place_call"
  }
}

Input Schema

NameRequiredDescriptionDefault
goalNoWhat the call should get done and what counts as done, 1-3 plain sentences, e.g. "Book a table for 4 this Friday between 7 and 8:30pm and get a confirmation number."
phoneNoThe business's phone number, US or Canada, any format, e.g. "(469) 770-7412"
call_atNoSchedule the call instead of dialing now: an ISO 8601 time with a UTC offset, within 7 days, e.g. their opening time ("2026-11-03T09:05:00-06:00"). Returns a batch_id to follow with get_batch.
detailsNoFacts the assistant may share when asked: names, account or order numbers, the car, dates, preferences, budget. Never card numbers, SSNs or passwords.
if_askedNoPre-approved answers so the business doesn't wait on you, e.g. "If they offer another time, anything 7 to 8:30pm is fine. A deposit up to $25 is OK."
languageNoLanguage to open in (e.g. "Vietnamese", "Korean"). Default English, and the assistant switches to Spanish by itself if they answer in Spanish. Pass it when the business likely speaks another language (a Vietnamese nail salon, a Korean market), since other languages are only understood when set up front.
questionsNoSpecific things to find out, one per item. Each comes back in answers, in this order, e.g. ["How much is a large pepperoni?", "Is there parking?"]
setup_codeNoFrom a needs_setup response, to retry once the user finished the link
account_keyNoA saved cfm_... key, if you have one
after_hoursNoOnly for places open late (24-hour pharmacy, hotel): call even 10pm-7am at the business
constraintsNoLimits, e.g. "Don't agree to anything over $200" or "Only Saturday mornings"
transfer_toNoThe user's own phone. If set and the goal says to connect them, the assistant patches them in once a person answers (after menus and hold). Best for banks, carriers and insurers that verify the account holder.
max_cost_usdNoMost this call may cost, e.g. 3 = about 7 minutes. The call ends by itself at that point, so a long hold can't run up the bill. Minimum $1. Omit for the normal 30-minute cap.
on_behalf_ofNoThe user's name, as the business should hear it. For a work call, add the company ("Sam at Ridgeline Print Co"): suppliers and vendors look accounts up by company. Just a name: it's said in the first sentence ("calling for <this>"), so account numbers or descriptions of the order go in details
business_nameNoBusiness name, used in the greeting
callback_numberNoA number where the business can reach the user. Pass it when they may follow up (a quote after a visit, a callback): the assistant gives it as soon as they say they'll get back to the user. Optional: without one, the business gets CallForMe's line and a 4-digit extension for this call, and its message comes back in get_call (callbacks) and the account tool.
voicemail_messageNoMessage to leave on voicemail. Omit to hang up on voicemail (free when it goes straight to voicemail).

Schema Changelog

Changes observed during successful MCP inspections.

  1. Changed1 schema field changed
    • changedInput schema / properties / callback_number / description
      Previous value: -"A number where the business can reach the user. Pass it when they may follow up (a quote after a visit, a callback): the assistant gives it as soon as they say they'll get back to the user."New value: +"A number where the business can reach the user. Pass it when they may follow up (a quote after a visit, a callback): the assistant gives it as soon as they say they'll get back to the user. Optional: without one, the business gets CallForMe's line and a 4-digit extension for this call, and its message comes back in get_call (callbacks) and the account tool."
  2. Changed1 schema field changed
    • addedInput schema / properties / call_at
      Added value: +{
      +  "description": "Schedule the call instead of dialing now: an ISO 8601 time with a UTC offset, within 7 days, e.g. their opening time (\"2026-11-03T09:05:00-06:00\"). Returns a batch_id to follow with get_batch.",
      +  "type": "string"
      +}
  3. Changed1 schema field changed
    • changedInput schema / properties / phone / description
      Previous value: -"The business's phone number, US, any format, e.g. \"(469) 770-7412\""New value: +"The business's phone number, US or Canada, any format, e.g. \"(469) 770-7412\""
  4. Changed1 schema field changed
    • changedInput schema / properties / on_behalf_of / description
      Previous value: -"The user's name, as the business should hear it. For a work call, add the company (\"Sam at Ridgeline Print Co\"): suppliers and vendors look accounts up by company"New value: +"The user's name, as the business should hear it. For a work call, add the company (\"Sam at Ridgeline Print Co\"): suppliers and vendors look accounts up by company. Just a name: it's said in the first sentence (\"calling for <this>\"), so account numbers or descriptions of the order go in details"
  5. Changed1 schema field changed
    • addedInput schema / properties / max_cost_usd
      Added value: +{
      +  "description": "Most this call may cost, e.g. 3 = about 7 minutes. The call ends by itself at that point, so a long hold can't run up the bill. Minimum $1. Omit for the normal 30-minute cap.",
      +  "type": "number"
      +}
  6. First observed

TDQS

A4.8/5.0
Behavior5/5

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

Annotations already declare destructiveHint=true and openWorldHint=true, and the description goes far beyond them: real-world side effects, $1 per answered call then 40¢/min with unanswered free, immediate return with call_id plus warnings (closed now, late locally, low balance), and the ~45-second mid-call question window. Nothing here contradicts destructiveHint; placing a real call is consistent with it.

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?

Front-loaded with an excellent conditional opener and closing flow instruction, and most sentences carry unique operational weight. Some redundancy remains — "no personal numbers or emergencies" appears twice, and the five fictional demo numbers are bulky for a tool description.

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

Completeness5/5

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

For a 17-parameter, non-idempotent, high-cost, open-world mutation with no output schema, the description covers the full lifecycle: preconditions, cost caps, async polling, setup recovery, scheduling via call_at, and voicemail behavior. An agent has everything needed to call it correctly and interpret the response shape.

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

Parameters4/5

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

Schema coverage is 100%, so the baseline is 3, but the description adds real meaning: it names phone and goal as effectively required despite zero required fields, and explains the consequence of under-filling details/if_asked (missing facts become a mid-call question the business waits on). It does not re-explain most of the other 15 parameters, leaving that to the schema.

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 concrete verb and resource — places a real outbound phone call where a voice assistant speaks for the user and navigates phone menus — and enumerates the goal types it covers (book, cancel, prices, check order, reach a person). It explicitly distinguishes itself from the sibling find_business ("just finding a number"), so an agent can separate lookup from dialing without consulting 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?

Gives explicit when-to-use framing ("Use this when the user needs something from a US or Canadian business that takes a phone call") and explicit when-not (personal numbers, emergencies, number lookup). It also routes to the correct follow-on siblings: get_call for polling, wait_for_setup on needs_setup, get_batch for scheduled calls, and it flags needs_setup as not an error.

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.