@pdfgate/mcp-server 1.0.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.
Files changed (87) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +84 -0
  3. package/dist/client.d.ts +5 -0
  4. package/dist/client.d.ts.map +1 -0
  5. package/dist/client.js +25 -0
  6. package/dist/client.js.map +1 -0
  7. package/dist/http.d.ts +3 -0
  8. package/dist/http.d.ts.map +1 -0
  9. package/dist/http.js +45 -0
  10. package/dist/http.js.map +1 -0
  11. package/dist/index.d.ts +3 -0
  12. package/dist/index.d.ts.map +1 -0
  13. package/dist/index.js +24 -0
  14. package/dist/index.js.map +1 -0
  15. package/dist/tools/compress-pdf.d.ts +3 -0
  16. package/dist/tools/compress-pdf.d.ts.map +1 -0
  17. package/dist/tools/compress-pdf.js +29 -0
  18. package/dist/tools/compress-pdf.js.map +1 -0
  19. package/dist/tools/create-envelope.d.ts +3 -0
  20. package/dist/tools/create-envelope.d.ts.map +1 -0
  21. package/dist/tools/create-envelope.js +33 -0
  22. package/dist/tools/create-envelope.js.map +1 -0
  23. package/dist/tools/create-webhook.d.ts +3 -0
  24. package/dist/tools/create-webhook.d.ts.map +1 -0
  25. package/dist/tools/create-webhook.js +29 -0
  26. package/dist/tools/create-webhook.js.map +1 -0
  27. package/dist/tools/delete-document.d.ts +3 -0
  28. package/dist/tools/delete-document.d.ts.map +1 -0
  29. package/dist/tools/delete-document.js +17 -0
  30. package/dist/tools/delete-document.js.map +1 -0
  31. package/dist/tools/delete-webhook.d.ts +3 -0
  32. package/dist/tools/delete-webhook.d.ts.map +1 -0
  33. package/dist/tools/delete-webhook.js +17 -0
  34. package/dist/tools/delete-webhook.js.map +1 -0
  35. package/dist/tools/extract-pdf-data.d.ts +3 -0
  36. package/dist/tools/extract-pdf-data.d.ts.map +1 -0
  37. package/dist/tools/extract-pdf-data.js +17 -0
  38. package/dist/tools/extract-pdf-data.js.map +1 -0
  39. package/dist/tools/flatten-pdf.d.ts +3 -0
  40. package/dist/tools/flatten-pdf.d.ts.map +1 -0
  41. package/dist/tools/flatten-pdf.js +25 -0
  42. package/dist/tools/flatten-pdf.js.map +1 -0
  43. package/dist/tools/generate-pdf.d.ts +3 -0
  44. package/dist/tools/generate-pdf.d.ts.map +1 -0
  45. package/dist/tools/generate-pdf.js +68 -0
  46. package/dist/tools/generate-pdf.js.map +1 -0
  47. package/dist/tools/get-document.d.ts +3 -0
  48. package/dist/tools/get-document.d.ts.map +1 -0
  49. package/dist/tools/get-document.js +24 -0
  50. package/dist/tools/get-document.js.map +1 -0
  51. package/dist/tools/get-envelope.d.ts +3 -0
  52. package/dist/tools/get-envelope.d.ts.map +1 -0
  53. package/dist/tools/get-envelope.js +17 -0
  54. package/dist/tools/get-envelope.js.map +1 -0
  55. package/dist/tools/index.d.ts +3 -0
  56. package/dist/tools/index.d.ts.map +1 -0
  57. package/dist/tools/index.js +31 -0
  58. package/dist/tools/index.js.map +1 -0
  59. package/dist/tools/protect-pdf.d.ts +3 -0
  60. package/dist/tools/protect-pdf.d.ts.map +1 -0
  61. package/dist/tools/protect-pdf.js +52 -0
  62. package/dist/tools/protect-pdf.js.map +1 -0
  63. package/dist/tools/send-envelope.d.ts +3 -0
  64. package/dist/tools/send-envelope.d.ts.map +1 -0
  65. package/dist/tools/send-envelope.js +17 -0
  66. package/dist/tools/send-envelope.js.map +1 -0
  67. package/dist/tools/upload-pdf.d.ts +3 -0
  68. package/dist/tools/upload-pdf.d.ts.map +1 -0
  69. package/dist/tools/upload-pdf.js +33 -0
  70. package/dist/tools/upload-pdf.js.map +1 -0
  71. package/dist/tools/watermark-pdf.d.ts +3 -0
  72. package/dist/tools/watermark-pdf.d.ts.map +1 -0
  73. package/dist/tools/watermark-pdf.js +81 -0
  74. package/dist/tools/watermark-pdf.js.map +1 -0
  75. package/dist/webhooks/secrets.d.ts +4 -0
  76. package/dist/webhooks/secrets.d.ts.map +1 -0
  77. package/dist/webhooks/secrets.js +19 -0
  78. package/dist/webhooks/secrets.js.map +1 -0
  79. package/dist/webhooks/server.d.ts +3 -0
  80. package/dist/webhooks/server.d.ts.map +1 -0
  81. package/dist/webhooks/server.js +42 -0
  82. package/dist/webhooks/server.js.map +1 -0
  83. package/dist/webhooks/store.d.ts +13 -0
  84. package/dist/webhooks/store.d.ts.map +1 -0
  85. package/dist/webhooks/store.js +11 -0
  86. package/dist/webhooks/store.js.map +1 -0
  87. package/package.json +45 -0
