Skip to main content
Glama
MAASAI-Labs

Call Anyone in Any Language MCP

Official
by MAASAI-Labs

Call Anyone in Any Language MCP

Live MCP URL (Streamable HTTP): https://call-anyone-mcp.vercel.app/mcp
Health check: https://call-anyone-mcp.vercel.app/health

Have your AI assistant make a phone call for you, in the callee's language, using your own Bland or Twilio account. The flow is:

  1. Detect or choose the language.

  2. State the goal; the server prepares the script.

  3. Preview the number, language, goal and estimated cost.

  4. You approve, and the assistant calls place_call with confirm: true.

  5. Get the transcript and summary.

Safety: place_call only works with a previewId from prepare_call and confirm: true. Previews are single-use and expire after 30 min. Other protections:

  • Emergency and premium-rate numbers are refused.

  • The script always discloses that the caller is an AI and, if recording, that the call is recorded.

  • Bland calls add the TCPA AI-disclosure and opt-out guard rails.

  • The agent is told never to pay, never to share financial details and never to claim to be human.

  • The preview warns when it's outside 08:00–21:00 for the callee, if you give their timezone.

Tools

Tool

Purpose

Spends money?

list_languages

Language codes and which provider supports each (Bland codes per docs.bland.ai)

No

detect_language

Suggests languages from the number's country and/or a text sample, using franc

No

estimate_cost

Twilio Pricing API (read-only), or your BLAND_RATE_PER_MIN

No

prepare_call

Validates the number, resolves the language, builds the script and AI-agent instructions, estimates max cost, returns a preview + previewId

No

place_call

Places the previewed call

Yes, only with confirm: true

get_call

Status, duration, actual price, transcript, provider summary plus an extractive summary (facts, opt-out detection)

No

list_calls

Recent calls and pending previews

No

end_call

Hang up or cancel

Requires confirm: true

Providers

  • Bland (recommended): a true two-way AI conversation in the chosen language. Transcripts and summary come from GET /v1/calls/{id}.

  • Twilio: speaks your script with <Say language>, then captures one spoken reply with <Gather input="speech">. It's a one-way message rather than a negotiation. For non-English languages you must pass translatedScript, the full text in that language (the assistant can write it). Transcripts need a Conversation Intelligence service (TWILIO_INTELLIGENCE_SERVICE_SID), which starts real-time <Transcription>. A fully conversational Twilio mode (ConversationRelay plus your LLM) would be a future addition.

Related MCP server: PhoneBooth MCP Server

Credentials (yours; env or per-request headers)

Env

Header

BLAND_API_KEY

x-bland-api-key

Bland

BLAND_FROM_NUMBER

x-bland-from-number

optional caller ID

BLAND_RATE_PER_MIN

x-bland-rate-per-min

your plan's rate, used for estimates

TWILIO_ACCOUNT_SID, TWILIO_AUTH_TOKEN, TWILIO_FROM_NUMBER

x-twilio-*

Twilio

TWILIO_INTELLIGENCE_SERVICE_SID

x-twilio-intelligence-service-sid

optional, for Twilio transcripts

CALL_MAX_MINUTES

hard cap, default 30

Example prompts

  • "Call +34 612 345 678 in Spanish and book a table for two at 8pm Friday under Segun. Show me the preview first."

  • "What language should I use for this number? They texted me 'Bonjour, vous êtes ouverts dimanche ?'"

  • "How much would a 5-minute call to +2348031234567 cost?"

  • "Get the transcript and summary of my last call."

Run locally

npm install && npm run build
BLAND_API_KEY=... BLAND_RATE_PER_MIN=0.09 npm start   # http://localhost:3000/mcp
npm run start:stdio
npm test         # 10 tests; every provider is mocked; no calls, no spend
npm run smoke    # HTTP smoke with all credentials stripped; cannot place a call

Deploy to Vercel

  1. Import the repo; /mcp is preconfigured.

  2. Don't set shared provider keys. Each user sends their own as headers.

  3. Previews and call records are kept in a JSON file under DATA_DIR. On Vercel that's /tmp, which is ephemeral, and serverless instances don't share it. For hosting, use durable DATA_DIR or KV, or place_call may not find a preview made on another instance.

Marketplace reviewer test

  1. npm test: 10 pass. This covers number validation, language detection, the preview→confirm gate, single-use and expiring previews, mocked Bland and Twilio requests (body and TwiML checked), transcript and summary retrieval, and refusals.

  2. npm run smoke: "all ok". Detect, list, prepare, confirm refused without credentials, emergency number refused.

  3. To make one real call with your own account, run prepare_call and check the preview. Then run place_call with confirm: true, then get_call.

