untrap-mcp 0.4.13 → 0.4.15

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/dist/server.js CHANGED
@@ -478,7 +478,7 @@ export function createServer(mspId, scopes = ["all"]) {
478
478
  server.tool("run_sql_query", `Execute a read-only SQL query against the MSP database. Use $1 as the msp_id parameter in every WHERE clause. Only SELECT/WITH allowed. Results capped at 500 rows.
479
479
 
480
480
  SCHEMA:
481
- - ticket_lifecycle (tl): ticket_id, msp_id, company_name, summary, status, priority_name, owner_name, board_name, agreement_type, entered_date, responded_date, closed_date, resolution_minutes, response_minutes, is_closed, is_resolved, sla_status
481
+ - ticket_lifecycle (tl): ticket_id, msp_id, company_name, summary, status, priority_name, owner_name, board_name, agreement_type, created_date, responded_date, closed_date, resolution_minutes, response_minutes, is_closed, is_resolved
482
482
  - time_entries: ticket_id, msp_id, time_start, time_end, actual_hours, billable_hours, non_billable_hours, work_type, work_role, member_identifier, member_name, hourly_rate, total_cost, company, department, ticket_board
483
483
  - companies: company_id, msp_id, company_name, status, use_client
484
484
  - technicians: msp_id, technician_name, member_identifier, level, hourly_rate
@@ -22,7 +22,7 @@ export async function explainExperienceScore(mspId, params) {
22
22
  AVG(resolution_minutes)::numeric as avg_breach_resolution_min
23
23
  FROM ticket_lifecycle tl
24
24
  WHERE tl.msp_id = $1 AND LOWER(tl.company_name) = LOWER($2)
25
- AND tl.sla_status = 'breached'
25
+ AND tl.resolution_minutes > 0 AND tl.is_resolved = true
26
26
  AND tl.responded_date >= CURRENT_DATE - INTERVAL '90 days' ${tf}`, [mspId, params.clientName], mspId),
27
27
  ]);
