@velaro/mcp-server 0.6.87 → 0.6.89

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 (3) hide show
  1. package/README.md +2 -0
  2. package/package.json +1 -1
  3. package/server.js +29 -1
package/README.md CHANGED
@@ -136,6 +136,8 @@ This works with any MCP client that supports HTTP/SSE transport — including Cl
136
136
  | Tool | What It Does |
137
137
  |------|-------------|
138
138
  | `agent_list` | List agents with availability status; filter by team |
139
+ | `linked_identity_list` | List the Google / Microsoft / company sign-in methods linked to the site's users (for offboarding) |
140
+ | `linked_identity_unlink` | Remove one linked sign-in method by link id (site-scoped, audited) |
139
141
  | `team_list` | List all teams for this site |
140
142
  | `routing_list` | List all routing rules ordered by priority |
141
143
  | `routing_get` | Get routing rule details including rule and value JSON |
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@velaro/mcp-server",
3
- "version": "0.6.87",
3
+ "version": "0.6.89",
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
@@ -303,6 +303,7 @@ const MESSAGING_ADMIN_TOOLS = new Set([
303
303
  'crm_mobile_fields_get', 'crm_mobile_fields_set',
304
304
  'agent_list', 'team_list', 'conversation_list', 'conversation_get', 'conversation_search',
305
305
  'contact_search', 'contact_get', 'routing_list', 'routing_get', 'site_info',
306
+ 'linked_identity_list', 'linked_identity_unlink',
306
307
  'ms_bookings_cancel_appointment', 'ms_bookings_check_availability_range', 'ms_bookings_reschedule_appointment',
307
308
  'outlook_calendar_cancel', 'outlook_calendar_get_available_range',
308
309
  ]);
@@ -1791,6 +1792,20 @@ For multiSelect dynamic options: the variable named in dynamicOptionsVariable mu
1791
1792
  description: 'Get site settings, active channels, subscription features, and counts of agents, teams, bots, and active workflows.',
1792
1793
  inputSchema: { type: 'object', properties: {}, required: [] },
1793
1794
  },
1795
+ {
1796
+ name: 'linked_identity_list',
1797
+ description: 'List the Google / Microsoft / company sign-in methods linked to this site\'s users (who linked what, when, and when it was last used). Use during offboarding: disabling a person\'s Velaro account does not stop a linked Google sign-in. Returns a link id per row, never the identity\'s own ids.',
1798
+ inputSchema: { type: 'object', properties: {}, required: [] },
1799
+ },
1800
+ {
1801
+ name: 'linked_identity_unlink',
1802
+ description: 'Remove one linked sign-in method by link id (from linked_identity_list). Site-scoped and audited. The person keeps any other way they can sign in; this only removes that one.',
1803
+ inputSchema: {
1804
+ type: 'object',
1805
+ properties: { id: { type: 'number', description: 'Link id from linked_identity_list' } },
1806
+ required: ['id'],
1807
+ },
1808
+ },
1794
1809
 
1795
1810
  // ── Live Operations ───────────────────────────────────────────────────────
1796
1811
  {
@@ -3141,6 +3156,8 @@ For multiSelect dynamic options: the variable named in dynamicOptionsVariable mu
3141
3156
  voiceId: { type: 'string', description: 'ElevenLabs voice ID override. Omit to use the site default.' },
3142
3157
  showCallMeOption: { type: 'boolean', description: 'Show the "Call me instead" option (requires EnableClickToCall).' },
3143
3158
  callbackConfirmWindowMinutes: { type: 'number', description: 'Minutes to confirm a callback request before it expires. Default 10.' },
3159
+ maxAvatarMinutesPerMonth: { type: 'number', description: 'Monthly avatar video minutes cap for the site. Whole number 1-100000; never unlimited (0/negative rejected).' },
3160
+ maxAvatarTtsChars: { type: 'number', description: 'Monthly avatar TTS character cap (avatar_tts_chars) for the site. Whole number 1-100000000; never unlimited (0/negative rejected). Overage pricing is a platform-wide ladder, not per site.' },
3144
3161
  },
3145
3162
  required: ['siteId'],
3146
3163
  },
@@ -6663,6 +6680,12 @@ async function handleTool(name, args) {
6663
6680
  case 'site_info':
6664
6681
  return await rpc('site_info', args);
6665
6682
 
6683
+ case 'linked_identity_list':
6684
+ return await rpc('linked_identity_list', args);
6685
+
6686
+ case 'linked_identity_unlink':
6687
+ return await rpc('linked_identity_unlink', args);
6688
+
6666
6689
  case 'conversion_list_goals': {
6667
6690
  const goals = await api('GET', '/Conversions/goals');
6668
6691
  if (!Array.isArray(goals) || !goals.length) return 'No conversion goals configured.';
@@ -8382,9 +8405,14 @@ async function handleTool(name, args) {
8382
8405
  if (args.enabled !== undefined) body.enabled = args.enabled;
8383
8406
  if (args.showCallMeOption !== undefined) body.showCallMeOption = args.showCallMeOption;
8384
8407
  if (args.callbackConfirmWindowMinutes !== undefined) body.callbackConfirmWindowMinutes = args.callbackConfirmWindowMinutes;
8408
+ for (const [arg, max] of [['maxAvatarMinutesPerMonth', 100000], ['maxAvatarTtsChars', 100000000]]) {
8409
+ if (args[arg] === undefined) continue;
8410
+ if (!Number.isInteger(args[arg]) || args[arg] < 1 || args[arg] > max) throw new Error(`${arg} must be a whole number between 1 and ${max} (never unlimited).`);
8411
+ body[arg] = args[arg];
8412
+ }
8385
8413
  const res = await api('POST', `/Avatar/superadmin/config?siteId=${args.siteId}`, body);
8386
8414
  if (!res?.success) throw new Error(res?.error || 'Configure failed');
8387
- return `✓ AI Video Avatar updated for site ${args.siteId}. Provider: ${res.providerSlug}, enabled: ${res.enabled}`;
8415
+ return `✓ AI Video Avatar updated for site ${args.siteId}. Provider: ${res.providerSlug}, enabled: ${res.enabled}, maxAvatarMinutesPerMonth: ${res.maxAvatarMinutesPerMonth ?? 'n/a'}, maxAvatarTtsChars: ${res.maxAvatarTtsChars ?? 'n/a'}`;
8388
8416
  }
8389
8417
 
8390
8418
  case 'avatar_list_library':