https://api.assistable.ai/mcp. Any agent that speaks MCP over
Streamable HTTP can use it to place outbound calls with an Assistable voice
assistant, wait for the call to finish, and read the transcript and recording.
Without a key the server lists only its basic tools. If
phone_whoami is
missing from your agent’s tool list, check that the key is sent and has the
subaccounts:read, billing:read and numbers:list scopes. The
Tools table lists the scopes for every phone tool.What you need
- An Assistable account with a voice assistant and a phone number assigned to it.
- An API key from Settings → API keys (see Authentication). Use a key limited to one subaccount: the server then targets that subaccount automatically, so the agent only needs one header.
- Calls are billed to the account at its normal usage rates.
X-Subaccount-Id: <subaccount-id>.
Connect your agent
- Grok CLI
- Hermes
- OpenClaw
- Claude Code
- Other clients
~/.grok/config.toml. Avoid --scope project, which writes it to
./.grok/config.toml inside the project, where it can be committed by mistake.Place a call
A typical run, in the order an agent should use the tools:1
Check the account
phone_whoami returns the subaccount, wallet balance, owned numbers, and the
default assistant when there is exactly one.2
Preview the call
calls_create with assistant_id and to (E.164, e.g. +15551234567) and
no confirm returns a preview and places nothing.3
Place it
Call
calls_create again with confirm: true once the person you act for has
approved the number and the assistant. The result includes call_id.4
Wait for the result
calls_wait with call_id blocks up to 45 seconds. If meta.timed_out is
true, call it again. It returns when the call is COMPLETED, BUSY,
FAILED, NO_ANSWER or CANCELED.5
Read the outcome
calls_get returns the status, summary, transcript and recording.variables to calls_create to give the assistant context for this call,
for example the reservation time and party size. Pass contact_id to attach the
call to an existing contact.
Show your own number
To make the call appear from a number the person owns, such as their cell:caller_id_addwithnumberandconfirm: true. Assistable sends a code to that number by SMS (ormethod: "call"for a voice call).caller_id_confirmwith theidthatcaller_id_addreturned asnumber_id, and the code the person received.- Pass the verified number as
fromtocalls_create.
caller_ids_list shows each caller ID and whether it is verified. A number can
only be used as caller ID by the account that verified it.
Tools
Tools the key’s scopes do not allow are left out of the tool list. The server
also exposes assistant, contact, conversation and appointment tools, and
search_tools to find a tool by intent.
When a call is refused
Refusals come back as an error with adetails.reason you can show the person:
Platform numbers can only call US and Canadian (
+1) numbers.
Safety
calls_create,numbers_assignandcaller_id_adddo nothing withoutconfirm: true. Confirm the number, the assistant and the purpose with the person you act for first.- Every call dials a real phone and is billed to the account.
- Follow the calling and consent rules where the call lands. In the US, the TCPA treats AI-generated voices as artificial voices, so calls to consumers need their prior consent.