Retell AI MCP server for AI agents

Live

BEARER TOKEN

VOICE AGENTS

AI

Retell AI gives your agent control of your voice agents: build and publish voice and chat agents, place outbound and batch phone calls, read call and chat transcripts, and run test cases against your response engines.

  • Per-user credentials: each call uses the actual user's access token, never a shared bot.
  • Encrypted per-tenant vault: AES-256, resolved at request time, never in LLM context.
  • Scoped before every call: pre-call scope check, 90-day SIEM-exportable audit chain.
Retell AI
agent · Acme Q3
Run
Which calls to the support agent yesterday had negative sentiment?
S
retell_list_calls
118ms
Voice ops agent
11 of 212 calls to the support agent yesterday were marked negative. 7 of those transcripts mention a delayed refund.
Sources: 212 calls, support agent
retell
212 calls
18:29
Message Claude...

Tools your voice ops agent reaches for on Retell AI, scoped per user.

CALL ANY TOOL
83 tools for voice agents in Retell AI: create, update, and publish voice and chat agents, place phone and batch calls, read calls and chats, manage contacts and phone numbers, and run batch tests.
retell_add_community_voice
Add community voice
Add a community voice from a voice provider to the Retell workspace's voice library. Returns the voice object, including voice_id, voice_name, provider, accent, gender, age and preview_audio_url. Use retell_add_community_voice after finding a voice with retell_search_community_voice; then use the returned voice_id in retell_create_agent.
Parameters
Name
Type
Required
Description
provider_voice_id
string
Required
Voice ID assigned by the provider, from retell_search_community_voice. Example: 21m00Tcm4TlvDq8ikWAM
voice_name
string
Required
Name to give the voice in your library. Example: Support Voice
public_user_id
string
Optional
User ID of the voice owner. Required for ElevenLabs voices only. Example: 63e06b7e7cafdc46be4d2e0b
voice_provider
string
Optional
Provider the voice comes from: elevenlabs, cartesia, minimax, fish_audio or inworld. Example: elevenlabs. One of: `elevenlabs`, `cartesia`, `minimax`, `fish_audio`, `inworld`.
retell_agent_playground_completion
Agent playground completion
retell_create_agent
Create agent
retell_create_batch_test
Create batch test
retell_create_chat_completion
Create chat completion
retell_create_conversation_flow_component
Create conversation flow component
retell_create_retell_llm
Create retell llm
retell_delete_agent
Delete agent
retell_delete_call
Call delete
retell_delete_contact
Delete contact
retell_delete_conversation_flow_component
Delete conversation flow component
retell_delete_phone_number
Delete phone number
retell_get_agent
Get agent
retell_get_call
Call get
retell_get_contact
Get contact
retell_get_conversation_flow_component
Get conversation flow component
retell_get_retell_llm
Get retell llm
retell_list_agent_versions
List agent versions
retell_list_calls
List calls
retell_list_contacts
List contacts
retell_list_export_requests
List export requests
retell_list_retell_llms
List retell llms
retell_publish_agent_version
Publish agent version
retell_repair_agent
Repair agent
retell_search_community_voice
Search community voice
retell_stop_call
Call stop
retell_update_agent
Update agent
retell_update_chat
Update chat
retell_update_conversation_flow
Update conversation flow
retell_update_phone_number
Update phone number

For more tools, view docs.

Build your Agent
Same auth pattern across LangChain, OpenAI, Anthropic, and Google ADK.
Python · LlamaIndex
import { ScalekitClient } from "@scalekit-sdk/node";
import { createReactAgent } from "@langchain/langgraph/prebuilt";

const sk = new ScalekitClient(env.SCALEKIT_ENV_URL, env.SCALEKIT_CLIENT_ID, env.SCALEKIT_CLIENT_SECRET);

// Retell AI tools scoped to this user
const { tools } = await sk.tools.listScopedTools("user_123", {
  filter: { connectionNames: ["retell"], toolNames: [
    "retell_list_calls",
    "retell_get_call",
    "retell_create_phone_call"] },
  pageSize: 100,
});

