@wilnertech/halopsa-mcp-server 1.2.0 → 1.4.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 (56) hide show
  1. package/README.md +43 -2
  2. package/dist/cache/memory-cache.d.ts +3 -0
  3. package/dist/cache/memory-cache.d.ts.map +1 -1
  4. package/dist/cache/memory-cache.js +4 -0
  5. package/dist/cache/memory-cache.js.map +1 -1
  6. package/dist/tools/batch-operations.d.ts +47 -0
  7. package/dist/tools/batch-operations.d.ts.map +1 -1
  8. package/dist/tools/batch-operations.js +211 -68
  9. package/dist/tools/batch-operations.js.map +1 -1
  10. package/dist/tools/budgets.d.ts +130 -0
  11. package/dist/tools/budgets.d.ts.map +1 -0
  12. package/dist/tools/budgets.js +277 -0
  13. package/dist/tools/budgets.js.map +1 -0
  14. package/dist/tools/milestones.d.ts +129 -0
  15. package/dist/tools/milestones.d.ts.map +1 -0
  16. package/dist/tools/milestones.js +281 -0
  17. package/dist/tools/milestones.js.map +1 -0
  18. package/dist/tools/registrations.d.ts +6 -2
  19. package/dist/tools/registrations.d.ts.map +1 -1
  20. package/dist/tools/registrations.js +39 -5
  21. package/dist/tools/registrations.js.map +1 -1
  22. package/dist/tools/ticket-links.d.ts +41 -0
  23. package/dist/tools/ticket-links.d.ts.map +1 -0
  24. package/dist/tools/ticket-links.js +84 -0
  25. package/dist/tools/ticket-links.js.map +1 -0
  26. package/dist/tools/tickets.d.ts +2 -0
  27. package/dist/tools/tickets.d.ts.map +1 -1
  28. package/dist/tools/tickets.js +59 -2
  29. package/dist/tools/tickets.js.map +1 -1
  30. package/dist/tools/workflows.d.ts +125 -0
  31. package/dist/tools/workflows.d.ts.map +1 -0
  32. package/dist/tools/workflows.js +355 -0
  33. package/dist/tools/workflows.js.map +1 -0
  34. package/dist/types/budgets.d.ts +45 -0
  35. package/dist/types/budgets.d.ts.map +1 -0
  36. package/dist/types/budgets.js +12 -0
  37. package/dist/types/budgets.js.map +1 -0
  38. package/dist/types/milestones.d.ts +65 -0
  39. package/dist/types/milestones.d.ts.map +1 -0
  40. package/dist/types/milestones.js +14 -0
  41. package/dist/types/milestones.js.map +1 -0
  42. package/dist/types/tickets.d.ts +4 -0
  43. package/dist/types/tickets.d.ts.map +1 -1
  44. package/dist/types/workflows.d.ts +77 -0
  45. package/dist/types/workflows.d.ts.map +1 -0
  46. package/dist/types/workflows.js +11 -0
  47. package/dist/types/workflows.js.map +1 -0
  48. package/dist/utils/concurrency.d.ts +42 -0
  49. package/dist/utils/concurrency.d.ts.map +1 -0
  50. package/dist/utils/concurrency.js +82 -0
  51. package/dist/utils/concurrency.js.map +1 -0
  52. package/dist/utils/formatter.d.ts +1 -1
  53. package/dist/utils/formatter.d.ts.map +1 -1
  54. package/dist/utils/formatter.js +30 -3
  55. package/dist/utils/formatter.js.map +1 -1
  56. package/package.json +1 -1
package/README.md CHANGED
@@ -4,7 +4,7 @@ Model Context Protocol server for HaloPSA API integration with asset, user, and
4
4
 
5
5
  ## Key Features
6
6
 
7
- - **49 tools** for managing HaloPSA assets, users, sites, clients, tickets, actions, and reference data
7
+ - **66 tools** for managing HaloPSA assets, users, sites, clients, tickets, actions, agents, workflows, milestones, budgets, ticket links, and bulk updates
8
8
  - **Deduplication** with confidence scoring to prevent duplicate billing entities
9
9
  - **OAuth2 Client Credentials** authentication with automatic token refresh
10
10
  - **Rate limiting** with exponential backoff (60 requests/minute)
