pptx-viewer-mcp 2.2.0 → 2.4.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -61,6 +61,32 @@ var ConvertToMarkdownSchema = z.object({
61
61
  var AccessibilityCheckSchema = z.object({
62
62
  filePath: z.string().describe("Path to the PPTX file")
63
63
  });
64
+ var ThemeColorRefSchema = z.object({
65
+ scheme: z.enum([
66
+ "dk1",
67
+ "lt1",
68
+ "dk2",
69
+ "lt2",
70
+ "accent1",
71
+ "accent2",
72
+ "accent3",
73
+ "accent4",
74
+ "accent5",
75
+ "accent6",
76
+ "hlink",
77
+ "folHlink",
78
+ "bg1",
79
+ "tx1",
80
+ "bg2",
81
+ "tx2",
82
+ "phClr"
83
+ ]),
84
+ lumMod: z.number().optional().describe("Multiply HSL luminance (0..1)"),
85
+ lumOff: z.number().optional().describe("Add to HSL luminance after lumMod (0..1)"),
86
+ tint: z.number().optional().describe("Blend towards white (0..1)"),
87
+ shade: z.number().optional().describe("Blend towards black (0..1)"),
88
+ alpha: z.number().optional().describe("Opacity fraction, 1 = opaque")
89
+ });
64
90
  var AddElementSchema = z.object({
65
91
  filePath: z.string().describe("Path to the PPTX file"),
66
92
  slideIndex: z.number().int().min(0).describe("Zero-based slide index"),
@@ -105,6 +131,12 @@ var UpdateElementSchema = z.object({
105
131
  fontSize: z.number().optional(),
106
132
  fontFamily: z.string().optional(),
107
133
  fontColor: z.string().optional(),
134
+ /**
135
+ * A theme colour for the run text. Wins on save; resolves `fontColor`
136
+ * immediately when `fontColor` was not also given. Passing `fontColor`
137
+ * alone clears a previously-set text theme colour.
138
+ */
139
+ fontThemeColor: ThemeColorRefSchema.optional(),
108
140
  bold: z.boolean().optional(),
109
141
  italic: z.boolean().optional(),
110
142
  underline: z.boolean().optional(),
@@ -115,7 +147,13 @@ var UpdateElementSchema = z.object({
115
147
  opacity: z.number().min(0).max(1).optional(),
116
148
  hidden: z.boolean().optional(),
117
149
  flipH: z.boolean().optional(),
118
- flipV: z.boolean().optional()
150
+ flipV: z.boolean().optional(),
151
+ altText: z.string().optional().describe(
152
+ "Accessibility description (p:cNvPr/@descr) for image, picture, table, chart, smartArt, ole, media, text, shape and connector elements"
153
+ ),
154
+ title: z.string().optional().describe(
155
+ "Accessibility title (p:cNvPr/@title) for table, chart, smartArt, ole, media, text, shape and connector elements (not pictures)"
156
+ )
119
157
  });
120
158
  var RenameElementSchema = z.object({
121
159
  filePath: z.string().describe("Path to the PPTX file"),
@@ -177,6 +215,32 @@ var BatchUpdateElementsSchema = z.object({
177
215
  opacity: z.number().min(0).max(1).optional(),
178
216
  hidden: z.boolean().optional()
179
217
  });
218
+ var ThemeColorRefSchema2 = z.object({
219
+ scheme: z.enum([
220
+ "dk1",
221
+ "lt1",
222
+ "dk2",
223
+ "lt2",
224
+ "accent1",
225
+ "accent2",
226
+ "accent3",
227
+ "accent4",
228
+ "accent5",
229
+ "accent6",
230
+ "hlink",
231
+ "folHlink",
232
+ "bg1",
233
+ "tx1",
234
+ "bg2",
235
+ "tx2",
236
+ "phClr"
237
+ ]),
238
+ lumMod: z.number().optional().describe("Multiply HSL luminance (0..1)"),
239
+ lumOff: z.number().optional().describe("Add to HSL luminance after lumMod (0..1)"),
240
+ tint: z.number().optional().describe("Blend towards white (0..1)"),
241
+ shade: z.number().optional().describe("Blend towards black (0..1)"),
242
+ alpha: z.number().optional().describe("Opacity fraction, 1 = opaque")
243
+ });
180
244
  var UpdateTableCellsSchema = z.object({
181
245
  filePath: z.string().describe("Path to the PPTX file"),
182
246
  slideIndex: z.number().int().min(0),
@@ -203,6 +267,14 @@ var UpdateElementStyleSchema = z.object({
203
267
  slideIndex: z.number().int().min(0),
204
268
  elementId: z.string(),
205
269
  fillColor: z.string().optional(),
270
+ /**
271
+ * A theme colour for the fill (e.g. `{ scheme: 'accent1', lumMod: 0.8 }`
272
+ * for "Accent 1, Lighter 80%"). When set, the shape saves as
273
+ * `<a:schemeClr>` and keeps following the theme after a later theme
274
+ * change, instead of freezing today's resolved hex. Setting `fillColor`
275
+ * without this clears any previously-set fill theme colour.
276
+ */
277
+ fillThemeColor: ThemeColorRefSchema2.optional(),
206
278
  fillMode: z.string().optional(),
207
279
  fillGradientStops: z.array(
208
280
  z.object({
@@ -215,6 +287,8 @@ var UpdateElementStyleSchema = z.object({
215
287
  fillGradientType: z.string().optional(),
216
288
  fillOpacity: z.number().optional(),
217
289
  strokeColor: z.string().optional(),
290
+ /** A theme colour for the outline; see `fillThemeColor` above. */
291
+ strokeThemeColor: ThemeColorRefSchema2.optional(),
218
292
  strokeWidth: z.number().optional(),
219
293
  strokeDash: z.string().optional(),
220
294
  strokeOpacity: z.number().optional(),
@@ -234,7 +308,12 @@ var UpdateElementStyleSchema = z.object({
234
308
  brightness: z.number().optional(),
235
309
  contrast: z.number().optional(),
236
310
  grayscale: z.boolean().optional(),
237
- altText: z.string().optional()
311
+ altText: z.string().optional().describe(
312
+ "Accessibility description (p:cNvPr/@descr) for image, picture, table, chart, smartArt, ole, media, text, shape and connector elements"
313
+ ),
314
+ title: z.string().optional().describe(
315
+ "Accessibility title (p:cNvPr/@title) for table, chart, smartArt, ole, media, text, shape and connector elements (not pictures)"
316
+ )
238
317
  });
239
318
  var FindTextSchema = z.object({
240
319
  filePath: z.string().describe("Path to the PPTX file"),
@@ -261,6 +340,116 @@ var ManageCommentsSchema = z.object({
261
340
  resolved: z.boolean().optional(),
262
341
  includeResolved: z.boolean().optional()
263
342
  });
343
+ var TABLE_STYLE_SECTIONS = [
344
+ "wholeTbl",
345
+ "band1H",
346
+ "band2H",
347
+ "band1V",
348
+ "band2V",
349
+ "lastCol",
350
+ "firstCol",
351
+ "lastRow",
352
+ "seCell",
353
+ "swCell",
354
+ "firstRow",
355
+ "neCell",
356
+ "nwCell"
357
+ ];
358
+ var TableStyleSimpleColorSchema = z.object({
359
+ schemeColor: z.string().describe('Theme colour key (e.g. "accent1"), or "" for a non-scheme fill'),
360
+ tint: z.number().optional().describe("0-100000"),
361
+ shade: z.number().optional().describe("0-100000"),
362
+ color: z.string().optional().describe('Explicit hex colour, e.g. "#FF8800"')
363
+ });
364
+ var TableStyleFillSchema = z.object({
365
+ schemeColor: z.string(),
366
+ tint: z.number().optional(),
367
+ shade: z.number().optional(),
368
+ color: z.string().optional(),
369
+ noFill: z.boolean().optional(),
370
+ gradient: z.object({
371
+ type: z.enum(["linear", "radial"]),
372
+ angle: z.number().optional(),
373
+ stops: z.array(z.object({ position: z.number(), fill: TableStyleSimpleColorSchema }))
374
+ }).optional(),
375
+ pattern: z.object({
376
+ preset: z.string(),
377
+ foreground: TableStyleSimpleColorSchema.optional(),
378
+ background: TableStyleSimpleColorSchema.optional()
379
+ }).optional(),
380
+ image: z.object({ path: z.string().optional(), data: z.string().optional() }).optional()
381
+ });
382
+ var TableStyleTextSchema = z.object({
383
+ bold: z.boolean().optional(),
384
+ italic: z.boolean().optional(),
385
+ underline: z.boolean().optional(),
386
+ fontSchemeColor: z.string().optional(),
387
+ fontTint: z.number().optional(),
388
+ fontShade: z.number().optional(),
389
+ fontColor: z.string().optional(),
390
+ fontFace: z.string().optional(),
391
+ fontRefIdx: z.string().optional()
392
+ });
393
+ var TableStyleBorderSideSchema = z.object({
394
+ width: z.number().optional(),
395
+ dash: z.string().optional(),
396
+ fill: TableStyleSimpleColorSchema.optional(),
397
+ color: z.string().optional(),
398
+ noFill: z.boolean().optional()
399
+ });
400
+ var TableStyleBordersSchema = z.object({
401
+ left: TableStyleBorderSideSchema.optional(),
402
+ right: TableStyleBorderSideSchema.optional(),
403
+ top: TableStyleBorderSideSchema.optional(),
404
+ bottom: TableStyleBorderSideSchema.optional(),
405
+ insideH: TableStyleBorderSideSchema.optional(),
406
+ insideV: TableStyleBorderSideSchema.optional(),
407
+ tl2br: TableStyleBorderSideSchema.optional(),
408
+ tr2bl: TableStyleBorderSideSchema.optional()
409
+ });
410
+ var TableStyleCell3DSchema = z.object({
411
+ bevelWidth: z.number().optional(),
412
+ bevelHeight: z.number().optional(),
413
+ bevelPreset: z.string().optional(),
414
+ material: z.string().optional(),
415
+ lightRig: z.string().optional(),
416
+ lightRigDirection: z.string().optional()
417
+ });
418
+ var SetTableStyleSectionSchema = z.object({
419
+ filePath: z.string().describe("Path to the PPTX file"),
420
+ styleId: z.string().describe('Table style GUID, e.g. "{5C22544A-7EE6-4342-B048-85BDC9FD1C3A}"'),
421
+ section: z.enum(TABLE_STYLE_SECTIONS).describe("Which of the 13 CT_TableStyle parts to patch"),
422
+ styleName: z.string().optional().describe("Rename the style"),
423
+ fill: TableStyleFillSchema.optional(),
424
+ text: TableStyleTextSchema.optional(),
425
+ borders: TableStyleBordersSchema.optional(),
426
+ cell3D: TableStyleCell3DSchema.optional()
427
+ });
428
+ var CreateTableStyleSchema = z.object({
429
+ filePath: z.string().describe("Path to the PPTX file"),
430
+ styleName: z.string().describe("Display name for the new style"),
431
+ basedOnStyleId: z.string().optional().describe("Deep-clone every section from this existing style GUID as the starting point"),
432
+ setAsDefault: z.boolean().optional().describe("Repoint ppt/tableStyles.xml's default style at the new one")
433
+ });
434
+ var DeleteTableStyleSchema = z.object({
435
+ filePath: z.string().describe("Path to the PPTX file"),
436
+ styleId: z.string().describe("Table style GUID to remove"),
437
+ force: z.boolean().optional().describe("Delete even though a table on this deck still references the style")
438
+ });
439
+ var AssignTableStyleSchema = z.object({
440
+ filePath: z.string().describe("Path to the PPTX file"),
441
+ slideIndex: z.number().int().min(0),
442
+ elementId: z.string().describe("Table element ID"),
443
+ styleId: z.string().optional().describe(
444
+ "Table style GUID to assign. Defaults to the presentation's current default table style when omitted."
445
+ ),
446
+ bandedRows: z.boolean().optional(),
447
+ bandedColumns: z.boolean().optional(),
448
+ firstRowHeader: z.boolean().optional(),
449
+ lastRow: z.boolean().optional(),
450
+ firstCol: z.boolean().optional(),
451
+ lastCol: z.boolean().optional()
452
+ });
264
453
  var GetThemeInfoSchema = z.object({
265
454
  filePath: z.string().describe("Path to the PPTX file")
266
455
  });
@@ -290,6 +479,139 @@ var UpdateThemeFontsSchema = z.object({
290
479
  majorFont: z.string().optional().describe("Heading (major) font family"),
291
480
  minorFont: z.string().optional().describe("Body (minor) font family")
292
481
  });
482
+ var MarkerSymbolSchema = z.enum([
483
+ "circle",
484
+ "dash",
485
+ "diamond",
486
+ "dot",
487
+ "none",
488
+ "picture",
489
+ "plus",
490
+ "square",
491
+ "star",
492
+ "triangle",
493
+ "x",
494
+ "auto"
495
+ ]);
496
+ var DataLabelPositionSchema = z.enum([
497
+ "bestFit",
498
+ "b",
499
+ "ctr",
500
+ "inBase",
501
+ "inEnd",
502
+ "l",
503
+ "outEnd",
504
+ "r",
505
+ "t"
506
+ ]);
507
+ var FormatChartDataPointSchema = z.object({
508
+ filePath: z.string().describe("Path to the PPTX file"),
509
+ slideIndex: z.number().int().min(0).describe("Zero-based slide index"),
510
+ elementId: z.string().describe("Chart element ID"),
511
+ seriesIndex: z.number().int().min(0).describe("Zero-based series index"),
512
+ pointIndex: z.number().int().min(0).describe("Zero-based data point (category) index"),
513
+ fillColor: z.string().optional().describe("Fill colour (hex) for this point only"),
514
+ strokeColor: z.string().optional().describe("Outline colour (hex) for this point only"),
515
+ strokeWidth: z.number().optional().describe("Outline width in points"),
516
+ strokeDashStyle: z.string().optional().describe("Outline dash style, e.g. solid, dash, dashDot, sysDot"),
517
+ clearStyle: z.boolean().optional().describe("Remove all per-point shape formatting"),
518
+ explosion: z.number().nullable().optional().describe("Pie/doughnut slice pull-out distance 0-100; null clears it"),
519
+ marker: z.object({
520
+ symbol: MarkerSymbolSchema.optional(),
521
+ size: z.number().optional(),
522
+ fillColor: z.string().optional()
523
+ }).nullable().optional().describe("Per-point marker override (line/scatter/bubble); null clears it")
524
+ });
525
+ var FormatChartDataLabelSchema = z.object({
526
+ filePath: z.string().describe("Path to the PPTX file"),
527
+ slideIndex: z.number().int().min(0).describe("Zero-based slide index"),
528
+ elementId: z.string().describe("Chart element ID"),
529
+ seriesIndex: z.number().int().min(0).describe("Zero-based series index"),
530
+ pointIndex: z.number().int().min(0).describe("Zero-based data point (category) index"),
531
+ remove: z.boolean().optional().describe("Remove the per-point label override entirely"),
532
+ showValue: z.boolean().optional(),
533
+ showCategory: z.boolean().optional(),
534
+ showSeriesName: z.boolean().optional(),
535
+ showPercent: z.boolean().optional(),
536
+ showLegendKey: z.boolean().optional(),
537
+ position: DataLabelPositionSchema.optional(),
538
+ text: z.string().optional().describe("Custom label text override; '' clears it"),
539
+ spPr: z.object({
540
+ fillColor: z.string().optional(),
541
+ strokeColor: z.string().optional(),
542
+ strokeWidth: z.number().optional(),
543
+ strokeDashStyle: z.string().optional()
544
+ }).nullable().optional().describe("This label's own fill/line formatting; null removes it"),
545
+ txPr: z.object({
546
+ fontFamily: z.string().optional(),
547
+ fontSize: z.number().optional(),
548
+ bold: z.boolean().optional(),
549
+ italic: z.boolean().optional(),
550
+ color: z.string().optional()
551
+ }).nullable().optional().describe("This label's own font; null removes it")
552
+ });
553
+ var FormatChartSeriesSchema = z.object({
554
+ filePath: z.string().describe("Path to the PPTX file"),
555
+ slideIndex: z.number().int().min(0).describe("Zero-based slide index"),
556
+ elementId: z.string().describe("Chart element ID"),
557
+ seriesIndex: z.number().int().min(0).describe("Zero-based series index"),
558
+ marker: z.object({
559
+ symbol: MarkerSymbolSchema.optional(),
560
+ size: z.number().optional(),
561
+ fillColor: z.string().optional(),
562
+ strokeColor: z.string().optional(),
563
+ strokeWidth: z.number().optional(),
564
+ strokeDashStyle: z.string().optional()
565
+ }).nullable().optional().describe("Series marker (line/scatter/bubble/radar); null removes it"),
566
+ trendline: z.object({
567
+ trendlineType: z.enum([
568
+ "linear",
569
+ "exponential",
570
+ "logarithmic",
571
+ "polynomial",
572
+ "power",
573
+ "movingAvg"
574
+ ]),
575
+ color: z.string().optional(),
576
+ lineWidth: z.number().optional().describe("Trendline width in points"),
577
+ lineDashStyle: z.string().optional(),
578
+ order: z.number().optional().describe("Polynomial order, 2-6"),
579
+ period: z.number().optional().describe("Moving-average period"),
580
+ displayEq: z.boolean().optional(),
581
+ displayRSq: z.boolean().optional()
582
+ }).nullable().optional().describe("Series trendline; null removes it"),
583
+ errorBars: z.object({
584
+ direction: z.enum(["x", "y"]),
585
+ barType: z.enum(["both", "minus", "plus"]),
586
+ valType: z.enum(["cust", "fixedVal", "percentage", "stdDev", "stdErr"]),
587
+ val: z.number().optional(),
588
+ customPlus: z.array(z.number()).optional(),
589
+ customMinus: z.array(z.number()).optional(),
590
+ noEndCap: z.boolean().optional(),
591
+ color: z.string().optional(),
592
+ width: z.number().optional().describe("Error-bar line width in points"),
593
+ dashStyle: z.string().optional()
594
+ }).nullable().optional().describe("Series error bars; null removes them")
595
+ });
596
+ var SetChartHelperLineSchema = z.object({
597
+ filePath: z.string().describe("Path to the PPTX file"),
598
+ slideIndex: z.number().int().min(0).describe("Zero-based slide index"),
599
+ elementId: z.string().describe("Chart element ID"),
600
+ line: z.enum(["dropLines", "hiLowLines"]).describe("Which helper line to set"),
601
+ style: z.object({
602
+ color: z.string().optional(),
603
+ width: z.number().optional(),
604
+ dashStyle: z.string().optional()
605
+ }).nullable().describe("Line colour/width/dash; {} shows the line with defaults, null removes it")
606
+ });
607
+ var SetChartColorMapOverrideSchema = z.object({
608
+ filePath: z.string().describe("Path to the PPTX file"),
609
+ slideIndex: z.number().int().min(0).describe("Zero-based slide index"),
610
+ elementId: z.string().describe("Chart element ID"),
611
+ overrides: z.record(z.string(), z.string()).nullable().describe(
612
+ 'Theme colour role remap (bg1/tx1/bg2/tx2/accent1-6/hlink/folHlink -> role), e.g. { "accent1": "accent2" }; null removes the override'
613
+ )
614
+ });
293
615
  var UpdateChartSchema = z.object({
294
616
  filePath: z.string().describe("Path to the PPTX file"),
295
617
  slideIndex: z.number().int().min(0).describe("Zero-based slide index"),
@@ -553,4 +875,4 @@ var ApplyLayoutSchema = z.object({
553
875
  layoutType: z.string().optional().describe("Layout type to apply (alternative to name)")
554
876
  });
555
877
 
556
- export { AccessibilityCheckSchema, AddChartSeriesSchema, AddChartUserShapeSchema, AddElementSchema, AddSlideSchema, ApplyLayoutSchema, ApplyTemplateSchema, ApplyThemePresetSchema, ArrangeElementsSchema, BatchUpdateElementsSchema, CloneElementSchema, ConvertToMarkdownSchema, CreateChartSchema, DeleteElementsSchema, DeleteSlidesSchema, DuplicateSlideSchema, ExportSlideSvgSchema, ExportToJsonSchema, ExportToSvgSchema, FindPlaceholdersSchema, FindTextSchema, GetLayoutsSchema, GetMetadataSchema, GetPresentationPropertiesSchema, GetSlideSchema, GetThemeInfoSchema, GroupElementsSchema, ImportFromJsonSchema, ListChartUserShapesSchema, ManageCommentsSchema, ManageHyperlinksSchema, ManageSectionsSchema, ManageSmartArtSchema, ManageTableStructureSchema, RemoveChartSeriesSchema, RemoveChartUserShapeSchema, RenameElementSchema, ReorderSlidesSchema, RepairPresentationSchema, ReplaceGeometrySchema, ReplaceTextSchema, SetCanvasSizeSchema, SetElementAnimationSchema, SetElementLockSchema, SetSlideTransitionSchema, UngroupElementsSchema, UpdateChartSchema, UpdateChartSeriesDataSchema, UpdateChartUserShapeSchema, UpdateElementSchema, UpdateElementStyleSchema, UpdateMetadataSchema, UpdatePresentationPropertiesSchema, UpdateSlidePropertiesSchema, UpdateTableCellsSchema, UpdateThemeColorsSchema, UpdateThemeFontsSchema, ValidatePresentationSchema };
878
+ export { AccessibilityCheckSchema, AddChartSeriesSchema, AddChartUserShapeSchema, AddElementSchema, AddSlideSchema, ApplyLayoutSchema, ApplyTemplateSchema, ApplyThemePresetSchema, ArrangeElementsSchema, AssignTableStyleSchema, BatchUpdateElementsSchema, CloneElementSchema, ConvertToMarkdownSchema, CreateChartSchema, CreateTableStyleSchema, DeleteElementsSchema, DeleteSlidesSchema, DeleteTableStyleSchema, DuplicateSlideSchema, ExportSlideSvgSchema, ExportToJsonSchema, ExportToSvgSchema, FindPlaceholdersSchema, FindTextSchema, FormatChartDataLabelSchema, FormatChartDataPointSchema, FormatChartSeriesSchema, GetLayoutsSchema, GetMetadataSchema, GetPresentationPropertiesSchema, GetSlideSchema, GetThemeInfoSchema, GroupElementsSchema, ImportFromJsonSchema, ListChartUserShapesSchema, ManageCommentsSchema, ManageHyperlinksSchema, ManageSectionsSchema, ManageSmartArtSchema, ManageTableStructureSchema, RemoveChartSeriesSchema, RemoveChartUserShapeSchema, RenameElementSchema, ReorderSlidesSchema, RepairPresentationSchema, ReplaceGeometrySchema, ReplaceTextSchema, SetCanvasSizeSchema, SetChartColorMapOverrideSchema, SetChartHelperLineSchema, SetElementAnimationSchema, SetElementLockSchema, SetSlideTransitionSchema, SetTableStyleSectionSchema, TABLE_STYLE_SECTIONS, TableStyleBordersSchema, TableStyleCell3DSchema, TableStyleFillSchema, TableStyleTextSchema, UngroupElementsSchema, UpdateChartSchema, UpdateChartSeriesDataSchema, UpdateChartUserShapeSchema, UpdateElementSchema, UpdateElementStyleSchema, UpdateMetadataSchema, UpdatePresentationPropertiesSchema, UpdateSlidePropertiesSchema, UpdateTableCellsSchema, UpdateThemeColorsSchema, UpdateThemeFontsSchema, ValidatePresentationSchema };
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "pptx-viewer-mcp",
3
- "version": "2.2.0",
3
+ "version": "2.4.0",
4
4
  "description": "PowerPoint PPTX tools and MCP server: manipulate, convert, and collaborate on .pptx files from AI agents.",
5
5
  "keywords": [
6
6
  "ai",
@@ -72,7 +72,7 @@
72
72
  "@modelcontextprotocol/sdk": "^1.30.0",
73
73
  "fast-xml-parser": "^5.11.0",
74
74
  "jszip": "^3.10.1",
75
- "pptx-viewer-core": "^3.4.0",
75
+ "pptx-viewer-core": "^3.6.0",
76
76
  "zod": "^4.4.3"
77
77
  },
78
78
  "devDependencies": {