@velaro/mcp-server 0.6.71 → 0.6.72

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 (2) hide show
  1. package/package.json +1 -1
  2. package/server.js +31 -0
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@velaro/mcp-server",
3
- "version": "0.6.71",
3
+ "version": "0.6.72",
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
@@ -2787,6 +2787,20 @@ For multiSelect dynamic options: the variable named in dynamicOptionsVariable mu
2787
2787
  },
2788
2788
  },
2789
2789
  },
2790
+ {
2791
+ name: 'report_backfill',
2792
+ description: 'Backfill report data for the caller site. Preview by default (reports "would fill N", writes nothing); apply=true writes. Idempotent. type "csat" fills missing survey ratings (SurveySubmission.Rating) from existing data; it does NOT touch ticket CSAT. Site managers only; scoped to the caller site.',
2793
+ inputSchema: {
2794
+ type: 'object',
2795
+ properties: {
2796
+ type: { type: 'string', description: 'Backfill type, e.g. csat.' },
2797
+ from: { type: 'string', description: 'yyyy-MM-dd start.' },
2798
+ to: { type: 'string', description: 'yyyy-MM-dd end.' },
2799
+ apply: { type: 'boolean', description: 'true = write. Default false (preview only).' },
2800
+ },
2801
+ required: ['type', 'from', 'to'],
2802
+ },
2803
+ },
2790
2804
  // -- Staff: schedule adherence by site + role (SupportTools-style: explicit siteId, never auth-derived) --
2791
2805
  // Backend: velaro-messaging ReportsController.ScheduleAdherenceDiagnosticsAsync, gated by
2792
2806
  // IsSuperAdminAsync(allowSupport: true) -> 403 for non-staff. role=agent REQUIRES agentId (fails closed).
@@ -4305,6 +4319,12 @@ For multiSelect dynamic options: the variable named in dynamicOptionsVariable mu
4305
4319
  },
4306
4320
  },
4307
4321
 
4322
+ {
4323
+ name: 'focus_get_triage_economy_report',
4324
+ description: 'Triage Economy report for this site: conversations triaged, rules vs Haiku counts, rules hit rate, Haiku calls avoided, estimated USD saved, latency, correction rates (rules vs Haiku quality), effective mode and its source (force|site|default). Skill selection is unaffected by economy mode. siteId comes from the session, never an argument.',
4325
+ inputSchema: { type: 'object', properties: { days: { type: 'number', description: 'Lookback window in days (default 30).' } } },
4326
+ },
4327
+
4308
4328
  // Feature Discovery -- non-nag "features on other plans this account doesn't have yet" nudge
4309
4329
  // siteId is never accepted as a tool argument -- FeatureDiscoveryController derives it
4310
4330
  // server-side from the caller's auth context (MCP key / JWT site scope), same pattern as the
@@ -7855,6 +7875,12 @@ async function handleTool(name, args) {
7855
7875
  return lines.join('\n');
7856
7876
  }
7857
7877
 
7878
+ case 'report_backfill': {
7879
+ const qs = new URLSearchParams({ from: String(args.from), to: String(args.to), apply: String(args.apply === true) });
7880
+ const r = await messagingPost(`/Reports/backfill/${encodeURIComponent(args.type)}?${qs}`);
7881
+ return (args.apply === true ? 'Backfill APPLIED\n' : 'Backfill PREVIEW (nothing written; pass apply=true to write)\n') + JSON.stringify(r, null, 2);
7882
+ }
7883
+
7858
7884
  case 'support_schedule_adherence': {
7859
7885
  if (args.role === 'agent' && !args.agentId) throw new Error('agentId is required when role=agent');
7860
7886
  const qs = new URLSearchParams({ detail: 'true' });
@@ -9313,6 +9339,11 @@ async function handleTool(name, args) {
9313
9339
  return await messagingGet('/Focus/DraftPregeneration/Report');
9314
9340
 
9315
9341
  // -- Focus Inbox AI triage rules (#582 Phase B) --
9342
+ case 'focus_get_triage_economy_report': {
9343
+ const d = args.days !== undefined ? Number(args.days) : 30;
9344
+ if (!Number.isFinite(d) || d < 1) throw new Error('days must be a positive number.');
9345
+ return await messagingGet('/Focus/Triage/EconomyReport?days=' + Math.floor(d));
9346
+ }
9316
9347
  case 'focus_get_triage_rules':
9317
9348
  return await messagingGet('/Focus/triage-rules');
9318
9349
  case 'focus_update_triage_rules': {