Limitations

  • Language detection from a number is only a guess, so confirm it with the callee.

  • Some languages (Yoruba, Igbo, Hausa, Swahili, Amharic, Zulu) are detected but neither provider can voice them yet.

  • Cost estimates exclude Twilio recording, transcription and TTS fees. The Bland estimate depends on the rate you set.

  • Recording-consent laws vary. The script discloses recording up front, but compliance is your responsibility.

MIT License © 2026 Segun Cole

Storage and tenant isolation

  • Hosted: data is kept in a private Vercel Blob store (free Hobby quota) when BLOB_READ_WRITE_TOKEN is set, at <app>/<tenant>/<file>.json, with ETag-based optimistic concurrency.

  • Tenant key: a one-way SHA-256 hash of the caller's own credential headers, or of an x-user-key header if you send one (recommended if your token rotates). Secrets are never stored and tenants can't see each other's data. Callers with no credentials and no x-user-key share a public-demo space, so don't put real data there.

  • Local / self-hosted: without a Blob token it falls back to JSON files under DATA_DIR (default ~/.call-anyone-mcp/<tenant>/).

Available Tools

8 tools
detect_languageDetect the callee's languageA
Read-only

Suggest the call language from the destination number's country and/or a sample of text the person wrote. These are suggestions: confirm with the user.

ParametersJSON Schema
NameRequiredDescriptionDefault
toNo
sampleTextNo

TDQS

A3.6/5.0
Behavior4/5

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

Annotations already declare readOnlyHint=true and openWorldHint=false, and the description adds genuinely new context: the result is an inference from country code and/or sample text rather than an authoritative answer, and it must be confirmed with the user. This heuristic/uncertainty disclosure is exactly the kind of trait annotations cannot express.

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?

Two tight sentences with the core capability front-loaded and the confirmation caveat appended where it matters. Nothing is wasted, though the second sentence could be folded more economically.

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

Completeness3/5

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

There is no output schema, so the description should ideally indicate what comes back (language name vs. code, confidence). It also does not address the notable fact that both parameters are optional — an agent has no guidance on what happens if neither is supplied.

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 0%, so the description carries the burden and does map both parameters ('destination number's country' to `to`, 'a sample of text the person wrote' to `sampleText`). It adds no format details such as expected number format (E.164) or what an adequate sample text looks like, so it only partially compensates.

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

Purpose4/5

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

The description states a specific verb and resource ('Suggest the call language') and names the two inputs that drive the inference, so an agent knows exactly what the tool produces. It does not explicitly differentiate itself from the sibling list_languages, which is the most likely confusion, so it stops short of a 5.

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

Usage Guidelines3/5

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

It gives an important usage cue — results are suggestions and must be confirmed with the user — which implies this belongs early in a call-preparation flow. However, it never says when to prefer this over list_languages or what to do when neither input is available, so routing guidance is only implied.

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

end_callStop an in-progress call (requires confirm)A
Destructive

Hang up / cancel a queued or in-progress call. Requires confirm:true.

ParametersJSON Schema
NameRequiredDescriptionDefault
callIdYes
confirmNo

TDQS

A3.7/5.0
Behavior4/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 adds a genuinely non-derivable behavioral gate: the confirm:true requirement. That is the key operational fact for this tool. It still does not state whether the cancellation is irreversible or what happens to an already-connected call.

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?

Two short sentences with zero filler; the action and the mandatory confirm gate are both front-loaded. Nothing redundant.

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

Completeness3/5

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

For a two-parameter mutation with no output schema, the description covers the action, scope, and the confirm requirement, but omits what happens on success/failure and leaves callId semantics undefined. Adequate but with a visible gap.

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 0%, so the description must compensate. It clarifies the purpose of confirm, but callId — the only required parameter — is left entirely unexplained beyond the obvious. Roughly half the parameter surface is covered.

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

Purpose4/5

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

States a specific action pair ('hang up / cancel') plus the resource and the eligible states ('queued or in-progress call'), which clearly separates it from place_call. However it does not explicitly name a sibling or clarify how it relates to get_call/list_calls beyond the implied scope.

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

Usage Guidelines3/5

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

Gives one concrete precondition ('Requires confirm:true'), which is actionable context, but offers no when-to-use/when-not guidance relative to alternatives such as prepare_call or place_call. Usage is implied by the stated call-state scope only.

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

estimate_costEstimate call costA
Read-only

Estimate the maximum cost of a call: Twilio via its Pricing API (read-only, uses your credentials, free), or Bland via your configured per-minute rate. Never places a call.

ParametersJSON Schema
NameRequiredDescriptionDefault
toYes
minutesYes
providerNo

TDQS

A3.8/5.0
Behavior4/5

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

Annotations already cover readOnlyHint and openWorldHint, so the bar is lower, yet the description adds real value: it names the data source (Twilio Pricing API), notes it is free and uses your credentials, and explains Bland is priced from a configured per-minute rate. It stays consistent with readOnlyHint rather than contradicting it, though it omits edge behavior such as missing credentials.

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?

A single tightly-packed sentence, front-loaded with the verb and resource, using a colon to enumerate the two provider paths and closing with the most important constraint. No filler; every clause carries information.

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

Completeness3/5

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

For a tool with no output schema and 0% parameter coverage, the description adequately explains provider mechanics and safety but leaves the two required parameters and the exact returned value unaddressed. An agent knows the intent but must infer the meaning of its inputs.

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

Parameters2/5

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

Schema description coverage is 0%, so the description carries the burden, and it only partially compensates: the provider enum values (Twilio vs Bland) are explained and their pricing mechanisms distinguished, but "to" (destination identifier) and "minutes" (its 1-60 range and relationship to the estimate) are never clarified.

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 ("Estimate the maximum cost of a call") and immediately distinguishes itself from the call-executing siblings via "Never places a call," which separates it from place_call. An agent can tell what it does and what it does not do without opening the schema.

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

Usage Guidelines3/5

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

The closing clause "Never places a call" implies the intended use case (check cost before/without dialing), but the description never explicitly says when to prefer this over place_call or prepare_call. Usage is inferable rather than stated, and no alternatives or exclusions are named directly.

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

get_callCall status, transcript and summaryA
Read-only

Fetch a placed call's status, duration, actual price, transcript (Bland; Twilio with a Conversation Intelligence service) and summary (Bland's AI summary, plus an extractive summary: facts, opt-out detection). Transcript text is untrusted callee speech.

