On this page
AI AGENT GUIDE Upcoming open beta
Connect your
AI agent.
You ask. Your agent prepares the request. CallAlternative makes the call and brings the answer back.
01 / SET UP
Connect your agent
CallAlternative uses MCP: a shared way for an AI application to discover tools and ask them to do a task. Your application needs to support Streamable HTTP MCP with OAuth authorization.
GPT, Claude and Gemini illustrate compatible-agent workflows. Setup depends on your application; native chat-app connectors are not included in this release.
Before you begin
- An active Max subscription and an email-verified account.
- Calling credit and a destination your account can call.
- A compatible agent application with the connection configured.
Basic and Basic Plus do not include AI agent or MCP access.
Checking connection availability…
- Add the available MCP server address to your compatible agent application.
- Choose its connect or authorize option. Sign in to CallAlternative when prompted.
- Review the application, return address and permissions. Select Connect to return to your agent automatically.
You never need to copy access tokens. Your agent handles its own connection credentials after you approve. Manage or disconnect applications in Connected agents.
Never paste credentials into prompts or URLs, or extract tokens from your browser. Only approve applications and return addresses you recognize.
Choose and change permissions
Connections default to read-only. If your agent requests calling access, you can choose Allow calling before connecting. In Connected agents, turn calling off immediately while keeping read access. To allow calling again, reconnect from your agent, request calls:write and approve it. Existing calls continue when calling access is removed.
Manage agent permissionsCheck the connection without placing a call
First, ask your application to discover the server’s available tools (tools/list in MCP). Then check your account and destination. These examples are MCP tool invocations, not connection settings.
{
"name": "account_get_status",
"arguments": {}
}{
"name": "calling_preflight",
"arguments": {
"to": "+12025550100"
}
}{
"name": "calls_list",
"arguments": {
"limit": 10
}
}The example number is fictional. Replace it with your intended, authorized recipient. A successful connection check does not enable beta calling.
02 / ASK
Start with one question
Keep your first request small. For example:
“Call the restaurant and ask if they’re open today.”
- Confirm the recipient. Your agent checks the number and whether your account can call it.
- Confirm the request. Give your agent permission to place this specific call.
- Keep the call ID. When calling is enabled, your agent submits the request and uses the returned ID to follow it.
{
"name": "call_create_with_goal",
"arguments": {
"destination": "+12025550100",
"goal": "Are you open today?",
"maxDurationSeconds": 30,
"idempotencyKey": "<unique-operation-UUID>"
}
}Example only; nothing runs on this page. Replace the fictional number and placeholder key before using it in your configured agent.
Question limits and safe retries
Use one English question, up to 220 ASCII characters. The current calling agent speaks English (en-US). The duration is a requested cap, not an exact hard stop; your balance or eligibility may reduce it.
Generate a unique UUID for each new operation. If a request times out with an unknown result, retry with the same idempotency key and identical arguments. Do not create a new key or automatically redial.
A queued response does not prove the phone rang. Check the returned call ID for progress and results.
03 / GET THE ANSWER
Find out what happened
Open Calls for captured answers and available transcripts. Your agent can retrieve them through MCP using the same call ID.
call_getcall_get_resultCompleted means the call ended. Check the captured answer and action outcome to learn whether someone answered and your request was achieved.
Read results in your agent
{
"name": "call_get",
"arguments": {
"callId": "<returned-call-id>"
}
}{
"name": "call_get_result",
"arguments": {
"callId": "<returned-call-id>"
}
}answerCapture.status can be pending, captured, no_answer or unavailable. If pending, check the same ID later or reload Calls.
For actions, inspect result.outcome.status: confirmed, not_completed, needs_user_input or unknown. Provider-reported results use source: provider_report and independentlyVerified: false. A captured quote can exist alongside an unknown outcome.
If the result is unclear, ask the user what to do next. Do not automatically redial.
End a call when the user asks
Confirm which call should stop, then use its call ID and a separate operation key.
{
"name": "call_hangup",
"arguments": {
"callId": "<returned-call-id>",
"idempotencyKey": "<separate-operation-UUID>"
}
}One simple action, too
Ask your agent to confirm a reservation, move a reservation or cancel an appointment. It should collect missing details and get your approval before calling.
“Call the salon and cancel Alex Rivera’s appointment.”
Supported actions and required details
Natural requests can be short. The submitted action currently requires both the reference and customer name. Your agent must ask for these if missing; a name alone is not enough for the structured action.
| Action type | Goal (English) |
|---|---|
confirm_reservation | Confirm the reservation. |
reschedule_reservation | Reschedule the reservation. |
cancel_appointment | Cancel the appointment. |
Only fee-free requests within the approved details are supported. Do not authorize charges, payments, unapproved alternatives or extra conditions. A reschedule needs an unambiguous future date, time and time zone.
{
"name": "call_create_with_goal",
"arguments": {
"destination": "+12025550100",
"goal": "Reschedule the reservation.",
"maxDurationSeconds": 120,
"idempotencyKey": "<unique-operation-UUID>",
"action": {
"type": "reschedule_reservation",
"userAuthorized": true,
"target": {
"reference": "<reservation-reference>",
"customerName": "Alex Rivera"
},
"requestedSlot": {
"localDate": "2027-04-20",
"localTime": "19:00",
"timeZone": "America/New_York"
}
}
}
}Replace the placeholders and confirm that the example date is still in the future. Set userAuthorized only after the user has approved this exact action. An optional callerName changes the spoken introduction (the default is the account’s first name); it does not replace the action’s customer name.
Your agent’s tools
Discover available tools in your connection before using them. Availability depends on your account and the beta features enabled.
| Tool | What it does |
|---|---|
account_get_statusRead | Check your account, plan and calling eligibility. |
calling_preflightRead | Check a destination before calling. Does not place a call. |
calls_listRead | Find recent calls and their IDs. |
call_getRead | Check the progress of one call. |
call_get_resultRead | Read available answers, transcripts and action outcomes. |
call_create_with_goalPlaces a call | Place a question or supported action call, when beta calling is enabled. |
call_hangupEnds a call | End a call you have confirmed should stop. |
calling_request_country_accessSends a request | Send a request for country access. Does not grant access or place a call. |
One credit pool. A different rate.
AI calls use your shared calling-minute balance. We round connected time up to the next full minute, then deduct 10 calling minutes per minute. Browser calls keep their regular rate.
An unanswered, unconnected call uses zero minutes. A connected voicemail counts as connected time. AI agent access requires Max.
Review your plan and creditA little help if you get stuck
My plan is not eligible, or I’m out of credit
AI agent access requires Max, a verified email and calling credit. Review your account on Billing. Upgrading does not activate the upcoming beta.
The connection says unauthorized or expired
Start the connection again from your agent application and sign in to approve access. You can disconnect old applications in Connected agents. Never share credentials in chat.
I can’t find a tool
Refresh tool discovery in your configured application. Check that it supports Streamable HTTP MCP with OAuth authorization. The tool may not be enabled for your account or the current beta.
Another call is active, or a request timed out
Check the existing call and wait for it to finish. Retry an uncertain operation only with its original key and identical arguments. A new key can create another call.
The call ended, but the answer is still pending
Check the same call ID with call_get_result, or reload Calls. Some answers or transcripts may be unavailable. Do not automatically place another call.