One block of config: why CallAgent feels boring to integrate
No SDK, no webhook server, no audio pipeline. What we left out on purpose, and why.
Voice integrations usually mean WebRTC servers, audio codecs and webhook handlers. We wanted adding a phone to an agent to be as simple as adding any other tool.
What you don't have to build
- No SDK. CallAgent is a remote MCP server. If your client speaks MCP, it already speaks CallAgent.
- No webhook server. Call events don't need a public endpoint on your side.
wait_for_calllong-polls and returns the moment something happens. - No audio pipeline. No codecs, no VAD tuning, no echo handling. You send text in and get text back.
- No phone number. The line is ours. You never deal with carrier sign-ups or number registration.
One block of config
claude mcp add --transport http callagent https://34.159.148.7.sslip.io/mcp \ --header "Authorization: Bearer cba_live_…"
That is the whole integration. The token is the account: every tool works out who is calling from it, so there is no account ID to pass around, and a token can never read or steer someone else's call.
Tools that explain themselves
The person reading tool descriptions is a model, so we write them for one. prepare_call says "Show this exact plan
to the user". Responses carry a next field with the step that comes after:
{
"state": "in-progress",
"pending_questions": [{ "question": "Freitag 8 Uhr statt Donnerstag ok?" }],
"next": "Answer with nudge_call(run_id, answer) now, then keep calling wait_for_call."
}
In practice this means you rarely write orchestration code. You ask in plain language and the model follows the
loop: prepare_call → your approval → approve_and_start → wait_for_call until final.
Safe to retry
Agents retry things, and that is fine here. Starting is idempotent, so a second approve_and_start never redials.
Errors are plain sentences ("Use an international E.164 phone number") rather than codes you have to look up, so the
model can usually fix its own call. A dropped connection doesn't drop the call: reconnect and keep polling the same
run_id.
A brief is just Markdown
Role and goal, tone, steps, rules. Add a # Fertig wenn checklist and the agent ticks items off and reports
against them. Add # Vortragstext for anything that must be said word for word. Want to know whether a
brief works? call_review gives every finished call a score, a list of what was done and what was missed,
and suggestions for the brief. cost_report shows what it cost, per call and per day.
Where to start
Sign up, connect, and ask your agent to call you. The free test call goes to your own number, so the first person who hears your agent on the phone is you. Then read the docs. They are short.
Try it on your own phone
Sign in, connect the MCP server, and have your agent call you.