@trustpager/mcp-server 1.1.4 → 1.1.6

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.
@@ -32,7 +32,7 @@ export const communicationTools = [
32
32
  },
33
33
  {
34
34
  name: 'list_email_threads',
35
- description: 'List all email threads browse, view, or get all email conversations, inbox messages, and sent emails. Use this to see email history or find a conversation.',
35
+ description: 'List all email threads -- browse, view, or get all email conversations, inbox messages, and sent emails. Use this to see email history or find a conversation.',
36
36
  inputSchema: {
37
37
  type: 'object',
38
38
  properties: {
@@ -54,7 +54,7 @@ export const communicationTools = [
54
54
  },
55
55
  {
56
56
  name: 'list_sms_conversations',
57
- description: 'List all SMS conversations browse, view, or get all text message threads and SMS chats. Use this to see SMS history or find a text conversation.',
57
+ description: 'List all SMS conversations -- browse, view, or get all text message threads and SMS chats. Use this to see SMS history or find a text conversation.',
58
58
  inputSchema: {
59
59
  type: 'object',
60
60
  properties: {},
@@ -62,7 +62,7 @@ export const communicationTools = [
62
62
  },
63
63
  {
64
64
  name: 'list_phone_numbers',
65
- description: 'List all phone numbers browse, view, or get all configured phone lines, telephony numbers, and their capabilities. Use this to find a phone_number_id for sending SMS or making calls.',
65
+ description: 'List all phone numbers -- browse, view, or get all configured phone lines, telephony numbers, and their capabilities. Use this to find a phone_number_id for sending SMS or making calls.',
66
66
  inputSchema: {
67
67
  type: 'object',
68
68
  properties: {
@@ -74,7 +74,7 @@ export const communicationTools = [
74
74
  },
75
75
  {
76
76
  name: 'list_voice_agents',
77
- description: 'List all AI voice agents browse, view, or get all voice bots, AI call agents, and phone agents configured for the company.',
77
+ description: 'List all AI voice agents -- browse, view, or get all voice bots, AI call agents, and phone agents configured for the company.',
78
78
  inputSchema: {
79
79
  type: 'object',
80
80
  properties: {
@@ -122,7 +122,7 @@ export const communicationTools = [
122
122
  },
123
123
  {
124
124
  name: 'list_email_configs',
125
- description: 'List all email configs browse, view, or get all email sending settings, SMTP configurations, Postmark identities, and branding. Use this to see configured email senders.',
125
+ description: 'List all email configs -- browse, view, or get all email sending settings, SMTP configurations, Postmark identities, and branding. Use this to see configured email senders.',
126
126
  inputSchema: {
127
127
  type: 'object',
128
128
  properties: {},
@@ -201,7 +201,7 @@ export const communicationTools = [
201
201
  },
202
202
  {
203
203
  name: 'list_email_logs',
204
- description: 'List email send history browse, view, or get email delivery logs with status (sent, delivered, bounced, failed). Filter by status, contact, or deal.',
204
+ description: 'List email send history -- browse, view, or get email delivery logs with status (sent, delivered, bounced, failed). Filter by status, contact, or deal.',
205
205
  inputSchema: {
206
206
  type: 'object',
207
207
  properties: {
@@ -226,7 +226,7 @@ export const communicationTools = [
226
226
  },
227
227
  {
228
228
  name: 'get_sms_messages',
229
- description: 'Get all messages in an SMS conversation view the full text message history with timestamps, direction (inbound/outbound), and delivery status.',
229
+ description: 'Get all messages in an SMS conversation -- view the full text message history with timestamps, direction (inbound/outbound), and delivery status.',
230
230
  inputSchema: {
231
231
  type: 'object',
232
232
  properties: {
@@ -237,7 +237,7 @@ export const communicationTools = [
237
237
  },
238
238
  {
239
239
  name: 'search_phone_numbers',
240
- description: 'Search for available phone numbers to purchase find numbers by country (AU, US), area code, or pattern. Use this before buy_phone_number to see what is available.',
240
+ description: 'Search for available phone numbers to purchase -- find numbers by country (AU, US), area code, or pattern. Use this before buy_phone_number to see what is available.',
241
241
  inputSchema: {
242
242
  type: 'object',
243
243
  properties: {
@@ -261,7 +261,7 @@ export const communicationTools = [
261
261
  },
262
262
  {
263
263
  name: 'release_phone_number',
264
- description: 'Release and deprovision a phone number stop paying for it and remove it from the company. This action cannot be undone.',
264
+ description: 'Release and deprovision a phone number -- stop paying for it and remove it from the company. This action cannot be undone.',
265
265
  inputSchema: {
266
266
  type: 'object',
267
267
  properties: {
@@ -272,7 +272,7 @@ export const communicationTools = [
272
272
  },
273
273
  {
274
274
  name: 'list_phone_call_logs',
275
- description: 'List phone call logs browse, view, or get call history and call records. Filter by phone number, direction (inbound/outbound), and call status.',
275
+ description: 'List phone call logs -- browse, view, or get call history and call records. Filter by phone number, direction (inbound/outbound), and call status.',
276
276
  inputSchema: {
277
277
  type: 'object',
278
278
  properties: {
@@ -286,7 +286,7 @@ export const communicationTools = [
286
286
  },
287
287
  {
288
288
  name: 'resend_signing_email',
289
- description: 'Resend the e-signature email for a signing envelope use this if the original signing email was missed, lost, or expired.',
289
+ description: 'Resend the e-signature email for a signing envelope -- use this if the original signing email was missed, lost, or expired.',
290
290
  inputSchema: {
291
291
  type: 'object',
292
292
  properties: {
@@ -295,6 +295,347 @@ export const communicationTools = [
295
295
  required: ['envelope_id'],
296
296
  },
297
297
  },
298
+ // =========================================================================
299
+ // Voice Agent CRUD + Sub-resources
300
+ // =========================================================================
301
+ {
302
+ name: 'create_voice_agent',
303
+ description: 'Create a new AI voice agent for handling phone calls autonomously. Requires agent_name. Optional fields control voice, language, responsiveness, call duration, and more.',
304
+ inputSchema: {
305
+ type: 'object',
306
+ properties: {
307
+ agent_name: { type: 'string', description: 'Display name for the voice agent (required)' },
308
+ language: { type: 'string', description: 'Language code (e.g. "en-AU", "en-US")' },
309
+ voice_id: { type: 'string', description: 'Voice ID for text-to-speech' },
310
+ voice_model: { type: 'string', description: 'Voice model to use' },
311
+ voice_speed: { type: 'number', description: 'Voice speed multiplier' },
312
+ voice_temperature: { type: 'number', description: 'Voice temperature (creativity)' },
313
+ volume: { type: 'number', description: 'Voice volume level' },
314
+ ambient_sound: { type: 'string', description: 'Background ambient sound type' },
315
+ ambient_sound_volume: { type: 'number', description: 'Ambient sound volume level' },
316
+ backchannel_frequency: { type: 'number', description: 'How often the agent makes backchannel sounds (e.g. "uh-huh")' },
317
+ backchannel_words: { type: 'array', items: { type: 'string' }, description: 'Words to use for backchannel responses' },
318
+ enable_backchannel: { type: 'boolean', description: 'Enable backchannel sounds during conversation' },
319
+ conversation_flow_config: { type: 'object', description: 'Conversation flow configuration object' },
320
+ data_storage_setting: { type: 'string', description: 'Data storage setting' },
321
+ default_dynamic_variables: { type: 'object', description: 'Default dynamic variables for the agent' },
322
+ end_call_after_silence_ms: { type: 'number', description: 'End call after this many ms of silence' },
323
+ fallback_voice_ids: { type: 'array', items: { type: 'string' }, description: 'Fallback voice IDs' },
324
+ interruption_sensitivity: { type: 'number', description: 'Sensitivity to user interruptions (0-1)' },
325
+ max_call_duration_ms: { type: 'number', description: 'Maximum call duration in milliseconds' },
326
+ post_call_analysis_data: { type: 'array', description: 'Post-call analysis configuration' },
327
+ post_call_analysis_model: { type: 'string', description: 'Model for post-call analysis' },
328
+ reminder_max_count: { type: 'number', description: 'Max number of reminders' },
329
+ reminder_trigger_ms: { type: 'number', description: 'Trigger reminder after this many ms of silence' },
330
+ response_engine: { type: 'object', description: 'Response engine configuration' },
331
+ responsiveness: { type: 'number', description: 'Agent responsiveness level (0-1)' },
332
+ },
333
+ required: ['agent_name'],
334
+ },
335
+ },
336
+ {
337
+ name: 'update_voice_agent',
338
+ description: 'Update a voice agent configuration. Only include fields you want to change.',
339
+ inputSchema: {
340
+ type: 'object',
341
+ properties: {
342
+ id: { type: 'string', description: 'Voice agent UUID (required)' },
343
+ agent_name: { type: 'string', description: 'Display name for the voice agent' },
344
+ language: { type: 'string', description: 'Language code (e.g. "en-AU", "en-US")' },
345
+ voice_id: { type: 'string', description: 'Voice ID for text-to-speech' },
346
+ voice_model: { type: 'string', description: 'Voice model to use' },
347
+ voice_speed: { type: 'number', description: 'Voice speed multiplier' },
348
+ voice_temperature: { type: 'number', description: 'Voice temperature (creativity)' },
349
+ volume: { type: 'number', description: 'Voice volume level' },
350
+ ambient_sound: { type: 'string', description: 'Background ambient sound type' },
351
+ ambient_sound_volume: { type: 'number', description: 'Ambient sound volume level' },
352
+ backchannel_frequency: { type: 'number', description: 'How often the agent makes backchannel sounds' },
353
+ backchannel_words: { type: 'array', items: { type: 'string' }, description: 'Words to use for backchannel responses' },
354
+ enable_backchannel: { type: 'boolean', description: 'Enable backchannel sounds during conversation' },
355
+ conversation_flow_config: { type: 'object', description: 'Conversation flow configuration object' },
356
+ data_storage_setting: { type: 'string', description: 'Data storage setting' },
357
+ default_dynamic_variables: { type: 'object', description: 'Default dynamic variables for the agent' },
358
+ end_call_after_silence_ms: { type: 'number', description: 'End call after this many ms of silence' },
359
+ fallback_voice_ids: { type: 'array', items: { type: 'string' }, description: 'Fallback voice IDs' },
360
+ interruption_sensitivity: { type: 'number', description: 'Sensitivity to user interruptions (0-1)' },
361
+ max_call_duration_ms: { type: 'number', description: 'Maximum call duration in milliseconds' },
362
+ post_call_analysis_data: { type: 'array', description: 'Post-call analysis configuration' },
363
+ post_call_analysis_model: { type: 'string', description: 'Model for post-call analysis' },
364
+ reminder_max_count: { type: 'number', description: 'Max number of reminders' },
365
+ reminder_trigger_ms: { type: 'number', description: 'Trigger reminder after this many ms of silence' },
366
+ response_engine: { type: 'object', description: 'Response engine configuration' },
367
+ responsiveness: { type: 'number', description: 'Agent responsiveness level (0-1)' },
368
+ },
369
+ required: ['id'],
370
+ },
371
+ },
372
+ {
373
+ name: 'delete_voice_agent',
374
+ description: 'Permanently delete a voice agent. This action cannot be undone.',
375
+ inputSchema: {
376
+ type: 'object',
377
+ properties: {
378
+ id: { type: 'string', description: 'Voice agent UUID (required)' },
379
+ },
380
+ required: ['id'],
381
+ },
382
+ },
383
+ {
384
+ name: 'sync_voice_agent',
385
+ description: 'Sync a voice agent configuration with the Retell provider. Use after making changes to ensure the external service reflects the latest config.',
386
+ inputSchema: {
387
+ type: 'object',
388
+ properties: {
389
+ id: { type: 'string', description: 'Voice agent UUID (required)' },
390
+ },
391
+ required: ['id'],
392
+ },
393
+ },
394
+ {
395
+ name: 'list_voice_agent_calls',
396
+ description: 'List call logs for a specific voice agent -- browse call history, statuses, durations, and summaries for one agent.',
397
+ inputSchema: {
398
+ type: 'object',
399
+ properties: {
400
+ id: { type: 'string', description: 'Voice agent UUID (required)' },
401
+ limit: { type: 'number', description: 'Items per page (default 25, max 100)' },
402
+ after: { type: 'string', description: 'Cursor: get items after this ID' },
403
+ },
404
+ required: ['id'],
405
+ },
406
+ },
407
+ {
408
+ name: 'list_voice_agent_website_configs',
409
+ description: 'List website configurations for a voice agent -- shows which websites are linked, rate limits, and CRM auto-deal settings for inbound web calls.',
410
+ inputSchema: {
411
+ type: 'object',
412
+ properties: {
413
+ id: { type: 'string', description: 'Voice agent UUID (required)' },
414
+ },
415
+ required: ['id'],
416
+ },
417
+ },
418
+ {
419
+ name: 'create_voice_agent_website_config',
420
+ description: 'Create a website configuration for a voice agent. Links the agent to a website with rate limits and optional CRM auto-deal creation for inbound web calls.',
421
+ inputSchema: {
422
+ type: 'object',
423
+ properties: {
424
+ id: { type: 'string', description: 'Voice agent UUID (required)' },
425
+ website_id: { type: 'string', description: 'Website UUID to link (required)' },
426
+ rate_limit_max_requests: { type: 'number', description: 'Max requests per IP in the rate limit window' },
427
+ rate_limit_window_hours: { type: 'number', description: 'Rate limit window in hours' },
428
+ global_rate_limit_max_requests: { type: 'number', description: 'Global max requests in the rate limit window' },
429
+ global_rate_limit_window_hours: { type: 'number', description: 'Global rate limit window in hours' },
430
+ crm_auto_create_deal: { type: 'boolean', description: 'Auto-create a CRM deal for web calls' },
431
+ crm_pipeline_id: { type: 'string', description: 'Pipeline UUID for auto-created deals' },
432
+ crm_initial_stage_id: { type: 'string', description: 'Initial stage UUID for auto-created deals' },
433
+ crm_default_products: { type: 'array', description: 'Default product UUIDs to attach to auto-created deals' },
434
+ },
435
+ required: ['id', 'website_id'],
436
+ },
437
+ },
438
+ {
439
+ name: 'update_voice_agent_website_config',
440
+ description: 'Update a website configuration for a voice agent. Only include fields you want to change.',
441
+ inputSchema: {
442
+ type: 'object',
443
+ properties: {
444
+ id: { type: 'string', description: 'Voice agent UUID (required)' },
445
+ config_id: { type: 'string', description: 'Website config UUID (required)' },
446
+ website_id: { type: 'string', description: 'Website UUID to link' },
447
+ rate_limit_max_requests: { type: 'number', description: 'Max requests per IP in the rate limit window' },
448
+ rate_limit_window_hours: { type: 'number', description: 'Rate limit window in hours' },
449
+ global_rate_limit_max_requests: { type: 'number', description: 'Global max requests in the rate limit window' },
450
+ global_rate_limit_window_hours: { type: 'number', description: 'Global rate limit window in hours' },
451
+ crm_auto_create_deal: { type: 'boolean', description: 'Auto-create a CRM deal for web calls' },
452
+ crm_pipeline_id: { type: 'string', description: 'Pipeline UUID for auto-created deals' },
453
+ crm_initial_stage_id: { type: 'string', description: 'Initial stage UUID for auto-created deals' },
454
+ crm_default_products: { type: 'array', description: 'Default product UUIDs to attach to auto-created deals' },
455
+ },
456
+ required: ['id', 'config_id'],
457
+ },
458
+ },
459
+ {
460
+ name: 'delete_voice_agent_website_config',
461
+ description: 'Delete a website configuration from a voice agent. This action cannot be undone.',
462
+ inputSchema: {
463
+ type: 'object',
464
+ properties: {
465
+ id: { type: 'string', description: 'Voice agent UUID (required)' },
466
+ config_id: { type: 'string', description: 'Website config UUID (required)' },
467
+ },
468
+ required: ['id', 'config_id'],
469
+ },
470
+ },
471
+ {
472
+ name: 'list_voice_agent_outbound_configs',
473
+ description: 'List outbound configurations for a voice agent -- shows outbound call settings, default from number, allowed country codes, rate limits, and CRM auto-deal settings.',
474
+ inputSchema: {
475
+ type: 'object',
476
+ properties: {
477
+ id: { type: 'string', description: 'Voice agent UUID (required)' },
478
+ },
479
+ required: ['id'],
480
+ },
481
+ },
482
+ {
483
+ name: 'create_voice_agent_outbound_config',
484
+ description: 'Create an outbound configuration for a voice agent. Sets default from number, allowed countries, rate limits, and optional CRM auto-deal creation for outbound calls.',
485
+ inputSchema: {
486
+ type: 'object',
487
+ properties: {
488
+ id: { type: 'string', description: 'Voice agent UUID (required)' },
489
+ website_id: { type: 'string', description: 'Website UUID to link (required)' },
490
+ default_from_number: { type: 'string', description: 'Default caller ID phone number in E.164 format' },
491
+ allowed_country_codes: { type: 'array', items: { type: 'string' }, description: 'Allowed country codes for outbound calls (e.g. ["AU", "US"])' },
492
+ rate_limit_max_requests: { type: 'number', description: 'Max requests per IP in the rate limit window' },
493
+ rate_limit_window_hours: { type: 'number', description: 'Rate limit window in hours' },
494
+ global_rate_limit_max_requests: { type: 'number', description: 'Global max requests in the rate limit window' },
495
+ global_rate_limit_window_hours: { type: 'number', description: 'Global rate limit window in hours' },
496
+ crm_auto_create_deal: { type: 'boolean', description: 'Auto-create a CRM deal for outbound calls' },
497
+ crm_pipeline_id: { type: 'string', description: 'Pipeline UUID for auto-created deals' },
498
+ crm_initial_stage_id: { type: 'string', description: 'Initial stage UUID for auto-created deals' },
499
+ crm_default_products: { type: 'array', description: 'Default product UUIDs to attach to auto-created deals' },
500
+ },
501
+ required: ['id', 'website_id'],
502
+ },
503
+ },
504
+ {
505
+ name: 'update_voice_agent_outbound_config',
506
+ description: 'Update an outbound configuration for a voice agent. Only include fields you want to change.',
507
+ inputSchema: {
508
+ type: 'object',
509
+ properties: {
510
+ id: { type: 'string', description: 'Voice agent UUID (required)' },
511
+ config_id: { type: 'string', description: 'Outbound config UUID (required)' },
512
+ website_id: { type: 'string', description: 'Website UUID to link' },
513
+ default_from_number: { type: 'string', description: 'Default caller ID phone number in E.164 format' },
514
+ allowed_country_codes: { type: 'array', items: { type: 'string' }, description: 'Allowed country codes for outbound calls' },
515
+ rate_limit_max_requests: { type: 'number', description: 'Max requests per IP in the rate limit window' },
516
+ rate_limit_window_hours: { type: 'number', description: 'Rate limit window in hours' },
517
+ global_rate_limit_max_requests: { type: 'number', description: 'Global max requests in the rate limit window' },
518
+ global_rate_limit_window_hours: { type: 'number', description: 'Global rate limit window in hours' },
519
+ crm_auto_create_deal: { type: 'boolean', description: 'Auto-create a CRM deal for outbound calls' },
520
+ crm_pipeline_id: { type: 'string', description: 'Pipeline UUID for auto-created deals' },
521
+ crm_initial_stage_id: { type: 'string', description: 'Initial stage UUID for auto-created deals' },
522
+ crm_default_products: { type: 'array', description: 'Default product UUIDs to attach to auto-created deals' },
523
+ },
524
+ required: ['id', 'config_id'],
525
+ },
526
+ },
527
+ {
528
+ name: 'delete_voice_agent_outbound_config',
529
+ description: 'Delete an outbound configuration from a voice agent. This action cannot be undone.',
530
+ inputSchema: {
531
+ type: 'object',
532
+ properties: {
533
+ id: { type: 'string', description: 'Voice agent UUID (required)' },
534
+ config_id: { type: 'string', description: 'Outbound config UUID (required)' },
535
+ },
536
+ required: ['id', 'config_id'],
537
+ },
538
+ },
539
+ // =========================================================================
540
+ // Phone Number Management
541
+ // =========================================================================
542
+ {
543
+ name: 'get_phone_number',
544
+ description: 'Get a single phone number by ID with full details including status, capabilities, country, locality, transfer number, and monthly cost.',
545
+ inputSchema: {
546
+ type: 'object',
547
+ properties: {
548
+ id: { type: 'string', description: 'Phone number UUID (required)' },
549
+ },
550
+ required: ['id'],
551
+ },
552
+ },
553
+ {
554
+ name: 'update_phone_number',
555
+ description: 'Update a phone number configuration. Can set transfer number (for call forwarding), text agent, and friendly name.',
556
+ inputSchema: {
557
+ type: 'object',
558
+ properties: {
559
+ id: { type: 'string', description: 'Phone number UUID (required)' },
560
+ transfer_number: { type: 'string', description: 'Phone number to forward/transfer calls to in E.164 format' },
561
+ text_agent_config_id: { type: 'string', description: 'Text agent UUID to handle SMS on this number' },
562
+ friendly_name: { type: 'string', description: 'Display name for the phone number' },
563
+ },
564
+ required: ['id'],
565
+ },
566
+ },
567
+ // =========================================================================
568
+ // Phone Regulatory Compliance
569
+ // =========================================================================
570
+ {
571
+ name: 'list_phone_addresses',
572
+ description: 'List phone regulatory addresses -- browse addresses registered for phone number compliance and emergency services.',
573
+ inputSchema: {
574
+ type: 'object',
575
+ properties: {
576
+ limit: { type: 'number', description: 'Items per page (default 25, max 100)' },
577
+ after: { type: 'string', description: 'Cursor: get items after this ID' },
578
+ },
579
+ },
580
+ },
581
+ {
582
+ name: 'create_phone_address',
583
+ description: 'Create a regulatory address for phone number compliance. Required for purchasing phone numbers in some countries. All address fields are required.',
584
+ inputSchema: {
585
+ type: 'object',
586
+ properties: {
587
+ customer_name: { type: 'string', description: 'Customer or business name (required)' },
588
+ street: { type: 'string', description: 'Street address (required)' },
589
+ street_secondary: { type: 'string', description: 'Unit, suite, or floor number' },
590
+ city: { type: 'string', description: 'City or suburb (required)' },
591
+ region: { type: 'string', description: 'State or region (required)' },
592
+ postal_code: { type: 'string', description: 'Postal/ZIP code (required)' },
593
+ iso_country: { type: 'string', description: 'ISO country code, e.g. "AU" (required)' },
594
+ emergency_enabled: { type: 'boolean', description: 'Enable for emergency services' },
595
+ },
596
+ required: ['customer_name', 'street', 'city', 'region', 'postal_code', 'iso_country'],
597
+ },
598
+ },
599
+ {
600
+ name: 'list_phone_bundles',
601
+ description: 'List phone regulatory bundles -- browse compliance bundles for phone number provisioning with status, country, and number type.',
602
+ inputSchema: {
603
+ type: 'object',
604
+ properties: {
605
+ limit: { type: 'number', description: 'Items per page (default 25, max 100)' },
606
+ after: { type: 'string', description: 'Cursor: get items after this ID' },
607
+ },
608
+ },
609
+ },
610
+ {
611
+ name: 'create_phone_bundle',
612
+ description: 'Create a regulatory bundle for phone number compliance. Required before purchasing numbers in regulated countries. Specify country, number type, and end user type.',
613
+ inputSchema: {
614
+ type: 'object',
615
+ properties: {
616
+ friendly_name: { type: 'string', description: 'Display name for the bundle' },
617
+ country_code: { type: 'string', description: 'Country code, e.g. "AU" (required)' },
618
+ number_type: { type: 'string', description: 'Number type, e.g. "local", "mobile", "toll-free" (required)' },
619
+ end_user_type: { type: 'string', description: 'End user type, e.g. "individual", "business" (required)' },
620
+ regulation_sid: { type: 'string', description: 'Twilio regulation SID' },
621
+ address_sid: { type: 'string', description: 'Twilio address SID to associate' },
622
+ document_sid: { type: 'string', description: 'Twilio document SID for identity proof' },
623
+ end_user_data: { type: 'object', description: 'End user data object for regulatory compliance' },
624
+ },
625
+ required: ['country_code', 'number_type', 'end_user_type'],
626
+ },
627
+ },
628
+ {
629
+ name: 'submit_phone_bundle',
630
+ description: 'Submit a regulatory bundle for review. Once submitted, the bundle will be reviewed and approved or rejected by the provider.',
631
+ inputSchema: {
632
+ type: 'object',
633
+ properties: {
634
+ id: { type: 'string', description: 'Bundle UUID (required)' },
635
+ },
636
+ required: ['id'],
637
+ },
638
+ },
298
639
  ];
299
640
  export async function handleCommunicationTool(name, args) {
300
641
  switch (name) {
@@ -419,6 +760,120 @@ export async function handleCommunicationTool(name, args) {
419
760
  const res = await apiRequest('POST', `/signing/envelopes/${args.envelope_id}/resend`, {}, generateIdempotencyKey());
420
761
  return formatResponse(res);
421
762
  }
763
+ // =========================================================================
764
+ // Voice Agent CRUD + Sub-resources
765
+ // =========================================================================
766
+ case 'create_voice_agent': {
767
+ const { agent_name, language, voice_id, voice_model, voice_speed, voice_temperature, volume, ambient_sound, ambient_sound_volume, backchannel_frequency, backchannel_words, enable_backchannel, conversation_flow_config, data_storage_setting, default_dynamic_variables, end_call_after_silence_ms, fallback_voice_ids, interruption_sensitivity, max_call_duration_ms, post_call_analysis_data, post_call_analysis_model, reminder_max_count, reminder_trigger_ms, response_engine, responsiveness } = args;
768
+ const res = await apiRequest('POST', '/voice-agents', {
769
+ agent_name, language, voice_id, voice_model, voice_speed, voice_temperature, volume, ambient_sound, ambient_sound_volume, backchannel_frequency, backchannel_words, enable_backchannel, conversation_flow_config, data_storage_setting, default_dynamic_variables, end_call_after_silence_ms, fallback_voice_ids, interruption_sensitivity, max_call_duration_ms, post_call_analysis_data, post_call_analysis_model, reminder_max_count, reminder_trigger_ms, response_engine, responsiveness,
770
+ }, generateIdempotencyKey());
771
+ return formatResponse(res);
772
+ }
773
+ case 'update_voice_agent': {
774
+ const { id, ...body } = args;
775
+ const res = await apiRequest('PATCH', `/voice-agents/${id}`, body);
776
+ return formatResponse(res);
777
+ }
778
+ case 'delete_voice_agent': {
779
+ const res = await apiRequest('DELETE', `/voice-agents/${args.id}`);
780
+ return formatResponse(res);
781
+ }
782
+ case 'sync_voice_agent': {
783
+ const res = await apiRequest('POST', `/voice-agents/${args.id}/sync`, {}, generateIdempotencyKey());
784
+ return formatResponse(res);
785
+ }
786
+ case 'list_voice_agent_calls': {
787
+ const { id, limit, after } = args;
788
+ const query = buildQuery({ limit: limit, after: after });
789
+ const res = await apiRequest('GET', `/voice-agents/${id}/calls${query}`);
790
+ return formatResponse(res);
791
+ }
792
+ case 'list_voice_agent_website_configs': {
793
+ const res = await apiRequest('GET', `/voice-agents/${args.id}/website-config`);
794
+ return formatResponse(res);
795
+ }
796
+ case 'create_voice_agent_website_config': {
797
+ const { id, website_id, rate_limit_max_requests, rate_limit_window_hours, global_rate_limit_max_requests, global_rate_limit_window_hours, crm_auto_create_deal, crm_pipeline_id, crm_initial_stage_id, crm_default_products } = args;
798
+ const res = await apiRequest('POST', `/voice-agents/${id}/website-config`, {
799
+ website_id, rate_limit_max_requests, rate_limit_window_hours, global_rate_limit_max_requests, global_rate_limit_window_hours, crm_auto_create_deal, crm_pipeline_id, crm_initial_stage_id, crm_default_products,
800
+ }, generateIdempotencyKey());
801
+ return formatResponse(res);
802
+ }
803
+ case 'update_voice_agent_website_config': {
804
+ const { id, config_id, ...body } = args;
805
+ const res = await apiRequest('PATCH', `/voice-agents/${id}/website-config/${config_id}`, body);
806
+ return formatResponse(res);
807
+ }
808
+ case 'delete_voice_agent_website_config': {
809
+ const res = await apiRequest('DELETE', `/voice-agents/${args.id}/website-config/${args.config_id}`);
810
+ return formatResponse(res);
811
+ }
812
+ case 'list_voice_agent_outbound_configs': {
813
+ const res = await apiRequest('GET', `/voice-agents/${args.id}/outbound-config`);
814
+ return formatResponse(res);
815
+ }
816
+ case 'create_voice_agent_outbound_config': {
817
+ const { id, website_id, default_from_number, allowed_country_codes, rate_limit_max_requests, rate_limit_window_hours, global_rate_limit_max_requests, global_rate_limit_window_hours, crm_auto_create_deal, crm_pipeline_id, crm_initial_stage_id, crm_default_products } = args;
818
+ const res = await apiRequest('POST', `/voice-agents/${id}/outbound-config`, {
819
+ website_id, default_from_number, allowed_country_codes, rate_limit_max_requests, rate_limit_window_hours, global_rate_limit_max_requests, global_rate_limit_window_hours, crm_auto_create_deal, crm_pipeline_id, crm_initial_stage_id, crm_default_products,
820
+ }, generateIdempotencyKey());
821
+ return formatResponse(res);
822
+ }
823
+ case 'update_voice_agent_outbound_config': {
824
+ const { id, config_id, ...body } = args;
825
+ const res = await apiRequest('PATCH', `/voice-agents/${id}/outbound-config/${config_id}`, body);
826
+ return formatResponse(res);
827
+ }
828
+ case 'delete_voice_agent_outbound_config': {
829
+ const res = await apiRequest('DELETE', `/voice-agents/${args.id}/outbound-config/${args.config_id}`);
830
+ return formatResponse(res);
831
+ }
832
+ // =========================================================================
833
+ // Phone Number Management
834
+ // =========================================================================
835
+ case 'get_phone_number': {
836
+ const res = await apiRequest('GET', `/phone/numbers/${args.id}`);
837
+ return formatResponse(res);
838
+ }
839
+ case 'update_phone_number': {
840
+ const { id, ...body } = args;
841
+ const res = await apiRequest('PATCH', `/phone/numbers/${id}`, body);
842
+ return formatResponse(res);
843
+ }
844
+ // =========================================================================
845
+ // Phone Regulatory Compliance
846
+ // =========================================================================
847
+ case 'list_phone_addresses': {
848
+ const { limit, after } = args;
849
+ const query = buildQuery({ limit: limit, after: after });
850
+ const res = await apiRequest('GET', `/phone/addresses${query}`);
851
+ return formatResponse(res);
852
+ }
853
+ case 'create_phone_address': {
854
+ const { customer_name, street, street_secondary, city, region, postal_code, iso_country, emergency_enabled } = args;
855
+ const res = await apiRequest('POST', '/phone/addresses', {
856
+ customer_name, street, street_secondary, city, region, postal_code, iso_country, emergency_enabled,
857
+ }, generateIdempotencyKey());
858
+ return formatResponse(res);
859
+ }
860
+ case 'list_phone_bundles': {
861
+ const { limit, after } = args;
862
+ const query = buildQuery({ limit: limit, after: after });
863
+ const res = await apiRequest('GET', `/phone/bundles${query}`);
864
+ return formatResponse(res);
865
+ }
866
+ case 'create_phone_bundle': {
867
+ const { friendly_name, country_code, number_type, end_user_type, regulation_sid, address_sid, document_sid, end_user_data } = args;
868
+ const res = await apiRequest('POST', '/phone/bundles', {
869
+ friendly_name, country_code, number_type, end_user_type, regulation_sid, address_sid, document_sid, end_user_data,
870
+ }, generateIdempotencyKey());
871
+ return formatResponse(res);
872
+ }
873
+ case 'submit_phone_bundle': {
874
+ const res = await apiRequest('POST', `/phone/bundles/${args.id}/submit`, {}, generateIdempotencyKey());
875
+ return formatResponse(res);
876
+ }
422
877
  default:
423
878
  return { text: `Unknown communication tool: ${name}`, isError: true };
424
879
  }