Assistable MCP
Provides AI agents with telephony capabilities including making and answering voice calls, navigating phone menus, sending and reading SMS/WhatsApp messages, and booking appointments via connected calendars.
Endpoint and access
No sign-in to connect and list tools. Individual tools may still need a vendor account, credentials, or permissions; check the documented prerequisites.
https://api.assistable.ai/mcpWhat you can do with it
- Make and answer AI voice calls
- Send and read SMS/WhatsApp texts
- Navigate interactive phone menus
- Book appointments on calendars
Source and maintenance
Protocol and capabilities
- Server
- assistable 0.4.0
- MCP protocol
- 2025-06-18
- Tools
- 16 advertised
- Resources
- Not advertised
- Resource templates
- Not advertised
- Prompts
- Not advertised
{
"tools": {
"listChanged": true
}
}Server-provided instructions
Untrusted server output shown for inspection. It is not Koskamo guidance and is excluded from knowledge search.
Tools
16 advertised
search_tools
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.
{
"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."
}
}
}{
"readOnlyHint": true,
"openWorldHint": true
}assistants_list
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.
{
"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"
}
}
}{
"readOnlyHint": true,
"openWorldHint": true
}assistants_get
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).
{
"type": "object",
"$schema": "http://json-schema.org/draft-07/schema#",
"required": [
"assistantId"
],
"properties": {
"assistantId": {
"type": "string"
}
}
}{
"readOnlyHint": true,
"openWorldHint": true
}assistants_create
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).
{
"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."
}
}
}
}
}{
"readOnlyHint": false,
"destructiveHint": false
}assistants_update
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).
{
"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."
}
}
}
}
}{
"readOnlyHint": false,
"destructiveHint": false
}assistants_archive
Archive (soft-delete) an assistant.
{
"type": "object",
"$schema": "http://json-schema.org/draft-07/schema#",
"required": [
"assistantId"
],
"properties": {
"assistantId": {
"type": "string"
}
}
}{
"readOnlyHint": false,
"destructiveHint": true
}tools_list
List tools visible to a subaccount. Pass includePrebuilt=false for only custom tools.
{
"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"
}
}
}{
"readOnlyHint": true,
"openWorldHint": true
}tools_get
Fetch a tool's full configuration.
{
"type": "object",
"$schema": "http://json-schema.org/draft-07/schema#",
"required": [
"toolId"
],
"properties": {
"toolId": {
"type": "string"
}
}
}{
"readOnlyHint": true,
"openWorldHint": true
}tools_create_custom
Create a custom tool (toolType=CUSTOM). Name must match /^[a-zA-Z0-9_-]+$/ and be unique in the subaccount.
{
"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"
}
}
}{
"readOnlyHint": false,
"destructiveHint": false
}tools_update
Patch a custom tool. Supplying parameters/headers replaces those rows; omit to leave them.
{
"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"
}
]
}
}
}{
"readOnlyHint": false,
"destructiveHint": false
}tools_delete
Soft-delete a custom tool.
{
"type": "object",
"$schema": "http://json-schema.org/draft-07/schema#",
"required": [
"toolId"
],
"properties": {
"toolId": {
"type": "string"
}
}
}{
"readOnlyHint": false,
"destructiveHint": true
}contacts_list
List contacts in a subaccount. meta.total is the number of matching contacts, so use it to answer how many contacts there are.
{
"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"
}
}
}{
"readOnlyHint": true,
"openWorldHint": true
}contacts_get
Fetch a contact by ID.
{
"type": "object",
"$schema": "http://json-schema.org/draft-07/schema#",
"required": [
"contactId"
],
"properties": {
"contactId": {
"type": "string"
}
}
}{
"readOnlyHint": true,
"openWorldHint": true
}conversations_list
List conversations in a subaccount.
{
"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"
}
}
}{
"readOnlyHint": true,
"openWorldHint": true
}appointments_list
List appointments in a subaccount within an optional date range.
{
"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"
}
}
}{
"readOnlyHint": true,
"openWorldHint": true
}calls_get
Fetch a call (status, recording, transcript) by ID.
{
"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
}
}
}{
"readOnlyHint": true,
"openWorldHint": true
}Prompts
Not advertised
Resources
Not advertised
30-day availability
Aggregated from read-only remote checks; this is not a tool-execution or security guarantee.
- Successful checks
- 1 of 1 (100%)
- Average latency
- 761 ms
- 95th percentile latency
- 761 ms
Maintenance history
Public check and source-refresh events. Editorial and ownership records remain private.
- · probe · passed · 761 ms · metadata changed · 16 tool(s)
Connect from your client
Each snippet registers the same endpoint; pick the client you use.
Claude Code
claude mcp add --transport http assistable-mcp https://api.assistable.ai/mcpCodex
codex mcp add assistable-mcp --url https://api.assistable.ai/mcpCursor
{
"mcpServers": {
"assistable-mcp": {
"url": "https://api.assistable.ai/mcp"
}
}
}Cline
{
"mcpServers": {
"assistable-mcp": {
"type": "streamableHttp",
"url": "https://api.assistable.ai/mcp",
"disabled": false
}
}
}VS Code
{
"servers": {
"assistable-mcp": {
"type": "http",
"url": "https://api.assistable.ai/mcp"
}
}
}Gemini CLI
gemini mcp add --transport http assistable-mcp https://api.assistable.ai/mcpClaude Desktop
{
"mcpServers": {
"assistable-mcp": {
"url": "https://api.assistable.ai/mcp"
}
}
}Windsurf
{
"mcpServers": {
"assistable-mcp": {
"serverUrl": "https://api.assistable.ai/mcp"
}
}
}Let your agent find its tools
Find servers like Assistable MCP from your agent. Add Koskamo once to search the index for endpoints, access requirements, and client setup. Public discovery needs no key.
Other crm, sales, and marketing servers
Do you run Assistable MCP?
Prove ownership with a DNS record, a well-known file, or your Official MCP Registry entry, and your edits publish immediately. Proofs are re-checked weekly; admins can still hide or remove a listing.