Documentation
Give your agent a phone.
CallAgent is a remote MCP server. Your agent prepares a call and shows you the plan. Once you approve, a voice agent places the call over the normal phone network and reports back. There’s no SDK to install.
Quickstart
Create an account
Sign in with Google, then finish setup with your name, country and your own phone number. Your token appears on the dashboard.
Connect your client
Add the server with your token as a bearer header and reconnect. Call server_status to check the connection.
Ask for a call
Tell your agent what you want in plain language. It calls prepare_call, shows you the plan, and waits.
Approve
On your go-ahead the agent calls approve_and_start, then loops wait_for_call until the call is over.
Client setup
Streamable HTTP, bearer-token auth. The endpoint is https://34.159.148.7.sslip.io/mcp.
claude mcp add --transport http callagent https://34.159.148.7.sslip.io/mcp \ --header "Authorization: Bearer cba_live_…"
{
"mcpServers": {
"callagent": {
"type": "http",
"url": "https://34.159.148.7.sslip.io/mcp",
"headers": { "Authorization": "Bearer cba_live_…" }
}
}
}
[mcp_servers.callagent] url = "https://34.159.148.7.sslip.io/mcp" bearer_token_env_var = "CALLAGENT_MCP_TOKEN" tool_timeout_sec = 60
Set tool_timeout_sec above 50 s: wait_for_call long-polls for up to 50 seconds.
Authentication
Every request carries Authorization: Bearer cba_live_…. The token is the account. Every tool resolves its caller from it. Treat it like a password.
Call lifecycle
prepare_call(number, brief, …) → run_id, the full plan. Nothing dials.
approve_and_start(run_id, i_understand_this_places_a_real_call=true)
→ dials once. Repeating it never redials.
wait_for_call(run_id, since_seq) → transcript, questions, then the result
call_review(run_id) → optional QA after the call
A call keeps running if your MCP client disconnects. Reconnect and keep polling with the same run_id.
Supervising a live call
When the other side offers something the brief does not cover, the voice agent does not guess. It says something like „Moment, ich frag kurz nach“ and raises a question. Answer with nudge_call within about 25 seconds. abort_call hangs up immediately.
Writing a brief
The brief is Markdown, usually in German, and it is the voice agent’s whole instruction set.
# Rolle & Ziel Du rufst bei der Praxis Dr. Huber an und vereinbarst einen Kontrolltermin für Alex Berger. # Ton Freundlich, knapp, natürlich. # Ablauf 1. Begrüßen und den Grund nennen. 2. Nach freien Terminen am Donnerstag fragen. 3. Den frühesten Termin bestätigen und einmal wiederholen. # Regeln - Kein Termin vor 14 Uhr. # Fertig wenn - Termin mit Datum und Uhrzeit bestätigt
Tools
| Tool | What it does |
|---|---|
prepare_call | Creates a run and returns the plan. Nothing dials. |
approve_and_start | Dials once, and only with an explicit flag. |
wait_for_call | Long-polls for transcript lines, questions and the result. |
nudge_call | Passes your answer into a live call. |
abort_call | Hangs up immediately. |
call_review | Scores the call and suggests brief edits. |
The canonical reference, including every parameter, lives with the app: app docs.
Pilot accounts
Invite only. One free test call to your own number. It counts only if it connects. No credit card.