@goxtechnologies/connectwise-psa-mcp 1.3.0 → 1.4.2

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 (58) hide show
  1. package/data/reports.json +29 -0
  2. package/dist/index.js +4 -0
  3. package/dist/index.js.map +1 -1
  4. package/dist/operations/analytics-extended.d.ts.map +1 -1
  5. package/dist/operations/analytics-extended.js +15 -4
  6. package/dist/operations/analytics-extended.js.map +1 -1
  7. package/dist/operations/analytics-msp-schedule.js +12 -2
  8. package/dist/operations/analytics-msp-schedule.js.map +1 -1
  9. package/dist/operations/analytics-msp-time-entry.d.ts +68 -0
  10. package/dist/operations/analytics-msp-time-entry.d.ts.map +1 -0
  11. package/dist/operations/analytics-msp-time-entry.js +235 -0
  12. package/dist/operations/analytics-msp-time-entry.js.map +1 -0
  13. package/dist/operations/analytics-msp-time.js +27 -8
  14. package/dist/operations/analytics-msp-time.js.map +1 -1
  15. package/dist/operations/analytics.d.ts.map +1 -1
  16. package/dist/operations/analytics.js +2 -0
  17. package/dist/operations/analytics.js.map +1 -1
  18. package/dist/operations/registry.d.ts.map +1 -1
  19. package/dist/operations/registry.js +1 -0
  20. package/dist/operations/registry.js.map +1 -1
  21. package/dist/scrapers/index.d.ts +4 -0
  22. package/dist/scrapers/index.d.ts.map +1 -0
  23. package/dist/scrapers/index.js +10 -0
  24. package/dist/scrapers/index.js.map +1 -0
  25. package/dist/scrapers/reports.d.ts +3 -0
  26. package/dist/scrapers/reports.d.ts.map +1 -0
  27. package/dist/scrapers/reports.js +443 -0
  28. package/dist/scrapers/reports.js.map +1 -0
  29. package/dist/services/load-env.d.ts.map +1 -1
  30. package/dist/services/load-env.js +11 -1
  31. package/dist/services/load-env.js.map +1 -1
  32. package/dist/services/report-cache.d.ts +16 -0
  33. package/dist/services/report-cache.d.ts.map +1 -0
  34. package/dist/services/report-cache.js +230 -0
  35. package/dist/services/report-cache.js.map +1 -0
  36. package/dist/services/report-config.d.ts +28 -0
  37. package/dist/services/report-config.d.ts.map +1 -0
  38. package/dist/services/report-config.js +127 -0
  39. package/dist/services/report-config.js.map +1 -0
  40. package/dist/services/totp.d.ts +27 -0
  41. package/dist/services/totp.d.ts.map +1 -0
  42. package/dist/services/totp.js +76 -0
  43. package/dist/services/totp.js.map +1 -0
  44. package/dist/services/web-scraper.d.ts +76 -0
  45. package/dist/services/web-scraper.d.ts.map +1 -0
  46. package/dist/services/web-scraper.js +435 -0
  47. package/dist/services/web-scraper.js.map +1 -0
  48. package/dist/tools/reports.d.ts +9 -0
  49. package/dist/tools/reports.d.ts.map +1 -0
  50. package/dist/tools/reports.js +388 -0
  51. package/dist/tools/reports.js.map +1 -0
  52. package/dist/tools/validation.js +2 -2
  53. package/dist/tools/validation.js.map +1 -1
  54. package/dist/types/reports.d.ts +87 -0
  55. package/dist/types/reports.d.ts.map +1 -0
  56. package/dist/types/reports.js +3 -0
  57. package/dist/types/reports.js.map +1 -0
  58. package/package.json +18 -4