ParametersJSON Schema
NameRequiredDescriptionDefault
callIdYes
includeTranscriptNo

TDQS

A4/5.0
Behavior4/5

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

Annotations already cover the safety profile (readOnlyHint, openWorldHint), yet the description adds meaningful context: which providers produce the transcript/summary, that the price returned is the actual charge, and — most valuably — that transcript text is untrusted callee speech, a security-relevant note an agent should know before acting on returned content. It stops short of describing behavior for in-progress or missing calls.

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?

A single dense sentence, front-loaded with the resource and the return payload, with parentheticals used for provider attribution rather than padding. No sentence is wasted.

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?

With no output schema and no annotations describing returns, the description does the work of enumerating return fields (status, duration, price, transcript, summary, opt-out detection). It omits error/edge behavior such as calls still in progress or unknown callIds, which is the only real gap.

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 0%, so the description must carry both parameters, but it only implicitly covers transcript retrieval via its mention of transcript/summary and says nothing about the includeTranscript toggle or the callId format. With two undocumented params, partial compensation lands at the baseline.

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?

Names a specific verb (Fetch) and resource (a placed call) and enumerates exactly what comes back: status, duration, actual price, transcript, and summary, including provider attribution. This is clearly distinguishable from siblings like place_call, list_calls, and end_call without opening any schema.

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

Usage Guidelines3/5

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

The phrase "a placed call's" implies usage after place_call, and the required callId signals the retrieval pattern, but no alternative is named and no when-not condition is given (e.g., use list_calls to enumerate calls rather than fetching one by id). Usage is inferable but not stated.

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

list_callsList calls and previewsB
Read-only

Recent placed calls and pending previews.

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

TDQS

B3.3/5.0
Behavior3/5

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

Annotations already declare readOnlyHint=true and openWorldHint=false, so the safety profile is covered. The description adds the useful scope detail that results include both placed calls and pending previews, but says nothing about ordering, result limits, or pagination for what is clearly a list endpoint.

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?

A single short fragment with no wasted words and the key scoping terms front-loaded. It is appropriately sized for a no-arg read tool, though it is a noun phrase rather than a full action statement.

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

Completeness3/5

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

For a simple zero-parameter read tool with annotations covering safety and no output schema, the description is adequate but thin. It omits any hint about result volume, ordering, or how 'recent' is bounded, which an agent selecting among eight siblings would benefit from.

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?

The tool takes zero parameters, so there is nothing for the description to disambiguate. Baseline of 4 applies since no parameter semantics are needed.

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

