> ## Documentation Index
> Fetch the complete documentation index at: https://docs.stateset.com/llms.txt
> Use this file to discover all available pages before exploring further.

# Voice MCP Server

> Drive the voice platform from Claude — agents, phone routing, knowledge, calls, and call logs as MCP tools.

# Voice MCP Server

A thin **stdio** MCP server wrapping the versioned voice REST API (`/api/v1/...`) with a single
tenant **API key** as a Bearer token. It holds no state and adds no surface to the voice server
itself, so it stays in lockstep with the REST API.

**24 tools.**

## Connect

```json theme={null}
{
  "mcpServers": {
    "stateset-voice": {
      "command": "node",
      "args": ["/absolute/path/to/rust-phone-server/mcp-server/dist/index.js"],
      "env": {
        "STATESET_VOICE_BASE_URL": "https://api.voice.stateset.com",
        "STATESET_VOICE_API_KEY": "YOUR_TENANT_API_KEY"
      }
    }
  }
}
```

Or with Claude Code, `claude mcp add`.

## Tools

### Account and agents

| Tool           | Maps to                                                            |
| -------------- | ------------------------------------------------------------------ |
| `get_account`  | `GET /voice/account`                                               |
| `list_agents`  | `GET /voice/agents`                                                |
| `get_agent`    | `GET /voice/agents/{uuid}`                                         |
| `create_agent` | `POST /voice/agents` — `agent_key`, `name`, `config`, `publish`    |
| `update_agent` | `PATCH /voice/agents/{uuid}` — creates a new version from `config` |

### Phone-number routing

| Tool                  | Maps to                                                               |
| --------------------- | --------------------------------------------------------------------- |
| `list_phone_numbers`  | `GET /voice/phone-numbers`                                            |
| `upsert_phone_number` | `POST /voice/phone-numbers` — `phone_number`, `direction`, `agent_id` |
| `delete_phone_number` | `DELETE /voice/phone-numbers/{uuid}`                                  |

### Knowledge base

| Tool                      | Maps to                                                           |
| ------------------------- | ----------------------------------------------------------------- |
| `search_knowledge`        | `POST /voice/knowledge/search` — `query`, `limit`                 |
| `list_knowledge_sources`  | `GET /voice/knowledge/sources`                                    |
| `upsert_knowledge_source` | `POST /voice/knowledge/sources` — `id`, `answer`, `match_phrases` |
| `delete_knowledge_source` | `DELETE /voice/knowledge/sources/{id}`                            |

### Webhooks and API keys

| Tool                      | Maps to                                                |
| ------------------------- | ------------------------------------------------------ |
| `list_webhook_endpoints`  | `GET /webhooks/endpoints`                              |
| `upsert_webhook_endpoint` | `POST /webhooks/endpoints` — `url`, `secret`, `events` |
| `list_api_keys`           | `GET /api-keys`                                        |
| `create_api_key`          | `POST /api-keys`                                       |
| `revoke_api_key`          | `DELETE /api-keys/{uuid}`                              |

### Calls

| Tool                    | Maps to                                                                     |
| ----------------------- | --------------------------------------------------------------------------- |
| `create_realtime_token` | `POST /voice/realtime/token` — short-lived observer token                   |
| `create_web_call`       | `POST /voice/web-calls` — signed WS URL plus start message, no phone number |
| `make_call`             | `POST /make-call`                                                           |

<Warning>
  Two tools have real-world consequences, so scope the key you give an agent accordingly:

  * **`make_call` places an actual outbound PSTN call.** DNC and TCPA gates apply, but the call is
    real and billable.
  * **`create_api_key` mints a tenant credential**, returned once. An agent holding this can issue
    further credentials.
</Warning>

## Related

* [Voice API](/stateset-voice/api)
* [Webhooks](/stateset-voice/webhooks)
* [Configuration](/stateset-voice/configuration)