@@ -0,0 +1,87 @@
1
+ export interface ReportNavigation {
2
+ strategy: 'menu' | 'url';
3
+ path?: string[];
4
+ url?: string;
5
+ }
6
+ export interface ReportParameter {
7
+ name: string;
8
+ type: 'string' | 'date' | 'number' | 'boolean';
9
+ required: boolean;
10
+ selector: string;
11
+ default?: string;
12
+ }
13
+ export interface ExtractionConfig {
14
+ strategy: 'xhr_first' | 'export' | 'dom';
15
+ xhrPattern?: string;
16
+ exportSelector?: string;
17
+ tableSelector?: string;
18
+ waitFor: string;
19
+ }
20
+ export interface ReportCacheConfig {
21
+ ttlMinutes: number;
22
+ keepHistory: boolean;
23
+ }
24
+ export interface ReportDefinition {
25
+ id: string;
26
+ name: string;
27
+ module: string;
28
+ type: 'standard' | 'custom';
29
+ navigation: ReportNavigation;
30
+ url?: string;
31
+ parameters: ReportParameter[];
32
+ extraction: ExtractionConfig;
33
+ cache: ReportCacheConfig;
34
+ }
35
+ export interface ReportConfig {
36
+ reports: ReportDefinition[];
37
+ }
38
+ export interface ReportData {
39
+ columns: string[];
40
+ rows: Record<string, string | number | null>[];
41
+ }
42
+ export interface ReportResult {
43
+ report_id: string;
44
+ report_name: string;
45
+ columns: string[];
46
+ rows: Record<string, string | number | null>[];
47
+ source: 'xhr' | 'export' | 'dom' | 'cache';
48
+ fetched_at: string;
49
+ cached: boolean;
50
+ params: Record<string, unknown>;
51
+ }
52
+ export interface CachedReport {
53
+ report_id: string;
54
+ params_hash: string;
55
+ params_json: string;
56
+ data: ReportData;
57
+ fetched_at: number;
58
+ source: 'xhr' | 'export' | 'dom';
59
+ }
60
+ export interface HistoryEntry {
61
+ id: number;
62
+ report_id: string;
63
+ params_hash: string;
64
+ params_json: string;
65
+ data: ReportData;
66
+ fetched_at: number;
67
+ source: string;
68
+ }
69
+ export interface CalibrationEntry {
70
+ id: number;
71
+ report_id: string;
72
+ params_hash: string;
73
+ params_json: string;
74
+ web_value: string;
75
+ api_value: string;
76
+ match_type: 'scalar' | 'row_count' | 'full_compare';
77
+ drift: number | null;
78
+ logged_at: number;
79
+ }
80
+ export interface LoginStep {
81
+ name: string;
82
+ detect: string;
83
+ timeout?: number;
84
+ }
85
+ export type ScraperParams = Record<string, unknown>;
86
+ export type ScraperHandler = (params: ScraperParams, reportDef: ReportDefinition) => Promise<ReportData>;
87
+ //# sourceMappingURL=reports.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"reports.d.ts","sourceRoot":"","sources":["../../src/types/reports.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,3 @@
1
+ // ConnectWise PSA MCP Server — Web Report Types
2
+ export {};
3
+ //# sourceMappingURL=reports.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"reports.js","sourceRoot":"","sources":["../../src/types/reports.ts"],"names":[],"mappings":"AAAA,gDAAgD"}
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "@goxtechnologies/connectwise-psa-mcp",
3
- "version": "1.3.0",
4
- "description": "ConnectWise PSA MCP server — 22 tools, 509 named operations, 72 analytics handlers",
3
+ "version": "1.4.2",
4
+ "description": "ConnectWise PSA MCP server — 25 tools, 510 named operations, 73 analytics handlers, optional web report scraping",
5
5
  "type": "module",
6
6
  "main": "dist/index.js",
7
7
  "bin": {
@@ -21,18 +21,32 @@
21
21
  "test:validation": "node --import tsx --test tests/unit/validation.test.ts",
22
22
  "test:db": "node --import tsx --test tests/unit/database.test.ts",
23
23
  "test:integration": "node --import tsx --test tests/integration/*.test.ts",
24
- "test:mcp": "node --import tsx --test tests/integration/mcp-protocol.test.ts"
24
+ "test:mcp": "node --import tsx --test tests/integration/mcp-protocol.test.ts",
25
+ "test:totp": "node --import tsx --test tests/unit/totp.test.ts",
26
+ "test:cache": "node --import tsx --test tests/unit/report-cache.test.ts",
27
+ "test:config": "node --import tsx --test tests/unit/report-config.test.ts",
28
+ "test:web": "node --import tsx --test tests/integration/web-scraper.test.ts",
29
+ "test:time-entry": "node --import tsx --test tests/unit/time-entry-prepare.test.ts"
25
30
  },
26
31
  "dependencies": {
27
32
  "@modelcontextprotocol/sdk": "^1.12.1",
28
- "better-sqlite3": "^11.0.0"
33
+ "better-sqlite3": "^11.10.0"
29
34
  },
30
35
  "devDependencies": {
31
36
  "@types/better-sqlite3": "^7.6.0",
32
37
  "@types/node": "^22.0.0",
38
+ "playwright": "^1.52.0",
33
39
  "tsx": "^4.21.0",
34
40
  "typescript": "^5.7.0"
35
41
  },
42
+ "peerDependencies": {
43
+ "playwright": ">=1.40.0"
44
+ },
45
+ "peerDependenciesMeta": {
46
+ "playwright": {
47
+ "optional": true
48
+ }
49
+ },
36
50
  "engines": {
37
51
  "node": ">=18.0.0"
38
52
  },