Skip to main content
Glama

Call several businesses of a kind

call_around
Destructive

Use this when the user wants to compare several businesses of a kind or find one that can help: it finds them near a place and calls them with the same goal, from 1 to 100. Examples: "call 3 mechanics near Plano, TX for front brake prices", "ask every pharmacy near 75024 when they close", "call hair salons in Dallas until one has a Saturday 10am slot" (stop_after=1). The server paces it (concurrency at a time), waits for business hours, and stops early with stop_after or max_spend_usd. Returns a batch_id: follow it with get_batch. Places this account called in the last 14 days are skipped (exclude_called=false to include). To get MORE places for the same request, call again with batch_id (paging; never repeats a place). For more than 10 places it returns a preview first: show the user the list and cost, then repeat with confirm=true. dry_run=true always previews. Put everything a business might ask in details and if_asked so dozens of calls don't each need you mid-call.

Tool call template

Replace each placeholder with a value matching the input schema. Only required parameters are included; add optional parameters as needed.

{
  "id": 1,
  "jsonrpc": "2.0",
  "method": "tools/call",
  "params": {
    "arguments": {
      "goal": "<goal>"
    },
    "name": "call_around"
  }
}

Input Schema

NameRequiredDescriptionDefault
goalYesAs in place_call; applies to every call in the batch
nearNoCity and state or province, neighborhood, or a zip or postal code
countNoHow many places to call, 1-100, default 3
nearsNoSeveral areas (max 10), e.g. ["Plano, TX", "Frisco, TX"]
queryNoKind of business, e.g. "auto repair", "pharmacy", "hair salon", "public library"
phonesNoCall these exact businesses instead of searching (query and near not needed): the user's own list (vendors, quote requests, a spreadsheet of leads), or a call place_call refused for the hour (the batch dials at 7am their time).
call_atNoAs in place_call; applies to every call in the batch
confirmNoRequired for more than 10 places, after the user saw the preview
detailsNoAs in place_call; applies to every call in the batch
dry_runNoOnly list who would be called and the estimated cost
queriesNoSeveral phrasings to widen the search (max 5), e.g. ["tire shop", "brake repair"]
batch_idNoAdd more places to this existing batch (paging)
if_askedNoAs in place_call; applies to every call in the batch
languageNoAs in place_call; applies to every call in the batch
questionsNoAs in place_call; applies to every call in the batch
min_ratingNoSkip places rated below this (e.g. 4.0)
setup_codeNoFrom a needs_setup result, after the user finished the link
stop_afterNoStop once this many calls succeed (e.g. 1 = first place that can do it)
after_hoursNoAs in place_call; applies to every call in the batch
concurrencyNoCalls at the same time, 1-10, default 5
constraintsNoAs in place_call; applies to every call in the batch
transfer_toNoAs in place_call; applies to every call in the batch
max_cost_usdNoAs in place_call; applies to every call in the batch
on_behalf_ofNoAs in place_call; applies to every call in the batch
max_spend_usdNoStop dialing once the batch has cost this much
exclude_calledNoSkip places this account called in the last 14 days (default true)
exclude_phonesNoNumbers to leave out
include_closedNoAlso queue places that are closed now (they're called when they open, or reach voicemail)
callback_numberNoAs in place_call; applies to every call in the batch
voicemail_messageNoAs in place_call; applies to every call in the batch

Schema Changelog

Changes observed during successful MCP inspections.

  1. Changed1 schema field changed
    • addedInput schema / properties / call_at
      Added value: +{
      +  "description": "As in place_call; applies to every call in the batch",
      +  "type": "string"
      +}
  2. Changed12 schema fields changed
    • changedInput schema / properties / after_hours / description
      Previous value: -"Only for places open late (24-hour pharmacy, hotel): call even 10pm-7am at the business"New value: +"As in place_call; applies to every call in the batch"
    • 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: +"As in place_call; applies to every call in the batch"
    • changedInput schema / properties / constraints / description
      Previous value: -"Limits, e.g. \"Don't agree to anything over $200\" or \"Only Saturday mornings\""New value: +"As in place_call; applies to every call in the batch"
    • changedInput schema / properties / details / description
      Previous value: -"Facts the assistant may share when asked: names, account or order numbers, the car, dates, preferences, budget. Never card numbers, SSNs or passwords."New value: +"As in place_call; applies to every call in the batch"
    • changedInput schema / properties / goal / description
      Previous value: -"What 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.\""New value: +"As in place_call; applies to every call in the batch"
    • changedInput schema / properties / if_asked / description
      Previous value: -"Pre-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.\""New value: +"As in place_call; applies to every call in the batch"
    • changedInput schema / properties / language / description
      Previous value: -"Language 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."New value: +"As in place_call; applies to every call in the batch"
    • changedInput schema / properties / max_cost_usd / description
      Previous value: -"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."New value: +"As in place_call; applies to every call in the batch"
    • 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. Just a name: it's said in the first sentence (\"calling for <this>\"), so account numbers or descriptions of the order go in details"New value: +"As in place_call; applies to every call in the batch"
    • changedInput schema / properties / questions / description
      Previous value: -"Specific 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?\"]"New value: +"As in place_call; applies to every call in the batch"
    • changedInput schema / properties / transfer_to / description
      Previous value: -"The 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."New value: +"As in place_call; applies to every call in the batch"
    • changedInput schema / properties / voicemail_message / description
      Previous value: -"Message to leave on voicemail. Omit to hang up on voicemail (free when it goes straight to voicemail)."New value: +"As in place_call; applies to every call in the batch"
  3. Changed1 schema field changed
    • changedInput schema / properties / phones / description
      Previous value: -"Call these exact businesses instead of searching (query and near not needed). Use it to queue a call that place_call refused for the hour: the batch dials at 7am their time."New value: +"Call these exact businesses instead of searching (query and near not needed): the user's own list (vendors, quote requests, a spreadsheet of leads), or a call place_call refused for the hour (the batch dials at 7am their time)."
  4. Changed1 schema field changed
    • changedInput schema / properties / near / description
      Previous value: -"City and state, neighborhood, or zip"New value: +"City and state or province, neighborhood, or a zip or postal code"
  5. 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"
  6. 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"
      +}
  7. First observed

