pptx-viewer-mcp 1.3.2 → 2.0.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.
- package/CHANGELOG.md +22 -0
- package/dist/index.d.ts +16 -1
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +2 -13
- package/dist/index.mjs +2 -13
- package/dist/mcp/index.js +21 -33
- package/dist/mcp/index.mjs +21 -33
- package/package.json +3 -3
package/CHANGELOG.md
CHANGED
|
@@ -4,6 +4,28 @@ All notable changes to this project are documented here.
|
|
|
4
4
|
This file is generated from [Conventional Commits](https://www.conventionalcommits.org)
|
|
5
5
|
by [git-cliff](https://git-cliff.org); do not edit it by hand.
|
|
6
6
|
|
|
7
|
+
## [2.0.0](https://github.com/ChristopherVR/pptx-viewer/releases/tag/pptx-viewer-mcp@2.0.0) - 2026-07-23
|
|
8
|
+
|
|
9
|
+
### Documentation
|
|
10
|
+
|
|
11
|
+
- Friendly 2.0.0 changelog for root and packages (by @ChristopherVR) ([f56564d](https://github.com/ChristopherVR/pptx-viewer/commit/f56564de0dea3f3aa6f0bdf5ad5ed1bf6e9d4823))
|
|
12
|
+
|
|
13
|
+
## 2.0.0
|
|
14
|
+
|
|
15
|
+
V2 tidies the MCP server's public API. (The exact version and date are set
|
|
16
|
+
when the release is tagged.)
|
|
17
|
+
|
|
18
|
+
### Breaking changes and migration
|
|
19
|
+
|
|
20
|
+
- The deprecated `runMutatingTool` re-export is removed. Call `runMcpTool`
|
|
21
|
+
instead; it is a pure rename with no behavioural difference.
|
|
22
|
+
|
|
23
|
+
## [1.3.2](https://github.com/ChristopherVR/pptx-viewer/releases/tag/pptx-viewer-mcp@1.3.2) - 2026-07-18
|
|
24
|
+
|
|
25
|
+
### Documentation
|
|
26
|
+
|
|
27
|
+
- Correct and expand the per-package npm readmes (by @ChristopherVR) ([46f7c57](https://github.com/ChristopherVR/pptx-viewer/commit/46f7c573701a19e91c507d41ebdc956c64699c38))
|
|
28
|
+
|
|
7
29
|
## [1.3.1](https://github.com/ChristopherVR/pptx-viewer/releases/tag/pptx-viewer-mcp@1.3.1) - 2026-07-17
|
|
8
30
|
|
|
9
31
|
### Dependencies
|
package/dist/index.d.ts
CHANGED
|
@@ -476,10 +476,25 @@ interface ConvertToMarkdownParams {
|
|
|
476
476
|
semanticMode?: boolean;
|
|
477
477
|
sourceName?: string;
|
|
478
478
|
/**
|
|
479
|
-
* Root directory under which `outputDir` must resolve.
|
|
479
|
+
* Root directory under which `outputDir` must resolve. Only meaningful when
|
|
480
|
+
* {@link ConvertToMarkdownParams.scopeOutputDir} is supplied. Defaults to
|
|
480
481
|
* `process.env.PPTX_TOOLS_ROOT` if set, else `process.cwd()`.
|
|
481
482
|
*/
|
|
482
483
|
rootDir?: string;
|
|
484
|
+
/**
|
|
485
|
+
* Optional host-supplied guard that resolves `outputDir` under `rootDir` and
|
|
486
|
+
* rejects traversal escapes.
|
|
487
|
+
*
|
|
488
|
+
* Confining an output directory is a filesystem concern that only exists on
|
|
489
|
+
* the server, and it needs `node:path` to do correctly. This module is also
|
|
490
|
+
* reached from the browser (the in-viewer AI assistant calls this tool for
|
|
491
|
+
* the markdown string, with no filesystem, so `outputDir` is just a prefix
|
|
492
|
+
* for image links), and a `node:path` import here (even a lazy one behind a
|
|
493
|
+
* runtime check) puts a Node builtin into every bundler's module graph and
|
|
494
|
+
* makes browser builds warn. So the MCP server injects
|
|
495
|
+
* {@link resolveScopedDir} instead and browsers simply omit it.
|
|
496
|
+
*/
|
|
497
|
+
scopeOutputDir?: (outputDir: string, rootDir?: string) => string;
|
|
483
498
|
}
|
|
484
499
|
interface ConvertToMarkdownResult {
|
|
485
500
|
markdown: string;
|
package/dist/index.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","names":[],"sources":["../src/types.ts","../src/execution.ts","../src/tools/slide-tools.ts","../src/tools/helpers.ts","../src/tools/element-tools.ts","../src/tools/table-tools.ts","../src/tools/style-tools.ts","../src/tools/content-tools.ts","../src/tools/conversion-tools.ts","../src/tools/theme-tools.ts","../src/tools/chart-tools.ts","../src/tools/smartart-tools.ts","../src/tools/merge-tools.ts","../src/tools/template-tools.ts","../src/tools/metadata-tools.ts","../src/tools/section-tools.ts","../src/tools/export-tools.ts","../src/tools/hyperlink-tools.ts","../src/tools/geometry-tools.ts","../src/tools/lock-tools.ts","../src/tools/validation-tools.ts","../src/tools/presentation-tools.ts","../src/tools/layout-tools.ts"],"mappings":";;;;;;;UAOiB;;EAEhB,UAAU;;EAEV,gBAAgB,iBAAiB,QAAQ;;EAEzC,gBAAgB,iBAAiB,QAAQ;;;;;;UAOzB,WAAW;;EAE3B,UAAU;;EAEV,QAAQ;;EAER;;;;;;UAWgB;;EAEhB,QAAQ;IAAqB,MAAM;;;EAEnC,SAAS;IACR,QAAQ,MAAM,KAAM,OAAO,YAAY,kBAAkB;IACzD,UAAU,MAAM,MAAO,QAAQ;;;EAGhC,YAAY;;;;;;;UAQI;EAChB,SAAS,eAAe,QAAQ;EAChC,UAAU,cAAc,MAAM,aAAa;;;;;;UAO3B;EAChB,eACC,kBACA,OAAO,YACP;IAAW;IAAoB;;EAEhC,SAAS,mBAAmB;;;;;UAMZ;;EAEhB,YAAY;;EAEZ,gBAAgB;;EAEhB,SAAS;;EAET;;;;;;;;;iBCvEqB,iBACrB,kBACA,SAAS,mBACP;EAAU,UAAU;EAAU,UAAU;;;;;iBA0BrB,iBACrB,kBACA,UAAU,YACV,UAAU,YACV,SAAS,mBACP;EAAU;EAAsB;;;;;;iBAgDb,uBAAuB,GAC5C,kBACA,SAAS,kBACT,SAAS,KAAK,gBAAgB,WAAW,KAAK,QAAQ,WAAW,MAC/D,QAAQ;EAAM;EAAuB;;;;UCxFvB;EAChB;EACA;EACA;EACA;EACA;EACA;EACA;EACA,UAAU;;iBAGK,SACf,KAAK,aACL;EAAU;IACR,WAAW;UAuBG;EAChB;EACA;;UAGgB;EAChB;EACA;;iBAGe,SAAS,KAAK,aAAa,QAAQ,iBAAiB,WAAW;UA2B9D;EAChB;;UAGgB;EAChB;EACA;;iBAGe,aACf,KAAK,aACL,QAAQ,qBACN,WAAW;UA4BG;EAChB;;iBAGe,cACf,KAAK,aACL,QAAQ,sBACN;EAAa;;UA2BC;EAChB;EACA;;iBAGe,eACf,KAAK,aACL,QAAQ,uBACN;EAAa;EAAuB;;UA4BtB;EAChB;EACA;EACA;EACA;EACA;EACA;;iBAGe,sBACf,KAAK,aACL,QAAQ,8BACN;EAAa;;UA8BC;EAChB;EACA;EACA;EACA;EACA;EACA;;iBAGe,mBACf,KAAK,aACL,QAAQ,2BACN;EAAa;EAAoB;;UAmCnB;EAChB;EACA;;iBAGe,cACf,KAAK,aACL,QAAQ,sBACN;EAAa;EAAqB;;;;iBChSrB;iBAIA;;iBAKA,gBAAgB,IAAI,gBAAc;;iBAwGlC,iBAAiB,OAAO;;iBA0BxB,mBAAmB,oBAAoB;;;UC9HtC;EAChB;EACA;EACA;EACA;EACA;EACA;EAEA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EAEA;EACA;EACA;EACA;EAEA;EACA;EAEA;EACA;EACA;EACA;EAEA;EACA;EACA;EACA;;UAGgB;EAChB;EACA;;iBAGe,WACf,KAAK,aACL,QAAQ,mBACN,WAAW;UAmKG;EAChB;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;;iBAGe,cACf,KAAK,aACL,QAAQ,sBACN;EAAa;;UA8GC;EAChB;EACA;;iBAGe,eACf,KAAK,aACL,QAAQ,uBACN;EAAa;;UA0BC;EAChB;EACA;EAEA;EACA;EAEA;EACA;;iBAGe,gBACf,KAAK,aACL,QAAQ,wBACN;EAAa;;UA6GC;EAChB;EACA;EACA;EACA;EACA;;UAGgB;EAChB;;iBAGe,aACf,KAAK,aACL,QAAQ,qBACN,WAAW;UAuCG;EAChB;EACA;EACA;EACA;EACA;EACA;EACA;;iBAGe,oBACf,KAAK,aACL,QAAQ,4BACN;EAAa;;UAsDC;EAChB;EACA;;UAGgB;EAChB;;iBAGe,cACf,KAAK,aACL,QAAQ,sBACN,WAAW;UAyDG;EAChB;EACA;;UAGgB;EAChB;;iBAGe,gBACf,KAAK,aACL,QAAQ,wBACN,WAAW;UAqCG;EAChB;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;;iBAGe,oBACf,KAAK,aACL,QAAQ,4BACN;EAAa;;;;UC7vBC;EAChB;EACA;EACA,OAAO;IAAQ;IAAa;IAAa;;;iBAG1B,iBACf,KAAK,aACL,QAAQ,yBACN;EAAa;;UA6CC;EAChB;EACA;EACA;EACA;EACA;EACA;;iBAGe,qBACf,KAAK,aACL,QAAQ,6BACN;EAAa;EAAkB;;;;UCjEjB;EAChB;EACA;EAEA;EACA,WAAW;EACX,oBAAoB;IAAQ;IAAe;IAAkB;;EAC7D;EACA;EACA;EAEA;EACA;EACA,aAAa;EACb;EAEA;EACA;EACA;EACA;EACA;EAEA;EACA;EACA;EACA;EAEA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;;iBAGe,mBACf,KAAK,aACL,QAAQ,2BACN;EAAa;;UA6HC;EAChB;EACA;EACA;EACA;;UAGgB;EAChB;EACA;EACA;EACA;EACA;EACA,QAAQ;;iBAGO,sBAAsB,KAAK,cAAc,WAAW;;;UCnJnD;EAChB;EACA;EACA;EACA;;UAGgB;EAChB;EACA;EACA;EACA;EACA;;UAGgB;EAChB;EACA;EACA,SAAS;;iBAGM,SAAS,KAAK,aAAa,QAAQ,iBAAiB,WAAW;UA2G9D;EAChB;EACA;EACA;EACA;EACA;;UAGgB;EAChB;EACA;EACA;;iBAGe,YACf,KAAK,aACL,QAAQ,oBACN,WAAW;UAiGG;EAChB;EACA;EACA;EACA;EACA;EACA;EACA;;UAGgB;EAChB;EACA;EACA;EACA;EACA;EACA;;UAGgB;EAChB;EACA,WAAW;EACX;EACA;;iBAGe,eACf,KAAK,aACL,QAAQ,uBACN,WAAW;;;
|
|
1
|
+
{"version":3,"file":"index.d.ts","names":[],"sources":["../src/types.ts","../src/execution.ts","../src/tools/slide-tools.ts","../src/tools/helpers.ts","../src/tools/element-tools.ts","../src/tools/table-tools.ts","../src/tools/style-tools.ts","../src/tools/content-tools.ts","../src/tools/conversion-tools.ts","../src/tools/theme-tools.ts","../src/tools/chart-tools.ts","../src/tools/smartart-tools.ts","../src/tools/merge-tools.ts","../src/tools/template-tools.ts","../src/tools/metadata-tools.ts","../src/tools/section-tools.ts","../src/tools/export-tools.ts","../src/tools/hyperlink-tools.ts","../src/tools/geometry-tools.ts","../src/tools/lock-tools.ts","../src/tools/validation-tools.ts","../src/tools/presentation-tools.ts","../src/tools/layout-tools.ts"],"mappings":";;;;;;;UAOiB;;EAEhB,UAAU;;EAEV,gBAAgB,iBAAiB,QAAQ;;EAEzC,gBAAgB,iBAAiB,QAAQ;;;;;;UAOzB,WAAW;;EAE3B,UAAU;;EAEV,QAAQ;;EAER;;;;;;UAWgB;;EAEhB,QAAQ;IAAqB,MAAM;;;EAEnC,SAAS;IACR,QAAQ,MAAM,KAAM,OAAO,YAAY,kBAAkB;IACzD,UAAU,MAAM,MAAO,QAAQ;;;EAGhC,YAAY;;;;;;;UAQI;EAChB,SAAS,eAAe,QAAQ;EAChC,UAAU,cAAc,MAAM,aAAa;;;;;;UAO3B;EAChB,eACC,kBACA,OAAO,YACP;IAAW;IAAoB;;EAEhC,SAAS,mBAAmB;;;;;UAMZ;;EAEhB,YAAY;;EAEZ,gBAAgB;;EAEhB,SAAS;;EAET;;;;;;;;;iBCvEqB,iBACrB,kBACA,SAAS,mBACP;EAAU,UAAU;EAAU,UAAU;;;;;iBA0BrB,iBACrB,kBACA,UAAU,YACV,UAAU,YACV,SAAS,mBACP;EAAU;EAAsB;;;;;;iBAgDb,uBAAuB,GAC5C,kBACA,SAAS,kBACT,SAAS,KAAK,gBAAgB,WAAW,KAAK,QAAQ,WAAW,MAC/D,QAAQ;EAAM;EAAuB;;;;UCxFvB;EAChB;EACA;EACA;EACA;EACA;EACA;EACA;EACA,UAAU;;iBAGK,SACf,KAAK,aACL;EAAU;IACR,WAAW;UAuBG;EAChB;EACA;;UAGgB;EAChB;EACA;;iBAGe,SAAS,KAAK,aAAa,QAAQ,iBAAiB,WAAW;UA2B9D;EAChB;;UAGgB;EAChB;EACA;;iBAGe,aACf,KAAK,aACL,QAAQ,qBACN,WAAW;UA4BG;EAChB;;iBAGe,cACf,KAAK,aACL,QAAQ,sBACN;EAAa;;UA2BC;EAChB;EACA;;iBAGe,eACf,KAAK,aACL,QAAQ,uBACN;EAAa;EAAuB;;UA4BtB;EAChB;EACA;EACA;EACA;EACA;EACA;;iBAGe,sBACf,KAAK,aACL,QAAQ,8BACN;EAAa;;UA8BC;EAChB;EACA;EACA;EACA;EACA;EACA;;iBAGe,mBACf,KAAK,aACL,QAAQ,2BACN;EAAa;EAAoB;;UAmCnB;EAChB;EACA;;iBAGe,cACf,KAAK,aACL,QAAQ,sBACN;EAAa;EAAqB;;;;iBChSrB;iBAIA;;iBAKA,gBAAgB,IAAI,gBAAc;;iBAwGlC,iBAAiB,OAAO;;iBA0BxB,mBAAmB,oBAAoB;;;UC9HtC;EAChB;EACA;EACA;EACA;EACA;EACA;EAEA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EAEA;EACA;EACA;EACA;EAEA;EACA;EAEA;EACA;EACA;EACA;EAEA;EACA;EACA;EACA;;UAGgB;EAChB;EACA;;iBAGe,WACf,KAAK,aACL,QAAQ,mBACN,WAAW;UAmKG;EAChB;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;;iBAGe,cACf,KAAK,aACL,QAAQ,sBACN;EAAa;;UA8GC;EAChB;EACA;;iBAGe,eACf,KAAK,aACL,QAAQ,uBACN;EAAa;;UA0BC;EAChB;EACA;EAEA;EACA;EAEA;EACA;;iBAGe,gBACf,KAAK,aACL,QAAQ,wBACN;EAAa;;UA6GC;EAChB;EACA;EACA;EACA;EACA;;UAGgB;EAChB;;iBAGe,aACf,KAAK,aACL,QAAQ,qBACN,WAAW;UAuCG;EAChB;EACA;EACA;EACA;EACA;EACA;EACA;;iBAGe,oBACf,KAAK,aACL,QAAQ,4BACN;EAAa;;UAsDC;EAChB;EACA;;UAGgB;EAChB;;iBAGe,cACf,KAAK,aACL,QAAQ,sBACN,WAAW;UAyDG;EAChB;EACA;;UAGgB;EAChB;;iBAGe,gBACf,KAAK,aACL,QAAQ,wBACN,WAAW;UAqCG;EAChB;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;;iBAGe,oBACf,KAAK,aACL,QAAQ,4BACN;EAAa;;;;UC7vBC;EAChB;EACA;EACA,OAAO;IAAQ;IAAa;IAAa;;;iBAG1B,iBACf,KAAK,aACL,QAAQ,yBACN;EAAa;;UA6CC;EAChB;EACA;EACA;EACA;EACA;EACA;;iBAGe,qBACf,KAAK,aACL,QAAQ,6BACN;EAAa;EAAkB;;;;UCjEjB;EAChB;EACA;EAEA;EACA,WAAW;EACX,oBAAoB;IAAQ;IAAe;IAAkB;;EAC7D;EACA;EACA;EAEA;EACA;EACA,aAAa;EACb;EAEA;EACA;EACA;EACA;EACA;EAEA;EACA;EACA;EACA;EAEA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;;iBAGe,mBACf,KAAK,aACL,QAAQ,2BACN;EAAa;;UA6HC;EAChB;EACA;EACA;EACA;;UAGgB;EAChB;EACA;EACA;EACA;EACA;EACA,QAAQ;;iBAGO,sBAAsB,KAAK,cAAc,WAAW;;;UCnJnD;EAChB;EACA;EACA;EACA;;UAGgB;EAChB;EACA;EACA;EACA;EACA;;UAGgB;EAChB;EACA;EACA,SAAS;;iBAGM,SAAS,KAAK,aAAa,QAAQ,iBAAiB,WAAW;UA2G9D;EAChB;EACA;EACA;EACA;EACA;;UAGgB;EAChB;EACA;EACA;;iBAGe,YACf,KAAK,aACL,QAAQ,oBACN,WAAW;UAiGG;EAChB;EACA;EACA;EACA;EACA;EACA;EACA;;UAGgB;EAChB;EACA;EACA;EACA;EACA;EACA;;UAGgB;EAChB;EACA,WAAW;EACX;EACA;;iBAGe,eACf,KAAK,aACL,QAAQ,uBACN,WAAW;;;UCpTG;EAChB;EACA;EACA;EACA;IAAe;IAAgB;;EAC/B;EACA;EACA;;;;;;EAMA;;;;;;;;;;;;;;EAcA,kBAAkB,mBAAmB;;UAGrB;EAChB;EACA;EACA;EACA;;iBAGqB,kBACrB,KAAK,aACL,QAAQ,0BACN,QAAQ,WAAW;;;UCjCL;EAChB;EACA,cAAc;EACd,aAAa;EACb;;iBAGe,aAAa,KAAK,cAAc,WAAW;UAgB1C;EAChB;;UAGgB;EAChB;EACA,aAAa;;iBAGE,iBACf,KAAK,aACL,QAAQ,yBACN,WAAW;UA8BG;EAChB;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;;iBAGe,kBACf,KAAK,aACL,QAAQ,0BACN;EAAa,aAAa;;UAsCZ;EAChB;EACA;;iBAGe,iBACf,KAAK,aACL,QAAQ,yBACN;EAAa,YAAY;;;;UCpHX;EAChB;EACA;EACA;EACA;EACA;EACA;IA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"}
|
package/dist/index.js
CHANGED
|
@@ -1,7 +1,6 @@
|
|
|
1
1
|
'use strict';
|
|
2
2
|
|
|
3
3
|
var pptxViewerCore = require('pptx-viewer-core');
|
|
4
|
-
var path = require('path');
|
|
5
4
|
|
|
6
5
|
// src/execution.ts
|
|
7
6
|
var PPTX_MIME_TYPE = "application/vnd.openxmlformats-officedocument.presentationml.presentation";
|
|
@@ -1557,17 +1556,6 @@ function manageComments(ctx, params) {
|
|
|
1557
1556
|
}
|
|
1558
1557
|
}
|
|
1559
1558
|
}
|
|
1560
|
-
function scopeOutputDir(outputDir, rootDir) {
|
|
1561
|
-
const root = path.resolve(rootDir ?? process.env["PPTX_TOOLS_ROOT"] ?? process.cwd());
|
|
1562
|
-
const resolved = path.isAbsolute(outputDir) ? path.resolve(outputDir) : path.resolve(root, outputDir);
|
|
1563
|
-
const rootWithSep = root.endsWith(path.sep) ? root : root + path.sep;
|
|
1564
|
-
if (resolved !== root && !resolved.startsWith(rootWithSep)) {
|
|
1565
|
-
throw new Error(
|
|
1566
|
-
`convertToMarkdown: outputDir "${outputDir}" resolves outside the allowed root "${root}"`
|
|
1567
|
-
);
|
|
1568
|
-
}
|
|
1569
|
-
return resolved;
|
|
1570
|
-
}
|
|
1571
1559
|
async function convertToMarkdown(ctx, params) {
|
|
1572
1560
|
const options = {
|
|
1573
1561
|
mediaFolderName: params.mediaFolderName ?? "media",
|
|
@@ -1577,7 +1565,8 @@ async function convertToMarkdown(ctx, params) {
|
|
|
1577
1565
|
semanticMode: params.semanticMode === true,
|
|
1578
1566
|
sourceName: params.sourceName ?? "unknown"
|
|
1579
1567
|
};
|
|
1580
|
-
const
|
|
1568
|
+
const outputDir = params.outputDir ?? ".";
|
|
1569
|
+
const safeOutputDir = params.scopeOutputDir ? params.scopeOutputDir(outputDir, params.rootDir) : outputDir;
|
|
1581
1570
|
const converter = new pptxViewerCore.PptxMarkdownConverter(safeOutputDir, options);
|
|
1582
1571
|
const markdown = await converter.convert(ctx.pptxData);
|
|
1583
1572
|
return {
|
package/dist/index.mjs
CHANGED
|
@@ -1,6 +1,5 @@
|
|
|
1
1
|
import { PptxHandler, hasTextProperties, PptxMarkdownConverter, ThemePresets, getThemePreset, setChartType, setChartTitle, setChartGrouping, setChartLegend, setChartDataLabels, setChartAxis, setChartCategories, addChartSeries, removeChartSeries, updateChartSeriesValues, ChartBuilder, decomposeSmartArt, demoteSmartArtNode, promoteSmartArtNode, reorderSmartArtNode, updateSmartArtNodeText, removeSmartArtNode, addSmartArtNode, mergePresentation, diffPresentations, findPlaceholders, applyTemplate, getSectionForSlide, moveSlidesToSection, reorderSections, removeSection, addSection, SvgExporter, replaceWithCustomGeometry, replaceShapeGeometry, setElementLocked, validatePptx, repairPptx, findLayoutByName, findLayoutByType } from 'pptx-viewer-core';
|
|
2
2
|
export { PptxHandler } from 'pptx-viewer-core';
|
|
3
|
-
import { resolve, isAbsolute, sep } from 'path';
|
|
4
3
|
|
|
5
4
|
// src/execution.ts
|
|
6
5
|
var PPTX_MIME_TYPE = "application/vnd.openxmlformats-officedocument.presentationml.presentation";
|
|
@@ -1556,17 +1555,6 @@ function manageComments(ctx, params) {
|
|
|
1556
1555
|
}
|
|
1557
1556
|
}
|
|
1558
1557
|
}
|
|
1559
|
-
function scopeOutputDir(outputDir, rootDir) {
|
|
1560
|
-
const root = resolve(rootDir ?? process.env["PPTX_TOOLS_ROOT"] ?? process.cwd());
|
|
1561
|
-
const resolved = isAbsolute(outputDir) ? resolve(outputDir) : resolve(root, outputDir);
|
|
1562
|
-
const rootWithSep = root.endsWith(sep) ? root : root + sep;
|
|
1563
|
-
if (resolved !== root && !resolved.startsWith(rootWithSep)) {
|
|
1564
|
-
throw new Error(
|
|
1565
|
-
`convertToMarkdown: outputDir "${outputDir}" resolves outside the allowed root "${root}"`
|
|
1566
|
-
);
|
|
1567
|
-
}
|
|
1568
|
-
return resolved;
|
|
1569
|
-
}
|
|
1570
1558
|
async function convertToMarkdown(ctx, params) {
|
|
1571
1559
|
const options = {
|
|
1572
1560
|
mediaFolderName: params.mediaFolderName ?? "media",
|
|
@@ -1576,7 +1564,8 @@ async function convertToMarkdown(ctx, params) {
|
|
|
1576
1564
|
semanticMode: params.semanticMode === true,
|
|
1577
1565
|
sourceName: params.sourceName ?? "unknown"
|
|
1578
1566
|
};
|
|
1579
|
-
const
|
|
1567
|
+
const outputDir = params.outputDir ?? ".";
|
|
1568
|
+
const safeOutputDir = params.scopeOutputDir ? params.scopeOutputDir(outputDir, params.rootDir) : outputDir;
|
|
1580
1569
|
const converter = new PptxMarkdownConverter(safeOutputDir, options);
|
|
1581
1570
|
const markdown = await converter.convert(ctx.pptxData);
|
|
1582
1571
|
return {
|
package/dist/mcp/index.js
CHANGED
|
@@ -5,8 +5,8 @@ var stdio_js = require('@modelcontextprotocol/sdk/server/stdio.js');
|
|
|
5
5
|
var mcp_js = require('@modelcontextprotocol/sdk/server/mcp.js');
|
|
6
6
|
var zod = require('zod');
|
|
7
7
|
var pptxViewerCore = require('pptx-viewer-core');
|
|
8
|
-
var path = require('path');
|
|
9
8
|
var promises = require('fs/promises');
|
|
9
|
+
var path = require('path');
|
|
10
10
|
|
|
11
11
|
var GetSlideSchema = zod.z.object({
|
|
12
12
|
filePath: zod.z.string().describe("Path to the PPTX file"),
|
|
@@ -1044,17 +1044,6 @@ function manageComments(ctx, params) {
|
|
|
1044
1044
|
}
|
|
1045
1045
|
}
|
|
1046
1046
|
}
|
|
1047
|
-
function scopeOutputDir(outputDir, rootDir) {
|
|
1048
|
-
const root = path.resolve(rootDir ?? process.env["PPTX_TOOLS_ROOT"] ?? process.cwd());
|
|
1049
|
-
const resolved = path.isAbsolute(outputDir) ? path.resolve(outputDir) : path.resolve(root, outputDir);
|
|
1050
|
-
const rootWithSep = root.endsWith(path.sep) ? root : root + path.sep;
|
|
1051
|
-
if (resolved !== root && !resolved.startsWith(rootWithSep)) {
|
|
1052
|
-
throw new Error(
|
|
1053
|
-
`convertToMarkdown: outputDir "${outputDir}" resolves outside the allowed root "${root}"`
|
|
1054
|
-
);
|
|
1055
|
-
}
|
|
1056
|
-
return resolved;
|
|
1057
|
-
}
|
|
1058
1047
|
async function convertToMarkdown(ctx, params) {
|
|
1059
1048
|
const options = {
|
|
1060
1049
|
mediaFolderName: params.mediaFolderName ?? "media",
|
|
@@ -1064,7 +1053,8 @@ async function convertToMarkdown(ctx, params) {
|
|
|
1064
1053
|
semanticMode: params.semanticMode === true,
|
|
1065
1054
|
sourceName: params.sourceName ?? "unknown"
|
|
1066
1055
|
};
|
|
1067
|
-
const
|
|
1056
|
+
const outputDir = params.outputDir ?? ".";
|
|
1057
|
+
const safeOutputDir = params.scopeOutputDir ? params.scopeOutputDir(outputDir, params.rootDir) : outputDir;
|
|
1068
1058
|
const converter = new pptxViewerCore.PptxMarkdownConverter(safeOutputDir, options);
|
|
1069
1059
|
const markdown = await converter.convert(ctx.pptxData);
|
|
1070
1060
|
return {
|
|
@@ -2979,16 +2969,23 @@ async function executeToolWithContext(filePath, execCtx, toolFn) {
|
|
|
2979
2969
|
|
|
2980
2970
|
// src/mcp/handlers.ts
|
|
2981
2971
|
var ALLOWED_EXTENSIONS = /* @__PURE__ */ new Set([".pptx", ".ppt"]);
|
|
2982
|
-
function
|
|
2983
|
-
if (typeof
|
|
2984
|
-
throw new Error("MCP tool:
|
|
2972
|
+
function resolveScopedDir(dir, rootDir) {
|
|
2973
|
+
if (typeof dir !== "string" || dir.length === 0) {
|
|
2974
|
+
throw new Error("MCP tool: path must be a non-empty string");
|
|
2985
2975
|
}
|
|
2986
|
-
const root = path.resolve(process.env["PPTX_TOOLS_ROOT"] ?? process.cwd());
|
|
2987
|
-
const resolved = path.isAbsolute(
|
|
2976
|
+
const root = path.resolve(rootDir ?? process.env["PPTX_TOOLS_ROOT"] ?? process.cwd());
|
|
2977
|
+
const resolved = path.isAbsolute(dir) ? path.resolve(dir) : path.resolve(root, dir);
|
|
2988
2978
|
const rootWithSep = root.endsWith(path.sep) ? root : root + path.sep;
|
|
2989
2979
|
if (resolved !== root && !resolved.startsWith(rootWithSep)) {
|
|
2990
|
-
throw new Error(`MCP tool:
|
|
2980
|
+
throw new Error(`MCP tool: path "${dir}" resolves outside the allowed root "${root}"`);
|
|
2991
2981
|
}
|
|
2982
|
+
return resolved;
|
|
2983
|
+
}
|
|
2984
|
+
function resolveScopedFilePath(filePath, rootDir) {
|
|
2985
|
+
if (typeof filePath !== "string" || filePath.length === 0) {
|
|
2986
|
+
throw new Error("MCP tool: filePath must be a non-empty string");
|
|
2987
|
+
}
|
|
2988
|
+
const resolved = resolveScopedDir(filePath, rootDir);
|
|
2992
2989
|
const lower = resolved.toLowerCase();
|
|
2993
2990
|
let isAllowed = false;
|
|
2994
2991
|
for (const ext of ALLOWED_EXTENSIONS) {
|
|
@@ -3014,7 +3011,7 @@ function createMcpContext(_options) {
|
|
|
3014
3011
|
return { filesystem: nodeFs };
|
|
3015
3012
|
}
|
|
3016
3013
|
async function runMcpTool(filePath, fn, options) {
|
|
3017
|
-
const safePath = resolveScopedFilePath(filePath);
|
|
3014
|
+
const safePath = resolveScopedFilePath(filePath, options?.rootDir);
|
|
3018
3015
|
const ctx = createMcpContext();
|
|
3019
3016
|
return executeToolWithContext(safePath, ctx, fn);
|
|
3020
3017
|
}
|
|
@@ -3053,10 +3050,7 @@ function createServer() {
|
|
|
3053
3050
|
inputSchema: AddSlideSchema.shape
|
|
3054
3051
|
},
|
|
3055
3052
|
async (params) => {
|
|
3056
|
-
const result = await runMcpTool(
|
|
3057
|
-
params.filePath,
|
|
3058
|
-
(ctx) => addSlide(ctx, params)
|
|
3059
|
-
);
|
|
3053
|
+
const result = await runMcpTool(params.filePath, (ctx) => addSlide(ctx, params));
|
|
3060
3054
|
return {
|
|
3061
3055
|
content: [
|
|
3062
3056
|
{
|
|
@@ -3475,10 +3469,7 @@ function createServer() {
|
|
|
3475
3469
|
inputSchema: FindTextSchema.shape
|
|
3476
3470
|
},
|
|
3477
3471
|
async (params) => {
|
|
3478
|
-
const result = await runMcpTool(
|
|
3479
|
-
params.filePath,
|
|
3480
|
-
(ctx) => findText(ctx, params)
|
|
3481
|
-
);
|
|
3472
|
+
const result = await runMcpTool(params.filePath, (ctx) => findText(ctx, params));
|
|
3482
3473
|
return {
|
|
3483
3474
|
content: [
|
|
3484
3475
|
{
|
|
@@ -3540,7 +3531,7 @@ function createServer() {
|
|
|
3540
3531
|
async (params) => {
|
|
3541
3532
|
const result = await runMcpTool(
|
|
3542
3533
|
params.filePath,
|
|
3543
|
-
(ctx) => convertToMarkdown(ctx, params)
|
|
3534
|
+
(ctx) => convertToMarkdown(ctx, { ...params, scopeOutputDir: resolveScopedDir })
|
|
3544
3535
|
);
|
|
3545
3536
|
return {
|
|
3546
3537
|
content: [
|
|
@@ -3724,10 +3715,7 @@ function createServer() {
|
|
|
3724
3715
|
inputSchema: GetMetadataSchema.shape
|
|
3725
3716
|
},
|
|
3726
3717
|
async (params) => {
|
|
3727
|
-
const result = await runMcpTool(
|
|
3728
|
-
params.filePath,
|
|
3729
|
-
(ctx) => getMetadata(ctx)
|
|
3730
|
-
);
|
|
3718
|
+
const result = await runMcpTool(params.filePath, (ctx) => getMetadata(ctx));
|
|
3731
3719
|
return { content: [{ type: "text", text: JSON.stringify(result, null, 2) }] };
|
|
3732
3720
|
}
|
|
3733
3721
|
);
|
package/dist/mcp/index.mjs
CHANGED
|
@@ -3,8 +3,8 @@ import { StdioServerTransport } from '@modelcontextprotocol/sdk/server/stdio.js'
|
|
|
3
3
|
import { McpServer } from '@modelcontextprotocol/sdk/server/mcp.js';
|
|
4
4
|
import { z } from 'zod';
|
|
5
5
|
import { validatePptx, repairPptx, PptxHandler, hasTextProperties, PptxMarkdownConverter, ThemePresets, getThemePreset, setChartType, setChartTitle, setChartGrouping, setChartLegend, setChartDataLabels, setChartAxis, setChartCategories, addChartSeries, removeChartSeries, updateChartSeriesValues, ChartBuilder, decomposeSmartArt, demoteSmartArtNode, promoteSmartArtNode, reorderSmartArtNode, updateSmartArtNodeText, removeSmartArtNode, addSmartArtNode, findPlaceholders, applyTemplate, getSectionForSlide, moveSlidesToSection, reorderSections, removeSection, addSection, SvgExporter, replaceWithCustomGeometry, replaceShapeGeometry, setElementLocked, findLayoutByName, findLayoutByType } from 'pptx-viewer-core';
|
|
6
|
-
import { resolve, isAbsolute, sep } from 'path';
|
|
7
6
|
import { writeFile, readFile } from 'fs/promises';
|
|
7
|
+
import { resolve, isAbsolute, sep } from 'path';
|
|
8
8
|
|
|
9
9
|
var GetSlideSchema = z.object({
|
|
10
10
|
filePath: z.string().describe("Path to the PPTX file"),
|
|
@@ -1042,17 +1042,6 @@ function manageComments(ctx, params) {
|
|
|
1042
1042
|
}
|
|
1043
1043
|
}
|
|
1044
1044
|
}
|
|
1045
|
-
function scopeOutputDir(outputDir, rootDir) {
|
|
1046
|
-
const root = resolve(rootDir ?? process.env["PPTX_TOOLS_ROOT"] ?? process.cwd());
|
|
1047
|
-
const resolved = isAbsolute(outputDir) ? resolve(outputDir) : resolve(root, outputDir);
|
|
1048
|
-
const rootWithSep = root.endsWith(sep) ? root : root + sep;
|
|
1049
|
-
if (resolved !== root && !resolved.startsWith(rootWithSep)) {
|
|
1050
|
-
throw new Error(
|
|
1051
|
-
`convertToMarkdown: outputDir "${outputDir}" resolves outside the allowed root "${root}"`
|
|
1052
|
-
);
|
|
1053
|
-
}
|
|
1054
|
-
return resolved;
|
|
1055
|
-
}
|
|
1056
1045
|
async function convertToMarkdown(ctx, params) {
|
|
1057
1046
|
const options = {
|
|
1058
1047
|
mediaFolderName: params.mediaFolderName ?? "media",
|
|
@@ -1062,7 +1051,8 @@ async function convertToMarkdown(ctx, params) {
|
|
|
1062
1051
|
semanticMode: params.semanticMode === true,
|
|
1063
1052
|
sourceName: params.sourceName ?? "unknown"
|
|
1064
1053
|
};
|
|
1065
|
-
const
|
|
1054
|
+
const outputDir = params.outputDir ?? ".";
|
|
1055
|
+
const safeOutputDir = params.scopeOutputDir ? params.scopeOutputDir(outputDir, params.rootDir) : outputDir;
|
|
1066
1056
|
const converter = new PptxMarkdownConverter(safeOutputDir, options);
|
|
1067
1057
|
const markdown = await converter.convert(ctx.pptxData);
|
|
1068
1058
|
return {
|
|
@@ -2977,16 +2967,23 @@ async function executeToolWithContext(filePath, execCtx, toolFn) {
|
|
|
2977
2967
|
|
|
2978
2968
|
// src/mcp/handlers.ts
|
|
2979
2969
|
var ALLOWED_EXTENSIONS = /* @__PURE__ */ new Set([".pptx", ".ppt"]);
|
|
2980
|
-
function
|
|
2981
|
-
if (typeof
|
|
2982
|
-
throw new Error("MCP tool:
|
|
2970
|
+
function resolveScopedDir(dir, rootDir) {
|
|
2971
|
+
if (typeof dir !== "string" || dir.length === 0) {
|
|
2972
|
+
throw new Error("MCP tool: path must be a non-empty string");
|
|
2983
2973
|
}
|
|
2984
|
-
const root = resolve(process.env["PPTX_TOOLS_ROOT"] ?? process.cwd());
|
|
2985
|
-
const resolved = isAbsolute(
|
|
2974
|
+
const root = resolve(rootDir ?? process.env["PPTX_TOOLS_ROOT"] ?? process.cwd());
|
|
2975
|
+
const resolved = isAbsolute(dir) ? resolve(dir) : resolve(root, dir);
|
|
2986
2976
|
const rootWithSep = root.endsWith(sep) ? root : root + sep;
|
|
2987
2977
|
if (resolved !== root && !resolved.startsWith(rootWithSep)) {
|
|
2988
|
-
throw new Error(`MCP tool:
|
|
2978
|
+
throw new Error(`MCP tool: path "${dir}" resolves outside the allowed root "${root}"`);
|
|
2989
2979
|
}
|
|
2980
|
+
return resolved;
|
|
2981
|
+
}
|
|
2982
|
+
function resolveScopedFilePath(filePath, rootDir) {
|
|
2983
|
+
if (typeof filePath !== "string" || filePath.length === 0) {
|
|
2984
|
+
throw new Error("MCP tool: filePath must be a non-empty string");
|
|
2985
|
+
}
|
|
2986
|
+
const resolved = resolveScopedDir(filePath, rootDir);
|
|
2990
2987
|
const lower = resolved.toLowerCase();
|
|
2991
2988
|
let isAllowed = false;
|
|
2992
2989
|
for (const ext of ALLOWED_EXTENSIONS) {
|
|
@@ -3012,7 +3009,7 @@ function createMcpContext(_options) {
|
|
|
3012
3009
|
return { filesystem: nodeFs };
|
|
3013
3010
|
}
|
|
3014
3011
|
async function runMcpTool(filePath, fn, options) {
|
|
3015
|
-
const safePath = resolveScopedFilePath(filePath);
|
|
3012
|
+
const safePath = resolveScopedFilePath(filePath, options?.rootDir);
|
|
3016
3013
|
const ctx = createMcpContext();
|
|
3017
3014
|
return executeToolWithContext(safePath, ctx, fn);
|
|
3018
3015
|
}
|
|
@@ -3051,10 +3048,7 @@ function createServer() {
|
|
|
3051
3048
|
inputSchema: AddSlideSchema.shape
|
|
3052
3049
|
},
|
|
3053
3050
|
async (params) => {
|
|
3054
|
-
const result = await runMcpTool(
|
|
3055
|
-
params.filePath,
|
|
3056
|
-
(ctx) => addSlide(ctx, params)
|
|
3057
|
-
);
|
|
3051
|
+
const result = await runMcpTool(params.filePath, (ctx) => addSlide(ctx, params));
|
|
3058
3052
|
return {
|
|
3059
3053
|
content: [
|
|
3060
3054
|
{
|
|
@@ -3473,10 +3467,7 @@ function createServer() {
|
|
|
3473
3467
|
inputSchema: FindTextSchema.shape
|
|
3474
3468
|
},
|
|
3475
3469
|
async (params) => {
|
|
3476
|
-
const result = await runMcpTool(
|
|
3477
|
-
params.filePath,
|
|
3478
|
-
(ctx) => findText(ctx, params)
|
|
3479
|
-
);
|
|
3470
|
+
const result = await runMcpTool(params.filePath, (ctx) => findText(ctx, params));
|
|
3480
3471
|
return {
|
|
3481
3472
|
content: [
|
|
3482
3473
|
{
|
|
@@ -3538,7 +3529,7 @@ function createServer() {
|
|
|
3538
3529
|
async (params) => {
|
|
3539
3530
|
const result = await runMcpTool(
|
|
3540
3531
|
params.filePath,
|
|
3541
|
-
(ctx) => convertToMarkdown(ctx, params)
|
|
3532
|
+
(ctx) => convertToMarkdown(ctx, { ...params, scopeOutputDir: resolveScopedDir })
|
|
3542
3533
|
);
|
|
3543
3534
|
return {
|
|
3544
3535
|
content: [
|
|
@@ -3722,10 +3713,7 @@ function createServer() {
|
|
|
3722
3713
|
inputSchema: GetMetadataSchema.shape
|
|
3723
3714
|
},
|
|
3724
3715
|
async (params) => {
|
|
3725
|
-
const result = await runMcpTool(
|
|
3726
|
-
params.filePath,
|
|
3727
|
-
(ctx) => getMetadata(ctx)
|
|
3728
|
-
);
|
|
3716
|
+
const result = await runMcpTool(params.filePath, (ctx) => getMetadata(ctx));
|
|
3729
3717
|
return { content: [{ type: "text", text: JSON.stringify(result, null, 2) }] };
|
|
3730
3718
|
}
|
|
3731
3719
|
);
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "pptx-viewer-mcp",
|
|
3
|
-
"version": "
|
|
3
|
+
"version": "2.0.1",
|
|
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,11 +72,11 @@
|
|
|
72
72
|
"@modelcontextprotocol/sdk": "^1.29.0",
|
|
73
73
|
"fast-xml-parser": "^5.10.1",
|
|
74
74
|
"jszip": "^3.10.1",
|
|
75
|
-
"pptx-viewer-core": "^
|
|
75
|
+
"pptx-viewer-core": "^2.0.0",
|
|
76
76
|
"zod": "^4.4.3"
|
|
77
77
|
},
|
|
78
78
|
"devDependencies": {
|
|
79
|
-
"tsdown": "^0.22.
|
|
79
|
+
"tsdown": "^0.22.14",
|
|
80
80
|
"tsup": "^8.5.1",
|
|
81
81
|
"typescript": "^7.0.2",
|
|
82
82
|
"vitest": "^4.1.10",
|