@@ -0,0 +1,24 @@
1
+ import { z } from "zod";
2
+ import { getClient } from "../client.js";
3
+ export function register(server) {
4
+ server.tool("get_document", "Retrieve metadata for a stored PDFGate document by its ID.", {
5
+ documentId: z.string().describe("The document ID"),
6
+ preSignedUrlExpiresIn: z
7
+ .number()
8
+ .int()
9
+ .min(60)
10
+ .max(86400)
11
+ .optional()
12
+ .describe("Generate a fresh pre-signed download URL expiring in this many seconds (60–86400)"),
13
+ }, async ({ documentId, preSignedUrlExpiresIn }) => {
14
+ try {
15
+ const result = await getClient().getDocument({ id: documentId, preSignedUrlExpiresIn });
16
+ return { content: [{ type: "text", text: JSON.stringify(result, null, 2) }] };
17
+ }
18
+ catch (err) {
19
+ const msg = err instanceof Error ? err.message : String(err);
20
+ return { content: [{ type: "text", text: `Error: ${msg}` }], isError: true };
21
+ }
22
+ });
23
+ }
24
+ //# sourceMappingURL=get-document.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"get-document.js","sourceRoot":"","sources":["../../src/tools/get-document.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AACxB,OAAO,EAAE,SAAS,EAAE,MAAM,cAAc,CAAC;AAEzC,MAAM,UAAU,QAAQ,CAAC,MAAiB;IACxC,MAAM,CAAC,IAAI,CACT,cAAc,EACd,4DAA4D,EAC5D;QACE,UAAU,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,iBAAiB,CAAC;QAClD,qBAAqB,EAAE,CAAC;aACrB,MAAM,EAAE;aACR,GAAG,EAAE;aACL,GAAG,CAAC,EAAE,CAAC;aACP,GAAG,CAAC,KAAK,CAAC;aACV,QAAQ,EAAE;aACV,QAAQ,CAAC,mFAAmF,CAAC;KACjG,EACD,KAAK,EAAE,EAAE,UAAU,EAAE,qBAAqB,EAAE,EAAE,EAAE;QAC9C,IAAI,CAAC;YACH,MAAM,MAAM,GAAG,MAAM,SAAS,EAAE,CAAC,WAAW,CAAC,EAAE,EAAE,EAAE,UAAU,EAAE,qBAAqB,EAAE,CAAC,CAAC;YACxF,OAAO,EAAE,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC,MAAM,EAAE,IAAI,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC;QAChF,CAAC;QAAC,OAAO,GAAY,EAAE,CAAC;YACtB,MAAM,GAAG,GAAG,GAAG,YAAY,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;YAC7D,OAAO,EAAE,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,UAAU,GAAG,EAAE,EAAE,CAAC,EAAE,OAAO,EAAE,IAAI,EAAE,CAAC;QAC/E,CAAC;IACH,CAAC,CACF,CAAC;AACJ,CAAC"}
@@ -0,0 +1,3 @@
1
+ import { McpServer } from "@modelcontextprotocol/sdk/server/mcp.js";
2
+ export declare function register(server: McpServer): void;
3
+ //# sourceMappingURL=get-envelope.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"get-envelope.d.ts","sourceRoot":"","sources":["../../src/tools/get-envelope.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;AAIpE,wBAAgB,QAAQ,CAAC,MAAM,EAAE,SAAS,GAAG,IAAI,CAiBhD"}
@@ -0,0 +1,17 @@
1
+ import { z } from "zod";
2
+ import { getClient } from "../client.js";
3
+ export function register(server) {
4
+ server.tool("get_envelope", "Retrieve the current state of an envelope including its status, document progress, and per-recipient signing status.", {
5
+ envelopeId: z.string().describe("The envelope ID to retrieve"),
6
+ }, async ({ envelopeId }) => {
7
+ try {
8
+ const result = await getClient().getEnvelope({ id: envelopeId });
9
+ return { content: [{ type: "text", text: JSON.stringify(result, null, 2) }] };
10
+ }
11
+ catch (err) {
12
+ const msg = err instanceof Error ? err.message : String(err);
13
+ return { content: [{ type: "text", text: `Error: ${msg}` }], isError: true };
14
+ }
15
+ });
16
+ }
17
+ //# sourceMappingURL=get-envelope.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"get-envelope.js","sourceRoot":"","sources":["../../src/tools/get-envelope.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AACxB,OAAO,EAAE,SAAS,EAAE,MAAM,cAAc,CAAC;AAEzC,MAAM,UAAU,QAAQ,CAAC,MAAiB;IACxC,MAAM,CAAC,IAAI,CACT,cAAc,EACd,sHAAsH,EACtH;QACE,UAAU,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,6BAA6B,CAAC;KAC/D,EACD,KAAK,EAAE,EAAE,UAAU,EAAE,EAAE,EAAE;QACvB,IAAI,CAAC;YACH,MAAM,MAAM,GAAG,MAAM,SAAS,EAAE,CAAC,WAAW,CAAC,EAAE,EAAE,EAAE,UAAU,EAAE,CAAC,CAAC;YACjE,OAAO,EAAE,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC,MAAM,EAAE,IAAI,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC;QAChF,CAAC;QAAC,OAAO,GAAY,EAAE,CAAC;YACtB,MAAM,GAAG,GAAG,GAAG,YAAY,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;YAC7D,OAAO,EAAE,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,UAAU,GAAG,EAAE,EAAE,CAAC,EAAE,OAAO,EAAE,IAAI,EAAE,CAAC;QAC/E,CAAC;IACH,CAAC,CACF,CAAC;AACJ,CAAC"}
@@ -0,0 +1,3 @@
1
+ import { McpServer } from "@modelcontextprotocol/sdk/server/mcp.js";
2
+ export declare function registerTools(server: McpServer): void;
3
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/tools/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;AAgBpE,wBAAgB,aAAa,CAAC,MAAM,EAAE,SAAS,GAAG,IAAI,CAerD"}
@@ -0,0 +1,31 @@
1
+ import { register as registerGeneratePdf } from "./generate-pdf.js";
2
+ import { register as registerUploadPdf } from "./upload-pdf.js";
3
+ import { register as registerGetDocument } from "./get-document.js";
4
+ import { register as registerDeleteDocument } from "./delete-document.js";
5
+ import { register as registerFlattenPdf } from "./flatten-pdf.js";
6
+ import { register as registerExtractPdfData } from "./extract-pdf-data.js";
7
+ import { register as registerCompressPdf } from "./compress-pdf.js";
8
+ import { register as registerProtectPdf } from "./protect-pdf.js";
9
+ import { register as registerWatermarkPdf } from "./watermark-pdf.js";
10
+ import { register as registerCreateEnvelope } from "./create-envelope.js";
11
+ import { register as registerSendEnvelope } from "./send-envelope.js";
12
+ import { register as registerGetEnvelope } from "./get-envelope.js";
13
+ import { register as registerCreateWebhook } from "./create-webhook.js";
14
+ import { register as registerDeleteWebhook } from "./delete-webhook.js";
15
+ export function registerTools(server) {
16
+ registerGeneratePdf(server);
17
+ registerUploadPdf(server);
18
+ registerGetDocument(server);
19
+ registerDeleteDocument(server);
20
+ registerFlattenPdf(server);
21
+ registerExtractPdfData(server);
22
+ registerCompressPdf(server);
23
+ registerProtectPdf(server);
24
+ registerWatermarkPdf(server);
25
+ registerCreateEnvelope(server);
26
+ registerSendEnvelope(server);
27
+ registerGetEnvelope(server);
28
+ registerCreateWebhook(server);
29
+ registerDeleteWebhook(server);
30
+ }
31
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/tools/index.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,QAAQ,IAAI,mBAAmB,EAAE,MAAM,mBAAmB,CAAC;AACpE,OAAO,EAAE,QAAQ,IAAI,iBAAiB,EAAE,MAAM,iBAAiB,CAAC;AAChE,OAAO,EAAE,QAAQ,IAAI,mBAAmB,EAAE,MAAM,mBAAmB,CAAC;AACpE,OAAO,EAAE,QAAQ,IAAI,sBAAsB,EAAE,MAAM,sBAAsB,CAAC;AAC1E,OAAO,EAAE,QAAQ,IAAI,kBAAkB,EAAE,MAAM,kBAAkB,CAAC;AAClE,OAAO,EAAE,QAAQ,IAAI,sBAAsB,EAAE,MAAM,uBAAuB,CAAC;AAC3E,OAAO,EAAE,QAAQ,IAAI,mBAAmB,EAAE,MAAM,mBAAmB,CAAC;AACpE,OAAO,EAAE,QAAQ,IAAI,kBAAkB,EAAE,MAAM,kBAAkB,CAAC;AAClE,OAAO,EAAE,QAAQ,IAAI,oBAAoB,EAAE,MAAM,oBAAoB,CAAC;AACtE,OAAO,EAAE,QAAQ,IAAI,sBAAsB,EAAE,MAAM,sBAAsB,CAAC;AAC1E,OAAO,EAAE,QAAQ,IAAI,oBAAoB,EAAE,MAAM,oBAAoB,CAAC;AACtE,OAAO,EAAE,QAAQ,IAAI,mBAAmB,EAAE,MAAM,mBAAmB,CAAC;AACpE,OAAO,EAAE,QAAQ,IAAI,qBAAqB,EAAE,MAAM,qBAAqB,CAAC;AACxE,OAAO,EAAE,QAAQ,IAAI,qBAAqB,EAAE,MAAM,qBAAqB,CAAC;AAExE,MAAM,UAAU,aAAa,CAAC,MAAiB;IAC7C,mBAAmB,CAAC,MAAM,CAAC,CAAC;IAC5B,iBAAiB,CAAC,MAAM,CAAC,CAAC;IAC1B,mBAAmB,CAAC,MAAM,CAAC,CAAC;IAC5B,sBAAsB,CAAC,MAAM,CAAC,CAAC;IAC/B,kBAAkB,CAAC,MAAM,CAAC,CAAC;IAC3B,sBAAsB,CAAC,MAAM,CAAC,CAAC;IAC/B,mBAAmB,CAAC,MAAM,CAAC,CAAC;IAC5B,kBAAkB,CAAC,MAAM,CAAC,CAAC;IAC3B,oBAAoB,CAAC,MAAM,CAAC,CAAC;IAC7B,sBAAsB,CAAC,MAAM,CAAC,CAAC;IAC/B,oBAAoB,CAAC,MAAM,CAAC,CAAC;IAC7B,mBAAmB,CAAC,MAAM,CAAC,CAAC;IAC5B,qBAAqB,CAAC,MAAM,CAAC,CAAC;IAC9B,qBAAqB,CAAC,MAAM,CAAC,CAAC;AAChC,CAAC"}
@@ -0,0 +1,3 @@
1
+ import { McpServer } from "@modelcontextprotocol/sdk/server/mcp.js";
2
+ export declare function register(server: McpServer): void;
3
+ //# sourceMappingURL=protect-pdf.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"protect-pdf.d.ts","sourceRoot":"","sources":["../../src/tools/protect-pdf.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;AAIpE,wBAAgB,QAAQ,CAAC,MAAM,EAAE,SAAS,GAAG,IAAI,CA+DhD"}
@@ -0,0 +1,52 @@
1
+ import { z } from "zod";
2
+ import { getClient } from "../client.js";
3
+ export function register(server) {
4
+ server.tool("protect_pdf", "Encrypt a PDF with a password and optional permission restrictions. Produces a new document; the original is unchanged.", {
5
+ documentId: z.string().describe("The source document ID to protect"),
6
+ algorithm: z
7
+ .enum(["AES256", "AES128"])
8
+ .optional()
9
+ .describe("Encryption algorithm (default: AES256)"),
10
+ userPassword: z
11
+ .string()
12
+ .optional()
13
+ .describe("Password required to open the PDF"),
14
+ ownerPassword: z
15
+ .string()
16
+ .optional()
17
+ .describe("Full-control owner password; required when using AES256 with a userPassword"),
18
+ disablePrint: z.boolean().optional().describe("Prevent printing"),
19
+ disableCopy: z.boolean().optional().describe("Prevent copying text"),
20
+ disableEditing: z.boolean().optional().describe("Prevent editing"),
21
+ encryptMetadata: z.boolean().optional().describe("Encrypt PDF metadata (default: false)"),
22
+ preSignedUrlExpiresIn: z
23
+ .number()
24
+ .int()
25
+ .min(60)
26
+ .max(86400)
27
+ .optional()
28
+ .describe("Pre-signed download URL expiry in seconds (60–86400)"),
29
+ metadata: z.record(z.unknown()).optional().describe("Custom metadata to attach"),
30
+ }, async ({ documentId, algorithm, userPassword, ownerPassword, disablePrint, disableCopy, disableEditing, encryptMetadata, preSignedUrlExpiresIn, metadata, }) => {
31
+ try {
32
+ const result = await getClient().protectPdf({
33
+ documentId,
34
+ algorithm,
35
+ userPassword,
36
+ ownerPassword,
37
+ disablePrint,
38
+ disableCopy,
39
+ disableEditing,
40
+ encryptMetadata,
41
+ preSignedUrlExpiresIn,
42
+ metadata,
43
+ });
44
+ return { content: [{ type: "text", text: JSON.stringify(result, null, 2) }] };
45
+ }
46
+ catch (err) {
47
+ const msg = err instanceof Error ? err.message : String(err);
48
+ return { content: [{ type: "text", text: `Error: ${msg}` }], isError: true };
49
+ }
50
+ });
51
+ }
52
+ //# sourceMappingURL=protect-pdf.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"protect-pdf.js","sourceRoot":"","sources":["../../src/tools/protect-pdf.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AACxB,OAAO,EAAE,SAAS,EAAE,MAAM,cAAc,CAAC;AAEzC,MAAM,UAAU,QAAQ,CAAC,MAAiB;IACxC,MAAM,CAAC,IAAI,CACT,aAAa,EACb,yHAAyH,EACzH;QACE,UAAU,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,mCAAmC,CAAC;QACpE,SAAS,EAAE,CAAC;aACT,IAAI,CAAC,CAAC,QAAQ,EAAE,QAAQ,CAAC,CAAC;aAC1B,QAAQ,EAAE;aACV,QAAQ,CAAC,wCAAwC,CAAC;QACrD,YAAY,EAAE,CAAC;aACZ,MAAM,EAAE;aACR,QAAQ,EAAE;aACV,QAAQ,CAAC,mCAAmC,CAAC;QAChD,aAAa,EAAE,CAAC;aACb,MAAM,EAAE;aACR,QAAQ,EAAE;aACV,QAAQ,CAAC,6EAA6E,CAAC;QAC1F,YAAY,EAAE,CAAC,CAAC,OAAO,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,kBAAkB,CAAC;QACjE,WAAW,EAAE,CAAC,CAAC,OAAO,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,sBAAsB,CAAC;QACpE,cAAc,EAAE,CAAC,CAAC,OAAO,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,iBAAiB,CAAC;QAClE,eAAe,EAAE,CAAC,CAAC,OAAO,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,uCAAuC,CAAC;QACzF,qBAAqB,EAAE,CAAC;aACrB,MAAM,EAAE;aACR,GAAG,EAAE;aACL,GAAG,CAAC,EAAE,CAAC;aACP,GAAG,CAAC,KAAK,CAAC;aACV,QAAQ,EAAE;aACV,QAAQ,CAAC,sDAAsD,CAAC;QACnE,QAAQ,EAAE,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,OAAO,EAAE,CAAC,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,2BAA2B,CAAC;KACjF,EACD,KAAK,EAAE,EACL,UAAU,EACV,SAAS,EACT,YAAY,EACZ,aAAa,EACb,YAAY,EACZ,WAAW,EACX,cAAc,EACd,eAAe,EACf,qBAAqB,EACrB,QAAQ,GACT,EAAE,EAAE;QACH,IAAI,CAAC;YACH,MAAM,MAAM,GAAG,MAAM,SAAS,EAAE,CAAC,UAAU,CAAC;gBAC1C,UAAU;gBACV,SAAS;gBACT,YAAY;gBACZ,aAAa;gBACb,YAAY;gBACZ,WAAW;gBACX,cAAc;gBACd,eAAe;gBACf,qBAAqB;gBACrB,QAAQ;aACT,CAAC,CAAC;YACH,OAAO,EAAE,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC,MAAM,EAAE,IAAI,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC;QAChF,CAAC;QAAC,OAAO,GAAY,EAAE,CAAC;YACtB,MAAM,GAAG,GAAG,GAAG,YAAY,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;YAC7D,OAAO,EAAE,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,UAAU,GAAG,EAAE,EAAE,CAAC,EAAE,OAAO,EAAE,IAAI,EAAE,CAAC;QAC/E,CAAC;IACH,CAAC,CACF,CAAC;AACJ,CAAC"}
@@ -0,0 +1,3 @@
1
+ import { McpServer } from "@modelcontextprotocol/sdk/server/mcp.js";
2
+ export declare function register(server: McpServer): void;
3
+ //# sourceMappingURL=send-envelope.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"send-envelope.d.ts","sourceRoot":"","sources":["../../src/tools/send-envelope.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;AAIpE,wBAAgB,QAAQ,CAAC,MAAM,EAAE,SAAS,GAAG,IAAI,CAiBhD"}
@@ -0,0 +1,17 @@
1
+ import { z } from "zod";
2
+ import { getClient } from "../client.js";
3
+ export function register(server) {
4
+ server.tool("send_envelope", "Send a created envelope to its recipients. PDFGate dispatches signing emails with secure, OTP-protected links that expire after 30 days.", {
5
+ envelopeId: z.string().describe("The envelope ID to send"),
6
+ }, async ({ envelopeId }) => {
7
+ try {
8
+ const result = await getClient().sendEnvelope({ id: envelopeId });
9
+ return { content: [{ type: "text", text: JSON.stringify(result, null, 2) }] };
10
+ }
11
+ catch (err) {
12
+ const msg = err instanceof Error ? err.message : String(err);
13
+ return { content: [{ type: "text", text: `Error: ${msg}` }], isError: true };
14
+ }
15
+ });
16
+ }
17
+ //# sourceMappingURL=send-envelope.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"send-envelope.js","sourceRoot":"","sources":["../../src/tools/send-envelope.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AACxB,OAAO,EAAE,SAAS,EAAE,MAAM,cAAc,CAAC;AAEzC,MAAM,UAAU,QAAQ,CAAC,MAAiB;IACxC,MAAM,CAAC,IAAI,CACT,eAAe,EACf,0IAA0I,EAC1I;QACE,UAAU,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,yBAAyB,CAAC;KAC3D,EACD,KAAK,EAAE,EAAE,UAAU,EAAE,EAAE,EAAE;QACvB,IAAI,CAAC;YACH,MAAM,MAAM,GAAG,MAAM,SAAS,EAAE,CAAC,YAAY,CAAC,EAAE,EAAE,EAAE,UAAU,EAAE,CAAC,CAAC;YAClE,OAAO,EAAE,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC,MAAM,EAAE,IAAI,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC;QAChF,CAAC;QAAC,OAAO,GAAY,EAAE,CAAC;YACtB,MAAM,GAAG,GAAG,GAAG,YAAY,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;YAC7D,OAAO,EAAE,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,UAAU,GAAG,EAAE,EAAE,CAAC,EAAE,OAAO,EAAE,IAAI,EAAE,CAAC;QAC/E,CAAC;IACH,CAAC,CACF,CAAC;AACJ,CAAC"}
@@ -0,0 +1,3 @@
1
+ import { McpServer } from "@modelcontextprotocol/sdk/server/mcp.js";
2
+ export declare function register(server: McpServer): void;
3
+ //# sourceMappingURL=upload-pdf.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"upload-pdf.d.ts","sourceRoot":"","sources":["../../src/tools/upload-pdf.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;AAMpE,wBAAgB,QAAQ,CAAC,MAAM,EAAE,SAAS,GAAG,IAAI,CA+BhD"}
@@ -0,0 +1,33 @@
1
+ import { z } from "zod";
2
+ import { readFileSync } from "node:fs";
3
+ import path from "node:path";
4
+ import { getClient } from "../client.js";
5
+ export function register(server) {
6
+ server.tool("upload_pdf", "Upload a PDF to PDFGate so it can be referenced by other operations. Provide either 'filePath' (local path) or 'url'.", {
7
+ filePath: z.string().optional().describe("Absolute local path to the PDF file to upload"),
8
+ url: z.string().url().optional().describe("Publicly accessible URL of the PDF to upload"),
9
+ preSignedUrlExpiresIn: z
10
+ .number()
11
+ .int()
12
+ .min(60)
13
+ .max(86400)
14
+ .optional()
15
+ .describe("Pre-signed download URL expiry in seconds (60–86400)"),
16
+ metadata: z.record(z.unknown()).optional().describe("Custom metadata to attach"),
17
+ }, async ({ filePath, url, preSignedUrlExpiresIn, metadata }) => {
18
+ try {
19
+ let file;
20
+ if (filePath) {
21
+ const data = readFileSync(filePath);
22
+ file = { name: path.basename(filePath), data };
23
+ }
24
+ const result = await getClient().uploadFile({ file, url, preSignedUrlExpiresIn, metadata });
25
+ return { content: [{ type: "text", text: JSON.stringify(result, null, 2) }] };
26
+ }
27
+ catch (err) {
28
+ const msg = err instanceof Error ? err.message : String(err);
29
+ return { content: [{ type: "text", text: `Error: ${msg}` }], isError: true };
30
+ }
31
+ });
32
+ }
33
+ //# sourceMappingURL=upload-pdf.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"upload-pdf.js","sourceRoot":"","sources":["../../src/tools/upload-pdf.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AACxB,OAAO,EAAE,YAAY,EAAE,MAAM,SAAS,CAAC;AACvC,OAAO,IAAI,MAAM,WAAW,CAAC;AAC7B,OAAO,EAAE,SAAS,EAAE,MAAM,cAAc,CAAC;AAEzC,MAAM,UAAU,QAAQ,CAAC,MAAiB;IACxC,MAAM,CAAC,IAAI,CACT,YAAY,EACZ,uHAAuH,EACvH;QACE,QAAQ,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,+CAA+C,CAAC;QACzF,GAAG,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,8CAA8C,CAAC;QACzF,qBAAqB,EAAE,CAAC;aACrB,MAAM,EAAE;aACR,GAAG,EAAE;aACL,GAAG,CAAC,EAAE,CAAC;aACP,GAAG,CAAC,KAAK,CAAC;aACV,QAAQ,EAAE;aACV,QAAQ,CAAC,sDAAsD,CAAC;QACnE,QAAQ,EAAE,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,OAAO,EAAE,CAAC,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,2BAA2B,CAAC;KACjF,EACD,KAAK,EAAE,EAAE,QAAQ,EAAE,GAAG,EAAE,qBAAqB,EAAE,QAAQ,EAAE,EAAE,EAAE;QAC3D,IAAI,CAAC;YACH,IAAI,IAAgD,CAAC;YACrD,IAAI,QAAQ,EAAE,CAAC;gBACb,MAAM,IAAI,GAAG,YAAY,CAAC,QAAQ,CAAC,CAAC;gBACpC,IAAI,GAAG,EAAE,IAAI,EAAE,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC,EAAE,IAAI,EAAE,CAAC;YACjD,CAAC;YACD,MAAM,MAAM,GAAG,MAAM,SAAS,EAAE,CAAC,UAAU,CAAC,EAAE,IAAI,EAAE,GAAG,EAAE,qBAAqB,EAAE,QAAQ,EAAE,CAAC,CAAC;YAC5F,OAAO,EAAE,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC,MAAM,EAAE,IAAI,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC;QAChF,CAAC;QAAC,OAAO,GAAY,EAAE,CAAC;YACtB,MAAM,GAAG,GAAG,GAAG,YAAY,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;YAC7D,OAAO,EAAE,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,UAAU,GAAG,EAAE,EAAE,CAAC,EAAE,OAAO,EAAE,IAAI,EAAE,CAAC;QAC/E,CAAC;IACH,CAAC,CACF,CAAC;AACJ,CAAC"}
@@ -0,0 +1,3 @@
1
+ import { McpServer } from "@modelcontextprotocol/sdk/server/mcp.js";
2
+ export declare function register(server: McpServer): void;
3
+ //# sourceMappingURL=watermark-pdf.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"watermark-pdf.d.ts","sourceRoot":"","sources":["../../src/tools/watermark-pdf.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;AAMpE,wBAAgB,QAAQ,CAAC,MAAM,EAAE,SAAS,GAAG,IAAI,CAkGhD"}
@@ -0,0 +1,81 @@
1
+ import { z } from "zod";
2
+ import { readFileSync } from "node:fs";
3
+ import path from "node:path";
4
+ import { getClient } from "../client.js";
5
+ export function register(server) {
6
+ server.tool("watermark_pdf", "Apply a text or image watermark to a PDF. For type='text' provide 'text'; for type='image' provide 'watermarkImagePath'.", {
7
+ documentId: z.string().describe("The source document ID"),
8
+ type: z.enum(["text", "image"]).describe("Watermark type"),
9
+ text: z.string().optional().describe("Watermark text (required when type='text')"),
10
+ watermarkImagePath: z
11
+ .string()
12
+ .optional()
13
+ .describe("Local path to a .png/.jpg watermark image (required when type='image')"),
14
+ fontFilePath: z
15
+ .string()
16
+ .optional()
17
+ .describe("Local path to a .ttf/.otf font file (overrides 'font')"),
18
+ font: z
19
+ .enum([
20
+ "times-roman", "times-bold", "times-italic", "times-bolditalic",
21
+ "helvetica", "helvetica-bold", "helvetica-oblique", "helvetica-boldoblique",
22
+ "courier", "courier-bold", "courier-oblique", "courier-boldoblique",
23
+ ])
24
+ .optional()
25
+ .describe("Standard PDF font name"),
26
+ fontSize: z.number().optional().describe("Font size in points"),
27
+ fontColor: z.string().optional().describe("Font colour as hex e.g. '#FF0000'"),
28
+ opacity: z.number().min(0).max(1).optional().describe("Opacity 0–1"),
29
+ xPosition: z.number().optional().describe("Horizontal position"),
30
+ yPosition: z.number().optional().describe("Vertical position"),
31
+ imageWidth: z.number().optional().describe("Image watermark width"),
32
+ imageHeight: z.number().optional().describe("Image watermark height"),
33
+ rotate: z.number().min(0).max(360).optional().describe("Rotation in degrees (0–360)"),
34
+ preSignedUrlExpiresIn: z
35
+ .number()
36
+ .int()
37
+ .min(60)
38
+ .max(86400)
39
+ .optional()
40
+ .describe("Pre-signed download URL expiry in seconds (60–86400)"),
41
+ metadata: z.record(z.unknown()).optional().describe("Custom metadata to attach"),
42
+ }, async ({ documentId, type, text, watermarkImagePath, fontFilePath, font, fontSize, fontColor, opacity, xPosition, yPosition, imageWidth, imageHeight, rotate, preSignedUrlExpiresIn, metadata, }) => {
43
+ try {
44
+ let watermark;
45
+ if (watermarkImagePath) {
46
+ watermark = {
47
+ name: path.basename(watermarkImagePath),
48
+ data: readFileSync(watermarkImagePath),
49
+ };
50
+ }
51
+ let fontFile;
52
+ if (fontFilePath) {
53
+ fontFile = { name: path.basename(fontFilePath), data: readFileSync(fontFilePath) };
54
+ }
55
+ const result = await getClient().watermarkPdf({
56
+ documentId,
57
+ type,
58
+ text,
59
+ watermark,
60
+ fontFile,
61
+ font: font,
62
+ fontSize,
63
+ fontColor,
64
+ opacity,
65
+ xPosition,
66
+ yPosition,
67
+ imageWidth,
68
+ imageHeight,
69
+ rotate,
70
+ preSignedUrlExpiresIn,
71
+ metadata,
72
+ });
73
+ return { content: [{ type: "text", text: JSON.stringify(result, null, 2) }] };
74
+ }
75
+ catch (err) {
76
+ const msg = err instanceof Error ? err.message : String(err);
77
+ return { content: [{ type: "text", text: `Error: ${msg}` }], isError: true };
78
+ }
79
+ });
80
+ }
81
+ //# sourceMappingURL=watermark-pdf.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"watermark-pdf.js","sourceRoot":"","sources":["../../src/tools/watermark-pdf.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,4 @@
1
+ export declare function addSecret(secret: string): void;
2
+ export declare function verifyWithAnySecret(signature: string, payload: Buffer): boolean;
3
+ export declare function hasSecrets(): boolean;
4
+ //# sourceMappingURL=secrets.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"secrets.d.ts","sourceRoot":"","sources":["../../src/webhooks/secrets.ts"],"names":[],"mappings":"AAIA,wBAAgB,SAAS,CAAC,MAAM,EAAE,MAAM,GAAG,IAAI,CAE9C;AAED,wBAAgB,mBAAmB,CAAC,SAAS,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,GAAG,OAAO,CAQ/E;AAED,wBAAgB,UAAU,IAAI,OAAO,CAEpC"}
@@ -0,0 +1,19 @@
1
+ import PdfGate from "pdfgate";
2
+ const secrets = new Set();
3
+ export function addSecret(secret) {
4
+ secrets.add(secret);
5
+ }
6
+ export function verifyWithAnySecret(signature, payload) {
7
+ for (const secret of secrets) {
8
+ try {
9
+ PdfGate.verifySignature(secret, signature, payload);
10
+ return true;
11
+ }
12
+ catch { }
13
+ }
14
+ return false;
15
+ }
16
+ export function hasSecrets() {
17
+ return secrets.size > 0;
18
+ }
19
+ //# sourceMappingURL=secrets.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"secrets.js","sourceRoot":"","sources":["../../src/webhooks/secrets.ts"],"names":[],"mappings":"AAAA,OAAO,OAAO,MAAM,SAAS,CAAC;AAE9B,MAAM,OAAO,GAAG,IAAI,GAAG,EAAU,CAAC;AAElC,MAAM,UAAU,SAAS,CAAC,MAAc;IACtC,OAAO,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC;AACtB,CAAC;AAED,MAAM,UAAU,mBAAmB,CAAC,SAAiB,EAAE,OAAe;IACpE,KAAK,MAAM,MAAM,IAAI,OAAO,EAAE,CAAC;QAC7B,IAAI,CAAC;YACH,OAAO,CAAC,eAAe,CAAC,MAAM,EAAE,SAAS,EAAE,OAAO,CAAC,CAAC;YACpD,OAAO,IAAI,CAAC;QACd,CAAC;QAAC,MAAM,CAAC,CAAA,CAAC;IACZ,CAAC;IACD,OAAO,KAAK,CAAC;AACf,CAAC;AAED,MAAM,UAAU,UAAU;IACxB,OAAO,OAAO,CAAC,IAAI,GAAG,CAAC,CAAC;AAC1B,CAAC"}
@@ -0,0 +1,3 @@
1
+ import { McpServer } from "@modelcontextprotocol/sdk/server/mcp.js";
2
+ export declare function startWebhookServer(mcpServer: McpServer): void;
3
+ //# sourceMappingURL=server.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"server.d.ts","sourceRoot":"","sources":["../../src/webhooks/server.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;AAIpE,wBAAgB,kBAAkB,CAAC,SAAS,EAAE,SAAS,GAAG,IAAI,CA0C7D"}
@@ -0,0 +1,42 @@
1
+ import * as http from "node:http";
2
+ import { addEvent } from "./store.js";
3
+ import { hasSecrets, verifyWithAnySecret } from "./secrets.js";
4
+ export function startWebhookServer(mcpServer) {
5
+ const port = parseInt(process.env.PDFGATE_WEBHOOK_PORT ?? "3599", 10);
6
+ const httpServer = http.createServer((req, res) => {
7
+ if (req.method !== "POST") {
8
+ res.writeHead(405).end();
9
+ return;
10
+ }
11
+ const chunks = [];
12
+ req.on("data", (chunk) => chunks.push(chunk));
13
+ req.on("end", () => {
14
+ const rawBody = Buffer.concat(chunks);
15
+ if (hasSecrets()) {
16
+ const signature = req.headers["x-pdfgate-signature"];
17
+ if (typeof signature !== "string") {
18
+ res.writeHead(401).end("Missing signature");
19
+ return;
20
+ }
21
+ if (!verifyWithAnySecret(signature, rawBody)) {
22
+ res.writeHead(401).end("Invalid signature");
23
+ return;
24
+ }
25
+ }
26
+ try {
27
+ const event = JSON.parse(rawBody.toString("utf8"));
28
+ addEvent(event);
29
+ mcpServer.server.sendResourceUpdated({ uri: "pdfgate://events" }).catch(() => { });
30
+ }
31
+ catch {
32
+ res.writeHead(400).end("Invalid JSON");
33
+ return;
34
+ }
35
+ res.writeHead(200).end("OK");
36
+ });
37
+ });
38
+ httpServer.listen(port, () => {
39
+ process.stderr.write(`PDFGate webhook listener started on port ${port}\n`);
40
+ });
41
+ }
42
+ //# sourceMappingURL=server.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"server.js","sourceRoot":"","sources":["../../src/webhooks/server.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,IAAI,MAAM,WAAW,CAAC;AAElC,OAAO,EAAE,QAAQ,EAAE,MAAM,YAAY,CAAC;AACtC,OAAO,EAAE,UAAU,EAAE,mBAAmB,EAAE,MAAM,cAAc,CAAC;AAE/D,MAAM,UAAU,kBAAkB,CAAC,SAAoB;IACrD,MAAM,IAAI,GAAG,QAAQ,CAAC,OAAO,CAAC,GAAG,CAAC,oBAAoB,IAAI,MAAM,EAAE,EAAE,CAAC,CAAC;IAEtE,MAAM,UAAU,GAAG,IAAI,CAAC,YAAY,CAAC,CAAC,GAAG,EAAE,GAAG,EAAE,EAAE;QAChD,IAAI,GAAG,CAAC,MAAM,KAAK,MAAM,EAAE,CAAC;YAC1B,GAAG,CAAC,SAAS,CAAC,GAAG,CAAC,CAAC,GAAG,EAAE,CAAC;YACzB,OAAO;QACT,CAAC;QAED,MAAM,MAAM,GAAa,EAAE,CAAC;QAC5B,GAAG,CAAC,EAAE,CAAC,MAAM,EAAE,CAAC,KAAa,EAAE,EAAE,CAAC,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC;QACtD,GAAG,CAAC,EAAE,CAAC,KAAK,EAAE,GAAG,EAAE;YACjB,MAAM,OAAO,GAAG,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC;YAEtC,IAAI,UAAU,EAAE,EAAE,CAAC;gBACjB,MAAM,SAAS,GAAG,GAAG,CAAC,OAAO,CAAC,qBAAqB,CAAC,CAAC;gBACrD,IAAI,OAAO,SAAS,KAAK,QAAQ,EAAE,CAAC;oBAClC,GAAG,CAAC,SAAS,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,mBAAmB,CAAC,CAAC;oBAC5C,OAAO;gBACT,CAAC;gBACD,IAAI,CAAC,mBAAmB,CAAC,SAAS,EAAE,OAAO,CAAC,EAAE,CAAC;oBAC7C,GAAG,CAAC,SAAS,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,mBAAmB,CAAC,CAAC;oBAC5C,OAAO;gBACT,CAAC;YACH,CAAC;YAED,IAAI,CAAC;gBACH,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC,CAAC;gBACnD,QAAQ,CAAC,KAAK,CAAC,CAAC;gBAChB,SAAS,CAAC,MAAM,CAAC,mBAAmB,CAAC,EAAE,GAAG,EAAE,kBAAkB,EAAE,CAAC,CAAC,KAAK,CAAC,GAAG,EAAE,GAAE,CAAC,CAAC,CAAC;YACpF,CAAC;YAAC,MAAM,CAAC;gBACP,GAAG,CAAC,SAAS,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,cAAc,CAAC,CAAC;gBACvC,OAAO;YACT,CAAC;YAED,GAAG,CAAC,SAAS,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;QAC/B,CAAC,CAAC,CAAC;IACL,CAAC,CAAC,CAAC;IAEH,UAAU,CAAC,MAAM,CAAC,IAAI,EAAE,GAAG,EAAE;QAC3B,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,4CAA4C,IAAI,IAAI,CAAC,CAAC;IAC7E,CAAC,CAAC,CAAC;AACL,CAAC"}
@@ -0,0 +1,13 @@
1
+ export interface WebhookEvent {
2
+ eventId: string;
3
+ event: string;
4
+ timestamp: Date;
5
+ resource: {
6
+ kind: string;
7
+ id: string;
8
+ };
9
+ data: Record<string, unknown>;
10
+ }
11
+ export declare function addEvent(event: WebhookEvent): void;
12
+ export declare function getEvents(): WebhookEvent[];
13
+ //# sourceMappingURL=store.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"store.d.ts","sourceRoot":"","sources":["../../src/webhooks/store.ts"],"names":[],"mappings":"AAAA,MAAM,WAAW,YAAY;IAC3B,OAAO,EAAE,MAAM,CAAC;IAChB,KAAK,EAAE,MAAM,CAAC;IACd,SAAS,EAAE,IAAI,CAAC;IAChB,QAAQ,EAAE;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,EAAE,EAAE,MAAM,CAAA;KAAE,CAAC;IACvC,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;CAC/B;AAKD,wBAAgB,QAAQ,CAAC,KAAK,EAAE,YAAY,GAAG,IAAI,CAGlD;AAED,wBAAgB,SAAS,IAAI,YAAY,EAAE,CAE1C"}
@@ -0,0 +1,11 @@
1
+ const MAX_EVENTS = 100;
2
+ const events = [];
3
+ export function addEvent(event) {
4
+ events.unshift(event);
5
+ if (events.length > MAX_EVENTS)
6
+ events.length = MAX_EVENTS;
7
+ }
8
+ export function getEvents() {
9
+ return [...events];
10
+ }
11
+ //# sourceMappingURL=store.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"store.js","sourceRoot":"","sources":["../../src/webhooks/store.ts"],"names":[],"mappings":"AAQA,MAAM,UAAU,GAAG,GAAG,CAAC;AACvB,MAAM,MAAM,GAAmB,EAAE,CAAC;AAElC,MAAM,UAAU,QAAQ,CAAC,KAAmB;IAC1C,MAAM,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC;IACtB,IAAI,MAAM,CAAC,MAAM,GAAG,UAAU;QAAE,MAAM,CAAC,MAAM,GAAG,UAAU,CAAC;AAC7D,CAAC;AAED,MAAM,UAAU,SAAS;IACvB,OAAO,CAAC,GAAG,MAAM,CAAC,CAAC;AACrB,CAAC"}
package/package.json ADDED
@@ -0,0 +1,45 @@
1
+ {
2
+ "name": "@pdfgate/mcp-server",
3
+ "version": "1.0.0",
4
+ "description": "PDFGate MCP Server",
5
+ "type": "module",
6
+ "homepage": "https://pdfgate.com",
7
+ "repository": {
8
+ "type": "git",
9
+ "url": "https://github.com/pdfgate/pdfgate-mcp-server.git"
10
+ },
11
+ "bugs": "https://github.com/pdfgate/pdfgate-mcp-server/issues",
12
+ "keywords": [
13
+ "pdfgate",
14
+ "pdf",
15
+ "mcp",
16
+ "model-context-protocol",
17
+ "pdf-generation",
18
+ "esignature",
19
+ "pdf-api"
20
+ ],
21
+ "bin": {
22
+ "pdfgate-mcp-server": "./dist/index.js"
23
+ },
24
+ "files": [
25
+ "dist",
26
+ "README.md"
27
+ ],
28
+ "scripts": {
29
+ "build": "tsc",
30
+ "start": "node dist/index.js",
31
+ "dev": "tsc --watch"
32
+ },
33
+ "dependencies": {
34
+ "@modelcontextprotocol/sdk": "^1.29.0",
35
+ "pdfgate": "^1.0.7",
36
+ "zod": "^3.24.0"
37
+ },
38
+ "devDependencies": {
39
+ "@types/node": "^22.0.0",
40
+ "typescript": "^5.8.0"
41
+ },
42
+ "engines": {
43
+ "node": ">=18.0.0"
44
+ }
45
+ }