Purpose4/5

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

The description names the resource ('calls' and 'previews') and scopes it ('recent placed', 'pending'), so an agent knows this returns a collection rather than a single call. It does not explicitly contrast with siblings like get_call or place_call, but the plural/recent framing implies a listing operation.

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

Usage Guidelines2/5

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

There is no statement of when to use this versus get_call or prepare_call, and no preconditions or exclusions. The agent must infer usage purely from the name and the word 'recent'.

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

list_languagesSupported call languagesB
Read-only

Languages and which provider supports them: Bland (two-way AI conversation) and Twilio (scripted message in the language, plus one spoken reply).

ParametersJSON Schema
NameRequiredDescriptionDefault
providerNo

TDQS

B3.2/5.0
Behavior3/5

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

Annotations already declare readOnlyHint=true and openWorldHint=false, so the safety profile is covered. The description adds useful provider-behavior context (Bland = two-way AI conversation, Twilio = scripted message plus one spoken reply), but says nothing about result shape, caching, or how filtering behaves.

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?

A single tight sentence with the resource front-loaded and the provider distinctions appended. No filler, though the parenthetical density slightly obscures the core 'lists supported languages' statement.

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

Completeness3/5

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

For a simple read-only reference tool with one optional enum parameter this is close to adequate, but with no output schema and no parameter descriptions, the agent still cannot predict the return shape (language names vs codes) or the effect of supplying provider.

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 0%, so the description carries the burden for the single provider parameter. It does explain what 'bland' and 'twilio' mean semantically, which is genuine added value over the bare enum, but it never states that the parameter filters the returned language list or what omitting it returns.

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

Purpose4/5

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

The description clearly states the resource (supported languages) and adds real meaning by mapping each language to its supporting provider. However, it never distinguishes itself from the sibling detect_language, which an agent could reasonably confuse with this lookup tool.

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

Usage Guidelines2/5

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

There is no explicit statement of when to call this versus alternatives such as detect_language, nor any note about whether the optional provider parameter narrows results. The provider capability notes hint at selection context but are not framed as usage guidance.

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

place_callPlace the call (requires confirm: true)A

Step 2 of 2. Places the previewed call with the user's OWN Twilio or Bland account. This costs money and rings a real phone. Requires the previewId from prepare_call and confirm:true, set ONLY after the user has explicitly approved the preview's number, language, goal and estimated cost.

ParametersJSON Schema
NameRequiredDescriptionDefault
confirmNo
previewIdYes

TDQS

A4.8/5.0
Behavior5/5

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

Annotations only say readOnlyHint=false, openWorldHint=true, destructiveHint=false. The description adds the traits that actually matter here: it costs money, it rings a real phone, and it must not be fired until a human approves the preview. That is real side-effect and safety context the annotations do not convey.

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?

Three sentences, front-loaded with the step-of-workflow marker and the 'Step 2 of 2' framing first, then cost/side-effect warning, then the parameter contract. No filler.

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?

With no output schema, the description could note what a successful placement returns (e.g. a call id for get_call/end_call), which it omits. Everything an agent needs to invoke it correctly and safely, however, is present.

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 description coverage is 0%, so the description carries the burden, and it does explain both parameters: previewId originates from prepare_call, and confirm must only be set after explicit user approval. It stops short of stating confirm's default behavior or what a false confirm does, so it is strong but not exhaustive.

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 ('Places the previewed call') and immediately positions itself in a two-step workflow, distinguishing it from the sibling prepare_call ('Step 2 of 2', consumes 'previewId from prepare_call'). An agent can tell this apart from prepare_call, estimate_cost, or get_call without opening a schema.

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 an explicit precondition (previewId from prepare_call), an explicit gating rule (confirm:true set ONLY after the user has explicitly approved the number, language, goal and estimated cost), and implicitly routes the agent to the step-1 alternative. Nothing about when-to-use is left to inference.

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

prepare_callPrepare a call (preview, no call placed)A

Step 1 of 2. Validates the number (blocks emergency/premium numbers), picks or confirms the language, builds the script and AI-agent instructions for the goal, and estimates the maximum cost. Returns a PREVIEW (number, language, goal, script, cost) and a previewId. No call is placed. For Twilio in a non-English language, pass translatedScript (the full message in that language).

ParametersJSON Schema
NameRequiredDescriptionDefault
toYes
goalYes
recordNo
contextNo
mustNotNo
languageNo
providerNo
keyPointsNo
questionsNo
callerNameYes
maxMinutesNo
onBehalfOfNo
sampleTextNo
calleeTimezoneNo
translatedScriptNo

