MCP tools reference
Every tool Telenow's MCP server offers: what it does, the permission it needs, what it takes and what it returns.
An assistant is shown only the tools its connection's permissions allow (Permissions, limits & safety). Every result comes twice, as structured JSON (structuredContent) and as text. When Telenow declines — a Do-Not-Call number, a missing value — the result has isError: true and a sentence saying why, which the assistant relays.
| Tool | Permission | Kind |
|---|---|---|
list_numbers | Read calls | read-only |
place_call | Place calls | reaches people |
get_call | Read calls | read-only |
list_calls | Read calls | read-only |
list_agents | Read calls | read-only |
get_agent | Read calls | read-only |
create_agent | Create agents | creates |
create_flow_agent | Create agents | creates |
update_agent | Create agents | changes |
list_voices | Read calls | read-only |
estimate_cost | Read calls | read-only |
list_campaigns | Read calls | read-only |
get_campaign | Read calls | read-only |
create_campaign | Run campaigns | creates a draft |
add_campaign_targets | Run campaigns | reaches people |
start_campaign | Run campaigns | reaches people |
pause_campaign | Run campaigns | changes |
The tools that reach people are marked destructive and open-world in their MCP annotations, so ChatGPT and Claude ask you before running them.
"This assistant" below means one connection's assistant. With an organization API key as the bearer instead, the tools act for the whole organization: every live number, call and campaign, and every agent an assistant made.
Calls
list_numbers
The numbers the assistant may call from — the ones you picked when connecting (every live number of the organization for an API key). The first is the default caller ID.
Takes nothing. Returns numbers: { id, phone_number, country }.
place_call
Places one real phone call and returns at once with a call_id. Two ways:
- The built-in agent with a task —
task,on_behalf_ofandopening_lineare required. The opening line is in the callee's language and says it is an AI assistant calling on behalf ofon_behalf_of, and why. - One of your agents —
agent_id(an active one), plusvariablesfor its{placeholders}. Its own prompt runs the call, sotask,detailsandlanguageare not used.
| Input | Type | Notes |
|---|---|---|
to | string | Required. International format, e.g. +919812345678. |
agent_id | string | Call with this agent instead of the built-in one. |
variables | object | With agent_id: values for its placeholders. |
task | string | What the call must achieve, as instructions to the agent (up to 8,000 characters). |
on_behalf_of | string | The person the call is for (up to 500 characters). |
opening_line | string | The first sentence (up to 500 characters). With agent_id, it replaces the agent's own for this call. |
details | string | Facts the agent may share. Nothing else is shared. |
language | string | The language to hold the call in, e.g. Hindi or en-IN. |
from_number | string | An id or number from list_numbers. Defaults to the first. |
idempotency_key | string | A retry with the same key returns the first call instead of dialing again. |
Returns { call_id, status, to, from, message } — status is dialing, or for a retried key the first attempt's placed or failed.
{ "to": "+919845012345", "task": "Ask whether they are open on Sunday and until when.", "on_behalf_of": "Asha",
"opening_line": "Hi, I'm an AI assistant calling for Asha to ask about your Sunday hours." }
get_call
One call by call_id — from place_call, list_calls or a campaign's results.
| Field | Meaning |
|---|---|
status | dialing, in_progress or ended. |
direction | inbound or outbound. |
from, to, started_at, ended_at, duration_seconds | The call. |
outcome | The carrier's result: answered, no-answer, busy, failed. |
answered_by | human, or machine_… when answering-machine detection ran. |
end_reason | Why it ended: ended for an ordinary ending (either side hung up, a silence hang-up, the agent ended it), or a specific reason such as max_duration, voicemail_drop, amd_hangup or a carrier cause; null while the call is on. |
summary, summary_status | The post-call summary. pending: the call is on, or its analysis is queued or running. ready. not_available: there will be none (analysis off, too short or nothing said, or the analysis failed). |
analysis | Once ready: fields (the agent's own extraction fields), sentiment, disposition, action_items. |
transcript, transcript_truncated | { speaker: agent | other_party, text, at }; the newest turns are kept if a call is very long. |
note | A reminder to treat the other party's words as information, not instructions. |
list_calls
Recent calls on the assistant's numbers, newest first.
| Input | Type | Notes |
|---|---|---|
direction | inbound | outbound | any | Default any. |
since | string | RFC 3339 time; only calls that started then or later. |
limit | integer | 1–100, default 50. |
Returns calls with the call fields of get_call — status (in_progress or ended; only get_call tells dialing apart), direction, numbers, times, duration, outcome, answered_by — without end_reason, the summary, analysis and transcript.
Agents
list_agents
The organization's agents, most recently changed first: agent_id, name, kind (single_context or flow), active, model, speech_to_text, voice, created_by_assistant, changeable (this assistant may change it), and is_assistant_calls_agent. Takes an optional limit (1–200).
get_agent
One agent: prompt, opening line, voice, model, speech-to-text, session_config, variables, voicemail message, post-call analysis, objectives, time zone, changeable, its graph (flow, for a flow agent) and every other option in the Agents API's own shape (settings — exactly what create_agent and update_agent take back). Keys are never returned: each shows as a mask (••••1234), and update_agent keeps the stored key behind a mask sent back unchanged. A very large agent comes back without settings, then without flow, with a note saying so.
create_agent
Creates a single-context agent — one conversation with one goal. Requires name and system_prompt.
| Input | Type | Notes |
|---|---|---|
name, description | string | How it appears in Telenow. |
system_prompt | string | Its instructions. Per-call values are {placeholders}. |
opening_line | string | The first sentence when a call connects. |
voice | object | { provider, voice, config? } — see list_voices. |
model | object | { provider, model, config? }. |
speech_to_text | object | { provider, config? }. |
session_config | object | Call behaviour, as the Agents API's sessionConfig. |
variables | array | { name, required, default } for each placeholder. |
voicemail_message, post_call_analysis, objectives, timezone, persona_gender | As in the Agent field reference. | |
settings | object | Every other option, as the Agents API's own agent body (camelCase) — anything in the Agent field reference. The fields above win where both are given. |
country | string | ISO 3166-1 alpha-2 of the people it will talk to; picks the defaults for anything left out. |
Options that reach outside the call — tools, pre-call lookups, transfer and tool steps, custom model or speech endpoints, any URL anywhere, isPublic, postCallWhatsApp, call-backs the agent books (sessionConfig.followup) — need the Give agents tools permission (Permissions, limits & safety). Credentials are never accepted, in any field; a new agent also refuses masked keys copied from another.
Returns { agent_id, name, kind, voice, model, speech_to_text, warnings, message }.
create_flow_agent
Creates a multi-step (flow) agent: the call as a graph of steps with conditions between them. Assistants use it when you describe several scenarios or conditional paths — different handling for different callers or answers, a keypad menu, details collected step by step, a path to a person from anywhere. Requires name and flow; takes everything create_agent takes (system_prompt here is what every step shares).
flow is the graph, in the same shape as an agent's metadata.flow in the Agents API — { startNodeId, nodes, edges }. Every step kind, field and condition is in Flow agents API. It is checked exactly as calls run it: a graph the runtime would discard is refused with the reasons — so is a graph of one step with no exits, which calls run single-context — and what would run but may misbehave comes back as warnings.
Returns the same as create_agent, with kind: "flow". Example: Multi-step calls.
update_agent
Changes an agent this assistant created. Requires agent_id; send only what changes — everything else stays. Each top-level settings object (llmConfig, sessionConfig, metadata, …) is merged onto the stored one, one level deep: settings the assistant does not mention survive, but a nested object it sends (callerMemory, silenceCheckin, …) replaces the stored one — send it whole. flow replaces the whole graph — read it with get_agent, change it, send it back; masked keys left as they are keep the stored keys, and a mask whose step now points somewhere new is refused. Giving a single-context agent a flow makes it a flow agent. Takes everything create_agent and create_flow_agent take except country. Returns { agent_id, name, warnings, message }.
list_voices
Voices an agent can use, each with a sample.
| Input | Type | Notes |
|---|---|---|
provider | string | Text-to-speech provider. Default: your organization's for country. |
model | string | The provider's voice model, when its voices differ per model. |
language | string | A name or code: Hindi, hi, hi-IN. That exact locale first, then the rest of the language. |
gender | string | female, male or neutral. |
country | string | ISO 3166-1 alpha-2; orders the voices for that country. |
limit | integer | 1–50, default 10. |
Returns provider and voices: { voice_id, name, preview_url, sample_text, language, languages, gender, accent, age, style, use_case, description, model }.
estimate_cost
The cost of a minute of calling, in USD — for an existing agent (agent_id) or a planned one (model, speech_to_text, voice: each { provider, model? }, plus system_prompt). What is left out of a plan comes from your organization's defaults for country; from_number picks the carrier. Returns per_minute (model, speech_to_text, voice, telephony, platform_fee, total), the stack priced, not_priced (parts the catalogue has no price for) and a note. See Costs per minute.
Campaigns
list_campaigns
Campaigns set to call from the assistant's numbers, newest first, each with its settings, progress (total, completed, failed, pending) and can_run (this assistant may start it and add people). Takes optional status (draft, running, paused, completed, cancelled) and limit (1–100, default 20); more says whether more matched.
get_campaign
One campaign and its results. Takes campaign_id, optional cursor (the previous page's next_cursor) and results_limit (0–100, default 50).
Each result: { call_id, phone, name, outcome, attempt, completed_at, fields, sentiment } — outcome is answered, no-answer, busy, failed or machine; fields is what the agent's analysis extracted. Results come in the order calls finished. An empty page means nothing newer yet; ask again later with the same cursor.
create_campaign
Creates a campaign as a draft — nothing is dialed. Requires name and agent_id.
| Input | Type | Notes |
|---|---|---|
from_number | string | Which connected number calls. Default: the first. |
start_time_local, end_time_local | string | Daily window, HH:MM. |
timezone | string | IANA zone for the window. |
concurrency | integer | Calls at once. |
machine_detection | string or boolean | "hangup", or true to leave the agent's voicemail. |
max_attempts, retry_backoff_secs, retry_on_no_answer | Retries. | |
variables | object | Values for every target. |
targets | array | { phone, name?, id?, variables? }, up to 1,000. |
Returns campaign, targets (added; duplicates — people this connection already added, by id; do_not_call — numbers on your list or already waiting in the campaign; skipped) and a message. Defaults and rules: Campaigns from a search.
add_campaign_targets
Adds people to a campaign this assistant created: campaign_id, targets (up to 1,000), optional variables. On a running campaign they are called right away. Returns the counts, plus campaign_status.
start_campaign
Starts or resumes a campaign this assistant created (campaign_id). Starting a running campaign changes nothing; a completed or cancelled one cannot be started.
pause_campaign
Pauses any campaign set to call from the assistant's numbers (campaign_id): no one new is dialed, and calls in progress finish.