# Assistable

> Give any AI agent a phone: make and answer calls, get through phone menus, and send texts.

- name: ai.assistable/assistable
- version: 1.0.0
- connection class: R0 (autonomous)
- trust: 83/100 flags: no-repository
- quality: 80/100 (good)
- owner: not claimed
- descriptor: https://api.protogrid.dev/v1/servers/ai.assistable%2Fassistable
- tools: https://api.protogrid.dev/v1/servers/ai.assistable%2Fassistable/tools

**An agent can connect right now, no human step.** Remote endpoint, no authentication, reachable on the last probe.

## Connection (mcpServers)

```json
{
  "mcpServers": {
    "assistable": {
      "type": "http",
      "url": "https://api.assistable.ai/mcp",
      "headers": {
        "Authorization": "Bearer ${ASSISTABLE_TOKEN}"
      }
    }
  }
}
```

Placeholders to fill: `${ASSISTABLE_TOKEN}`.

## Trust

- hygiene: 80
- liveness: 100
- freshness: 100
- provenance: 55
- drivers: +dns-namespace +website +reachable +uptime-100% +updated-10d-ago -no-repository
- Derived from observable signals (official registry feed and our own credential-free probes); no code audit performed.

## Quality 80/100 (good)

### protocol: 75 (weight 25)

- warn `protocol.modern`: newest supported version is 2025-11-25; 2026-07-28 not supported, older versions are deprecated until 2027-07-28
- n/a `protocol.stateless`: only applies to 2026-07-28 servers
- pass `protocol.transport`: streamable HTTP
- n/a `protocol.list_ttl`: only applies to 2026-07-28 servers

### authorization: n/a (weight 15)

- n/a `auth.prm`, `auth.as_metadata`, `auth.cimd`: no remote uses OAuth
- n/a `auth.secret_in_url`: no templated URL

### tool hygiene: 86 (weight 30)

- pass `tools.descriptions`: every tool has a description
- pass `tools.description_length`: descriptions are concise
- pass `tools.schemas`: every tool has an object input schema
- pass `tools.annotations`: 16 of 16 tools declare readOnlyHint or destructiveHint
- fail `tools.directory_hints`: no tool declares all four of readOnlyHint, destructiveHint, idempotentHint and openWorldHint; missing: assistants_create (idempotentHint, openWorldHint); tools_list (destructiveHint, idempotentHint); calls_get (destructiveHint, idempotentHint); …
- pass `tools.token_cost`: about 2,844 tokens to load every tool
- pass `tools.api_dump`: tools are not a one-to-one API dump

### stability: 75 (weight 15)

- warn `stability.changes`: 6 tool changes in 30 days
- pass `stability.rug_pull`: no tool changed its meaning under the same name

### dependencies: n/a (weight 15)

- n/a `deps.known_vulns`, `deps.mcp_sdk_version`, `deps.resolvable`: no npm or PyPI package

- tools: 16, about 2,844 tokens to load them all
- tool set hash: bec50ccbeb6c8efb175a7669e7cf3da1
- tools last changed: 2026-10-30T06:14:32.606Z
- badge: [![protogrid quality](https://protogrid.dev/badge/ai.assistable/assistable.svg)](https://protogrid.dev/servers/ai.assistable/assistable)
- Checks run on what our credential-free, read-only probes observe; tools are never called and no code audit is performed.

### Tool changes

- 2026-10-30 `assistable_connect` removed
  - 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.
- 2026-10-30 `assistable_connect_finish` removed
  - 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.
- 2026-10-29 `assistable_signup_finish` removed
  - Finish assistable_signup with signup_id, the code the person read to you, and a strong password you generate and keep in your vault (it is their dashboard login). Returns api_key once: send it as the Authorization: Bearer header to this MCP server. Calls and texts answer card_required until the person opens card_url, which saves their card, adds starting credit and buys their local number; send them that link.
- 2026-10-29 `assistable_signup` removed
  - Only when the person has no Assistable account (assistable_connect is for people who have one): start one with their email and name, and area_code or city/state for their local number. Emails them a 6-digit code; ask them for it, then call assistable_signup_finish. If they say the email told them they already have an account, use assistable_connect instead.
- 2026-10-29 `assistable_signup_finish` added
  - Finish assistable_signup with signup_id, the code the person read to you, and a strong password you generate and keep in your vault (it is their dashboard login). Returns api_key once: send it as the Authorization: Bearer header to this MCP server. Calls and texts answer card_required until the person opens card_url, which saves their card, adds starting credit and buys their local number; send them that link.
- 2026-10-29 `assistable_signup` added
  - Only when the person has no Assistable account (assistable_connect is for people who have one): start one with their email and name, and area_code or city/state for their local number. Emails them a 6-digit code; ask them for it, then call assistable_signup_finish. If they say the email told them they already have an account, use assistable_connect instead.

Full history: https://api.protogrid.dev/v1/servers/ai.assistable%2Fassistable/changes

## Remotes

- https://api.assistable.ai/mcp (streamable-http, auth none, reachable true, uptime30d 1)

## Packages

_none_

## Tools (16)

- `appointments_list`: List appointments in a subaccount within an optional date range.
- `assistants_archive`: Archive (soft-delete) an assistant.
- `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).
- `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).
- `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.
- `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).
- `calls_get`: Fetch a call (status, recording, transcript) by ID.
- `contacts_get`: Fetch a contact by ID.
- `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.
- `conversations_list`: List conversations in a subaccount.
- `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.
- `tools_create_custom`: Create a custom tool (toolType=CUSTOM). Name must match /^[a-zA-Z0-9_-]+$/ and be unique in the subaccount.
- `tools_delete`: Soft-delete a custom tool.
- `tools_get`: Fetch a tool's full configuration.
- `tools_list`: List tools visible to a subaccount. Pass includePrebuilt=false for only custom tools.
- `tools_update`: Patch a custom tool. Supplying parameters/headers replaces those rows; omit to leave them.
