elevenlabs-voice-agent-mcp 1.0.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/LICENSE +21 -0
- package/README.md +533 -0
- package/dist/constants.d.ts +25 -0
- package/dist/constants.d.ts.map +1 -0
- package/dist/constants.js +51 -0
- package/dist/constants.js.map +1 -0
- package/dist/index.d.ts +8 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +93 -0
- package/dist/index.js.map +1 -0
- package/dist/schemas/agent-schemas.d.ts +147 -0
- package/dist/schemas/agent-schemas.d.ts.map +1 -0
- package/dist/schemas/agent-schemas.js +145 -0
- package/dist/schemas/agent-schemas.js.map +1 -0
- package/dist/schemas/batch-calling-schemas.d.ts +170 -0
- package/dist/schemas/batch-calling-schemas.d.ts.map +1 -0
- package/dist/schemas/batch-calling-schemas.js +77 -0
- package/dist/schemas/batch-calling-schemas.js.map +1 -0
- package/dist/schemas/common-schemas.d.ts +54 -0
- package/dist/schemas/common-schemas.d.ts.map +1 -0
- package/dist/schemas/common-schemas.js +72 -0
- package/dist/schemas/common-schemas.js.map +1 -0
- package/dist/schemas/conversation-schemas.d.ts +72 -0
- package/dist/schemas/conversation-schemas.d.ts.map +1 -0
- package/dist/schemas/conversation-schemas.js +30 -0
- package/dist/schemas/conversation-schemas.js.map +1 -0
- package/dist/schemas/outbound-schemas.d.ts +115 -0
- package/dist/schemas/outbound-schemas.d.ts.map +1 -0
- package/dist/schemas/outbound-schemas.js +61 -0
- package/dist/schemas/outbound-schemas.js.map +1 -0
- package/dist/schemas/phone-number-schemas.d.ts +168 -0
- package/dist/schemas/phone-number-schemas.d.ts.map +1 -0
- package/dist/schemas/phone-number-schemas.js +116 -0
- package/dist/schemas/phone-number-schemas.js.map +1 -0
- package/dist/schemas/tool-schemas.d.ts +208 -0
- package/dist/schemas/tool-schemas.d.ts.map +1 -0
- package/dist/schemas/tool-schemas.js +131 -0
- package/dist/schemas/tool-schemas.js.map +1 -0
- package/dist/services/elevenlabs-api.d.ts +37 -0
- package/dist/services/elevenlabs-api.d.ts.map +1 -0
- package/dist/services/elevenlabs-api.js +78 -0
- package/dist/services/elevenlabs-api.js.map +1 -0
- package/dist/services/formatters.d.ts +76 -0
- package/dist/services/formatters.d.ts.map +1 -0
- package/dist/services/formatters.js +475 -0
- package/dist/services/formatters.js.map +1 -0
- package/dist/tools/agent-tools.d.ts +228 -0
- package/dist/tools/agent-tools.d.ts.map +1 -0
- package/dist/tools/agent-tools.js +369 -0
- package/dist/tools/agent-tools.js.map +1 -0
- package/dist/tools/batch-calling-tools.d.ts +183 -0
- package/dist/tools/batch-calling-tools.d.ts.map +1 -0
- package/dist/tools/batch-calling-tools.js +203 -0
- package/dist/tools/batch-calling-tools.js.map +1 -0
- package/dist/tools/conversation-tools.d.ts +103 -0
- package/dist/tools/conversation-tools.d.ts.map +1 -0
- package/dist/tools/conversation-tools.js +140 -0
- package/dist/tools/conversation-tools.js.map +1 -0
- package/dist/tools/knowledge-tools.d.ts +75 -0
- package/dist/tools/knowledge-tools.d.ts.map +1 -0
- package/dist/tools/knowledge-tools.js +63 -0
- package/dist/tools/knowledge-tools.js.map +1 -0
- package/dist/tools/outbound-tools.d.ts +44 -0
- package/dist/tools/outbound-tools.d.ts.map +1 -0
- package/dist/tools/outbound-tools.js +84 -0
- package/dist/tools/outbound-tools.js.map +1 -0
- package/dist/tools/phone-number-tools.d.ts +215 -0
- package/dist/tools/phone-number-tools.d.ts.map +1 -0
- package/dist/tools/phone-number-tools.js +295 -0
- package/dist/tools/phone-number-tools.js.map +1 -0
- package/dist/tools/tool-tools.d.ts +165 -0
- package/dist/tools/tool-tools.d.ts.map +1 -0
- package/dist/tools/tool-tools.js +166 -0
- package/dist/tools/tool-tools.js.map +1 -0
- package/dist/tools/utility-tools.d.ts +76 -0
- package/dist/tools/utility-tools.d.ts.map +1 -0
- package/dist/tools/utility-tools.js +121 -0
- package/dist/tools/utility-tools.js.map +1 -0
- package/dist/types.d.ts +282 -0
- package/dist/types.d.ts.map +1 -0
- package/dist/types.js +12 -0
- package/dist/types.js.map +1 -0
- package/dist/utils/error-handlers.d.ts +29 -0
- package/dist/utils/error-handlers.d.ts.map +1 -0
- package/dist/utils/error-handlers.js +90 -0
- package/dist/utils/error-handlers.js.map +1 -0
- package/dist/utils/truncation.d.ts +41 -0
- package/dist/utils/truncation.d.ts.map +1 -0
- package/dist/utils/truncation.js +78 -0
- package/dist/utils/truncation.js.map +1 -0
- package/package.json +61 -0
package/LICENSE
ADDED
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
MIT License
|
|
2
|
+
|
|
3
|
+
Copyright (c) 2025 Griffin Long
|
|
4
|
+
|
|
5
|
+
Permission is hereby granted, free of charge, to any person obtaining a copy
|
|
6
|
+
of this software and associated documentation files (the "Software"), to deal
|
|
7
|
+
in the Software without restriction, including without limitation the rights
|
|
8
|
+
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
|
9
|
+
copies of the Software, and to permit persons to whom the Software is
|
|
10
|
+
furnished to do so, subject to the following conditions:
|
|
11
|
+
|
|
12
|
+
The above copyright notice and this permission notice shall be included in all
|
|
13
|
+
copies or substantial portions of the Software.
|
|
14
|
+
|
|
15
|
+
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
|
16
|
+
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
|
17
|
+
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
|
18
|
+
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
|
19
|
+
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
|
20
|
+
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
|
21
|
+
SOFTWARE.
|
package/README.md
ADDED
|
@@ -0,0 +1,533 @@
|
|
|
1
|
+
# ElevenLabs Voice Agent MCP Server
|
|
2
|
+
|
|
3
|
+
A Model Context Protocol (MCP) server for developing and managing ElevenLabs Voice Agents. This server provides 23 specialized tools for creating, configuring, testing, monitoring, and deploying voice agents through Claude and other MCP clients.
|
|
4
|
+
|
|
5
|
+
## Features
|
|
6
|
+
|
|
7
|
+
### Core Agent Management (Tier 1)
|
|
8
|
+
- **elevenlabs_create_agent** - Create new voice agents with full configuration
|
|
9
|
+
- **elevenlabs_get_agent** - Retrieve agent details and configuration
|
|
10
|
+
- **elevenlabs_update_agent** - Modify existing agent settings
|
|
11
|
+
- **elevenlabs_delete_agent** - Permanently remove agents
|
|
12
|
+
- **elevenlabs_list_agents** - Browse all agents with pagination
|
|
13
|
+
|
|
14
|
+
### Knowledge Base & Tools (Tier 2)
|
|
15
|
+
- **elevenlabs_add_knowledge_base** - Add documents or URLs to agent knowledge
|
|
16
|
+
- **elevenlabs_create_webhook_tool** - Create webhook integrations for agents
|
|
17
|
+
- **elevenlabs_list_tools** - View all tools configured for an agent
|
|
18
|
+
- **elevenlabs_delete_tool** - Remove tools from agents
|
|
19
|
+
|
|
20
|
+
### Testing & Monitoring (Tier 3)
|
|
21
|
+
- **elevenlabs_get_conversation** - Retrieve conversation transcripts and analysis
|
|
22
|
+
- **elevenlabs_list_conversations** - Browse conversations with filtering
|
|
23
|
+
- **elevenlabs_generate_widget_code** - Generate HTML embed code for testing
|
|
24
|
+
|
|
25
|
+
### Utilities (Tier 4)
|
|
26
|
+
- **elevenlabs_list_voices** - Browse available voices with filtering
|
|
27
|
+
|
|
28
|
+
### Outbound Calling & Phone Management (Tier 5)
|
|
29
|
+
- **elevenlabs_start_outbound_call** - Initiate single outbound calls via Twilio
|
|
30
|
+
- **elevenlabs_submit_batch_call** - Submit batch calling jobs for multiple recipients
|
|
31
|
+
- **elevenlabs_list_batch_calls** - Browse all batch calling jobs
|
|
32
|
+
- **elevenlabs_get_batch_call** - Get detailed batch call status with recipient info
|
|
33
|
+
- **elevenlabs_list_phone_numbers** - List all connected phone numbers
|
|
34
|
+
- **elevenlabs_get_phone_number** - Get phone number details and configuration
|
|
35
|
+
- **elevenlabs_import_phone_number** - Import Twilio phone numbers
|
|
36
|
+
- **elevenlabs_update_phone_number** - Update phone number settings (assign agents)
|
|
37
|
+
- **elevenlabs_delete_phone_number** - Remove phone numbers from workspace
|
|
38
|
+
|
|
39
|
+
## Installation
|
|
40
|
+
|
|
41
|
+
### Prerequisites
|
|
42
|
+
- Node.js 18 or higher
|
|
43
|
+
- ElevenLabs API key ([Get one here](https://elevenlabs.io))
|
|
44
|
+
|
|
45
|
+
### Option 1: Install from npm (Recommended)
|
|
46
|
+
|
|
47
|
+
```bash
|
|
48
|
+
npm install -g elevenlabs-voice-agent-mcp
|
|
49
|
+
```
|
|
50
|
+
|
|
51
|
+
### Option 2: Install from source
|
|
52
|
+
|
|
53
|
+
1. **Clone the repository:**
|
|
54
|
+
```bash
|
|
55
|
+
git clone https://github.com/griffinwork40/elevenlabs-voice-agent-mcp.git
|
|
56
|
+
cd elevenlabs-voice-agent-mcp
|
|
57
|
+
```
|
|
58
|
+
|
|
59
|
+
2. **Install dependencies:**
|
|
60
|
+
```bash
|
|
61
|
+
npm install
|
|
62
|
+
```
|
|
63
|
+
|
|
64
|
+
3. **Build the project:**
|
|
65
|
+
```bash
|
|
66
|
+
npm run build
|
|
67
|
+
```
|
|
68
|
+
|
|
69
|
+
## Configuration
|
|
70
|
+
|
|
71
|
+
### Environment Variables
|
|
72
|
+
|
|
73
|
+
Create a `.env` file in the project root:
|
|
74
|
+
|
|
75
|
+
```bash
|
|
76
|
+
ELEVENLABS_API_KEY=your_elevenlabs_api_key_here
|
|
77
|
+
```
|
|
78
|
+
|
|
79
|
+
Get your API key from [ElevenLabs Settings](https://elevenlabs.io/app/settings/api-keys).
|
|
80
|
+
|
|
81
|
+
### Claude Desktop Configuration
|
|
82
|
+
|
|
83
|
+
Add this to your Claude Desktop configuration file:
|
|
84
|
+
|
|
85
|
+
**macOS**: `~/Library/Application Support/Claude/claude_desktop_config.json`
|
|
86
|
+
**Windows**: `%APPDATA%\Claude\claude_desktop_config.json`
|
|
87
|
+
|
|
88
|
+
#### If installed via npm:
|
|
89
|
+
|
|
90
|
+
```json
|
|
91
|
+
{
|
|
92
|
+
"mcpServers": {
|
|
93
|
+
"elevenlabs-voice-agents": {
|
|
94
|
+
"command": "npx",
|
|
95
|
+
"args": [
|
|
96
|
+
"elevenlabs-voice-agent-mcp"
|
|
97
|
+
],
|
|
98
|
+
"env": {
|
|
99
|
+
"ELEVENLABS_API_KEY": "your_elevenlabs_api_key_here"
|
|
100
|
+
}
|
|
101
|
+
}
|
|
102
|
+
}
|
|
103
|
+
}
|
|
104
|
+
```
|
|
105
|
+
|
|
106
|
+
#### If installed from source:
|
|
107
|
+
|
|
108
|
+
```json
|
|
109
|
+
{
|
|
110
|
+
"mcpServers": {
|
|
111
|
+
"elevenlabs-voice-agents": {
|
|
112
|
+
"command": "node",
|
|
113
|
+
"args": [
|
|
114
|
+
"/absolute/path/to/elevenlabs-voice-agent-mcp/dist/index.js"
|
|
115
|
+
],
|
|
116
|
+
"env": {
|
|
117
|
+
"ELEVENLABS_API_KEY": "your_elevenlabs_api_key_here"
|
|
118
|
+
}
|
|
119
|
+
}
|
|
120
|
+
}
|
|
121
|
+
}
|
|
122
|
+
```
|
|
123
|
+
|
|
124
|
+
After adding the configuration:
|
|
125
|
+
1. Save the file
|
|
126
|
+
2. Restart Claude Desktop
|
|
127
|
+
3. Look for the 🔌 icon to verify the server is connected
|
|
128
|
+
|
|
129
|
+
## Quick Start: Outbound Calling
|
|
130
|
+
|
|
131
|
+
### 1. Import a Twilio Phone Number
|
|
132
|
+
|
|
133
|
+
```typescript
|
|
134
|
+
elevenlabs_import_phone_number({
|
|
135
|
+
phone_number: "+14155551234",
|
|
136
|
+
label: "Sales Line",
|
|
137
|
+
sid: "ACxxxxxxxxxxxxxxxxxxxxxxxxxxxx", // Your Twilio Account SID
|
|
138
|
+
token: "your_twilio_auth_token",
|
|
139
|
+
provider: "twilio",
|
|
140
|
+
supports_inbound: true,
|
|
141
|
+
supports_outbound: true
|
|
142
|
+
})
|
|
143
|
+
// Returns: { phone_number_id: "pn_abc123" }
|
|
144
|
+
```
|
|
145
|
+
|
|
146
|
+
### 2. Assign Phone Number to Agent
|
|
147
|
+
|
|
148
|
+
```typescript
|
|
149
|
+
elevenlabs_update_phone_number({
|
|
150
|
+
phone_number_id: "pn_abc123",
|
|
151
|
+
agent_id: "ag_xyz789"
|
|
152
|
+
})
|
|
153
|
+
```
|
|
154
|
+
|
|
155
|
+
### 3. Make a Single Outbound Call
|
|
156
|
+
|
|
157
|
+
```typescript
|
|
158
|
+
elevenlabs_start_outbound_call({
|
|
159
|
+
agent_id: "ag_xyz789",
|
|
160
|
+
agent_phone_number_id: "pn_abc123",
|
|
161
|
+
to_number: "+19175551234",
|
|
162
|
+
conversation_initiation_client_data: {
|
|
163
|
+
dynamic_variables: {
|
|
164
|
+
customer_name: "John Smith",
|
|
165
|
+
account_balance: 1500
|
|
166
|
+
}
|
|
167
|
+
}
|
|
168
|
+
})
|
|
169
|
+
```
|
|
170
|
+
|
|
171
|
+
### 4. Submit a Batch Calling Job
|
|
172
|
+
|
|
173
|
+
```typescript
|
|
174
|
+
elevenlabs_submit_batch_call({
|
|
175
|
+
call_name: "Q4 Customer Survey",
|
|
176
|
+
agent_id: "ag_xyz789",
|
|
177
|
+
agent_phone_number_id: "pn_abc123",
|
|
178
|
+
recipients: [
|
|
179
|
+
{
|
|
180
|
+
phone_number: "+14155551234",
|
|
181
|
+
conversation_initiation_client_data: {
|
|
182
|
+
dynamic_variables: {
|
|
183
|
+
name: "Alice Johnson",
|
|
184
|
+
account_id: "A123"
|
|
185
|
+
}
|
|
186
|
+
}
|
|
187
|
+
},
|
|
188
|
+
{
|
|
189
|
+
phone_number: "+19175555678",
|
|
190
|
+
conversation_initiation_client_data: {
|
|
191
|
+
dynamic_variables: {
|
|
192
|
+
name: "Bob Williams",
|
|
193
|
+
account_id: "B456"
|
|
194
|
+
}
|
|
195
|
+
}
|
|
196
|
+
}
|
|
197
|
+
]
|
|
198
|
+
})
|
|
199
|
+
```
|
|
200
|
+
|
|
201
|
+
### 5. Monitor Batch Progress
|
|
202
|
+
|
|
203
|
+
```typescript
|
|
204
|
+
elevenlabs_get_batch_call({
|
|
205
|
+
batch_id: "batch_abc123"
|
|
206
|
+
})
|
|
207
|
+
// Shows status for each recipient: completed, in_progress, failed, voicemail, etc.
|
|
208
|
+
```
|
|
209
|
+
|
|
210
|
+
## Usage
|
|
211
|
+
|
|
212
|
+
### Creating a Voice Agent
|
|
213
|
+
|
|
214
|
+
```typescript
|
|
215
|
+
// Create a basic customer service agent
|
|
216
|
+
elevenlabs_create_agent({
|
|
217
|
+
name: "Customer Support Bot",
|
|
218
|
+
prompt: "You are a helpful customer service agent for TechCorp. Be friendly, professional, and solve customer issues efficiently.",
|
|
219
|
+
llm: "gpt-4o-mini",
|
|
220
|
+
voice_id: "21m00Tcm4TlvDq8ikWAM",
|
|
221
|
+
first_message: "Hi! How can I help you today?",
|
|
222
|
+
language: "en"
|
|
223
|
+
})
|
|
224
|
+
```
|
|
225
|
+
|
|
226
|
+
### Adding Knowledge Base
|
|
227
|
+
|
|
228
|
+
```typescript
|
|
229
|
+
// Add company documentation
|
|
230
|
+
elevenlabs_add_knowledge_base({
|
|
231
|
+
agent_id: "ag_abc123",
|
|
232
|
+
documents: [
|
|
233
|
+
{
|
|
234
|
+
type: "url",
|
|
235
|
+
content: "https://example.com/company-policies"
|
|
236
|
+
},
|
|
237
|
+
{
|
|
238
|
+
type: "text",
|
|
239
|
+
content: "Our support hours are Monday-Friday, 9 AM to 6 PM EST."
|
|
240
|
+
}
|
|
241
|
+
]
|
|
242
|
+
})
|
|
243
|
+
```
|
|
244
|
+
|
|
245
|
+
### Creating Webhook Tools
|
|
246
|
+
|
|
247
|
+
```typescript
|
|
248
|
+
// Add order status checking capability
|
|
249
|
+
elevenlabs_create_webhook_tool({
|
|
250
|
+
agent_id: "ag_abc123",
|
|
251
|
+
name: "check_order_status",
|
|
252
|
+
description: "Check the status of a customer order by order ID",
|
|
253
|
+
url: "https://api.example.com/orders/status",
|
|
254
|
+
method: "POST",
|
|
255
|
+
parameters: [
|
|
256
|
+
{
|
|
257
|
+
name: "order_id",
|
|
258
|
+
type: "string",
|
|
259
|
+
description: "The unique order identifier",
|
|
260
|
+
required: true
|
|
261
|
+
}
|
|
262
|
+
]
|
|
263
|
+
})
|
|
264
|
+
```
|
|
265
|
+
|
|
266
|
+
### Testing Your Agent
|
|
267
|
+
|
|
268
|
+
```typescript
|
|
269
|
+
// Generate widget code for testing
|
|
270
|
+
elevenlabs_generate_widget_code({
|
|
271
|
+
agent_id: "ag_abc123",
|
|
272
|
+
color: "#4A90E2",
|
|
273
|
+
avatar_url: "https://example.com/avatar.png"
|
|
274
|
+
})
|
|
275
|
+
```
|
|
276
|
+
|
|
277
|
+
### Monitoring Conversations
|
|
278
|
+
|
|
279
|
+
```typescript
|
|
280
|
+
// List recent conversations
|
|
281
|
+
elevenlabs_list_conversations({
|
|
282
|
+
agent_id: "ag_abc123",
|
|
283
|
+
limit: 10,
|
|
284
|
+
status: "completed"
|
|
285
|
+
})
|
|
286
|
+
|
|
287
|
+
// Get full transcript
|
|
288
|
+
elevenlabs_get_conversation({
|
|
289
|
+
conversation_id: "conv_xyz789"
|
|
290
|
+
})
|
|
291
|
+
```
|
|
292
|
+
|
|
293
|
+
## Tool Details
|
|
294
|
+
|
|
295
|
+
### Response Formats
|
|
296
|
+
|
|
297
|
+
All tools support two response formats:
|
|
298
|
+
|
|
299
|
+
- **markdown** (default) - Human-readable formatted output
|
|
300
|
+
- **json** - Structured data for programmatic use
|
|
301
|
+
|
|
302
|
+
Example:
|
|
303
|
+
```typescript
|
|
304
|
+
elevenlabs_get_agent({
|
|
305
|
+
agent_id: "ag_abc123",
|
|
306
|
+
response_format: "json"
|
|
307
|
+
})
|
|
308
|
+
```
|
|
309
|
+
|
|
310
|
+
### Pagination
|
|
311
|
+
|
|
312
|
+
List endpoints support pagination:
|
|
313
|
+
|
|
314
|
+
```typescript
|
|
315
|
+
elevenlabs_list_agents({
|
|
316
|
+
limit: 20, // Items per page (1-100)
|
|
317
|
+
offset: 0 // Skip this many items
|
|
318
|
+
})
|
|
319
|
+
```
|
|
320
|
+
|
|
321
|
+
The response includes:
|
|
322
|
+
- `has_more` - Whether more items exist
|
|
323
|
+
- `next_offset` - Offset value for next page
|
|
324
|
+
- `total` - Total number of items
|
|
325
|
+
|
|
326
|
+
### Supported LLM Models
|
|
327
|
+
|
|
328
|
+
- `gpt-4o`
|
|
329
|
+
- `gpt-4o-mini` (default)
|
|
330
|
+
- `claude-3-5-sonnet-20241022`
|
|
331
|
+
- `claude-3-5-haiku-20241022`
|
|
332
|
+
- `gemini-2.0-flash-exp`
|
|
333
|
+
|
|
334
|
+
### Supported Voice Models
|
|
335
|
+
|
|
336
|
+
- `eleven_turbo_v2_5` - Fastest, lowest latency
|
|
337
|
+
- `eleven_flash_v2_5` (default) - Balanced speed and quality
|
|
338
|
+
- `eleven_multilingual_v2` - Best for multiple languages
|
|
339
|
+
|
|
340
|
+
### Supported Languages
|
|
341
|
+
|
|
342
|
+
`en`, `es`, `fr`, `de`, `it`, `pt`, `pl`, `nl`, `ja`, `zh`, `ko`, `ar`, `hi`
|
|
343
|
+
|
|
344
|
+
## Development
|
|
345
|
+
|
|
346
|
+
### Project Structure
|
|
347
|
+
|
|
348
|
+
```
|
|
349
|
+
elevenlabs-voice-agent-mcp/
|
|
350
|
+
├── src/
|
|
351
|
+
│ ├── index.ts # Server initialization
|
|
352
|
+
│ ├── types.ts # TypeScript interfaces
|
|
353
|
+
│ ├── constants.ts # API URLs and defaults
|
|
354
|
+
│ ├── schemas/ # Zod validation schemas
|
|
355
|
+
│ │ ├── agent-schemas.ts
|
|
356
|
+
│ │ ├── tool-schemas.ts
|
|
357
|
+
│ │ ├── conversation-schemas.ts
|
|
358
|
+
│ │ └── common-schemas.ts
|
|
359
|
+
│ ├── services/ # API clients and utilities
|
|
360
|
+
│ │ ├── elevenlabs-api.ts
|
|
361
|
+
│ │ └── formatters.ts
|
|
362
|
+
│ ├── tools/ # MCP tool implementations
|
|
363
|
+
│ │ ├── agent-tools.ts
|
|
364
|
+
│ │ ├── knowledge-tools.ts
|
|
365
|
+
│ │ ├── tool-tools.ts
|
|
366
|
+
│ │ ├── conversation-tools.ts
|
|
367
|
+
│ │ └── utility-tools.ts
|
|
368
|
+
│ └── utils/ # Helper functions
|
|
369
|
+
│ ├── error-handlers.ts
|
|
370
|
+
│ └── truncation.ts
|
|
371
|
+
└── dist/ # Compiled JavaScript
|
|
372
|
+
```
|
|
373
|
+
|
|
374
|
+
### Scripts
|
|
375
|
+
|
|
376
|
+
- `npm run build` - Compile TypeScript to JavaScript
|
|
377
|
+
- `npm run dev` - Run in watch mode with auto-reload
|
|
378
|
+
- `npm start` - Run the compiled server
|
|
379
|
+
- `npm run clean` - Remove build artifacts
|
|
380
|
+
|
|
381
|
+
### Adding New Tools
|
|
382
|
+
|
|
383
|
+
1. Create tool definition in appropriate file under `src/tools/`
|
|
384
|
+
2. Add Zod schema in `src/schemas/`
|
|
385
|
+
3. Register tool in `src/index.ts`
|
|
386
|
+
4. Rebuild with `npm run build`
|
|
387
|
+
|
|
388
|
+
## Error Handling
|
|
389
|
+
|
|
390
|
+
The server provides clear, actionable error messages:
|
|
391
|
+
|
|
392
|
+
- **401 Unauthorized** - Invalid API key, check `ELEVENLABS_API_KEY`
|
|
393
|
+
- **404 Not Found** - Agent/conversation ID doesn't exist
|
|
394
|
+
- **429 Rate Limited** - Too many requests, wait 60 seconds
|
|
395
|
+
- **400 Bad Request** - Invalid parameters, check tool documentation
|
|
396
|
+
|
|
397
|
+
## Character Limits
|
|
398
|
+
|
|
399
|
+
Responses are automatically truncated at 25,000 characters with guidance for pagination or filtering.
|
|
400
|
+
|
|
401
|
+
## Best Practices
|
|
402
|
+
|
|
403
|
+
### Agent Creation
|
|
404
|
+
- Write clear, specific system prompts
|
|
405
|
+
- Test different LLM models for your use case
|
|
406
|
+
- Use appropriate voice models (flash for speed, multilingual for languages)
|
|
407
|
+
- Set reasonable temperature values (0-0.7 for consistent, 0.8-2.0 for creative)
|
|
408
|
+
|
|
409
|
+
### Knowledge Base
|
|
410
|
+
- Add focused, relevant documents
|
|
411
|
+
- Use URLs for content that updates frequently
|
|
412
|
+
- Include metadata for better organization
|
|
413
|
+
- Keep documents concise and well-structured
|
|
414
|
+
|
|
415
|
+
### Webhook Tools
|
|
416
|
+
- Provide clear, descriptive tool names
|
|
417
|
+
- Write detailed parameter descriptions
|
|
418
|
+
- Test webhook endpoints before adding
|
|
419
|
+
- Handle errors gracefully in your webhook responses
|
|
420
|
+
|
|
421
|
+
### Testing
|
|
422
|
+
- Generate widget code for easy browser testing
|
|
423
|
+
- Review conversation transcripts regularly
|
|
424
|
+
- Monitor conversation analysis metrics
|
|
425
|
+
- Test with various user inputs and edge cases
|
|
426
|
+
|
|
427
|
+
## Troubleshooting
|
|
428
|
+
|
|
429
|
+
### Server won't start
|
|
430
|
+
- Verify `ELEVENLABS_API_KEY` is set in environment
|
|
431
|
+
- Check Node.js version (18+ required)
|
|
432
|
+
- Run `npm install` to ensure dependencies are installed
|
|
433
|
+
- Check for port conflicts if running multiple MCP servers
|
|
434
|
+
|
|
435
|
+
### Tools not appearing in Claude
|
|
436
|
+
- Verify server is registered in `claude_desktop_config.json`
|
|
437
|
+
- Use absolute paths in configuration
|
|
438
|
+
- Restart Claude Desktop after config changes
|
|
439
|
+
- Check Claude Desktop logs for errors
|
|
440
|
+
|
|
441
|
+
### API errors
|
|
442
|
+
- Verify API key is valid at [ElevenLabs Settings](https://elevenlabs.io/app/settings/api-keys)
|
|
443
|
+
- Check ElevenLabs account has required permissions
|
|
444
|
+
- Ensure you're not exceeding rate limits
|
|
445
|
+
- Verify agent/conversation IDs are correct
|
|
446
|
+
|
|
447
|
+
## Support
|
|
448
|
+
|
|
449
|
+
- **ElevenLabs Documentation**: https://elevenlabs.io/docs
|
|
450
|
+
- **MCP Documentation**: https://modelcontextprotocol.io
|
|
451
|
+
- **Issues**: Report bugs or request features via GitHub issues
|
|
452
|
+
|
|
453
|
+
## License
|
|
454
|
+
|
|
455
|
+
MIT
|
|
456
|
+
|
|
457
|
+
## Contributing
|
|
458
|
+
|
|
459
|
+
Contributions welcome! Please:
|
|
460
|
+
1. Fork the repository
|
|
461
|
+
2. Create a feature branch
|
|
462
|
+
3. Make your changes with tests
|
|
463
|
+
4. Submit a pull request
|
|
464
|
+
|
|
465
|
+
## Use Cases
|
|
466
|
+
|
|
467
|
+
### Customer Outreach
|
|
468
|
+
```typescript
|
|
469
|
+
// Import leads from CSV and call them all
|
|
470
|
+
elevenlabs_submit_batch_call({
|
|
471
|
+
call_name: "Lead Qualification Q1",
|
|
472
|
+
agent_id: "ag_sales",
|
|
473
|
+
recipients: [
|
|
474
|
+
{ phone_number: "+1...", conversation_initiation_client_data: { name: "...", company: "..." } },
|
|
475
|
+
// ... up to 10,000 recipients
|
|
476
|
+
]
|
|
477
|
+
})
|
|
478
|
+
```
|
|
479
|
+
|
|
480
|
+
### Appointment Reminders
|
|
481
|
+
```typescript
|
|
482
|
+
// Call customers with personalized reminders
|
|
483
|
+
elevenlabs_start_outbound_call({
|
|
484
|
+
agent_id: "ag_scheduler",
|
|
485
|
+
agent_phone_number_id: "pn_main",
|
|
486
|
+
to_number: "+14155551234",
|
|
487
|
+
conversation_initiation_client_data: {
|
|
488
|
+
dynamic_variables: {
|
|
489
|
+
patient_name: "Sarah",
|
|
490
|
+
appointment_time: "3:00 PM tomorrow",
|
|
491
|
+
doctor_name: "Dr. Smith"
|
|
492
|
+
}
|
|
493
|
+
}
|
|
494
|
+
})
|
|
495
|
+
```
|
|
496
|
+
|
|
497
|
+
### Survey & Feedback Collection
|
|
498
|
+
```typescript
|
|
499
|
+
// Batch call for post-purchase surveys
|
|
500
|
+
elevenlabs_submit_batch_call({
|
|
501
|
+
call_name: "Post-Purchase NPS Survey",
|
|
502
|
+
agent_id: "ag_survey",
|
|
503
|
+
recipients: recentCustomers.map(c => ({
|
|
504
|
+
phone_number: c.phone,
|
|
505
|
+
conversation_initiation_client_data: {
|
|
506
|
+
dynamic_variables: {
|
|
507
|
+
name: c.name,
|
|
508
|
+
product: c.lastPurchase,
|
|
509
|
+
order_id: c.orderId
|
|
510
|
+
}
|
|
511
|
+
}
|
|
512
|
+
}))
|
|
513
|
+
})
|
|
514
|
+
```
|
|
515
|
+
|
|
516
|
+
## Changelog
|
|
517
|
+
|
|
518
|
+
### v2.0.0 (2025-01-24)
|
|
519
|
+
- Added 9 new tools for outbound calling and phone management
|
|
520
|
+
- Outbound calling via Twilio integration
|
|
521
|
+
- Batch calling for mass outreach (up to 10,000 recipients)
|
|
522
|
+
- Phone number management (import, assign, configure)
|
|
523
|
+
- Support for dynamic variables and call personalization
|
|
524
|
+
- Voicemail detection in batch calling
|
|
525
|
+
- Total tools: 23 (up from 14)
|
|
526
|
+
|
|
527
|
+
### v1.0.0 (2025-01-20)
|
|
528
|
+
- Initial release
|
|
529
|
+
- 14 tools for voice agent development
|
|
530
|
+
- Comprehensive agent management
|
|
531
|
+
- Knowledge base and webhook tool support
|
|
532
|
+
- Conversation monitoring and analytics
|
|
533
|
+
- Widget generation for testing
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Constants for ElevenLabs Voice Agent MCP Server
|
|
3
|
+
*
|
|
4
|
+
* Contains API URLs, character limits, default values, and supported options
|
|
5
|
+
* for ElevenLabs Voice Agent API integration.
|
|
6
|
+
*/
|
|
7
|
+
export declare const API_BASE_URL = "https://api.elevenlabs.io/v1";
|
|
8
|
+
export declare const CHARACTER_LIMIT = 25000;
|
|
9
|
+
export declare const DEFAULT_LIMIT = 20;
|
|
10
|
+
export declare const MAX_LIMIT = 100;
|
|
11
|
+
export declare const DEFAULT_LLM = "gpt-4o-mini";
|
|
12
|
+
export declare const DEFAULT_VOICE_MODEL = "eleven_flash_v2_5";
|
|
13
|
+
export declare const DEFAULT_VOICE_ID = "21m00Tcm4TlvDq8ikWAM";
|
|
14
|
+
export declare const DEFAULT_LANGUAGE = "en";
|
|
15
|
+
export declare const SUPPORTED_LLMS: readonly ["gpt-4o", "gpt-4o-mini", "claude-3-5-sonnet-20241022", "claude-3-5-haiku-20241022", "gemini-2.0-flash-exp"];
|
|
16
|
+
export declare const SUPPORTED_VOICE_MODELS: readonly ["eleven_turbo_v2_5", "eleven_flash_v2_5", "eleven_multilingual_v2"];
|
|
17
|
+
export declare const SUPPORTED_LANGUAGES: readonly ["en", "es", "fr", "de", "it", "pt", "pl", "nl", "ja", "zh", "ko", "ar", "hi"];
|
|
18
|
+
export declare const AUTH_TYPES: readonly ["none", "manual", "open"];
|
|
19
|
+
export declare const REQUEST_TIMEOUT = 30000;
|
|
20
|
+
export declare const MAX_BATCH_RECIPIENTS = 10000;
|
|
21
|
+
export declare const MIN_BATCH_RECIPIENTS = 1;
|
|
22
|
+
export declare const PHONE_PROVIDERS: readonly ["twilio", "sip_trunk"];
|
|
23
|
+
export declare const REGION_IDS: readonly ["us1", "ie1", "au1"];
|
|
24
|
+
export declare const EDGE_LOCATIONS: readonly ["ashburn", "dublin", "frankfurt", "sao-paulo", "singapore", "sydney", "tokyo", "umatilla", "roaming"];
|
|
25
|
+
//# sourceMappingURL=constants.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"constants.d.ts","sourceRoot":"","sources":["../src/constants.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,eAAO,MAAM,YAAY,iCAAiC,CAAC;AAG3D,eAAO,MAAM,eAAe,QAAQ,CAAC;AACrC,eAAO,MAAM,aAAa,KAAK,CAAC;AAChC,eAAO,MAAM,SAAS,MAAM,CAAC;AAG7B,eAAO,MAAM,WAAW,gBAAgB,CAAC;AACzC,eAAO,MAAM,mBAAmB,sBAAsB,CAAC;AACvD,eAAO,MAAM,gBAAgB,yBAAyB,CAAC;AACvD,eAAO,MAAM,gBAAgB,OAAO,CAAC;AAGrC,eAAO,MAAM,cAAc,uHAMjB,CAAC;AAGX,eAAO,MAAM,sBAAsB,+EAIzB,CAAC;AAGX,eAAO,MAAM,mBAAmB,yFAEtB,CAAC;AAGX,eAAO,MAAM,UAAU,qCAAsC,CAAC;AAG9D,eAAO,MAAM,eAAe,QAAQ,CAAC;AAGrC,eAAO,MAAM,oBAAoB,QAAQ,CAAC;AAC1C,eAAO,MAAM,oBAAoB,IAAI,CAAC;AAGtC,eAAO,MAAM,eAAe,kCAAmC,CAAC;AAGhE,eAAO,MAAM,UAAU,gCAAiC,CAAC;AAGzD,eAAO,MAAM,cAAc,iHAGjB,CAAC"}
|
|
@@ -0,0 +1,51 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Constants for ElevenLabs Voice Agent MCP Server
|
|
3
|
+
*
|
|
4
|
+
* Contains API URLs, character limits, default values, and supported options
|
|
5
|
+
* for ElevenLabs Voice Agent API integration.
|
|
6
|
+
*/
|
|
7
|
+
export const API_BASE_URL = "https://api.elevenlabs.io/v1";
|
|
8
|
+
// Response limits
|
|
9
|
+
export const CHARACTER_LIMIT = 25000;
|
|
10
|
+
export const DEFAULT_LIMIT = 20;
|
|
11
|
+
export const MAX_LIMIT = 100;
|
|
12
|
+
// Default configuration values
|
|
13
|
+
export const DEFAULT_LLM = "gpt-4o-mini";
|
|
14
|
+
export const DEFAULT_VOICE_MODEL = "eleven_flash_v2_5";
|
|
15
|
+
export const DEFAULT_VOICE_ID = "21m00Tcm4TlvDq8ikWAM"; // Rachel voice
|
|
16
|
+
export const DEFAULT_LANGUAGE = "en";
|
|
17
|
+
// Supported LLM models
|
|
18
|
+
export const SUPPORTED_LLMS = [
|
|
19
|
+
"gpt-4o",
|
|
20
|
+
"gpt-4o-mini",
|
|
21
|
+
"claude-3-5-sonnet-20241022",
|
|
22
|
+
"claude-3-5-haiku-20241022",
|
|
23
|
+
"gemini-2.0-flash-exp"
|
|
24
|
+
];
|
|
25
|
+
// Supported voice models
|
|
26
|
+
export const SUPPORTED_VOICE_MODELS = [
|
|
27
|
+
"eleven_turbo_v2_5",
|
|
28
|
+
"eleven_flash_v2_5",
|
|
29
|
+
"eleven_multilingual_v2"
|
|
30
|
+
];
|
|
31
|
+
// Supported languages
|
|
32
|
+
export const SUPPORTED_LANGUAGES = [
|
|
33
|
+
"en", "es", "fr", "de", "it", "pt", "pl", "nl", "ja", "zh", "ko", "ar", "hi"
|
|
34
|
+
];
|
|
35
|
+
// Authentication types
|
|
36
|
+
export const AUTH_TYPES = ["none", "manual", "open"];
|
|
37
|
+
// API timeouts
|
|
38
|
+
export const REQUEST_TIMEOUT = 30000; // 30 seconds
|
|
39
|
+
// Batch calling limits
|
|
40
|
+
export const MAX_BATCH_RECIPIENTS = 10000;
|
|
41
|
+
export const MIN_BATCH_RECIPIENTS = 1;
|
|
42
|
+
// Phone providers
|
|
43
|
+
export const PHONE_PROVIDERS = ["twilio", "sip_trunk"];
|
|
44
|
+
// Phone number regions
|
|
45
|
+
export const REGION_IDS = ["us1", "ie1", "au1"];
|
|
46
|
+
// Edge locations
|
|
47
|
+
export const EDGE_LOCATIONS = [
|
|
48
|
+
"ashburn", "dublin", "frankfurt", "sao-paulo",
|
|
49
|
+
"singapore", "sydney", "tokyo", "umatilla", "roaming"
|
|
50
|
+
];
|
|
51
|
+
//# sourceMappingURL=constants.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"constants.js","sourceRoot":"","sources":["../src/constants.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,MAAM,CAAC,MAAM,YAAY,GAAG,8BAA8B,CAAC;AAE3D,kBAAkB;AAClB,MAAM,CAAC,MAAM,eAAe,GAAG,KAAK,CAAC;AACrC,MAAM,CAAC,MAAM,aAAa,GAAG,EAAE,CAAC;AAChC,MAAM,CAAC,MAAM,SAAS,GAAG,GAAG,CAAC;AAE7B,+BAA+B;AAC/B,MAAM,CAAC,MAAM,WAAW,GAAG,aAAa,CAAC;AACzC,MAAM,CAAC,MAAM,mBAAmB,GAAG,mBAAmB,CAAC;AACvD,MAAM,CAAC,MAAM,gBAAgB,GAAG,sBAAsB,CAAC,CAAC,eAAe;AACvE,MAAM,CAAC,MAAM,gBAAgB,GAAG,IAAI,CAAC;AAErC,uBAAuB;AACvB,MAAM,CAAC,MAAM,cAAc,GAAG;IAC5B,QAAQ;IACR,aAAa;IACb,4BAA4B;IAC5B,2BAA2B;IAC3B,sBAAsB;CACd,CAAC;AAEX,yBAAyB;AACzB,MAAM,CAAC,MAAM,sBAAsB,GAAG;IACpC,mBAAmB;IACnB,mBAAmB;IACnB,wBAAwB;CAChB,CAAC;AAEX,sBAAsB;AACtB,MAAM,CAAC,MAAM,mBAAmB,GAAG;IACjC,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI;CACpE,CAAC;AAEX,uBAAuB;AACvB,MAAM,CAAC,MAAM,UAAU,GAAG,CAAC,MAAM,EAAE,QAAQ,EAAE,MAAM,CAAU,CAAC;AAE9D,eAAe;AACf,MAAM,CAAC,MAAM,eAAe,GAAG,KAAK,CAAC,CAAC,aAAa;AAEnD,uBAAuB;AACvB,MAAM,CAAC,MAAM,oBAAoB,GAAG,KAAK,CAAC;AAC1C,MAAM,CAAC,MAAM,oBAAoB,GAAG,CAAC,CAAC;AAEtC,kBAAkB;AAClB,MAAM,CAAC,MAAM,eAAe,GAAG,CAAC,QAAQ,EAAE,WAAW,CAAU,CAAC;AAEhE,uBAAuB;AACvB,MAAM,CAAC,MAAM,UAAU,GAAG,CAAC,KAAK,EAAE,KAAK,EAAE,KAAK,CAAU,CAAC;AAEzD,iBAAiB;AACjB,MAAM,CAAC,MAAM,cAAc,GAAG;IAC5B,SAAS,EAAE,QAAQ,EAAE,WAAW,EAAE,WAAW;IAC7C,WAAW,EAAE,QAAQ,EAAE,OAAO,EAAE,UAAU,EAAE,SAAS;CAC7C,CAAC"}
|
package/dist/index.d.ts
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";AAEA;;;;GAIG"}
|