
Give any AI agent a phone: make and answer calls, get through phone menus, and send texts.
Maintain this server? Claim it
Call this server's tools from your browser. Nothing to install.
Bearer ask_live_... key. Optional: without one, call the assistable_connect tool to sign in by code and get a key.
Requests go through mcptry because browsers can't call most MCP servers directly. Header values are sent to the server for that request only and are never stored or logged.
Tool list from our last check. Connect live to refresh it.
List appointments in a subaccount within an optional date range.
List appointments in a subaccount within an optional date range.
| Argument | Type | Description |
|---|---|---|
| limit | integer | |
| cursor | string | |
| endDate | string | |
| startDate | string | |
| subAccountId* | string |
{
"type": "object",
"$schema": "http://json-schema.org/draft-07/schema#",
"required": [
"subAccountId"
],
"properties": {
"limit": {
"type": "integer",
"maximum": 100,
"minimum": 1
},
"cursor": {
"type": "string"
},
"endDate": {
"type": "string"
},
"startDate": {
"type": "string"
},
"subAccountId": {
"type": "string"
}
}
}Only when you have no Assistable API key: start signing in. Returns verification_uri_complete and user_code; send the person that link (or the code) so they can sign in to Assistable, pick the account and approve. Then call assistable_connect_finish with device_code every interval seconds until it returns api_key. If they have no account, the link lets them sign up first.
| Argument | Type | Description |
|---|---|---|
| client_name | string | Your agent's name, shown to the person approving, e.g. Hermes. |
{
"type": "object",
"$schema": "http://json-schema.org/draft-07/schema#",
"properties": {
"client_name": {
"type": "string",
"maxLength": 60,
"minLength": 1,
"description": "Your agent's name, shown to the person approving, e.g. Hermes."
}
}
}Check an assistable_connect sign-in. error.code authorization_pending means the person has not approved yet: wait interval seconds and call again. On approval it returns api_key once: use it as the Authorization: Bearer header for this MCP server (mcp_url) and keep it safe; it cannot be shown again.
| Argument | Type | Description |
|---|---|---|
| device_code* | string | device_code from POST /v3/agent-connect. |
{
"type": "object",
"$schema": "http://json-schema.org/draft-07/schema#",
"required": [
"device_code"
],
"properties": {
"device_code": {
"type": "string",
"maxLength": 200,
"minLength": 20,
"description": "device_code from POST /v3/agent-connect."
}
}
}Archive (soft-delete) an assistant.
| Argument | Type | Description |
|---|---|---|
| assistantId* | string |
{
"type": "object",
"$schema": "http://json-schema.org/draft-07/schema#",
"required": [
"assistantId"
],
"properties": {
"assistantId": {
"type": "string"
}
}
}Create an assistant. Required: subAccountId, name. Optional config blocks (llmConfig, voiceConfig, chatConfig) mirror the dashboard create dialog. voice_settings configures call greeting mode, opening messages, and voicemail behavior; platform_tools attaches platform-catalog tools (declarative full-replace — see the field description).
| Argument | Type | Description |
|---|---|---|
| name* | string | |
| voiceId | any | |
| llmConfig | object | |
| chatConfig | object | |
| description | string | |
| voiceConfig | object | |
| subAccountId* | string | |
| assistantType | string | |
| platform_tools | array | Platform tool names to attach, e.g. ["book_appointment", "send_email"]. Declarative within the platform catalog: tools in the list are attached, catalog tools missing from the list are detached, custom tools are never touched. Omit for no change; [] detaches all platform tools. See GET /v3/tools for the catalog; custom tools attach via POST /v3/tools/{id}/assign. |
Fetch an assistant's full configuration by ID. The response includes voice_settings (greeting mode, opening messages, voicemail) and platform_tools (attached platform-catalog tool names).
| Argument | Type | Description |
|---|---|---|
| assistantId* | string |
{
"type": "object",
"$schema": "http://json-schema.org/draft-07/schema#",
"required": [
"assistantId"
],
"properties": {
"assistantId": {
"type": "string"
}
}
}List assistants in a subaccount (excludes archived by default). Note: voice_settings and platform_tools are returned only by assistants_get, not in the list.
| Argument | Type | Description |
|---|---|---|
| limit | integer | |
| cursor | string | |
| subAccountId* | string | |
| includeArchived | boolean |
{
"type": "object",
"$schema": "http://json-schema.org/draft-07/schema#",
"required": [
"subAccountId"
],
"properties": {
"limit": {
"type": "integer",
"maximum": 100,
"minimum": 1
},
"cursor": {
"type": "string"
},
"subAccountId": {
"type": "string"
},
"includeArchived": {
"type": "boolean"
}
}
}Patch an assistant. Only supplied fields change; nested config blocks are upserted. voice_settings updates call greeting mode, opening messages, and voicemail behavior; platform_tools declaratively replaces the attached platform-catalog tools (an empty array detaches all — see the field description).
| Argument | Type | Description |
|---|---|---|
| name | string | |
| voiceId | any | |
| llmConfig | object | |
| chatConfig | object | |
| assistantId* | string | |
| description | any | |
| voiceConfig | object | |
| platform_tools | array | Platform tool names to attach, e.g. ["book_appointment", "send_email"]. Declarative within the platform catalog: tools in the list are attached, catalog tools missing from the list are detached, custom tools are never touched. Omit for no change; [] detaches all platform tools. See GET /v3/tools for the catalog; custom tools attach via POST /v3/tools/{id}/assign. |
| voice_settings | object |
Fetch a call (status, recording, transcript) by ID.
| Argument | Type | Description |
|---|---|---|
| callId | string | Legacy alias for call_id. |
| call_id | string |
{
"type": "object",
"$schema": "http://json-schema.org/draft-07/schema#",
"properties": {
"callId": {
"type": "string",
"minLength": 1,
"description": "Legacy alias for call_id."
},
"call_id": {
"type": "string",
"minLength": 1
}
}
}Fetch a contact by ID.
| Argument | Type | Description |
|---|---|---|
| contactId* | string |
{
"type": "object",
"$schema": "http://json-schema.org/draft-07/schema#",
"required": [
"contactId"
],
"properties": {
"contactId": {
"type": "string"
}
}
}List contacts in a subaccount. meta.total is the number of matching contacts, so use it to answer how many contacts there are.
| Argument | Type | Description |
|---|---|---|
| limit | integer | |
| cursor | string | |
| search | string | |
| subAccountId* | string |
{
"type": "object",
"$schema": "http://json-schema.org/draft-07/schema#",
"required": [
"subAccountId"
],
"properties": {
"limit": {
"type": "integer",
"maximum": 100,
"minimum": 1
},
"cursor": {
"type": "string"
},
"search": {
"type": "string"
},
"subAccountId": {
"type": "string"
}
}
}List conversations in a subaccount.
| Argument | Type | Description |
|---|---|---|
| limit | integer | |
| cursor | string | |
| subAccountId* | string |
{
"type": "object",
"$schema": "http://json-schema.org/draft-07/schema#",
"required": [
"subAccountId"
],
"properties": {
"limit": {
"type": "integer",
"maximum": 100,
"minimum": 1
},
"cursor": {
"type": "string"
},
"subAccountId": {
"type": "string"
}
}
}Search Assistable's registered MCP tools by the task the user wants to do. Returns up to 5 exact tool definitions with JSON input schemas and annotations. Use this first when you need to choose a tool; the result is not authorization to call it.
| Argument | Type | Description |
|---|---|---|
| limit | integer | How many matching tools to return. Defaults to 5. |
| query* | string | A short description of the task or capability needed. |
{
"type": "object",
"$schema": "http://json-schema.org/draft-07/schema#",
"required": [
"query"
],
"properties": {
"limit": {
"type": "integer",
"maximum": 5,
"minimum": 1,
"description": "How many matching tools to return. Defaults to 5."
},
"query": {
"type": "string",
"maxLength": 240,
"minLength": 2,
"description": "A short description of the task or capability needed."
}
}
}Create a custom tool (toolType=CUSTOM). Name must match /^[a-zA-Z0-9_-]+$/ and be unique in the subaccount.
| Argument | Type | Description |
|---|---|---|
| url | string | |
| name* | string | |
| headers | object | |
| httpMethod | string | |
| parameters | array | |
| description | string | |
| subAccountId* | string |
{
"type": "object",
"$schema": "http://json-schema.org/draft-07/schema#",
"required": [
"subAccountId",
"name"
],
"properties": {
"url": {
"type": "string",
"format": "uri"
},
"name": {
"type": "string"
},
"headers": {
"type": "object",
"propertyNames": {
"type": "string"
},
"additionalProperties": {
"type": "string"
}
},
"httpMethod": {
"enum": [
"GET",
"POST",
"PUT",
"PATCH",
"DELETE"
],
"type": "string"
},
"parameters": {
"type": "array",
"items": {
"type": "object",
"required": [
"name",
"type"
],
"properties": {
"name": {
"type": "string"
},
"type": {
"type": "string"
},
"description": {
"type": "string"
}
}
}
},
"description": {
"type": "string"
},
"subAccountId": {
"type": "string"
}
}
}Soft-delete a custom tool.
| Argument | Type | Description |
|---|---|---|
| toolId* | string |
{
"type": "object",
"$schema": "http://json-schema.org/draft-07/schema#",
"required": [
"toolId"
],
"properties": {
"toolId": {
"type": "string"
}
}
}Fetch a tool's full configuration.
| Argument | Type | Description |
|---|---|---|
| toolId* | string |
{
"type": "object",
"$schema": "http://json-schema.org/draft-07/schema#",
"required": [
"toolId"
],
"properties": {
"toolId": {
"type": "string"
}
}
}List tools visible to a subaccount. Pass includePrebuilt=false for only custom tools.
| Argument | Type | Description |
|---|---|---|
| limit | integer | |
| cursor | string | |
| search | string | |
| subAccountId* | string | |
| includePrebuilt | boolean |
{
"type": "object",
"$schema": "http://json-schema.org/draft-07/schema#",
"required": [
"subAccountId"
],
"properties": {
"limit": {
"type": "integer",
"maximum": 100,
"minimum": 1
},
"cursor": {
"type": "string"
},
"search": {
"type": "string"
},
"subAccountId": {
"type": "string"
},
"includePrebuilt": {
"type": "boolean"
}
}
}Patch a custom tool. Supplying parameters/headers replaces those rows; omit to leave them.
| Argument | Type | Description |
|---|---|---|
| url | any | |
| name | string | |
| toolId* | string | |
| headers | any | |
| httpMethod | string | |
| parameters | any | |
| description | any |
{
"type": "object",
"$schema": "http://json-schema.org/draft-07/schema#",
"required": [
"toolId"
],
"properties": {
"url": {
"anyOf": [
{
"type": "string",
"format": "uri"
},
{
"type": "null"
}
]
},
"name": {
"type": "string"
},
"toolId": {
"type": "string"
},
"headers": {
"anyOf": [
{
"type": "object",
"propertyNames": {
"type": "string"
},
"additionalProperties": {
"type": "string"
}
},
{
"type": "null"
}
]
},
"httpMethod": {
"enum": [
"GET",
"POST",
"PUT",
"PATCH",
"DELETE"
],
"type": "string"
},
"parameters": {
"anyOf": [
{
"type": "array",
"items": {
"type": "object",
"required": [
"name",
"type"
],
"properties": {
"name": {
"type": "string"
},
"type": {
"type": "string"
},
"description": {
"type": "string"
}
}
}
},
{
"type": "null"
}
]
},
"description": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
}
}
}| voice_settings | object |
{
"type": "object",
"$schema": "http://json-schema.org/draft-07/schema#",
"required": [
"subAccountId",
"name"
],
"properties": {
"name": {
"type": "string"
},
"voiceId": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"llmConfig": {
"type": "object",
"properties": {
"model": {
"type": "string"
},
"prompt": {
"type": "string"
},
"temperature": {
"type": "number"
}
}
},
"chatConfig": {
"type": "object",
"propertyNames": {
"type": "string"
},
"additionalProperties": {}
},
"description": {
"type": "string"
},
"voiceConfig": {
"type": "object",
"propertyNames": {
"type": "string"
},
"additionalProperties": {}
},
"subAccountId": {
"type": "string"
},
"assistantType": {
"enum": [
"STANDARD",
"FLOW_BUILDER"
],
"type": "string"
},
"platform_tools": {
"type": "array",
"items": {
"type": "string"
},
"description": "Platform tool names to attach, e.g. [\"book_appointment\", \"send_email\"]. Declarative within the platform catalog: tools in the list are attached, catalog tools missing from the list are detached, custom tools are never touched. Omit for no change; [] detaches all platform tools. See GET /v3/tools for the catalog; custom tools attach via POST /v3/tools/{id}/assign."
},
"voice_settings": {
"type": "object",
"properties": {
"greeting_mode": {
"enum": [
"dynamic",
"fixed",
"contact_first"
],
"type": "string",
"description": "How the assistant opens a call: `dynamic` (AI-generated opener; default), `fixed` (speaks the configured opening message verbatim), or `contact_first` (stays silent until the contact speaks)."
},
"voicemail_message": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"description": "Played when voicemail is detected, after which the assistant stops. Empty or `null` means the assistant hangs up on voicemail instead."
},
"inbound_opening_message": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"description": "Spoken opener for inbound calls. Only valid in `fixed` greeting mode. Template variables (e.g. a contact first-name placeholder) are allowed and resolve per call. `null` clears this direction."
},
"outbound_opening_message": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"description": "Spoken opener for outbound calls. Only valid in `fixed` greeting mode. Template variables are allowed and resolve per call. `null` clears this direction."
},
"enable_voicemail_detection": {
"type": "boolean",
"description": "Records intent only: persisted and returned on read, but voicemail detection is currently platform-managed and this flag does not yet gate runtime behavior."
}
}
}
}
}{
"type": "object",
"$schema": "http://json-schema.org/draft-07/schema#",
"required": [
"assistantId"
],
"properties": {
"name": {
"type": "string"
},
"voiceId": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"llmConfig": {
"type": "object",
"propertyNames": {
"type": "string"
},
"additionalProperties": {}
},
"chatConfig": {
"type": "object",
"propertyNames": {
"type": "string"
},
"additionalProperties": {}
},
"assistantId": {
"type": "string"
},
"description": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"voiceConfig": {
"type": "object",
"propertyNames": {
"type": "string"
},
"additionalProperties": {}
},
"platform_tools": {
"type": "array",
"items": {
"type": "string"
},
"description": "Platform tool names to attach, e.g. [\"book_appointment\", \"send_email\"]. Declarative within the platform catalog: tools in the list are attached, catalog tools missing from the list are detached, custom tools are never touched. Omit for no change; [] detaches all platform tools. See GET /v3/tools for the catalog; custom tools attach via POST /v3/tools/{id}/assign."
},
"voice_settings": {
"type": "object",
"properties": {
"greeting_mode": {
"enum": [
"dynamic",
"fixed",
"contact_first"
],
"type": "string",
"description": "How the assistant opens a call: `dynamic` (AI-generated opener; default), `fixed` (speaks the configured opening message verbatim), or `contact_first` (stays silent until the contact speaks)."
},
"voicemail_message": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"description": "Played when voicemail is detected, after which the assistant stops. Empty or `null` means the assistant hangs up on voicemail instead."
},
"inbound_opening_message": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"description": "Spoken opener for inbound calls. Only valid in `fixed` greeting mode. Template variables (e.g. a contact first-name placeholder) are allowed and resolve per call. `null` clears this direction."
},
"outbound_opening_message": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"description": "Spoken opener for outbound calls. Only valid in `fixed` greeting mode. Template variables are allowed and resolve per call. `null` clears this direction."
},
"enable_voicemail_detection": {
"type": "boolean",
"description": "Records intent only: persisted and returned on read, but voicemail detection is currently platform-managed and this flag does not yet gate runtime behavior."
}
}
}
}
}