@@ -206,7 +206,7 @@ Multi-tenant Halo deployments often have 3-4 "closed-like" statuses (`Closed`, `
206
206
  | `list_halopsa_ticket_custom_fields` | Per-tickettype field definitions via `/FieldInfo?type=1` |
207
207
  | `get_halopsa_ticket_field_schema` | Sampling-based fallback when `/FieldInfo` is unavailable |
208
208
 
209
- ### Batch Operations Tools (4)
209
+ ### Batch Operations Tools (5)
210
210
 
211
211
  | Tool | Description |
212
212
  |------|-------------|
@@ -214,6 +214,47 @@ Multi-tenant Halo deployments often have 3-4 "closed-like" statuses (`Closed`, `
214
214
  | `get_halopsa_users_batch` | Get multiple users (max 50) |
215
215
  | `get_halopsa_sites_batch` | Get multiple sites (max 50) |
216
216
  | `get_halopsa_tickets_batch` | Get multiple tickets (max 50) |
217
+ | `bulk_update_halopsa_tickets` | Update up to 20 tickets in parallel via `Promise.allSettled`. Each element accepts the full `update_halopsa_ticket` field set (status_id, agent_id, milestone_id, etc.). Returns per-ticket `{success\|error, result?, error?}` so a single failure does not abort the batch. |
218
+
219
+ ### Ticket Link Tools (1)
220
+
221
+ | Tool | Description |
222
+ |------|-------------|
223
+ | `list_halopsa_linked_tickets` | Read-side discovery of all relationships on a ticket: `parent_id`, `child_count`, and `linked_tickets[]` array. Compact returns `{linked_ticket_id, link_type?, summary?}` per entry. **Write-side ticket-to-ticket linking via `/IntegrationData/Get/HaloLink` is deferred to v1.4 pending endpoint param discovery.** For now, use `parent_id` on create/update as the canonical "depends on / blocks" mechanism. |
224
+
225
+ ### Workflow Tools (6)
226
+
227
+ | Tool | Description |
228
+ |------|-------------|
229
+ | `list_halopsa_workflows` | List all workflow definitions (cached 1h). Returns `id, name, active, notinuse` per workflow. |
230
+ | `get_halopsa_workflow` | Get a single workflow with full `steps[]` + `stages[]` + `flow_chart_json`. |
231
+ | `list_halopsa_workflow_steps` | List workflow steps (124 total on a typical tenant). Optionally filter by `workflow_id`. |
232
+ | `create_halopsa_workflow` | `POST /Workflow` with array body. Accepts `name, note?, steps?, stages?`. |
233
+ | `update_halopsa_workflow` | Read-before-write merge. `POST /Workflow [{id, ...merged}]`. |
234
+ | `delete_halopsa_workflow` | **Safety-first**: refuses unless `notinuse === true` AND no tickettype defaults to this workflow. Override with `confirm_destructive: true` + `'OVERRIDE'` in `reason`. Idempotent on 404. |
235
+ | **Advance a ticket through its workflow** | (No dedicated tool — workflows are advanced via `update_halopsa_ticket(status_id=X)`. Each status maps to a workflow step.) |
236
+
237
+ ### Ticket Milestone Tools (4)
238
+
239
+ Milestones are nested under tickets — no top-level `/Milestone` endpoint exists. Each Project ticket has a `milestones[]` array (similar to `customfields[]`).
240
+
241
+ | Tool | Description |
242
+ |------|-------------|
243
+ | `list_halopsa_ticket_milestones` | Return `ticket.milestones[]` for a given ticket id. Cached 1min. |
244
+ | `set_halopsa_ticket_milestones` | **Replace** the entire `milestones[]` array via read-before-write merge. Each input: `{name (required), target_date (required ISO), start_date?, sequence?, billing_amount?, status_id?}`. |
245
+ | `add_halopsa_ticket_milestone` | Convenience: append one milestone to the existing array. |
246
+ | `remove_halopsa_ticket_milestone` | Convenience: remove one milestone by id. |
247
+ | **Link a child ticket to a milestone** | (Use `update_halopsa_ticket(milestone_id=X)` — exposed in v1.3 on the create/update schemas.) |
248
+
249
+ ### Budget Tools (5)
250
+
251
+ | Tool | Description |
252
+ |------|-------------|
253
+ | `list_halopsa_budget_types` | List all BudgetType records (Fixed Price, T&M, Retainer, etc.). Cached 1h. |
254
+ | `create_halopsa_budget_type` | `POST /BudgetType` with array body. Accepts `name, defaultrate?, chargerate?`. |
255
+ | `delete_halopsa_budget_type` | **Safety-first**: refuses by default (dependency check unavailable — Halo doesn't expose `budgettype_id` as a `/Tickets` filter). Override with `confirm_destructive: true` + `'OVERRIDE'` in `reason`. |
256
+ | `get_halopsa_ticket_budget` | Return `ticket.budgets[]` for a given ticket id (per-ticket budget records). Cached 1min. |
257
+ | `set_halopsa_ticket_budget` | **Replace** the entire per-ticket `budgets[]` array. Each input: `{budgettype_id (required int), hours?, days?, rate?}`. |
217
258
 
218
259
  ## Deduplication Algorithms
219
260
 
@@ -81,8 +81,11 @@ export declare const TTL: {
81
81
  readonly TICKET_STATUSES: number;
82
82
  readonly TICKET_PRIORITIES: number;
83
83
  readonly TICKET_CATEGORIES: number;
84
+ readonly BUDGET_TYPES: number;
84
85
  readonly CLIENT_LIST: number;
85
86
  readonly SITE_LIST: number;
87
+ readonly WORKFLOWS: number;
88
+ readonly WORKFLOW_STEPS: number;
86
89
  readonly ASSET_LIST: number;
87
90
  readonly USER_LIST: number;
88
91
  readonly TICKET_LIST: number;
@@ -1 +1 @@
1
- {"version":3,"file":"memory-cache.d.ts","sourceRoot":"","sources":["../../src/cache/memory-cache.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAOH,qBAAa,WAAW;IACtB,OAAO,CAAC,KAAK,CAA+C;IAC5D,OAAO,CAAC,OAAO,CAAS;IACxB,OAAO,CAAC,iBAAiB,CAAS;IAClC,OAAO,CAAC,YAAY,CAAC,CAAiC;gBAE1C,OAAO,GAAE,MAAa,EAAE,iBAAiB,GAAE,MAAc;IAMrE;;;;OAIG;IACH,GAAG,CAAC,CAAC,EAAE,GAAG,EAAE,MAAM,GAAG,CAAC,GAAG,IAAI;IAqB7B;;OAEG;IACH,GAAG,CAAC,CAAC,EAAE,GAAG,EAAE,MAAM,EAAE,KAAK,EAAE,CAAC,EAAE,KAAK,EAAE,MAAM,GAAG,IAAI;IAclD;;OAEG;IACH,GAAG,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO;IAIzB;;OAEG;IACH,MAAM,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO;IAI5B;;;OAGG;IACH,iBAAiB,CAAC,OAAO,EAAE,MAAM,GAAG,MAAM;IAc1C;;OAEG;IACH,KAAK,IAAI,IAAI;IAIb;;OAEG;IACH,IAAI,IAAI,MAAM;IAId;;OAEG;IACH,KAAK,IAAI;QACP,IAAI,EAAE,MAAM,CAAC;QACb,OAAO,EAAE,MAAM,CAAC;QAChB,IAAI,EAAE,MAAM,EAAE,CAAC;KAChB;IAQD;;OAEG;IACH,OAAO,CAAC,OAAO;IAef;;OAEG;IACH,OAAO,CAAC,iBAAiB;IAMzB;;OAEG;IACH,gBAAgB,IAAI,IAAI;IAOxB;;OAEG;IACH,OAAO,CAAC,cAAc;CASvB;AAED;;GAEG;AACH,eAAO,MAAM,WAAW,aAAoB,CAAC;AAE7C;;;GAGG;AACH,eAAO,MAAM,GAAG;;;;;;;;;;;;;;;CAoBN,CAAC;AAEX;;;GAGG;AACH,wBAAgB,gBAAgB,CAC9B,MAAM,EAAE,MAAM,EACd,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAC9B,MAAM,CAOR"}
1
+ {"version":3,"file":"memory-cache.d.ts","sourceRoot":"","sources":["../../src/cache/memory-cache.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAOH,qBAAa,WAAW;IACtB,OAAO,CAAC,KAAK,CAA+C;IAC5D,OAAO,CAAC,OAAO,CAAS;IACxB,OAAO,CAAC,iBAAiB,CAAS;IAClC,OAAO,CAAC,YAAY,CAAC,CAAiC;gBAE1C,OAAO,GAAE,MAAa,EAAE,iBAAiB,GAAE,MAAc;IAMrE;;;;OAIG;IACH,GAAG,CAAC,CAAC,EAAE,GAAG,EAAE,MAAM,GAAG,CAAC,GAAG,IAAI;IAqB7B;;OAEG;IACH,GAAG,CAAC,CAAC,EAAE,GAAG,EAAE,MAAM,EAAE,KAAK,EAAE,CAAC,EAAE,KAAK,EAAE,MAAM,GAAG,IAAI;IAclD;;OAEG;IACH,GAAG,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO;IAIzB;;OAEG;IACH,MAAM,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO;IAI5B;;;OAGG;IACH,iBAAiB,CAAC,OAAO,EAAE,MAAM,GAAG,MAAM;IAc1C;;OAEG;IACH,KAAK,IAAI,IAAI;IAIb;;OAEG;IACH,IAAI,IAAI,MAAM;IAId;;OAEG;IACH,KAAK,IAAI;QACP,IAAI,EAAE,MAAM,CAAC;QACb,OAAO,EAAE,MAAM,CAAC;QAChB,IAAI,EAAE,MAAM,EAAE,CAAC;KAChB;IAQD;;OAEG;IACH,OAAO,CAAC,OAAO;IAef;;OAEG;IACH,OAAO,CAAC,iBAAiB;IAMzB;;OAEG;IACH,gBAAgB,IAAI,IAAI;IAOxB;;OAEG;IACH,OAAO,CAAC,cAAc;CASvB;AAED;;GAEG;AACH,eAAO,MAAM,WAAW,aAAoB,CAAC;AAE7C;;;GAGG;AACH,eAAO,MAAM,GAAG;;;;;;;;;;;;;;;;;;CAyBN,CAAC;AAEX;;;GAGG;AACH,wBAAgB,gBAAgB,CAC9B,MAAM,EAAE,MAAM,EACd,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAC9B,MAAM,CAOR"}
@@ -159,9 +159,13 @@ export const TTL = {
159
159
  TICKET_STATUSES: 60 * 60 * 1000,
160
160
  TICKET_PRIORITIES: 60 * 60 * 1000,
161
161
  TICKET_CATEGORIES: 60 * 60 * 1000,
162
+ BUDGET_TYPES: 60 * 60 * 1000,
162
163
  // Medium TTL (5 minutes) - Moderate change rate
163
164
  CLIENT_LIST: 5 * 60 * 1000,
164
165
  SITE_LIST: 5 * 60 * 1000,
166
+ // Workflow TTLs (1 hour) - Workflow definitions change infrequently
167
+ WORKFLOWS: 60 * 60 * 1000,
168
+ WORKFLOW_STEPS: 60 * 60 * 1000,
165
169
  // Low TTL (1 minute) - Frequent changes (billing critical data)
166
170
  ASSET_LIST: 1 * 60 * 1000,
167
171
  USER_LIST: 1 * 60 * 1000,
@@ -1 +1 @@
1
- {"version":3,"file":"memory-cache.js","sourceRoot":"","sources":["../../src/cache/memory-cache.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"memory-cache.js","sourceRoot":"","sources":["../../src/cache/memory-cache.ts"],"names":[],"mappings":"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"}
@@ -90,4 +90,51 @@ export declare const getSitesBatchTool: ZodToolDefinition;
90
90
  */
91
91
  export declare function getTicketsBatch(client: HaloPSAAPIClient, args: z.infer<typeof GetTicketsBatchArgsSchema>): Promise<string>;
92
92
  export declare const getTicketsBatchTool: ZodToolDefinition;
93
+ export declare const BulkUpdateTicketsArgsSchema: z.ZodObject<{
94
+ updates: z.ZodArray<z.ZodObject<{
95
+ ticket_id: z.ZodNumber;
96
+ summary: z.ZodOptional<z.ZodString>;
97
+ details_html: z.ZodOptional<z.ZodString>;
98
+ tickettype_id: z.ZodOptional<z.ZodNumber>;
99
+ status_id: z.ZodOptional<z.ZodNumber>;
100
+ priority_id: z.ZodOptional<z.ZodNumber>;
101
+ category_1: z.ZodOptional<z.ZodString>;
102
+ agent_id: z.ZodOptional<z.ZodNumber>;
103
+ team_id: z.ZodOptional<z.ZodNumber>;
104
+ site_id: z.ZodOptional<z.ZodNumber>;
105
+ user_id: z.ZodOptional<z.ZodNumber>;
106
+ parent_id: z.ZodOptional<z.ZodNumber>;
107
+ dateoccurred: z.ZodOptional<z.ZodString>;
108
+ startdate: z.ZodOptional<z.ZodString>;
109
+ source: z.ZodOptional<z.ZodNumber>;
110
+ estimate: z.ZodOptional<z.ZodNumber>;
111
+ estimatedays: z.ZodOptional<z.ZodNumber>;
112
+ customfields: z.ZodOptional<z.ZodArray<z.ZodObject<{
113
+ id: z.ZodOptional<z.ZodNumber>;
114
+ name: z.ZodOptional<z.ZodString>;
115
+ value: z.ZodUnion<readonly [z.ZodString, z.ZodNumber, z.ZodBoolean, z.ZodNull]>;
116
+ }, z.core.$strip>>>;
117
+ milestone_id: z.ZodOptional<z.ZodNumber>;
118
+ }, z.core.$strip>>;
119
+ format_options: z.ZodOptional<z.ZodObject<{
120
+ format: z.ZodOptional<z.ZodEnum<{
121
+ compact: "compact";
122
+ standard: "standard";
123
+ detailed: "detailed";
124
+ }>>;
125
+ fields: z.ZodOptional<z.ZodArray<z.ZodString>>;
126
+ omit_empty: z.ZodOptional<z.ZodBoolean>;
127
+ }, z.core.$strip>>;
128
+ }, z.core.$strip>;
129
+ /**
130
+ * Bulk update up to 20 HaloPSA tickets in a single MCP call.
131
+ *
132
+ * Implementation: calls updateTicket() N times via Promise.allSettled for
133
+ * fault-tolerance — a failure on one ticket does not abort the remaining
134
+ * updates. Returns a per-ticket result array with status 'success'|'error'.
135
+ * Each success element has its write response run through stripWriteResponse
136
+ * for token efficiency.
137
+ */
138
+ export declare function bulkUpdateTickets(client: HaloPSAAPIClient, args: z.infer<typeof BulkUpdateTicketsArgsSchema>): Promise<string>;
139
+ export declare const bulkUpdateTicketsTool: ZodToolDefinition;
93
140
  //# sourceMappingURL=batch-operations.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"batch-operations.d.ts","sourceRoot":"","sources":["../../src/tools/batch-operations.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AACxB,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,kBAAkB,CAAC;AACzD,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,eAAe,CAAC;AAevD;;GAEG;AACH,eAAO,MAAM,wBAAwB;;;;;;;;;;;iBAInC,CAAC;AAEH;;GAEG;AACH,eAAO,MAAM,uBAAuB;;;;;;;;;;;iBAIlC,CAAC;AAEH;;GAEG;AACH,eAAO,MAAM,uBAAuB;;;;;;;;;;;iBAIlC,CAAC;AAEH;;GAEG;AACH,eAAO,MAAM,yBAAyB;;;;;;;;;;;iBAIpC,CAAC;AAMH;;;;;GAKG;AACH,wBAAsB,cAAc,CAClC,MAAM,EAAE,gBAAgB,EACxB,IAAI,EAAE,CAAC,CAAC,KAAK,CAAC,OAAO,wBAAwB,CAAC,GAC7C,OAAO,CAAC,MAAM,CAAC,CAsDjB;AAED;;GAEG;AACH,wBAAsB,aAAa,CACjC,MAAM,EAAE,gBAAgB,EACxB,IAAI,EAAE,CAAC,CAAC,KAAK,CAAC,OAAO,uBAAuB,CAAC,GAC5C,OAAO,CAAC,MAAM,CAAC,CAsDjB;AAED;;GAEG;AACH,wBAAsB,aAAa,CACjC,MAAM,EAAE,gBAAgB,EACxB,IAAI,EAAE,CAAC,CAAC,KAAK,CAAC,OAAO,uBAAuB,CAAC,GAC5C,OAAO,CAAC,MAAM,CAAC,CAsDjB;AAMD,eAAO,MAAM,kBAAkB,EAAE,iBAKhC,CAAC;AAEF,eAAO,MAAM,iBAAiB,EAAE,iBAK/B,CAAC;AAEF,eAAO,MAAM,iBAAiB,EAAE,iBAK/B,CAAC;AAEF;;;;GAIG;AACH,wBAAsB,eAAe,CACnC,MAAM,EAAE,gBAAgB,EACxB,IAAI,EAAE,CAAC,CAAC,KAAK,CAAC,OAAO,yBAAyB,CAAC,GAC9C,OAAO,CAAC,MAAM,CAAC,CAoDjB;AAED,eAAO,MAAM,mBAAmB,EAAE,iBAKjC,CAAC"}
1
+ {"version":3,"file":"batch-operations.d.ts","sourceRoot":"","sources":["../../src/tools/batch-operations.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AACxB,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,kBAAkB,CAAC;AACzD,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,eAAe,CAAC;AAuBvD;;GAEG;AACH,eAAO,MAAM,wBAAwB;;;;;;;;;;;iBAInC,CAAC;AAEH;;GAEG;AACH,eAAO,MAAM,uBAAuB;;;;;;;;;;;iBAIlC,CAAC;AAEH;;GAEG;AACH,eAAO,MAAM,uBAAuB;;;;;;;;;;;iBAIlC,CAAC;AAEH;;GAEG;AACH,eAAO,MAAM,yBAAyB;;;;;;;;;;;iBAIpC,CAAC;AAMH;;;;;GAKG;AACH,wBAAsB,cAAc,CAClC,MAAM,EAAE,gBAAgB,EACxB,IAAI,EAAE,CAAC,CAAC,KAAK,CAAC,OAAO,wBAAwB,CAAC,GAC7C,OAAO,CAAC,MAAM,CAAC,CA2DjB;AAED;;GAEG;AACH,wBAAsB,aAAa,CACjC,MAAM,EAAE,gBAAgB,EACxB,IAAI,EAAE,CAAC,CAAC,KAAK,CAAC,OAAO,uBAAuB,CAAC,GAC5C,OAAO,CAAC,MAAM,CAAC,CA2DjB;AAED;;GAEG;AACH,wBAAsB,aAAa,CACjC,MAAM,EAAE,gBAAgB,EACxB,IAAI,EAAE,CAAC,CAAC,KAAK,CAAC,OAAO,uBAAuB,CAAC,GAC5C,OAAO,CAAC,MAAM,CAAC,CA2DjB;AAMD,eAAO,MAAM,kBAAkB,EAAE,iBAKhC,CAAC;AAEF,eAAO,MAAM,iBAAiB,EAAE,iBAK/B,CAAC;AAEF,eAAO,MAAM,iBAAiB,EAAE,iBAK/B,CAAC;AAEF;;;;GAIG;AACH,wBAAsB,eAAe,CACnC,MAAM,EAAE,gBAAgB,EACxB,IAAI,EAAE,CAAC,CAAC,KAAK,CAAC,OAAO,yBAAyB,CAAC,GAC9C,OAAO,CAAC,MAAM,CAAC,CA8DjB;AAED,eAAO,MAAM,mBAAmB,EAAE,iBAKjC,CAAC;AA2DF,eAAO,MAAM,2BAA2B;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;iBAItC,CAAC;AAEH;;;;;;;;GAQG;AACH,wBAAsB,iBAAiB,CACrC,MAAM,EAAE,gBAAgB,EACxB,IAAI,EAAE,CAAC,CAAC,KAAK,CAAC,OAAO,2BAA2B,CAAC,GAChD,OAAO,CAAC,MAAM,CAAC,CA+EjB;AAED,eAAO,MAAM,qBAAqB,EAAE,iBASnC,CAAC"}
@@ -3,9 +3,11 @@
3
3
  * Provides efficient batch retrieval operations to reduce API calls
4
4
  */
5
5
  import { z } from 'zod';
6
- import { formatResponse } from '../utils/formatter.js';
6
+ import { formatResponse, stripWriteResponse } from '../utils/formatter.js';
7
7
  import { TTL } from '../cache/memory-cache.js';
8
8
  import { FormatOptionsSchema } from '../schemas/common.js';
9
+ import { updateTicket } from './tickets.js';
10
+ import { runWithConcurrency, withTimeout, DEFAULT_BATCH_CONCURRENCY, DEFAULT_BULK_CONCURRENCY, DEFAULT_BULK_TIMEOUT_MS, } from '../utils/concurrency.js';
9
11
  // =============================================================================
10
12
  // Zod Schemas for Input Validation
11
13
  // =============================================================================
@@ -58,25 +60,24 @@ export async function getAssetsBatch(client, args) {
58
60
  message: 'Maximum 50 asset IDs per batch request',
59
61
  }, null, 2);
60
62
  }
61
- // Fetch all assets in parallel
62
- const assetPromises = args.asset_ids.map(async (id) => {
63
- try {
64
- const asset = await client.getCached(`/Asset/${id}`, undefined, {
65
- enabled: true,
66
- ttl: TTL.ASSET_LIST,
67
- keyPrefix: `asset:${id}`,
68
- });
69
- return { success: true, id, data: asset };
70
- }
71
- catch (error) {
72
- return {
73
- success: false,
74
- id,
75
- error: error instanceof Error ? error.message : 'Unknown error',
76
- };
63
+ // Fetch all assets with bounded concurrency (reads: DEFAULT_BATCH_CONCURRENCY)
64
+ const settled = await runWithConcurrency(args.asset_ids, DEFAULT_BATCH_CONCURRENCY, (id) => withTimeout(() => client.getCached(`/Asset/${id}`, undefined, {
65
+ enabled: true,
66
+ ttl: TTL.ASSET_LIST,
67
+ keyPrefix: `asset:${id}`,
68
+ }), DEFAULT_BULK_TIMEOUT_MS));
69
+ const results = settled.map((outcome, i) => {
70
+ const id = args.asset_ids[i];
71
+ if (outcome.status === 'fulfilled') {
72
+ return { success: true, id, data: outcome.value };
77
73
  }
74
+ const reason = outcome.reason;
75
+ return {
76
+ success: false,
77
+ id,
78
+ error: reason instanceof Error ? reason.message : 'Unknown error',
79
+ };
78
80
  });
79
- const results = await Promise.all(assetPromises);
80
81
  // Separate successful and failed results
81
82
  const successful = results.filter((r) => r.success).map((r) => r.data);
82
83
  const failed = results.filter((r) => !r.success).map((r) => ({
@@ -106,25 +107,24 @@ export async function getUsersBatch(client, args) {
106
107
  message: 'Maximum 50 user IDs per batch request',
107
108
  }, null, 2);
108
109
  }
109
- // Fetch all users in parallel
110
- const userPromises = args.user_ids.map(async (id) => {
111
- try {
112
- const user = await client.getCached(`/Users/${id}`, undefined, {
113
- enabled: true,
114
- ttl: TTL.USER_LIST,
115
- keyPrefix: `user:${id}`,
116
- });
117
- return { success: true, id, data: user };
118
- }
119
- catch (error) {
120
- return {
121
- success: false,
122
- id,
123
- error: error instanceof Error ? error.message : 'Unknown error',
124
- };
110
+ // Fetch all users with bounded concurrency (reads: DEFAULT_BATCH_CONCURRENCY)
111
+ const settled = await runWithConcurrency(args.user_ids, DEFAULT_BATCH_CONCURRENCY, (id) => withTimeout(() => client.getCached(`/Users/${id}`, undefined, {
112
+ enabled: true,
113
+ ttl: TTL.USER_LIST,
114
+ keyPrefix: `user:${id}`,
115
+ }), DEFAULT_BULK_TIMEOUT_MS));
116
+ const results = settled.map((outcome, i) => {
117
+ const id = args.user_ids[i];
118
+ if (outcome.status === 'fulfilled') {
119
+ return { success: true, id, data: outcome.value };
125
120
  }
121
+ const reason = outcome.reason;
122
+ return {
123
+ success: false,
124
+ id,
125
+ error: reason instanceof Error ? reason.message : 'Unknown error',
126
+ };
126
127
  });
127
- const results = await Promise.all(userPromises);
128
128
  // Separate successful and failed results
129
129
  const successful = results.filter((r) => r.success).map((r) => r.data);
130
130
  const failed = results.filter((r) => !r.success).map((r) => ({
@@ -154,25 +154,24 @@ export async function getSitesBatch(client, args) {
154
154
  message: 'Maximum 50 site IDs per batch request',
155
155
  }, null, 2);
156
156
  }
157
- // Fetch all sites in parallel
158
- const sitePromises = args.site_ids.map(async (id) => {
159
- try {
160
- const site = await client.getCached(`/Site/${id}`, undefined, {
161
- enabled: true,
162
- ttl: TTL.SITE_LIST,
163
- keyPrefix: `site:${id}`,
164
- });
165
- return { success: true, id, data: site };
166
- }
167
- catch (error) {
168
- return {
169
- success: false,
170
- id,
171
- error: error instanceof Error ? error.message : 'Unknown error',
172
- };
157
+ // Fetch all sites with bounded concurrency (reads: DEFAULT_BATCH_CONCURRENCY)
158
+ const settled = await runWithConcurrency(args.site_ids, DEFAULT_BATCH_CONCURRENCY, (id) => withTimeout(() => client.getCached(`/Site/${id}`, undefined, {
159
+ enabled: true,
160
+ ttl: TTL.SITE_LIST,
161
+ keyPrefix: `site:${id}`,
162
+ }), DEFAULT_BULK_TIMEOUT_MS));
163
+ const results = settled.map((outcome, i) => {
164
+ const id = args.site_ids[i];
165
+ if (outcome.status === 'fulfilled') {
166
+ return { success: true, id, data: outcome.value };
173
167
  }
168
+ const reason = outcome.reason;
169
+ return {
170
+ success: false,
171
+ id,
172
+ error: reason instanceof Error ? reason.message : 'Unknown error',
173
+ };
174
174
  });
175
- const results = await Promise.all(sitePromises);
176
175
  // Separate successful and failed results
177
176
  const successful = results.filter((r) => r.success).map((r) => r.data);
178
177
  const failed = results.filter((r) => !r.success).map((r) => ({
@@ -225,24 +224,24 @@ export async function getTicketsBatch(client, args) {
225
224
  message: 'Maximum 50 ticket IDs per batch request',
226
225
  }, null, 2);
227
226
  }
228
- const ticketPromises = args.ticket_ids.map(async (id) => {
229
- try {
230
- const ticket = await client.getCached(`/Tickets/${id}`, { includedetails: true }, {
231
- enabled: true,
232
- ttl: TTL.TICKET_LIST,
233
- keyPrefix: `ticket:${id}`,
234
- });
235
- return { success: true, id, data: ticket };
236
- }
237
- catch (error) {
238
- return {
239
- success: false,
240
- id,
241
- error: error instanceof Error ? error.message : 'Unknown error',
242
- };
227
+ // Fetch all tickets with bounded concurrency (reads: DEFAULT_BATCH_CONCURRENCY)
228
+ const settled = await runWithConcurrency(args.ticket_ids, DEFAULT_BATCH_CONCURRENCY, (id) => withTimeout(() => client.getCached(`/Tickets/${id}`, { includedetails: true }, {
229
+ enabled: true,
230
+ ttl: TTL.TICKET_LIST,
231
+ keyPrefix: `ticket:${id}`,
232
+ }), DEFAULT_BULK_TIMEOUT_MS));
233
+ const results = settled.map((outcome, i) => {
234
+ const id = args.ticket_ids[i];
235
+ if (outcome.status === 'fulfilled') {
236
+ return { success: true, id, data: outcome.value };
243
237
  }
238
+ const reason = outcome.reason;
239
+ return {
240
+ success: false,
241
+ id,
242
+ error: reason instanceof Error ? reason.message : 'Unknown error',
243
+ };
244
244
  });
245
- const results = await Promise.all(ticketPromises);
246
245
  const successful = results.filter((r) => r.success).map((r) => r.data);
247
246
  const failed = results.filter((r) => !r.success).map((r) => ({
248
247
  id: r.id,
@@ -266,4 +265,148 @@ export const getTicketsBatchTool = {
266
265
  schema: GetTicketsBatchArgsSchema,
267
266
  handler: getTicketsBatch,
268
267
  };
268
+ // =============================================================================
269
+ // Bulk Update Tickets
270
+ // =============================================================================
271
+ /**
272
+ * Schema for a single update entry in bulk_update_halopsa_tickets.
273
+ * Mirrors the fields accepted by UpdateTicketArgsSchema minus ticket_id
274
+ * (which is required here at the element level) and format_options
275
+ * (which is accepted once at the top level).
276
+ */
277
+ const BulkTicketUpdateItemSchema = z.object({
278
+ ticket_id: z.number().int()
279
+ .describe('HaloPSA ticket ID to update (required)'),
280
+ summary: z.string().optional()
281
+ .describe('Ticket summary / title'),
282
+ details_html: z.string().optional()
283
+ .describe('Sanitized HTML body'),
284
+ tickettype_id: z.number().int().optional()
285
+ .describe('Ticket type ID'),
286
+ status_id: z.number().int().optional()
287
+ .describe('Status ID'),
288
+ priority_id: z.number().int().optional()
289
+ .describe('Priority ID'),
290
+ category_1: z.string().optional()
291
+ .describe('Primary category'),
292
+ agent_id: z.number().int().optional()
293
+ .describe('Assigned agent ID'),
294
+ team_id: z.number().int().optional()
295
+ .describe('Assigned team ID'),
296
+ site_id: z.number().int().optional()
297
+ .describe('Site/location ID'),
298
+ user_id: z.number().int().optional()
299
+ .describe('End-user contact ID'),
300
+ parent_id: z.number().int().optional()
301
+ .describe('Parent ticket ID'),
302
+ dateoccurred: z.string().optional()
303
+ .describe('ISO 8601 datetime of when the issue occurred'),
304
+ startdate: z.string().optional()
305
+ .describe('ISO 8601 datetime for project ticket start date'),
306
+ source: z.number().int().optional()
307
+ .describe('Source enum (tenant-specific integer)'),
308
+ estimate: z.number().optional()
309
+ .describe('Estimated business hours'),
310
+ estimatedays: z.number().optional()
311
+ .describe('Estimated business days'),
312
+ customfields: z.array(z.object({
313
+ id: z.number().int().optional(),
314
+ name: z.string().optional(),
315
+ value: z.union([z.string(), z.number(), z.boolean(), z.null()]),
316
+ })).optional()
317
+ .describe('Ticket custom fields'),
318
+ milestone_id: z.number().int().optional()
319
+ .describe('Link this ticket to an existing milestone on its parent project ticket. See list_halopsa_ticket_milestones.'),
320
+ });
321
+ export const BulkUpdateTicketsArgsSchema = z.object({
322
+ updates: z.array(BulkTicketUpdateItemSchema).min(1).max(20)
323
+ .describe('Array of ticket updates to apply in parallel (max 20). Each entry must include ticket_id plus at least one field to change.'),
324
+ format_options: FormatOptionsSchema,
325
+ });
326
+ /**
327
+ * Bulk update up to 20 HaloPSA tickets in a single MCP call.
328
+ *
329
+ * Implementation: calls updateTicket() N times via Promise.allSettled for
330
+ * fault-tolerance — a failure on one ticket does not abort the remaining
331
+ * updates. Returns a per-ticket result array with status 'success'|'error'.
332
+ * Each success element has its write response run through stripWriteResponse
333
+ * for token efficiency.
334
+ */
335
+ export async function bulkUpdateTickets(client, args) {
336
+ if (args.updates.length > 20) {
337
+ return JSON.stringify({
338
+ error: true,
339
+ message: 'Maximum 20 updates per bulk call. Split into smaller batches.',
340
+ }, null, 2);
341
+ }
342
+ const format = args.format_options?.format ?? 'compact';
343
+ // Bulk writes: cap at DEFAULT_BULK_CONCURRENCY (default 2) to avoid
344
+ // Halo serialization contention on parent-ticket locks / workflow recalc.
345
+ const settled = await runWithConcurrency(args.updates, DEFAULT_BULK_CONCURRENCY, (item) => withTimeout(() => updateTicket(client, {
346
+ ticket_id: item.ticket_id,
347
+ summary: item.summary,
348
+ details_html: item.details_html,
349
+ tickettype_id: item.tickettype_id,
350
+ status_id: item.status_id,
351
+ priority_id: item.priority_id,
352
+ category_1: item.category_1,
353
+ agent_id: item.agent_id,
354
+ team_id: item.team_id,
355
+ site_id: item.site_id,
356
+ user_id: item.user_id,
357
+ parent_id: item.parent_id,
358
+ dateoccurred: item.dateoccurred,
359
+ startdate: item.startdate,
360
+ source: item.source,
361
+ estimate: item.estimate,
362
+ estimatedays: item.estimatedays,
363
+ customfields: item.customfields,
364
+ milestone_id: item.milestone_id,
365
+ // Forward format_options so updateTicket applies the same strip level.
366
+ format_options: args.format_options,
367
+ }), DEFAULT_BULK_TIMEOUT_MS));
368
+ const results = settled.map((outcome, idx) => {
369
+ const ticket_id = args.updates[idx].ticket_id;
370
+ if (outcome.status === 'fulfilled') {
371
+ // updateTicket already returns a JSON string (post-stripWriteResponse +
372
+ // formatResponse). Parse it, then re-apply stripWriteResponse at the
373
+ // bulk level so the summarized shape is consistent with per-call behaviour.
374
+ let parsed;
375
+ try {
376
+ parsed = JSON.parse(outcome.value);
377
+ }
378
+ catch {
379
+ parsed = outcome.value;
380
+ }
381
+ const stripped = stripWriteResponse(parsed, format, 'ticket');
382
+ return { ticket_id, status: 'success', result: stripped };
383
+ }
384
+ else {
385
+ const err = outcome.reason;
386
+ return {
387
+ ticket_id,
388
+ status: 'error',
389
+ error: err instanceof Error ? err.message : String(err),
390
+ };
391
+ }
392
+ });
393
+ const summary = {
394
+ requested: args.updates.length,
395
+ succeeded: results.filter((r) => r.status === 'success').length,
396
+ failed: results.filter((r) => r.status === 'error').length,
397
+ results,
398
+ };
399
+ return format === 'detailed'
400
+ ? JSON.stringify(summary, null, 2)
401
+ : JSON.stringify(summary);
402
+ }
403
+ export const bulkUpdateTicketsTool = {
404
+ name: 'bulk_update_halopsa_tickets',
405
+ description: 'Update up to 20 HaloPSA tickets in a single call using parallel Promise.allSettled. ' +
406
+ 'Each update entry requires ticket_id plus at least one field to change. ' +
407
+ 'Returns a per-ticket result array: {ticket_id, status: success|error, result?, error?}. ' +
408
+ 'Failures on individual tickets do not abort the batch.',
409
+ schema: BulkUpdateTicketsArgsSchema,
410
+ handler: bulkUpdateTickets,
411
+ };
269
412
  //# sourceMappingURL=batch-operations.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"batch-operations.js","sourceRoot":"","sources":["../../src/tools/batch-operations.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"batch-operations.js","sourceRoot":"","sources":["../../src/tools/batch-operations.ts"],"names":[],"mappings":"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"}