pdf-to-markdown-mcp 1.0.2 → 1.0.4
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/dist/src/index.js +3 -2
- package/dist/src/index.js.map +1 -1
- package/dist/src/pdfConverter.d.ts.map +1 -1
- package/dist/src/pdfConverter.js +43 -1
- package/dist/src/pdfConverter.js.map +1 -1
- package/package.json +1 -1
- package/src/index.ts +3 -2
- package/src/pdfConverter.ts +48 -1
package/dist/src/index.js
CHANGED
|
@@ -61,9 +61,10 @@ async function main() {
|
|
|
61
61
|
if (!apiUrl || !apiKey) {
|
|
62
62
|
throw new Error("Missing required environment variables: QWEN_API_URL and QWEN_API_KEY must be set");
|
|
63
63
|
}
|
|
64
|
+
const se = "1.0.4";
|
|
64
65
|
const server = new McpServer({
|
|
65
66
|
name: "pdf-to-markdown-mcp",
|
|
66
|
-
version:
|
|
67
|
+
version: se,
|
|
67
68
|
});
|
|
68
69
|
// Register tool
|
|
69
70
|
server.registerTool("convert_pdf_page_to_markdown", {
|
|
@@ -120,7 +121,7 @@ async function main() {
|
|
|
120
121
|
// Start the server
|
|
121
122
|
const transport = new StdioServerTransport();
|
|
122
123
|
await server.connect(transport);
|
|
123
|
-
console.error(
|
|
124
|
+
console.error(`PDF to Markdown MCP server (v${se}) running on stdio`);
|
|
124
125
|
}
|
|
125
126
|
try {
|
|
126
127
|
await main();
|
package/dist/src/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":";AAEA,OAAO,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;AACpE,OAAO,EAAE,oBAAoB,EAAE,MAAM,2CAA2C,CAAC;AACjF,OAAO,KAAK,EAAE,MAAM,kBAAkB,CAAC;AACvC,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AACxB,OAAO,EAAE,qBAAqB,EAAE,MAAM,mBAAmB,CAAC;AAc1D;;GAEG;AACH,KAAK,UAAU,sBAAsB,CACnC,WAAmB,EACnB,MAAc,EACd,MAAc,EACd,SAAiB;IAEjB,MAAM,WAAW,GAAG,WAAW,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC;IAEnD,MAAM,WAAW,GAAG;QAClB,KAAK,EAAE,SAAS;QAChB,QAAQ,EAAE;YACR;gBACE,IAAI,EAAE,MAAM;gBACZ,OAAO,EAAE;oBACP;wBACE,IAAI,EAAE,WAAW;wBACjB,SAAS,EAAE;4BACT,GAAG,EAAE,yBAAyB,WAAW,EAAE;yBAC5C;qBACF;oBACD;wBACE,IAAI,EAAE,MAAM;wBACZ,IAAI,EAAE,mGAAmG;qBAC1G;iBACF;aACF;SACF;KACF,CAAC;IAEF,MAAM,QAAQ,GAAG,MAAM,KAAK,CAAC,MAAM,EAAE;QACnC,MAAM,EAAE,MAAM;QACd,OAAO,EAAE;YACP,cAAc,EAAE,kBAAkB;YAClC,aAAa,EAAE,UAAU,MAAM,EAAE;SAClC;QACD,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC,WAAW,CAAC;KAClC,CAAC,CAAC;IAEH,IAAI,CAAC,QAAQ,CAAC,EAAE,EAAE,CAAC;QACjB,MAAM,SAAS,GAAG,MAAM,QAAQ,CAAC,IAAI,EAAE,CAAC;QACxC,MAAM,IAAI,KAAK,CACb,uBAAuB,QAAQ,CAAC,MAAM,IAAI,QAAQ,CAAC,UAAU,MAAM,SAAS,EAAE,CAC/E,CAAC;IACJ,CAAC;IAED,MAAM,MAAM,GAAG,CAAC,MAAM,QAAQ,CAAC,IAAI,EAAE,CAAmB,CAAC;IAEzD,6CAA6C;IAC7C,IAAI,MAAM,CAAC,OAAO,EAAE,CAAC,CAAC,CAAC,EAAE,OAAO,EAAE,OAAO,EAAE,CAAC;QAC1C,OAAO,MAAM,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,OAAO,CAAC;IAC3C,CAAC;IAED,IAAI,MAAM,CAAC,MAAM,EAAE,IAAI,EAAE,CAAC;QACxB,OAAO,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC;IAC5B,CAAC;IAED,MAAM,IAAI,KAAK,CACb,mCAAmC,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,EAAE,CAC5D,CAAC;AACJ,CAAC;AAED;;GAEG;AACH,KAAK,UAAU,IAAI;IACjB,MAAM,MAAM,GAAG,OAAO,CAAC,GAAG,CAAC,YAAY,CAAC;IACxC,MAAM,MAAM,GAAG,OAAO,CAAC,GAAG,CAAC,YAAY,CAAC;IACxC,MAAM,SAAS,GAAG,OAAO,CAAC,GAAG,CAAC,UAAU,IAAI,6BAA6B,CAAC;IAE1E,IAAI,CAAC,MAAM,IAAI,CAAC,MAAM,EAAE,CAAC;QACvB,MAAM,IAAI,KAAK,CACb,mFAAmF,CACpF,CAAC;IACJ,CAAC;IAED,MAAM,MAAM,GAAG,IAAI,SAAS,CAAC;QAC3B,IAAI,EAAE,qBAAqB;QAC3B,OAAO,EAAE,
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"pdfConverter.d.ts","sourceRoot":"","sources":["../../src/pdfConverter.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"pdfConverter.d.ts","sourceRoot":"","sources":["../../src/pdfConverter.ts"],"names":[],"mappings":"AAwDA;;;;GAIG;AACH,wBAAsB,qBAAqB,CACzC,OAAO,EAAE,MAAM,EACf,UAAU,EAAE,MAAM,GACjB,OAAO,CAAC,MAAM,CAAC,CAyCjB"}
|
package/dist/src/pdfConverter.js
CHANGED
|
@@ -1,6 +1,10 @@
|
|
|
1
1
|
// Polyfill DOM APIs required by pdfjs-dist in Node.js environment
|
|
2
|
-
import { createCanvas } from "canvas";
|
|
2
|
+
import { createCanvas, Canvas } from "canvas";
|
|
3
3
|
import * as fs from "node:fs/promises";
|
|
4
|
+
// Polyfill Canvas for pdfjs-dist
|
|
5
|
+
if (typeof globalThis !== "undefined") {
|
|
6
|
+
globalThis.Canvas = Canvas;
|
|
7
|
+
}
|
|
4
8
|
// Lazy load pdfjs-dist
|
|
5
9
|
let pdfjsLib = null;
|
|
6
10
|
async function getPdfjsLib() {
|
|
@@ -10,6 +14,40 @@ async function getPdfjsLib() {
|
|
|
10
14
|
}
|
|
11
15
|
return pdfjsLib;
|
|
12
16
|
}
|
|
17
|
+
class NodeCanvasFactory {
|
|
18
|
+
create(width, height) {
|
|
19
|
+
if (width <= 0 || height <= 0) {
|
|
20
|
+
throw new Error("Invalid canvas size");
|
|
21
|
+
}
|
|
22
|
+
const canvas = createCanvas(width, height);
|
|
23
|
+
const context = canvas.getContext("2d");
|
|
24
|
+
return {
|
|
25
|
+
canvas,
|
|
26
|
+
context,
|
|
27
|
+
};
|
|
28
|
+
}
|
|
29
|
+
reset(canvasAndContext, width, height) {
|
|
30
|
+
if (!canvasAndContext.canvas) {
|
|
31
|
+
throw new Error("Canvas is not specified");
|
|
32
|
+
}
|
|
33
|
+
if (width <= 0 || height <= 0) {
|
|
34
|
+
throw new Error("Invalid canvas size");
|
|
35
|
+
}
|
|
36
|
+
canvasAndContext.canvas.width = width;
|
|
37
|
+
canvasAndContext.canvas.height = height;
|
|
38
|
+
}
|
|
39
|
+
destroy(canvasAndContext) {
|
|
40
|
+
if (!canvasAndContext.canvas) {
|
|
41
|
+
throw new Error("Canvas is not specified");
|
|
42
|
+
}
|
|
43
|
+
// Zeroing the width and height cause Firefox to release graphics
|
|
44
|
+
// resources immediately, which can be important with complex documents.
|
|
45
|
+
canvasAndContext.canvas.width = 0;
|
|
46
|
+
canvasAndContext.canvas.height = 0;
|
|
47
|
+
canvasAndContext.canvas = null;
|
|
48
|
+
canvasAndContext.context = null;
|
|
49
|
+
}
|
|
50
|
+
}
|
|
13
51
|
/**
|
|
14
52
|
* Convert a PDF page to a PNG image buffer
|
|
15
53
|
*
|
|
@@ -34,9 +72,13 @@ export async function convertPdfPageToImage(pdfPath, pageNumber) {
|
|
|
34
72
|
const viewport = page.getViewport({ scale: 1 });
|
|
35
73
|
const canvas = createCanvas(viewport.width, viewport.height);
|
|
36
74
|
const context = canvas.getContext("2d");
|
|
75
|
+
// Set white background
|
|
76
|
+
context.fillStyle = "white";
|
|
77
|
+
context.fillRect(0, 0, canvas.width, canvas.height);
|
|
37
78
|
const renderContext = {
|
|
38
79
|
canvasContext: context,
|
|
39
80
|
viewport: viewport,
|
|
81
|
+
canvasFactory: new NodeCanvasFactory(),
|
|
40
82
|
background: "white",
|
|
41
83
|
};
|
|
42
84
|
await page.render(renderContext).promise;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"pdfConverter.js","sourceRoot":"","sources":["../../src/pdfConverter.ts"],"names":[],"mappings":"AAAA,kEAAkE;AAClE,OAAO,EAAE,YAAY,EAAE,MAAM,QAAQ,CAAC;
|
|
1
|
+
{"version":3,"file":"pdfConverter.js","sourceRoot":"","sources":["../../src/pdfConverter.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
package/src/index.ts
CHANGED
|
@@ -96,9 +96,10 @@ async function main() {
|
|
|
96
96
|
);
|
|
97
97
|
}
|
|
98
98
|
|
|
99
|
+
const se = "1.0.4";
|
|
99
100
|
const server = new McpServer({
|
|
100
101
|
name: "pdf-to-markdown-mcp",
|
|
101
|
-
version:
|
|
102
|
+
version: se,
|
|
102
103
|
});
|
|
103
104
|
|
|
104
105
|
// Register tool
|
|
@@ -178,7 +179,7 @@ async function main() {
|
|
|
178
179
|
const transport = new StdioServerTransport();
|
|
179
180
|
await server.connect(transport);
|
|
180
181
|
|
|
181
|
-
console.error(
|
|
182
|
+
console.error(`PDF to Markdown MCP server (v${se}) running on stdio`);
|
|
182
183
|
}
|
|
183
184
|
|
|
184
185
|
try {
|
package/src/pdfConverter.ts
CHANGED
|
@@ -1,7 +1,12 @@
|
|
|
1
1
|
// Polyfill DOM APIs required by pdfjs-dist in Node.js environment
|
|
2
|
-
import { createCanvas } from "canvas";
|
|
2
|
+
import { createCanvas, Canvas } from "canvas";
|
|
3
3
|
import * as fs from "node:fs/promises";
|
|
4
4
|
|
|
5
|
+
// Polyfill Canvas for pdfjs-dist
|
|
6
|
+
if (typeof globalThis !== "undefined") {
|
|
7
|
+
(globalThis as any).Canvas = Canvas;
|
|
8
|
+
}
|
|
9
|
+
|
|
5
10
|
// Lazy load pdfjs-dist
|
|
6
11
|
let pdfjsLib: any = null;
|
|
7
12
|
async function getPdfjsLib() {
|
|
@@ -12,6 +17,43 @@ async function getPdfjsLib() {
|
|
|
12
17
|
return pdfjsLib;
|
|
13
18
|
}
|
|
14
19
|
|
|
20
|
+
class NodeCanvasFactory {
|
|
21
|
+
create(width: number, height: number) {
|
|
22
|
+
if (width <= 0 || height <= 0) {
|
|
23
|
+
throw new Error("Invalid canvas size");
|
|
24
|
+
}
|
|
25
|
+
const canvas = createCanvas(width, height);
|
|
26
|
+
const context = canvas.getContext("2d");
|
|
27
|
+
return {
|
|
28
|
+
canvas,
|
|
29
|
+
context,
|
|
30
|
+
};
|
|
31
|
+
}
|
|
32
|
+
|
|
33
|
+
reset(canvasAndContext: any, width: number, height: number) {
|
|
34
|
+
if (!canvasAndContext.canvas) {
|
|
35
|
+
throw new Error("Canvas is not specified");
|
|
36
|
+
}
|
|
37
|
+
if (width <= 0 || height <= 0) {
|
|
38
|
+
throw new Error("Invalid canvas size");
|
|
39
|
+
}
|
|
40
|
+
canvasAndContext.canvas.width = width;
|
|
41
|
+
canvasAndContext.canvas.height = height;
|
|
42
|
+
}
|
|
43
|
+
|
|
44
|
+
destroy(canvasAndContext: any) {
|
|
45
|
+
if (!canvasAndContext.canvas) {
|
|
46
|
+
throw new Error("Canvas is not specified");
|
|
47
|
+
}
|
|
48
|
+
// Zeroing the width and height cause Firefox to release graphics
|
|
49
|
+
// resources immediately, which can be important with complex documents.
|
|
50
|
+
canvasAndContext.canvas.width = 0;
|
|
51
|
+
canvasAndContext.canvas.height = 0;
|
|
52
|
+
canvasAndContext.canvas = null;
|
|
53
|
+
canvasAndContext.context = null;
|
|
54
|
+
}
|
|
55
|
+
}
|
|
56
|
+
|
|
15
57
|
/**
|
|
16
58
|
* Convert a PDF page to a PNG image buffer
|
|
17
59
|
*
|
|
@@ -47,9 +89,14 @@ export async function convertPdfPageToImage(
|
|
|
47
89
|
const canvas = createCanvas(viewport.width, viewport.height);
|
|
48
90
|
const context = canvas.getContext("2d");
|
|
49
91
|
|
|
92
|
+
// Set white background
|
|
93
|
+
context.fillStyle = "white";
|
|
94
|
+
context.fillRect(0, 0, canvas.width, canvas.height);
|
|
95
|
+
|
|
50
96
|
const renderContext = {
|
|
51
97
|
canvasContext: context as any,
|
|
52
98
|
viewport: viewport,
|
|
99
|
+
canvasFactory: new NodeCanvasFactory(),
|
|
53
100
|
background: "white",
|
|
54
101
|
};
|
|
55
102
|
|