@velaro/mcp-server 0.6.100 → 0.6.101
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/package.json +1 -1
- package/server.js +92 -4
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@velaro/mcp-server",
|
|
3
|
-
"version": "0.6.
|
|
3
|
+
"version": "0.6.101",
|
|
4
4
|
"description": "Velaro MCP server — connect Claude and other AI agents directly to your Velaro account: KB, workflows, bots, conversations, contacts, routing, and more.",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"bin": {
|
package/server.js
CHANGED
|
@@ -842,6 +842,7 @@ const TOOLS = [
|
|
|
842
842
|
groupBy: { type: 'string', description: '"month" or "week" (default month)' },
|
|
843
843
|
deploymentId: { type: 'number', description: 'Optional website (deployment row id) filter' },
|
|
844
844
|
teamId: { type: 'number', description: 'Optional team filter' },
|
|
845
|
+
includeSecondary: { type: 'boolean', description: 'Also return secondary topics per conversation (needs the site multi-topic setting on). Response becomes { report, secondary: [{ theme, conversations, avgConfidence }] }.' },
|
|
845
846
|
},
|
|
846
847
|
},
|
|
847
848
|
},
|
|
@@ -895,6 +896,16 @@ const TOOLS = [
|
|
|
895
896
|
description: 'Replace the active topic list (max 60 topics, 60 chars each, duplicates removed). Used for new classifications only; existing history is untouched. Optionally load a template first with industry.',
|
|
896
897
|
inputSchema: { type: 'object', properties: { topics: { type: 'array', items: { type: 'string' } }, industry: { type: 'string', description: 'Load a template instead: insurance, healthcare, retail, ecommerce, financial, saas, government, manufacturing' } } },
|
|
897
898
|
},
|
|
899
|
+
{
|
|
900
|
+
name: 'chat_topics_settings_get',
|
|
901
|
+
description: 'Chat Intelligence multi-topic site setting: { themeMultiTopicEnabled (default off), themeReEvalEveryNMessages (1-50, default 5) }. Customer-writable by site supervisors.',
|
|
902
|
+
inputSchema: { type: 'object', properties: {} },
|
|
903
|
+
},
|
|
904
|
+
{
|
|
905
|
+
name: 'chat_topics_settings_set',
|
|
906
|
+
description: 'Turn multi-topic tracking on or off for this site and/or set how many new visitor messages trigger a topic re-check (1-50). Partial and idempotent: omit a field to leave it unchanged. Supervisor only.',
|
|
907
|
+
inputSchema: { type: 'object', properties: { themeMultiTopicEnabled: { type: 'boolean' }, themeReEvalEveryNMessages: { type: 'number' } } },
|
|
908
|
+
},
|
|
898
909
|
{
|
|
899
910
|
name: 'chat_topics_edit',
|
|
900
911
|
description: 'Merge, rename, retire or group topics. Applied when reports are read, so history follows the new names with zero AI cost. op = merge|rename|retire|group; from = topic names; to = target (merge/rename); group = group name (empty clears).',
|
|
@@ -1139,10 +1150,25 @@ For multiSelect dynamic options: the variable named in dynamicOptionsVariable mu
|
|
|
1139
1150
|
},
|
|
1140
1151
|
{
|
|
1141
1152
|
name: 'survey_upsert',
|
|
1142
|
-
description: 'Create (omit id or set id=0) or update (set id) a survey. body must be the full SurveyViewModel JSON shape (id, name, questions[], each question with type/text/options/required/variable/etc.). Use survey_get on an existing survey to fetch this full shape as a template rather than guessing the question schema from scratch.',
|
|
1143
|
-
inputSchema: {
|
|
1144
|
-
type: 'object',
|
|
1145
|
-
properties: { body: {
|
|
1153
|
+
description: 'Create (omit id or set id=0) or update (set id) a survey. body must be the full SurveyViewModel JSON shape (id, name, questions[], each question with type/text/options/required/variable/etc.). Use survey_get on an existing survey to fetch this full shape as a template rather than guessing the question schema from scratch. Each question also accepts isThemeAnchor (boolean, default false: this answer sets the Chat Intelligence topic) and themeMapping (string: JSON object mapping answer text to a site topic, e.g. "{\\"Pay my bill\\":\\"Billing Questions\\"}"). Both only take effect when the site has the multi-topic setting on.',
|
|
1154
|
+
inputSchema: {
|
|
1155
|
+
type: 'object',
|
|
1156
|
+
properties: { body: {
|
|
1157
|
+
type: 'object',
|
|
1158
|
+
description: 'Full SurveyViewModel JSON',
|
|
1159
|
+
properties: {
|
|
1160
|
+
questions: {
|
|
1161
|
+
type: 'array',
|
|
1162
|
+
items: {
|
|
1163
|
+
type: 'object',
|
|
1164
|
+
properties: {
|
|
1165
|
+
isThemeAnchor: { type: 'boolean', description: 'Use the answer to this question as the Chat Intelligence topic (default false)' },
|
|
1166
|
+
themeMapping: { type: 'string', description: 'JSON object string mapping answer text to a site topic; invalid or empty is stored as null' },
|
|
1167
|
+
},
|
|
1168
|
+
},
|
|
1169
|
+
},
|
|
1170
|
+
},
|
|
1171
|
+
} },
|
|
1146
1172
|
required: ['body'],
|
|
1147
1173
|
},
|
|
1148
1174
|
},
|
|
@@ -1562,6 +1588,23 @@ For multiSelect dynamic options: the variable named in dynamicOptionsVariable mu
|
|
|
1562
1588
|
},
|
|
1563
1589
|
},
|
|
1564
1590
|
|
|
1591
|
+
// ── Dynamics per-team overrides (effective = team override ?? connection default) ──
|
|
1592
|
+
{
|
|
1593
|
+
name: 'dynamics_team_overrides_get',
|
|
1594
|
+
description: 'List per-team (group) Dynamics overrides of custom field mappings and activity type for a Dynamics config, plus the config\'s own "apply to all groups" defaults. Site is resolved server-side.',
|
|
1595
|
+
inputSchema: { type: 'object', properties: { configId: { type: 'number' } }, required: ['configId'] },
|
|
1596
|
+
},
|
|
1597
|
+
{
|
|
1598
|
+
name: 'dynamics_team_overrides_set',
|
|
1599
|
+
description: 'Create/update one team\'s Dynamics override. Apply-if-present: omitted fields are unchanged; an empty string clears that field back to the default. Fields: activityLogicalName (e.g. phonecall, task), customFieldMappingsJson (JSON array string).',
|
|
1600
|
+
inputSchema: { type: 'object', properties: { configId: { type: 'number' }, teamId: { type: 'number' }, activityLogicalName: { type: 'string' }, customFieldMappingsJson: { type: 'string' } }, required: ['configId', 'teamId'] },
|
|
1601
|
+
},
|
|
1602
|
+
{
|
|
1603
|
+
name: 'dynamics_team_overrides_reset',
|
|
1604
|
+
description: 'Reset a team to the Dynamics default (removes its override).',
|
|
1605
|
+
inputSchema: { type: 'object', properties: { configId: { type: 'number' }, teamId: { type: 'number' } }, required: ['configId', 'teamId'] },
|
|
1606
|
+
},
|
|
1607
|
+
|
|
1565
1608
|
// ── Teams ─────────────────────────────────────────────────────────────────
|
|
1566
1609
|
{
|
|
1567
1610
|
name: 'team_list',
|
|
@@ -3474,6 +3517,18 @@ For multiSelect dynamic options: the variable named in dynamicOptionsVariable mu
|
|
|
3474
3517
|
},
|
|
3475
3518
|
},
|
|
3476
3519
|
|
|
3520
|
+
// -- Image Analysis (analyze_image) limits (superadmin) --
|
|
3521
|
+
{
|
|
3522
|
+
name: 'image_analysis_limits',
|
|
3523
|
+
description: 'Show a customer site Image Analysis (photo analysis) add-on limits: entitlement, monthly cap (MaxImageAnalysesPerMonth), usage this month, per-chat cap and extra-block size. Velaro admin only. To change the cap use support_set_limit with key MaxImageAnalysesPerMonth.',
|
|
3524
|
+
inputSchema: {
|
|
3525
|
+
type: 'object',
|
|
3526
|
+
properties: {
|
|
3527
|
+
siteId: { type: 'number', description: 'Site ID to check' },
|
|
3528
|
+
},
|
|
3529
|
+
required: ['siteId'],
|
|
3530
|
+
},
|
|
3531
|
+
},
|
|
3477
3532
|
// ── AI Video Avatar management (superadmin) ────────────────────────────────
|
|
3478
3533
|
{
|
|
3479
3534
|
name: 'avatar_get_config',
|
|
@@ -6398,6 +6453,7 @@ async function handleTool(name, args) {
|
|
|
6398
6453
|
qs.set('groupBy', args.groupBy ?? 'month');
|
|
6399
6454
|
if (args.deploymentId != null) qs.set('deploymentId', String(args.deploymentId));
|
|
6400
6455
|
if (args.teamId != null) qs.set('teamId', String(args.teamId));
|
|
6456
|
+
if (args.includeSecondary === true) qs.set('includeSecondary', 'true');
|
|
6401
6457
|
return await messagingGet(`/Reports/chat-intelligence/themes?${qs.toString()}`);
|
|
6402
6458
|
}
|
|
6403
6459
|
case 'chat_topics_get':
|
|
@@ -6406,6 +6462,13 @@ async function handleTool(name, args) {
|
|
|
6406
6462
|
return args.industry
|
|
6407
6463
|
? await messagingPost('/ChatIntelligenceTopics/template', { industry: args.industry })
|
|
6408
6464
|
: await messagingPut('/ChatIntelligenceTopics', { topics: args.topics ?? [] });
|
|
6465
|
+
case 'chat_topics_settings_get':
|
|
6466
|
+
return await messagingGet('/ChatIntelligenceTopics/settings');
|
|
6467
|
+
case 'chat_topics_settings_set':
|
|
6468
|
+
return await messagingPut('/ChatIntelligenceTopics/settings', {
|
|
6469
|
+
themeMultiTopicEnabled: typeof args.themeMultiTopicEnabled === 'boolean' ? args.themeMultiTopicEnabled : null,
|
|
6470
|
+
themeReEvalEveryNMessages: typeof args.themeReEvalEveryNMessages === 'number' ? args.themeReEvalEveryNMessages : null,
|
|
6471
|
+
});
|
|
6409
6472
|
case 'chat_topics_edit':
|
|
6410
6473
|
return await messagingPost('/ChatIntelligenceTopics/mapping', { ops: [{ op: args.op, from: args.from ?? [], to: args.to ?? null, group: args.group ?? null }] });
|
|
6411
6474
|
case 'chat_topics_group_suggestions':
|
|
@@ -6993,6 +7056,19 @@ async function handleTool(name, args) {
|
|
|
6993
7056
|
return await api('PUT', '/TeamsBot/PushSettings', body);
|
|
6994
7057
|
}
|
|
6995
7058
|
|
|
7059
|
+
case 'dynamics_team_overrides_get':
|
|
7060
|
+
return await api('GET', `/Dynamics/Configs/${Number(args.configId)}/team-overrides`);
|
|
7061
|
+
|
|
7062
|
+
case 'dynamics_team_overrides_set': {
|
|
7063
|
+
const body = {};
|
|
7064
|
+
for (const k of ['activityLogicalName', 'customFieldMappingsJson'])
|
|
7065
|
+
if (args[k] !== undefined) body[k] = args[k];
|
|
7066
|
+
return await api('PUT', `/Dynamics/Configs/${Number(args.configId)}/team-overrides/${Number(args.teamId)}`, body);
|
|
7067
|
+
}
|
|
7068
|
+
|
|
7069
|
+
case 'dynamics_team_overrides_reset':
|
|
7070
|
+
return await api('DELETE', `/Dynamics/Configs/${Number(args.configId)}/team-overrides/${Number(args.teamId)}`);
|
|
7071
|
+
|
|
6996
7072
|
case 'teams_channel_config_get':
|
|
6997
7073
|
return await api('GET', '/TeamsBot/ChannelConfig');
|
|
6998
7074
|
|
|
@@ -9275,6 +9351,18 @@ async function handleTool(name, args) {
|
|
|
9275
9351
|
}
|
|
9276
9352
|
|
|
9277
9353
|
// ── AI Video Avatar ────────────────────────────────────────────────────
|
|
9354
|
+
// -- Image Analysis limits --
|
|
9355
|
+
case 'image_analysis_limits': {
|
|
9356
|
+
const d = await api('GET', `/ImageAnalysisLimits/superadmin?siteId=${args.siteId}`);
|
|
9357
|
+
return [
|
|
9358
|
+
`Site ${args.siteId}: Image Analysis ${d.entitled === null ? 'entitlement unknown' : d.entitled ? 'ENTITLED' : 'NOT entitled'}`,
|
|
9359
|
+
` Monthly cap: ${d.monthlyCap} (effective ${d.effectiveMonthlyCap}, hard cap, no automatic overage)`,
|
|
9360
|
+
` Used this month: ${d.usedThisMonth === null ? 'unknown' : d.usedThisMonth}`,
|
|
9361
|
+
` Per-chat cap: ${d.perConversationCap}`,
|
|
9362
|
+
` Extra block size: ${d.blockSize}`,
|
|
9363
|
+
].join('\n');
|
|
9364
|
+
}
|
|
9365
|
+
|
|
9278
9366
|
case 'avatar_get_config': {
|
|
9279
9367
|
const data = await api('GET', `/Avatar/superadmin/status?siteId=${args.siteId}`);
|
|
9280
9368
|
if (!data.configured) return `Site ${args.siteId}: AI Video Avatar NOT configured (no saved config).`;
|