const agent = createReactAgent({ llm, tools });
await agent.invoke({ messages: [{ role: "user", content: "Find yesterday's negative support calls and call each customer back" }] });
import OpenAI from "openai";
import { ScalekitClient } from "@scalekit-sdk/node";

const sk = new ScalekitClient(env.SCALEKIT_ENV_URL, env.SCALEKIT_CLIENT_ID, env.SCALEKIT_CLIENT_SECRET);
const openai = new OpenAI();

const { tools } = await sk.tools.listScopedTools("user_123", {
  filter: { connectionNames: ["retell"] }, pageSize: 100,
});

const res = await openai.chat.completions.create({
  model: "gpt-5",
  messages: [{ role: "user", content: "Find yesterday's negative support calls and call each customer back" }],
  tools,
});

// Execute the tool call with the user's vaulted Retell AI access token
await sk.tools.executeTool(res.choices[0].message.tool_calls[0], "user_123");
import Anthropic from "@anthropic-ai/sdk";
import { ScalekitClient } from "@scalekit-sdk/node";

const sk = new ScalekitClient(env.SCALEKIT_ENV_URL, env.SCALEKIT_CLIENT_ID, env.SCALEKIT_CLIENT_SECRET);
const anthropic = new Anthropic();

const { tools } = await sk.tools.listScopedTools("user_123", {
  filter: { connectionNames: ["retell"] }, pageSize: 100,
});

const msg = await anthropic.messages.create({
  model: "claude-sonnet-5",
  max_tokens: 1024,
  messages: [{ role: "user", content: "Find yesterday's negative support calls and call each customer back" }],
  tools,
});

// Tool call runs with the user's vaulted Retell AI access token
await sk.tools.executeTool(msg.content, "user_123");
import { Agent } from "@google/adk/agents";
import { ScalekitClient } from "@scalekit-sdk/node";

const sk = new ScalekitClient(env.SCALEKIT_ENV_URL, env.SCALEKIT_CLIENT_ID, env.SCALEKIT_CLIENT_SECRET);

const { tools } = await sk.tools.listScopedTools("user_123", {
  filter: { connectionNames: ["retell"] }, pageSize: 100,
});

const agent = new Agent({
  name: "voice_ops_agent",
  model: "gemini-2.5-pro",
  instruction: "Retell AI tools scoped to this user",
  tools,
});

await agent.run("Find yesterday's negative support calls and call each customer back");
Try these prompts
Copy any prompt into your agent. Each maps directly to a Retell AI tool. Click to copy, paste into your agent, done.
Agents and flows
Copy the prompt
Copied
List every voice and chat agent in our workspace and whether each one is published.
Copy the prompt
Copied
Update the support agent's draft to use the new voice.
Copy the prompt
Copied
Publish the latest draft version of the booking agent.
Calls and chats
Copy the prompt
Copied
Call +1 415 555 0134 from our sales number with the follow-up agent.
Copy the prompt
Copied
Schedule a batch of reminder calls to these 40 numbers tomorrow at 10am.
Copy the prompt
Copied
Show the transcript and call analysis for the last call from +1 212 555 0198.
Testing and numbers
Copy the prompt
Copied
Run every test case against the intake conversation flow.
Copy the prompt
Copied
Which test runs failed in the last batch test, and why?
Copy the prompt
Copied
List our phone numbers and the agents bound to each one.
SEE HOW AUTH WORKS
Each user connects their own Retell AI access token once, and Scalekit sends it with every call. Access tokens stay vaulted, every call is scope checked, and every action is logged.
1
Authorize
Your user connects
Retell AI
once. We tie it to their identity and the meetings they approved — no shared bot account, no org-wide access
Who:
user ‘A’
when:
Once per user
access:
Limited to user
2
Store
Their
Retell AI
token lives in a vault scoped to them. User A's meetings are never reachable by an agent acting for user B, even on the same connection
vault:
encrypted
scope:
per-user
tokens:
auto-refreshed
3
Resolve
When your agent calls a
Retell AI
tool, we fetch the right token server-side. It never touches your agent, never appears in the LLM context, never shows up in your logs
speed:
~40ms
check:
before every call
seen by:
nobody
4
Audit
Every
Retell AI
tool call is logged — who triggered it, which meeting was fetched, what came back. 90 days of history, tied to the user who authorized it
history:
90 days
export:
SIEM-ready
logged:
every call
Test other agents
See the same per-user auth pattern across other AI and communication connectors.
Support and Ops Teams
Support ticket automation agent
Fetches new Zendesk tickets, drafts a reply from Notion knowledge base articles, digests what it cannot answer to Slack, and archives the rest, acting as the support agent rather than a shared API key.
GTM and RevOps Teams
Outbound prospecting agent
Searches Apollo for prospects matching your ICP, scores and ranks them, drafts personalized outreach in Gmail, and logs every send to Google Sheets. Mail goes out as the rep, not from a shared inbox.
Test other agents
See the same per-user auth pattern across other AI and communication connectors.
SUPPORT
Support ticket automation (Google ADK)
Fetch, annotate, and archive Zendesk tickets with Notion context, digesting anything it cannot answer to Slack.
SALES
Outbound prospecting agent
Search Apollo for ICP matches, rank them, draft personalised Gmail outreach, and log every send to Google Sheets.
Why Scalekit
Secure your agent's access. Connectors ship in minutes
01.
Shared tokens break per-user analytics
A shared Retell AI access token looks fine in a demo. In production every outbound call and agent change looks like one service account, and you cannot tell which user triggered it. Scalekit resolves the credential of the actual user who triggered the agent, never a shared bot.
// shared key
audit → bot_service_account

