pretext-pdf-mcp 1.0.0 → 1.0.2
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/index.js +62 -17
- package/package.json +27 -6
- package/smithery.yaml +1 -1
package/dist/index.js
CHANGED
|
@@ -6,20 +6,65 @@ import { generatePdfTool } from './tools/generate-pdf.js';
|
|
|
6
6
|
import { generateInvoiceTool } from './tools/generate-invoice.js';
|
|
7
7
|
import { generateReportTool } from './tools/generate-report.js';
|
|
8
8
|
import { listElementsTool } from './tools/list-elements.js';
|
|
9
|
-
|
|
10
|
-
const
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
});
|
|
24
|
-
|
|
25
|
-
|
|
9
|
+
function createServer() {
|
|
10
|
+
const server = new Server({ name: 'pretext-pdf', version: '1.0.0' }, { capabilities: { tools: {} } });
|
|
11
|
+
const tools = [generatePdfTool, generateInvoiceTool, generateReportTool, listElementsTool];
|
|
12
|
+
server.setRequestHandler(ListToolsRequestSchema, async () => ({
|
|
13
|
+
tools: tools.map(t => t.schema),
|
|
14
|
+
}));
|
|
15
|
+
server.setRequestHandler(CallToolRequestSchema, async (request) => {
|
|
16
|
+
const tool = tools.find(t => t.schema.name === request.params.name);
|
|
17
|
+
if (!tool) {
|
|
18
|
+
return {
|
|
19
|
+
content: [{ type: 'text', text: `Unknown tool: ${request.params.name}` }],
|
|
20
|
+
isError: true,
|
|
21
|
+
};
|
|
22
|
+
}
|
|
23
|
+
return tool.handler(request.params.arguments ?? {});
|
|
24
|
+
});
|
|
25
|
+
return server;
|
|
26
|
+
}
|
|
27
|
+
const port = process.env.PORT ? parseInt(process.env.PORT, 10) : null;
|
|
28
|
+
if (port) {
|
|
29
|
+
// HTTP mode — stateless, for hosted deployments (Smithery, VPS, etc.)
|
|
30
|
+
const { createServer: createHttpServer } = await import('node:http');
|
|
31
|
+
const { StreamableHTTPServerTransport } = await import('@modelcontextprotocol/sdk/server/streamableHttp.js');
|
|
32
|
+
const httpServer = createHttpServer(async (req, res) => {
|
|
33
|
+
const url = new URL(req.url ?? '/', `http://localhost:${port}`);
|
|
34
|
+
if (url.pathname === '/health') {
|
|
35
|
+
res.writeHead(200, { 'Content-Type': 'application/json' });
|
|
36
|
+
res.end(JSON.stringify({ ok: true, service: 'pretext-pdf-mcp' }));
|
|
37
|
+
return;
|
|
38
|
+
}
|
|
39
|
+
if (url.pathname !== '/mcp') {
|
|
40
|
+
res.writeHead(404);
|
|
41
|
+
res.end();
|
|
42
|
+
return;
|
|
43
|
+
}
|
|
44
|
+
if (req.method === 'POST') {
|
|
45
|
+
const chunks = [];
|
|
46
|
+
for await (const chunk of req)
|
|
47
|
+
chunks.push(chunk);
|
|
48
|
+
const body = JSON.parse(Buffer.concat(chunks).toString());
|
|
49
|
+
// Stateless: fresh transport+server per request — no session tracking
|
|
50
|
+
const transport = new StreamableHTTPServerTransport({
|
|
51
|
+
sessionIdGenerator: undefined,
|
|
52
|
+
});
|
|
53
|
+
const server = createServer();
|
|
54
|
+
await server.connect(transport);
|
|
55
|
+
await transport.handleRequest(req, res, body);
|
|
56
|
+
return;
|
|
57
|
+
}
|
|
58
|
+
res.writeHead(405);
|
|
59
|
+
res.end();
|
|
60
|
+
});
|
|
61
|
+
httpServer.listen(port, () => {
|
|
62
|
+
process.stderr.write(`pretext-pdf-mcp HTTP server listening on port ${port}\n`);
|
|
63
|
+
});
|
|
64
|
+
}
|
|
65
|
+
else {
|
|
66
|
+
// Stdio mode — for local npx usage (Claude Desktop, Cursor, etc.)
|
|
67
|
+
const server = createServer();
|
|
68
|
+
const transport = new StdioServerTransport();
|
|
69
|
+
await server.connect(transport);
|
|
70
|
+
}
|
package/package.json
CHANGED
|
@@ -1,11 +1,22 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "pretext-pdf-mcp",
|
|
3
|
-
"version": "1.0.
|
|
3
|
+
"version": "1.0.2",
|
|
4
4
|
"description": "MCP server for pretext-pdf — generate professional PDFs from JSON in Claude, Cursor, or any AI agent",
|
|
5
|
-
"keywords": [
|
|
5
|
+
"keywords": [
|
|
6
|
+
"mcp",
|
|
7
|
+
"pdf",
|
|
8
|
+
"pdf-generation",
|
|
9
|
+
"invoice",
|
|
10
|
+
"report",
|
|
11
|
+
"claude",
|
|
12
|
+
"ai-agent",
|
|
13
|
+
"pretext"
|
|
14
|
+
],
|
|
6
15
|
"type": "module",
|
|
7
16
|
"main": "./dist/index.js",
|
|
8
|
-
"bin": {
|
|
17
|
+
"bin": {
|
|
18
|
+
"pretext-pdf-mcp": "./dist/index.js"
|
|
19
|
+
},
|
|
9
20
|
"scripts": {
|
|
10
21
|
"build": "tsc",
|
|
11
22
|
"dev": "tsx src/index.ts",
|
|
@@ -20,10 +31,20 @@
|
|
|
20
31
|
"tsx": "^4.0.0",
|
|
21
32
|
"typescript": "^5.0.0"
|
|
22
33
|
},
|
|
23
|
-
"files": [
|
|
24
|
-
|
|
34
|
+
"files": [
|
|
35
|
+
"dist/**/*",
|
|
36
|
+
"smithery.yaml",
|
|
37
|
+
"README.md",
|
|
38
|
+
"LICENSE"
|
|
39
|
+
],
|
|
40
|
+
"engines": {
|
|
41
|
+
"node": ">=18.0.0"
|
|
42
|
+
},
|
|
25
43
|
"license": "MIT",
|
|
26
44
|
"author": "Himanshu Jain",
|
|
27
|
-
"repository": {
|
|
45
|
+
"repository": {
|
|
46
|
+
"type": "git",
|
|
47
|
+
"url": "https://github.com/Himaan1998Y/pretext-pdf-mcp"
|
|
48
|
+
},
|
|
28
49
|
"homepage": "https://github.com/Himaan1998Y/pretext-pdf-mcp#readme"
|
|
29
50
|
}
|
package/smithery.yaml
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
name: pretext-pdf
|
|
2
2
|
description: "Generate professional PDFs from structured JSON. Supports invoices (with GST), reports, tables, forms, encryption, and more. No headless browser — pure Node.js."
|
|
3
|
-
version: "1.0.
|
|
3
|
+
version: "1.0.1"
|
|
4
4
|
startCommand:
|
|
5
5
|
type: stdio
|
|
6
6
|
command: npx
|