syncromsp-mcp 0.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 (108) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +244 -0
  3. package/dist/api-client.d.ts +21 -0
  4. package/dist/api-client.d.ts.map +1 -0
  5. package/dist/api-client.js +117 -0
  6. package/dist/api-client.js.map +1 -0
  7. package/dist/auth.d.ts +37 -0
  8. package/dist/auth.d.ts.map +1 -0
  9. package/dist/auth.js +133 -0
  10. package/dist/auth.js.map +1 -0
  11. package/dist/domains/admin.d.ts +4 -0
  12. package/dist/domains/admin.d.ts.map +1 -0
  13. package/dist/domains/admin.js +807 -0
  14. package/dist/domains/admin.js.map +1 -0
  15. package/dist/domains/appointments.d.ts +4 -0
  16. package/dist/domains/appointments.d.ts.map +1 -0
  17. package/dist/domains/appointments.js +231 -0
  18. package/dist/domains/appointments.js.map +1 -0
  19. package/dist/domains/assets.d.ts +4 -0
  20. package/dist/domains/assets.d.ts.map +1 -0
  21. package/dist/domains/assets.js +138 -0
  22. package/dist/domains/assets.js.map +1 -0
  23. package/dist/domains/contacts.d.ts +4 -0
  24. package/dist/domains/contacts.d.ts.map +1 -0
  25. package/dist/domains/contacts.js +148 -0
  26. package/dist/domains/contacts.js.map +1 -0
  27. package/dist/domains/contracts.d.ts +4 -0
  28. package/dist/domains/contracts.d.ts.map +1 -0
  29. package/dist/domains/contracts.js +125 -0
  30. package/dist/domains/contracts.js.map +1 -0
  31. package/dist/domains/customers.d.ts +4 -0
  32. package/dist/domains/customers.d.ts.map +1 -0
  33. package/dist/domains/customers.js +323 -0
  34. package/dist/domains/customers.js.map +1 -0
  35. package/dist/domains/estimates.d.ts +4 -0
  36. package/dist/domains/estimates.d.ts.map +1 -0
  37. package/dist/domains/estimates.js +262 -0
  38. package/dist/domains/estimates.js.map +1 -0
  39. package/dist/domains/index.d.ts +5 -0
  40. package/dist/domains/index.d.ts.map +1 -0
  41. package/dist/domains/index.js +34 -0
  42. package/dist/domains/index.js.map +1 -0
  43. package/dist/domains/invoices.d.ts +4 -0
  44. package/dist/domains/invoices.d.ts.map +1 -0
  45. package/dist/domains/invoices.js +292 -0
  46. package/dist/domains/invoices.js.map +1 -0
  47. package/dist/domains/leads.d.ts +4 -0
  48. package/dist/domains/leads.d.ts.map +1 -0
  49. package/dist/domains/leads.js +135 -0
  50. package/dist/domains/leads.js.map +1 -0
  51. package/dist/domains/payments.d.ts +4 -0
  52. package/dist/domains/payments.d.ts.map +1 -0
  53. package/dist/domains/payments.js +188 -0
  54. package/dist/domains/payments.js.map +1 -0
  55. package/dist/domains/products.d.ts +4 -0
  56. package/dist/domains/products.d.ts.map +1 -0
  57. package/dist/domains/products.js +350 -0
  58. package/dist/domains/products.js.map +1 -0
  59. package/dist/domains/rmm.d.ts +4 -0
  60. package/dist/domains/rmm.d.ts.map +1 -0
  61. package/dist/domains/rmm.js +100 -0
  62. package/dist/domains/rmm.js.map +1 -0
  63. package/dist/domains/scheduling.d.ts +4 -0
  64. package/dist/domains/scheduling.d.ts.map +1 -0
  65. package/dist/domains/scheduling.js +206 -0
  66. package/dist/domains/scheduling.js.map +1 -0
  67. package/dist/domains/tickets.d.ts +4 -0
  68. package/dist/domains/tickets.d.ts.map +1 -0
  69. package/dist/domains/tickets.js +533 -0
  70. package/dist/domains/tickets.js.map +1 -0
  71. package/dist/domains/time.d.ts +4 -0
  72. package/dist/domains/time.d.ts.map +1 -0
  73. package/dist/domains/time.js +93 -0
  74. package/dist/domains/time.js.map +1 -0
  75. package/dist/index.d.ts +3 -0
  76. package/dist/index.d.ts.map +1 -0
  77. package/dist/index.js +137 -0
  78. package/dist/index.js.map +1 -0
  79. package/dist/server.d.ts +5 -0
  80. package/dist/server.d.ts.map +1 -0
  81. package/dist/server.js +183 -0
  82. package/dist/server.js.map +1 -0
  83. package/dist/session.d.ts +12 -0
  84. package/dist/session.d.ts.map +1 -0
  85. package/dist/session.js +31 -0
  86. package/dist/session.js.map +1 -0
  87. package/dist/types.d.ts +46 -0
  88. package/dist/types.d.ts.map +1 -0
  89. package/dist/types.js +44 -0
  90. package/dist/types.js.map +1 -0
  91. package/dist/utils/pagination.d.ts +12 -0
  92. package/dist/utils/pagination.d.ts.map +1 -0
  93. package/dist/utils/pagination.js +18 -0
  94. package/dist/utils/pagination.js.map +1 -0
  95. package/dist/utils/rate-limiter.d.ts +15 -0
  96. package/dist/utils/rate-limiter.d.ts.map +1 -0
  97. package/dist/utils/rate-limiter.js +63 -0
  98. package/dist/utils/rate-limiter.js.map +1 -0
  99. package/dist/utils/validators.d.ts +9 -0
  100. package/dist/utils/validators.d.ts.map +1 -0
  101. package/dist/utils/validators.js +59 -0
  102. package/dist/utils/validators.js.map +1 -0
  103. package/dist/utils/version-check.d.ts +7 -0
  104. package/dist/utils/version-check.d.ts.map +1 -0
  105. package/dist/utils/version-check.js +59 -0
  106. package/dist/utils/version-check.js.map +1 -0
  107. package/manifest.json +64 -0
  108. package/package.json +57 -0
