pptx-viewer-mcp 2.0.0 → 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 +6 -0
- package/dist/index.d.ts +16 -1
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +2 -19
- package/dist/index.mjs +2 -19
- package/dist/mcp/index.js +17 -27
- package/dist/mcp/index.mjs +17 -27
- package/package.json +3 -3
package/CHANGELOG.md
CHANGED
|
@@ -4,6 +4,12 @@ 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
|
+
|
|
7
13
|
## 2.0.0
|
|
8
14
|
|
|
9
15
|
V2 tidies the MCP server's public API. (The exact version and date are set
|
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
|
@@ -1556,24 +1556,6 @@ function manageComments(ctx, params) {
|
|
|
1556
1556
|
}
|
|
1557
1557
|
}
|
|
1558
1558
|
}
|
|
1559
|
-
function isNodeRuntime() {
|
|
1560
|
-
return typeof process !== "undefined" && Boolean(process.versions?.node);
|
|
1561
|
-
}
|
|
1562
|
-
async function scopeOutputDir(outputDir, rootDir) {
|
|
1563
|
-
if (!isNodeRuntime()) {
|
|
1564
|
-
return outputDir;
|
|
1565
|
-
}
|
|
1566
|
-
const { isAbsolute, resolve, sep } = await import('path');
|
|
1567
|
-
const root = resolve(rootDir ?? process.env["PPTX_TOOLS_ROOT"] ?? process.cwd());
|
|
1568
|
-
const resolved = isAbsolute(outputDir) ? resolve(outputDir) : resolve(root, outputDir);
|
|
1569
|
-
const rootWithSep = root.endsWith(sep) ? root : root + sep;
|
|
1570
|
-
if (resolved !== root && !resolved.startsWith(rootWithSep)) {
|
|
1571
|
-
throw new Error(
|
|
1572
|
-
`convertToMarkdown: outputDir "${outputDir}" resolves outside the allowed root "${root}"`
|
|
1573
|
-
);
|
|
1574
|
-
}
|
|
1575
|
-
return resolved;
|
|
1576
|
-
}
|
|
1577
1559
|
async function convertToMarkdown(ctx, params) {
|
|
1578
1560
|
const options = {
|
|
1579
1561
|
mediaFolderName: params.mediaFolderName ?? "media",
|
|
@@ -1583,7 +1565,8 @@ async function convertToMarkdown(ctx, params) {
|
|
|
1583
1565
|
semanticMode: params.semanticMode === true,
|
|
1584
1566
|
sourceName: params.sourceName ?? "unknown"
|
|
1585
1567
|
};
|
|
1586
|
-
const
|
|
1568
|
+
const outputDir = params.outputDir ?? ".";
|
|
1569
|
+
const safeOutputDir = params.scopeOutputDir ? params.scopeOutputDir(outputDir, params.rootDir) : outputDir;
|
|
1587
1570
|
const converter = new pptxViewerCore.PptxMarkdownConverter(safeOutputDir, options);
|
|
1588
1571
|
const markdown = await converter.convert(ctx.pptxData);
|
|
1589
1572
|
return {
|
package/dist/index.mjs
CHANGED
|
@@ -1555,24 +1555,6 @@ function manageComments(ctx, params) {
|
|
|
1555
1555
|
}
|
|
1556
1556
|
}
|
|
1557
1557
|
}
|
|
1558
|
-
function isNodeRuntime() {
|
|
1559
|
-
return typeof process !== "undefined" && Boolean(process.versions?.node);
|
|
1560
|
-
}
|
|
1561
|
-
async function scopeOutputDir(outputDir, rootDir) {
|
|
1562
|
-
if (!isNodeRuntime()) {
|
|
1563
|
-
return outputDir;
|
|
1564
|
-
}
|
|
1565
|
-
const { isAbsolute, resolve, sep } = await import('path');
|
|
1566
|
-
const root = resolve(rootDir ?? process.env["PPTX_TOOLS_ROOT"] ?? process.cwd());
|
|
1567
|
-
const resolved = isAbsolute(outputDir) ? resolve(outputDir) : resolve(root, outputDir);
|
|
1568
|
-
const rootWithSep = root.endsWith(sep) ? root : root + sep;
|
|
1569
|
-
if (resolved !== root && !resolved.startsWith(rootWithSep)) {
|
|
1570
|
-
throw new Error(
|
|
1571
|
-
`convertToMarkdown: outputDir "${outputDir}" resolves outside the allowed root "${root}"`
|
|
1572
|
-
);
|
|
1573
|
-
}
|
|
1574
|
-
return resolved;
|
|
1575
|
-
}
|
|
1576
1558
|
async function convertToMarkdown(ctx, params) {
|
|
1577
1559
|
const options = {
|
|
1578
1560
|
mediaFolderName: params.mediaFolderName ?? "media",
|
|
@@ -1582,7 +1564,8 @@ async function convertToMarkdown(ctx, params) {
|
|
|
1582
1564
|
semanticMode: params.semanticMode === true,
|
|
1583
1565
|
sourceName: params.sourceName ?? "unknown"
|
|
1584
1566
|
};
|
|
1585
|
-
const
|
|
1567
|
+
const outputDir = params.outputDir ?? ".";
|
|
1568
|
+
const safeOutputDir = params.scopeOutputDir ? params.scopeOutputDir(outputDir, params.rootDir) : outputDir;
|
|
1586
1569
|
const converter = new PptxMarkdownConverter(safeOutputDir, options);
|
|
1587
1570
|
const markdown = await converter.convert(ctx.pptxData);
|
|
1588
1571
|
return {
|
package/dist/mcp/index.js
CHANGED
|
@@ -1044,24 +1044,6 @@ function manageComments(ctx, params) {
|
|
|
1044
1044
|
}
|
|
1045
1045
|
}
|
|
1046
1046
|
}
|
|
1047
|
-
function isNodeRuntime() {
|
|
1048
|
-
return typeof process !== "undefined" && Boolean(process.versions?.node);
|
|
1049
|
-
}
|
|
1050
|
-
async function scopeOutputDir(outputDir, rootDir) {
|
|
1051
|
-
if (!isNodeRuntime()) {
|
|
1052
|
-
return outputDir;
|
|
1053
|
-
}
|
|
1054
|
-
const { isAbsolute: isAbsolute2, resolve: resolve2, sep: sep2 } = await import('path');
|
|
1055
|
-
const root = resolve2(rootDir ?? process.env["PPTX_TOOLS_ROOT"] ?? process.cwd());
|
|
1056
|
-
const resolved = isAbsolute2(outputDir) ? resolve2(outputDir) : resolve2(root, outputDir);
|
|
1057
|
-
const rootWithSep = root.endsWith(sep2) ? root : root + sep2;
|
|
1058
|
-
if (resolved !== root && !resolved.startsWith(rootWithSep)) {
|
|
1059
|
-
throw new Error(
|
|
1060
|
-
`convertToMarkdown: outputDir "${outputDir}" resolves outside the allowed root "${root}"`
|
|
1061
|
-
);
|
|
1062
|
-
}
|
|
1063
|
-
return resolved;
|
|
1064
|
-
}
|
|
1065
1047
|
async function convertToMarkdown(ctx, params) {
|
|
1066
1048
|
const options = {
|
|
1067
1049
|
mediaFolderName: params.mediaFolderName ?? "media",
|
|
@@ -1071,7 +1053,8 @@ async function convertToMarkdown(ctx, params) {
|
|
|
1071
1053
|
semanticMode: params.semanticMode === true,
|
|
1072
1054
|
sourceName: params.sourceName ?? "unknown"
|
|
1073
1055
|
};
|
|
1074
|
-
const
|
|
1056
|
+
const outputDir = params.outputDir ?? ".";
|
|
1057
|
+
const safeOutputDir = params.scopeOutputDir ? params.scopeOutputDir(outputDir, params.rootDir) : outputDir;
|
|
1075
1058
|
const converter = new pptxViewerCore.PptxMarkdownConverter(safeOutputDir, options);
|
|
1076
1059
|
const markdown = await converter.convert(ctx.pptxData);
|
|
1077
1060
|
return {
|
|
@@ -2986,16 +2969,23 @@ async function executeToolWithContext(filePath, execCtx, toolFn) {
|
|
|
2986
2969
|
|
|
2987
2970
|
// src/mcp/handlers.ts
|
|
2988
2971
|
var ALLOWED_EXTENSIONS = /* @__PURE__ */ new Set([".pptx", ".ppt"]);
|
|
2989
|
-
function
|
|
2990
|
-
if (typeof
|
|
2991
|
-
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");
|
|
2992
2975
|
}
|
|
2993
|
-
const root = path.resolve(process.env["PPTX_TOOLS_ROOT"] ?? process.cwd());
|
|
2994
|
-
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);
|
|
2995
2978
|
const rootWithSep = root.endsWith(path.sep) ? root : root + path.sep;
|
|
2996
2979
|
if (resolved !== root && !resolved.startsWith(rootWithSep)) {
|
|
2997
|
-
throw new Error(`MCP tool:
|
|
2980
|
+
throw new Error(`MCP tool: path "${dir}" resolves outside the allowed root "${root}"`);
|
|
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");
|
|
2998
2987
|
}
|
|
2988
|
+
const resolved = resolveScopedDir(filePath, rootDir);
|
|
2999
2989
|
const lower = resolved.toLowerCase();
|
|
3000
2990
|
let isAllowed = false;
|
|
3001
2991
|
for (const ext of ALLOWED_EXTENSIONS) {
|
|
@@ -3021,7 +3011,7 @@ function createMcpContext(_options) {
|
|
|
3021
3011
|
return { filesystem: nodeFs };
|
|
3022
3012
|
}
|
|
3023
3013
|
async function runMcpTool(filePath, fn, options) {
|
|
3024
|
-
const safePath = resolveScopedFilePath(filePath);
|
|
3014
|
+
const safePath = resolveScopedFilePath(filePath, options?.rootDir);
|
|
3025
3015
|
const ctx = createMcpContext();
|
|
3026
3016
|
return executeToolWithContext(safePath, ctx, fn);
|
|
3027
3017
|
}
|
|
@@ -3541,7 +3531,7 @@ function createServer() {
|
|
|
3541
3531
|
async (params) => {
|
|
3542
3532
|
const result = await runMcpTool(
|
|
3543
3533
|
params.filePath,
|
|
3544
|
-
(ctx) => convertToMarkdown(ctx, params)
|
|
3534
|
+
(ctx) => convertToMarkdown(ctx, { ...params, scopeOutputDir: resolveScopedDir })
|
|
3545
3535
|
);
|
|
3546
3536
|
return {
|
|
3547
3537
|
content: [
|
package/dist/mcp/index.mjs
CHANGED
|
@@ -1042,24 +1042,6 @@ function manageComments(ctx, params) {
|
|
|
1042
1042
|
}
|
|
1043
1043
|
}
|
|
1044
1044
|
}
|
|
1045
|
-
function isNodeRuntime() {
|
|
1046
|
-
return typeof process !== "undefined" && Boolean(process.versions?.node);
|
|
1047
|
-
}
|
|
1048
|
-
async function scopeOutputDir(outputDir, rootDir) {
|
|
1049
|
-
if (!isNodeRuntime()) {
|
|
1050
|
-
return outputDir;
|
|
1051
|
-
}
|
|
1052
|
-
const { isAbsolute: isAbsolute2, resolve: resolve2, sep: sep2 } = await import('path');
|
|
1053
|
-
const root = resolve2(rootDir ?? process.env["PPTX_TOOLS_ROOT"] ?? process.cwd());
|
|
1054
|
-
const resolved = isAbsolute2(outputDir) ? resolve2(outputDir) : resolve2(root, outputDir);
|
|
1055
|
-
const rootWithSep = root.endsWith(sep2) ? root : root + sep2;
|
|
1056
|
-
if (resolved !== root && !resolved.startsWith(rootWithSep)) {
|
|
1057
|
-
throw new Error(
|
|
1058
|
-
`convertToMarkdown: outputDir "${outputDir}" resolves outside the allowed root "${root}"`
|
|
1059
|
-
);
|
|
1060
|
-
}
|
|
1061
|
-
return resolved;
|
|
1062
|
-
}
|
|
1063
1045
|
async function convertToMarkdown(ctx, params) {
|
|
1064
1046
|
const options = {
|
|
1065
1047
|
mediaFolderName: params.mediaFolderName ?? "media",
|
|
@@ -1069,7 +1051,8 @@ async function convertToMarkdown(ctx, params) {
|
|
|
1069
1051
|
semanticMode: params.semanticMode === true,
|
|
1070
1052
|
sourceName: params.sourceName ?? "unknown"
|
|
1071
1053
|
};
|
|
1072
|
-
const
|
|
1054
|
+
const outputDir = params.outputDir ?? ".";
|
|
1055
|
+
const safeOutputDir = params.scopeOutputDir ? params.scopeOutputDir(outputDir, params.rootDir) : outputDir;
|
|
1073
1056
|
const converter = new PptxMarkdownConverter(safeOutputDir, options);
|
|
1074
1057
|
const markdown = await converter.convert(ctx.pptxData);
|
|
1075
1058
|
return {
|
|
@@ -2984,16 +2967,23 @@ async function executeToolWithContext(filePath, execCtx, toolFn) {
|
|
|
2984
2967
|
|
|
2985
2968
|
// src/mcp/handlers.ts
|
|
2986
2969
|
var ALLOWED_EXTENSIONS = /* @__PURE__ */ new Set([".pptx", ".ppt"]);
|
|
2987
|
-
function
|
|
2988
|
-
if (typeof
|
|
2989
|
-
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");
|
|
2990
2973
|
}
|
|
2991
|
-
const root = resolve(process.env["PPTX_TOOLS_ROOT"] ?? process.cwd());
|
|
2992
|
-
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);
|
|
2993
2976
|
const rootWithSep = root.endsWith(sep) ? root : root + sep;
|
|
2994
2977
|
if (resolved !== root && !resolved.startsWith(rootWithSep)) {
|
|
2995
|
-
throw new Error(`MCP tool:
|
|
2978
|
+
throw new Error(`MCP tool: path "${dir}" resolves outside the allowed root "${root}"`);
|
|
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");
|
|
2996
2985
|
}
|
|
2986
|
+
const resolved = resolveScopedDir(filePath, rootDir);
|
|
2997
2987
|
const lower = resolved.toLowerCase();
|
|
2998
2988
|
let isAllowed = false;
|
|
2999
2989
|
for (const ext of ALLOWED_EXTENSIONS) {
|
|
@@ -3019,7 +3009,7 @@ function createMcpContext(_options) {
|
|
|
3019
3009
|
return { filesystem: nodeFs };
|
|
3020
3010
|
}
|
|
3021
3011
|
async function runMcpTool(filePath, fn, options) {
|
|
3022
|
-
const safePath = resolveScopedFilePath(filePath);
|
|
3012
|
+
const safePath = resolveScopedFilePath(filePath, options?.rootDir);
|
|
3023
3013
|
const ctx = createMcpContext();
|
|
3024
3014
|
return executeToolWithContext(safePath, ctx, fn);
|
|
3025
3015
|
}
|
|
@@ -3539,7 +3529,7 @@ function createServer() {
|
|
|
3539
3529
|
async (params) => {
|
|
3540
3530
|
const result = await runMcpTool(
|
|
3541
3531
|
params.filePath,
|
|
3542
|
-
(ctx) => convertToMarkdown(ctx, params)
|
|
3532
|
+
(ctx) => convertToMarkdown(ctx, { ...params, scopeOutputDir: resolveScopedDir })
|
|
3543
3533
|
);
|
|
3544
3534
|
return {
|
|
3545
3535
|
content: [
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "pptx-viewer-mcp",
|
|
3
|
-
"version": "2.0.
|
|
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",
|