TDQS

A4.1/5.0
Behavior5/5

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

Beyond the annotations, the description discloses real behavioral traits: it validates and blocks emergency/premium numbers, auto-selects or confirms language, builds script and AI-agent instructions, creates a previewId resource while placing no call, and adds a provider-specific caveat about passing translatedScript for Twilio in non-English languages. This is unusually rich side-effect and constraint disclosure. No contradiction with readOnlyHint=false (a previewId is created) or destructiveHint=false.

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?

Three tight sentences, front-loaded with the sequencing and no-call constraint before the return-value detail and the Twilio caveat. 'No call is placed' slightly duplicates the title's 'preview, no call placed', a minor redundancy in an otherwise dense, well-ordered description.

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

Completeness3/5

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

With 15 parameters, 0% schema coverage and no output schema, the description does describe the return payload (number, language, goal, script, cost, previewId), which removes the need to explain returns elsewhere. However, it leaves the majority of input parameters undocumented, so an agent must guess at provider, maxMinutes, keyPoints, questions, mustNot and several others.

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

Parameters2/5

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

Schema description coverage is 0% across 15 parameters, so the description carries the full burden and largely fails: only translatedScript gets a real explanation (Twilio + non-English), while to, goal, callerName, provider, language, maxMinutes, mustNot, keyPoints, questions, record, context, onBehalfOf, sampleText and calleeTimezone are never clarified. The mention of 'script, cost, number, language' partly overlaps parameter names but adds no semantics.

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?

The description names a specific verb and resource ('prepare' produces a preview, no call placed) and explicitly positions itself as 'Step 1 of 2', which cleanly separates it from place_call in the sibling list. It also lists the concrete outputs (number, language, goal, script, cost, previewId), so an agent can tell exactly what this tool produces versus its siblings.

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

Usage Guidelines4/5

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

'Step 1 of 2' plus 'No call is placed' effectively signals when to use this instead of place_call, giving a clear sequencing rule. There is no explicit naming of the alternative tool, and the overlap with the estimate_cost sibling (which also estimates cost) is never addressed, so it falls short of a full when/when-not/alternatives statement.

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

Tool Schema Changelog

Recent tool additions, removals, and schema changes observed during successful MCP inspections.

  1. 8 tool updatesv1.0.0
    • First observeddetect_language
    • First observedend_call
    • First observedestimate_cost
    • First observedget_call
    • First observedlist_calls
    • First observedlist_languages
    • First observedplace_call
    • First observedprepare_call

TDQS

A4/5.0

Scored across 8 tools

Disambiguation4/5

Each tool has a distinct role: list_languages enumerates supported providers, detect_language suggests a language, and the prepare/place/get/list/end tools map to a clear staged lifecycle. The only mild overlap is between list_languages and detect_language, but their descriptions clearly separate cataloguing from inference.

Naming Consistency5/5

All eight tools use a consistent snake_case verb_noun pattern (list_languages, detect_language, estimate_cost, prepare_call, place_call, get_call, list_calls, end_call). No deviations in casing or verb style.

Tool Count5/5

Eight tools is well-scoped for a call-placing service: three supporting tools (languages, detection, cost) plus a coherent prepare/place/inspect/end lifecycle. Every tool earns its place with no redundancy.

Completeness5/5

The full call lifecycle is covered: discover languages, detect language, estimate cost, prepare/preview, place, inspect status/transcript/summary, list history, and end/cancel. No obvious dead ends for the stated domain.

Maintenance

ActivityMaintained
ResponsivenessNo issues

Related MCP Connectors

Related MCP Servers

  • F
    license
    Not graded
    quality
    F
    maintenance
    Enables AI assistants to make real phone calls on your behalf using VoIP, handling conversations automatically through OpenAI's Real-Time Voice API. Simply tell Claude what you want to accomplish and it will call and manage the entire conversation for you.
    25
    -
  • F
    license
    Not graded
    quality
    D
    maintenance
    Enables AI agents to make real-world phone calls with AI voice technology and provides tools to track call status, transcripts, and summaries. It supports automated communication with both live numbers and simulated businesses for testing and demonstration purposes.
    -
  • A
    license
    Not graded
    quality
    B
    maintenance
    Enables an AI agent to place outbound phone calls through the user's own Twilio account, delivering a spoken message or asking a single question and returning the recipient's transcribed reply to the agent. It exposes just two tools—one-way notifications and one-question calls to a fixed, preconfigured number with built-in rate limits and guardrails.
    41 PyPI
    1
    MIT