dalvon-mcp 3.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.
Files changed (183) hide show
  1. package/LICENSE +7 -0
  2. package/README.md +743 -0
  3. package/dist/clients/dalvon.d.ts +258 -0
  4. package/dist/clients/dalvon.d.ts.map +1 -0
  5. package/dist/clients/dalvon.js +1240 -0
  6. package/dist/clients/dalvon.js.map +1 -0
  7. package/dist/clients/knowledge.d.ts +59 -0
  8. package/dist/clients/knowledge.d.ts.map +1 -0
  9. package/dist/clients/knowledge.js +267 -0
  10. package/dist/clients/knowledge.js.map +1 -0
  11. package/dist/clients/telefonieren.d.ts +258 -0
  12. package/dist/clients/telefonieren.d.ts.map +1 -0
  13. package/dist/clients/telefonieren.js +1240 -0
  14. package/dist/clients/telefonieren.js.map +1 -0
  15. package/dist/config.d.ts +43 -0
  16. package/dist/config.d.ts.map +1 -0
  17. package/dist/config.js +76 -0
  18. package/dist/config.js.map +1 -0
  19. package/dist/environment.d.ts +33 -0
  20. package/dist/environment.d.ts.map +1 -0
  21. package/dist/environment.js +63 -0
  22. package/dist/environment.js.map +1 -0
  23. package/dist/index.d.ts +7 -0
  24. package/dist/index.d.ts.map +1 -0
  25. package/dist/index.js +2 -0
  26. package/dist/index.js.map +1 -0
  27. package/dist/tools/agents.d.ts +8 -0
  28. package/dist/tools/agents.d.ts.map +1 -0
  29. package/dist/tools/agents.js +1880 -0
  30. package/dist/tools/agents.js.map +1 -0
  31. package/dist/tools/billing.d.ts +8 -0
  32. package/dist/tools/billing.d.ts.map +1 -0
  33. package/dist/tools/billing.js +205 -0
  34. package/dist/tools/billing.js.map +1 -0
  35. package/dist/tools/calendar.d.ts +8 -0
  36. package/dist/tools/calendar.d.ts.map +1 -0
  37. package/dist/tools/calendar.js +347 -0
  38. package/dist/tools/calendar.js.map +1 -0
  39. package/dist/tools/calls.d.ts +8 -0
  40. package/dist/tools/calls.d.ts.map +1 -0
  41. package/dist/tools/calls.js +508 -0
  42. package/dist/tools/calls.js.map +1 -0
  43. package/dist/tools/campaigns.d.ts +8 -0
  44. package/dist/tools/campaigns.d.ts.map +1 -0
  45. package/dist/tools/campaigns.js +531 -0
  46. package/dist/tools/campaigns.js.map +1 -0
  47. package/dist/tools/channels.d.ts +8 -0
  48. package/dist/tools/channels.d.ts.map +1 -0
  49. package/dist/tools/channels.js +165 -0
  50. package/dist/tools/channels.js.map +1 -0
  51. package/dist/tools/chats.d.ts +8 -0
  52. package/dist/tools/chats.d.ts.map +1 -0
  53. package/dist/tools/chats.js +142 -0
  54. package/dist/tools/chats.js.map +1 -0
  55. package/dist/tools/collections.d.ts +8 -0
  56. package/dist/tools/collections.d.ts.map +1 -0
  57. package/dist/tools/collections.js +389 -0
  58. package/dist/tools/collections.js.map +1 -0
  59. package/dist/tools/contacts.d.ts +8 -0
  60. package/dist/tools/contacts.d.ts.map +1 -0
  61. package/dist/tools/contacts.js +430 -0
  62. package/dist/tools/contacts.js.map +1 -0
  63. package/dist/tools/crawler.d.ts +8 -0
  64. package/dist/tools/crawler.d.ts.map +1 -0
  65. package/dist/tools/crawler.js +263 -0
  66. package/dist/tools/crawler.js.map +1 -0
  67. package/dist/tools/dnc.d.ts +8 -0
  68. package/dist/tools/dnc.d.ts.map +1 -0
  69. package/dist/tools/dnc.js +287 -0
  70. package/dist/tools/dnc.js.map +1 -0
  71. package/dist/tools/documents.d.ts +9 -0
  72. package/dist/tools/documents.d.ts.map +1 -0
  73. package/dist/tools/documents.js +518 -0
  74. package/dist/tools/documents.js.map +1 -0
  75. package/dist/tools/engines.d.ts +8 -0
  76. package/dist/tools/engines.d.ts.map +1 -0
  77. package/dist/tools/engines.js +271 -0
  78. package/dist/tools/engines.js.map +1 -0
  79. package/dist/tools/environment.d.ts +9 -0
  80. package/dist/tools/environment.d.ts.map +1 -0
  81. package/dist/tools/environment.js +59 -0
  82. package/dist/tools/environment.js.map +1 -0
  83. package/dist/tools/forwarding.d.ts +8 -0
  84. package/dist/tools/forwarding.d.ts.map +1 -0
  85. package/dist/tools/forwarding.js +30 -0
  86. package/dist/tools/forwarding.js.map +1 -0
  87. package/dist/tools/index.d.ts +58 -0
  88. package/dist/tools/index.d.ts.map +1 -0
  89. package/dist/tools/index.js +158 -0
  90. package/dist/tools/index.js.map +1 -0
  91. package/dist/tools/integrations.d.ts +8 -0
  92. package/dist/tools/integrations.d.ts.map +1 -0
  93. package/dist/tools/integrations.js +234 -0
  94. package/dist/tools/integrations.js.map +1 -0
  95. package/dist/tools/mailbox.d.ts +8 -0
  96. package/dist/tools/mailbox.d.ts.map +1 -0
  97. package/dist/tools/mailbox.js +105 -0
  98. package/dist/tools/mailbox.js.map +1 -0
  99. package/dist/tools/media.d.ts +8 -0
  100. package/dist/tools/media.d.ts.map +1 -0
  101. package/dist/tools/media.js +223 -0
  102. package/dist/tools/media.js.map +1 -0
  103. package/dist/tools/numbers.d.ts +8 -0
  104. package/dist/tools/numbers.d.ts.map +1 -0
  105. package/dist/tools/numbers.js +560 -0
  106. package/dist/tools/numbers.js.map +1 -0
  107. package/dist/tools/organizations.d.ts +8 -0
  108. package/dist/tools/organizations.d.ts.map +1 -0
  109. package/dist/tools/organizations.js +234 -0
  110. package/dist/tools/organizations.js.map +1 -0
  111. package/dist/tools/postprocessing.d.ts +8 -0
  112. package/dist/tools/postprocessing.d.ts.map +1 -0
  113. package/dist/tools/postprocessing.js +383 -0
  114. package/dist/tools/postprocessing.js.map +1 -0
  115. package/dist/tools/pronunciations.d.ts +8 -0
  116. package/dist/tools/pronunciations.d.ts.map +1 -0
  117. package/dist/tools/pronunciations.js +236 -0
  118. package/dist/tools/pronunciations.js.map +1 -0
  119. package/dist/tools/rules.d.ts +8 -0
  120. package/dist/tools/rules.d.ts.map +1 -0
  121. package/dist/tools/rules.js +465 -0
  122. package/dist/tools/rules.js.map +1 -0
  123. package/dist/tools/statistics.d.ts +8 -0
  124. package/dist/tools/statistics.d.ts.map +1 -0
  125. package/dist/tools/statistics.js +120 -0
  126. package/dist/tools/statistics.js.map +1 -0
  127. package/dist/tools/templates.d.ts +8 -0
  128. package/dist/tools/templates.d.ts.map +1 -0
  129. package/dist/tools/templates.js +211 -0
  130. package/dist/tools/templates.js.map +1 -0
  131. package/dist/tools/tests.d.ts +8 -0
  132. package/dist/tools/tests.d.ts.map +1 -0
  133. package/dist/tools/tests.js +329 -0
  134. package/dist/tools/tests.js.map +1 -0
  135. package/dist/tools/users.d.ts +8 -0
  136. package/dist/tools/users.d.ts.map +1 -0
  137. package/dist/tools/users.js +484 -0
  138. package/dist/tools/users.js.map +1 -0
  139. package/dist/tools/voice-preview.d.ts +8 -0
  140. package/dist/tools/voice-preview.d.ts.map +1 -0
  141. package/dist/tools/voice-preview.js +100 -0
  142. package/dist/tools/voice-preview.js.map +1 -0
  143. package/dist/tools/voices.d.ts +8 -0
  144. package/dist/tools/voices.d.ts.map +1 -0
  145. package/dist/tools/voices.js +110 -0
  146. package/dist/tools/voices.js.map +1 -0
  147. package/dist/tools/whitelabels.d.ts +8 -0
  148. package/dist/tools/whitelabels.d.ts.map +1 -0
  149. package/dist/tools/whitelabels.js +199 -0
  150. package/dist/tools/whitelabels.js.map +1 -0
  151. package/dist/tools/widget-config.d.ts +8 -0
  152. package/dist/tools/widget-config.d.ts.map +1 -0
  153. package/dist/tools/widget-config.js +116 -0
  154. package/dist/tools/widget-config.js.map +1 -0
  155. package/dist/types/api.d.ts +303 -0
  156. package/dist/types/api.d.ts.map +1 -0
  157. package/dist/types/api.js +6 -0
  158. package/dist/types/api.js.map +1 -0
  159. package/dist/types/index.d.ts +6 -0
  160. package/dist/types/index.d.ts.map +1 -0
  161. package/dist/types/index.js +6 -0
  162. package/dist/types/index.js.map +1 -0
  163. package/dist/types/tools.d.ts +41 -0
  164. package/dist/types/tools.d.ts.map +1 -0
  165. package/dist/types/tools.js +6 -0
  166. package/dist/types/tools.js.map +1 -0
  167. package/dist/utils/errors.d.ts +31 -0
  168. package/dist/utils/errors.d.ts.map +1 -0
  169. package/dist/utils/errors.js +77 -0
  170. package/dist/utils/errors.js.map +1 -0
  171. package/dist/utils/index.d.ts +7 -0
  172. package/dist/utils/index.d.ts.map +1 -0
  173. package/dist/utils/index.js +7 -0
  174. package/dist/utils/index.js.map +1 -0
  175. package/dist/utils/logger.d.ts +11 -0
  176. package/dist/utils/logger.d.ts.map +1 -0
  177. package/dist/utils/logger.js +25 -0
  178. package/dist/utils/logger.js.map +1 -0
  179. package/dist/utils/validation.d.ts +34 -0
  180. package/dist/utils/validation.d.ts.map +1 -0
  181. package/dist/utils/validation.js +68 -0
  182. package/dist/utils/validation.js.map +1 -0
  183. package/package.json +56 -0
