@ourroadmaps/mcp 0.24.0 → 0.24.1

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 (2) hide show
  1. package/dist/index.js +1141 -388
  2. package/package.json +1 -1
package/dist/index.js CHANGED
@@ -223,298 +223,368 @@ var updateIdeaSchema = z6.object({
223
223
  order: z6.number().int().optional()
224
224
  });
225
225
  var ideaListSchema = z6.array(ideaSchema);
226
- // ../../packages/shared/src/schemas/product.ts
226
+ // ../../packages/shared/src/schemas/presentation.ts
227
227
  import { z as z7 } from "zod";
228
- var productSchema = z7.object({
228
+ var presentationSchema = z7.object({
229
229
  id: z7.string().uuid(),
230
230
  organizationId: z7.string(),
231
- parentId: z7.string().uuid().nullable(),
232
- type: productTypeSchema,
233
- name: z7.string(),
231
+ title: z7.string(),
232
+ description: z7.string().nullable(),
234
233
  order: z7.number().int(),
235
- isExpanded: z7.boolean(),
236
- deletedAt: z7.string().nullable(),
237
- createdAt: z7.string()
234
+ createdAt: z7.string(),
235
+ createdBy: z7.string(),
236
+ updatedAt: z7.string().nullable()
237
+ });
238
+ var createPresentationSchema = z7.object({
239
+ title: z7.string().min(1),
240
+ description: z7.string().nullable().optional()
241
+ });
242
+ var updatePresentationSchema = z7.object({
243
+ title: z7.string().min(1).optional(),
244
+ description: z7.string().nullable().optional()
245
+ });
246
+ var presentationListSchema = z7.array(presentationSchema);
247
+ // ../../packages/shared/src/schemas/product.ts
248
+ import { z as z8 } from "zod";
249
+ var productSchema = z8.object({
250
+ id: z8.string().uuid(),
251
+ organizationId: z8.string(),
252
+ parentId: z8.string().uuid().nullable(),
253
+ type: productTypeSchema,
254
+ name: z8.string(),
255
+ order: z8.number().int(),
256
+ isExpanded: z8.boolean(),
257
+ deletedAt: z8.string().nullable(),
258
+ createdAt: z8.string()
238
259
  });
239
- var createProductSchema = z7.object({
240
- name: z7.string().min(1),
241
- description: z7.string().nullable().optional(),
260
+ var createProductSchema = z8.object({
261
+ name: z8.string().min(1),
262
+ description: z8.string().nullable().optional(),
242
263
  type: productTypeSchema,
243
- parentId: z7.string().uuid().nullable().optional()
264
+ parentId: z8.string().uuid().nullable().optional()
244
265
  });
245
- var updateProductSchema = z7.object({
246
- name: z7.string().min(1).optional(),
247
- description: z7.string().nullable().optional(),
266
+ var updateProductSchema = z8.object({
267
+ name: z8.string().min(1).optional(),
268
+ description: z8.string().nullable().optional(),
248
269
  type: productTypeSchema.optional(),
249
- parentId: z7.string().uuid().nullable().optional(),
250
- order: z7.number().int().optional()
270
+ parentId: z8.string().uuid().nullable().optional(),
271
+ order: z8.number().int().optional()
251
272
  });
252
- var productListSchema = z7.array(productSchema);
273
+ var productListSchema = z8.array(productSchema);
253
274
  // ../../packages/shared/src/schemas/roadmap.ts
254
- import { z as z9 } from "zod";
275
+ import { z as z10 } from "zod";
255
276
 
256
277
  // ../../packages/shared/src/schemas/story.ts
257
- import { z as z8 } from "zod";
258
- var epicSchema = z8.object({
259
- id: z8.string().uuid(),
260
- roadmapItemId: z8.string().uuid(),
261
- organizationId: z8.string(),
262
- title: z8.string(),
263
- description: z8.string().nullable(),
264
- order: z8.number().int(),
265
- createdAt: z8.string(),
266
- updatedAt: z8.string(),
267
- deletedAt: z8.string().nullable()
278
+ import { z as z9 } from "zod";
279
+ var epicSchema = z9.object({
280
+ id: z9.string().uuid(),
281
+ roadmapItemId: z9.string().uuid(),
282
+ organizationId: z9.string(),
283
+ title: z9.string(),
284
+ description: z9.string().nullable(),
285
+ order: z9.number().int(),
286
+ createdAt: z9.string(),
287
+ updatedAt: z9.string(),
288
+ deletedAt: z9.string().nullable()
268
289
  });
269
- var storySchema = z8.object({
270
- id: z8.string().uuid(),
271
- roadmapItemId: z8.string().uuid(),
272
- epicId: z8.string().uuid().nullable(),
273
- organizationId: z8.string(),
274
- title: z8.string(),
275
- description: z8.string().nullable(),
276
- order: z8.number().int(),
277
- createdAt: z8.string(),
278
- updatedAt: z8.string(),
279
- deletedAt: z8.string().nullable()
290
+ var storySchema = z9.object({
291
+ id: z9.string().uuid(),
292
+ roadmapItemId: z9.string().uuid(),
293
+ epicId: z9.string().uuid().nullable(),
294
+ organizationId: z9.string(),
295
+ title: z9.string(),
296
+ description: z9.string().nullable(),
297
+ order: z9.number().int(),
298
+ createdAt: z9.string(),
299
+ updatedAt: z9.string(),
300
+ deletedAt: z9.string().nullable()
280
301
  });
281
302
  var epicWithStoriesSchema = epicSchema.extend({
282
- stories: z8.array(storySchema)
283
- });
284
- var createEpicSchema = z8.object({
285
- title: z8.string().min(1),
286
- description: z8.string().nullable().optional()
287
- });
288
- var createStorySchema = z8.object({
289
- title: z8.string().min(1),
290
- description: z8.string().nullable().optional()
291
- });
292
- var saveStoriesInputSchema = z8.object({
293
- epics: z8.array(z8.object({
294
- title: z8.string().min(1),
295
- description: z8.string().nullable().optional(),
296
- stories: z8.array(z8.object({
297
- title: z8.string().min(1),
298
- description: z8.string().nullable().optional()
303
+ stories: z9.array(storySchema)
304
+ });
305
+ var createEpicSchema = z9.object({
306
+ title: z9.string().min(1),
307
+ description: z9.string().nullable().optional()
308
+ });
309
+ var createStorySchema = z9.object({
310
+ title: z9.string().min(1),
311
+ description: z9.string().nullable().optional()
312
+ });
313
+ var saveStoriesInputSchema = z9.object({
314
+ epics: z9.array(z9.object({
315
+ title: z9.string().min(1),
316
+ description: z9.string().nullable().optional(),
317
+ stories: z9.array(z9.object({
318
+ title: z9.string().min(1),
319
+ description: z9.string().nullable().optional()
299
320
  })).optional().default([])
300
321
  })).optional().default([]),
301
- stories: z8.array(z8.object({
302
- title: z8.string().min(1),
303
- description: z8.string().nullable().optional()
322
+ stories: z9.array(z9.object({
323
+ title: z9.string().min(1),
324
+ description: z9.string().nullable().optional()
304
325
  })).optional().default([])
305
326
  });
306
- var updateEpicSchema = z8.object({
307
- title: z8.string().min(1).optional(),
308
- description: z8.string().nullable().optional()
327
+ var updateEpicSchema = z9.object({
328
+ title: z9.string().min(1).optional(),
329
+ description: z9.string().nullable().optional()
309
330
  });
310
- var updateStorySchema = z8.object({
311
- title: z8.string().min(1).optional(),
312
- description: z8.string().nullable().optional(),
313
- epicId: z8.string().uuid().nullable().optional()
331
+ var updateStorySchema = z9.object({
332
+ title: z9.string().min(1).optional(),
333
+ description: z9.string().nullable().optional(),
334
+ epicId: z9.string().uuid().nullable().optional()
314
335
  });
315
- var reorderStoriesSchema = z8.object({
316
- epicOrder: z8.array(z8.string().uuid()).optional(),
317
- storyOrder: z8.record(z8.string(), z8.array(z8.string().uuid())).optional(),
318
- standaloneOrder: z8.array(z8.string().uuid()).optional()
336
+ var reorderStoriesSchema = z9.object({
337
+ epicOrder: z9.array(z9.string().uuid()).optional(),
338
+ storyOrder: z9.record(z9.string(), z9.array(z9.string().uuid())).optional(),
339
+ standaloneOrder: z9.array(z9.string().uuid()).optional()
319
340
  });
320
341
 
321
342
  // ../../packages/shared/src/schemas/roadmap.ts
322
- var flexibleDateSchema = z9.object({
323
- value: z9.string(),
343
+ var flexibleDateSchema = z10.object({
344
+ value: z10.string(),
324
345
  granularity: dateGranularitySchema
325
346
  });
326
- var labelSchema = z9.object({
327
- id: z9.string().uuid(),
328
- type: z9.enum(["category", "location", "label"]),
329
- name: z9.string(),
330
- color: z9.string().nullable(),
331
- address: z9.string().nullable()
347
+ var labelSchema = z10.object({
348
+ id: z10.string().uuid(),
349
+ type: z10.enum(["category", "location", "label"]),
350
+ name: z10.string(),
351
+ color: z10.string().nullable(),
352
+ address: z10.string().nullable()
332
353
  });
333
- var appSchema = z9.object({
334
- id: z9.string().uuid(),
335
- name: z9.string()
354
+ var appSchema = z10.object({
355
+ id: z10.string().uuid(),
356
+ name: z10.string()
336
357
  });
337
- var roadmapSchema = z9.object({
338
- id: z9.string().uuid(),
339
- organizationId: z9.string(),
340
- title: z9.string(),
358
+ var roadmapSchema = z10.object({
359
+ id: z10.string().uuid(),
360
+ organizationId: z10.string(),
361
+ title: z10.string(),
341
362
  horizon: horizonSchema.nullable(),
342
363
  status: roadmapStatusSchema.nullable(),
343
364
  value: effortSchema.nullable(),
344
365
  effort: effortSchema.nullable(),
345
- order: z9.number().int(),
346
- estimatedSeconds: z9.number().int().nullable(),
366
+ order: z10.number().int(),
367
+ estimatedSeconds: z10.number().int().nullable(),
347
368
  date: flexibleDateSchema.nullable(),
348
369
  target: flexibleDateSchema.nullable(),
349
- completedAt: z9.string().nullable(),
350
- createdAt: z9.string(),
351
- createdBy: z9.string(),
352
- prompt: z9.string().nullable(),
353
- labels: z9.array(labelSchema),
354
- apps: z9.array(appSchema)
370
+ completedAt: z10.string().nullable(),
371
+ createdAt: z10.string(),
372
+ createdBy: z10.string(),
373
+ prompt: z10.string().nullable(),
374
+ labels: z10.array(labelSchema),
375
+ apps: z10.array(appSchema)
355
376
  });
356
- var createRoadmapSchema = z9.object({
357
- title: z9.string().min(1),
377
+ var createRoadmapSchema = z10.object({
378
+ title: z10.string().min(1),
358
379
  status: roadmapStatusSchema.optional(),
359
380
  horizon: horizonSchema.optional(),
360
381
  value: effortSchema.nullable().optional(),
361
382
  effort: effortSchema.nullable().optional(),
362
- estimatedSeconds: z9.number().int().nullable().optional(),
383
+ estimatedSeconds: z10.number().int().nullable().optional(),
363
384
  date: flexibleDateSchema.nullable().optional(),
364
385
  target: flexibleDateSchema.nullable().optional(),
365
- prompt: z9.string().nullable().optional(),
366
- brainstormNotes: z9.string().nullable().optional()
386
+ prompt: z10.string().nullable().optional(),
387
+ brainstormNotes: z10.string().nullable().optional()
367
388
  });
368
- var updateRoadmapSchema = z9.object({
369
- title: z9.string().min(1).optional(),
389
+ var updateRoadmapSchema = z10.object({
390
+ title: z10.string().min(1).optional(),
370
391
  status: roadmapStatusSchema.optional(),
371
392
  horizon: horizonSchema.optional(),
372
393
  value: effortSchema.nullable().optional(),
373
394
  effort: effortSchema.nullable().optional(),
374
- order: z9.number().int().optional(),
375
- estimatedSeconds: z9.number().int().nullable().optional(),
395
+ order: z10.number().int().optional(),
396
+ estimatedSeconds: z10.number().int().nullable().optional(),
376
397
  date: flexibleDateSchema.nullable().optional(),
377
398
  target: flexibleDateSchema.nullable().optional(),
378
- prompt: z9.string().nullable().optional(),
379
- brainstormNotes: z9.string().nullable().optional()
399
+ prompt: z10.string().nullable().optional(),
400
+ brainstormNotes: z10.string().nullable().optional()
380
401
  });
381
- var prdOutcomeSchema = z9.object({
382
- id: z9.string().uuid(),
383
- description: z9.string(),
402
+ var prdOutcomeSchema = z10.object({
403
+ id: z10.string().uuid(),
404
+ description: z10.string(),
384
405
  status: prdStatusSchema,
385
- order: z9.number().int(),
386
- completedAt: z9.string().nullable()
406
+ order: z10.number().int(),
407
+ completedAt: z10.string().nullable()
387
408
  });
388
- var prdSchema = z9.object({
389
- id: z9.string().uuid(),
390
- what: z9.string().nullable(),
391
- why: z9.string().nullable(),
392
- outcomes: z9.array(prdOutcomeSchema)
409
+ var prdSchema = z10.object({
410
+ id: z10.string().uuid(),
411
+ what: z10.string().nullable(),
412
+ why: z10.string().nullable(),
413
+ outcomes: z10.array(prdOutcomeSchema)
393
414
  });
394
- var savePrdInputSchema = z9.object({
395
- what: z9.string().nullable(),
396
- why: z9.string().nullable(),
415
+ var savePrdInputSchema = z10.object({
416
+ what: z10.string().nullable(),
417
+ why: z10.string().nullable(),
397
418
  status: prdStatusSchema,
398
- outcomes: z9.array(z9.object({
399
- id: z9.string().uuid().optional(),
400
- description: z9.string(),
401
- order: z9.number().int().min(0)
419
+ outcomes: z10.array(z10.object({
420
+ id: z10.string().uuid().optional(),
421
+ description: z10.string(),
422
+ order: z10.number().int().min(0)
402
423
  }))
403
424
  });
404
- var brainstormMediaSchema = z9.object({
405
- id: z9.string().uuid(),
406
- mediaUrl: z9.string(),
425
+ var brainstormMediaSchema = z10.object({
426
+ id: z10.string().uuid(),
427
+ mediaUrl: z10.string(),
407
428
  mediaType: brainstormMediaTypeSchema,
408
- description: z9.string().nullable(),
409
- order: z9.number().int(),
410
- createdAt: z9.string()
429
+ description: z10.string().nullable(),
430
+ order: z10.number().int(),
431
+ createdAt: z10.string()
411
432
  });
412
- var wireframeSchema = z9.object({
413
- id: z9.string().uuid(),
414
- description: z9.string().nullable(),
415
- imageUrl: z9.string().nullable(),
416
- order: z9.number().int()
433
+ var wireframeSchema = z10.object({
434
+ id: z10.string().uuid(),
435
+ description: z10.string().nullable(),
436
+ imageUrl: z10.string().nullable(),
437
+ order: z10.number().int()
417
438
  });
418
- var prototypeSchema = z9.object({
419
- id: z9.string().uuid(),
420
- publicUrl: z9.string().url(),
421
- expiresAt: z9.string().datetime(),
422
- fileCount: z9.number().int().positive(),
423
- entryPoint: z9.string(),
424
- createdAt: z9.string().datetime()
439
+ var prototypeSchema = z10.object({
440
+ id: z10.string().uuid(),
441
+ publicUrl: z10.string().url(),
442
+ expiresAt: z10.string().datetime(),
443
+ fileCount: z10.number().int().positive(),
444
+ entryPoint: z10.string(),
445
+ createdAt: z10.string().datetime()
425
446
  });
426
- var featureLinkSchema = z9.object({
427
- id: z9.string().uuid(),
428
- featureId: z9.string().uuid(),
429
- feature: z9.object({
430
- id: z9.string().uuid(),
431
- name: z9.string(),
432
- type: z9.enum(["area", "feature"])
447
+ var featureLinkSchema = z10.object({
448
+ id: z10.string().uuid(),
449
+ featureId: z10.string().uuid(),
450
+ feature: z10.object({
451
+ id: z10.string().uuid(),
452
+ name: z10.string(),
453
+ type: z10.enum(["area", "feature"])
433
454
  }),
434
- createdAt: z9.string()
455
+ createdAt: z10.string()
435
456
  });
436
- var phaseDesignSchema = z9.object({
437
- id: z9.string().uuid(),
438
- description: z9.string().nullable()
457
+ var phaseDesignSchema = z10.object({
458
+ id: z10.string().uuid(),
459
+ description: z10.string().nullable()
439
460
  });
440
- var phasePlanSchema = z9.object({
441
- id: z9.string().uuid(),
442
- description: z9.string().nullable()
461
+ var phasePlanSchema = z10.object({
462
+ id: z10.string().uuid(),
463
+ description: z10.string().nullable()
443
464
  });
444
- var phaseBuildSchema = z9.object({
445
- id: z9.string().uuid(),
446
- description: z9.string().nullable(),
447
- prompt: z9.string().nullable()
465
+ var phaseBuildSchema = z10.object({
466
+ id: z10.string().uuid(),
467
+ description: z10.string().nullable(),
468
+ prompt: z10.string().nullable()
448
469
  });
449
- var phaseReleaseSchema = z9.object({
450
- id: z9.string().uuid(),
451
- description: z9.string().nullable()
470
+ var phaseReleaseSchema = z10.object({
471
+ id: z10.string().uuid(),
472
+ description: z10.string().nullable()
452
473
  });
453
474
  var roadmapDetailSchema = roadmapSchema.extend({
454
475
  prd: prdSchema.nullable(),
455
- wireframes: z9.array(wireframeSchema),
456
- prototypes: z9.array(prototypeSchema),
457
- brainstormMedia: z9.array(brainstormMediaSchema),
458
- brainstormNotes: z9.string().nullable(),
459
- featureLinks: z9.array(featureLinkSchema),
460
- epics: z9.array(epicWithStoriesSchema),
461
- stories: z9.array(storySchema),
476
+ wireframes: z10.array(wireframeSchema),
477
+ prototypes: z10.array(prototypeSchema),
478
+ brainstormMedia: z10.array(brainstormMediaSchema),
479
+ brainstormNotes: z10.string().nullable(),
480
+ featureLinks: z10.array(featureLinkSchema),
481
+ epics: z10.array(epicWithStoriesSchema),
482
+ stories: z10.array(storySchema),
462
483
  design: phaseDesignSchema.nullable(),
463
484
  plan: phasePlanSchema.nullable(),
464
485
  build: phaseBuildSchema.nullable(),
465
486
  release: phaseReleaseSchema.nullable(),
466
- exports: z9.array(exportSchema)
487
+ exports: z10.array(exportSchema)
467
488
  });
468
- var roadmapListSchema = z9.array(roadmapSchema);
489
+ var roadmapListSchema = z10.array(roadmapSchema);
469
490
  // ../../packages/shared/src/schemas/scenario.ts
470
- import { z as z10 } from "zod";
471
- var scenarioSchema = z10.object({
472
- id: z10.string().uuid(),
473
- title: z10.string().min(1),
474
- given: z10.string().nullable(),
475
- when: z10.string().nullable(),
476
- then: z10.string().nullable(),
477
- order: z10.number().int(),
478
- createdAt: z10.string().datetime(),
479
- updatedAt: z10.string().datetime()
491
+ import { z as z11 } from "zod";
492
+ var scenarioSchema = z11.object({
493
+ id: z11.string().uuid(),
494
+ title: z11.string().min(1),
495
+ given: z11.string().nullable(),
496
+ when: z11.string().nullable(),
497
+ then: z11.string().nullable(),
498
+ order: z11.number().int(),
499
+ createdAt: z11.string().datetime(),
500
+ updatedAt: z11.string().datetime()
480
501
  });
481
- var createScenarioSchema = z10.object({
482
- title: z10.string().min(1),
483
- given: z10.string().nullable().optional(),
484
- when: z10.string().nullable().optional(),
485
- then: z10.string().nullable().optional(),
486
- roadmapId: z10.string().uuid()
502
+ var createScenarioSchema = z11.object({
503
+ title: z11.string().min(1),
504
+ given: z11.string().nullable().optional(),
505
+ when: z11.string().nullable().optional(),
506
+ then: z11.string().nullable().optional(),
507
+ roadmapId: z11.string().uuid()
487
508
  });
488
- var updateScenarioSchema = z10.object({
489
- title: z10.string().min(1).optional(),
490
- given: z10.string().nullable().optional(),
491
- when: z10.string().nullable().optional(),
492
- then: z10.string().nullable().optional(),
493
- order: z10.number().int().optional()
509
+ var updateScenarioSchema = z11.object({
510
+ title: z11.string().min(1).optional(),
511
+ given: z11.string().nullable().optional(),
512
+ when: z11.string().nullable().optional(),
513
+ then: z11.string().nullable().optional(),
514
+ order: z11.number().int().optional()
515
+ });
516
+ var scenarioListSchema = z11.array(scenarioSchema);
517
+ // ../../packages/shared/src/schemas/slide.ts
518
+ import { z as z12 } from "zod";
519
+ var slideContentSchema = z12.object({
520
+ body: z12.string().optional()
521
+ });
522
+ var slideSchema = z12.object({
523
+ id: z12.string().uuid(),
524
+ variantId: z12.string().uuid(),
525
+ title: z12.string(),
526
+ content: slideContentSchema.nullable(),
527
+ speakerNotes: z12.string().nullable(),
528
+ order: z12.number().int(),
529
+ createdAt: z12.string(),
530
+ createdBy: z12.string(),
531
+ updatedAt: z12.string().nullable()
494
532
  });
495
- var scenarioListSchema = z10.array(scenarioSchema);
533
+ var createSlideSchema = z12.object({
534
+ title: z12.string().optional(),
535
+ content: slideContentSchema.nullable().optional(),
536
+ speakerNotes: z12.string().nullable().optional()
537
+ });
538
+ var updateSlideSchema = z12.object({
539
+ title: z12.string().optional(),
540
+ content: slideContentSchema.nullable().optional(),
541
+ speakerNotes: z12.string().nullable().optional()
542
+ });
543
+ var slideListSchema = z12.array(slideSchema);
496
544
  // ../../packages/shared/src/schemas/status-update.ts
497
- import { z as z11 } from "zod";
498
- var statusUpdateItemSchema = z11.object({
499
- id: z11.string().uuid(),
500
- roadmapItemId: z11.string().uuid(),
501
- titleAtSnapshot: z11.string(),
502
- statusAtSnapshot: z11.string(),
503
- designWalkthroughUrl: z11.string().nullable(),
504
- releaseWalkthroughUrl: z11.string().nullable()
545
+ import { z as z13 } from "zod";
546
+ var statusUpdateItemSchema = z13.object({
547
+ id: z13.string().uuid(),
548
+ roadmapItemId: z13.string().uuid(),
549
+ titleAtSnapshot: z13.string(),
550
+ statusAtSnapshot: z13.string(),
551
+ designWalkthroughUrl: z13.string().nullable(),
552
+ releaseWalkthroughUrl: z13.string().nullable()
505
553
  });
506
- var statusUpdateSchema = z11.object({
507
- id: z11.string().uuid(),
508
- title: z11.string().nullable(),
509
- startDate: z11.string(),
510
- endDate: z11.string(),
511
- content: z11.string(),
512
- createdAt: z11.string(),
513
- items: z11.array(statusUpdateItemSchema).optional()
514
- });
515
- var statusUpdateListSchema = z11.array(statusUpdateSchema);
554
+ var statusUpdateSchema = z13.object({
555
+ id: z13.string().uuid(),
556
+ title: z13.string().nullable(),
557
+ startDate: z13.string(),
558
+ endDate: z13.string(),
559
+ content: z13.string(),
560
+ createdAt: z13.string(),
561
+ items: z13.array(statusUpdateItemSchema).optional()
562
+ });
563
+ var statusUpdateListSchema = z13.array(statusUpdateSchema);
564
+ // ../../packages/shared/src/schemas/variant.ts
565
+ import { z as z14 } from "zod";
566
+ var variantSchema = z14.object({
567
+ id: z14.string().uuid(),
568
+ presentationId: z14.string().uuid(),
569
+ name: z14.string(),
570
+ audienceId: z14.string().uuid().nullable(),
571
+ isDefault: z14.boolean(),
572
+ order: z14.number().int(),
573
+ createdAt: z14.string(),
574
+ createdBy: z14.string(),
575
+ updatedAt: z14.string().nullable()
576
+ });
577
+ var createVariantSchema = z14.object({
578
+ name: z14.string().min(1),
579
+ audienceId: z14.string().uuid().nullable().optional()
580
+ });
581
+ var updateVariantSchema = z14.object({
582
+ name: z14.string().min(1).optional(),
583
+ audienceId: z14.string().uuid().nullable().optional()
584
+ });
585
+ var variantListSchema = z14.array(variantSchema);
516
586
  // src/tools/index.ts
517
- import { z as z12 } from "zod";
587
+ import { z as z15 } from "zod";
518
588
 
519
589
  // src/auth.ts
520
590
  function getCredentials() {
@@ -1050,6 +1120,121 @@ class ApiClient {
1050
1120
  async deleteExport(id) {
1051
1121
  await this.request(`/v1/exports/${id}`, { method: "DELETE" });
1052
1122
  }
1123
+ async listPresentations() {
1124
+ const response = await this.request("/v1/presentations");
1125
+ return { items: response.data, total: response.data.length };
1126
+ }
1127
+ async getPresentation(id) {
1128
+ const response = await this.request(`/v1/presentations/${id}`);
1129
+ return response.data;
1130
+ }
1131
+ async createPresentation(data) {
1132
+ const response = await this.request("/v1/presentations", {
1133
+ method: "POST",
1134
+ body: JSON.stringify(data)
1135
+ });
1136
+ return response.data;
1137
+ }
1138
+ async updatePresentation(id, data) {
1139
+ const response = await this.request(`/v1/presentations/${id}`, {
1140
+ method: "PATCH",
1141
+ body: JSON.stringify(data)
1142
+ });
1143
+ return response.data;
1144
+ }
1145
+ async deletePresentation(id) {
1146
+ await this.request(`/v1/presentations/${id}`, { method: "DELETE" });
1147
+ }
1148
+ async reorderPresentations(items) {
1149
+ await this.request("/v1/presentations/reorder", {
1150
+ method: "POST",
1151
+ body: JSON.stringify({ items })
1152
+ });
1153
+ }
1154
+ async listVariants(presentationId) {
1155
+ const response = await this.request(`/v1/presentations/${presentationId}/variants`);
1156
+ return { items: response.data, total: response.data.length };
1157
+ }
1158
+ async getVariant(presentationId, variantId) {
1159
+ const response = await this.request(`/v1/presentations/${presentationId}/variants/${variantId}`);
1160
+ return response.data;
1161
+ }
1162
+ async createVariant(presentationId, data) {
1163
+ const response = await this.request(`/v1/presentations/${presentationId}/variants`, {
1164
+ method: "POST",
1165
+ body: JSON.stringify(data)
1166
+ });
1167
+ return response.data;
1168
+ }
1169
+ async updateVariant(presentationId, variantId, data) {
1170
+ const response = await this.request(`/v1/presentations/${presentationId}/variants/${variantId}`, {
1171
+ method: "PATCH",
1172
+ body: JSON.stringify(data)
1173
+ });
1174
+ return response.data;
1175
+ }
1176
+ async deleteVariant(presentationId, variantId) {
1177
+ await this.request(`/v1/presentations/${presentationId}/variants/${variantId}`, {
1178
+ method: "DELETE"
1179
+ });
1180
+ }
1181
+ async reorderVariants(presentationId, items) {
1182
+ await this.request(`/v1/presentations/${presentationId}/variants/reorder`, {
1183
+ method: "POST",
1184
+ body: JSON.stringify({ items })
1185
+ });
1186
+ }
1187
+ async cloneVariant(presentationId, variantId) {
1188
+ const response = await this.request(`/v1/presentations/${presentationId}/variants/${variantId}/clone`, { method: "POST" });
1189
+ return response.data;
1190
+ }
1191
+ async setDefaultVariant(presentationId, variantId) {
1192
+ await this.request(`/v1/presentations/${presentationId}/variants/${variantId}/set-default`, {
1193
+ method: "POST"
1194
+ });
1195
+ }
1196
+ async listSlides(presentationId, variantId) {
1197
+ const response = await this.request(`/v1/presentations/${presentationId}/variants/${variantId}/slides`);
1198
+ return { items: response.data, total: response.data.length };
1199
+ }
1200
+ async getSlide(presentationId, variantId, slideId) {
1201
+ const response = await this.request(`/v1/presentations/${presentationId}/variants/${variantId}/slides/${slideId}`);
1202
+ return response.data;
1203
+ }
1204
+ async createSlide(presentationId, variantId, data) {
1205
+ const response = await this.request(`/v1/presentations/${presentationId}/variants/${variantId}/slides`, {
1206
+ method: "POST",
1207
+ body: JSON.stringify(data)
1208
+ });
1209
+ return response.data;
1210
+ }
1211
+ async updateSlide(presentationId, variantId, slideId, data) {
1212
+ const response = await this.request(`/v1/presentations/${presentationId}/variants/${variantId}/slides/${slideId}`, {
1213
+ method: "PATCH",
1214
+ body: JSON.stringify(data)
1215
+ });
1216
+ return response.data;
1217
+ }
1218
+ async deleteSlide(presentationId, variantId, slideId) {
1219
+ await this.request(`/v1/presentations/${presentationId}/variants/${variantId}/slides/${slideId}`, { method: "DELETE" });
1220
+ }
1221
+ async reorderSlides(presentationId, variantId, items) {
1222
+ await this.request(`/v1/presentations/${presentationId}/variants/${variantId}/slides/reorder`, {
1223
+ method: "POST",
1224
+ body: JSON.stringify({ items })
1225
+ });
1226
+ }
1227
+ async getVariantPresentationId(variantId) {
1228
+ const presentations = await this.listPresentations();
1229
+ for (const presentation2 of presentations.items) {
1230
+ const variants = await this.listVariants(presentation2.id);
1231
+ const found = variants.items.find((v) => v.id === variantId);
1232
+ if (found) {
1233
+ return presentation2.id;
1234
+ }
1235
+ }
1236
+ return null;
1237
+ }
1053
1238
  }
1054
1239
  var client = null;
1055
1240
  function getApiClient() {
@@ -1139,6 +1324,26 @@ function registerAllTools(server) {
1139
1324
  registerCreateExport(server);
1140
1325
  registerUpdateExport(server);
1141
1326
  registerDeleteExport(server);
1327
+ registerListPresentations(server);
1328
+ registerGetPresentation(server);
1329
+ registerCreatePresentation(server);
1330
+ registerUpdatePresentation(server);
1331
+ registerDeletePresentation(server);
1332
+ registerReorderPresentations(server);
1333
+ registerListVariants(server);
1334
+ registerGetVariant(server);
1335
+ registerCreateVariant(server);
1336
+ registerUpdateVariant(server);
1337
+ registerDeleteVariant(server);
1338
+ registerReorderVariants(server);
1339
+ registerCloneVariant(server);
1340
+ registerSetDefaultVariant(server);
1341
+ registerListSlides(server);
1342
+ registerGetSlide(server);
1343
+ registerCreateSlide(server);
1344
+ registerUpdateSlide(server);
1345
+ registerDeleteSlide(server);
1346
+ registerReorderSlides(server);
1142
1347
  }
1143
1348
  function registerGetWorkflows(server) {
1144
1349
  server.registerTool("get_workflows", {
@@ -1161,13 +1366,13 @@ function registerSearchRoadmaps(server) {
1161
1366
  server.registerTool("search_roadmaps", {
1162
1367
  description: "Search for roadmap items by title, status, or horizon. Returns a list of matching roadmap items with basic info.",
1163
1368
  inputSchema: {
1164
- query: z12.string().optional().describe("Search query to match against title or description"),
1369
+ query: z15.string().optional().describe("Search query to match against title or description"),
1165
1370
  status: roadmapStatusSchema.optional().describe("Filter by status"),
1166
1371
  horizon: horizonSchema.optional().describe("Filter by planning horizon"),
1167
- phase: z12.string().optional().describe("Filter by phase"),
1168
- phaseStep: z12.string().optional().describe("Filter by phase step"),
1169
- limit: z12.number().int().min(1).max(100).optional().describe("Max items to return (default 10)"),
1170
- offset: z12.number().int().min(0).optional().describe("Number of items to skip (default 0)")
1372
+ phase: z15.string().optional().describe("Filter by phase"),
1373
+ phaseStep: z15.string().optional().describe("Filter by phase step"),
1374
+ limit: z15.number().int().min(1).max(100).optional().describe("Max items to return (default 10)"),
1375
+ offset: z15.number().int().min(0).optional().describe("Number of items to skip (default 0)")
1171
1376
  }
1172
1377
  }, async ({
1173
1378
  query,
@@ -1218,7 +1423,7 @@ function registerGetRoadmap(server) {
1218
1423
  server.registerTool("get_roadmap", {
1219
1424
  description: "Get full details of a roadmap item including PRD, wireframes, brainstorm media, linked features, epics, and stories.",
1220
1425
  inputSchema: {
1221
- id: z12.string().describe("The UUID of the roadmap item")
1426
+ id: z15.string().describe("The UUID of the roadmap item")
1222
1427
  }
1223
1428
  }, async ({ id }) => {
1224
1429
  const client2 = getApiClient();
@@ -1272,7 +1477,7 @@ function registerSearchFeatures(server) {
1272
1477
  server.registerTool("search_features", {
1273
1478
  description: "Search for features and feature areas by name. Returns a list of matching features with basic info.",
1274
1479
  inputSchema: {
1275
- query: z12.string().optional().describe("Search query to match against name"),
1480
+ query: z15.string().optional().describe("Search query to match against name"),
1276
1481
  type: featureTypeSchema.optional().describe("Filter by type (feature or area)")
1277
1482
  }
1278
1483
  }, async ({ query, type }) => {
@@ -1304,7 +1509,7 @@ function registerGetFeature(server) {
1304
1509
  server.registerTool("get_feature", {
1305
1510
  description: "Get full details of a feature including outcomes, child features, and linked roadmap items.",
1306
1511
  inputSchema: {
1307
- id: z12.string().describe("The UUID of the feature")
1512
+ id: z15.string().describe("The UUID of the feature")
1308
1513
  }
1309
1514
  }, async ({ id }) => {
1310
1515
  const client2 = getApiClient();
@@ -1343,7 +1548,7 @@ function registerSearchIdeas(server) {
1343
1548
  server.registerTool("search_ideas", {
1344
1549
  description: "Search for ideas by title or status. Returns a list of matching ideas with basic info.",
1345
1550
  inputSchema: {
1346
- query: z12.string().optional().describe("Search query to match against title or description"),
1551
+ query: z15.string().optional().describe("Search query to match against title or description"),
1347
1552
  status: ideaStatusSchema.optional().describe("Filter by status")
1348
1553
  }
1349
1554
  }, async ({ query, status }) => {
@@ -1443,9 +1648,9 @@ function registerCaptureIdea(server) {
1443
1648
  server.registerTool("capture_idea", {
1444
1649
  description: "Quickly capture a new idea. Ideas are suggestions that can later be reviewed and potentially converted to roadmap items.",
1445
1650
  inputSchema: {
1446
- title: z12.string().describe("Title of the idea"),
1447
- description: z12.string().optional().describe("Detailed description of the idea"),
1448
- source: z12.string().optional().describe('Source of the idea (defaults to "claude-code")')
1651
+ title: z15.string().describe("Title of the idea"),
1652
+ description: z15.string().optional().describe("Detailed description of the idea"),
1653
+ source: z15.string().optional().describe('Source of the idea (defaults to "claude-code")')
1449
1654
  }
1450
1655
  }, async ({
1451
1656
  title,
@@ -1482,16 +1687,16 @@ function registerCreateRoadmapItem(server) {
1482
1687
  server.registerTool("create_roadmap_item", {
1483
1688
  description: "Create a new roadmap item. Use this to add planned work to the roadmap.",
1484
1689
  inputSchema: {
1485
- title: z12.string().describe("Title of the roadmap item"),
1690
+ title: z15.string().describe("Title of the roadmap item"),
1486
1691
  status: roadmapStatusSchema.optional().describe('Status (defaults to "not_started")'),
1487
1692
  horizon: horizonSchema.optional().describe('Planning horizon (defaults to "inbox")'),
1488
- phase: z12.string().optional().describe('Initial phase key (e.g., "brainstorm", "prd", "design")'),
1489
- phaseStep: z12.string().optional().describe('Initial step within phase (e.g., "not_started", "drafting")'),
1490
- initiativeId: z12.string().optional().describe("UUID of initiative to link this item to on creation"),
1693
+ phase: z15.string().optional().describe('Initial phase key (e.g., "brainstorm", "prd", "design")'),
1694
+ phaseStep: z15.string().optional().describe('Initial step within phase (e.g., "not_started", "drafting")'),
1695
+ initiativeId: z15.string().optional().describe("UUID of initiative to link this item to on creation"),
1491
1696
  dateGranularity: dateGranularitySchema2.optional().describe("Planned date granularity: day, month, quarter, half-year, or year"),
1492
- dateValue: z12.string().optional().describe('Planned date value matching granularity (e.g., "2024-03-15" for day, "2024-Q1" for quarter)'),
1697
+ dateValue: z15.string().optional().describe('Planned date value matching granularity (e.g., "2024-03-15" for day, "2024-Q1" for quarter)'),
1493
1698
  targetGranularity: dateGranularitySchema2.optional().describe("Deadline/target date granularity: day, month, quarter, half-year, or year"),
1494
- targetValue: z12.string().optional().describe('Deadline/target date value matching granularity (e.g., "2024-03-15" for day, "2024-Q1" for quarter)')
1699
+ targetValue: z15.string().optional().describe('Deadline/target date value matching granularity (e.g., "2024-03-15" for day, "2024-Q1" for quarter)')
1495
1700
  }
1496
1701
  }, async ({
1497
1702
  title,
@@ -1553,30 +1758,30 @@ function registerCreateRoadmapItem(server) {
1553
1758
  };
1554
1759
  });
1555
1760
  }
1556
- var effortSizeSchema = z12.enum(["xs", "s", "m", "l", "xl"]);
1761
+ var effortSizeSchema = z15.enum(["xs", "s", "m", "l", "xl"]);
1557
1762
  function registerUpdateRoadmapItem(server) {
1558
1763
  server.registerTool("update_roadmap_item", {
1559
1764
  description: "Update an existing roadmap item. Can update title, status, horizon, value, effort, order, prompt, initiative link, target date, phase, phaseStep, or brainstorm notes.",
1560
1765
  inputSchema: {
1561
- id: z12.string().describe("The UUID of the roadmap item to update"),
1562
- title: z12.string().optional().describe("New title"),
1766
+ id: z15.string().describe("The UUID of the roadmap item to update"),
1767
+ title: z15.string().optional().describe("New title"),
1563
1768
  status: roadmapStatusSchema.optional().describe("New status"),
1564
1769
  horizon: horizonSchema.optional().describe("New planning horizon"),
1565
- phase: z12.string().optional().describe('Current phase key (e.g., "prd", "design", "build")'),
1566
- phaseStep: z12.string().optional().describe('Current step within phase (e.g., "drafting", "needs_review", "approved")'),
1567
- value: z12.number().int().min(1).max(3).nullable().optional().describe("Value rating (1-3 stars, where 3 is highest value)"),
1770
+ phase: z15.string().optional().describe('Current phase key (e.g., "prd", "design", "build")'),
1771
+ phaseStep: z15.string().optional().describe('Current step within phase (e.g., "drafting", "needs_review", "approved")'),
1772
+ value: z15.number().int().min(1).max(3).nullable().optional().describe("Value rating (1-3 stars, where 3 is highest value)"),
1568
1773
  effort: effortSizeSchema.nullable().optional().describe("Effort estimate (xs=extra small, s=small, m=medium, l=large, xl=extra large)"),
1569
- order: z12.number().int().min(0).optional().describe("Sort order for prioritization (lower numbers appear first)"),
1570
- initiativeId: z12.string().nullable().optional().describe("UUID to link item to initiative, or null to unlink from any initiative"),
1571
- designDescription: z12.string().nullable().optional().describe("Description for the Design phase"),
1572
- planDescription: z12.string().nullable().optional().describe("Description for the Planning phase"),
1573
- buildDescription: z12.string().nullable().optional().describe("Description for the Build phase"),
1574
- releaseDescription: z12.string().nullable().optional().describe("Description for the Release phase"),
1575
- prompt: z12.string().nullable().optional().describe("Build prompt for the roadmap item"),
1774
+ order: z15.number().int().min(0).optional().describe("Sort order for prioritization (lower numbers appear first)"),
1775
+ initiativeId: z15.string().nullable().optional().describe("UUID to link item to initiative, or null to unlink from any initiative"),
1776
+ designDescription: z15.string().nullable().optional().describe("Description for the Design phase"),
1777
+ planDescription: z15.string().nullable().optional().describe("Description for the Planning phase"),
1778
+ buildDescription: z15.string().nullable().optional().describe("Description for the Build phase"),
1779
+ releaseDescription: z15.string().nullable().optional().describe("Description for the Release phase"),
1780
+ prompt: z15.string().nullable().optional().describe("Build prompt for the roadmap item"),
1576
1781
  dateGranularity: dateGranularitySchema2.nullable().optional().describe("Planned date granularity: day, month, quarter, half-year, or year"),
1577
- dateValue: z12.string().nullable().optional().describe('Planned date value matching granularity (e.g., "2024-03-15" for day, "2024-Q1" for quarter)'),
1782
+ dateValue: z15.string().nullable().optional().describe('Planned date value matching granularity (e.g., "2024-03-15" for day, "2024-Q1" for quarter)'),
1578
1783
  targetGranularity: dateGranularitySchema2.nullable().optional().describe("Deadline/target date granularity: day, month, quarter, half-year, or year"),
1579
- targetValue: z12.string().nullable().optional().describe('Deadline/target date value matching granularity (e.g., "2024-03-15" for day, "2024-Q1" for quarter)')
1784
+ targetValue: z15.string().nullable().optional().describe('Deadline/target date value matching granularity (e.g., "2024-03-15" for day, "2024-Q1" for quarter)')
1580
1785
  }
1581
1786
  }, async ({
1582
1787
  id,
@@ -1687,12 +1892,12 @@ function registerAddFeature(server) {
1687
1892
  server.registerTool("add_feature", {
1688
1893
  description: "Create a new feature with optional outcomes. Features represent capabilities or functionality areas.",
1689
1894
  inputSchema: {
1690
- name: z12.string().describe("Name of the feature"),
1691
- description: z12.string().optional().describe("Description of the feature"),
1895
+ name: z15.string().describe("Name of the feature"),
1896
+ description: z15.string().optional().describe("Description of the feature"),
1692
1897
  type: featureTypeSchema.optional().describe('Type - "feature" for specific functionality, "area" for grouping (defaults to "feature")'),
1693
- parentId: z12.string().optional().describe("UUID of parent feature/area to nest under"),
1694
- outcomes: z12.array(z12.string()).optional().describe("List of expected outcomes for this feature"),
1695
- linkToRoadmapId: z12.string().optional().describe("UUID of roadmap item to link this feature to")
1898
+ parentId: z15.string().optional().describe("UUID of parent feature/area to nest under"),
1899
+ outcomes: z15.array(z15.string()).optional().describe("List of expected outcomes for this feature"),
1900
+ linkToRoadmapId: z15.string().optional().describe("UUID of roadmap item to link this feature to")
1696
1901
  }
1697
1902
  }, async ({
1698
1903
  name,
@@ -1739,10 +1944,10 @@ function registerSavePrd(server) {
1739
1944
  server.registerTool("save_prd", {
1740
1945
  description: "Save or update the PRD (Product Requirements Document) content for a roadmap item. Content should be markdown.",
1741
1946
  inputSchema: {
1742
- roadmapId: z12.string().describe("The UUID of the roadmap item"),
1743
- what: z12.string().nullable().describe("What is being built - the feature description"),
1744
- why: z12.string().nullable().describe("Why this is being built - the business justification"),
1745
- outcomes: z12.array(z12.string()).optional().describe("List of expected outcomes/success criteria")
1947
+ roadmapId: z15.string().describe("The UUID of the roadmap item"),
1948
+ what: z15.string().nullable().describe("What is being built - the feature description"),
1949
+ why: z15.string().nullable().describe("Why this is being built - the business justification"),
1950
+ outcomes: z15.array(z15.string()).optional().describe("List of expected outcomes/success criteria")
1746
1951
  }
1747
1952
  }, async ({
1748
1953
  roadmapId,
@@ -1780,8 +1985,8 @@ function registerUpdateBrainstormNotes(server) {
1780
1985
  server.registerTool("update_brainstorm_notes", {
1781
1986
  description: "Update the brainstorm notes for a roadmap item. Use this to capture ideas, questions, and research notes.",
1782
1987
  inputSchema: {
1783
- roadmapId: z12.string().describe("The UUID of the roadmap item"),
1784
- notes: z12.string().describe("The brainstorm notes content")
1988
+ roadmapId: z15.string().describe("The UUID of the roadmap item"),
1989
+ notes: z15.string().describe("The brainstorm notes content")
1785
1990
  }
1786
1991
  }, async ({ roadmapId, notes }) => {
1787
1992
  const client2 = getApiClient();
@@ -1810,7 +2015,7 @@ function registerDeleteRoadmapItem(server) {
1810
2015
  server.registerTool("delete_roadmap_item", {
1811
2016
  description: "Delete a roadmap item. This is a soft delete - the item can potentially be recovered.",
1812
2017
  inputSchema: {
1813
- id: z12.string().describe("The UUID of the roadmap item to delete")
2018
+ id: z15.string().describe("The UUID of the roadmap item to delete")
1814
2019
  }
1815
2020
  }, async ({ id }) => {
1816
2021
  const client2 = getApiClient();
@@ -1832,9 +2037,9 @@ function registerReorderRoadmaps(server) {
1832
2037
  server.registerTool("reorder_roadmaps", {
1833
2038
  description: "Bulk reorder roadmap items by setting their order values. Use this to prioritize and organize the roadmap. Lower order values appear first.",
1834
2039
  inputSchema: {
1835
- items: z12.array(z12.object({
1836
- id: z12.string().describe("The UUID of the roadmap item"),
1837
- order: z12.number().int().min(0).describe("The new order value (0-based, lower = higher priority)")
2040
+ items: z15.array(z15.object({
2041
+ id: z15.string().describe("The UUID of the roadmap item"),
2042
+ order: z15.number().int().min(0).describe("The new order value (0-based, lower = higher priority)")
1838
2043
  })).describe("Array of roadmap items with their new order values")
1839
2044
  }
1840
2045
  }, async ({ items }) => {
@@ -1858,10 +2063,10 @@ function registerUpdateFeature(server) {
1858
2063
  server.registerTool("update_feature", {
1859
2064
  description: "Update an existing feature. Can update name, type, or parent.",
1860
2065
  inputSchema: {
1861
- id: z12.string().describe("The UUID of the feature to update"),
1862
- name: z12.string().optional().describe("New name for the feature"),
2066
+ id: z15.string().describe("The UUID of the feature to update"),
2067
+ name: z15.string().optional().describe("New name for the feature"),
1863
2068
  type: featureTypeSchema.optional().describe('New type - "feature" or "area"'),
1864
- parentId: z12.string().nullable().optional().describe("New parent feature/area UUID, or null to move to root")
2069
+ parentId: z15.string().nullable().optional().describe("New parent feature/area UUID, or null to move to root")
1865
2070
  }
1866
2071
  }, async ({
1867
2072
  id,
@@ -1900,7 +2105,7 @@ function registerDeleteFeature(server) {
1900
2105
  server.registerTool("delete_feature", {
1901
2106
  description: "Delete a feature. This is a soft delete that also deletes all child features.",
1902
2107
  inputSchema: {
1903
- id: z12.string().describe("The UUID of the feature to delete")
2108
+ id: z15.string().describe("The UUID of the feature to delete")
1904
2109
  }
1905
2110
  }, async ({ id }) => {
1906
2111
  const client2 = getApiClient();
@@ -1922,7 +2127,7 @@ function registerGetIdea(server) {
1922
2127
  server.registerTool("get_idea", {
1923
2128
  description: "Get full details of a single idea by ID.",
1924
2129
  inputSchema: {
1925
- id: z12.string().describe("The UUID of the idea")
2130
+ id: z15.string().describe("The UUID of the idea")
1926
2131
  }
1927
2132
  }, async ({ id }) => {
1928
2133
  const client2 = getApiClient();
@@ -1951,12 +2156,12 @@ function registerUpdateIdea(server) {
1951
2156
  server.registerTool("update_idea", {
1952
2157
  description: "Update an existing idea. Can update title, description, status, value, or effort.",
1953
2158
  inputSchema: {
1954
- id: z12.string().describe("The UUID of the idea to update"),
1955
- title: z12.string().optional().describe("New title"),
1956
- description: z12.string().nullable().optional().describe("New description"),
2159
+ id: z15.string().describe("The UUID of the idea to update"),
2160
+ title: z15.string().optional().describe("New title"),
2161
+ description: z15.string().nullable().optional().describe("New description"),
1957
2162
  status: ideaStatusSchema.optional().describe("New status"),
1958
- value: z12.enum(["xs", "s", "m", "l", "xl"]).nullable().optional().describe("Estimated value"),
1959
- effort: z12.enum(["xs", "s", "m", "l", "xl"]).nullable().optional().describe("Estimated effort")
2163
+ value: z15.enum(["xs", "s", "m", "l", "xl"]).nullable().optional().describe("Estimated value"),
2164
+ effort: z15.enum(["xs", "s", "m", "l", "xl"]).nullable().optional().describe("Estimated effort")
1960
2165
  }
1961
2166
  }, async ({
1962
2167
  id,
@@ -2003,7 +2208,7 @@ function registerDeleteIdea(server) {
2003
2208
  server.registerTool("delete_idea", {
2004
2209
  description: "Delete an idea. This is a soft delete.",
2005
2210
  inputSchema: {
2006
- id: z12.string().describe("The UUID of the idea to delete")
2211
+ id: z15.string().describe("The UUID of the idea to delete")
2007
2212
  }
2008
2213
  }, async ({ id }) => {
2009
2214
  const client2 = getApiClient();
@@ -2042,8 +2247,8 @@ function registerUpdateStrategy(server) {
2042
2247
  server.registerTool("update_strategy", {
2043
2248
  description: "Update the organization strategy. Can update vision, mission, or both. Use this to set or refine the high-level direction.",
2044
2249
  inputSchema: {
2045
- vision: z12.string().nullable().optional().describe("The vision statement - where the product is headed"),
2046
- mission: z12.string().nullable().optional().describe("The mission statement - why the product exists")
2250
+ vision: z15.string().nullable().optional().describe("The vision statement - where the product is headed"),
2251
+ mission: z15.string().nullable().optional().describe("The mission statement - why the product exists")
2047
2252
  }
2048
2253
  }, async ({ vision, mission }) => {
2049
2254
  const client2 = getApiClient();
@@ -2091,8 +2296,8 @@ function registerCreateScenario(server) {
2091
2296
  server.registerTool("create_scenario", {
2092
2297
  description: "Create a new user scenario. Scenarios describe user workflows and how they accomplish goals.",
2093
2298
  inputSchema: {
2094
- title: z12.string().describe('Title of the scenario (e.g., "User creates their first roadmap")'),
2095
- description: z12.string().nullable().optional().describe("Detailed description of the scenario workflow")
2299
+ title: z15.string().describe('Title of the scenario (e.g., "User creates their first roadmap")'),
2300
+ description: z15.string().nullable().optional().describe("Detailed description of the scenario workflow")
2096
2301
  }
2097
2302
  }, async ({ title, description }) => {
2098
2303
  const client2 = getApiClient();
@@ -2121,9 +2326,9 @@ function registerUpdateScenario(server) {
2121
2326
  server.registerTool("update_scenario", {
2122
2327
  description: "Update an existing scenario.",
2123
2328
  inputSchema: {
2124
- id: z12.string().describe("The UUID of the scenario to update"),
2125
- title: z12.string().optional().describe("New title"),
2126
- description: z12.string().nullable().optional().describe("New description")
2329
+ id: z15.string().describe("The UUID of the scenario to update"),
2330
+ title: z15.string().optional().describe("New title"),
2331
+ description: z15.string().nullable().optional().describe("New description")
2127
2332
  }
2128
2333
  }, async ({
2129
2334
  id,
@@ -2158,7 +2363,7 @@ function registerDeleteScenario(server) {
2158
2363
  server.registerTool("delete_scenario", {
2159
2364
  description: "Delete a scenario. This is a soft delete.",
2160
2365
  inputSchema: {
2161
- id: z12.string().describe("The UUID of the scenario to delete")
2366
+ id: z15.string().describe("The UUID of the scenario to delete")
2162
2367
  }
2163
2368
  }, async ({ id }) => {
2164
2369
  const client2 = getApiClient();
@@ -2173,7 +2378,7 @@ function registerDeleteScenario(server) {
2173
2378
  };
2174
2379
  });
2175
2380
  }
2176
- var productTypeSchema2 = z12.enum([
2381
+ var productTypeSchema2 = z15.enum([
2177
2382
  "brand",
2178
2383
  "product",
2179
2384
  "app",
@@ -2186,8 +2391,8 @@ function registerCreateProduct(server) {
2186
2391
  description: "Create a new product, app, brand, or service. Products represent what the organization builds and offers.",
2187
2392
  inputSchema: {
2188
2393
  type: productTypeSchema2.describe("Type of product"),
2189
- name: z12.string().describe("Name of the product"),
2190
- parentId: z12.string().nullable().optional().describe("UUID of parent product to nest under")
2394
+ name: z15.string().describe("Name of the product"),
2395
+ parentId: z15.string().nullable().optional().describe("UUID of parent product to nest under")
2191
2396
  }
2192
2397
  }, async ({
2193
2398
  type,
@@ -2222,9 +2427,9 @@ function registerUpdateProduct(server) {
2222
2427
  server.registerTool("update_product", {
2223
2428
  description: "Update an existing product.",
2224
2429
  inputSchema: {
2225
- id: z12.string().describe("The UUID of the product to update"),
2226
- name: z12.string().optional().describe("New name"),
2227
- parentId: z12.string().nullable().optional().describe("New parent product UUID, or null to move to root")
2430
+ id: z15.string().describe("The UUID of the product to update"),
2431
+ name: z15.string().optional().describe("New name"),
2432
+ parentId: z15.string().nullable().optional().describe("New parent product UUID, or null to move to root")
2228
2433
  }
2229
2434
  }, async ({ id, name, parentId }) => {
2230
2435
  const client2 = getApiClient();
@@ -2256,7 +2461,7 @@ function registerDeleteProduct(server) {
2256
2461
  server.registerTool("delete_product", {
2257
2462
  description: "Delete a product. This is a soft delete that also deletes all child products.",
2258
2463
  inputSchema: {
2259
- id: z12.string().describe("The UUID of the product to delete")
2464
+ id: z15.string().describe("The UUID of the product to delete")
2260
2465
  }
2261
2466
  }, async ({ id }) => {
2262
2467
  const client2 = getApiClient();
@@ -2279,7 +2484,7 @@ function registerGetProduct(server) {
2279
2484
  server.registerTool("get_product", {
2280
2485
  description: "Get full details of a product by ID, including its documentation (design system and ADRs).",
2281
2486
  inputSchema: {
2282
- id: z12.string().describe("The UUID of the product")
2487
+ id: z15.string().describe("The UUID of the product")
2283
2488
  }
2284
2489
  }, async ({ id }) => {
2285
2490
  const client2 = getApiClient();
@@ -2316,7 +2521,7 @@ function registerSearchProducts(server) {
2316
2521
  server.registerTool("search_products", {
2317
2522
  description: "Search for products by name. Returns a list of matching products with basic info.",
2318
2523
  inputSchema: {
2319
- query: z12.string().optional().describe("Search query to match against product name"),
2524
+ query: z15.string().optional().describe("Search query to match against product name"),
2320
2525
  type: productTypeSchema2.optional().describe("Filter by product type")
2321
2526
  }
2322
2527
  }, async ({ query, type }) => {
@@ -2351,7 +2556,7 @@ function registerGetProductDocumentation(server) {
2351
2556
  server.registerTool("get_product_documentation", {
2352
2557
  description: "Get the documentation (design system and ADRs) for a product. Use this to read existing documentation before updating.",
2353
2558
  inputSchema: {
2354
- productId: z12.string().describe("The UUID of the product")
2559
+ productId: z15.string().describe("The UUID of the product")
2355
2560
  }
2356
2561
  }, async ({ productId }) => {
2357
2562
  const client2 = getApiClient();
@@ -2379,9 +2584,9 @@ function registerUpdateProductDocumentation(server) {
2379
2584
  server.registerTool("update_product_documentation", {
2380
2585
  description: "Update the documentation for a product. Use this to keep design system and ADRs up to date. Creates documentation if it does not exist.",
2381
2586
  inputSchema: {
2382
- productId: z12.string().describe("The UUID of the product"),
2383
- designSystem: z12.string().nullable().optional().describe("Design system documentation - colors, typography, spacing, components. Pass null to clear."),
2384
- adrs: z12.string().nullable().optional().describe("Architecture Decision Records - document key technical decisions. Pass null to clear.")
2587
+ productId: z15.string().describe("The UUID of the product"),
2588
+ designSystem: z15.string().nullable().optional().describe("Design system documentation - colors, typography, spacing, components. Pass null to clear."),
2589
+ adrs: z15.string().nullable().optional().describe("Architecture Decision Records - document key technical decisions. Pass null to clear.")
2385
2590
  }
2386
2591
  }, async ({
2387
2592
  productId,
@@ -2418,8 +2623,8 @@ function registerCreateAudience(server) {
2418
2623
  server.registerTool("create_audience", {
2419
2624
  description: "Create a new audience member. Audiences represent who the product serves.",
2420
2625
  inputSchema: {
2421
- name: z12.string().describe('Name of the audience (e.g., "Product Manager", "End User")'),
2422
- description: z12.string().nullable().optional().describe("Description of the audience")
2626
+ name: z15.string().describe('Name of the audience (e.g., "Product Manager", "End User")'),
2627
+ description: z15.string().nullable().optional().describe("Description of the audience")
2423
2628
  }
2424
2629
  }, async ({ name, description }) => {
2425
2630
  const client2 = getApiClient();
@@ -2448,9 +2653,9 @@ function registerUpdateAudience(server) {
2448
2653
  server.registerTool("update_audience", {
2449
2654
  description: "Update an existing audience member.",
2450
2655
  inputSchema: {
2451
- id: z12.string().describe("The UUID of the audience to update"),
2452
- name: z12.string().optional().describe("New name"),
2453
- description: z12.string().nullable().optional().describe("New description")
2656
+ id: z15.string().describe("The UUID of the audience to update"),
2657
+ name: z15.string().optional().describe("New name"),
2658
+ description: z15.string().nullable().optional().describe("New description")
2454
2659
  }
2455
2660
  }, async ({
2456
2661
  id,
@@ -2485,7 +2690,7 @@ function registerDeleteAudience(server) {
2485
2690
  server.registerTool("delete_audience", {
2486
2691
  description: "Delete an audience member. This is a soft delete.",
2487
2692
  inputSchema: {
2488
- id: z12.string().describe("The UUID of the audience to delete")
2693
+ id: z15.string().describe("The UUID of the audience to delete")
2489
2694
  }
2490
2695
  }, async ({ id }) => {
2491
2696
  const client2 = getApiClient();
@@ -2527,9 +2732,9 @@ function registerGetHistory(server) {
2527
2732
  server.registerTool("get_history", {
2528
2733
  description: "Get raw history events for a date range. Returns full event details including payloads. " + "Use entityType or entityId filters to narrow results. For status reports, prefer " + "get_history_summary to avoid context overflow.",
2529
2734
  inputSchema: {
2530
- startDate: z12.string().regex(/^\d{4}-\d{2}-\d{2}$/).describe("Start date in YYYY-MM-DD format"),
2531
- endDate: z12.string().regex(/^\d{4}-\d{2}-\d{2}$/).describe("End date in YYYY-MM-DD format"),
2532
- entityType: z12.enum([
2735
+ startDate: z15.string().regex(/^\d{4}-\d{2}-\d{2}$/).describe("Start date in YYYY-MM-DD format"),
2736
+ endDate: z15.string().regex(/^\d{4}-\d{2}-\d{2}$/).describe("End date in YYYY-MM-DD format"),
2737
+ entityType: z15.enum([
2533
2738
  "roadmap",
2534
2739
  "feature",
2535
2740
  "idea",
@@ -2561,8 +2766,8 @@ function registerGetHistorySummary(server) {
2561
2766
  server.registerTool("get_history_summary", {
2562
2767
  description: "Get a summary of history events for a date range. Returns counts by entity type, " + "list of changed entities with titles, and total event count. Use this for status " + "report generation instead of get_history to avoid context overflow.",
2563
2768
  inputSchema: {
2564
- startDate: z12.string().regex(/^\d{4}-\d{2}-\d{2}$/).describe("Start date in YYYY-MM-DD format"),
2565
- endDate: z12.string().regex(/^\d{4}-\d{2}-\d{2}$/).describe("End date in YYYY-MM-DD format")
2769
+ startDate: z15.string().regex(/^\d{4}-\d{2}-\d{2}$/).describe("Start date in YYYY-MM-DD format"),
2770
+ endDate: z15.string().regex(/^\d{4}-\d{2}-\d{2}$/).describe("End date in YYYY-MM-DD format")
2566
2771
  }
2567
2772
  }, async ({ startDate, endDate }) => {
2568
2773
  const client2 = getApiClient();
@@ -2581,13 +2786,13 @@ function registerCreateStatusUpdate(server) {
2581
2786
  server.registerTool("create_status_update", {
2582
2787
  description: "Create a new status report. Use this after generating the report content from history events.",
2583
2788
  inputSchema: {
2584
- startDate: z12.string().regex(/^\d{4}-\d{2}-\d{2}$/).describe("Report period start date in YYYY-MM-DD format"),
2585
- endDate: z12.string().regex(/^\d{4}-\d{2}-\d{2}$/).describe("Report period end date in YYYY-MM-DD format"),
2586
- content: z12.string().describe("The markdown content of the status report"),
2587
- title: z12.string().optional().describe("Optional title for the report"),
2588
- items: z12.array(z12.object({
2589
- roadmapItemId: z12.string().describe("UUID of the roadmap item"),
2590
- status: z12.string().describe("Status of the item at report creation time")
2789
+ startDate: z15.string().regex(/^\d{4}-\d{2}-\d{2}$/).describe("Report period start date in YYYY-MM-DD format"),
2790
+ endDate: z15.string().regex(/^\d{4}-\d{2}-\d{2}$/).describe("Report period end date in YYYY-MM-DD format"),
2791
+ content: z15.string().describe("The markdown content of the status report"),
2792
+ title: z15.string().optional().describe("Optional title for the report"),
2793
+ items: z15.array(z15.object({
2794
+ roadmapItemId: z15.string().describe("UUID of the roadmap item"),
2795
+ status: z15.string().describe("Status of the item at report creation time")
2591
2796
  })).optional().describe("Roadmap items to include in the report snapshot")
2592
2797
  }
2593
2798
  }, async ({
@@ -2628,18 +2833,18 @@ function registerSaveStories(server) {
2628
2833
  server.registerTool("save_stories", {
2629
2834
  description: "Save epics and stories for a roadmap item. Replaces all existing epics/stories. Use this to set the complete list of epics and stories for a roadmap.",
2630
2835
  inputSchema: {
2631
- roadmapId: z12.string().uuid().describe("The UUID of the roadmap item"),
2632
- epics: z12.array(z12.object({
2633
- title: z12.string().min(1).describe("Title of the epic"),
2634
- description: z12.string().nullable().optional().describe("Description of the epic"),
2635
- stories: z12.array(z12.object({
2636
- title: z12.string().min(1).describe("Title of the story"),
2637
- description: z12.string().nullable().optional().describe("Description of the story")
2836
+ roadmapId: z15.string().uuid().describe("The UUID of the roadmap item"),
2837
+ epics: z15.array(z15.object({
2838
+ title: z15.string().min(1).describe("Title of the epic"),
2839
+ description: z15.string().nullable().optional().describe("Description of the epic"),
2840
+ stories: z15.array(z15.object({
2841
+ title: z15.string().min(1).describe("Title of the story"),
2842
+ description: z15.string().nullable().optional().describe("Description of the story")
2638
2843
  })).optional().describe("Stories within this epic")
2639
2844
  })).optional().describe("List of epics with their nested stories"),
2640
- stories: z12.array(z12.object({
2641
- title: z12.string().min(1).describe("Title of the story"),
2642
- description: z12.string().nullable().optional().describe("Description of the story")
2845
+ stories: z15.array(z15.object({
2846
+ title: z15.string().min(1).describe("Title of the story"),
2847
+ description: z15.string().nullable().optional().describe("Description of the story")
2643
2848
  })).optional().describe("List of standalone stories (not part of any epic)")
2644
2849
  }
2645
2850
  }, async ({
@@ -2671,10 +2876,10 @@ function registerUploadWireframe(server) {
2671
2876
  server.registerTool("upload_wireframe", {
2672
2877
  description: "Upload an image to a roadmap item's wireframes. Returns a curl command to execute for the upload, then creates the wireframe record. After running the curl command, the wireframe will be visible in the web app.",
2673
2878
  inputSchema: {
2674
- roadmapId: z12.string().describe("The UUID of the roadmap item"),
2675
- filePath: z12.string().describe("Absolute path to the image file on disk"),
2676
- description: z12.string().optional().describe("Optional description of the wireframe"),
2677
- outcomeIds: z12.array(z12.string()).optional().describe("Optional array of PRD outcome IDs this wireframe addresses")
2879
+ roadmapId: z15.string().describe("The UUID of the roadmap item"),
2880
+ filePath: z15.string().describe("Absolute path to the image file on disk"),
2881
+ description: z15.string().optional().describe("Optional description of the wireframe"),
2882
+ outcomeIds: z15.array(z15.string()).optional().describe("Optional array of PRD outcome IDs this wireframe addresses")
2678
2883
  }
2679
2884
  }, async ({
2680
2885
  roadmapId,
@@ -2728,9 +2933,9 @@ function registerUpdateWireframe(server) {
2728
2933
  server.registerTool("update_wireframe", {
2729
2934
  description: "Update a wireframe's description or outcome tags.",
2730
2935
  inputSchema: {
2731
- id: z12.string().describe("The UUID of the wireframe"),
2732
- description: z12.string().nullable().optional().describe("New description for the wireframe"),
2733
- outcomeIds: z12.array(z12.string()).optional().describe("Array of PRD outcome IDs this wireframe addresses (replaces existing)")
2936
+ id: z15.string().describe("The UUID of the wireframe"),
2937
+ description: z15.string().nullable().optional().describe("New description for the wireframe"),
2938
+ outcomeIds: z15.array(z15.string()).optional().describe("Array of PRD outcome IDs this wireframe addresses (replaces existing)")
2734
2939
  }
2735
2940
  }, async ({
2736
2941
  id,
@@ -2766,7 +2971,7 @@ function registerDeleteWireframe(server) {
2766
2971
  server.registerTool("delete_wireframe", {
2767
2972
  description: "Delete a wireframe (soft delete).",
2768
2973
  inputSchema: {
2769
- id: z12.string().describe("The UUID of the wireframe to delete")
2974
+ id: z15.string().describe("The UUID of the wireframe to delete")
2770
2975
  }
2771
2976
  }, async ({ id }) => {
2772
2977
  const client2 = getApiClient();
@@ -2785,9 +2990,9 @@ function registerUploadBrainstormMedia(server) {
2785
2990
  server.registerTool("upload_brainstorm_media", {
2786
2991
  description: "Upload an image or video to a roadmap item's brainstorming section. Returns a curl command to execute for the upload.",
2787
2992
  inputSchema: {
2788
- roadmapId: z12.string().describe("The UUID of the roadmap item"),
2789
- filePath: z12.string().describe("Absolute path to the image or video file on disk"),
2790
- description: z12.string().optional().describe("Optional description of the media")
2993
+ roadmapId: z15.string().describe("The UUID of the roadmap item"),
2994
+ filePath: z15.string().describe("Absolute path to the image or video file on disk"),
2995
+ description: z15.string().optional().describe("Optional description of the media")
2791
2996
  }
2792
2997
  }, async ({
2793
2998
  roadmapId,
@@ -2839,8 +3044,8 @@ function registerUpdateBrainstormMedia(server) {
2839
3044
  server.registerTool("update_brainstorm_media", {
2840
3045
  description: "Update a brainstorm media item's description.",
2841
3046
  inputSchema: {
2842
- id: z12.string().describe("The UUID of the brainstorm media"),
2843
- description: z12.string().nullable().describe("New description for the media")
3047
+ id: z15.string().describe("The UUID of the brainstorm media"),
3048
+ description: z15.string().nullable().describe("New description for the media")
2844
3049
  }
2845
3050
  }, async ({ id, description }) => {
2846
3051
  const client2 = getApiClient();
@@ -2864,7 +3069,7 @@ function registerDeleteBrainstormMedia(server) {
2864
3069
  server.registerTool("delete_brainstorm_media", {
2865
3070
  description: "Delete a brainstorm media item (soft delete).",
2866
3071
  inputSchema: {
2867
- id: z12.string().describe("The UUID of the brainstorm media to delete")
3072
+ id: z15.string().describe("The UUID of the brainstorm media to delete")
2868
3073
  }
2869
3074
  }, async ({ id }) => {
2870
3075
  const client2 = getApiClient();
@@ -2883,9 +3088,9 @@ function registerUploadProductDesignMedia(server) {
2883
3088
  server.registerTool("upload_product_design_media", {
2884
3089
  description: "Upload an image or video to a product's design media section. Returns a curl command to execute for the upload.",
2885
3090
  inputSchema: {
2886
- productId: z12.string().describe("The UUID of the product"),
2887
- filePath: z12.string().describe("Absolute path to the image or video file on disk"),
2888
- description: z12.string().optional().describe("Optional description of the media")
3091
+ productId: z15.string().describe("The UUID of the product"),
3092
+ filePath: z15.string().describe("Absolute path to the image or video file on disk"),
3093
+ description: z15.string().optional().describe("Optional description of the media")
2889
3094
  }
2890
3095
  }, async ({
2891
3096
  productId,
@@ -2938,9 +3143,9 @@ function registerUpdateProductDesignMedia(server) {
2938
3143
  server.registerTool("update_product_design_media", {
2939
3144
  description: "Update a product design media item's description.",
2940
3145
  inputSchema: {
2941
- productId: z12.string().describe("The UUID of the product"),
2942
- mediaId: z12.string().describe("The UUID of the design media"),
2943
- description: z12.string().nullable().describe("New description for the media")
3146
+ productId: z15.string().describe("The UUID of the product"),
3147
+ mediaId: z15.string().describe("The UUID of the design media"),
3148
+ description: z15.string().nullable().describe("New description for the media")
2944
3149
  }
2945
3150
  }, async ({
2946
3151
  productId,
@@ -2968,8 +3173,8 @@ function registerDeleteProductDesignMedia(server) {
2968
3173
  server.registerTool("delete_product_design_media", {
2969
3174
  description: "Delete a product design media item (soft delete).",
2970
3175
  inputSchema: {
2971
- productId: z12.string().describe("The UUID of the product"),
2972
- mediaId: z12.string().describe("The UUID of the design media to delete")
3176
+ productId: z15.string().describe("The UUID of the product"),
3177
+ mediaId: z15.string().describe("The UUID of the design media to delete")
2973
3178
  }
2974
3179
  }, async ({ productId, mediaId }) => {
2975
3180
  const client2 = getApiClient();
@@ -2991,8 +3196,8 @@ function registerUploadDesignWalkthrough(server) {
2991
3196
  server.registerTool("upload_design_walkthrough", {
2992
3197
  description: "Upload a walkthrough video to a roadmap item's design phase. Returns a curl command to execute for the upload.",
2993
3198
  inputSchema: {
2994
- roadmapId: z12.string().describe("The UUID of the roadmap item"),
2995
- filePath: z12.string().describe("Absolute path to the video file on disk")
3199
+ roadmapId: z15.string().describe("The UUID of the roadmap item"),
3200
+ filePath: z15.string().describe("Absolute path to the video file on disk")
2996
3201
  }
2997
3202
  }, async ({ roadmapId, filePath }) => {
2998
3203
  const client2 = getApiClient();
@@ -3034,8 +3239,8 @@ function registerUploadReleaseWalkthrough(server) {
3034
3239
  server.registerTool("upload_release_walkthrough", {
3035
3240
  description: "Upload a walkthrough video to a roadmap item's release phase. Returns a curl command to execute for the upload.",
3036
3241
  inputSchema: {
3037
- roadmapId: z12.string().describe("The UUID of the roadmap item"),
3038
- filePath: z12.string().describe("Absolute path to the video file on disk")
3242
+ roadmapId: z15.string().describe("The UUID of the roadmap item"),
3243
+ filePath: z15.string().describe("Absolute path to the video file on disk")
3039
3244
  }
3040
3245
  }, async ({ roadmapId, filePath }) => {
3041
3246
  const client2 = getApiClient();
@@ -3093,9 +3298,9 @@ function registerPublishPrototype(server) {
3093
3298
  server.registerTool("publish_prototype", {
3094
3299
  description: "Publish a local prototype folder to a shareable URL. Uploads all files from the folder and returns a time-limited shareable link.",
3095
3300
  inputSchema: {
3096
- roadmapId: z12.string().uuid().describe("The UUID of the roadmap item to attach the prototype to"),
3097
- folderPath: z12.string().describe("Absolute path to the local mockup folder"),
3098
- entryPoint: z12.string().default("index.html").describe("Main HTML file to open (defaults to index.html)")
3301
+ roadmapId: z15.string().uuid().describe("The UUID of the roadmap item to attach the prototype to"),
3302
+ folderPath: z15.string().describe("Absolute path to the local mockup folder"),
3303
+ entryPoint: z15.string().default("index.html").describe("Main HTML file to open (defaults to index.html)")
3099
3304
  }
3100
3305
  }, async ({
3101
3306
  roadmapId,
@@ -3250,15 +3455,15 @@ Expires: ${expiryDate}`
3250
3455
  };
3251
3456
  });
3252
3457
  }
3253
- var dateGranularitySchema2 = z12.enum(["day", "month", "quarter", "half-year", "year"]);
3458
+ var dateGranularitySchema2 = z15.enum(["day", "month", "quarter", "half-year", "year"]);
3254
3459
  function registerSearchInitiatives(server) {
3255
3460
  server.registerTool("search_initiatives", {
3256
3461
  description: "Search for initiatives by title or filter by horizon. Returns a list of matching initiatives with item counts.",
3257
3462
  inputSchema: {
3258
- query: z12.string().optional().describe("Search query to match against title or description"),
3463
+ query: z15.string().optional().describe("Search query to match against title or description"),
3259
3464
  horizon: horizonSchema.optional().describe("Filter by planning horizon"),
3260
- limit: z12.number().int().min(1).max(100).optional().describe("Max items to return (default 10)"),
3261
- offset: z12.number().int().min(0).optional().describe("Number of items to skip (default 0)")
3465
+ limit: z15.number().int().min(1).max(100).optional().describe("Max items to return (default 10)"),
3466
+ offset: z15.number().int().min(0).optional().describe("Number of items to skip (default 0)")
3262
3467
  }
3263
3468
  }, async ({
3264
3469
  query,
@@ -3308,7 +3513,7 @@ function registerGetInitiative(server) {
3308
3513
  server.registerTool("get_initiative", {
3309
3514
  description: "Get full details of an initiative including all linked roadmap items.",
3310
3515
  inputSchema: {
3311
- id: z12.string().describe("The UUID of the initiative")
3516
+ id: z15.string().describe("The UUID of the initiative")
3312
3517
  }
3313
3518
  }, async ({ id }) => {
3314
3519
  const client2 = getApiClient();
@@ -3327,12 +3532,12 @@ function registerCreateInitiative(server) {
3327
3532
  server.registerTool("create_initiative", {
3328
3533
  description: "Create a new initiative. Initiatives group related roadmap items for cross-functional coordination.",
3329
3534
  inputSchema: {
3330
- title: z12.string().describe("Title of the initiative"),
3331
- description: z12.string().optional().describe("Description of the initiative (markdown)"),
3535
+ title: z15.string().describe("Title of the initiative"),
3536
+ description: z15.string().optional().describe("Description of the initiative (markdown)"),
3332
3537
  horizon: horizonSchema.optional().describe('Planning horizon (defaults to "inbox")'),
3333
3538
  dateGranularity: dateGranularitySchema2.optional().describe("Target date granularity: day, month, quarter, half-year, or year"),
3334
- dateValue: z12.string().optional().describe('Target date value matching granularity (e.g., "2024-Q1", "2024-03")'),
3335
- targetDate: z12.string().optional().describe("Target date in YYYY-MM-DD format")
3539
+ dateValue: z15.string().optional().describe('Target date value matching granularity (e.g., "2024-Q1", "2024-03")'),
3540
+ targetDate: z15.string().optional().describe("Target date in YYYY-MM-DD format")
3336
3541
  }
3337
3542
  }, async ({
3338
3543
  title,
@@ -3376,14 +3581,14 @@ function registerUpdateInitiative(server) {
3376
3581
  server.registerTool("update_initiative", {
3377
3582
  description: "Update an existing initiative.",
3378
3583
  inputSchema: {
3379
- id: z12.string().describe("The UUID of the initiative to update"),
3380
- title: z12.string().optional().describe("New title"),
3381
- description: z12.string().nullable().optional().describe("New description (null to clear)"),
3584
+ id: z15.string().describe("The UUID of the initiative to update"),
3585
+ title: z15.string().optional().describe("New title"),
3586
+ description: z15.string().nullable().optional().describe("New description (null to clear)"),
3382
3587
  horizon: horizonSchema.optional().describe("New planning horizon"),
3383
3588
  dateGranularity: dateGranularitySchema2.nullable().optional().describe("New target date granularity (null to clear)"),
3384
- dateValue: z12.string().nullable().optional().describe("New target date value (null to clear)"),
3385
- targetDate: z12.string().nullable().optional().describe("New target date in YYYY-MM-DD format (null to clear)"),
3386
- order: z12.number().int().min(0).optional().describe("Sort order for prioritization (lower numbers appear first)")
3589
+ dateValue: z15.string().nullable().optional().describe("New target date value (null to clear)"),
3590
+ targetDate: z15.string().nullable().optional().describe("New target date in YYYY-MM-DD format (null to clear)"),
3591
+ order: z15.number().int().min(0).optional().describe("Sort order for prioritization (lower numbers appear first)")
3387
3592
  }
3388
3593
  }, async ({
3389
3594
  id,
@@ -3438,7 +3643,7 @@ function registerDeleteInitiative(server) {
3438
3643
  server.registerTool("delete_initiative", {
3439
3644
  description: "Delete an initiative. This is a soft delete that also unlinks all roadmap items from the initiative.",
3440
3645
  inputSchema: {
3441
- id: z12.string().describe("The UUID of the initiative to delete")
3646
+ id: z15.string().describe("The UUID of the initiative to delete")
3442
3647
  }
3443
3648
  }, async ({ id }) => {
3444
3649
  const client2 = getApiClient();
@@ -3457,9 +3662,9 @@ function registerReorderInitiatives(server) {
3457
3662
  server.registerTool("reorder_initiatives", {
3458
3663
  description: "Bulk reorder initiatives by setting their order values. Lower order values appear first.",
3459
3664
  inputSchema: {
3460
- items: z12.array(z12.object({
3461
- id: z12.string().describe("The UUID of the initiative"),
3462
- order: z12.number().int().min(0).describe("The new order value (0-based)")
3665
+ items: z15.array(z15.object({
3666
+ id: z15.string().describe("The UUID of the initiative"),
3667
+ order: z15.number().int().min(0).describe("The new order value (0-based)")
3463
3668
  })).describe("Array of initiatives with their new order values")
3464
3669
  }
3465
3670
  }, async ({ items }) => {
@@ -3479,12 +3684,12 @@ function registerSearchExports(server) {
3479
3684
  server.registerTool("search_exports", {
3480
3685
  description: "Search for export records by roadmap, external system, or entity. Returns a list of matching exports with pagination.",
3481
3686
  inputSchema: {
3482
- roadmapId: z12.string().uuid().optional().describe("Filter by roadmap item ID"),
3483
- externalSystem: z12.enum(["linear", "notion", "jira", "github"]).optional().describe("Filter by external system"),
3484
- localEntityType: z12.enum(["roadmap", "prd", "epic", "story", "design"]).optional().describe("Filter by local entity type"),
3485
- localEntityId: z12.string().uuid().optional().describe("Filter by local entity ID"),
3486
- limit: z12.number().int().min(1).max(100).optional().describe("Max items to return (default 10)"),
3487
- offset: z12.number().int().min(0).optional().describe("Number of items to skip (default 0)")
3687
+ roadmapId: z15.string().uuid().optional().describe("Filter by roadmap item ID"),
3688
+ externalSystem: z15.enum(["linear", "notion", "jira", "github"]).optional().describe("Filter by external system"),
3689
+ localEntityType: z15.enum(["roadmap", "prd", "epic", "story", "design"]).optional().describe("Filter by local entity type"),
3690
+ localEntityId: z15.string().uuid().optional().describe("Filter by local entity ID"),
3691
+ limit: z15.number().int().min(1).max(100).optional().describe("Max items to return (default 10)"),
3692
+ offset: z15.number().int().min(0).optional().describe("Number of items to skip (default 0)")
3488
3693
  }
3489
3694
  }, async ({
3490
3695
  roadmapId,
@@ -3521,7 +3726,7 @@ function registerGetExport(server) {
3521
3726
  server.registerTool("get_export", {
3522
3727
  description: "Get full details of a single export record by ID.",
3523
3728
  inputSchema: {
3524
- id: z12.string().uuid().describe("The UUID of the export record")
3729
+ id: z15.string().uuid().describe("The UUID of the export record")
3525
3730
  }
3526
3731
  }, async ({ id }) => {
3527
3732
  const client2 = getApiClient();
@@ -3540,14 +3745,14 @@ function registerCreateExport(server) {
3540
3745
  server.registerTool("create_export", {
3541
3746
  description: "Record a new export (with upsert). If an export with the same roadmap, entity, and external system already exists, it will be updated.",
3542
3747
  inputSchema: {
3543
- roadmapId: z12.string().uuid().describe("The UUID of the roadmap item"),
3544
- localEntityType: z12.enum(["roadmap", "prd", "epic", "story", "design"]).describe("Type of local entity being exported"),
3545
- localEntityId: z12.string().uuid().describe("The UUID of the local entity"),
3546
- externalSystem: z12.enum(["linear", "notion", "jira", "github"]).describe("External system where the entity was exported"),
3547
- externalObjectType: z12.string().min(1).describe('Type of object in the external system (e.g., "issue", "page", "project")'),
3548
- externalId: z12.string().min(1).describe("ID of the object in the external system"),
3549
- externalUrl: z12.string().url().optional().describe("URL to the object in the external system"),
3550
- metadata: z12.record(z12.unknown()).optional().describe("Additional metadata about the export")
3748
+ roadmapId: z15.string().uuid().describe("The UUID of the roadmap item"),
3749
+ localEntityType: z15.enum(["roadmap", "prd", "epic", "story", "design"]).describe("Type of local entity being exported"),
3750
+ localEntityId: z15.string().uuid().describe("The UUID of the local entity"),
3751
+ externalSystem: z15.enum(["linear", "notion", "jira", "github"]).describe("External system where the entity was exported"),
3752
+ externalObjectType: z15.string().min(1).describe('Type of object in the external system (e.g., "issue", "page", "project")'),
3753
+ externalId: z15.string().min(1).describe("ID of the object in the external system"),
3754
+ externalUrl: z15.string().url().optional().describe("URL to the object in the external system"),
3755
+ metadata: z15.record(z15.unknown()).optional().describe("Additional metadata about the export")
3551
3756
  }
3552
3757
  }, async ({
3553
3758
  roadmapId,
@@ -3584,9 +3789,9 @@ function registerUpdateExport(server) {
3584
3789
  server.registerTool("update_export", {
3585
3790
  description: "Update an export record. Can update the external URL or metadata.",
3586
3791
  inputSchema: {
3587
- id: z12.string().uuid().describe("The UUID of the export record to update"),
3588
- externalUrl: z12.string().url().nullable().optional().describe("New URL to the object in the external system"),
3589
- metadata: z12.record(z12.unknown()).optional().describe("New metadata to replace existing metadata")
3792
+ id: z15.string().uuid().describe("The UUID of the export record to update"),
3793
+ externalUrl: z15.string().url().nullable().optional().describe("New URL to the object in the external system"),
3794
+ metadata: z15.record(z15.unknown()).optional().describe("New metadata to replace existing metadata")
3590
3795
  }
3591
3796
  }, async ({
3592
3797
  id,
@@ -3609,7 +3814,7 @@ function registerDeleteExport(server) {
3609
3814
  server.registerTool("delete_export", {
3610
3815
  description: "Delete an export record. This is a soft delete.",
3611
3816
  inputSchema: {
3612
- id: z12.string().uuid().describe("The UUID of the export record to delete")
3817
+ id: z15.string().uuid().describe("The UUID of the export record to delete")
3613
3818
  }
3614
3819
  }, async ({ id }) => {
3615
3820
  const client2 = getApiClient();
@@ -3624,6 +3829,554 @@ function registerDeleteExport(server) {
3624
3829
  };
3625
3830
  });
3626
3831
  }
3832
+ function registerListPresentations(server) {
3833
+ server.registerTool("list_presentations", {
3834
+ description: "List all presentations.",
3835
+ inputSchema: {}
3836
+ }, async () => {
3837
+ const client2 = getApiClient();
3838
+ const result = await client2.listPresentations();
3839
+ return {
3840
+ content: [
3841
+ {
3842
+ type: "text",
3843
+ text: JSON.stringify(result, null, 2)
3844
+ }
3845
+ ]
3846
+ };
3847
+ });
3848
+ }
3849
+ function registerGetPresentation(server) {
3850
+ server.registerTool("get_presentation", {
3851
+ description: "Get presentation with variants and slides.",
3852
+ inputSchema: {
3853
+ id: z15.string().describe("The UUID of the presentation")
3854
+ }
3855
+ }, async ({ id }) => {
3856
+ const client2 = getApiClient();
3857
+ const presentation2 = await client2.getPresentation(id);
3858
+ const variantsResult = await client2.listVariants(id);
3859
+ const variantsWithSlides = await Promise.all(variantsResult.items.map(async (variant2) => {
3860
+ const slidesResult = await client2.listSlides(id, variant2.id);
3861
+ return {
3862
+ ...variant2,
3863
+ slides: slidesResult.items
3864
+ };
3865
+ }));
3866
+ return {
3867
+ content: [
3868
+ {
3869
+ type: "text",
3870
+ text: JSON.stringify({
3871
+ ...presentation2,
3872
+ variants: variantsWithSlides
3873
+ }, null, 2)
3874
+ }
3875
+ ]
3876
+ };
3877
+ });
3878
+ }
3879
+ function registerCreatePresentation(server) {
3880
+ server.registerTool("create_presentation", {
3881
+ description: "Create a new presentation.",
3882
+ inputSchema: {
3883
+ title: z15.string().describe("Title of the presentation"),
3884
+ description: z15.string().nullable().optional().describe("Description of the presentation")
3885
+ }
3886
+ }, async ({ title, description }) => {
3887
+ const client2 = getApiClient();
3888
+ const presentation2 = await client2.createPresentation({
3889
+ title,
3890
+ description: description ?? null
3891
+ });
3892
+ return {
3893
+ content: [
3894
+ {
3895
+ type: "text",
3896
+ text: JSON.stringify(presentation2, null, 2)
3897
+ }
3898
+ ]
3899
+ };
3900
+ });
3901
+ }
3902
+ function registerUpdatePresentation(server) {
3903
+ server.registerTool("update_presentation", {
3904
+ description: "Update an existing presentation.",
3905
+ inputSchema: {
3906
+ id: z15.string().describe("The UUID of the presentation to update"),
3907
+ title: z15.string().optional().describe("New title"),
3908
+ description: z15.string().nullable().optional().describe("New description")
3909
+ }
3910
+ }, async ({
3911
+ id,
3912
+ title,
3913
+ description
3914
+ }) => {
3915
+ const client2 = getApiClient();
3916
+ const data = {};
3917
+ if (title !== undefined)
3918
+ data.title = title;
3919
+ if (description !== undefined)
3920
+ data.description = description;
3921
+ const presentation2 = await client2.updatePresentation(id, data);
3922
+ return {
3923
+ content: [
3924
+ {
3925
+ type: "text",
3926
+ text: JSON.stringify(presentation2, null, 2)
3927
+ }
3928
+ ]
3929
+ };
3930
+ });
3931
+ }
3932
+ function registerDeletePresentation(server) {
3933
+ server.registerTool("delete_presentation", {
3934
+ description: "Delete a presentation.",
3935
+ inputSchema: {
3936
+ id: z15.string().describe("The UUID of the presentation to delete")
3937
+ }
3938
+ }, async ({ id }) => {
3939
+ const client2 = getApiClient();
3940
+ await client2.deletePresentation(id);
3941
+ return {
3942
+ content: [
3943
+ {
3944
+ type: "text",
3945
+ text: JSON.stringify({ success: true, deleted: id }, null, 2)
3946
+ }
3947
+ ]
3948
+ };
3949
+ });
3950
+ }
3951
+ function registerReorderPresentations(server) {
3952
+ server.registerTool("reorder_presentations", {
3953
+ description: "Reorder presentations by setting their order values. Lower order values appear first.",
3954
+ inputSchema: {
3955
+ items: z15.array(z15.object({
3956
+ id: z15.string().describe("The UUID of the presentation"),
3957
+ order: z15.number().int().min(0).describe("The new order value (0-based)")
3958
+ })).describe("Array of presentations with their new order values")
3959
+ }
3960
+ }, async ({ items }) => {
3961
+ const client2 = getApiClient();
3962
+ await client2.reorderPresentations(items);
3963
+ return {
3964
+ content: [
3965
+ {
3966
+ type: "text",
3967
+ text: JSON.stringify({ success: true, reordered: items.length }, null, 2)
3968
+ }
3969
+ ]
3970
+ };
3971
+ });
3972
+ }
3973
+ function registerListVariants(server) {
3974
+ server.registerTool("list_variants", {
3975
+ description: "List all variants for a presentation.",
3976
+ inputSchema: {
3977
+ presentationId: z15.string().describe("The UUID of the presentation")
3978
+ }
3979
+ }, async ({ presentationId }) => {
3980
+ const client2 = getApiClient();
3981
+ const result = await client2.listVariants(presentationId);
3982
+ return {
3983
+ content: [
3984
+ {
3985
+ type: "text",
3986
+ text: JSON.stringify(result, null, 2)
3987
+ }
3988
+ ]
3989
+ };
3990
+ });
3991
+ }
3992
+ function registerGetVariant(server) {
3993
+ server.registerTool("get_variant", {
3994
+ description: "Get variant with its slides.",
3995
+ inputSchema: {
3996
+ presentationId: z15.string().describe("The UUID of the presentation"),
3997
+ variantId: z15.string().describe("The UUID of the variant")
3998
+ }
3999
+ }, async ({ presentationId, variantId }) => {
4000
+ const client2 = getApiClient();
4001
+ const variant2 = await client2.getVariant(presentationId, variantId);
4002
+ const slidesResult = await client2.listSlides(presentationId, variantId);
4003
+ return {
4004
+ content: [
4005
+ {
4006
+ type: "text",
4007
+ text: JSON.stringify({
4008
+ ...variant2,
4009
+ slides: slidesResult.items
4010
+ }, null, 2)
4011
+ }
4012
+ ]
4013
+ };
4014
+ });
4015
+ }
4016
+ function registerCreateVariant(server) {
4017
+ server.registerTool("create_variant", {
4018
+ description: "Create a new variant for a presentation.",
4019
+ inputSchema: {
4020
+ presentationId: z15.string().describe("The UUID of the presentation"),
4021
+ name: z15.string().describe("Name of the variant"),
4022
+ audienceId: z15.string().nullable().optional().describe("The UUID of the target audience")
4023
+ }
4024
+ }, async ({
4025
+ presentationId,
4026
+ name,
4027
+ audienceId
4028
+ }) => {
4029
+ const client2 = getApiClient();
4030
+ const variant2 = await client2.createVariant(presentationId, {
4031
+ name,
4032
+ audienceId: audienceId ?? null
4033
+ });
4034
+ return {
4035
+ content: [
4036
+ {
4037
+ type: "text",
4038
+ text: JSON.stringify(variant2, null, 2)
4039
+ }
4040
+ ]
4041
+ };
4042
+ });
4043
+ }
4044
+ function registerUpdateVariant(server) {
4045
+ server.registerTool("update_variant", {
4046
+ description: "Update an existing variant.",
4047
+ inputSchema: {
4048
+ presentationId: z15.string().describe("The UUID of the presentation"),
4049
+ variantId: z15.string().describe("The UUID of the variant to update"),
4050
+ name: z15.string().optional().describe("New name"),
4051
+ audienceId: z15.string().nullable().optional().describe("New target audience UUID")
4052
+ }
4053
+ }, async ({
4054
+ presentationId,
4055
+ variantId,
4056
+ name,
4057
+ audienceId
4058
+ }) => {
4059
+ const client2 = getApiClient();
4060
+ const data = {};
4061
+ if (name !== undefined)
4062
+ data.name = name;
4063
+ if (audienceId !== undefined)
4064
+ data.audienceId = audienceId;
4065
+ const variant2 = await client2.updateVariant(presentationId, variantId, data);
4066
+ return {
4067
+ content: [
4068
+ {
4069
+ type: "text",
4070
+ text: JSON.stringify(variant2, null, 2)
4071
+ }
4072
+ ]
4073
+ };
4074
+ });
4075
+ }
4076
+ function registerDeleteVariant(server) {
4077
+ server.registerTool("delete_variant", {
4078
+ description: "Delete a variant.",
4079
+ inputSchema: {
4080
+ presentationId: z15.string().describe("The UUID of the presentation"),
4081
+ variantId: z15.string().describe("The UUID of the variant to delete")
4082
+ }
4083
+ }, async ({ presentationId, variantId }) => {
4084
+ const client2 = getApiClient();
4085
+ await client2.deleteVariant(presentationId, variantId);
4086
+ return {
4087
+ content: [
4088
+ {
4089
+ type: "text",
4090
+ text: JSON.stringify({ success: true, deleted: variantId }, null, 2)
4091
+ }
4092
+ ]
4093
+ };
4094
+ });
4095
+ }
4096
+ function registerReorderVariants(server) {
4097
+ server.registerTool("reorder_variants", {
4098
+ description: "Reorder variants by setting their order values. Lower order values appear first.",
4099
+ inputSchema: {
4100
+ presentationId: z15.string().describe("The UUID of the presentation"),
4101
+ items: z15.array(z15.object({
4102
+ id: z15.string().describe("The UUID of the variant"),
4103
+ order: z15.number().int().min(0).describe("The new order value (0-based)")
4104
+ })).describe("Array of variants with their new order values")
4105
+ }
4106
+ }, async ({
4107
+ presentationId,
4108
+ items
4109
+ }) => {
4110
+ const client2 = getApiClient();
4111
+ await client2.reorderVariants(presentationId, items);
4112
+ return {
4113
+ content: [
4114
+ {
4115
+ type: "text",
4116
+ text: JSON.stringify({ success: true, reordered: items.length }, null, 2)
4117
+ }
4118
+ ]
4119
+ };
4120
+ });
4121
+ }
4122
+ function registerCloneVariant(server) {
4123
+ server.registerTool("clone_variant", {
4124
+ description: "Clone a variant with all its slides.",
4125
+ inputSchema: {
4126
+ presentationId: z15.string().describe("The UUID of the presentation"),
4127
+ variantId: z15.string().describe("The UUID of the variant to clone")
4128
+ }
4129
+ }, async ({ presentationId, variantId }) => {
4130
+ const client2 = getApiClient();
4131
+ const clonedVariant = await client2.cloneVariant(presentationId, variantId);
4132
+ return {
4133
+ content: [
4134
+ {
4135
+ type: "text",
4136
+ text: JSON.stringify(clonedVariant, null, 2)
4137
+ }
4138
+ ]
4139
+ };
4140
+ });
4141
+ }
4142
+ function registerSetDefaultVariant(server) {
4143
+ server.registerTool("set_default_variant", {
4144
+ description: "Set a variant as the default for the presentation.",
4145
+ inputSchema: {
4146
+ presentationId: z15.string().describe("The UUID of the presentation"),
4147
+ variantId: z15.string().describe("The UUID of the variant to set as default")
4148
+ }
4149
+ }, async ({ presentationId, variantId }) => {
4150
+ const client2 = getApiClient();
4151
+ await client2.setDefaultVariant(presentationId, variantId);
4152
+ return {
4153
+ content: [
4154
+ {
4155
+ type: "text",
4156
+ text: JSON.stringify({ success: true, variantId }, null, 2)
4157
+ }
4158
+ ]
4159
+ };
4160
+ });
4161
+ }
4162
+ function registerListSlides(server) {
4163
+ server.registerTool("list_slides", {
4164
+ description: "List all slides in a variant.",
4165
+ inputSchema: {
4166
+ variantId: z15.string().describe("The UUID of the variant")
4167
+ }
4168
+ }, async ({ variantId }) => {
4169
+ const client2 = getApiClient();
4170
+ const presentationId = await client2.getVariantPresentationId(variantId);
4171
+ if (!presentationId) {
4172
+ return {
4173
+ content: [
4174
+ {
4175
+ type: "text",
4176
+ text: JSON.stringify({ error: "Variant not found" }, null, 2)
4177
+ }
4178
+ ]
4179
+ };
4180
+ }
4181
+ const result = await client2.listSlides(presentationId, variantId);
4182
+ return {
4183
+ content: [
4184
+ {
4185
+ type: "text",
4186
+ text: JSON.stringify(result, null, 2)
4187
+ }
4188
+ ]
4189
+ };
4190
+ });
4191
+ }
4192
+ function registerGetSlide(server) {
4193
+ server.registerTool("get_slide", {
4194
+ description: "Get a slide by ID.",
4195
+ inputSchema: {
4196
+ variantId: z15.string().describe("The UUID of the variant"),
4197
+ slideId: z15.string().describe("The UUID of the slide")
4198
+ }
4199
+ }, async ({ variantId, slideId }) => {
4200
+ const client2 = getApiClient();
4201
+ const presentationId = await client2.getVariantPresentationId(variantId);
4202
+ if (!presentationId) {
4203
+ return {
4204
+ content: [
4205
+ {
4206
+ type: "text",
4207
+ text: JSON.stringify({ error: "Variant not found" }, null, 2)
4208
+ }
4209
+ ]
4210
+ };
4211
+ }
4212
+ const slide2 = await client2.getSlide(presentationId, variantId, slideId);
4213
+ return {
4214
+ content: [
4215
+ {
4216
+ type: "text",
4217
+ text: JSON.stringify(slide2, null, 2)
4218
+ }
4219
+ ]
4220
+ };
4221
+ });
4222
+ }
4223
+ function registerCreateSlide(server) {
4224
+ server.registerTool("create_slide", {
4225
+ description: "Create a new slide in a variant.",
4226
+ inputSchema: {
4227
+ variantId: z15.string().describe("The UUID of the variant"),
4228
+ title: z15.string().optional().describe("Title of the slide"),
4229
+ content: z15.object({ body: z15.string().optional() }).nullable().optional().describe("Slide content with markdown body"),
4230
+ speakerNotes: z15.string().nullable().optional().describe("Speaker notes for the slide")
4231
+ }
4232
+ }, async ({
4233
+ variantId,
4234
+ title,
4235
+ content,
4236
+ speakerNotes
4237
+ }) => {
4238
+ const client2 = getApiClient();
4239
+ const presentationId = await client2.getVariantPresentationId(variantId);
4240
+ if (!presentationId) {
4241
+ return {
4242
+ content: [
4243
+ {
4244
+ type: "text",
4245
+ text: JSON.stringify({ error: "Variant not found" }, null, 2)
4246
+ }
4247
+ ]
4248
+ };
4249
+ }
4250
+ const slide2 = await client2.createSlide(presentationId, variantId, {
4251
+ title,
4252
+ content,
4253
+ speakerNotes
4254
+ });
4255
+ return {
4256
+ content: [
4257
+ {
4258
+ type: "text",
4259
+ text: JSON.stringify(slide2, null, 2)
4260
+ }
4261
+ ]
4262
+ };
4263
+ });
4264
+ }
4265
+ function registerUpdateSlide(server) {
4266
+ server.registerTool("update_slide", {
4267
+ description: "Update an existing slide.",
4268
+ inputSchema: {
4269
+ variantId: z15.string().describe("The UUID of the variant"),
4270
+ slideId: z15.string().describe("The UUID of the slide to update"),
4271
+ title: z15.string().optional().describe("New title"),
4272
+ content: z15.object({ body: z15.string().optional() }).nullable().optional().describe("New slide content with markdown body"),
4273
+ speakerNotes: z15.string().nullable().optional().describe("New speaker notes")
4274
+ }
4275
+ }, async ({
4276
+ variantId,
4277
+ slideId,
4278
+ title,
4279
+ content,
4280
+ speakerNotes
4281
+ }) => {
4282
+ const client2 = getApiClient();
4283
+ const presentationId = await client2.getVariantPresentationId(variantId);
4284
+ if (!presentationId) {
4285
+ return {
4286
+ content: [
4287
+ {
4288
+ type: "text",
4289
+ text: JSON.stringify({ error: "Variant not found" }, null, 2)
4290
+ }
4291
+ ]
4292
+ };
4293
+ }
4294
+ const data = {};
4295
+ if (title !== undefined)
4296
+ data.title = title;
4297
+ if (content !== undefined)
4298
+ data.content = content;
4299
+ if (speakerNotes !== undefined)
4300
+ data.speakerNotes = speakerNotes;
4301
+ const slide2 = await client2.updateSlide(presentationId, variantId, slideId, data);
4302
+ return {
4303
+ content: [
4304
+ {
4305
+ type: "text",
4306
+ text: JSON.stringify(slide2, null, 2)
4307
+ }
4308
+ ]
4309
+ };
4310
+ });
4311
+ }
4312
+ function registerDeleteSlide(server) {
4313
+ server.registerTool("delete_slide", {
4314
+ description: "Delete a slide (soft delete).",
4315
+ inputSchema: {
4316
+ variantId: z15.string().describe("The UUID of the variant"),
4317
+ slideId: z15.string().describe("The UUID of the slide to delete")
4318
+ }
4319
+ }, async ({ variantId, slideId }) => {
4320
+ const client2 = getApiClient();
4321
+ const presentationId = await client2.getVariantPresentationId(variantId);
4322
+ if (!presentationId) {
4323
+ return {
4324
+ content: [
4325
+ {
4326
+ type: "text",
4327
+ text: JSON.stringify({ error: "Variant not found" }, null, 2)
4328
+ }
4329
+ ]
4330
+ };
4331
+ }
4332
+ await client2.deleteSlide(presentationId, variantId, slideId);
4333
+ return {
4334
+ content: [
4335
+ {
4336
+ type: "text",
4337
+ text: JSON.stringify({ success: true, deleted: slideId }, null, 2)
4338
+ }
4339
+ ]
4340
+ };
4341
+ });
4342
+ }
4343
+ function registerReorderSlides(server) {
4344
+ server.registerTool("reorder_slides", {
4345
+ description: "Reorder slides by setting their order values. Lower order values appear first.",
4346
+ inputSchema: {
4347
+ variantId: z15.string().describe("The UUID of the variant"),
4348
+ items: z15.array(z15.object({
4349
+ id: z15.string().describe("The UUID of the slide"),
4350
+ order: z15.number().int().min(0).describe("The new order value (0-based)")
4351
+ })).describe("Array of slides with their new order values")
4352
+ }
4353
+ }, async ({
4354
+ variantId,
4355
+ items
4356
+ }) => {
4357
+ const client2 = getApiClient();
4358
+ const presentationId = await client2.getVariantPresentationId(variantId);
4359
+ if (!presentationId) {
4360
+ return {
4361
+ content: [
4362
+ {
4363
+ type: "text",
4364
+ text: JSON.stringify({ error: "Variant not found" }, null, 2)
4365
+ }
4366
+ ]
4367
+ };
4368
+ }
4369
+ await client2.reorderSlides(presentationId, variantId, items);
4370
+ return {
4371
+ content: [
4372
+ {
4373
+ type: "text",
4374
+ text: JSON.stringify({ success: true, reordered: items.length }, null, 2)
4375
+ }
4376
+ ]
4377
+ };
4378
+ });
4379
+ }
3627
4380
 
3628
4381
  // src/index.ts
3629
4382
  async function main() {