// scalekit
audit → user_abc ✓
02.
Authentication is not authorization
03.
Multi-tenancy is architectural
04.
Retell AI today. Ten connectors tomorrow.
“Our agents act across Salesforce, Gong, Google Drive, and more, on behalf of every customer. Scalekit behind the scenes meant we can keep adding tools without ever rebuilding how credentials or tool calling work.”
Venu Madhav Kattagoni
Head of Engineering / Von
FAQs
Frequently Asked Questions
Does the agent access Retell AI as the user or through a shared access token?
As the user. Each user connects their own Retell AI access token once, and Scalekit sends it with every call. Audit logs attribute every call placed and every agent change to that user, not a shared service account.
Where is the Retell AI access token stored?
In Scalekit's managed AES-256 token vault, namespaced per tenant. To rotate it, the user reconnects with a new access token. Revocation is a single dashboard action. Credentials never appear in prompts, logs, or LLM context.
Can I limit what the agent does in Retell AI?
Yes. Filter by tool name in listScopedTools to expose only what you want, for example the call, chat, and agent read tools without retell_delete_agent, which permanently deletes a voice agent and all of its versions. Scalekit also enforces scope checks before every API call.
What happens when a user revokes Retell AI access?
The connection is invalidated on the next tool call. Subsequent requests for that user fail closed with a clear error. Other users in the tenant remain unaffected. The event is logged for audit.
Can the agent place real phone calls?
Yes. retell_create_phone_call places an outbound call from a Retell number to a destination number, and retell_create_batch_call schedules a batch of outbound calls from one number. retell_stop_call hangs up a call in progress. Expose these tools only to agents that should dial out.
Start in your coding agent
Up and running in one command
Install the Scalekit skill in your editor of choice. Connector, auth, tools, prompt, all wired up
Claude Code REPL
/plugin marketplace add scalekit-inc/claude-code-authstack
/plugin install agentkit@scalekit-auth-stack
Cursor Code REPL
# ~/.cursor/mcp.json
{
""mcpServers"": {
""retell"": {
""url"": ""https://mcp.scalekit.com/retell"",
""headers"": { ""Authorization"": ""Bearer $SCALEKIT_TOKEN"" }
}
}
}
Codex Code REPL
# ~/.codex/config.toml
[mcp_servers.retell]
url = ""https://mcp.scalekit.com/retell""
auth_env = ""SCALEKIT_TOKEN""
Copilot Code REPL
# .vscode/mcp.json
{
""servers"": {
""retell"": {
""url"": ""https://mcp.scalekit.com/retell"",
""type"": ""http""
}
}
}