pptx-viewer-mcp 2.3.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.
@@ -152,7 +152,13 @@ var UpdateElementSchema = z.object({
152
152
  opacity: z.number().min(0).max(1).optional(),
153
153
  hidden: z.boolean().optional(),
154
154
  flipH: z.boolean().optional(),
155
- flipV: z.boolean().optional()
155
+ flipV: z.boolean().optional(),
156
+ altText: z.string().optional().describe(
157
+ "Accessibility description (p:cNvPr/@descr) for image, picture, table, chart, smartArt, ole, media, text, shape and connector elements"
158
+ ),
159
+ title: z.string().optional().describe(
160
+ "Accessibility title (p:cNvPr/@title) for table, chart, smartArt, ole, media, text, shape and connector elements (not pictures)"
161
+ )
156
162
  });
157
163
  var RenameElementSchema = z.object({
158
164
  filePath: z.string().describe("Path to the PPTX file"),
@@ -307,7 +313,12 @@ var UpdateElementStyleSchema = z.object({
307
313
  brightness: z.number().optional(),
308
314
  contrast: z.number().optional(),
309
315
  grayscale: z.boolean().optional(),
310
- altText: z.string().optional()
316
+ altText: z.string().optional().describe(
317
+ "Accessibility description (p:cNvPr/@descr) for image, picture, table, chart, smartArt, ole, media, text, shape and connector elements"
318
+ ),
319
+ title: z.string().optional().describe(
320
+ "Accessibility title (p:cNvPr/@title) for table, chart, smartArt, ole, media, text, shape and connector elements (not pictures)"
321
+ )
311
322
  });
312
323
  var FindTextSchema = z.object({
313
324
  filePath: z.string().describe("Path to the PPTX file"),
@@ -1629,6 +1640,240 @@ async function convertToMarkdown(ctx, params) {
1629
1640
  }
1630
1641
  };
1631
1642
  }
1643
+ var ALT_TEXT_ELEMENT_TYPES = /* @__PURE__ */ new Set(["image", "picture", "table", "chart", "smartArt", "ole", "media", "text", "shape", "connector"]);
1644
+ var TITLE_ELEMENT_TYPES = /* @__PURE__ */ new Set([
1645
+ "table",
1646
+ "chart",
1647
+ "smartArt",
1648
+ "ole",
1649
+ "media",
1650
+ "text",
1651
+ "shape",
1652
+ "connector"
1653
+ ]);
1654
+ function applyElementAltText(el, altText) {
1655
+ if (!ALT_TEXT_ELEMENT_TYPES.has(el.type)) {
1656
+ throw new Error(
1657
+ `Element '${el.id}' (${el.type}) does not support altText; only ${[...ALT_TEXT_ELEMENT_TYPES].join(", ")} elements do.`
1658
+ );
1659
+ }
1660
+ el.altText = altText;
1661
+ }
1662
+ function applyElementTitle(el, title) {
1663
+ if (!TITLE_ELEMENT_TYPES.has(el.type)) {
1664
+ throw new Error(
1665
+ `Element '${el.id}' (${el.type}) does not support title; only ${[...TITLE_ELEMENT_TYPES].join(", ")} elements do.`
1666
+ );
1667
+ }
1668
+ el.title = title;
1669
+ }
1670
+ function updateElementStyle(ctx, params) {
1671
+ const err = validateSlideIndex(params.slideIndex, ctx.pptxData.slides.length);
1672
+ if (err) {
1673
+ throw new Error(err);
1674
+ }
1675
+ const slide = ctx.pptxData.slides[params.slideIndex];
1676
+ const el = slide.elements.find((e) => e.id === params.elementId);
1677
+ if (!el) {
1678
+ throw new Error(`Element '${params.elementId}' not found on slide ${params.slideIndex}.`);
1679
+ }
1680
+ if ("shapeStyle" in el) {
1681
+ if (!el.shapeStyle) {
1682
+ el.shapeStyle = {};
1683
+ }
1684
+ const ss = el.shapeStyle;
1685
+ if (params.fillThemeColor !== void 0) {
1686
+ ss.fillColorRef = params.fillThemeColor;
1687
+ const resolved = resolveThemeColorRef(params.fillThemeColor, ctx.pptxData.themeColorMap);
1688
+ if (params.fillColor !== void 0) {
1689
+ ss.fillColor = params.fillColor;
1690
+ } else if (resolved) {
1691
+ ss.fillColor = resolved;
1692
+ }
1693
+ } else if (params.fillColor !== void 0) {
1694
+ ss.fillColor = params.fillColor;
1695
+ ss.fillColorRef = void 0;
1696
+ }
1697
+ if (params.fillMode !== void 0) {
1698
+ ss.fillMode = params.fillMode;
1699
+ }
1700
+ if (params.fillGradientStops !== void 0) {
1701
+ ss.fillGradientStops = params.fillGradientStops;
1702
+ }
1703
+ if (params.fillGradientAngle !== void 0) {
1704
+ ss.fillGradientAngle = params.fillGradientAngle;
1705
+ }
1706
+ if (params.fillGradientType !== void 0) {
1707
+ ss.fillGradientType = params.fillGradientType;
1708
+ }
1709
+ if (params.fillOpacity !== void 0) {
1710
+ ss.fillOpacity = params.fillOpacity;
1711
+ }
1712
+ if (params.strokeThemeColor !== void 0) {
1713
+ ss.strokeColorRef = params.strokeThemeColor;
1714
+ const resolved = resolveThemeColorRef(params.strokeThemeColor, ctx.pptxData.themeColorMap);
1715
+ if (params.strokeColor !== void 0) {
1716
+ ss.strokeColor = params.strokeColor;
1717
+ } else if (resolved) {
1718
+ ss.strokeColor = resolved;
1719
+ }
1720
+ } else if (params.strokeColor !== void 0) {
1721
+ ss.strokeColor = params.strokeColor;
1722
+ ss.strokeColorRef = void 0;
1723
+ }
1724
+ if (params.strokeWidth !== void 0) {
1725
+ ss.strokeWidth = params.strokeWidth;
1726
+ }
1727
+ if (params.strokeDash !== void 0) {
1728
+ ss.strokeDash = params.strokeDash;
1729
+ }
1730
+ if (params.strokeOpacity !== void 0) {
1731
+ ss.strokeOpacity = params.strokeOpacity;
1732
+ }
1733
+ if (params.shadowColor !== void 0) {
1734
+ ss.shadowColor = params.shadowColor;
1735
+ }
1736
+ if (params.shadowBlur !== void 0) {
1737
+ ss.shadowBlur = params.shadowBlur;
1738
+ }
1739
+ if (params.shadowOffsetX !== void 0) {
1740
+ ss.shadowOffsetX = params.shadowOffsetX;
1741
+ }
1742
+ if (params.shadowOffsetY !== void 0) {
1743
+ ss.shadowOffsetY = params.shadowOffsetY;
1744
+ }
1745
+ if (params.shadowOpacity !== void 0) {
1746
+ ss.shadowOpacity = params.shadowOpacity;
1747
+ }
1748
+ if (params.glowColor !== void 0) {
1749
+ ss.glowColor = params.glowColor;
1750
+ }
1751
+ if (params.glowRadius !== void 0) {
1752
+ ss.glowRadius = params.glowRadius;
1753
+ }
1754
+ if (params.glowOpacity !== void 0) {
1755
+ ss.glowOpacity = params.glowOpacity;
1756
+ }
1757
+ if (params.softEdgeRadius !== void 0) {
1758
+ ss.softEdgeRadius = params.softEdgeRadius;
1759
+ }
1760
+ }
1761
+ if (params.altText !== void 0) {
1762
+ applyElementAltText(el, params.altText);
1763
+ }
1764
+ if (params.title !== void 0) {
1765
+ applyElementTitle(el, params.title);
1766
+ }
1767
+ if (el.type === "image" || el.type === "picture") {
1768
+ const img = el;
1769
+ if (params.cropLeft !== void 0) {
1770
+ img.cropLeft = params.cropLeft;
1771
+ }
1772
+ if (params.cropTop !== void 0) {
1773
+ img.cropTop = params.cropTop;
1774
+ }
1775
+ if (params.cropRight !== void 0) {
1776
+ img.cropRight = params.cropRight;
1777
+ }
1778
+ if (params.cropBottom !== void 0) {
1779
+ img.cropBottom = params.cropBottom;
1780
+ }
1781
+ if (params.brightness !== void 0 || params.contrast !== void 0 || params.grayscale !== void 0) {
1782
+ if (!img.imageEffects) {
1783
+ img.imageEffects = {};
1784
+ }
1785
+ if (params.brightness !== void 0) {
1786
+ img.imageEffects.brightness = params.brightness;
1787
+ }
1788
+ if (params.contrast !== void 0) {
1789
+ img.imageEffects.contrast = params.contrast;
1790
+ }
1791
+ if (params.grayscale !== void 0) {
1792
+ img.imageEffects.grayscale = params.grayscale;
1793
+ }
1794
+ }
1795
+ }
1796
+ return {
1797
+ pptxData: ctx.pptxData,
1798
+ dirty: true,
1799
+ result: { elementId: params.elementId }
1800
+ };
1801
+ }
1802
+ function runAccessibilityCheck(ctx) {
1803
+ const issues = [];
1804
+ for (let si = 0; si < ctx.pptxData.slides.length; si++) {
1805
+ const slide = ctx.pptxData.slides[si];
1806
+ let slideHasText = false;
1807
+ for (const el of slide.elements) {
1808
+ if (el.type === "image" || el.type === "picture") {
1809
+ const img = el;
1810
+ if (!img.altText) {
1811
+ issues.push({
1812
+ slideIndex: si,
1813
+ elementId: el.id,
1814
+ severity: "error",
1815
+ message: `Image element '${el.id}' has no alt text.`
1816
+ });
1817
+ }
1818
+ }
1819
+ if (hasTextProperties(el)) {
1820
+ const textEl = el;
1821
+ slideHasText = true;
1822
+ if (!textEl.text || textEl.text.trim() === "") {
1823
+ issues.push({
1824
+ slideIndex: si,
1825
+ elementId: el.id,
1826
+ severity: "info",
1827
+ message: `Text element '${el.id}' is empty.`
1828
+ });
1829
+ }
1830
+ const fs = textEl.textStyle?.fontSize;
1831
+ if (fs !== void 0 && fs < 10) {
1832
+ issues.push({
1833
+ slideIndex: si,
1834
+ elementId: el.id,
1835
+ severity: "warning",
1836
+ message: `Text element '${el.id}' has very small font size (${fs}pt < 10pt).`
1837
+ });
1838
+ }
1839
+ const textColor = textEl.textStyle?.color?.toLowerCase();
1840
+ const bgColor = slide.backgroundColor?.toLowerCase();
1841
+ if (textColor && bgColor && textColor === bgColor) {
1842
+ issues.push({
1843
+ slideIndex: si,
1844
+ elementId: el.id,
1845
+ severity: "error",
1846
+ message: `Text element '${el.id}' has same color as slide background (${textColor}).`
1847
+ });
1848
+ }
1849
+ }
1850
+ }
1851
+ if (!slideHasText) {
1852
+ issues.push({
1853
+ slideIndex: si,
1854
+ severity: "warning",
1855
+ message: `Slide ${si + 1} contains no text elements.`
1856
+ });
1857
+ }
1858
+ }
1859
+ const errorCount = issues.filter((i) => i.severity === "error").length;
1860
+ const warningCount = issues.filter((i) => i.severity === "warning").length;
1861
+ const infoCount = issues.filter((i) => i.severity === "info").length;
1862
+ return {
1863
+ pptxData: ctx.pptxData,
1864
+ dirty: false,
1865
+ result: {
1866
+ slideCount: ctx.pptxData.slides.length,
1867
+ totalIssues: issues.length,
1868
+ errorCount,
1869
+ warningCount,
1870
+ infoCount,
1871
+ issues
1872
+ }
1873
+ };
1874
+ }
1875
+
1876
+ // src/tools/element-tools.ts
1632
1877
  function addElement(ctx, params) {
1633
1878
  const err = validateSlideIndex(params.slideIndex, ctx.pptxData.slides.length);
1634
1879
  if (err) {
@@ -1808,6 +2053,12 @@ function updateElement(ctx, params) {
1808
2053
  if (params.flipV !== void 0) {
1809
2054
  el.flipVertical = params.flipV;
1810
2055
  }
2056
+ if (params.altText !== void 0) {
2057
+ applyElementAltText(el, params.altText);
2058
+ }
2059
+ if (params.title !== void 0) {
2060
+ applyElementTitle(el, params.title);
2061
+ }
1811
2062
  if (hasTextProperties(el)) {
1812
2063
  const textEl = el;
1813
2064
  if (params.text !== void 0) {
@@ -3062,208 +3313,6 @@ function manageSmartArt(ctx, params) {
3062
3313
  throw new Error(`Unknown SmartArt action: ${String(params.action)}`);
3063
3314
  }
3064
3315
  }
3065
- function updateElementStyle(ctx, params) {
3066
- const err = validateSlideIndex(params.slideIndex, ctx.pptxData.slides.length);
3067
- if (err) {
3068
- throw new Error(err);
3069
- }
3070
- const slide = ctx.pptxData.slides[params.slideIndex];
3071
- const el = slide.elements.find((e) => e.id === params.elementId);
3072
- if (!el) {
3073
- throw new Error(`Element '${params.elementId}' not found on slide ${params.slideIndex}.`);
3074
- }
3075
- if ("shapeStyle" in el) {
3076
- if (!el.shapeStyle) {
3077
- el.shapeStyle = {};
3078
- }
3079
- const ss = el.shapeStyle;
3080
- if (params.fillThemeColor !== void 0) {
3081
- ss.fillColorRef = params.fillThemeColor;
3082
- const resolved = resolveThemeColorRef(params.fillThemeColor, ctx.pptxData.themeColorMap);
3083
- if (params.fillColor !== void 0) {
3084
- ss.fillColor = params.fillColor;
3085
- } else if (resolved) {
3086
- ss.fillColor = resolved;
3087
- }
3088
- } else if (params.fillColor !== void 0) {
3089
- ss.fillColor = params.fillColor;
3090
- ss.fillColorRef = void 0;
3091
- }
3092
- if (params.fillMode !== void 0) {
3093
- ss.fillMode = params.fillMode;
3094
- }
3095
- if (params.fillGradientStops !== void 0) {
3096
- ss.fillGradientStops = params.fillGradientStops;
3097
- }
3098
- if (params.fillGradientAngle !== void 0) {
3099
- ss.fillGradientAngle = params.fillGradientAngle;
3100
- }
3101
- if (params.fillGradientType !== void 0) {
3102
- ss.fillGradientType = params.fillGradientType;
3103
- }
3104
- if (params.fillOpacity !== void 0) {
3105
- ss.fillOpacity = params.fillOpacity;
3106
- }
3107
- if (params.strokeThemeColor !== void 0) {
3108
- ss.strokeColorRef = params.strokeThemeColor;
3109
- const resolved = resolveThemeColorRef(params.strokeThemeColor, ctx.pptxData.themeColorMap);
3110
- if (params.strokeColor !== void 0) {
3111
- ss.strokeColor = params.strokeColor;
3112
- } else if (resolved) {
3113
- ss.strokeColor = resolved;
3114
- }
3115
- } else if (params.strokeColor !== void 0) {
3116
- ss.strokeColor = params.strokeColor;
3117
- ss.strokeColorRef = void 0;
3118
- }
3119
- if (params.strokeWidth !== void 0) {
3120
- ss.strokeWidth = params.strokeWidth;
3121
- }
3122
- if (params.strokeDash !== void 0) {
3123
- ss.strokeDash = params.strokeDash;
3124
- }
3125
- if (params.strokeOpacity !== void 0) {
3126
- ss.strokeOpacity = params.strokeOpacity;
3127
- }
3128
- if (params.shadowColor !== void 0) {
3129
- ss.shadowColor = params.shadowColor;
3130
- }
3131
- if (params.shadowBlur !== void 0) {
3132
- ss.shadowBlur = params.shadowBlur;
3133
- }
3134
- if (params.shadowOffsetX !== void 0) {
3135
- ss.shadowOffsetX = params.shadowOffsetX;
3136
- }
3137
- if (params.shadowOffsetY !== void 0) {
3138
- ss.shadowOffsetY = params.shadowOffsetY;
3139
- }
3140
- if (params.shadowOpacity !== void 0) {
3141
- ss.shadowOpacity = params.shadowOpacity;
3142
- }
3143
- if (params.glowColor !== void 0) {
3144
- ss.glowColor = params.glowColor;
3145
- }
3146
- if (params.glowRadius !== void 0) {
3147
- ss.glowRadius = params.glowRadius;
3148
- }
3149
- if (params.glowOpacity !== void 0) {
3150
- ss.glowOpacity = params.glowOpacity;
3151
- }
3152
- if (params.softEdgeRadius !== void 0) {
3153
- ss.softEdgeRadius = params.softEdgeRadius;
3154
- }
3155
- }
3156
- if (el.type === "image" || el.type === "picture") {
3157
- const img = el;
3158
- if (params.altText !== void 0) {
3159
- img.altText = params.altText;
3160
- }
3161
- if (params.cropLeft !== void 0) {
3162
- img.cropLeft = params.cropLeft;
3163
- }
3164
- if (params.cropTop !== void 0) {
3165
- img.cropTop = params.cropTop;
3166
- }
3167
- if (params.cropRight !== void 0) {
3168
- img.cropRight = params.cropRight;
3169
- }
3170
- if (params.cropBottom !== void 0) {
3171
- img.cropBottom = params.cropBottom;
3172
- }
3173
- if (params.brightness !== void 0 || params.contrast !== void 0 || params.grayscale !== void 0) {
3174
- if (!img.imageEffects) {
3175
- img.imageEffects = {};
3176
- }
3177
- if (params.brightness !== void 0) {
3178
- img.imageEffects.brightness = params.brightness;
3179
- }
3180
- if (params.contrast !== void 0) {
3181
- img.imageEffects.contrast = params.contrast;
3182
- }
3183
- if (params.grayscale !== void 0) {
3184
- img.imageEffects.grayscale = params.grayscale;
3185
- }
3186
- }
3187
- }
3188
- return {
3189
- pptxData: ctx.pptxData,
3190
- dirty: true,
3191
- result: { elementId: params.elementId }
3192
- };
3193
- }
3194
- function runAccessibilityCheck(ctx) {
3195
- const issues = [];
3196
- for (let si = 0; si < ctx.pptxData.slides.length; si++) {
3197
- const slide = ctx.pptxData.slides[si];
3198
- let slideHasText = false;
3199
- for (const el of slide.elements) {
3200
- if (el.type === "image" || el.type === "picture") {
3201
- const img = el;
3202
- if (!img.altText) {
3203
- issues.push({
3204
- slideIndex: si,
3205
- elementId: el.id,
3206
- severity: "error",
3207
- message: `Image element '${el.id}' has no alt text.`
3208
- });
3209
- }
3210
- }
3211
- if (hasTextProperties(el)) {
3212
- const textEl = el;
3213
- slideHasText = true;
3214
- if (!textEl.text || textEl.text.trim() === "") {
3215
- issues.push({
3216
- slideIndex: si,
3217
- elementId: el.id,
3218
- severity: "info",
3219
- message: `Text element '${el.id}' is empty.`
3220
- });
3221
- }
3222
- const fs = textEl.textStyle?.fontSize;
3223
- if (fs !== void 0 && fs < 10) {
3224
- issues.push({
3225
- slideIndex: si,
3226
- elementId: el.id,
3227
- severity: "warning",
3228
- message: `Text element '${el.id}' has very small font size (${fs}pt < 10pt).`
3229
- });
3230
- }
3231
- const textColor = textEl.textStyle?.color?.toLowerCase();
3232
- const bgColor = slide.backgroundColor?.toLowerCase();
3233
- if (textColor && bgColor && textColor === bgColor) {
3234
- issues.push({
3235
- slideIndex: si,
3236
- elementId: el.id,
3237
- severity: "error",
3238
- message: `Text element '${el.id}' has same color as slide background (${textColor}).`
3239
- });
3240
- }
3241
- }
3242
- }
3243
- if (!slideHasText) {
3244
- issues.push({
3245
- slideIndex: si,
3246
- severity: "warning",
3247
- message: `Slide ${si + 1} contains no text elements.`
3248
- });
3249
- }
3250
- }
3251
- const errorCount = issues.filter((i) => i.severity === "error").length;
3252
- const warningCount = issues.filter((i) => i.severity === "warning").length;
3253
- const infoCount = issues.filter((i) => i.severity === "info").length;
3254
- return {
3255
- pptxData: ctx.pptxData,
3256
- dirty: false,
3257
- result: {
3258
- slideCount: ctx.pptxData.slides.length,
3259
- totalIssues: issues.length,
3260
- errorCount,
3261
- warningCount,
3262
- infoCount,
3263
- issues
3264
- }
3265
- };
3266
- }
3267
3316
  function findTableElement(ctx, slideIndex, elementId) {
3268
3317
  const err = validateSlideIndex(slideIndex, ctx.pptxData.slides.length);
3269
3318
  if (err) {
@@ -159,6 +159,8 @@ declare const UpdateElementSchema: z.ZodObject<{
159
159
  hidden: z.ZodOptional<z.ZodBoolean>;
160
160
  flipH: z.ZodOptional<z.ZodBoolean>;
161
161
  flipV: z.ZodOptional<z.ZodBoolean>;
162
+ altText: z.ZodOptional<z.ZodString>;
163
+ title: z.ZodOptional<z.ZodString>;
162
164
  }, z.core.$strip>;
163
165
  declare const RenameElementSchema: z.ZodObject<{
164
166
  filePath: z.ZodString;
@@ -348,6 +350,7 @@ declare const UpdateElementStyleSchema: z.ZodObject<{
348
350
  contrast: z.ZodOptional<z.ZodNumber>;
349
351
  grayscale: z.ZodOptional<z.ZodBoolean>;
350
352
  altText: z.ZodOptional<z.ZodString>;
353
+ title: z.ZodOptional<z.ZodString>;
351
354
  }, z.core.$strip>;
352
355
  declare const FindTextSchema: z.ZodObject<{
353
356
  filePath: z.ZodString;
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","names":[],"sources":["../../src/schemas/slide-schemas.ts","../../src/schemas/element-schemas.ts","../../src/schemas/table-style-schemas.ts","../../src/schemas/theme-schemas.ts","../../src/schemas/chart-formatting-schemas.ts","../../src/schemas/chart-schemas.ts","../../src/schemas/chart-user-shape-schemas.ts","../../src/schemas/smartart-schemas.ts","../../src/schemas/template-schemas.ts","../../src/schemas/metadata-schemas.ts","../../src/schemas/section-schemas.ts","../../src/schemas/export-schemas.ts","../../src/schemas/json-schemas.ts","../../src/schemas/hyperlink-schemas.ts","../../src/schemas/geometry-schemas.ts","../../src/schemas/lock-schemas.ts","../../src/schemas/validation-schemas.ts","../../src/schemas/presentation-schemas.ts","../../src/schemas/layout-schemas.ts"],"mappings":"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"}
1
+ {"version":3,"file":"index.d.ts","names":[],"sources":["../../src/schemas/slide-schemas.ts","../../src/schemas/element-schemas.ts","../../src/schemas/table-style-schemas.ts","../../src/schemas/theme-schemas.ts","../../src/schemas/chart-formatting-schemas.ts","../../src/schemas/chart-schemas.ts","../../src/schemas/chart-user-shape-schemas.ts","../../src/schemas/smartart-schemas.ts","../../src/schemas/template-schemas.ts","../../src/schemas/metadata-schemas.ts","../../src/schemas/section-schemas.ts","../../src/schemas/export-schemas.ts","../../src/schemas/json-schemas.ts","../../src/schemas/hyperlink-schemas.ts","../../src/schemas/geometry-schemas.ts","../../src/schemas/lock-schemas.ts","../../src/schemas/validation-schemas.ts","../../src/schemas/presentation-schemas.ts","../../src/schemas/layout-schemas.ts"],"mappings":"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"}
@@ -149,7 +149,13 @@ var UpdateElementSchema = zod.z.object({
149
149
  opacity: zod.z.number().min(0).max(1).optional(),
150
150
  hidden: zod.z.boolean().optional(),
151
151
  flipH: zod.z.boolean().optional(),
152
- flipV: zod.z.boolean().optional()
152
+ flipV: zod.z.boolean().optional(),
153
+ altText: zod.z.string().optional().describe(
154
+ "Accessibility description (p:cNvPr/@descr) for image, picture, table, chart, smartArt, ole, media, text, shape and connector elements"
155
+ ),
156
+ title: zod.z.string().optional().describe(
157
+ "Accessibility title (p:cNvPr/@title) for table, chart, smartArt, ole, media, text, shape and connector elements (not pictures)"
158
+ )
153
159
  });
154
160
  var RenameElementSchema = zod.z.object({
155
161
  filePath: zod.z.string().describe("Path to the PPTX file"),
@@ -304,7 +310,12 @@ var UpdateElementStyleSchema = zod.z.object({
304
310
  brightness: zod.z.number().optional(),
305
311
  contrast: zod.z.number().optional(),
306
312
  grayscale: zod.z.boolean().optional(),
307
- altText: zod.z.string().optional()
313
+ altText: zod.z.string().optional().describe(
314
+ "Accessibility description (p:cNvPr/@descr) for image, picture, table, chart, smartArt, ole, media, text, shape and connector elements"
315
+ ),
316
+ title: zod.z.string().optional().describe(
317
+ "Accessibility title (p:cNvPr/@title) for table, chart, smartArt, ole, media, text, shape and connector elements (not pictures)"
318
+ )
308
319
  });
309
320
  var FindTextSchema = zod.z.object({
310
321
  filePath: zod.z.string().describe("Path to the PPTX file"),
@@ -147,7 +147,13 @@ var UpdateElementSchema = z.object({
147
147
  opacity: z.number().min(0).max(1).optional(),
148
148
  hidden: z.boolean().optional(),
149
149
  flipH: z.boolean().optional(),
150
- 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
+ )
151
157
  });
152
158
  var RenameElementSchema = z.object({
153
159
  filePath: z.string().describe("Path to the PPTX file"),
@@ -302,7 +308,12 @@ var UpdateElementStyleSchema = z.object({
302
308
  brightness: z.number().optional(),
303
309
  contrast: z.number().optional(),
304
310
  grayscale: z.boolean().optional(),
305
- 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
+ )
306
317
  });
307
318
  var FindTextSchema = z.object({
308
319
  filePath: z.string().describe("Path to the PPTX file"),
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "pptx-viewer-mcp",
3
- "version": "2.3.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.5.0",
75
+ "pptx-viewer-core": "^3.6.0",
76
76
  "zod": "^4.4.3"
77
77
  },
78
78
  "devDependencies": {