@goxtechnologies/connectwise-psa-mcp 1.1.0

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 (147) hide show
  1. package/data/connectwise_api.db +0 -0
  2. package/data/manage.json +298179 -0
  3. package/dist/index.d.ts +10 -0
  4. package/dist/index.d.ts.map +1 -0
  5. package/dist/index.js +116 -0
  6. package/dist/index.js.map +1 -0
  7. package/dist/operations/analytics-extended.d.ts +6 -0
  8. package/dist/operations/analytics-extended.d.ts.map +1 -0
  9. package/dist/operations/analytics-extended.js +825 -0
  10. package/dist/operations/analytics-extended.js.map +1 -0
  11. package/dist/operations/analytics-msp-assets.d.ts +3 -0
  12. package/dist/operations/analytics-msp-assets.d.ts.map +1 -0
  13. package/dist/operations/analytics-msp-assets.js +180 -0
  14. package/dist/operations/analytics-msp-assets.js.map +1 -0
  15. package/dist/operations/analytics-msp-clients.d.ts +3 -0
  16. package/dist/operations/analytics-msp-clients.d.ts.map +1 -0
  17. package/dist/operations/analytics-msp-clients.js +198 -0
  18. package/dist/operations/analytics-msp-clients.js.map +1 -0
  19. package/dist/operations/analytics-msp-comms.d.ts +3 -0
  20. package/dist/operations/analytics-msp-comms.d.ts.map +1 -0
  21. package/dist/operations/analytics-msp-comms.js +127 -0
  22. package/dist/operations/analytics-msp-comms.js.map +1 -0
  23. package/dist/operations/analytics-msp-contracts.d.ts +3 -0
  24. package/dist/operations/analytics-msp-contracts.d.ts.map +1 -0
  25. package/dist/operations/analytics-msp-contracts.js +91 -0
  26. package/dist/operations/analytics-msp-contracts.js.map +1 -0
  27. package/dist/operations/analytics-msp-financial.d.ts +3 -0
  28. package/dist/operations/analytics-msp-financial.d.ts.map +1 -0
  29. package/dist/operations/analytics-msp-financial.js +300 -0
  30. package/dist/operations/analytics-msp-financial.js.map +1 -0
  31. package/dist/operations/analytics-msp-procurement.d.ts +3 -0
  32. package/dist/operations/analytics-msp-procurement.d.ts.map +1 -0
  33. package/dist/operations/analytics-msp-procurement.js +78 -0
  34. package/dist/operations/analytics-msp-procurement.js.map +1 -0
  35. package/dist/operations/analytics-msp-projects.d.ts +3 -0
  36. package/dist/operations/analytics-msp-projects.d.ts.map +1 -0
  37. package/dist/operations/analytics-msp-projects.js +190 -0
  38. package/dist/operations/analytics-msp-projects.js.map +1 -0
  39. package/dist/operations/analytics-msp-sales.d.ts +3 -0
  40. package/dist/operations/analytics-msp-sales.d.ts.map +1 -0
  41. package/dist/operations/analytics-msp-sales.js +99 -0
  42. package/dist/operations/analytics-msp-sales.js.map +1 -0
  43. package/dist/operations/analytics-msp-schedule.d.ts +3 -0
  44. package/dist/operations/analytics-msp-schedule.d.ts.map +1 -0
  45. package/dist/operations/analytics-msp-schedule.js +339 -0
  46. package/dist/operations/analytics-msp-schedule.js.map +1 -0
  47. package/dist/operations/analytics-msp-team.d.ts +3 -0
  48. package/dist/operations/analytics-msp-team.d.ts.map +1 -0
  49. package/dist/operations/analytics-msp-team.js +195 -0
  50. package/dist/operations/analytics-msp-team.js.map +1 -0
  51. package/dist/operations/analytics-msp-tickets.d.ts +3 -0
  52. package/dist/operations/analytics-msp-tickets.d.ts.map +1 -0
  53. package/dist/operations/analytics-msp-tickets.js +578 -0
  54. package/dist/operations/analytics-msp-tickets.js.map +1 -0
  55. package/dist/operations/analytics-msp-time.d.ts +3 -0
  56. package/dist/operations/analytics-msp-time.d.ts.map +1 -0
  57. package/dist/operations/analytics-msp-time.js +485 -0
  58. package/dist/operations/analytics-msp-time.js.map +1 -0
  59. package/dist/operations/analytics-msp-utils.d.ts +49 -0
  60. package/dist/operations/analytics-msp-utils.d.ts.map +1 -0
  61. package/dist/operations/analytics-msp-utils.js +157 -0
  62. package/dist/operations/analytics-msp-utils.js.map +1 -0
  63. package/dist/operations/analytics.d.ts +9 -0
  64. package/dist/operations/analytics.d.ts.map +1 -0
  65. package/dist/operations/analytics.js +742 -0
  66. package/dist/operations/analytics.js.map +1 -0
  67. package/dist/operations/executor.d.ts +10 -0
  68. package/dist/operations/executor.d.ts.map +1 -0
  69. package/dist/operations/executor.js +243 -0
  70. package/dist/operations/executor.js.map +1 -0
  71. package/dist/operations/registry.d.ts +16 -0
  72. package/dist/operations/registry.d.ts.map +1 -0
  73. package/dist/operations/registry.js +847 -0
  74. package/dist/operations/registry.js.map +1 -0
  75. package/dist/services/api-database.d.ts +38 -0
  76. package/dist/services/api-database.d.ts.map +1 -0
  77. package/dist/services/api-database.js +191 -0
  78. package/dist/services/api-database.js.map +1 -0
  79. package/dist/services/cache.d.ts +12 -0
  80. package/dist/services/cache.d.ts.map +1 -0
  81. package/dist/services/cache.js +32 -0
  82. package/dist/services/cache.js.map +1 -0
  83. package/dist/services/connectwise-api.d.ts +43 -0
  84. package/dist/services/connectwise-api.d.ts.map +1 -0
  85. package/dist/services/connectwise-api.js +198 -0
  86. package/dist/services/connectwise-api.js.map +1 -0
  87. package/dist/services/db-builder.d.ts +11 -0
  88. package/dist/services/db-builder.d.ts.map +1 -0
  89. package/dist/services/db-builder.js +237 -0
  90. package/dist/services/db-builder.js.map +1 -0
  91. package/dist/services/fast-memory.d.ts +39 -0
  92. package/dist/services/fast-memory.d.ts.map +1 -0
  93. package/dist/services/fast-memory.js +147 -0
  94. package/dist/services/fast-memory.js.map +1 -0
  95. package/dist/services/load-env.d.ts +15 -0
  96. package/dist/services/load-env.d.ts.map +1 -0
  97. package/dist/services/load-env.js +59 -0
  98. package/dist/services/load-env.js.map +1 -0
  99. package/dist/tools/batch.d.ts +9 -0
  100. package/dist/tools/batch.d.ts.map +1 -0
  101. package/dist/tools/batch.js +159 -0
  102. package/dist/tools/batch.js.map +1 -0
  103. package/dist/tools/composite.d.ts +9 -0
  104. package/dist/tools/composite.d.ts.map +1 -0
  105. package/dist/tools/composite.js +353 -0
  106. package/dist/tools/composite.js.map +1 -0
  107. package/dist/tools/discovery.d.ts +9 -0
  108. package/dist/tools/discovery.d.ts.map +1 -0
  109. package/dist/tools/discovery.js +245 -0
  110. package/dist/tools/discovery.js.map +1 -0
  111. package/dist/tools/execution.d.ts +9 -0
  112. package/dist/tools/execution.d.ts.map +1 -0
  113. package/dist/tools/execution.js +130 -0
  114. package/dist/tools/execution.js.map +1 -0
  115. package/dist/tools/memory.d.ts +9 -0
  116. package/dist/tools/memory.d.ts.map +1 -0
  117. package/dist/tools/memory.js +152 -0
  118. package/dist/tools/memory.js.map +1 -0
  119. package/dist/tools/operations.d.ts +9 -0
  120. package/dist/tools/operations.d.ts.map +1 -0
  121. package/dist/tools/operations.js +214 -0
  122. package/dist/tools/operations.js.map +1 -0
  123. package/dist/tools/pagination.d.ts +9 -0
  124. package/dist/tools/pagination.d.ts.map +1 -0
  125. package/dist/tools/pagination.js +133 -0
  126. package/dist/tools/pagination.js.map +1 -0
  127. package/dist/tools/validation.d.ts +9 -0
  128. package/dist/tools/validation.d.ts.map +1 -0
  129. package/dist/tools/validation.js +705 -0
  130. package/dist/tools/validation.js.map +1 -0
  131. package/dist/types/index.d.ts +145 -0
  132. package/dist/types/index.d.ts.map +1 -0
  133. package/dist/types/index.js +3 -0
  134. package/dist/types/index.js.map +1 -0
  135. package/dist/types/operations.d.ts +30 -0
  136. package/dist/types/operations.d.ts.map +1 -0
  137. package/dist/types/operations.js +3 -0
  138. package/dist/types/operations.js.map +1 -0
  139. package/dist/utils/conditions.d.ts +20 -0
  140. package/dist/utils/conditions.d.ts.map +1 -0
  141. package/dist/utils/conditions.js +78 -0
  142. package/dist/utils/conditions.js.map +1 -0
  143. package/dist/utils/formatters.d.ts +35 -0
  144. package/dist/utils/formatters.d.ts.map +1 -0
  145. package/dist/utils/formatters.js +337 -0
  146. package/dist/utils/formatters.js.map +1 -0
  147. package/package.json +46 -0