TDQS

A4.9/5.0
Behavior5/5

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

Annotations only say it is destructive, open-world and non-idempotent; the description adds substantial behavior — server-side pacing by concurrency, waiting for business hours, early termination via stop_after or max_spend_usd, a 14-day dedupe of previously called places, and a preview-then-confirm gate above 10 places. It also advises putting answers in details/if_asked so mid-call interruptions are avoided, which is exactly the kind of operational context annotations cannot carry.

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

Conciseness5/5

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

Opens with the selection trigger, then examples, then mechanics, then the follow-up/paging/preview rules — a deliberate front-loading of the decision-critical information. Despite covering many behaviors it stays a single dense paragraph with no filler sentences.

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 30-parameter, cost-incurring outbound-calling tool with no output schema, it still closes the loop by stating what comes back (a batch_id) and which tool consumes it (get_batch). Confirmation, spend caps, dedupe, and dry-run semantics are all covered, leaving nothing an agent needs in order to call it safely.

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 already 100%, so the baseline is 3, but the description earns more by explaining parameter interactions the schema cannot: batch_id means paging and never repeats a place, confirm is required after the user saw the preview, and stop_after=1 means stop at the first place that can do it. Some parameters are only covered by the schema's 'as in place_call' text, which is a minor gap.

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 — finds businesses of a kind near a place and calls them all with the same goal — and scopes it with the 1-100 range. The three quoted examples make the difference from the single-call sibling place_call (which it names explicitly) unmistakable.

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 triggers (compare several businesses, find one that can help) plus concrete examples showing stop_after=1 for the 'until one works' case. It also spells out the alternatives and the correct follow-up path: get_batch after getting a batch_id, call again with batch_id to page for more places.

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.