elevenlabs-agents-mcp-server
README.md
# elevenlabs-agents-mcp-server
MCP server that lets Claude place outbound telephone calls via ElevenLabs Agents (Conversational AI) over a SIP trunk (e.g. Vonage) and report the outcome — status, success evaluation, summary, extracted data, and full transcript.
## Tools
| Tool | Purpose |
|---|---|
| `elevenlabs_list_agents` | Discover agent IDs |
| `elevenlabs_list_phone_numbers` | Discover SIP trunk phone number IDs |
| `elevenlabs_make_outbound_call` | Place a call (returns `conversation_id` immediately) |
| `elevenlabs_wait_for_call_completion` | Poll until the call ends, then return the outcome report |
| `elevenlabs_get_call_report` | Compact outcome report (status, `call_successful`, summary, data collection, cost, termination reason) |
| `elevenlabs_get_call_transcript` | Turn-by-turn transcript with pagination |
| `elevenlabs_list_calls` | Recent calls with filters (agent, outcome, time window) |
Typical flow: `list_agents` → `list_phone_numbers` → `make_outbound_call` → `wait_for_call_completion` → (optionally) `get_call_transcript`.
## Setup
```bash
npm install
npm run build
```
### Claude Desktop / Claude Code config
```json
{
"mcpServers": {
"elevenlabs-agents": {
"command": "node",
"args": ["/absolute/path/to/elevenlabs-agents-mcp-server/dist/index.js"],
"env": {
"ELEVENLABS_API_KEY": "sk_..."
}
}
}
}
```
Claude Code: `claude mcp add elevenlabs-agents -e ELEVENLABS_API_KEY=sk_... -- node /path/to/dist/index.js`
## Vonage SIP trunk prerequisites (one-time, in dashboards — not via this server)
1. **Vonage**: create a SIP trunk / programmable SIP domain. For outbound-from-ElevenLabs you need a termination endpoint (hostname) that accepts SIP INVITEs from ElevenLabs, with digest auth credentials. Allow signaling from `sip.rtc.elevenlabs.io` (or your region's static SIP endpoint).
2. **ElevenLabs → Phone Numbers → Import from SIP trunk**: enter your Vonage number (E.164), outbound address (Vonage termination hostname), transport (TLS recommended), and SIP credentials.
3. Assign or note the agent; the imported number's `phone_number_id` is what `elevenlabs_make_outbound_call` uses as `agent_phone_number_id`.
4. Analysis fields (`call_successful`, summary, data collection) require evaluation criteria / data collection configured on the agent.
## Environment variables
- `ELEVENLABS_API_KEY` (required)
- `ELEVENLABS_API_BASE_URL` (optional, default `https://api.elevenlabs.io`; use residency endpoints if applicable)
## Notes
- `make_outbound_call` is asynchronous — the API returns as soon as the call is initiated. Post-call analysis is only available once status is `done` (there is a short `processing` window after hang-up).
- `wait_for_call_completion` caps at 900 s per invocation and tells you if it timed out so you can call it again.
- Dynamic variables passed to `make_outbound_call` are available in the agent's prompt as `{{variable_name}}`.
TDQS
A4.4/5.0
Scored across 7 tools
Disambiguation5/5
Each tool has a unique, well-defined purpose: call reports, transcripts, agent listing, call listing, phone number listing, making calls, and waiting for completion. No overlap in functionality.
Naming Consistency5/5
All tools follow the 'elevenlabs_verb_noun' pattern with snake_case, e.g., elevenlabs_get_call_report, elevenlabs_list_agents. Perfectly consistent.
Tool Count5/5
Seven tools is a tight set covering listing, call initiation, and post-call retrieval. No redundant tools, and scope is well-defined for an outbound call management server.
Completeness4/5
The workflow is complete: discover agents/numbers, place call, wait, get results. Minor gaps like no tool to create or update agents/numbers, but those may be out of scope.
Maintenance
ActivityStale
ResponsivenessNo issues