Give your agent a phone
DialAgent is a remote MCP server with OAuth, plus a REST API. One endpoint works in every client.
Quickstart
claude mcp add --transport http dialagent https://mcp.dialagent.com/mcp
MCP tools
Calls are asynchronous. place_call returns a call id at once; poll get_call every few seconds until the status is final. This keeps every client inside its tool timeout.
place_callCall one number with a goal.to* E.164 · goal* string · share object (facts it may say) · language BCP-47, default en-US · voice mia|jack|grace|leo|nora|viktor · manner friendly|business|firm · max_minutes · confirm_before_dial bool → call_idcall_aroundCall 2–10 numbers in parallel with the same questions, compare answers, optionally book the best.targets* [to, label] · goal* · pick cheapest|soonest|closest|none · book bool · share · language → batch_idget_callStatus, live transcript and, when finished, the result.call_id* or batch_id* → status queued|ringing|in_progress|on_hold|completed|no_answer|failedsend_messageCall only to deliver a message and bring back the reply.to* · message* · ask_for_reply bool → call_idend_call · list_callsHang up a live call. List recent calls with outcomes.end_call: call_id* · list_calls: limit, cursorCall result
{
"call_id": "call_8f2k1",
"status": "completed",
"outcome": "achieved",
"summary": "Booked a table for 2 tonight at 7:30 PM, window, under Alex.",
"commitments": [ "Arrive by 7:40; table held 10 minutes" ],
"follow_ups": [],
"duration_s": 72,
"transcript": [ { "speaker": "agent", "text": "Hi, I'm an AI assistant..." } ],
"recording_url": "https://rec.dialagent.com/...signed"
}
outcome is one of achieved, partial, not_achieved. Recording links expire after 24 hours; call get_call again for a fresh one.
REST API
Available on Pro and Business. Create an API key in the dashboard. Same parameters as the MCP tools.
curl https://api.dialagent.com/v1/calls \
-H "Authorization: Bearer da_live_..." \
-H "Content-Type: application/json" \
-d '{ "to": "+14155550132", "goal": "Table for 4, Fri ~8pm, before 9", "share": { "name": "Sam" } }'
Webhooks
Events: call.started, call.completed, call.failed, batch.completed, message.replied. Each request is signed with X-DialAgent-Signature (HMAC-SHA256 of the raw body with your webhook secret). We retry failed deliveries for 24 hours with backoff.
Limits
Calls go out 08:00–21:00 in the recipient’s time zone, to the US, Canada and Europe. Up to 2 calls a day to the same number. Parallel calls and call length depend on your plan. The full rules are on the safety page.