CallAgent

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

01

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.

02

Connect your client

Add the server with your token as a bearer header and reconnect. Call server_status to check the connection.

03

Ask for a call

Tell your agent what you want in plain language. It calls prepare_call, shows you the plan, and waits.

04

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 Code
claude mcp add --transport http callagent https://34.159.148.7.sslip.io/mcp \
  --header "Authorization: Bearer cba_live_…"
mcp.json — Claude Desktop, Cursor, others
{
  "mcpServers": {
    "callagent": {
      "type": "http",
      "url": "https://34.159.148.7.sslip.io/mcp",
      "headers": { "Authorization": "Bearer cba_live_…" }
    }
  }
}
~/.codex/config.toml
[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
The agent always says it is an AI. It mentions it once, casually, in the greeting. A brief cannot switch this off.

Tools

ToolWhat it does
prepare_callCreates a run and returns the plan. Nothing dials.
approve_and_startDials once, and only with an explicit flag.
wait_for_callLong-polls for transcript lines, questions and the result.
nudge_callPasses your answer into a live call.
abort_callHangs up immediately.
call_reviewScores 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.