@@ -0,0 +1,110 @@
1
+ /**
2
+ * Voice Management Tools (Phase 2)
3
+ * 3 tools for managing voice library
4
+ */
5
+ import { z } from 'zod';
6
+ import { formatApiError, createError, createSuccess, isApiError } from '../utils/errors.js';
7
+ // Zod Schemas
8
+ const listVoicesSchema = z.object({
9
+ target_user_id: z.string().uuid().optional().describe('Impersonate user to see their voices (requires admin/platform permissions)'),
10
+ scope: z.enum(['user', 'organization', 'whitelabel', 'platform']).optional().describe('Expand view scope (admin only)'),
11
+ visibility: z.array(z.enum(['user', 'organization', 'whitelabel', 'platform'])).optional().describe('Filter by visibility levels'),
12
+ name: z.string().optional().describe('Filter by name (partial match)'),
13
+ status: z.array(z.string()).optional().describe('Filter by status'),
14
+ tags: z.array(z.string()).optional().describe('Filter by tags'),
15
+ limit: z.number().min(1).max(100).optional().default(30),
16
+ skip: z.number().min(0).optional().default(0),
17
+ });
18
+ const getVoiceSchema = z.object({
19
+ voice_id: z.string(),
20
+ });
21
+ export function createVoiceTools(client) {
22
+ return [
23
+ // list_voices
24
+ {
25
+ name: 'list_voices',
26
+ description: 'List all available voices from ElevenLabs and other providers. Includes both standard and custom cloned voices.',
27
+ inputSchema: {
28
+ type: 'object',
29
+ properties: {
30
+ target_user_id: { type: 'string', description: 'Impersonate user to see their voices (requires admin/platform permissions)' },
31
+ scope: { type: 'string', enum: ['user', 'organization', 'whitelabel', 'platform'], description: 'Expand view scope (admin only)' },
32
+ visibility: { type: 'array', items: { type: 'string', enum: ['user', 'organization', 'whitelabel', 'platform'] }, description: 'Filter by visibility levels' },
33
+ provider: {
34
+ type: 'array',
35
+ items: { type: 'string', enum: ['elevenlabs', 'openai', 'other'] },
36
+ description: 'Filter by voice provider',
37
+ },
38
+ language: { type: 'string', description: 'Filter by language code (e.g., "en", "de")' },
39
+ gender: {
40
+ type: 'array',
41
+ items: { type: 'string', enum: ['male', 'female', 'neutral'] },
42
+ description: 'Filter by gender',
43
+ },
44
+ is_custom: { type: 'boolean', description: 'Filter custom cloned voices' },
45
+ search: { type: 'string', description: 'Search by voice name or description' },
46
+ },
47
+ },
48
+ handler: async (args) => {
49
+ const parsed = listVoicesSchema.safeParse(args);
50
+ if (!parsed.success) {
51
+ return createError(`Invalid arguments: ${parsed.error.message}`);
52
+ }
53
+ const result = await client.listVoices(parsed.data);
54
+ if (!result.success || isApiError(result)) {
55
+ return formatApiError(result, 'list_voices');
56
+ }
57
+ const voices = result.data || [];
58
+ return createSuccess({
59
+ count: voices.length,
60
+ voices,
61
+ filters_applied: parsed.data,
62
+ });
63
+ },
64
+ },
65
+ // get_voice
66
+ {
67
+ name: 'get_voice',
68
+ description: 'Get detailed information about a specific voice including sample audio URL.',
69
+ inputSchema: {
70
+ type: 'object',
71
+ properties: {
72
+ voice_id: { type: 'string', description: 'Voice UUID or ElevenLabs voice ID' },
73
+ },
74
+ required: ['voice_id'],
75
+ },
76
+ handler: async (args) => {
77
+ const parsed = getVoiceSchema.safeParse(args);
78
+ if (!parsed.success) {
79
+ return createError(`Invalid arguments: ${parsed.error.message}`);
80
+ }
81
+ const result = await client.getVoice(parsed.data.voice_id);
82
+ if (!result.success || isApiError(result)) {
83
+ return formatApiError(result, 'get_voice');
84
+ }
85
+ return result;
86
+ },
87
+ },
88
+ // refresh_voices
89
+ {
90
+ name: 'refresh_voices',
91
+ description: 'Refresh the voice library from ElevenLabs and other providers. This syncs the latest available voices.',
92
+ inputSchema: {
93
+ type: 'object',
94
+ properties: {},
95
+ },
96
+ handler: async () => {
97
+ const result = await client.refreshVoices();
98
+ if (!result.success || isApiError(result)) {
99
+ return formatApiError(result, 'refresh_voices');
100
+ }
101
+ return createSuccess({
102
+ refreshed: true,
103
+ message: 'Voice library refreshed successfully',
104
+ result: result.data,
105
+ });
106
+ },
107
+ },
108
+ ];
109
+ }
110
+ //# sourceMappingURL=voices.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"voices.js","sourceRoot":"","sources":["../../src/tools/voices.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAGxB,OAAO,EAAE,cAAc,EAAE,WAAW,EAAE,aAAa,EAAE,UAAU,EAAE,MAAM,oBAAoB,CAAC;AAE5F,cAAc;AACd,MAAM,gBAAgB,GAAG,CAAC,CAAC,MAAM,CAAC;IAChC,cAAc,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,IAAI,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,4EAA4E,CAAC;IACnI,KAAK,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC,MAAM,EAAE,cAAc,EAAE,YAAY,EAAE,UAAU,CAAC,CAAC,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,gCAAgC,CAAC;IACvH,UAAU,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,MAAM,EAAE,cAAc,EAAE,YAAY,EAAE,UAAU,CAAC,CAAC,CAAC,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,6BAA6B,CAAC;IAClI,IAAI,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,gCAAgC,CAAC;IACtE,MAAM,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,kBAAkB,CAAC;IACnE,IAAI,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,gBAAgB,CAAC;IAC/D,KAAK,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,QAAQ,EAAE,CAAC,OAAO,CAAC,EAAE,CAAC;IACxD,IAAI,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,QAAQ,EAAE,CAAC,OAAO,CAAC,CAAC,CAAC;CAC9C,CAAC,CAAC;AAEH,MAAM,cAAc,GAAG,CAAC,CAAC,MAAM,CAAC;IAC9B,QAAQ,EAAE,CAAC,CAAC,MAAM,EAAE;CACrB,CAAC,CAAC;AAEH,MAAM,UAAU,gBAAgB,CAAC,MAAoB;IACnD,OAAO;QACL,cAAc;QACd;YACE,IAAI,EAAE,aAAa;YACnB,WAAW,EACT,iHAAiH;YACnH,WAAW,EAAE;gBACX,IAAI,EAAE,QAAQ;gBACd,UAAU,EAAE;oBACV,cAAc,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,WAAW,EAAE,4EAA4E,EAAE;oBAC7H,KAAK,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC,MAAM,EAAE,cAAc,EAAE,YAAY,EAAE,UAAU,CAAC,EAAE,WAAW,EAAE,gCAAgC,EAAE;oBAClI,UAAU,EAAE,EAAE,IAAI,EAAE,OAAO,EAAE,KAAK,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC,MAAM,EAAE,cAAc,EAAE,YAAY,EAAE,UAAU,CAAC,EAAE,EAAE,WAAW,EAAE,6BAA6B,EAAE;oBAC9J,QAAQ,EAAE;wBACR,IAAI,EAAE,OAAO;wBACb,KAAK,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC,YAAY,EAAE,QAAQ,EAAE,OAAO,CAAC,EAAE;wBAClE,WAAW,EAAE,0BAA0B;qBACxC;oBACD,QAAQ,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,WAAW,EAAE,4CAA4C,EAAE;oBACvF,MAAM,EAAE;wBACN,IAAI,EAAE,OAAO;wBACb,KAAK,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC,MAAM,EAAE,QAAQ,EAAE,SAAS,CAAC,EAAE;wBAC9D,WAAW,EAAE,kBAAkB;qBAChC;oBACD,SAAS,EAAE,EAAE,IAAI,EAAE,SAAS,EAAE,WAAW,EAAE,6BAA6B,EAAE;oBAC1E,MAAM,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,WAAW,EAAE,qCAAqC,EAAE;iBAC/E;aACF;YACD,OAAO,EAAE,KAAK,EAAE,IAAa,EAAyB,EAAE;gBACtD,MAAM,MAAM,GAAG,gBAAgB,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC;gBAChD,IAAI,CAAC,MAAM,CAAC,OAAO,EAAE,CAAC;oBACpB,OAAO,WAAW,CAAC,sBAAsB,MAAM,CAAC,KAAK,CAAC,OAAO,EAAE,CAAC,CAAC;gBACnE,CAAC;gBAED,MAAM,MAAM,GAAG,MAAM,MAAM,CAAC,UAAU,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;gBAEpD,IAAI,CAAC,MAAM,CAAC,OAAO,IAAI,UAAU,CAAC,MAAM,CAAC,EAAE,CAAC;oBAC1C,OAAO,cAAc,CAAC,MAAM,EAAE,aAAa,CAAC,CAAC;gBAC/C,CAAC;gBAED,MAAM,MAAM,GAAG,MAAM,CAAC,IAAI,IAAI,EAAE,CAAC;gBACjC,OAAO,aAAa,CAAC;oBACnB,KAAK,EAAE,MAAM,CAAC,MAAM;oBACpB,MAAM;oBACN,eAAe,EAAE,MAAM,CAAC,IAAI;iBAC7B,CAAC,CAAC;YACL,CAAC;SACF;QAED,YAAY;QACZ;YACE,IAAI,EAAE,WAAW;YACjB,WAAW,EAAE,6EAA6E;YAC1F,WAAW,EAAE;gBACX,IAAI,EAAE,QAAQ;gBACd,UAAU,EAAE;oBACV,QAAQ,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,WAAW,EAAE,mCAAmC,EAAE;iBAC/E;gBACD,QAAQ,EAAE,CAAC,UAAU,CAAC;aACvB;YACD,OAAO,EAAE,KAAK,EAAE,IAAa,EAAyB,EAAE;gBACtD,MAAM,MAAM,GAAG,cAAc,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC;gBAC9C,IAAI,CAAC,MAAM,CAAC,OAAO,EAAE,CAAC;oBACpB,OAAO,WAAW,CAAC,sBAAsB,MAAM,CAAC,KAAK,CAAC,OAAO,EAAE,CAAC,CAAC;gBACnE,CAAC;gBAED,MAAM,MAAM,GAAG,MAAM,MAAM,CAAC,QAAQ,CAAC,MAAM,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;gBAE3D,IAAI,CAAC,MAAM,CAAC,OAAO,IAAI,UAAU,CAAC,MAAM,CAAC,EAAE,CAAC;oBAC1C,OAAO,cAAc,CAAC,MAAM,EAAE,WAAW,CAAC,CAAC;gBAC7C,CAAC;gBAED,OAAO,MAAM,CAAC;YAChB,CAAC;SACF;QAED,iBAAiB;QACjB;YACE,IAAI,EAAE,gBAAgB;YACtB,WAAW,EACT,wGAAwG;YAC1G,WAAW,EAAE;gBACX,IAAI,EAAE,QAAQ;gBACd,UAAU,EAAE,EAAE;aACf;YACD,OAAO,EAAE,KAAK,IAA2B,EAAE;gBACzC,MAAM,MAAM,GAAG,MAAM,MAAM,CAAC,aAAa,EAAE,CAAC;gBAE5C,IAAI,CAAC,MAAM,CAAC,OAAO,IAAI,UAAU,CAAC,MAAM,CAAC,EAAE,CAAC;oBAC1C,OAAO,cAAc,CAAC,MAAM,EAAE,gBAAgB,CAAC,CAAC;gBAClD,CAAC;gBAED,OAAO,aAAa,CAAC;oBACnB,SAAS,EAAE,IAAI;oBACf,OAAO,EAAE,sCAAsC;oBAC/C,MAAM,EAAE,MAAM,CAAC,IAAI;iBACpB,CAAC,CAAC;YACL,CAAC;SACF;KACF,CAAC;AACJ,CAAC"}
@@ -0,0 +1,8 @@
1
+ /**
2
+ * Whitelabel Management Tools for dalvon-mcp
3
+ * Phase 4: 5 Tools for whitelabel management (Admin)
4
+ */
5
+ import type { DalvonClient } from '../clients/dalvon.js';
6
+ import type { McpTool } from '../types/index.js';
7
+ export declare function createWhitelabelTools(client: DalvonClient): McpTool[];
8
+ //# sourceMappingURL=whitelabels.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"whitelabels.d.ts","sourceRoot":"","sources":["../../src/tools/whitelabels.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAGH,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,sBAAsB,CAAC;AACzD,OAAO,KAAK,EAAE,OAAO,EAAgB,MAAM,mBAAmB,CAAC;AAgC/D,wBAAgB,qBAAqB,CAAC,MAAM,EAAE,YAAY,GAAG,OAAO,EAAE,CAmLrE"}
@@ -0,0 +1,199 @@
1
+ /**
2
+ * Whitelabel Management Tools for dalvon-mcp
3
+ * Phase 4: 5 Tools for whitelabel management (Admin)
4
+ */
5
+ import { z } from 'zod';
6
+ import { formatApiError, createError, createSuccess, isApiError } from '../utils/errors.js';
7
+ import { validateUUID } from '../utils/validation.js';
8
+ // ==================== SCHEMAS ====================
9
+ const ListWhitelabelsSchema = z.object({
10
+ status: z.enum(['active', 'inactive', 'suspended']).optional(),
11
+ limit: z.number().min(1).max(100).optional().default(30),
12
+ offset: z.number().min(0).optional().default(0),
13
+ });
14
+ const CreateWhitelabelSchema = z.object({
15
+ name: z.string().min(1),
16
+ domain: z.string().min(1),
17
+ description: z.string().optional(),
18
+ branding: z.record(z.unknown()).optional(),
19
+ settings: z.record(z.unknown()).optional(),
20
+ });
21
+ const UpdateWhitelabelSchema = z.object({
22
+ whitelabel_id: z.string().uuid(),
23
+ name: z.string().optional(),
24
+ domain: z.string().optional(),
25
+ description: z.string().optional(),
26
+ status: z.enum(['active', 'inactive', 'suspended']).optional(),
27
+ branding: z.record(z.unknown()).optional(),
28
+ settings: z.record(z.unknown()).optional(),
29
+ });
30
+ // ==================== TOOLS ====================
31
+ export function createWhitelabelTools(client) {
32
+ return [
33
+ // Tool 1: list_whitelabels
34
+ {
35
+ name: 'list_whitelabels',
36
+ description: `List all whitelabel configurations.
37
+
38
+ **Admin Only:** Requires admin permissions.
39
+
40
+ Filter by status. Whitelabels enable custom branding.`,
41
+ inputSchema: {
42
+ type: 'object',
43
+ properties: {
44
+ status: { type: 'string', enum: ['active', 'inactive', 'suspended'], description: 'Filter by status' },
45
+ limit: { type: 'number', description: 'Number of results (default: 30)' },
46
+ offset: { type: 'number', description: 'Offset for pagination' },
47
+ },
48
+ },
49
+ handler: async (args) => {
50
+ const parsed = ListWhitelabelsSchema.safeParse(args);
51
+ if (!parsed.success) {
52
+ return createError(`Invalid arguments: ${parsed.error.message}`);
53
+ }
54
+ const result = await client.listWhitelabels(parsed.data);
55
+ if (!result.success || isApiError(result)) {
56
+ return formatApiError(result, 'list_whitelabels', 'Requires admin permissions');
57
+ }
58
+ const whitelabels = result.data || [];
59
+ return createSuccess({ count: whitelabels.length, whitelabels });
60
+ },
61
+ },
62
+ // Tool 2: get_whitelabel
63
+ {
64
+ name: 'get_whitelabel',
65
+ description: `Get details of a specific whitelabel configuration.
66
+
67
+ **Admin Only:** Requires admin permissions.`,
68
+ inputSchema: {
69
+ type: 'object',
70
+ properties: {
71
+ whitelabel_id: { type: 'string', description: 'Whitelabel UUID' },
72
+ },
73
+ required: ['whitelabel_id'],
74
+ },
75
+ handler: async (args) => {
76
+ const { whitelabel_id } = args;
77
+ const validationError = validateUUID(whitelabel_id, 'whitelabel_id');
78
+ if (validationError)
79
+ return validationError;
80
+ const result = await client.getWhitelabel(whitelabel_id);
81
+ if (!result.success || isApiError(result)) {
82
+ return formatApiError(result, 'get_whitelabel', 'Requires admin permissions');
83
+ }
84
+ return result;
85
+ },
86
+ },
87
+ // Tool 3: create_whitelabel
88
+ {
89
+ name: 'create_whitelabel',
90
+ description: `Create a new whitelabel configuration.
91
+
92
+ **Admin Only:** Requires admin permissions.
93
+
94
+ Configure custom branding, domain, and settings.`,
95
+ inputSchema: {
96
+ type: 'object',
97
+ properties: {
98
+ name: { type: 'string', description: 'Whitelabel name' },
99
+ domain: { type: 'string', description: 'Custom domain for this whitelabel' },
100
+ description: { type: 'string', description: 'Whitelabel description' },
101
+ branding: { type: 'object', description: 'Branding settings (logo, colors, etc.)' },
102
+ settings: { type: 'object', description: 'Additional settings' },
103
+ },
104
+ required: ['name', 'domain'],
105
+ },
106
+ handler: async (args) => {
107
+ const parsed = CreateWhitelabelSchema.safeParse(args);
108
+ if (!parsed.success) {
109
+ return createError(`Invalid arguments: ${parsed.error.message}`);
110
+ }
111
+ const result = await client.createWhitelabel(parsed.data);
112
+ if (!result.success || isApiError(result)) {
113
+ return formatApiError(result, 'create_whitelabel', 'Requires admin permissions');
114
+ }
115
+ const whitelabel = result.data;
116
+ return createSuccess({
117
+ message: 'Whitelabel created',
118
+ whitelabel_id: whitelabel.id,
119
+ name: whitelabel.name,
120
+ domain: whitelabel.domain,
121
+ });
122
+ },
123
+ },
124
+ // Tool 4: update_whitelabel
125
+ {
126
+ name: 'update_whitelabel',
127
+ description: `Update a whitelabel configuration.
128
+
129
+ **Admin Only:** Requires admin permissions.`,
130
+ inputSchema: {
131
+ type: 'object',
132
+ properties: {
133
+ whitelabel_id: { type: 'string', description: 'Whitelabel UUID' },
134
+ name: { type: 'string', description: 'Updated name' },
135
+ domain: { type: 'string', description: 'Updated domain' },
136
+ description: { type: 'string', description: 'Updated description' },
137
+ status: { type: 'string', enum: ['active', 'inactive', 'suspended'], description: 'Status' },
138
+ branding: { type: 'object', description: 'Updated branding settings' },
139
+ settings: { type: 'object', description: 'Updated settings' },
140
+ },
141
+ required: ['whitelabel_id'],
142
+ },
143
+ handler: async (args) => {
144
+ const parsed = UpdateWhitelabelSchema.safeParse(args);
145
+ if (!parsed.success) {
146
+ return createError(`Invalid arguments: ${parsed.error.message}`);
147
+ }
148
+ const { whitelabel_id, ...whitelabelData } = parsed.data;
149
+ const validationError = validateUUID(whitelabel_id, 'whitelabel_id');
150
+ if (validationError)
151
+ return validationError;
152
+ if (Object.keys(whitelabelData).length === 0) {
153
+ return createError('No fields to update');
154
+ }
155
+ const result = await client.updateWhitelabel(whitelabel_id, whitelabelData);
156
+ if (!result.success || isApiError(result)) {
157
+ return formatApiError(result, 'update_whitelabel', 'Requires admin permissions');
158
+ }
159
+ return createSuccess({
160
+ message: 'Whitelabel updated',
161
+ whitelabel_id,
162
+ updated_fields: Object.keys(whitelabelData),
163
+ });
164
+ },
165
+ },
166
+ // Tool 5: delete_whitelabel
167
+ {
168
+ name: 'delete_whitelabel',
169
+ description: `Delete a whitelabel configuration.
170
+
171
+ **Admin Only:** Requires admin permissions.
172
+ **Warning:** This removes the whitelabel and affects all associated organizations!`,
173
+ inputSchema: {
174
+ type: 'object',
175
+ properties: {
176
+ whitelabel_id: { type: 'string', description: 'Whitelabel UUID' },
177
+ },
178
+ required: ['whitelabel_id'],
179
+ },
180
+ handler: async (args) => {
181
+ const { whitelabel_id } = args;
182
+ const validationError = validateUUID(whitelabel_id, 'whitelabel_id');
183
+ if (validationError)
184
+ return validationError;
185
+ const result = await client.deleteWhitelabel(whitelabel_id);
186
+ if (!result.success || isApiError(result)) {
187
+ return formatApiError(result, 'delete_whitelabel', 'Requires admin permissions');
188
+ }
189
+ return createSuccess({
190
+ message: 'Whitelabel deleted',
191
+ whitelabel_id,
192
+ deleted: true,
193
+ warning: 'Associated organizations may be affected',
194
+ });
195
+ },
196
+ },
197
+ ];
198
+ }
199
+ //# sourceMappingURL=whitelabels.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"whitelabels.js","sourceRoot":"","sources":["../../src/tools/whitelabels.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,8 @@
1
+ /**
2
+ * Widget Config Tools
3
+ * 3 tools for managing chat widget branding and configuration
4
+ */
5
+ import type { DalvonClient } from '../clients/dalvon.js';
6
+ import type { McpTool } from '../types/index.js';
7
+ export declare function createWidgetConfigTools(client: DalvonClient): McpTool[];
8
+ //# sourceMappingURL=widget-config.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"widget-config.d.ts","sourceRoot":"","sources":["../../src/tools/widget-config.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAGH,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,sBAAsB,CAAC;AACzD,OAAO,KAAK,EAAE,OAAO,EAAgB,MAAM,mBAAmB,CAAC;AAsB/D,wBAAgB,uBAAuB,CAAC,MAAM,EAAE,YAAY,GAAG,OAAO,EAAE,CAuGvE"}
@@ -0,0 +1,116 @@
1
+ /**
2
+ * Widget Config Tools
3
+ * 3 tools for managing chat widget branding and configuration
4
+ */
5
+ import { z } from 'zod';
6
+ import { validateUUID } from '../utils/validation.js';
7
+ import { formatApiError, createError, createSuccess, isApiError } from '../utils/errors.js';
8
+ const getWidgetConfigSchema = z.object({
9
+ organization_id: z.string(),
10
+ });
11
+ const updateWidgetConfigSchema = z.object({
12
+ organization_id: z.string(),
13
+ primary_color: z.string().optional().describe('Primary brand color (hex, e.g. #0066FF)'),
14
+ logo_url: z.string().optional().describe('URL to organization logo'),
15
+ avatar_url: z.string().optional().describe('URL to chat avatar image'),
16
+ greeting_text: z.string().optional().describe('Initial greeting message shown in the widget'),
17
+ position: z.enum(['bottom-right', 'bottom-left']).optional().describe('Widget position on the page'),
18
+ allowed_domains: z.array(z.string()).optional().describe('Domains allowed to embed the widget'),
19
+ });
20
+ const getAgentWidgetConfigSchema = z.object({
21
+ agent_id: z.string(),
22
+ });
23
+ export function createWidgetConfigTools(client) {
24
+ return [
25
+ {
26
+ name: 'get_widget_config',
27
+ description: 'Get the chat widget branding configuration for an organization (colors, logo, greeting, allowed domains)',
28
+ inputSchema: {
29
+ type: 'object',
30
+ properties: {
31
+ organization_id: { type: 'string', description: 'Organization UUID' },
32
+ },
33
+ required: ['organization_id'],
34
+ },
35
+ handler: async (args) => {
36
+ const parsed = getWidgetConfigSchema.safeParse(args);
37
+ if (!parsed.success)
38
+ return createError(`Invalid arguments: ${parsed.error.message}`);
39
+ const validationError = validateUUID(parsed.data.organization_id, 'organization_id');
40
+ if (validationError)
41
+ return validationError;
42
+ const result = await client.getWidgetConfig(parsed.data.organization_id);
43
+ if (!result.success || isApiError(result)) {
44
+ return formatApiError(result, 'get_widget_config');
45
+ }
46
+ return createSuccess({ widget_config: result.data });
47
+ },
48
+ },
49
+ {
50
+ name: 'update_widget_config',
51
+ description: 'Update the chat widget branding configuration for an organization',
52
+ inputSchema: {
53
+ type: 'object',
54
+ properties: {
55
+ organization_id: { type: 'string', description: 'Organization UUID' },
56
+ primary_color: { type: 'string', description: 'Primary brand color (hex, e.g. #0066FF)' },
57
+ logo_url: { type: 'string', description: 'URL to organization logo' },
58
+ avatar_url: { type: 'string', description: 'URL to chat avatar image' },
59
+ greeting_text: { type: 'string', description: 'Initial greeting message shown in the widget' },
60
+ position: { type: 'string', enum: ['bottom-right', 'bottom-left'], description: 'Widget position on the page' },
61
+ allowed_domains: { type: 'array', items: { type: 'string' }, description: 'Domains allowed to embed the widget' },
62
+ },
63
+ required: ['organization_id'],
64
+ },
65
+ handler: async (args) => {
66
+ const parsed = updateWidgetConfigSchema.safeParse(args);
67
+ if (!parsed.success)
68
+ return createError(`Invalid arguments: ${parsed.error.message}`);
69
+ const validationError = validateUUID(parsed.data.organization_id, 'organization_id');
70
+ if (validationError)
71
+ return validationError;
72
+ const { organization_id, ...config } = parsed.data;
73
+ // Filter out undefined values
74
+ const cleanConfig = {};
75
+ for (const [key, value] of Object.entries(config)) {
76
+ if (value !== undefined) {
77
+ cleanConfig[key] = value;
78
+ }
79
+ }
80
+ if (Object.keys(cleanConfig).length === 0) {
81
+ return createError('At least one config field must be provided to update');
82
+ }
83
+ const result = await client.updateWidgetConfig(organization_id, cleanConfig);
84
+ if (!result.success || isApiError(result)) {
85
+ return formatApiError(result, 'update_widget_config');
86
+ }
87
+ return createSuccess({ updated: true, widget_config: result.data });
88
+ },
89
+ },
90
+ {
91
+ name: 'get_agent_widget_config',
92
+ description: 'Get the public widget configuration for an agent (modes, branding, greeting). This is the config that the embeddable widget fetches.',
93
+ inputSchema: {
94
+ type: 'object',
95
+ properties: {
96
+ agent_id: { type: 'string', description: 'Agent UUID' },
97
+ },
98
+ required: ['agent_id'],
99
+ },
100
+ handler: async (args) => {
101
+ const parsed = getAgentWidgetConfigSchema.safeParse(args);
102
+ if (!parsed.success)
103
+ return createError(`Invalid arguments: ${parsed.error.message}`);
104
+ const validationError = validateUUID(parsed.data.agent_id, 'agent_id');
105
+ if (validationError)
106
+ return validationError;
107
+ const result = await client.getAgentWidgetConfig(parsed.data.agent_id);
108
+ if (!result.success || isApiError(result)) {
109
+ return formatApiError(result, 'get_agent_widget_config');
110
+ }
111
+ return createSuccess({ agent_widget_config: result.data });
112
+ },
113
+ },
114
+ ];
115
+ }
116
+ //# sourceMappingURL=widget-config.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"widget-config.js","sourceRoot":"","sources":["../../src/tools/widget-config.ts"],"names":[],"mappings":"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"}