28
28
  if (metrics.length === 0) {
@@ -6,7 +6,7 @@ export async function explainSlaVariance(mspId, params) {
6
6
  const [ticket, timeEntries] = await Promise.all([
7
7
  queryRLS(`SELECT tl.ticket_id, tl.summary, tl.priority_name, tl.owner_name, tl.company_name,
8
8
  tl.board_name, tl.status, tl.response_minutes, tl.resolution_minutes,
9
- tl.sla_status, tl.entered_date::text, tl.responded_date::text, tl.closed_date::text
9
+ tl.created_date::text, tl.responded_date::text, tl.closed_date::text
10
10
  FROM ticket_lifecycle tl
11
11
  WHERE tl.msp_id = $1 AND tl.ticket_id = $2 ${tf}`, [mspId, params.ticketId], mspId),
12
12
  queryRLS(`SELECT member_name, actual_hours, time_start::text, work_type
@@ -1 +1 @@
1
- {"version":3,"file":"compare-periods.d.ts","sourceRoot":"","sources":["../../../src/tools/composite/compare-periods.ts"],"names":[],"mappings":"AAGA,UAAU,aAAa;IACrB,MAAM,EAAE,SAAS,GAAG,iBAAiB,GAAG,MAAM,GAAG,gBAAgB,GAAG,WAAW,GAAG,eAAe,CAAC;IAClG,WAAW,EAAE,MAAM,CAAC;IACpB,SAAS,EAAE,MAAM,CAAC;IAClB,WAAW,EAAE,MAAM,CAAC;IACpB,SAAS,EAAE,MAAM,CAAC;IAClB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,cAAc,CAAC,EAAE,MAAM,CAAC;CACzB;AAuGD,wBAAsB,cAAc,CAAC,KAAK,EAAE,MAAM,EAAE,MAAM,EAAE,aAAa;;;;;;;;;;;;;;;;;;;GA0BxE"}
1
+ {"version":3,"file":"compare-periods.d.ts","sourceRoot":"","sources":["../../../src/tools/composite/compare-periods.ts"],"names":[],"mappings":"AAGA,UAAU,aAAa;IACrB,MAAM,EAAE,SAAS,GAAG,iBAAiB,GAAG,MAAM,GAAG,gBAAgB,GAAG,WAAW,GAAG,eAAe,CAAC;IAClG,WAAW,EAAE,MAAM,CAAC;IACpB,SAAS,EAAE,MAAM,CAAC;IAClB,WAAW,EAAE,MAAM,CAAC;IACpB,SAAS,EAAE,MAAM,CAAC;IAClB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,cAAc,CAAC,EAAE,MAAM,CAAC;CACzB;AAqGD,wBAAsB,cAAc,CAAC,KAAK,EAAE,MAAM,EAAE,MAAM,EAAE,aAAa;;;;;;;;;;;;;;;;;;;GA0BxE"}
@@ -41,12 +41,10 @@ async function queryPeriodMetric(mspId, metric, fromDate, toDate, clientName, te
41
41
  }
42
42
  case "sla_compliance": {
43
43
  const rows = await queryRLS(`SELECT COUNT(*)::int as total,
44
- COUNT(*) FILTER (WHERE tl.sla_status = 'met')::int as met,
45
- CASE WHEN COUNT(*) > 0
46
- THEN ROUND((COUNT(*) FILTER (WHERE tl.sla_status = 'met')::numeric / COUNT(*)) * 100, 1)
47
- ELSE 0
48
- END as compliance_pct
49
- FROM ticket_lifecycle tl ${baseWhere} AND tl.sla_status IS NOT NULL`, params, mspId);
44
+ COUNT(*) FILTER (WHERE tl.resolution_minutes IS NOT NULL AND tl.resolution_minutes > 0)::int as resolved,
45
+ 0 as met,
46
+ 0 as compliance_pct
47
+ FROM ticket_lifecycle tl ${baseWhere} AND tl.is_resolved = true`, params, mspId);
50
48
  return rows[0] ?? { total: 0, met: 0, compliance_pct: 0 };
51
49
  }
52
50
  case "sentiment": {
@@ -1 +1 @@
1
- {"version":3,"file":"compare-periods.js","sourceRoot":"","sources":["../../../src/tools/composite/compare-periods.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"compare-periods.js","sourceRoot":"","sources":["../../../src/tools/composite/compare-periods.ts"],"names":[],"mappings":"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"}
@@ -8,9 +8,9 @@ export async function getTicketDeepDive(mspId, params) {
8
8
  // Core ticket data — validate ticket belongs to allowed board
9
9
  queryRLS(`SELECT tl.ticket_id, tl.company_name, tl.summary, tl.status, tl.priority_name,
10
10
  tl.owner_name, tl.board_name, tl.agreement_type,
11
- tl.entered_date::text, tl.responded_date::text, tl.closed_date::text,
11
+ tl.created_date::text, tl.responded_date::text, tl.closed_date::text,
12
12
  tl.resolution_minutes, tl.response_minutes, tl.is_closed, tl.is_resolved,
13
- tl.sla_status
13
+ NULL as sla_status
14
14
  FROM ticket_lifecycle tl
15
15
  WHERE tl.msp_id = $1 AND tl.ticket_id = $2 ${tf}`, [mspId, params.ticketId], mspId),
16
16
  // AI analysis
@@ -9,7 +9,7 @@ export async function qbrClientDetail(mspId, params) {
9
9
  SUM(te.actual_hours * COALESCE(te.hourly_rate, 0))::numeric as cost,
10
10
  AVG(tl.resolution_minutes)::numeric as avg_resolution_min,
11
11
  AVG(tl.response_minutes)::numeric as avg_response_min,
12
- COUNT(*) FILTER (WHERE tl.sla_status = 'breached')::int as sla_breaches
12
+ 0::int as sla_breaches
13
13
  FROM ticket_lifecycle tl
14
14
  LEFT JOIN time_entries te ON te.msp_id = tl.msp_id AND te.ticket_id = tl.ticket_id
15
15
  WHERE tl.msp_id = $1 AND LOWER(tl.company_name) = LOWER($2)
@@ -1 +1 @@
1
- {"version":3,"file":"executive-summary.d.ts","sourceRoot":"","sources":["../../../src/tools/qbr/executive-summary.ts"],"names":[],"mappings":"AAGA,UAAU,iBAAiB;IACzB,QAAQ,EAAE,MAAM,CAAC;IACjB,MAAM,EAAE,MAAM,CAAC;IACf,UAAU,CAAC,EAAE,MAAM,CAAC;CACrB;AAED,wBAAsB,mBAAmB,CAAC,KAAK,EAAE,MAAM,EAAE,MAAM,EAAE,iBAAiB;;;;;;;;;;;;;;;;;;;;GAqFjF"}
1
+ {"version":3,"file":"executive-summary.d.ts","sourceRoot":"","sources":["../../../src/tools/qbr/executive-summary.ts"],"names":[],"mappings":"AAGA,UAAU,iBAAiB;IACzB,QAAQ,EAAE,MAAM,CAAC;IACjB,MAAM,EAAE,MAAM,CAAC;IACf,UAAU,CAAC,EAAE,MAAM,CAAC;CACrB;AAED,wBAAsB,mBAAmB,CAAC,KAAK,EAAE,MAAM,EAAE,MAAM,EAAE,iBAAiB;;;;;;;;;;;;;;;;;;;;GAkFjF"}
@@ -26,13 +26,10 @@ export async function qbrExecutiveSummary(mspId, params) {
26
26
  AVG(health_score)::numeric as avg_health
27
27
  FROM analytics.client_health_scores_mv
28
28
  WHERE msp_id = $1 AND period_start <= $3::date AND period_end >= $2::date`, [mspId, params.fromDate, params.toDate], mspId),
29
- queryRLS(`SELECT CASE WHEN COUNT(*) > 0
30
- THEN ROUND((COUNT(*) FILTER (WHERE tl.sla_status = 'met')::numeric / COUNT(*)) * 100, 1)
31
- ELSE 0
32
- END as compliance_pct
29
+ queryRLS(`SELECT 0 as compliance_pct, COUNT(*)::int as total_tickets
33
30
  FROM ticket_lifecycle tl
34
31
  WHERE tl.msp_id = $1 AND tl.responded_date >= $2::date AND tl.responded_date <= $3::date
35
- AND tl.sla_status IS NOT NULL ${clientFilter}${ticketFilterSQL}`, baseParams, mspId),
32
+ AND tl.is_resolved = true ${clientFilter}${ticketFilterSQL}`, baseParams, mspId),
36
33
  queryRLS(`SELECT COALESCE(SUM(cost), 0)::numeric as total_cost
37
34
  FROM analytics.client_costs_daily
38
35
  WHERE msp_id = $1 AND snapshot_date >= $2::date AND snapshot_date <= $3::date`, [mspId, params.fromDate, params.toDate], mspId),
@@ -1 +1 @@
1
- {"version":3,"file":"executive-summary.js","sourceRoot":"","sources":["../../../src/tools/qbr/executive-summary.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,4BAA4B,CAAC;AACtD,OAAO,EAAE,UAAU,EAAE,iBAAiB,EAAE,MAAM,qBAAqB,CAAC;AAQpE,MAAM,CAAC,KAAK,UAAU,mBAAmB,CAAC,KAAa,EAAE,MAAyB;IAChF,MAAM,OAAO,GAAG,MAAM,UAAU,CAAC,KAAK,CAAC,CAAC;IACxC,MAAM,eAAe,GAAG,iBAAiB,CAAC,OAAO,CAAC,CAAC;IAEnD,kEAAkE;IAClE,MAAM,UAAU,GAAc,CAAC,KAAK,EAAE,MAAM,CAAC,QAAQ,EAAE,MAAM,CAAC,MAAM,CAAC,CAAC;IACtE,IAAI,YAAY,GAAG,EAAE,CAAC;IACtB,IAAI,MAAM,CAAC,UAAU,EAAE,CAAC;QACtB,YAAY,GAAG,yCAAyC,CAAC;QACzD,UAAU,CAAC,IAAI,CAAC,MAAM,CAAC,UAAU,CAAC,CAAC;IACrC,CAAC;IAED,yBAAyB;IACzB,MAAM,CAAC,UAAU,EAAE,UAAU,EAAE,OAAO,EAAE,QAAQ,EAAE,OAAO,CAAC,GAAG,MAAM,OAAO,CAAC,GAAG,CAAC;QAC7E,QAAQ,CACN;;;;;;SAMG,YAAY,GAAG,eAAe,EAAE,EACnC,UAAU,EACV,KAAK,CACN;QACD,QAAQ,CACN;;;;;;iFAM2E,EAC3E,CAAC,KAAK,EAAE,MAAM,CAAC,QAAQ,EAAE,MAAM,CAAC,MAAM,CAAC,EACvC,KAAK,CACN;QACD,QAAQ,CACN;;;;;;yCAMmC,YAAY,GAAG,eAAe,EAAE,EACnE,UAAU,EACV,KAAK,CACN;QACD,QAAQ,CACN;;qFAE+E,EAC/E,CAAC,KAAK,EAAE,MAAM,CAAC,QAAQ,EAAE,MAAM,CAAC,MAAM,CAAC,EACvC,KAAK,CACN;QACD,QAAQ,CACN,0CAA0C,EAC1C,CAAC,KAAK,CAAC,EACP,KAAK,CACN;KACF,CAAC,CAAC;IAEH,MAAM,CAAC,GAAG,UAAU,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC;IAC9B,MAAM,CAAC,GAAG,UAAU,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC;IAC9B,MAAM,CAAC,GAAG,OAAO,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC;IAC3B,MAAM,CAAC,GAAG,QAAQ,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC;IAC5B,MAAM,OAAO,GAAI,OAAO,CAAC,CAAC,CAAC,EAAE,IAAe,IAAI,KAAK,CAAC;IAEtD,OAAO;QACL,QAAQ,EAAE,OAAO;QACjB,MAAM,EAAE,EAAE,IAAI,EAAE,MAAM,CAAC,QAAQ,EAAE,EAAE,EAAE,MAAM,CAAC,MAAM,EAAE;QACpD,WAAW,EAAE,MAAM,CAAC,UAAU,IAAI,IAAI;QACtC,WAAW,EAAE;YACX,aAAa,EAAE,CAAC,CAAC,aAAa;YAC9B,QAAQ,EAAE,CAAC,CAAC,QAAQ;YACpB,kBAAkB,EAAE,CAAC,CAAC,kBAAkB;YACxC,gBAAgB,EAAE,CAAC,CAAC,gBAAgB;YACpC,cAAc,EAAE,CAAC,CAAC,cAAc;YAChC,aAAa,EAAE,CAAC,CAAC,aAAa;YAC9B,gBAAgB,EAAE,CAAC,CAAC,QAAQ;YAC5B,eAAe,EAAE,CAAC,CAAC,OAAO;YAC1B,eAAe,EAAE,CAAC,CAAC,OAAO;YAC1B,UAAU,EAAE,CAAC,CAAC,UAAU;YACxB,UAAU,EAAE,CAAC,CAAC,UAAU;SACzB;KACF,CAAC;AACJ,CAAC"}
1
+ {"version":3,"file":"executive-summary.js","sourceRoot":"","sources":["../../../src/tools/qbr/executive-summary.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,4BAA4B,CAAC;AACtD,OAAO,EAAE,UAAU,EAAE,iBAAiB,EAAE,MAAM,qBAAqB,CAAC;AAQpE,MAAM,CAAC,KAAK,UAAU,mBAAmB,CAAC,KAAa,EAAE,MAAyB;IAChF,MAAM,OAAO,GAAG,MAAM,UAAU,CAAC,KAAK,CAAC,CAAC;IACxC,MAAM,eAAe,GAAG,iBAAiB,CAAC,OAAO,CAAC,CAAC;IAEnD,kEAAkE;IAClE,MAAM,UAAU,GAAc,CAAC,KAAK,EAAE,MAAM,CAAC,QAAQ,EAAE,MAAM,CAAC,MAAM,CAAC,CAAC;IACtE,IAAI,YAAY,GAAG,EAAE,CAAC;IACtB,IAAI,MAAM,CAAC,UAAU,EAAE,CAAC;QACtB,YAAY,GAAG,yCAAyC,CAAC;QACzD,UAAU,CAAC,IAAI,CAAC,MAAM,CAAC,UAAU,CAAC,CAAC;IACrC,CAAC;IAED,yBAAyB;IACzB,MAAM,CAAC,UAAU,EAAE,UAAU,EAAE,OAAO,EAAE,QAAQ,EAAE,OAAO,CAAC,GAAG,MAAM,OAAO,CAAC,GAAG,CAAC;QAC7E,QAAQ,CACN;;;;;;SAMG,YAAY,GAAG,eAAe,EAAE,EACnC,UAAU,EACV,KAAK,CACN;QACD,QAAQ,CACN;;;;;;iFAM2E,EAC3E,CAAC,KAAK,EAAE,MAAM,CAAC,QAAQ,EAAE,MAAM,CAAC,MAAM,CAAC,EACvC,KAAK,CACN;QACD,QAAQ,CACN;;;qCAG+B,YAAY,GAAG,eAAe,EAAE,EAC/D,UAAU,EACV,KAAK,CACN;QACD,QAAQ,CACN;;qFAE+E,EAC/E,CAAC,KAAK,EAAE,MAAM,CAAC,QAAQ,EAAE,MAAM,CAAC,MAAM,CAAC,EACvC,KAAK,CACN;QACD,QAAQ,CACN,0CAA0C,EAC1C,CAAC,KAAK,CAAC,EACP,KAAK,CACN;KACF,CAAC,CAAC;IAEH,MAAM,CAAC,GAAG,UAAU,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC;IAC9B,MAAM,CAAC,GAAG,UAAU,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC;IAC9B,MAAM,CAAC,GAAG,OAAO,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC;IAC3B,MAAM,CAAC,GAAG,QAAQ,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC;IAC5B,MAAM,OAAO,GAAI,OAAO,CAAC,CAAC,CAAC,EAAE,IAAe,IAAI,KAAK,CAAC;IAEtD,OAAO;QACL,QAAQ,EAAE,OAAO;QACjB,MAAM,EAAE,EAAE,IAAI,EAAE,MAAM,CAAC,QAAQ,EAAE,EAAE,EAAE,MAAM,CAAC,MAAM,EAAE;QACpD,WAAW,EAAE,MAAM,CAAC,UAAU,IAAI,IAAI;QACtC,WAAW,EAAE;YACX,aAAa,EAAE,CAAC,CAAC,aAAa;YAC9B,QAAQ,EAAE,CAAC,CAAC,QAAQ;YACpB,kBAAkB,EAAE,CAAC,CAAC,kBAAkB;YACxC,gBAAgB,EAAE,CAAC,CAAC,gBAAgB;YACpC,cAAc,EAAE,CAAC,CAAC,cAAc;YAChC,aAAa,EAAE,CAAC,CAAC,aAAa;YAC9B,gBAAgB,EAAE,CAAC,CAAC,QAAQ;YAC5B,eAAe,EAAE,CAAC,CAAC,OAAO;YAC1B,eAAe,EAAE,CAAC,CAAC,OAAO;YAC1B,UAAU,EAAE,CAAC,CAAC,UAAU;YACxB,UAAU,EAAE,CAAC,CAAC,UAAU;SACzB;KACF,CAAC;AACJ,CAAC"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "untrap-mcp",
3
- "version": "0.4.13",
3
+ "version": "0.4.15",
4
4
  "description": "Untrap MCP Server — AI-powered MSP analytics via Claude Desktop",
5
5
  "type": "module",
6
6
  "main": "dist/index.js",