@@ -0,0 +1,350 @@
1
+ import { jsonResult, textResult } from "../types.js";
2
+ import { requireId, requireString, optionalString, optionalNumber, optionalBoolean, pickDefined } from "../utils/validators.js";
3
+ export function createDomain(client) {
4
+ const tools = [
5
+ {
6
+ definition: {
7
+ name: "products_list",
8
+ description: "List products/inventory items",
9
+ inputSchema: {
10
+ type: "object",
11
+ properties: { page: { type: "number", description: "Page number" } },
12
+ },
13
+ },
14
+ handler: async (args) => {
15
+ const params = pickDefined({ page: optionalNumber(args.page) });
16
+ return jsonResult(await client.get("/products", params));
17
+ },
18
+ },
19
+ {
20
+ definition: {
21
+ name: "products_get",
22
+ description: "Get a product by ID",
23
+ inputSchema: {
24
+ type: "object",
25
+ properties: { id: { type: "number", description: "Product ID" } },
26
+ required: ["id"],
27
+ },
28
+ },
29
+ handler: async (args) => jsonResult(await client.get(`/products/${requireId(args.id)}`)),
30
+ },
31
+ {
32
+ definition: {
33
+ name: "products_create",
34
+ description: "Create a new product. Note: products have no DELETE endpoint -- use products_update with disabled=true instead. Custom properties on create may be ignored -- set via products_update after creation.",
35
+ inputSchema: {
36
+ type: "object",
37
+ properties: {
38
+ name: { type: "string", description: "Product name (required)" },
39
+ description: { type: "string", description: "Description" },
40
+ price_cost: { type: "number", description: "Cost price" },
41
+ price_retail: { type: "number", description: "Retail price" },
42
+ price_wholesale: { type: "number", description: "Wholesale price" },
43
+ condition: { type: "string", description: "Condition" },
44
+ maintain_stock: { type: "boolean", description: "Track inventory" },
45
+ quantity: { type: "number", description: "Quantity in stock" },
46
+ warranty: { type: "string", description: "Warranty info" },
47
+ reorder_at: { type: "number", description: "Reorder threshold" },
48
+ desired_stock_level: { type: "number", description: "Desired stock level" },
49
+ disabled: { type: "boolean", description: "Disabled" },
50
+ taxable: { type: "boolean", description: "Taxable" },
51
+ product_category: { type: "string", description: "Category" },
52
+ upc_code: { type: "string", description: "UPC code" },
53
+ discount_percent: { type: "number", description: "Discount %" },
54
+ notes: { type: "string", description: "Notes" },
55
+ physical_location: { type: "string", description: "Physical location" },
56
+ serialized: { type: "boolean", description: "Serialized product" },
57
+ vendor_ids: { type: "array", items: { type: "number" }, description: "Vendor IDs" },
58
+ category_ids: { type: "array", items: { type: "number" }, description: "Category IDs" },
59
+ },
60
+ required: ["name"],
61
+ },
62
+ },
63
+ handler: async (args) => {
64
+ const body = pickDefined({
65
+ name: requireString(args.name, "name"),
66
+ description: optionalString(args.description),
67
+ price_cost: optionalNumber(args.price_cost), price_retail: optionalNumber(args.price_retail),
68
+ price_wholesale: optionalNumber(args.price_wholesale), condition: optionalString(args.condition),
69
+ maintain_stock: optionalBoolean(args.maintain_stock), quantity: optionalNumber(args.quantity),
70
+ warranty: optionalString(args.warranty), reorder_at: optionalNumber(args.reorder_at),
71
+ desired_stock_level: optionalNumber(args.desired_stock_level),
72
+ disabled: optionalBoolean(args.disabled), taxable: optionalBoolean(args.taxable),
73
+ product_category: optionalString(args.product_category), upc_code: optionalString(args.upc_code),
74
+ discount_percent: optionalNumber(args.discount_percent), notes: optionalString(args.notes),
75
+ physical_location: optionalString(args.physical_location), serialized: optionalBoolean(args.serialized),
76
+ vendor_ids: args.vendor_ids, category_ids: args.category_ids,
77
+ });
78
+ return jsonResult(await client.post("/products", body));
79
+ },
80
+ },
81
+ {
82
+ definition: {
83
+ name: "products_update",
84
+ description: "Update a product",
85
+ inputSchema: {
86
+ type: "object",
87
+ properties: {
88
+ id: { type: "number", description: "Product ID (required)" },
89
+ name: { type: "string" }, description: { type: "string" },
90
+ price_cost: { type: "number" }, price_retail: { type: "number" },
91
+ price_wholesale: { type: "number" }, condition: { type: "string" },
92
+ maintain_stock: { type: "boolean" }, quantity: { type: "number" },
93
+ disabled: { type: "boolean" }, taxable: { type: "boolean" },
94
+ product_category: { type: "string" }, upc_code: { type: "string" },
95
+ notes: { type: "string" }, physical_location: { type: "string" },
96
+ vendor_ids: { type: "array", items: { type: "number" } },
97
+ category_ids: { type: "array", items: { type: "number" } },
98
+ },
99
+ required: ["id"],
100
+ },
101
+ },
102
+ handler: async (args) => {
103
+ const id = requireId(args.id);
104
+ const body = pickDefined({
105
+ name: optionalString(args.name), description: optionalString(args.description),
106
+ price_cost: optionalNumber(args.price_cost), price_retail: optionalNumber(args.price_retail),
107
+ price_wholesale: optionalNumber(args.price_wholesale), condition: optionalString(args.condition),
108
+ maintain_stock: optionalBoolean(args.maintain_stock), quantity: optionalNumber(args.quantity),
109
+ disabled: optionalBoolean(args.disabled), taxable: optionalBoolean(args.taxable),
110
+ product_category: optionalString(args.product_category), upc_code: optionalString(args.upc_code),
111
+ notes: optionalString(args.notes), physical_location: optionalString(args.physical_location),
112
+ vendor_ids: args.vendor_ids, category_ids: args.category_ids,
113
+ });
114
+ return jsonResult(await client.put(`/products/${id}`, body));
115
+ },
116
+ },
117
+ {
118
+ definition: {
119
+ name: "products_barcode",
120
+ description: "Look up a product by barcode/UPC",
121
+ inputSchema: {
122
+ type: "object",
123
+ properties: { barcode: { type: "string", description: "Barcode/UPC value" } },
124
+ required: ["barcode"],
125
+ },
126
+ },
127
+ handler: async (args) => jsonResult(await client.get("/products/barcode", { barcode: args.barcode })),
128
+ },
129
+ {
130
+ definition: {
131
+ name: "products_categories",
132
+ description: "List product categories",
133
+ inputSchema: { type: "object", properties: {} },
134
+ },
135
+ handler: async () => jsonResult(await client.get("/products/categories")),
136
+ },
137
+ {
138
+ definition: {
139
+ name: "products_add_images",
140
+ description: "Add images to a product",
141
+ inputSchema: {
142
+ type: "object",
143
+ properties: {
144
+ id: { type: "number", description: "Product ID" },
145
+ files: { type: "array", items: { type: "string" }, description: "Image URLs" },
146
+ },
147
+ required: ["id", "files"],
148
+ },
149
+ },
150
+ handler: async (args) => {
151
+ const id = requireId(args.id);
152
+ return jsonResult(await client.post(`/products/${id}/add_images`, { files: args.files }));
153
+ },
154
+ },
155
+ {
156
+ definition: {
157
+ name: "products_delete_image",
158
+ description: "Delete an image from a product. The user MUST confirm.",
159
+ inputSchema: {
160
+ type: "object",
161
+ properties: {
162
+ id: { type: "number", description: "Product ID" },
163
+ confirmed: { type: "boolean", description: "Must be true" },
164
+ },
165
+ required: ["id", "confirmed"],
166
+ },
167
+ },
168
+ handler: async (args) => {
169
+ const id = requireId(args.id);
170
+ if (args.confirmed !== true)
171
+ return textResult(`⚠️ CONFIRMATION REQUIRED: Delete image from product #${id}? Call again with confirmed: true.`);
172
+ return jsonResult(await client.delete(`/products/${id}/delete_image`));
173
+ },
174
+ },
175
+ {
176
+ definition: {
177
+ name: "products_update_location_qty",
178
+ description: "Update product quantity at a location",
179
+ inputSchema: {
180
+ type: "object",
181
+ properties: {
182
+ id: { type: "number", description: "Product ID" },
183
+ location_quantity_id: { type: "number", description: "Location quantity ID" },
184
+ quantity: { type: "number", description: "New quantity" },
185
+ },
186
+ required: ["id", "location_quantity_id", "quantity"],
187
+ },
188
+ },
189
+ handler: async (args) => {
190
+ const id = requireId(args.id);
191
+ return jsonResult(await client.put(`/products/${id}/location_quantities`, {
192
+ location_quantity_id: requireId(args.location_quantity_id, "location_quantity_id"),
193
+ quantity: args.quantity,
194
+ }));
195
+ },
196
+ },
197
+ {
198
+ definition: {
199
+ name: "products_list_serials",
200
+ description: "List serial numbers for a product",
201
+ inputSchema: {
202
+ type: "object",
203
+ properties: { product_id: { type: "number", description: "Product ID" } },
204
+ required: ["product_id"],
205
+ },
206
+ },
207
+ handler: async (args) => {
208
+ const pid = requireId(args.product_id, "product_id");
209
+ return jsonResult(await client.get(`/products/${pid}/product_serials`));
210
+ },
211
+ },
212
+ {
213
+ definition: {
214
+ name: "products_create_serial",
215
+ description: "Create a serial number for a product",
216
+ inputSchema: {
217
+ type: "object",
218
+ properties: {
219
+ product_id: { type: "number", description: "Product ID" },
220
+ serial_number: { type: "string", description: "Serial number (required)" },
221
+ condition: { type: "string", description: "Condition" },
222
+ price_cost_cents: { type: "number", description: "Cost in cents" },
223
+ price_retail_cents: { type: "number", description: "Retail in cents" },
224
+ },
225
+ required: ["product_id", "serial_number"],
226
+ },
227
+ },
228
+ handler: async (args) => {
229
+ const pid = requireId(args.product_id, "product_id");
230
+ const body = pickDefined({
231
+ serial_number: requireString(args.serial_number, "serial_number"),
232
+ condition: optionalString(args.condition),
233
+ price_cost_cents: optionalNumber(args.price_cost_cents),
234
+ price_retail_cents: optionalNumber(args.price_retail_cents),
235
+ });
236
+ return jsonResult(await client.post(`/products/${pid}/product_serials`, body));
237
+ },
238
+ },
239
+ {
240
+ definition: {
241
+ name: "products_update_serial",
242
+ description: "Update a product serial",
243
+ inputSchema: {
244
+ type: "object",
245
+ properties: {
246
+ product_id: { type: "number", description: "Product ID" },
247
+ id: { type: "number", description: "Serial ID" },
248
+ serial_number: { type: "string" }, condition: { type: "string" },
249
+ price_cost_cents: { type: "number" }, price_retail_cents: { type: "number" },
250
+ notes: { type: "string" },
251
+ },
252
+ required: ["product_id", "id"],
253
+ },
254
+ },
255
+ handler: async (args) => {
256
+ const pid = requireId(args.product_id, "product_id");
257
+ const id = requireId(args.id);
258
+ const body = pickDefined({
259
+ serial_number: optionalString(args.serial_number), condition: optionalString(args.condition),
260
+ price_cost_cents: optionalNumber(args.price_cost_cents), price_retail_cents: optionalNumber(args.price_retail_cents),
261
+ notes: optionalString(args.notes),
262
+ });
263
+ return jsonResult(await client.put(`/products/${pid}/product_serials/${id}`, body));
264
+ },
265
+ },
266
+ {
267
+ definition: {
268
+ name: "products_attach_serial_to_line_item",
269
+ description: "Attach serial numbers to a line item",
270
+ inputSchema: {
271
+ type: "object",
272
+ properties: {
273
+ product_id: { type: "number", description: "Product ID" },
274
+ record_type: { type: "string", description: "Record type" },
275
+ line_item_id: { type: "number", description: "Line item ID" },
276
+ product_serial_ids: { type: "array", items: { type: "number" }, description: "Serial IDs" },
277
+ },
278
+ required: ["product_id", "line_item_id", "product_serial_ids"],
279
+ },
280
+ },
281
+ handler: async (args) => {
282
+ const pid = requireId(args.product_id, "product_id");
283
+ return jsonResult(await client.post(`/products/${pid}/product_serials/attach_to_line_item`, {
284
+ record_type: optionalString(args.record_type),
285
+ line_item_id: requireId(args.line_item_id, "line_item_id"),
286
+ product_serial_ids: args.product_serial_ids,
287
+ }));
288
+ },
289
+ },
290
+ {
291
+ definition: {
292
+ name: "products_list_skus",
293
+ description: "List SKUs for a product",
294
+ inputSchema: {
295
+ type: "object",
296
+ properties: { product_id: { type: "number", description: "Product ID" } },
297
+ required: ["product_id"],
298
+ },
299
+ },
300
+ handler: async (args) => jsonResult(await client.get(`/products/${requireId(args.product_id, "product_id")}/product_skus`)),
301
+ },
302
+ {
303
+ definition: {
304
+ name: "products_create_sku",
305
+ description: "Create a SKU for a product",
306
+ inputSchema: {
307
+ type: "object",
308
+ properties: {
309
+ product_id: { type: "number", description: "Product ID" },
310
+ vendor_id: { type: "string", description: "Vendor ID" },
311
+ value: { type: "string", description: "SKU value (required)" },
312
+ },
313
+ required: ["product_id", "value"],
314
+ },
315
+ },
316
+ handler: async (args) => {
317
+ const pid = requireId(args.product_id, "product_id");
318
+ const body = pickDefined({
319
+ vendor_id: optionalString(args.vendor_id),
320
+ value: requireString(args.value, "value"),
321
+ });
322
+ return jsonResult(await client.post(`/products/${pid}/product_skus`, body));
323
+ },
324
+ },
325
+ {
326
+ definition: {
327
+ name: "products_update_sku",
328
+ description: "Update a product SKU",
329
+ inputSchema: {
330
+ type: "object",
331
+ properties: {
332
+ product_id: { type: "number", description: "Product ID" },
333
+ id: { type: "number", description: "SKU ID" },
334
+ vendor_id: { type: "number", description: "Vendor ID" },
335
+ value: { type: "string", description: "SKU value" },
336
+ },
337
+ required: ["product_id", "id"],
338
+ },
339
+ },
340
+ handler: async (args) => {
341
+ const pid = requireId(args.product_id, "product_id");
342
+ const id = requireId(args.id);
343
+ const body = pickDefined({ vendor_id: optionalNumber(args.vendor_id), value: optionalString(args.value) });
344
+ return jsonResult(await client.put(`/products/${pid}/product_skus/${id}`, body));
345
+ },
346
+ },
347
+ ];
348
+ return { name: "products", description: "Products, serials, SKUs, categories, images, inventory", getTools: () => tools };
349
+ }
350
+ //# sourceMappingURL=products.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"products.js","sourceRoot":"","sources":["../../src/domains/products.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,4 @@
1
+ import type { SyncroApiClient } from "../api-client.js";
2
+ import type { DomainHandler } from "../types.js";
3
+ export declare function createDomain(client: SyncroApiClient): DomainHandler;
4
+ //# sourceMappingURL=rmm.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"rmm.d.ts","sourceRoot":"","sources":["../../src/domains/rmm.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,kBAAkB,CAAC;AACxD,OAAO,KAAK,EAAE,aAAa,EAAc,MAAM,aAAa,CAAC;AAI7D,wBAAgB,YAAY,CAAC,MAAM,EAAE,eAAe,GAAG,aAAa,CAgGnE"}
@@ -0,0 +1,100 @@
1
+ import { jsonResult, textResult } from "../types.js";
2
+ import { requireId, optionalString, optionalNumber, optionalBoolean, optionalId, pickDefined } from "../utils/validators.js";
3
+ export function createDomain(client) {
4
+ const tools = [
5
+ {
6
+ definition: {
7
+ name: "rmm_list_alerts",
8
+ description: "List RMM alerts",
9
+ inputSchema: {
10
+ type: "object",
11
+ properties: {
12
+ status: { type: "string", description: "Filter by status" },
13
+ page: { type: "number", description: "Page number" },
14
+ },
15
+ },
16
+ },
17
+ handler: async (args) => {
18
+ const params = pickDefined({ status: optionalString(args.status), page: optionalNumber(args.page) });
19
+ return jsonResult(await client.get("/rmm_alerts", params));
20
+ },
21
+ },
22
+ {
23
+ definition: {
24
+ name: "rmm_get_alert",
25
+ description: "Get an RMM alert by ID",
26
+ inputSchema: {
27
+ type: "object",
28
+ properties: { id: { type: "number", description: "Alert ID" } },
29
+ required: ["id"],
30
+ },
31
+ },
32
+ handler: async (args) => jsonResult(await client.get(`/rmm_alerts/${requireId(args.id)}`)),
33
+ },
34
+ {
35
+ definition: {
36
+ name: "rmm_create_alert",
37
+ description: "Create an RMM alert. Note: formatted_output (not in swagger) populates the 'Details' field in the UI. description maps to the 'Type' field. Include properties with trigger and description keys to match real alert structure.",
38
+ inputSchema: {
39
+ type: "object",
40
+ properties: {
41
+ customer_id: { type: "number", description: "Customer ID" },
42
+ asset_id: { type: "number", description: "Asset ID" },
43
+ description: { type: "string", description: "Alert description (maps to 'Type' field in UI)" },
44
+ formatted_output: { type: "string", description: "Populates the 'Details' field in UI (not in swagger docs)" },
45
+ resolved: { type: "boolean", description: "Whether resolved" },
46
+ status: { type: "string", description: "Status" },
47
+ properties: { type: "object", description: "Additional properties -- include trigger and description to match real alert structure" },
48
+ },
49
+ },
50
+ },
51
+ handler: async (args) => {
52
+ const body = pickDefined({
53
+ customer_id: optionalId(args.customer_id), asset_id: optionalId(args.asset_id),
54
+ description: optionalString(args.description), formatted_output: optionalString(args.formatted_output),
55
+ resolved: optionalBoolean(args.resolved),
56
+ status: optionalString(args.status), properties: args.properties,
57
+ });
58
+ return jsonResult(await client.post("/rmm_alerts", body));
59
+ },
60
+ },
61
+ {
62
+ definition: {
63
+ name: "rmm_mute_alert",
64
+ description: "Mute an RMM alert. Requires mute_for parameter.",
65
+ inputSchema: {
66
+ type: "object",
67
+ properties: {
68
+ id: { type: "number", description: "Alert ID" },
69
+ mute_for: { type: "string", description: "Mute duration (required). Known valid value: 'forever'" },
70
+ },
71
+ required: ["id", "mute_for"],
72
+ },
73
+ },
74
+ handler: async (args) => jsonResult(await client.post(`/rmm_alerts/${requireId(args.id)}/mute`, { mute_for: args.mute_for })),
75
+ },
76
+ {
77
+ definition: {
78
+ name: "rmm_delete_alert",
79
+ description: "DELETE (soft-resolve) an RMM alert. Sets resolved=true -- the alert is still readable via GET after deletion. The user MUST confirm.",
80
+ inputSchema: {
81
+ type: "object",
82
+ properties: {
83
+ id: { type: "number", description: "Alert ID" },
84
+ confirmed: { type: "boolean", description: "Must be true" },
85
+ },
86
+ required: ["id", "confirmed"],
87
+ },
88
+ },
89
+ handler: async (args) => {
90
+ const id = requireId(args.id);
91
+ if (args.confirmed !== true)
92
+ return textResult(`⚠️ CONFIRMATION REQUIRED: Delete RMM alert #${id}? Call again with confirmed: true.`);
93
+ const result = await client.delete(`/rmm_alerts/${id}`);
94
+ return result ? jsonResult(result) : textResult(`RMM alert #${id} deleted.`);
95
+ },
96
+ },
97
+ ];
98
+ return { name: "rmm", description: "RMM alerts", getTools: () => tools };
99
+ }
100
+ //# sourceMappingURL=rmm.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"rmm.js","sourceRoot":"","sources":["../../src/domains/rmm.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,4 @@
1
+ import type { SyncroApiClient } from "../api-client.js";
2
+ import type { DomainHandler } from "../types.js";
3
+ export declare function createDomain(client: SyncroApiClient): DomainHandler;
4
+ //# sourceMappingURL=scheduling.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"scheduling.d.ts","sourceRoot":"","sources":["../../src/domains/scheduling.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,kBAAkB,CAAC;AACxD,OAAO,KAAK,EAAE,aAAa,EAAc,MAAM,aAAa,CAAC;AAI7D,wBAAgB,YAAY,CAAC,MAAM,EAAE,eAAe,GAAG,aAAa,CAyMnE"}