PHONE MCP / DOCS

A phone for
your agent.

Give your AI agent a real phone number. Define an agent — a goal, a backstory, a voice — and AkA Phone AI runs the calls and texts for it, voicing the conversation with an LLM. No audio streams or webhooks to wire up.

OPENCLAW · CLAUDE · CODEX · GEMINI · CURSOR · WINDSURF · OPENAI AGENTS · NODE · PYTHON
aka-phone-ai.txt
you define
agent goal + voice
the server runs
the LLM conversation
output
spoken calls / SMS
every task
safety-checked :)
boring phone plumbingready
00

How a call works

AkA Phone AI handles the voice loop. Your agent handles the answer.

01

Caller speaks

The carrier transcribes the caller's speech and posts the text to AkA Phone AI.

02

The agent thinks

Your agent's goal, backstory, and history go to the LLM, which writes the next line.

03

Text becomes speech

ElevenLabs voices the reply and the caller hears it.

04

Repeat or hang up

The loop continues until the task is done, then the call ends.

What else the platform does

01

Numbers

Buy multiple numbers and attach each one to an agent.

02

Calls

See outbound, received, missed, and rejected calls with both numbers.

03

Messages

See sent and received SMS in one chronological record.

04

Credits

Add credits in the app and inspect usage without leaving the workspace.

01

Tool reference

The phone tools your agent drives over MCP.

01
create_agent

Create an agent with your own unique id; it gets a dedicated number and is voiced by the server LLM.

IN
id, name, goal, backstory?
OUT
id, phoneNumber, status
02
get_agent

Fetch one agent, including whether it is currently running.

IN
id
OUT
id, status, running
03
list_agents

List every agent in your account with its number and status.

IN
none
OUT
agents[]
04
pause_agent / resume_agent

Pause or resume an agent. Persisted across restarts; agents also auto-stop after 30 days.

IN
id
OUT
id, status
05
make_call

Place a call from an agent's number, described by a task. The server runs the whole conversation.

IN
agentId, to, task
OUT
callId
06
get_call

Read a call's status, duration, and full transcript (how the SDK waits for a call to finish).

IN
callId
OUT
status, durationSeconds, transcript
07
list_transcripts

List an agent's past calls with timestamps, direction, duration, and transcript.

IN
agentId, number?
OUT
calls[]
08
new_calls / new_messages

Return inbound calls/SMS received since the last check and mark them read.

IN
agentId?
OUT
calls[] / messages[]
09
send_sms

Send an exact SMS from an agent's number.

IN
agentId, to, body
OUT
sid, status
10
phone_status

Read provider readiness and the workspace credit balance.

IN
none
OUT
providers, balanceCents
02

Connect it

Pick a client. Create one API key. Copy one setup line.

OpenClawAdd the phone tools to an OpenClaw agent.
terminal
01openclaw mcp add aka-phone-ai   --url https://app.akaphone.ai/mcp \02  --transport streamable-http \03  --header "Authorization: Bearer YOUR_MCP_TOKEN"
90-DAY API KEY

Cursor config also works in Windsurf. OpenAI Agents can use the Node or Python client. Keep the token on the server; never put it in browser code.

03

How calls work

The carrier transcribes speech; an LLM writes each reply; ElevenLabs speaks it. No audio or webhooks to host.

INBOUND
01Caller dials your number02  → Twilio posts the recognized03    speech to AkA Phone AI04  → the agent's LLM writes the next line05  → ElevenLabs voices it back06  → repeat until the task is done
OUTBOUND
01make_call(from, to, task)02  → the task is safety-checked03  → AkA Phone AI dials and opens04    the same voice loop05  → the LLM runs the whole call06    from your task description
KEEP AGENTS ALIVE

An agent stops answering after 15 minutes without a ping_agent. The SDK Agent auto-pings via keepAlive() / keep_alive().

04

Code implementation

Create an agent, buy a number, then make a call.

NODE.JSnpm i @aka-phone-ai/sdk
01import { AkaPhoneAI } from "@aka-phone-ai/sdk";02
03// Just your API key. Pass an endpoint only to target a specific server.04const akaPhoneAi = new AkaPhoneAI(process.env.AKA_PHONE_AI_API_KEY, { endpoint: "https://app.akaphone.ai/mcp" });05
06// Create an agent with your own id. It gets a dedicated number and the07// server voices it with an LLM.08const agent = await akaPhoneAi.createAgent({09  id: "booking-agent",10  name: "Bookings",11  goal: "Book a table for two and confirm the time.",12  backstory: "You are a concise, friendly assistant.",13});14
15// Place the call and wait for the transcript.16const call = await agent.makeCall(17  "+14155550100",18  "Book a table for two on Friday at 7:30pm.",19);20console.log(call.durationSeconds, call.transcript);
PYTHONpip install aka-phone-ai
01import os02from akaphoneai import AkaPhoneAI03
04aka_phone_ai = AkaPhoneAI(os.environ["AKA_PHONE_AI_API_KEY"], endpoint="https://app.akaphone.ai/mcp")05
06# Create an agent with your own id. It gets a dedicated number and the07# server voices it with an LLM.08agent = aka_phone_ai.create_agent(09    "booking-agent",10    name="Bookings",11    goal="Book a table for two and confirm the time.",12    backstory="You are a concise, friendly assistant.",13)14
15# Place the call and wait for the transcript.16call = agent.make_call("+14155550100", "Book a table for two on Friday at 7:30pm.")17print(call["durationSeconds"], call["transcript"])
DEFINE AN AGENTcreate_agent input
01akaPhoneAi.createAgent({02  id: "booking-agent",03  name: "Bookings",04  goal: "Book a table for two and confirm the time.",05  backstory: "Concise and friendly. Never invent details.",06});
05

Things you can make

Small programs that happen to own a phone.

real estate

Qualify an opted-in lead and schedule a viewing. Please do not let the agent invent a new roof.

book restaurants

Call, ask for a table, and store the confirmation. If 7:30 is gone, the agent can bravely try 8:00.

do not talk to dad lol

You could automate the reminder. You should probably still call your dad yourself.