@@ -0,0 +1 @@
1
+ {"version":3,"file":"operations.d.ts","sourceRoot":"","sources":["../../src/tools/operations.ts"],"names":[],"mappings":"AAMA,OAAO,EAAE,IAAI,EAAE,MAAM,oCAAoC,CAAC;AAc1D,eAAO,MAAM,eAAe,EAAE,IAAI,EA4DjC,CAAC;AAwGF,wBAAsB,oBAAoB,CACxC,QAAQ,EAAE,MAAM,EAChB,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAC5B,OAAO,CAAC;IAAE,OAAO,EAAE,KAAK,CAAC;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,MAAM,CAAA;KAAE,CAAC,CAAA;CAAE,CAAC,CA6D7D"}
@@ -0,0 +1,214 @@
1
+ // ConnectWise PSA MCP Server — Named Operations Tools
2
+ //
3
+ // Two tools that expose the 457-operation registry:
4
+ // cw_operation — execute a named operation
5
+ // cw_list_operations — browse/search available operations
6
+ import { executeOperation } from '../operations/executor.js';
7
+ import { getOperation, listOperations, categories, operations, } from '../operations/registry.js';
8
+ // ---------------------------------------------------------------------------
9
+ // Tool definitions
10
+ // ---------------------------------------------------------------------------
11
+ export const operationsTools = [
12
+ {
13
+ name: 'cw_operation',
14
+ description: 'Execute a named ConnectWise PSA operation. There are 457 pre-built operations ' +
15
+ 'covering tickets, companies, contacts, agreements, time entries, projects, ' +
16
+ 'procurement, scheduling, analytics, and more. Use cw_list_operations to ' +
17
+ 'discover available operations. Returns pre-formatted markdown.',
18
+ inputSchema: {
19
+ type: 'object',
20
+ properties: {
21
+ operation: {
22
+ type: 'string',
23
+ description: 'Operation name, e.g. "list_open_tickets", "get_ticket", "company_360_view". ' +
24
+ 'Use cw_list_operations to discover available names.',
25
+ },
26
+ params: {
27
+ type: 'object',
28
+ description: 'Operation parameters as key/value pairs. Common params: ' +
29
+ '"id" (record ID), "conditions" (CW condition string), ' +
30
+ '"fields" (field selection), "page_size", "max_items", ' +
31
+ '"body" (JSON for write ops). Use cw_list_operations with ' +
32
+ 'the operation name to see all accepted params.',
33
+ additionalProperties: true,
34
+ },
35
+ },
36
+ required: ['operation'],
37
+ },
38
+ },
39
+ {
40
+ name: 'cw_list_operations',
41
+ description: 'Browse, search, and get details about the 457 named ConnectWise PSA operations. ' +
42
+ 'Use without parameters to see all categories. Filter by category, tier, or search term. ' +
43
+ 'Pass an operation name to get full details including parameters.',
44
+ inputSchema: {
45
+ type: 'object',
46
+ properties: {
47
+ operation: {
48
+ type: 'string',
49
+ description: 'Get full details for a specific operation (name, params, description).',
50
+ },
51
+ category: {
52
+ type: 'string',
53
+ description: 'Filter by category name (partial match). Example: "ticket", "agreement", "analytics".',
54
+ },
55
+ tier: {
56
+ type: 'string',
57
+ enum: ['free', 'pro'],
58
+ description: 'Filter by tier: "free" (read-only) or "pro" (write + analytics).',
59
+ },
60
+ search: {
61
+ type: 'string',
62
+ description: 'Search operations by name or description keyword.',
63
+ },
64
+ },
65
+ },
66
+ },
67
+ ];
68
+ // ---------------------------------------------------------------------------
69
+ // Formatting helpers
70
+ // ---------------------------------------------------------------------------
71
+ function formatOperationDetail(op) {
72
+ const lines = [
73
+ `## ${op.name}`,
74
+ '',
75
+ `**${op.description}**`,
76
+ '',
77
+ `| Property | Value |`,
78
+ `|----------|-------|`,
79
+ `| Category | ${op.category} |`,
80
+ `| Tier | ${op.tier} |`,
81
+ `| Type | ${op.type} |`,
82
+ `| Method | ${op.method} |`,
83
+ `| Path | \`${op.path}\` |`,
84
+ `| Paginated | ${op.paginate ? 'Yes' : 'No'} |`,
85
+ `| Confirm Required | ${op.confirmRequired ? 'Yes' : 'No'} |`,
86
+ ];
87
+ if (op.defaultConditions) {
88
+ lines.push(`| Default Conditions | \`${op.defaultConditions}\` |`);
89
+ }
90
+ if (op.defaultFields) {
91
+ lines.push(`| Default Fields | \`${op.defaultFields}\` |`);
92
+ }
93
+ const paramEntries = Object.entries(op.params);
94
+ if (paramEntries.length > 0) {
95
+ lines.push('');
96
+ lines.push('### Parameters');
97
+ lines.push('| Name | Type | Required | Description |');
98
+ lines.push('|------|------|----------|-------------|');
99
+ for (const [key, p] of paramEntries) {
100
+ lines.push(`| ${key} | ${p.type} | ${p.required ? 'Yes' : 'No'} | ${p.description} |`);
101
+ }
102
+ }
103
+ // Common additional params
104
+ lines.push('');
105
+ lines.push('### Common Optional Parameters');
106
+ lines.push('All operations also accept:');
107
+ if (op.paginate) {
108
+ lines.push('- `page_size` — results per page (default: 250)');
109
+ lines.push('- `max_items` — max total results (default: 1000)');
110
+ lines.push('- `page` — specific page number');
111
+ }
112
+ if (op.method === 'GET') {
113
+ lines.push('- `conditions` — additional CW conditions (merged with defaults)');
114
+ lines.push('- `fields` — override field selection');
115
+ lines.push('- `orderBy` — sort order');
116
+ }
117
+ return lines.join('\n');
118
+ }
119
+ function formatCategoryOverview() {
120
+ const lines = [
121
+ `## ConnectWise PSA Named Operations (${operations.length} total)`,
122
+ '',
123
+ `| Category | Operations | Tier |`,
124
+ `|----------|-----------|------|`,
125
+ ];
126
+ for (const cat of categories) {
127
+ const ops = listOperations({ category: cat });
128
+ const tiers = [...new Set(ops.map(o => o.tier))];
129
+ lines.push(`| ${cat} | ${ops.length} | ${tiers.join(', ')} |`);
130
+ }
131
+ lines.push('');
132
+ lines.push('Use `cw_list_operations` with `category`, `tier`, or `search` to filter.');
133
+ lines.push('Use `cw_list_operations` with `operation` to get full details for one operation.');
134
+ return lines.join('\n');
135
+ }
136
+ function formatOperationList(ops, label) {
137
+ if (ops.length === 0)
138
+ return 'No operations found matching your criteria.';
139
+ const lines = [
140
+ `## ${label} (${ops.length} operations)`,
141
+ '',
142
+ '| Operation | Category | Tier | Description |',
143
+ '|-----------|----------|------|-------------|',
144
+ ];
145
+ for (const op of ops.slice(0, 100)) {
146
+ lines.push(`| ${op.name} | ${op.category} | ${op.tier} | ${op.description} |`);
147
+ }
148
+ if (ops.length > 100) {
149
+ lines.push(`\n*... and ${ops.length - 100} more. Narrow your search.*`);
150
+ }
151
+ return lines.join('\n');
152
+ }
153
+ // ---------------------------------------------------------------------------
154
+ // Handler
155
+ // ---------------------------------------------------------------------------
156
+ export async function handleOperationsTool(toolName, args) {
157
+ let text;
158
+ switch (toolName) {
159
+ case 'cw_operation': {
160
+ const opName = String(args['operation'] ?? '').trim();
161
+ if (!opName) {
162
+ text = 'Error: "operation" parameter is required. Use cw_list_operations to browse available operations.';
163
+ break;
164
+ }
165
+ const params = (args['params'] ?? {});
166
+ const result = await executeOperation(opName, params);
167
+ text = result.text;
168
+ break;
169
+ }
170
+ case 'cw_list_operations': {
171
+ // If a specific operation is requested, show its details
172
+ const opName = args['operation'] ? String(args['operation']).trim() : undefined;
173
+ if (opName) {
174
+ const op = getOperation(opName);
175
+ if (op) {
176
+ text = formatOperationDetail(op);
177
+ }
178
+ else {
179
+ // Try fuzzy search
180
+ const matches = listOperations({ search: opName });
181
+ if (matches.length > 0) {
182
+ text = `Operation "${opName}" not found. Did you mean:\n\n` +
183
+ formatOperationList(matches.slice(0, 10), 'Similar Operations');
184
+ }
185
+ else {
186
+ text = `Operation "${opName}" not found. Use cw_list_operations to browse all operations.`;
187
+ }
188
+ }
189
+ break;
190
+ }
191
+ // Filter operations
192
+ const category = args['category'] ? String(args['category']) : undefined;
193
+ const tier = args['tier'];
194
+ const search = args['search'] ? String(args['search']) : undefined;
195
+ if (!category && !tier && !search) {
196
+ text = formatCategoryOverview();
197
+ }
198
+ else {
199
+ const results = listOperations({ category, tier, search });
200
+ const label = [
201
+ search ? `Search: "${search}"` : '',
202
+ category ? `Category: "${category}"` : '',
203
+ tier ? `Tier: ${tier}` : '',
204
+ ].filter(Boolean).join(' | ');
205
+ text = formatOperationList(results, label || 'All Operations');
206
+ }
207
+ break;
208
+ }
209
+ default:
210
+ text = `Unknown operations tool: ${toolName}`;
211
+ }
212
+ return { content: [{ type: 'text', text }] };
213
+ }
214
+ //# sourceMappingURL=operations.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"operations.js","sourceRoot":"","sources":["../../src/tools/operations.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,9 @@
1
+ import { Tool } from '@modelcontextprotocol/sdk/types.js';
2
+ export declare const paginationTools: Tool[];
3
+ export declare function handlePaginationTool(toolName: string, args: Record<string, unknown>): Promise<{
4
+ content: Array<{
5
+ type: 'text';
6
+ text: string;
7
+ }>;
8
+ }>;
9
+ //# sourceMappingURL=pagination.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"pagination.d.ts","sourceRoot":"","sources":["../../src/tools/pagination.ts"],"names":[],"mappings":"AAIA,OAAO,EAAE,IAAI,EAAE,MAAM,oCAAoC,CAAC;AAS1D,eAAO,MAAM,eAAe,EAAE,IAAI,EA8DjC,CAAC;AAyCF,wBAAsB,oBAAoB,CACxC,QAAQ,EAAE,MAAM,EAChB,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAC5B,OAAO,CAAC;IAAE,OAAO,EAAE,KAAK,CAAC;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,MAAM,CAAA;KAAE,CAAC,CAAA;CAAE,CAAC,CAwD7D"}
@@ -0,0 +1,133 @@
1
+ // ConnectWise PSA MCP Server — Pagination Tools
2
+ // These tools provide capabilities that simple per-page API callers lack:
3
+ // automatic result aggregation across all pages and lightweight count queries.
4
+ import { getAPI } from '../services/connectwise-api.js';
5
+ import { smartFormat } from '../utils/formatters.js';
6
+ // ---------------------------------------------------------------------------
7
+ // Tool definitions
8
+ // ---------------------------------------------------------------------------
9
+ export const paginationTools = [
10
+ {
11
+ name: 'cw_paginated_fetch',
12
+ description: 'Automatically paginate through a ConnectWise PSA collection endpoint and ' +
13
+ 'aggregate ALL results into a single response. Fetches pages of 250 items ' +
14
+ 'until the collection is exhausted or max_items is reached. ' +
15
+ 'Use conditions to narrow results and max_items to control memory usage.',
16
+ inputSchema: {
17
+ type: 'object',
18
+ properties: {
19
+ path: {
20
+ type: 'string',
21
+ description: 'Collection API path, e.g. "/service/tickets" or "/time/entries".',
22
+ },
23
+ conditions: {
24
+ type: 'string',
25
+ description: 'ConnectWise condition string to filter results, ' +
26
+ 'e.g. "status/name=\'Open\' AND board/name=\'Support\'". ' +
27
+ 'Dates must use bracket notation: [2026-01-01T00:00:00Z]. ' +
28
+ 'Use single quotes for string values. Use uppercase AND/OR.',
29
+ },
30
+ fields: {
31
+ type: 'string',
32
+ description: 'Comma-separated list of fields to return, e.g. "id,summary,status". ' +
33
+ 'Omit to return all fields.',
34
+ },
35
+ max_items: {
36
+ type: 'number',
37
+ description: 'Maximum total items to fetch across all pages. Default: 5000. ' +
38
+ 'Increase if you need more, or add conditions to reduce the result set.',
39
+ },
40
+ },
41
+ required: ['path'],
42
+ },
43
+ },
44
+ {
45
+ name: 'cw_count',
46
+ description: 'Retrieve the total record count for a ConnectWise PSA collection endpoint ' +
47
+ 'without fetching any data. Much faster than paginated_fetch when you only ' +
48
+ 'need a number. Calls the /count sub-endpoint automatically.',
49
+ inputSchema: {
50
+ type: 'object',
51
+ properties: {
52
+ path: {
53
+ type: 'string',
54
+ description: 'Collection API path, e.g. "/service/tickets" or "/time/entries".',
55
+ },
56
+ conditions: {
57
+ type: 'string',
58
+ description: 'ConnectWise condition string to filter the count, ' +
59
+ 'e.g. "status/name=\'Open\'". Same syntax rules as cw_paginated_fetch.',
60
+ },
61
+ },
62
+ required: ['path'],
63
+ },
64
+ },
65
+ ];
66
+ // ---------------------------------------------------------------------------
67
+ // Formatting helpers
68
+ // ---------------------------------------------------------------------------
69
+ function formatPaginatedResult(path, result, maxItems) {
70
+ const lines = [];
71
+ lines.push(`Path: ${path}`);
72
+ lines.push(`Total items fetched: ${result.totalCount}`);
73
+ lines.push(`Pages fetched: ${result.pagesFetched}`);
74
+ if (result.truncated) {
75
+ lines.push(`Fetched ${maxItems} items. Total may be higher. ` +
76
+ 'Increase max_items or add conditions to filter.');
77
+ }
78
+ else {
79
+ lines.push('All matching items fetched (collection fully paginated).');
80
+ }
81
+ lines.push('');
82
+ lines.push(smartFormat(path, result.items));
83
+ return lines.join('\n');
84
+ }
85
+ function formatCount(path, conditions, n) {
86
+ const conditionClause = conditions ? ` matching conditions "${conditions}"` : '';
87
+ return `Count: ${n} item(s)${conditionClause} on ${path}`;
88
+ }
89
+ // ---------------------------------------------------------------------------
90
+ // Handler
91
+ // ---------------------------------------------------------------------------
92
+ export async function handlePaginationTool(toolName, args) {
93
+ const api = getAPI();
94
+ let text;
95
+ switch (toolName) {
96
+ case 'cw_paginated_fetch': {
97
+ const path = String(args['path'] ?? '');
98
+ if (!path.trim()) {
99
+ text = 'Error: "path" must be a non-empty string.';
100
+ break;
101
+ }
102
+ const conditions = typeof args['conditions'] === 'string' && args['conditions'].trim()
103
+ ? args['conditions']
104
+ : undefined;
105
+ const fields = typeof args['fields'] === 'string' && args['fields'].trim()
106
+ ? args['fields']
107
+ : undefined;
108
+ const maxItems = typeof args['max_items'] === 'number' && args['max_items'] > 0
109
+ ? args['max_items']
110
+ : 5000;
111
+ const result = await api.paginatedFetch(path, conditions, fields, maxItems);
112
+ text = formatPaginatedResult(path, result, maxItems);
113
+ break;
114
+ }
115
+ case 'cw_count': {
116
+ const path = String(args['path'] ?? '');
117
+ if (!path.trim()) {
118
+ text = 'Error: "path" must be a non-empty string.';
119
+ break;
120
+ }
121
+ const conditions = typeof args['conditions'] === 'string' && args['conditions'].trim()
122
+ ? args['conditions']
123
+ : undefined;
124
+ const n = await api.count(path, conditions);
125
+ text = formatCount(path, conditions, n);
126
+ break;
127
+ }
128
+ default:
129
+ text = `Unknown pagination tool: ${toolName}`;
130
+ }
131
+ return { content: [{ type: 'text', text }] };
132
+ }
133
+ //# sourceMappingURL=pagination.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"pagination.js","sourceRoot":"","sources":["../../src/tools/pagination.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,9 @@
1
+ import { Tool } from '@modelcontextprotocol/sdk/types.js';
2
+ export declare const validationTools: Tool[];
3
+ export declare function handleValidationTool(toolName: string, args: Record<string, unknown>): Promise<{
4
+ content: Array<{
5
+ type: 'text';
6
+ text: string;
7
+ }>;
8
+ }>;
9
+ //# sourceMappingURL=validation.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"validation.d.ts","sourceRoot":"","sources":["../../src/tools/validation.ts"],"names":[],"mappings":"AAMA,OAAO,EAAE,IAAI,EAAE,MAAM,oCAAoC,CAAC;AAc1D,eAAO,MAAM,eAAe,EAAE,IAAI,EA0EjC,CAAC;AAuXF,wBAAsB,oBAAoB,CACxC,QAAQ,EAAE,MAAM,EAChB,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAC5B,OAAO,CAAC;IAAE,OAAO,EAAE,KAAK,CAAC;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,MAAM,CAAA;KAAE,CAAC,CAAA;CAAE,CAAC,CAyJ7D"}