@papermark/mcp-server 0.5.0 → 0.7.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.
- package/dist/{chunk-KSQL4UMS.js → chunk-YMSDUZ2I.js} +51 -5
- package/dist/chunk-YMSDUZ2I.js.map +1 -0
- package/dist/index.js +93 -8
- package/dist/index.js.map +1 -1
- package/dist/tools-contract.d.ts +62 -3
- package/dist/tools-contract.js +5 -1
- package/package.json +1 -1
- package/dist/chunk-KSQL4UMS.js.map +0 -1
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/index.ts","../src/tools.ts","../src/config.ts","../src/client.ts"],"sourcesContent":["import { McpServer } from \"@modelcontextprotocol/sdk/server/mcp.js\";\nimport { StdioServerTransport } from \"@modelcontextprotocol/sdk/server/stdio.js\";\n\nimport { registerTools } from \"./tools.js\";\n\nconst SERVER_INFO = {\n name: \"papermark-mcp\",\n version: \"0.1.0\",\n} as const;\n\nasync function main(): Promise<void> {\n const server = new McpServer(SERVER_INFO, { capabilities: { tools: {} } });\n registerTools(server);\n\n const transport = new StdioServerTransport();\n await server.connect(transport);\n}\n\nmain().catch((err) => {\n process.stderr.write(\n `[papermark-mcp] fatal: ${err instanceof Error ? err.stack ?? err.message : String(err)}\\n`,\n );\n process.exit(1);\n});\n","import { readFile, stat } from \"node:fs/promises\";\nimport { basename } from \"node:path\";\n\nimport type { McpServer } from \"@modelcontextprotocol/sdk/server/mcp.js\";\nimport { lookup as lookupMimeType } from \"mime-types\";\nimport { z } from \"zod\";\n\nimport { ApiError, AuthRequiredError, NetworkError, api } from \"./client.js\";\nimport {\n addDocumentVersionContract,\n attachDataroomDocumentContract,\n createDataroomContract,\n createDataroomFolderContract,\n createFolderContract,\n createLinkContract,\n deleteDataroomContract,\n deleteDataroomFolderContract,\n deleteDocumentContract,\n deleteFolderContract,\n deleteLinkContract,\n getDataroomAnalyticsContract,\n getDataroomContract,\n getDataroomFolderContract,\n getDocumentAnalyticsContract,\n getDocumentContract,\n getDocumentVersionContract,\n getFolderContract,\n getLinkAnalyticsContract,\n getLinkContract,\n getViewAnalyticsContract,\n getVisitorContract,\n listDataroomDocumentsContract,\n listDataroomFoldersContract,\n listDataroomsContract,\n listDocumentVersionsContract,\n listDocumentsContract,\n listFoldersContract,\n listLinksContract,\n listLinkViewsContract,\n listVisitorViewsContract,\n listVisitorsContract,\n moveDataroomFolderContract,\n moveFolderContract,\n promoteDocumentVersionContract,\n searchDataroomsContract,\n searchDocumentsContract,\n SHARED_TOOL_OUTPUT_SCHEMAS,\n documentOutputSchema,\n updateDataroomContract,\n updateDataroomFolderContract,\n updateDocumentContract,\n updateFolderContract,\n updateLinkContract,\n} from \"./tools-contract.js\";\n\ntype ToolResult = {\n content: Array<{ type: \"text\"; text: string }>;\n structuredContent?: Record<string, unknown>;\n isError?: boolean;\n};\n\nconst readTool = (openWorldHint = false) =>\n ({ readOnlyHint: true, destructiveHint: false, openWorldHint }) as const;\n\nconst writeTool = (openWorldHint = false) =>\n ({ readOnlyHint: false, destructiveHint: false, openWorldHint }) as const;\n\nconst destructiveTool = (openWorldHint = false) =>\n ({ readOnlyHint: false, destructiveHint: true, openWorldHint }) as const;\n\nconst TOOL_ANNOTATIONS: Record<\n string,\n { readOnlyHint?: boolean; destructiveHint?: boolean; openWorldHint?: boolean }\n> = {\n list_documents: readTool(),\n get_document: readTool(),\n search_documents: readTool(),\n upload_document: writeTool(true),\n create_link: writeTool(),\n list_links: readTool(),\n list_link_views: readTool(),\n list_datarooms: readTool(),\n search_datarooms: readTool(),\n get_dataroom: readTool(),\n create_dataroom: writeTool(),\n list_dataroom_documents: readTool(),\n list_visitors: readTool(),\n list_visitor_views: readTool(),\n get_document_analytics: readTool(),\n get_link_analytics: readTool(),\n get_dataroom_analytics: readTool(),\n get_view_analytics: readTool(),\n update_document: destructiveTool(),\n delete_document: destructiveTool(),\n list_document_versions: readTool(),\n get_document_version: readTool(),\n add_document_version: destructiveTool(true),\n promote_document_version: destructiveTool(),\n list_folders: readTool(),\n get_folder: readTool(),\n create_folder: writeTool(),\n update_folder: destructiveTool(),\n delete_folder: destructiveTool(),\n move_folder: destructiveTool(),\n get_link: readTool(),\n update_link: destructiveTool(),\n delete_link: destructiveTool(),\n update_dataroom: destructiveTool(),\n delete_dataroom: destructiveTool(),\n attach_dataroom_document: writeTool(),\n list_dataroom_folders: readTool(),\n get_dataroom_folder: readTool(),\n create_dataroom_folder: writeTool(),\n update_dataroom_folder: destructiveTool(),\n delete_dataroom_folder: destructiveTool(),\n move_dataroom_folder: destructiveTool(),\n get_visitor: readTool(),\n};\n\nconst TOOL_OUTPUT_SCHEMAS: Record<string, unknown> = {\n ...SHARED_TOOL_OUTPUT_SCHEMAS,\n upload_document: documentOutputSchema,\n};\n\nfunction toStructuredContent(result: unknown): Record<string, unknown> {\n if (result && typeof result === \"object\" && !Array.isArray(result)) {\n return result as Record<string, unknown>;\n }\n return { result };\n}\n\nasync function run<T>(\n fn: () => Promise<T>,\n label: string,\n): Promise<ToolResult> {\n try {\n const result = await fn();\n const structuredContent = toStructuredContent(result);\n return {\n structuredContent,\n content: [\n { type: \"text\", text: JSON.stringify(structuredContent, null, 2) },\n ],\n };\n } catch (err) {\n if (err instanceof ApiError) {\n // Field-level validation detail from the v1 API (e.g. a 422's zod\n // `.flatten()` naming the offending field). Without this the caller\n // only sees the generic top-level message and can't self-correct.\n const detail =\n err.details !== undefined && err.details !== null\n ? `\\nDetails: ${JSON.stringify(err.details)}`\n : \"\";\n const hint = err.docUrl ? `\\nDocs: ${err.docUrl}` : \"\";\n return {\n isError: true,\n content: [\n {\n type: \"text\",\n text: `${label} failed (${err.status} ${err.code}): ${err.message}${detail}${hint}`,\n },\n ],\n };\n }\n if (err instanceof NetworkError) {\n return {\n isError: true,\n content: [{ type: \"text\", text: `${label} failed: ${err.message}` }],\n };\n }\n if (err instanceof AuthRequiredError) {\n return { isError: true, content: [{ type: \"text\", text: err.message }] };\n }\n return {\n isError: true,\n content: [\n {\n type: \"text\",\n text: `${label} failed: ${err instanceof Error ? err.message : String(err)}`,\n },\n ],\n };\n }\n}\n\nfunction guessContentType(fileName: string): string {\n return lookupMimeType(fileName) || \"application/octet-stream\";\n}\n\nfunction filenameFromUrl(rawUrl: string): string {\n try {\n const u = new URL(rawUrl);\n const last = u.pathname.split(\"/\").filter(Boolean).pop();\n if (!last) return \"document\";\n return decodeURIComponent(last);\n } catch {\n return \"document\";\n }\n}\n\nexport function registerTools(server: McpServer): void {\n const baseRegisterTool = server.registerTool.bind(server);\n server.registerTool = ((\n name: string,\n config: { annotations?: object; outputSchema?: unknown },\n cb: unknown,\n ) => {\n const annotations = TOOL_ANNOTATIONS[name];\n if (!annotations) {\n throw new Error(`MCP tool \"${name}\" has no annotations entry`);\n }\n const outputSchema = TOOL_OUTPUT_SCHEMAS[name];\n if (!outputSchema) {\n throw new Error(`MCP tool \"${name}\" has no output schema entry`);\n }\n return baseRegisterTool(\n name,\n {\n ...config,\n annotations: { ...annotations, ...config.annotations },\n outputSchema: config.outputSchema ?? outputSchema,\n } as never,\n cb as never,\n );\n }) as unknown as typeof server.registerTool;\n\n server.registerTool(\n listDocumentsContract.name,\n {\n title: listDocumentsContract.title,\n description: listDocumentsContract.description,\n inputSchema: listDocumentsContract.inputSchema,\n },\n async (args) =>\n run(async () => {\n const list = await api.listDocuments({\n limit: args.limit,\n cursor: args.cursor,\n query: args.query,\n });\n return {\n documents: list.data,\n next_cursor: list.next_cursor,\n };\n }, \"list_documents\"),\n );\n\n server.registerTool(\n getDocumentContract.name,\n {\n title: getDocumentContract.title,\n description: getDocumentContract.description,\n inputSchema: getDocumentContract.inputSchema,\n },\n async (args) =>\n run(() => api.getDocument(args.document_id), \"get_document\"),\n );\n\n server.registerTool(\n searchDocumentsContract.name,\n {\n title: searchDocumentsContract.title,\n description: searchDocumentsContract.description,\n inputSchema: searchDocumentsContract.inputSchema,\n },\n async (args) =>\n run(async () => {\n const list = await api.searchDocuments(args.query, args.limit);\n return {\n documents: list.data,\n next_cursor: list.next_cursor,\n };\n }, \"search_documents\"),\n );\n\n // upload_document stays local to the stdio transport because it can read\n // the user's filesystem. The remote HTTP adapter exposes a stripped-down\n // variant that only accepts source_url.\n server.registerTool(\n \"upload_document\",\n {\n title: \"Upload a document\",\n description: `Upload a document to Papermark from a local file path OR a public HTTPS URL.\n\nWORKFLOW:\n(1) Resolve the source: the user must name either a \\`file_path\\` (local filesystem — stdio mode only) OR a \\`source_url\\` (public HTTPS). Never guess a path; if the user attached a file in chat but didn't give a local path, ASK them to save it and provide the path.\n(2) Confirm the target \\`name\\` if the user wants something other than the filename.\n(3) If the user wants a share link in the same breath, set \\`create_link: true\\` — otherwise follow up with \\`create_link\\` so you can set password/expiry/email gating explicitly.\n\nDon't upload any file the user didn't explicitly point at. Requires scope \\`documents.write\\`.`,\n inputSchema: {\n file_path: z\n .string()\n .optional()\n .describe(\n \"Absolute local path — only works when the MCP server runs on the same machine as the file (stdio mode)\",\n ),\n source_url: z\n .string()\n .url()\n .refine((s) => s.startsWith(\"https://\"), {\n message:\n \"source_url must use https:// (http is rejected by the API)\",\n })\n .optional()\n .describe(\n \"Public HTTPS URL the server should fetch (alternative to file_path)\",\n ),\n name: z\n .string()\n .optional()\n .describe(\"Display name; defaults to the filename\"),\n content_type: z\n .string()\n .optional()\n .describe(\"MIME type; inferred from extension when omitted\"),\n folder_id: z\n .string()\n .optional()\n .describe(\n \"Destination folder id (created beforehand via `create_folder`). Omit for the team-library root.\",\n ),\n create_link: z\n .boolean()\n .optional()\n .describe(\"Create a default share link after upload\"),\n },\n },\n async (args) =>\n run(async () => {\n if (!args.file_path && !args.source_url) {\n throw new Error(\n \"Provide either file_path (local) or source_url (remote).\",\n );\n }\n if (args.file_path && args.source_url) {\n throw new Error(\"Provide only one of file_path or source_url.\");\n }\n\n if (args.source_url) {\n // Parse via URL so query strings and fragments don't end up in the\n // inferred filename — `https://example.com/x.pdf?token=abc` should\n // be `x.pdf`, not `x.pdf?token=abc`.\n const name = args.name ?? filenameFromUrl(args.source_url);\n const doc = await api.createDocument({\n name,\n source_url: args.source_url,\n folder_id: args.folder_id,\n create_link: args.create_link,\n });\n return { document: doc };\n }\n\n const filePath = args.file_path!;\n const stats = await stat(filePath);\n const fileName = basename(filePath);\n const contentType = args.content_type ?? guessContentType(fileName);\n const body = await readFile(filePath);\n\n const presigned = await api.uploadUrl({\n file_name: fileName,\n content_type: contentType,\n content_length: stats.size,\n });\n\n // Bound the PUT so a hung S3 / Vercel Blob connection can't park the\n // agent loop forever. 5 minutes is generous — a 200MB upload on a\n // slow link still fits — but bounded enough that a truly stuck\n // connection surfaces as a typed error instead of an indefinite wait.\n const putController = new AbortController();\n const putTimer = setTimeout(() => putController.abort(), 5 * 60_000);\n let put: Response;\n try {\n put = await fetch(presigned.upload_url, {\n method: \"PUT\",\n headers: presigned.required_headers,\n body,\n signal: putController.signal,\n });\n } catch (err) {\n if (\n putController.signal.aborted ||\n (err instanceof Error && err.name === \"AbortError\")\n ) {\n throw new Error(\n \"Storage PUT aborted: presigned upload exceeded 5 minute timeout. The connection to object storage stalled — retry with a smaller file or a faster network.\",\n );\n }\n throw err;\n } finally {\n clearTimeout(putTimer);\n }\n if (!put.ok) {\n throw new Error(\n `Storage PUT failed: HTTP ${put.status} ${put.statusText}`,\n );\n }\n\n const doc = await api.createDocument({\n name: args.name ?? fileName,\n upload_id: presigned.upload_id,\n folder_id: args.folder_id,\n create_link: args.create_link,\n });\n return { document: doc };\n }, \"upload_document\"),\n );\n\n server.registerTool(\n createLinkContract.name,\n {\n title: createLinkContract.title,\n description: createLinkContract.description,\n inputSchema: createLinkContract.inputSchema,\n },\n async (args) =>\n run(async () => {\n const hasDoc = Boolean(args.document_id);\n const hasDr = Boolean(args.dataroom_id);\n if (!hasDoc && !hasDr) {\n throw new Error(\"Provide document_id or dataroom_id.\");\n }\n if (hasDoc && hasDr) {\n throw new Error(\n \"Provide exactly one of document_id or dataroom_id, not both.\",\n );\n }\n const link = await api.createLink(args);\n return { link };\n }, \"create_link\"),\n );\n\n server.registerTool(\n listLinksContract.name,\n {\n title: listLinksContract.title,\n description: listLinksContract.description,\n inputSchema: listLinksContract.inputSchema,\n },\n async (args) =>\n run(async () => {\n const list = await api.listLinks(args);\n return {\n links: list.data,\n next_cursor: list.next_cursor,\n };\n }, \"list_links\"),\n );\n\n server.registerTool(\n listLinkViewsContract.name,\n {\n title: listLinkViewsContract.title,\n description: listLinkViewsContract.description,\n inputSchema: listLinkViewsContract.inputSchema,\n },\n async (args) =>\n run(async () => {\n const list = await api.listViews(args.link_id, {\n limit: args.limit,\n cursor: args.cursor,\n });\n return {\n views: list.data,\n next_cursor: list.next_cursor,\n };\n }, \"list_link_views\"),\n );\n\n // ─── Datarooms ───────────────────────────────────────────────────────\n server.registerTool(\n listDataroomsContract.name,\n {\n title: listDataroomsContract.title,\n description: listDataroomsContract.description,\n inputSchema: listDataroomsContract.inputSchema,\n },\n async (args) =>\n run(async () => {\n const list = await api.listDatarooms(args);\n return { datarooms: list.data, next_cursor: list.next_cursor };\n }, \"list_datarooms\"),\n );\n\n server.registerTool(\n searchDataroomsContract.name,\n {\n title: searchDataroomsContract.title,\n description: searchDataroomsContract.description,\n inputSchema: searchDataroomsContract.inputSchema,\n },\n async (args) =>\n run(async () => {\n const list = await api.listDatarooms({\n query: args.query,\n limit: args.limit ?? 10,\n });\n return { datarooms: list.data, next_cursor: list.next_cursor };\n }, \"search_datarooms\"),\n );\n\n server.registerTool(\n getDataroomContract.name,\n {\n title: getDataroomContract.title,\n description: getDataroomContract.description,\n inputSchema: getDataroomContract.inputSchema,\n },\n async (args) =>\n run(() => api.getDataroom(args.dataroom_id), \"get_dataroom\"),\n );\n\n server.registerTool(\n createDataroomContract.name,\n {\n title: createDataroomContract.title,\n description: createDataroomContract.description,\n inputSchema: createDataroomContract.inputSchema,\n },\n async (args) =>\n run(async () => {\n const dr = await api.createDataroom(args);\n return { dataroom: dr };\n }, \"create_dataroom\"),\n );\n\n server.registerTool(\n listDataroomDocumentsContract.name,\n {\n title: listDataroomDocumentsContract.title,\n description: listDataroomDocumentsContract.description,\n inputSchema: listDataroomDocumentsContract.inputSchema,\n },\n async (args) =>\n run(async () => {\n const list = await api.listDataroomDocuments(args.dataroom_id, {\n limit: args.limit,\n cursor: args.cursor,\n folder_id: args.folder_id,\n });\n return { documents: list.data, next_cursor: list.next_cursor };\n }, \"list_dataroom_documents\"),\n );\n\n // ─── Visitors ────────────────────────────────────────────────────────\n server.registerTool(\n listVisitorsContract.name,\n {\n title: listVisitorsContract.title,\n description: listVisitorsContract.description,\n inputSchema: listVisitorsContract.inputSchema,\n },\n async (args) =>\n run(async () => {\n const list = await api.listVisitors(args);\n return { visitors: list.data, next_cursor: list.next_cursor };\n }, \"list_visitors\"),\n );\n\n server.registerTool(\n listVisitorViewsContract.name,\n {\n title: listVisitorViewsContract.title,\n description: listVisitorViewsContract.description,\n inputSchema: listVisitorViewsContract.inputSchema,\n },\n async (args) =>\n run(async () => {\n const list = await api.listVisitorViews(args.visitor_id, {\n limit: args.limit,\n cursor: args.cursor,\n });\n return { views: list.data, next_cursor: list.next_cursor };\n }, \"list_visitor_views\"),\n );\n\n // ─── Analytics ───────────────────────────────────────────────────────\n server.registerTool(\n getDocumentAnalyticsContract.name,\n {\n title: getDocumentAnalyticsContract.title,\n description: getDocumentAnalyticsContract.description,\n inputSchema: getDocumentAnalyticsContract.inputSchema,\n },\n async (args) =>\n run(\n () =>\n api.documentAnalytics(args.document_id, {\n since: args.since,\n until: args.until,\n }),\n \"get_document_analytics\",\n ),\n );\n\n server.registerTool(\n getLinkAnalyticsContract.name,\n {\n title: getLinkAnalyticsContract.title,\n description: getLinkAnalyticsContract.description,\n inputSchema: getLinkAnalyticsContract.inputSchema,\n },\n async (args) =>\n run(\n () =>\n api.linkAnalytics(args.link_id, {\n since: args.since,\n until: args.until,\n }),\n \"get_link_analytics\",\n ),\n );\n\n server.registerTool(\n getDataroomAnalyticsContract.name,\n {\n title: getDataroomAnalyticsContract.title,\n description: getDataroomAnalyticsContract.description,\n inputSchema: getDataroomAnalyticsContract.inputSchema,\n },\n async (args) =>\n run(\n () =>\n api.dataroomAnalytics(args.dataroom_id, {\n since: args.since,\n until: args.until,\n }),\n \"get_dataroom_analytics\",\n ),\n );\n\n server.registerTool(\n getViewAnalyticsContract.name,\n {\n title: getViewAnalyticsContract.title,\n description: getViewAnalyticsContract.description,\n inputSchema: getViewAnalyticsContract.inputSchema,\n },\n async (args) =>\n run(() => api.viewAnalytics(args.view_id), \"get_view_analytics\"),\n );\n\n // ─── Document mutations ──────────────────────────────────────────────\n server.registerTool(\n updateDocumentContract.name,\n {\n title: updateDocumentContract.title,\n description: updateDocumentContract.description,\n inputSchema: updateDocumentContract.inputSchema,\n },\n async (args) =>\n run(async () => {\n const body: { name?: string; folder_id?: string | null } = {};\n if (args.name !== undefined) body.name = args.name;\n if (args.folder_id !== undefined) body.folder_id = args.folder_id;\n if (Object.keys(body).length === 0) {\n throw new Error(\"Provide at least one of `name` or `folder_id`.\");\n }\n const doc = await api.updateDocument(args.document_id, body);\n return { document: doc };\n }, \"update_document\"),\n );\n\n server.registerTool(\n deleteDocumentContract.name,\n {\n title: deleteDocumentContract.title,\n description: deleteDocumentContract.description,\n inputSchema: deleteDocumentContract.inputSchema,\n },\n async (args) =>\n run(async () => {\n return await api.deleteDocument(args.document_id);\n }, \"delete_document\"),\n );\n\n // ─── Document versions ───────────────────────────────────────────────\n server.registerTool(\n listDocumentVersionsContract.name,\n {\n title: listDocumentVersionsContract.title,\n description: listDocumentVersionsContract.description,\n inputSchema: listDocumentVersionsContract.inputSchema,\n },\n async (args) =>\n run(async () => {\n const list = await api.listDocumentVersions(args.document_id);\n return { versions: list.data };\n }, \"list_document_versions\"),\n );\n\n server.registerTool(\n getDocumentVersionContract.name,\n {\n title: getDocumentVersionContract.title,\n description: getDocumentVersionContract.description,\n inputSchema: getDocumentVersionContract.inputSchema,\n },\n async (args) =>\n run(\n () => api.getDocumentVersion(args.document_id, args.version_id),\n \"get_document_version\",\n ),\n );\n\n server.registerTool(\n addDocumentVersionContract.name,\n {\n title: addDocumentVersionContract.title,\n description: addDocumentVersionContract.description,\n inputSchema: addDocumentVersionContract.inputSchema,\n },\n async (args) =>\n run(async () => {\n const v = await api.addDocumentVersion(args.document_id, {\n source_url: args.source_url,\n });\n return { version: v };\n }, \"add_document_version\"),\n );\n\n server.registerTool(\n promoteDocumentVersionContract.name,\n {\n title: promoteDocumentVersionContract.title,\n description: promoteDocumentVersionContract.description,\n inputSchema: promoteDocumentVersionContract.inputSchema,\n },\n async (args) =>\n run(async () => {\n const v = await api.promoteDocumentVersion(\n args.document_id,\n args.version_id,\n );\n return { version: v };\n }, \"promote_document_version\"),\n );\n\n // ─── Folders ─────────────────────────────────────────────────────────\n server.registerTool(\n listFoldersContract.name,\n {\n title: listFoldersContract.title,\n description: listFoldersContract.description,\n inputSchema: listFoldersContract.inputSchema,\n },\n async (args) =>\n run(async () => {\n const list = await api.listFolders(args);\n return { folders: list.data, next_cursor: list.next_cursor };\n }, \"list_folders\"),\n );\n\n server.registerTool(\n getFolderContract.name,\n {\n title: getFolderContract.title,\n description: getFolderContract.description,\n inputSchema: getFolderContract.inputSchema,\n },\n async (args) => run(() => api.getFolder(args.folder_id), \"get_folder\"),\n );\n\n server.registerTool(\n createFolderContract.name,\n {\n title: createFolderContract.title,\n description: createFolderContract.description,\n inputSchema: createFolderContract.inputSchema,\n },\n async (args) =>\n run(async () => {\n const f = await api.createFolder(args);\n return { folder: f };\n }, \"create_folder\"),\n );\n\n server.registerTool(\n updateFolderContract.name,\n {\n title: updateFolderContract.title,\n description: updateFolderContract.description,\n inputSchema: updateFolderContract.inputSchema,\n },\n async (args) =>\n run(async () => {\n const body: Parameters<typeof api.updateFolder>[1] = {};\n if (args.name !== undefined) body.name = args.name;\n if (args.icon !== undefined) body.icon = args.icon;\n if (args.color !== undefined) body.color = args.color;\n if (Object.keys(body).length === 0) {\n throw new Error(\"Provide at least one of `name`, `icon`, `color`.\");\n }\n const f = await api.updateFolder(args.folder_id, body);\n return { folder: f };\n }, \"update_folder\"),\n );\n\n server.registerTool(\n deleteFolderContract.name,\n {\n title: deleteFolderContract.title,\n description: deleteFolderContract.description,\n inputSchema: deleteFolderContract.inputSchema,\n },\n async (args) =>\n run(async () => {\n return await api.deleteFolder(args.folder_id, {\n cascade: args.cascade,\n });\n }, \"delete_folder\"),\n );\n\n server.registerTool(\n moveFolderContract.name,\n {\n title: moveFolderContract.title,\n description: moveFolderContract.description,\n inputSchema: moveFolderContract.inputSchema,\n },\n async (args) =>\n run(async () => {\n const f = await api.moveFolder(args.folder_id, {\n parent_id: args.parent_id,\n });\n return { folder: f };\n }, \"move_folder\"),\n );\n\n // ─── Link mutations ──────────────────────────────────────────────────\n server.registerTool(\n getLinkContract.name,\n {\n title: getLinkContract.title,\n description: getLinkContract.description,\n inputSchema: getLinkContract.inputSchema,\n },\n async (args) =>\n run(async () => {\n const link = await api.getLink(args.link_id);\n return { link };\n }, \"get_link\"),\n );\n\n server.registerTool(\n updateLinkContract.name,\n {\n title: updateLinkContract.title,\n description: updateLinkContract.description,\n inputSchema: updateLinkContract.inputSchema,\n },\n async (args) =>\n run(async () => {\n const { link_id, ...rest } = args;\n if (Object.keys(rest).length === 0) {\n throw new Error(\"Provide at least one field to update.\");\n }\n const link = await api.updateLink(link_id, rest);\n return { link };\n }, \"update_link\"),\n );\n\n server.registerTool(\n deleteLinkContract.name,\n {\n title: deleteLinkContract.title,\n description: deleteLinkContract.description,\n inputSchema: deleteLinkContract.inputSchema,\n },\n async (args) =>\n run(async () => {\n return await api.deleteLink(args.link_id);\n }, \"delete_link\"),\n );\n\n // ─── Dataroom mutations ──────────────────────────────────────────────\n server.registerTool(\n updateDataroomContract.name,\n {\n title: updateDataroomContract.title,\n description: updateDataroomContract.description,\n inputSchema: updateDataroomContract.inputSchema,\n },\n async (args) =>\n run(async () => {\n const { dataroom_id, ...rest } = args;\n if (Object.keys(rest).length === 0) {\n throw new Error(\"Provide at least one field to update.\");\n }\n const dr = await api.updateDataroom(dataroom_id, rest);\n return { dataroom: dr };\n }, \"update_dataroom\"),\n );\n\n server.registerTool(\n deleteDataroomContract.name,\n {\n title: deleteDataroomContract.title,\n description: deleteDataroomContract.description,\n inputSchema: deleteDataroomContract.inputSchema,\n },\n async (args) =>\n run(async () => {\n return await api.deleteDataroom(args.dataroom_id);\n }, \"delete_dataroom\"),\n );\n\n server.registerTool(\n attachDataroomDocumentContract.name,\n {\n title: attachDataroomDocumentContract.title,\n description: attachDataroomDocumentContract.description,\n inputSchema: attachDataroomDocumentContract.inputSchema,\n },\n async (args) =>\n run(async () => {\n const item = await api.attachDataroomDocument(args.dataroom_id, {\n document_id: args.document_id,\n folder_id: args.folder_id,\n });\n return { item };\n }, \"attach_dataroom_document\"),\n );\n\n // ─── Dataroom folders ────────────────────────────────────────────────\n server.registerTool(\n listDataroomFoldersContract.name,\n {\n title: listDataroomFoldersContract.title,\n description: listDataroomFoldersContract.description,\n inputSchema: listDataroomFoldersContract.inputSchema,\n },\n async (args) =>\n run(async () => {\n const list = await api.listDataroomFolders(args.dataroom_id, {\n parent_id: args.parent_id,\n limit: args.limit,\n cursor: args.cursor,\n });\n return { folders: list.data, next_cursor: list.next_cursor };\n }, \"list_dataroom_folders\"),\n );\n\n server.registerTool(\n getDataroomFolderContract.name,\n {\n title: getDataroomFolderContract.title,\n description: getDataroomFolderContract.description,\n inputSchema: getDataroomFolderContract.inputSchema,\n },\n async (args) =>\n run(\n () => api.getDataroomFolder(args.dataroom_id, args.folder_id),\n \"get_dataroom_folder\",\n ),\n );\n\n server.registerTool(\n createDataroomFolderContract.name,\n {\n title: createDataroomFolderContract.title,\n description: createDataroomFolderContract.description,\n inputSchema: createDataroomFolderContract.inputSchema,\n },\n async (args) =>\n run(async () => {\n const { dataroom_id, ...body } = args;\n const f = await api.createDataroomFolder(dataroom_id, body);\n return { folder: f };\n }, \"create_dataroom_folder\"),\n );\n\n server.registerTool(\n updateDataroomFolderContract.name,\n {\n title: updateDataroomFolderContract.title,\n description: updateDataroomFolderContract.description,\n inputSchema: updateDataroomFolderContract.inputSchema,\n },\n async (args) =>\n run(async () => {\n const body: Parameters<typeof api.updateDataroomFolder>[2] = {};\n if (args.name !== undefined) body.name = args.name;\n if (args.icon !== undefined) body.icon = args.icon;\n if (args.color !== undefined) body.color = args.color;\n if (Object.keys(body).length === 0) {\n throw new Error(\"Provide at least one of `name`, `icon`, `color`.\");\n }\n const f = await api.updateDataroomFolder(\n args.dataroom_id,\n args.folder_id,\n body,\n );\n return { folder: f };\n }, \"update_dataroom_folder\"),\n );\n\n server.registerTool(\n deleteDataroomFolderContract.name,\n {\n title: deleteDataroomFolderContract.title,\n description: deleteDataroomFolderContract.description,\n inputSchema: deleteDataroomFolderContract.inputSchema,\n },\n async (args) =>\n run(async () => {\n return await api.deleteDataroomFolder(\n args.dataroom_id,\n args.folder_id,\n { cascade: args.cascade },\n );\n }, \"delete_dataroom_folder\"),\n );\n\n server.registerTool(\n moveDataroomFolderContract.name,\n {\n title: moveDataroomFolderContract.title,\n description: moveDataroomFolderContract.description,\n inputSchema: moveDataroomFolderContract.inputSchema,\n },\n async (args) =>\n run(async () => {\n const f = await api.moveDataroomFolder(\n args.dataroom_id,\n args.folder_id,\n { parent_id: args.parent_id },\n );\n return { folder: f };\n }, \"move_dataroom_folder\"),\n );\n\n // ─── Visitors ────────────────────────────────────────────────────────\n server.registerTool(\n getVisitorContract.name,\n {\n title: getVisitorContract.title,\n description: getVisitorContract.description,\n inputSchema: getVisitorContract.inputSchema,\n },\n async (args) => run(() => api.getVisitor(args.visitor_id), \"get_visitor\"),\n );\n}\n","const DEFAULT_API_URL = \"https://api.papermark.com\";\n\nexport function getToken(): string | undefined {\n return process.env.PAPERMARK_TOKEN?.trim() || undefined;\n}\n\nexport function getApiUrl(): string {\n return process.env.PAPERMARK_API_URL?.trim() || DEFAULT_API_URL;\n}\n","import { getApiUrl, getToken } from \"./config.js\";\n\nexport interface ApiErrorBody {\n error: {\n code: string;\n message: string;\n doc_url?: string;\n details?: unknown;\n };\n}\n\nexport class ApiError extends Error {\n code: string;\n status: number;\n docUrl?: string;\n details?: unknown;\n\n constructor(status: number, body: ApiErrorBody[\"error\"] | string) {\n const message = typeof body === \"string\" ? body : body.message;\n super(message);\n this.status = status;\n if (typeof body === \"string\") {\n this.code = \"unknown\";\n } else {\n this.code = body.code;\n this.docUrl = body.doc_url;\n this.details = body.details;\n }\n }\n}\n\nexport class AuthRequiredError extends Error {\n constructor() {\n super(\n \"No API token configured. Set PAPERMARK_TOKEN in the MCP server env (get one from papermark.com/settings/tokens).\",\n );\n this.name = \"AuthRequiredError\";\n }\n}\n\nexport class NetworkError extends Error {\n url: string;\n cause: unknown;\n constructor(url: string, cause: unknown) {\n const reason = extractNetworkReason(cause);\n super(`Network request to ${url} failed: ${reason}`);\n this.name = \"NetworkError\";\n this.url = url;\n this.cause = cause;\n }\n}\n\nfunction extractNetworkReason(err: unknown): string {\n if (err && typeof err === \"object\" && \"cause\" in err) {\n const c = (err as { cause: unknown }).cause;\n if (c && typeof c === \"object\") {\n const code = (c as { code?: string }).code;\n const msg = (c as { message?: string }).message;\n if (code || msg) return `${code ?? \"\"}${code && msg ? \" — \" : \"\"}${msg ?? \"\"}`.trim();\n }\n }\n if (err instanceof Error) return err.message;\n return String(err);\n}\n\ninterface RequestOptions {\n method?: string;\n body?: unknown;\n query?: Record<string, string | number | undefined>;\n anonymous?: boolean;\n headers?: Record<string, string>;\n /** Override the token for this call (used by OAuth transport layer). */\n token?: string;\n /** Per-request timeout in ms; defaults to DEFAULT_TIMEOUT_MS. */\n timeout?: number;\n}\n\n// 60s is generous for v1 endpoints (most return in <1s) but covers the slow\n// Tinybird-backed analytics calls that sometimes take 5-10s on cold caches.\nconst DEFAULT_TIMEOUT_MS = 60_000;\n\nfunction buildUrl(path: string, query?: RequestOptions[\"query\"]): string {\n const base = getApiUrl().replace(/\\/$/, \"\");\n let fullPath = path.startsWith(\"/\") ? path : `/${path}`;\n if (base.endsWith(\"/api\") && fullPath.startsWith(\"/api/\")) {\n fullPath = fullPath.slice(4);\n }\n const url = new URL(base + fullPath);\n if (query) {\n for (const [k, v] of Object.entries(query)) {\n if (v !== undefined && v !== null && v !== \"\") {\n url.searchParams.set(k, String(v));\n }\n }\n }\n return url.toString();\n}\n\nexport async function request<T = unknown>(\n path: string,\n opts: RequestOptions = {},\n): Promise<T> {\n const headers: Record<string, string> = {\n Accept: \"application/json\",\n ...(opts.headers ?? {}),\n };\n if (!opts.anonymous) {\n const token = opts.token ?? getToken();\n if (!token) throw new AuthRequiredError();\n headers.Authorization = `Bearer ${token}`;\n }\n let body: BodyInit | undefined;\n if (opts.body !== undefined) {\n if (opts.body instanceof Uint8Array || opts.body instanceof ArrayBuffer) {\n body = opts.body as BodyInit;\n } else {\n body = JSON.stringify(opts.body);\n headers[\"Content-Type\"] = \"application/json\";\n }\n }\n\n const url = buildUrl(path, opts.query);\n // Time out stalled upstream connections so an MCP tool call doesn't hang\n // the agent loop. AbortError surfaces through the same NetworkError path\n // as DNS / TLS failures so callers see one error type for \"the request\n // never produced a response\".\n const controller = new AbortController();\n const timeoutMs = opts.timeout ?? DEFAULT_TIMEOUT_MS;\n const timer = setTimeout(() => controller.abort(), timeoutMs);\n let res: Response;\n try {\n res = await fetch(url, {\n method: opts.method ?? (opts.body ? \"POST\" : \"GET\"),\n headers,\n body,\n signal: controller.signal,\n });\n } catch (err) {\n if (\n controller.signal.aborted ||\n (err instanceof Error && err.name === \"AbortError\")\n ) {\n throw new NetworkError(\n url,\n new Error(`Request exceeded ${timeoutMs}ms timeout`),\n );\n }\n throw new NetworkError(url, err);\n } finally {\n clearTimeout(timer);\n }\n\n if (res.status === 204) return undefined as T;\n\n const text = await res.text();\n const parsed = text ? safeParseJson(text) : null;\n\n if (!res.ok) {\n if (parsed && typeof parsed === \"object\" && \"error\" in parsed) {\n throw new ApiError(res.status, (parsed as ApiErrorBody).error);\n }\n const looksLikeHtml = text.trimStart().toLowerCase().startsWith(\"<\");\n const msg = looksLikeHtml\n ? `HTTP ${res.status} (server returned HTML, not JSON — is the API reachable?)`\n : text || `HTTP ${res.status}`;\n throw new ApiError(res.status, msg);\n }\n\n return (parsed as T) ?? (undefined as T);\n}\n\nfunction safeParseJson(s: string): unknown {\n try {\n return JSON.parse(s);\n } catch {\n return null;\n }\n}\n\nexport interface PublicDocument {\n id: string;\n object: \"document\";\n name: string;\n type: string | null;\n content_type: string | null;\n num_pages: number | null;\n folder_id: string | null;\n created: string;\n updated_at: string;\n}\n\nexport interface PublicDocumentVersion {\n id: string;\n object: \"document_version\";\n version_number: number;\n is_primary: boolean;\n type: string | null;\n content_type: string | null;\n num_pages: number | null;\n file_size: number | null;\n created: string;\n updated_at: string;\n}\n\nexport interface DocumentVersionList {\n data: PublicDocumentVersion[];\n}\n\nexport type FolderIcon =\n | \"folder\"\n | \"folder-open\"\n | \"briefcase\"\n | \"archive\"\n | \"box\"\n | \"file\"\n | \"book\"\n | \"bookmark\"\n | \"star\"\n | \"heart\"\n | \"lock\"\n | \"shield\"\n | \"users\"\n | \"settings\"\n | \"tag\"\n | \"layers\"\n | \"globe\"\n | \"home\"\n | \"mail\"\n | \"image\"\n | \"video\"\n | \"music\"\n | \"palette\"\n | \"pen-tool\"\n | \"lightbulb\"\n | \"zap\"\n | \"wrench\"\n | \"sparkles\"\n | \"cloud\"\n | \"flag\"\n | \"award\"\n | \"flame\"\n | \"bell\"\n | \"sun\"\n | \"hash\";\n\nexport type FolderColor =\n | \"gray\"\n | \"red\"\n | \"orange\"\n | \"yellow\"\n | \"green\"\n | \"blue\"\n | \"black\";\n\nexport interface PublicFolder {\n id: string;\n object: \"folder\";\n name: string;\n parent_id: string | null;\n path: string;\n icon: string | null;\n color: string | null;\n document_count: number;\n child_folder_count: number;\n created: string;\n updated_at: string;\n}\n\nexport interface FolderList {\n data: PublicFolder[];\n next_cursor: string | null;\n}\n\nexport interface PublicDataroomFolder {\n id: string;\n object: \"dataroom_folder\";\n name: string;\n parent_id: string | null;\n path: string;\n icon: string | null;\n color: string | null;\n document_count: number;\n child_folder_count: number;\n order_index: number | null;\n created: string;\n updated_at: string;\n}\n\nexport interface DataroomFolderList {\n data: PublicDataroomFolder[];\n next_cursor: string | null;\n}\n\nexport interface DocumentList {\n data: PublicDocument[];\n next_cursor: string | null;\n}\n\nexport interface UploadUrlResponse {\n upload_url: string;\n upload_id: string;\n required_headers: Record<string, string>;\n expires_at: string;\n}\n\nexport type WatermarkPosition =\n | \"top-left\"\n | \"top-center\"\n | \"top-right\"\n | \"middle-left\"\n | \"middle-center\"\n | \"middle-right\"\n | \"bottom-left\"\n | \"bottom-center\"\n | \"bottom-right\";\n\nexport type WatermarkRotation = 0 | 30 | 45 | 90 | 180;\n\nexport interface WatermarkConfig {\n text: string;\n is_tiled: boolean;\n position: WatermarkPosition;\n rotation: WatermarkRotation;\n color: string;\n font_size: number;\n opacity: number;\n}\n\nexport interface PublicLink {\n id: string;\n object: \"link\";\n name: string | null;\n target_type: \"document\" | \"dataroom\";\n document_id: string | null;\n dataroom_id: string | null;\n url: string;\n domain: string | null;\n slug: string | null;\n expires_at: string | null;\n is_password_protected: boolean;\n email_protected: boolean;\n email_authenticated: boolean;\n allow_download: boolean;\n allow_list: string[];\n deny_list: string[];\n enable_watermark: boolean;\n watermark_config: WatermarkConfig | null;\n enable_feedback: boolean;\n enable_screenshot_protection: boolean;\n enable_confidential_view: boolean;\n created: string;\n updated_at: string;\n}\n\nexport interface LinkList {\n data: PublicLink[];\n next_cursor: string | null;\n}\n\nexport interface PublicView {\n id: string;\n object: \"view\";\n link_id: string | null;\n document_id: string | null;\n dataroom_id: string | null;\n viewer_email: string | null;\n view_type: string | null;\n viewed_at: string;\n downloaded_at: string | null;\n download_type: string | null;\n}\n\nexport interface ViewList {\n data: PublicView[];\n next_cursor: string | null;\n}\n\nexport interface UpdateDocumentBody {\n name?: string;\n folder_id?: string | null;\n}\n\nexport interface UpdateLinkBody {\n name?: string;\n expires_at?: string | null;\n password?: string | null;\n email_protected?: boolean;\n email_authenticated?: boolean;\n allow_download?: boolean;\n allow_list?: string[];\n deny_list?: string[];\n enable_watermark?: boolean;\n watermark_config?: WatermarkConfig | null;\n enable_screenshot_protection?: boolean;\n enable_confidential_view?: boolean;\n}\n\n// Uniform acknowledgment returned by every v1 DELETE endpoint.\nexport interface DeletedObject {\n id: string;\n object: \"document\" | \"folder\" | \"link\" | \"dataroom\" | \"dataroom_folder\";\n deleted: true;\n}\n\nexport const api = {\n // Documents\n listDocuments: (\n query?: { limit?: number; cursor?: string; query?: string },\n token?: string,\n ) => request<DocumentList>(\"/v1/documents\", { query, token }),\n\n getDocument: (id: string, token?: string) =>\n request<PublicDocument>(`/v1/documents/${id}`, { token }),\n\n searchDocuments: (q: string, limit?: number, token?: string) =>\n request<DocumentList>(\"/v1/documents/search\", { query: { q, limit }, token }),\n\n updateDocument: (id: string, body: UpdateDocumentBody, token?: string) =>\n request<PublicDocument>(`/v1/documents/${id}`, {\n method: \"PATCH\",\n body,\n token,\n }),\n\n deleteDocument: (id: string, token?: string) =>\n request<DeletedObject>(`/v1/documents/${id}`, { method: \"DELETE\", token }),\n\n uploadUrl: (\n body: { file_name: string; content_type: string; content_length?: number },\n token?: string,\n ) =>\n request<UploadUrlResponse>(\"/v1/documents/upload-url\", {\n method: \"POST\",\n body,\n token,\n }),\n\n createDocument: (\n body: {\n name: string;\n upload_id?: string;\n source_url?: string;\n folder_id?: string;\n create_link?: boolean;\n },\n token?: string,\n ) =>\n request<PublicDocument>(\"/v1/documents\", { method: \"POST\", body, token }),\n\n // Document versions\n listDocumentVersions: (id: string, token?: string) =>\n request<DocumentVersionList>(`/v1/documents/${id}/versions`, { token }),\n addDocumentVersion: (\n id: string,\n body: { upload_id?: string; source_url?: string },\n token?: string,\n ) =>\n request<PublicDocumentVersion>(`/v1/documents/${id}/versions`, {\n method: \"POST\",\n body,\n token,\n }),\n getDocumentVersion: (id: string, vid: string, token?: string) =>\n request<PublicDocumentVersion>(`/v1/documents/${id}/versions/${vid}`, {\n token,\n }),\n promoteDocumentVersion: (id: string, vid: string, token?: string) =>\n request<PublicDocumentVersion>(`/v1/documents/${id}/versions/${vid}`, {\n method: \"PATCH\",\n body: { is_primary: true },\n token,\n }),\n\n // Folders\n listFolders: (\n query?: { limit?: number; cursor?: string; parent_id?: string },\n token?: string,\n ) => request<FolderList>(\"/v1/folders\", { query, token }),\n createFolder: (\n body: {\n name: string;\n parent_id?: string | null;\n icon?: FolderIcon;\n color?: FolderColor;\n },\n token?: string,\n ) => request<PublicFolder>(\"/v1/folders\", { method: \"POST\", body, token }),\n getFolder: (id: string, token?: string) =>\n request<PublicFolder>(`/v1/folders/${id}`, { token }),\n updateFolder: (\n id: string,\n body: { name?: string; icon?: FolderIcon | null; color?: FolderColor | null },\n token?: string,\n ) =>\n request<PublicFolder>(`/v1/folders/${id}`, { method: \"PATCH\", body, token }),\n deleteFolder: (id: string, opts?: { cascade?: boolean }, token?: string) =>\n request<DeletedObject>(`/v1/folders/${id}`, {\n method: \"DELETE\",\n query: opts?.cascade ? { cascade: \"true\" } : undefined,\n token,\n }),\n moveFolder: (\n id: string,\n body: { parent_id: string | null },\n token?: string,\n ) =>\n request<PublicFolder>(`/v1/folders/${id}/move`, {\n method: \"POST\",\n body,\n token,\n }),\n\n // Links\n listLinks: (\n query?: {\n limit?: number;\n cursor?: string;\n document_id?: string;\n dataroom_id?: string;\n },\n token?: string,\n ) => request<LinkList>(\"/v1/links\", { query, token }),\n\n getLink: (id: string, token?: string) =>\n request<PublicLink>(`/v1/links/${id}`, { token }),\n\n createLink: (\n body: {\n document_id?: string;\n dataroom_id?: string;\n name?: string;\n expires_at?: string;\n password?: string;\n email_protected?: boolean;\n allow_download?: boolean;\n enable_confidential_view?: boolean;\n enable_watermark?: boolean;\n watermark_config?: WatermarkConfig;\n },\n token?: string,\n ) => request<PublicLink>(\"/v1/links\", { method: \"POST\", body, token }),\n\n updateLink: (id: string, body: UpdateLinkBody, token?: string) =>\n request<PublicLink>(`/v1/links/${id}`, { method: \"PATCH\", body, token }),\n\n deleteLink: (id: string, token?: string) =>\n request<DeletedObject>(`/v1/links/${id}`, { method: \"DELETE\", token }),\n\n listViews: (\n linkId: string,\n query?: { limit?: number; cursor?: string },\n token?: string,\n ) => request<ViewList>(`/v1/links/${linkId}/views`, { query, token }),\n\n // Datarooms\n listDatarooms: (\n query?: { limit?: number; cursor?: string; query?: string },\n token?: string,\n ) => request<DataroomList>(\"/v1/datarooms\", { query, token }),\n getDataroom: (id: string, token?: string) =>\n request<PublicDataroom>(`/v1/datarooms/${id}`, { token }),\n createDataroom: (\n body: { name: string; internal_name?: string; description?: string },\n token?: string,\n ) => request<PublicDataroom>(\"/v1/datarooms\", { method: \"POST\", body, token }),\n updateDataroom: (\n id: string,\n body: {\n name?: string;\n internal_name?: string | null;\n description?: string | null;\n allow_bulk_download?: boolean;\n },\n token?: string,\n ) =>\n request<PublicDataroom>(`/v1/datarooms/${id}`, { method: \"PATCH\", body, token }),\n deleteDataroom: (id: string, token?: string) =>\n request<DeletedObject>(`/v1/datarooms/${id}`, { method: \"DELETE\", token }),\n listDataroomDocuments: (\n id: string,\n query?: { limit?: number; cursor?: string; folder_id?: string },\n token?: string,\n ) => request<DataroomItemList>(`/v1/datarooms/${id}/documents`, { query, token }),\n attachDataroomDocument: (\n id: string,\n body: { document_id: string; folder_id?: string },\n token?: string,\n ) =>\n request<PublicDataroomItem>(`/v1/datarooms/${id}/documents`, {\n method: \"POST\",\n body,\n token,\n }),\n\n // Dataroom folders\n listDataroomFolders: (\n id: string,\n query?: { limit?: number; cursor?: string; parent_id?: string },\n token?: string,\n ) =>\n request<DataroomFolderList>(`/v1/datarooms/${id}/folders`, {\n query,\n token,\n }),\n createDataroomFolder: (\n id: string,\n body: {\n name: string;\n parent_id?: string | null;\n icon?: FolderIcon;\n color?: FolderColor;\n },\n token?: string,\n ) =>\n request<PublicDataroomFolder>(`/v1/datarooms/${id}/folders`, {\n method: \"POST\",\n body,\n token,\n }),\n getDataroomFolder: (id: string, fid: string, token?: string) =>\n request<PublicDataroomFolder>(`/v1/datarooms/${id}/folders/${fid}`, {\n token,\n }),\n updateDataroomFolder: (\n id: string,\n fid: string,\n body: { name?: string; icon?: FolderIcon | null; color?: FolderColor | null },\n token?: string,\n ) =>\n request<PublicDataroomFolder>(`/v1/datarooms/${id}/folders/${fid}`, {\n method: \"PATCH\",\n body,\n token,\n }),\n deleteDataroomFolder: (\n id: string,\n fid: string,\n opts?: { cascade?: boolean },\n token?: string,\n ) =>\n request<DeletedObject>(`/v1/datarooms/${id}/folders/${fid}`, {\n method: \"DELETE\",\n query: opts?.cascade ? { cascade: \"true\" } : undefined,\n token,\n }),\n moveDataroomFolder: (\n id: string,\n fid: string,\n body: { parent_id: string | null },\n token?: string,\n ) =>\n request<PublicDataroomFolder>(`/v1/datarooms/${id}/folders/${fid}/move`, {\n method: \"POST\",\n body,\n token,\n }),\n\n // Visitors\n listVisitors: (\n query?: {\n limit?: number;\n cursor?: string;\n email?: string;\n dataroom_id?: string;\n },\n token?: string,\n ) => request<VisitorList>(\"/v1/visitors\", { query, token }),\n getVisitor: (id: string, token?: string) =>\n request<PublicVisitor>(`/v1/visitors/${id}`, { token }),\n listVisitorViews: (\n id: string,\n query?: { limit?: number; cursor?: string },\n token?: string,\n ) => request<VisitorViewList>(`/v1/visitors/${id}/views`, { query, token }),\n\n // Analytics\n documentAnalytics: (\n id: string,\n query?: { since?: number; until?: number },\n token?: string,\n ) => request<DocumentAnalytics>(`/v1/analytics/documents/${id}`, { query, token }),\n linkAnalytics: (\n id: string,\n query?: { since?: number; until?: number },\n token?: string,\n ) => request<LinkAnalytics>(`/v1/analytics/links/${id}`, { query, token }),\n dataroomAnalytics: (\n id: string,\n query?: { since?: number; until?: number },\n token?: string,\n ) => request<DataroomAnalytics>(`/v1/analytics/datarooms/${id}`, { query, token }),\n viewAnalytics: (id: string, token?: string) =>\n request<ViewAnalytics>(`/v1/analytics/views/${id}`, { token }),\n};\n\nexport interface PublicDataroom {\n id: string;\n object: \"dataroom\";\n pid: string;\n name: string;\n internal_name: string | null;\n description: string | null;\n document_count: number;\n folder_count: number;\n conversations_enabled: boolean;\n agents_enabled: boolean;\n allow_bulk_download: boolean;\n is_frozen: boolean;\n created: string;\n updated_at: string;\n}\n\nexport interface DataroomList {\n data: PublicDataroom[];\n next_cursor: string | null;\n}\n\nexport interface PublicDataroomItem {\n id: string;\n object: \"dataroom_document\";\n document_id: string;\n document_name: string;\n content_type: string | null;\n num_pages: number | null;\n folder_id: string | null;\n folder_path: string | null;\n order_index: number | null;\n created: string;\n}\n\nexport interface DataroomItemList {\n data: PublicDataroomItem[];\n next_cursor: string | null;\n}\n\nexport interface PublicVisitor {\n id: string;\n object: \"visitor\";\n email: string;\n verified: boolean;\n dataroom_id: string | null;\n invited_at: string | null;\n total_views: number;\n last_viewed_at: string | null;\n created: string;\n updated_at: string;\n}\n\nexport interface VisitorList {\n data: PublicVisitor[];\n next_cursor: string | null;\n}\n\nexport interface PublicVisitorView {\n id: string;\n object: \"visitor_view\";\n link_id: string;\n document_id: string | null;\n dataroom_id: string | null;\n view_type: string;\n viewed_at: string;\n downloaded_at: string | null;\n is_archived: boolean;\n}\n\nexport interface VisitorViewList {\n data: PublicVisitorView[];\n next_cursor: string | null;\n}\n\nexport interface DocumentAnalytics {\n document_id: string;\n total_views: number;\n unique_viewers: number;\n total_duration_seconds: number;\n avg_page_duration_seconds: { page_number: number; avg_duration_seconds: number }[];\n since: string;\n until: string;\n}\n\nexport interface LinkAnalytics {\n link_id: string;\n total_views: number;\n total_duration_seconds: number;\n unique_viewers: number;\n since: string;\n until: string;\n}\n\nexport interface DataroomAnalytics {\n dataroom_id: string;\n total_views: number;\n unique_viewers: number;\n total_duration_seconds: number;\n since: string;\n until: string;\n}\n\nexport interface ViewAnalytics {\n view_id: string;\n document_id: string | null;\n viewer_email: string | null;\n viewed_at: string;\n page_durations: { page_number: number; duration_seconds: number }[];\n total_duration_seconds: number;\n location: { country: string | null; city: string | null } | null;\n client: { browser: string | null; os: string | null; device: string | null } | null;\n}\n"],"mappings":"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","names":["doc"]}
|
|
1
|
+
{"version":3,"sources":["../src/index.ts","../src/tools.ts","../src/config.ts","../src/client.ts"],"sourcesContent":["import { McpServer } from \"@modelcontextprotocol/sdk/server/mcp.js\";\nimport { StdioServerTransport } from \"@modelcontextprotocol/sdk/server/stdio.js\";\n\nimport { registerTools } from \"./tools.js\";\n\nconst SERVER_INFO = {\n name: \"papermark-mcp\",\n version: \"0.1.0\",\n} as const;\n\nasync function main(): Promise<void> {\n const server = new McpServer(SERVER_INFO, { capabilities: { tools: {} } });\n registerTools(server);\n\n const transport = new StdioServerTransport();\n await server.connect(transport);\n}\n\nmain().catch((err) => {\n process.stderr.write(\n `[papermark-mcp] fatal: ${err instanceof Error ? err.stack ?? err.message : String(err)}\\n`,\n );\n process.exit(1);\n});\n","import { readFile, stat } from \"node:fs/promises\";\nimport { basename } from \"node:path\";\n\nimport type { McpServer } from \"@modelcontextprotocol/sdk/server/mcp.js\";\nimport { lookup as lookupMimeType } from \"mime-types\";\nimport { z } from \"zod\";\n\nimport { ApiError, AuthRequiredError, NetworkError, api } from \"./client.js\";\nimport {\n addDocumentVersionContract,\n attachDataroomDocumentContract,\n createDataroomContract,\n createDataroomFolderContract,\n createFolderContract,\n createLinkContract,\n deleteDataroomContract,\n deleteDataroomFolderContract,\n deleteDocumentContract,\n deleteFolderContract,\n deleteLinkContract,\n detachDataroomDocumentContract,\n getDataroomAnalyticsContract,\n getDataroomContract,\n getDataroomFolderContract,\n getDocumentAnalyticsContract,\n getDocumentContract,\n getDocumentVersionContract,\n getFolderContract,\n getLinkAnalyticsContract,\n getLinkContract,\n getViewAnalyticsContract,\n getVisitorContract,\n listDataroomDocumentsContract,\n listDataroomFoldersContract,\n listDataroomsContract,\n listDocumentVersionsContract,\n listDocumentsContract,\n listFoldersContract,\n listLinksContract,\n listLinkViewsContract,\n listVisitorViewsContract,\n listVisitorsContract,\n moveDataroomDocumentContract,\n moveDataroomFolderContract,\n moveFolderContract,\n promoteDocumentVersionContract,\n searchDataroomsContract,\n searchDocumentsContract,\n SHARED_TOOL_OUTPUT_SCHEMAS,\n documentOutputSchema,\n updateDataroomContract,\n updateDataroomFolderContract,\n updateDocumentContract,\n updateFolderContract,\n updateLinkContract,\n} from \"./tools-contract.js\";\n\ntype ToolResult = {\n content: Array<{ type: \"text\"; text: string }>;\n structuredContent?: Record<string, unknown>;\n isError?: boolean;\n};\n\nconst readTool = (openWorldHint = false) =>\n ({ readOnlyHint: true, destructiveHint: false, openWorldHint }) as const;\n\nconst writeTool = (openWorldHint = false) =>\n ({ readOnlyHint: false, destructiveHint: false, openWorldHint }) as const;\n\nconst destructiveTool = (openWorldHint = false) =>\n ({ readOnlyHint: false, destructiveHint: true, openWorldHint }) as const;\n\nconst TOOL_ANNOTATIONS: Record<\n string,\n { readOnlyHint?: boolean; destructiveHint?: boolean; openWorldHint?: boolean }\n> = {\n list_documents: readTool(),\n get_document: readTool(),\n search_documents: readTool(),\n upload_document: writeTool(true),\n create_link: writeTool(),\n list_links: readTool(),\n list_link_views: readTool(),\n list_datarooms: readTool(),\n search_datarooms: readTool(),\n get_dataroom: readTool(),\n create_dataroom: writeTool(),\n list_dataroom_documents: readTool(),\n list_visitors: readTool(),\n list_visitor_views: readTool(),\n get_document_analytics: readTool(),\n get_link_analytics: readTool(),\n get_dataroom_analytics: readTool(),\n get_view_analytics: readTool(),\n update_document: destructiveTool(),\n delete_document: destructiveTool(),\n list_document_versions: readTool(),\n get_document_version: readTool(),\n add_document_version: destructiveTool(true),\n promote_document_version: destructiveTool(),\n list_folders: readTool(),\n get_folder: readTool(),\n create_folder: writeTool(),\n update_folder: destructiveTool(),\n delete_folder: destructiveTool(),\n move_folder: destructiveTool(),\n get_link: readTool(),\n update_link: destructiveTool(),\n delete_link: destructiveTool(),\n update_dataroom: destructiveTool(),\n delete_dataroom: destructiveTool(),\n attach_dataroom_document: writeTool(),\n detach_dataroom_document: destructiveTool(),\n move_dataroom_document: destructiveTool(),\n list_dataroom_folders: readTool(),\n get_dataroom_folder: readTool(),\n create_dataroom_folder: writeTool(),\n update_dataroom_folder: destructiveTool(),\n delete_dataroom_folder: destructiveTool(),\n move_dataroom_folder: destructiveTool(),\n get_visitor: readTool(),\n};\n\nconst TOOL_OUTPUT_SCHEMAS: Record<string, unknown> = {\n ...SHARED_TOOL_OUTPUT_SCHEMAS,\n upload_document: documentOutputSchema,\n};\n\nfunction toStructuredContent(result: unknown): Record<string, unknown> {\n if (result && typeof result === \"object\" && !Array.isArray(result)) {\n return result as Record<string, unknown>;\n }\n return { result };\n}\n\nasync function run<T>(\n fn: () => Promise<T>,\n label: string,\n): Promise<ToolResult> {\n try {\n const result = await fn();\n const structuredContent = toStructuredContent(result);\n return {\n structuredContent,\n content: [\n { type: \"text\", text: JSON.stringify(structuredContent, null, 2) },\n ],\n };\n } catch (err) {\n if (err instanceof ApiError) {\n // Field-level validation detail from the v1 API (e.g. a 422's zod\n // `.flatten()` naming the offending field). Without this the caller\n // only sees the generic top-level message and can't self-correct.\n const detail =\n err.details !== undefined && err.details !== null\n ? `\\nDetails: ${JSON.stringify(err.details)}`\n : \"\";\n const hint = err.docUrl ? `\\nDocs: ${err.docUrl}` : \"\";\n return {\n isError: true,\n content: [\n {\n type: \"text\",\n text: `${label} failed (${err.status} ${err.code}): ${err.message}${detail}${hint}`,\n },\n ],\n };\n }\n if (err instanceof NetworkError) {\n return {\n isError: true,\n content: [{ type: \"text\", text: `${label} failed: ${err.message}` }],\n };\n }\n if (err instanceof AuthRequiredError) {\n return { isError: true, content: [{ type: \"text\", text: err.message }] };\n }\n return {\n isError: true,\n content: [\n {\n type: \"text\",\n text: `${label} failed: ${err instanceof Error ? err.message : String(err)}`,\n },\n ],\n };\n }\n}\n\nfunction guessContentType(fileName: string): string {\n return lookupMimeType(fileName) || \"application/octet-stream\";\n}\n\nfunction filenameFromUrl(rawUrl: string): string {\n try {\n const u = new URL(rawUrl);\n const last = u.pathname.split(\"/\").filter(Boolean).pop();\n if (!last) return \"document\";\n return decodeURIComponent(last);\n } catch {\n return \"document\";\n }\n}\n\nexport function registerTools(server: McpServer): void {\n const baseRegisterTool = server.registerTool.bind(server);\n server.registerTool = ((\n name: string,\n config: { annotations?: object; outputSchema?: unknown },\n cb: unknown,\n ) => {\n const annotations = TOOL_ANNOTATIONS[name];\n if (!annotations) {\n throw new Error(`MCP tool \"${name}\" has no annotations entry`);\n }\n const outputSchema = TOOL_OUTPUT_SCHEMAS[name];\n if (!outputSchema) {\n throw new Error(`MCP tool \"${name}\" has no output schema entry`);\n }\n return baseRegisterTool(\n name,\n {\n ...config,\n annotations: { ...annotations, ...config.annotations },\n outputSchema: config.outputSchema ?? outputSchema,\n } as never,\n cb as never,\n );\n }) as unknown as typeof server.registerTool;\n\n server.registerTool(\n listDocumentsContract.name,\n {\n title: listDocumentsContract.title,\n description: listDocumentsContract.description,\n inputSchema: listDocumentsContract.inputSchema,\n },\n async (args) =>\n run(async () => {\n const list = await api.listDocuments({\n limit: args.limit,\n cursor: args.cursor,\n query: args.query,\n });\n return {\n documents: list.data,\n next_cursor: list.next_cursor,\n };\n }, \"list_documents\"),\n );\n\n server.registerTool(\n getDocumentContract.name,\n {\n title: getDocumentContract.title,\n description: getDocumentContract.description,\n inputSchema: getDocumentContract.inputSchema,\n },\n async (args) =>\n run(() => api.getDocument(args.document_id), \"get_document\"),\n );\n\n server.registerTool(\n searchDocumentsContract.name,\n {\n title: searchDocumentsContract.title,\n description: searchDocumentsContract.description,\n inputSchema: searchDocumentsContract.inputSchema,\n },\n async (args) =>\n run(async () => {\n const list = await api.searchDocuments(args.query, args.limit);\n return {\n documents: list.data,\n next_cursor: list.next_cursor,\n };\n }, \"search_documents\"),\n );\n\n // upload_document stays local to the stdio transport because it can read\n // the user's filesystem. The remote HTTP adapter exposes a stripped-down\n // variant that only accepts source_url.\n server.registerTool(\n \"upload_document\",\n {\n title: \"Upload a document\",\n description: `Add a document to Papermark from a local file path, a public HTTPS URL to fetch, OR a non-file source (an external link / public Notion page).\n\nWORKFLOW:\n(1) Resolve the source — exactly one of:\n • \\`file_path\\` (local filesystem — stdio mode only). Never guess a path; if the user attached a file in chat but didn't give a local path, ASK them to save it and provide the path.\n • \\`source_url\\` (public HTTPS) — the server fetches and stores the file.\n • \\`type\\` (\\`link\\` or \\`notion\\`) + \\`external_url\\` — stores a document that points at the URL without downloading it. Use \\`notion\\` for a publicly-accessible Notion page, \\`link\\` for any other external page.\n(2) Confirm the target \\`name\\` if the user wants something other than the filename / URL.\n(3) If the user wants a share link in the same breath, set \\`create_link: true\\` — otherwise follow up with \\`create_link\\` so you can set password/expiry/email gating explicitly.\n\nDon't add any source the user didn't explicitly point at. Requires scope \\`documents.write\\`.`,\n inputSchema: {\n file_path: z\n .string()\n .optional()\n .describe(\n \"Absolute local path — only works when the MCP server runs on the same machine as the file (stdio mode)\",\n ),\n source_url: z\n .string()\n .url()\n .refine((s) => s.startsWith(\"https://\"), {\n message:\n \"source_url must use https:// (http is rejected by the API)\",\n })\n .optional()\n .describe(\n \"Public HTTPS URL the server should fetch and store (alternative to file_path)\",\n ),\n type: z\n .enum([\"link\", \"notion\"])\n .optional()\n .describe(\n \"Create a non-file document from `external_url`: `link` (any external page) or `notion` (a public Notion page). Omit for file uploads via file_path/source_url.\",\n ),\n external_url: z\n .string()\n .url()\n .refine((s) => s.startsWith(\"https://\"), {\n message:\n \"external_url must use https:// (http is rejected by the API)\",\n })\n .optional()\n .describe(\n \"Target URL stored as-is (not downloaded) for `type` link/notion documents. Required when `type` is set.\",\n ),\n name: z\n .string()\n .optional()\n .describe(\"Display name; defaults to the filename or URL\"),\n content_type: z\n .string()\n .optional()\n .describe(\"MIME type; inferred from extension when omitted\"),\n folder_id: z\n .string()\n .optional()\n .describe(\n \"Destination folder id (created beforehand via `create_folder`). Omit for the team-library root.\",\n ),\n create_link: z\n .boolean()\n .optional()\n .describe(\"Create a default share link after upload\"),\n },\n },\n async (args) =>\n run(async () => {\n // Non-file documents (link / notion): store the URL as-is.\n if (args.type) {\n if (!args.external_url) {\n throw new Error(\n `external_url is required when type is \"${args.type}\".`,\n );\n }\n if (args.file_path || args.source_url) {\n throw new Error(\n \"For type link/notion, provide external_url only (not file_path or source_url).\",\n );\n }\n const doc = await api.createDocument({\n name: args.name ?? args.external_url,\n type: args.type,\n external_url: args.external_url,\n folder_id: args.folder_id,\n create_link: args.create_link,\n });\n return { document: doc };\n }\n if (args.external_url) {\n throw new Error(\n 'external_url requires type to be \"link\" or \"notion\".',\n );\n }\n\n if (!args.file_path && !args.source_url) {\n throw new Error(\n \"Provide either file_path (local) or source_url (remote).\",\n );\n }\n if (args.file_path && args.source_url) {\n throw new Error(\"Provide only one of file_path or source_url.\");\n }\n\n if (args.source_url) {\n // Parse via URL so query strings and fragments don't end up in the\n // inferred filename — `https://example.com/x.pdf?token=abc` should\n // be `x.pdf`, not `x.pdf?token=abc`.\n const name = args.name ?? filenameFromUrl(args.source_url);\n const doc = await api.createDocument({\n name,\n source_url: args.source_url,\n folder_id: args.folder_id,\n create_link: args.create_link,\n });\n return { document: doc };\n }\n\n const filePath = args.file_path!;\n const stats = await stat(filePath);\n const fileName = basename(filePath);\n const contentType = args.content_type ?? guessContentType(fileName);\n const body = await readFile(filePath);\n\n const presigned = await api.uploadUrl({\n file_name: fileName,\n content_type: contentType,\n content_length: stats.size,\n });\n\n // Bound the PUT so a hung S3 / Vercel Blob connection can't park the\n // agent loop forever. 5 minutes is generous — a 200MB upload on a\n // slow link still fits — but bounded enough that a truly stuck\n // connection surfaces as a typed error instead of an indefinite wait.\n const putController = new AbortController();\n const putTimer = setTimeout(() => putController.abort(), 5 * 60_000);\n let put: Response;\n try {\n put = await fetch(presigned.upload_url, {\n method: \"PUT\",\n headers: presigned.required_headers,\n body,\n signal: putController.signal,\n });\n } catch (err) {\n if (\n putController.signal.aborted ||\n (err instanceof Error && err.name === \"AbortError\")\n ) {\n throw new Error(\n \"Storage PUT aborted: presigned upload exceeded 5 minute timeout. The connection to object storage stalled — retry with a smaller file or a faster network.\",\n );\n }\n throw err;\n } finally {\n clearTimeout(putTimer);\n }\n if (!put.ok) {\n throw new Error(\n `Storage PUT failed: HTTP ${put.status} ${put.statusText}`,\n );\n }\n\n const doc = await api.createDocument({\n name: args.name ?? fileName,\n upload_id: presigned.upload_id,\n folder_id: args.folder_id,\n create_link: args.create_link,\n });\n return { document: doc };\n }, \"upload_document\"),\n );\n\n server.registerTool(\n createLinkContract.name,\n {\n title: createLinkContract.title,\n description: createLinkContract.description,\n inputSchema: createLinkContract.inputSchema,\n },\n async (args) =>\n run(async () => {\n const hasDoc = Boolean(args.document_id);\n const hasDr = Boolean(args.dataroom_id);\n if (!hasDoc && !hasDr) {\n throw new Error(\"Provide document_id or dataroom_id.\");\n }\n if (hasDoc && hasDr) {\n throw new Error(\n \"Provide exactly one of document_id or dataroom_id, not both.\",\n );\n }\n const link = await api.createLink(args);\n return { link };\n }, \"create_link\"),\n );\n\n server.registerTool(\n listLinksContract.name,\n {\n title: listLinksContract.title,\n description: listLinksContract.description,\n inputSchema: listLinksContract.inputSchema,\n },\n async (args) =>\n run(async () => {\n const list = await api.listLinks(args);\n return {\n links: list.data,\n next_cursor: list.next_cursor,\n };\n }, \"list_links\"),\n );\n\n server.registerTool(\n listLinkViewsContract.name,\n {\n title: listLinkViewsContract.title,\n description: listLinkViewsContract.description,\n inputSchema: listLinkViewsContract.inputSchema,\n },\n async (args) =>\n run(async () => {\n const list = await api.listViews(args.link_id, {\n limit: args.limit,\n cursor: args.cursor,\n });\n return {\n views: list.data,\n next_cursor: list.next_cursor,\n };\n }, \"list_link_views\"),\n );\n\n // ─── Datarooms ───────────────────────────────────────────────────────\n server.registerTool(\n listDataroomsContract.name,\n {\n title: listDataroomsContract.title,\n description: listDataroomsContract.description,\n inputSchema: listDataroomsContract.inputSchema,\n },\n async (args) =>\n run(async () => {\n const list = await api.listDatarooms(args);\n return { datarooms: list.data, next_cursor: list.next_cursor };\n }, \"list_datarooms\"),\n );\n\n server.registerTool(\n searchDataroomsContract.name,\n {\n title: searchDataroomsContract.title,\n description: searchDataroomsContract.description,\n inputSchema: searchDataroomsContract.inputSchema,\n },\n async (args) =>\n run(async () => {\n const list = await api.listDatarooms({\n query: args.query,\n limit: args.limit ?? 10,\n });\n return { datarooms: list.data, next_cursor: list.next_cursor };\n }, \"search_datarooms\"),\n );\n\n server.registerTool(\n getDataroomContract.name,\n {\n title: getDataroomContract.title,\n description: getDataroomContract.description,\n inputSchema: getDataroomContract.inputSchema,\n },\n async (args) =>\n run(() => api.getDataroom(args.dataroom_id), \"get_dataroom\"),\n );\n\n server.registerTool(\n createDataroomContract.name,\n {\n title: createDataroomContract.title,\n description: createDataroomContract.description,\n inputSchema: createDataroomContract.inputSchema,\n },\n async (args) =>\n run(async () => {\n const dr = await api.createDataroom(args);\n return { dataroom: dr };\n }, \"create_dataroom\"),\n );\n\n server.registerTool(\n listDataroomDocumentsContract.name,\n {\n title: listDataroomDocumentsContract.title,\n description: listDataroomDocumentsContract.description,\n inputSchema: listDataroomDocumentsContract.inputSchema,\n },\n async (args) =>\n run(async () => {\n const list = await api.listDataroomDocuments(args.dataroom_id, {\n limit: args.limit,\n cursor: args.cursor,\n folder_id: args.folder_id,\n });\n return { documents: list.data, next_cursor: list.next_cursor };\n }, \"list_dataroom_documents\"),\n );\n\n // ─── Visitors ────────────────────────────────────────────────────────\n server.registerTool(\n listVisitorsContract.name,\n {\n title: listVisitorsContract.title,\n description: listVisitorsContract.description,\n inputSchema: listVisitorsContract.inputSchema,\n },\n async (args) =>\n run(async () => {\n const list = await api.listVisitors(args);\n return { visitors: list.data, next_cursor: list.next_cursor };\n }, \"list_visitors\"),\n );\n\n server.registerTool(\n listVisitorViewsContract.name,\n {\n title: listVisitorViewsContract.title,\n description: listVisitorViewsContract.description,\n inputSchema: listVisitorViewsContract.inputSchema,\n },\n async (args) =>\n run(async () => {\n const list = await api.listVisitorViews(args.visitor_id, {\n limit: args.limit,\n cursor: args.cursor,\n });\n return { views: list.data, next_cursor: list.next_cursor };\n }, \"list_visitor_views\"),\n );\n\n // ─── Analytics ───────────────────────────────────────────────────────\n server.registerTool(\n getDocumentAnalyticsContract.name,\n {\n title: getDocumentAnalyticsContract.title,\n description: getDocumentAnalyticsContract.description,\n inputSchema: getDocumentAnalyticsContract.inputSchema,\n },\n async (args) =>\n run(\n () =>\n api.documentAnalytics(args.document_id, {\n since: args.since,\n until: args.until,\n }),\n \"get_document_analytics\",\n ),\n );\n\n server.registerTool(\n getLinkAnalyticsContract.name,\n {\n title: getLinkAnalyticsContract.title,\n description: getLinkAnalyticsContract.description,\n inputSchema: getLinkAnalyticsContract.inputSchema,\n },\n async (args) =>\n run(\n () =>\n api.linkAnalytics(args.link_id, {\n since: args.since,\n until: args.until,\n }),\n \"get_link_analytics\",\n ),\n );\n\n server.registerTool(\n getDataroomAnalyticsContract.name,\n {\n title: getDataroomAnalyticsContract.title,\n description: getDataroomAnalyticsContract.description,\n inputSchema: getDataroomAnalyticsContract.inputSchema,\n },\n async (args) =>\n run(\n () =>\n api.dataroomAnalytics(args.dataroom_id, {\n since: args.since,\n until: args.until,\n }),\n \"get_dataroom_analytics\",\n ),\n );\n\n server.registerTool(\n getViewAnalyticsContract.name,\n {\n title: getViewAnalyticsContract.title,\n description: getViewAnalyticsContract.description,\n inputSchema: getViewAnalyticsContract.inputSchema,\n },\n async (args) =>\n run(() => api.viewAnalytics(args.view_id), \"get_view_analytics\"),\n );\n\n // ─── Document mutations ──────────────────────────────────────────────\n server.registerTool(\n updateDocumentContract.name,\n {\n title: updateDocumentContract.title,\n description: updateDocumentContract.description,\n inputSchema: updateDocumentContract.inputSchema,\n },\n async (args) =>\n run(async () => {\n const body: { name?: string; folder_id?: string | null } = {};\n if (args.name !== undefined) body.name = args.name;\n if (args.folder_id !== undefined) body.folder_id = args.folder_id;\n if (Object.keys(body).length === 0) {\n throw new Error(\"Provide at least one of `name` or `folder_id`.\");\n }\n const doc = await api.updateDocument(args.document_id, body);\n return { document: doc };\n }, \"update_document\"),\n );\n\n server.registerTool(\n deleteDocumentContract.name,\n {\n title: deleteDocumentContract.title,\n description: deleteDocumentContract.description,\n inputSchema: deleteDocumentContract.inputSchema,\n },\n async (args) =>\n run(async () => {\n return await api.deleteDocument(args.document_id);\n }, \"delete_document\"),\n );\n\n // ─── Document versions ───────────────────────────────────────────────\n server.registerTool(\n listDocumentVersionsContract.name,\n {\n title: listDocumentVersionsContract.title,\n description: listDocumentVersionsContract.description,\n inputSchema: listDocumentVersionsContract.inputSchema,\n },\n async (args) =>\n run(async () => {\n const list = await api.listDocumentVersions(args.document_id);\n return { versions: list.data };\n }, \"list_document_versions\"),\n );\n\n server.registerTool(\n getDocumentVersionContract.name,\n {\n title: getDocumentVersionContract.title,\n description: getDocumentVersionContract.description,\n inputSchema: getDocumentVersionContract.inputSchema,\n },\n async (args) =>\n run(\n () => api.getDocumentVersion(args.document_id, args.version_id),\n \"get_document_version\",\n ),\n );\n\n server.registerTool(\n addDocumentVersionContract.name,\n {\n title: addDocumentVersionContract.title,\n description: addDocumentVersionContract.description,\n inputSchema: addDocumentVersionContract.inputSchema,\n },\n async (args) =>\n run(async () => {\n if (!!args.source_url === !!args.external_url) {\n throw new Error(\n \"Provide exactly one of source_url (file documents) or external_url (link/notion documents).\",\n );\n }\n const v = await api.addDocumentVersion(args.document_id, {\n source_url: args.source_url,\n external_url: args.external_url,\n });\n return { version: v };\n }, \"add_document_version\"),\n );\n\n server.registerTool(\n promoteDocumentVersionContract.name,\n {\n title: promoteDocumentVersionContract.title,\n description: promoteDocumentVersionContract.description,\n inputSchema: promoteDocumentVersionContract.inputSchema,\n },\n async (args) =>\n run(async () => {\n const v = await api.promoteDocumentVersion(\n args.document_id,\n args.version_id,\n );\n return { version: v };\n }, \"promote_document_version\"),\n );\n\n // ─── Folders ─────────────────────────────────────────────────────────\n server.registerTool(\n listFoldersContract.name,\n {\n title: listFoldersContract.title,\n description: listFoldersContract.description,\n inputSchema: listFoldersContract.inputSchema,\n },\n async (args) =>\n run(async () => {\n const list = await api.listFolders(args);\n return { folders: list.data, next_cursor: list.next_cursor };\n }, \"list_folders\"),\n );\n\n server.registerTool(\n getFolderContract.name,\n {\n title: getFolderContract.title,\n description: getFolderContract.description,\n inputSchema: getFolderContract.inputSchema,\n },\n async (args) => run(() => api.getFolder(args.folder_id), \"get_folder\"),\n );\n\n server.registerTool(\n createFolderContract.name,\n {\n title: createFolderContract.title,\n description: createFolderContract.description,\n inputSchema: createFolderContract.inputSchema,\n },\n async (args) =>\n run(async () => {\n const f = await api.createFolder(args);\n return { folder: f };\n }, \"create_folder\"),\n );\n\n server.registerTool(\n updateFolderContract.name,\n {\n title: updateFolderContract.title,\n description: updateFolderContract.description,\n inputSchema: updateFolderContract.inputSchema,\n },\n async (args) =>\n run(async () => {\n const body: Parameters<typeof api.updateFolder>[1] = {};\n if (args.name !== undefined) body.name = args.name;\n if (args.icon !== undefined) body.icon = args.icon;\n if (args.color !== undefined) body.color = args.color;\n if (Object.keys(body).length === 0) {\n throw new Error(\"Provide at least one of `name`, `icon`, `color`.\");\n }\n const f = await api.updateFolder(args.folder_id, body);\n return { folder: f };\n }, \"update_folder\"),\n );\n\n server.registerTool(\n deleteFolderContract.name,\n {\n title: deleteFolderContract.title,\n description: deleteFolderContract.description,\n inputSchema: deleteFolderContract.inputSchema,\n },\n async (args) =>\n run(async () => {\n return await api.deleteFolder(args.folder_id, {\n cascade: args.cascade,\n });\n }, \"delete_folder\"),\n );\n\n server.registerTool(\n moveFolderContract.name,\n {\n title: moveFolderContract.title,\n description: moveFolderContract.description,\n inputSchema: moveFolderContract.inputSchema,\n },\n async (args) =>\n run(async () => {\n const f = await api.moveFolder(args.folder_id, {\n parent_id: args.parent_id,\n });\n return { folder: f };\n }, \"move_folder\"),\n );\n\n // ─── Link mutations ──────────────────────────────────────────────────\n server.registerTool(\n getLinkContract.name,\n {\n title: getLinkContract.title,\n description: getLinkContract.description,\n inputSchema: getLinkContract.inputSchema,\n },\n async (args) =>\n run(async () => {\n const link = await api.getLink(args.link_id);\n return { link };\n }, \"get_link\"),\n );\n\n server.registerTool(\n updateLinkContract.name,\n {\n title: updateLinkContract.title,\n description: updateLinkContract.description,\n inputSchema: updateLinkContract.inputSchema,\n },\n async (args) =>\n run(async () => {\n const { link_id, ...rest } = args;\n if (Object.keys(rest).length === 0) {\n throw new Error(\"Provide at least one field to update.\");\n }\n const link = await api.updateLink(link_id, rest);\n return { link };\n }, \"update_link\"),\n );\n\n server.registerTool(\n deleteLinkContract.name,\n {\n title: deleteLinkContract.title,\n description: deleteLinkContract.description,\n inputSchema: deleteLinkContract.inputSchema,\n },\n async (args) =>\n run(async () => {\n return await api.deleteLink(args.link_id);\n }, \"delete_link\"),\n );\n\n // ─── Dataroom mutations ──────────────────────────────────────────────\n server.registerTool(\n updateDataroomContract.name,\n {\n title: updateDataroomContract.title,\n description: updateDataroomContract.description,\n inputSchema: updateDataroomContract.inputSchema,\n },\n async (args) =>\n run(async () => {\n const { dataroom_id, ...rest } = args;\n if (Object.keys(rest).length === 0) {\n throw new Error(\"Provide at least one field to update.\");\n }\n const dr = await api.updateDataroom(dataroom_id, rest);\n return { dataroom: dr };\n }, \"update_dataroom\"),\n );\n\n server.registerTool(\n deleteDataroomContract.name,\n {\n title: deleteDataroomContract.title,\n description: deleteDataroomContract.description,\n inputSchema: deleteDataroomContract.inputSchema,\n },\n async (args) =>\n run(async () => {\n return await api.deleteDataroom(args.dataroom_id);\n }, \"delete_dataroom\"),\n );\n\n server.registerTool(\n attachDataroomDocumentContract.name,\n {\n title: attachDataroomDocumentContract.title,\n description: attachDataroomDocumentContract.description,\n inputSchema: attachDataroomDocumentContract.inputSchema,\n },\n async (args) =>\n run(async () => {\n const item = await api.attachDataroomDocument(args.dataroom_id, {\n document_id: args.document_id,\n folder_id: args.folder_id,\n });\n return { item };\n }, \"attach_dataroom_document\"),\n );\n\n server.registerTool(\n detachDataroomDocumentContract.name,\n {\n title: detachDataroomDocumentContract.title,\n description: detachDataroomDocumentContract.description,\n inputSchema: detachDataroomDocumentContract.inputSchema,\n },\n async (args) =>\n run(async () => {\n return await api.detachDataroomDocument(\n args.dataroom_id,\n args.dataroom_document_id,\n );\n }, \"detach_dataroom_document\"),\n );\n\n server.registerTool(\n moveDataroomDocumentContract.name,\n {\n title: moveDataroomDocumentContract.title,\n description: moveDataroomDocumentContract.description,\n inputSchema: moveDataroomDocumentContract.inputSchema,\n },\n async (args) =>\n run(async () => {\n const item = await api.moveDataroomDocument(\n args.dataroom_id,\n args.dataroom_document_id,\n { folder_id: args.folder_id },\n );\n return { item };\n }, \"move_dataroom_document\"),\n );\n\n // ─── Dataroom folders ────────────────────────────────────────────────\n server.registerTool(\n listDataroomFoldersContract.name,\n {\n title: listDataroomFoldersContract.title,\n description: listDataroomFoldersContract.description,\n inputSchema: listDataroomFoldersContract.inputSchema,\n },\n async (args) =>\n run(async () => {\n const list = await api.listDataroomFolders(args.dataroom_id, {\n parent_id: args.parent_id,\n limit: args.limit,\n cursor: args.cursor,\n });\n return { folders: list.data, next_cursor: list.next_cursor };\n }, \"list_dataroom_folders\"),\n );\n\n server.registerTool(\n getDataroomFolderContract.name,\n {\n title: getDataroomFolderContract.title,\n description: getDataroomFolderContract.description,\n inputSchema: getDataroomFolderContract.inputSchema,\n },\n async (args) =>\n run(\n () => api.getDataroomFolder(args.dataroom_id, args.folder_id),\n \"get_dataroom_folder\",\n ),\n );\n\n server.registerTool(\n createDataroomFolderContract.name,\n {\n title: createDataroomFolderContract.title,\n description: createDataroomFolderContract.description,\n inputSchema: createDataroomFolderContract.inputSchema,\n },\n async (args) =>\n run(async () => {\n const { dataroom_id, ...body } = args;\n const f = await api.createDataroomFolder(dataroom_id, body);\n return { folder: f };\n }, \"create_dataroom_folder\"),\n );\n\n server.registerTool(\n updateDataroomFolderContract.name,\n {\n title: updateDataroomFolderContract.title,\n description: updateDataroomFolderContract.description,\n inputSchema: updateDataroomFolderContract.inputSchema,\n },\n async (args) =>\n run(async () => {\n const body: Parameters<typeof api.updateDataroomFolder>[2] = {};\n if (args.name !== undefined) body.name = args.name;\n if (args.icon !== undefined) body.icon = args.icon;\n if (args.color !== undefined) body.color = args.color;\n if (Object.keys(body).length === 0) {\n throw new Error(\"Provide at least one of `name`, `icon`, `color`.\");\n }\n const f = await api.updateDataroomFolder(\n args.dataroom_id,\n args.folder_id,\n body,\n );\n return { folder: f };\n }, \"update_dataroom_folder\"),\n );\n\n server.registerTool(\n deleteDataroomFolderContract.name,\n {\n title: deleteDataroomFolderContract.title,\n description: deleteDataroomFolderContract.description,\n inputSchema: deleteDataroomFolderContract.inputSchema,\n },\n async (args) =>\n run(async () => {\n return await api.deleteDataroomFolder(\n args.dataroom_id,\n args.folder_id,\n { cascade: args.cascade },\n );\n }, \"delete_dataroom_folder\"),\n );\n\n server.registerTool(\n moveDataroomFolderContract.name,\n {\n title: moveDataroomFolderContract.title,\n description: moveDataroomFolderContract.description,\n inputSchema: moveDataroomFolderContract.inputSchema,\n },\n async (args) =>\n run(async () => {\n const f = await api.moveDataroomFolder(\n args.dataroom_id,\n args.folder_id,\n { parent_id: args.parent_id },\n );\n return { folder: f };\n }, \"move_dataroom_folder\"),\n );\n\n // ─── Visitors ────────────────────────────────────────────────────────\n server.registerTool(\n getVisitorContract.name,\n {\n title: getVisitorContract.title,\n description: getVisitorContract.description,\n inputSchema: getVisitorContract.inputSchema,\n },\n async (args) => run(() => api.getVisitor(args.visitor_id), \"get_visitor\"),\n );\n}\n","const DEFAULT_API_URL = \"https://api.papermark.com\";\n\nexport function getToken(): string | undefined {\n return process.env.PAPERMARK_TOKEN?.trim() || undefined;\n}\n\nexport function getApiUrl(): string {\n return process.env.PAPERMARK_API_URL?.trim() || DEFAULT_API_URL;\n}\n","import { getApiUrl, getToken } from \"./config.js\";\n\nexport interface ApiErrorBody {\n error: {\n code: string;\n message: string;\n doc_url?: string;\n details?: unknown;\n };\n}\n\nexport class ApiError extends Error {\n code: string;\n status: number;\n docUrl?: string;\n details?: unknown;\n\n constructor(status: number, body: ApiErrorBody[\"error\"] | string) {\n const message = typeof body === \"string\" ? body : body.message;\n super(message);\n this.status = status;\n if (typeof body === \"string\") {\n this.code = \"unknown\";\n } else {\n this.code = body.code;\n this.docUrl = body.doc_url;\n this.details = body.details;\n }\n }\n}\n\nexport class AuthRequiredError extends Error {\n constructor() {\n super(\n \"No API token configured. Set PAPERMARK_TOKEN in the MCP server env (get one from papermark.com/settings/tokens).\",\n );\n this.name = \"AuthRequiredError\";\n }\n}\n\nexport class NetworkError extends Error {\n url: string;\n cause: unknown;\n constructor(url: string, cause: unknown) {\n const reason = extractNetworkReason(cause);\n super(`Network request to ${url} failed: ${reason}`);\n this.name = \"NetworkError\";\n this.url = url;\n this.cause = cause;\n }\n}\n\nfunction extractNetworkReason(err: unknown): string {\n if (err && typeof err === \"object\" && \"cause\" in err) {\n const c = (err as { cause: unknown }).cause;\n if (c && typeof c === \"object\") {\n const code = (c as { code?: string }).code;\n const msg = (c as { message?: string }).message;\n if (code || msg) return `${code ?? \"\"}${code && msg ? \" — \" : \"\"}${msg ?? \"\"}`.trim();\n }\n }\n if (err instanceof Error) return err.message;\n return String(err);\n}\n\ninterface RequestOptions {\n method?: string;\n body?: unknown;\n query?: Record<string, string | number | undefined>;\n anonymous?: boolean;\n headers?: Record<string, string>;\n /** Override the token for this call (used by OAuth transport layer). */\n token?: string;\n /** Per-request timeout in ms; defaults to DEFAULT_TIMEOUT_MS. */\n timeout?: number;\n}\n\n// 60s is generous for v1 endpoints (most return in <1s) but covers the slow\n// Tinybird-backed analytics calls that sometimes take 5-10s on cold caches.\nconst DEFAULT_TIMEOUT_MS = 60_000;\n\nfunction buildUrl(path: string, query?: RequestOptions[\"query\"]): string {\n const base = getApiUrl().replace(/\\/$/, \"\");\n let fullPath = path.startsWith(\"/\") ? path : `/${path}`;\n if (base.endsWith(\"/api\") && fullPath.startsWith(\"/api/\")) {\n fullPath = fullPath.slice(4);\n }\n const url = new URL(base + fullPath);\n if (query) {\n for (const [k, v] of Object.entries(query)) {\n if (v !== undefined && v !== null && v !== \"\") {\n url.searchParams.set(k, String(v));\n }\n }\n }\n return url.toString();\n}\n\nexport async function request<T = unknown>(\n path: string,\n opts: RequestOptions = {},\n): Promise<T> {\n const headers: Record<string, string> = {\n Accept: \"application/json\",\n ...(opts.headers ?? {}),\n };\n if (!opts.anonymous) {\n const token = opts.token ?? getToken();\n if (!token) throw new AuthRequiredError();\n headers.Authorization = `Bearer ${token}`;\n }\n let body: BodyInit | undefined;\n if (opts.body !== undefined) {\n if (opts.body instanceof Uint8Array || opts.body instanceof ArrayBuffer) {\n body = opts.body as BodyInit;\n } else {\n body = JSON.stringify(opts.body);\n headers[\"Content-Type\"] = \"application/json\";\n }\n }\n\n const url = buildUrl(path, opts.query);\n // Time out stalled upstream connections so an MCP tool call doesn't hang\n // the agent loop. AbortError surfaces through the same NetworkError path\n // as DNS / TLS failures so callers see one error type for \"the request\n // never produced a response\".\n const controller = new AbortController();\n const timeoutMs = opts.timeout ?? DEFAULT_TIMEOUT_MS;\n const timer = setTimeout(() => controller.abort(), timeoutMs);\n let res: Response;\n try {\n res = await fetch(url, {\n method: opts.method ?? (opts.body ? \"POST\" : \"GET\"),\n headers,\n body,\n signal: controller.signal,\n });\n } catch (err) {\n if (\n controller.signal.aborted ||\n (err instanceof Error && err.name === \"AbortError\")\n ) {\n throw new NetworkError(\n url,\n new Error(`Request exceeded ${timeoutMs}ms timeout`),\n );\n }\n throw new NetworkError(url, err);\n } finally {\n clearTimeout(timer);\n }\n\n if (res.status === 204) return undefined as T;\n\n const text = await res.text();\n const parsed = text ? safeParseJson(text) : null;\n\n if (!res.ok) {\n if (parsed && typeof parsed === \"object\" && \"error\" in parsed) {\n throw new ApiError(res.status, (parsed as ApiErrorBody).error);\n }\n const looksLikeHtml = text.trimStart().toLowerCase().startsWith(\"<\");\n const msg = looksLikeHtml\n ? `HTTP ${res.status} (server returned HTML, not JSON — is the API reachable?)`\n : text || `HTTP ${res.status}`;\n throw new ApiError(res.status, msg);\n }\n\n return (parsed as T) ?? (undefined as T);\n}\n\nfunction safeParseJson(s: string): unknown {\n try {\n return JSON.parse(s);\n } catch {\n return null;\n }\n}\n\nexport interface PublicDocument {\n id: string;\n object: \"document\";\n name: string;\n type: string | null;\n content_type: string | null;\n // Target URL for `link`/`notion` documents; null for file-based documents.\n url: string | null;\n num_pages: number | null;\n folder_id: string | null;\n created: string;\n updated_at: string;\n}\n\nexport interface PublicDocumentVersion {\n id: string;\n object: \"document_version\";\n version_number: number;\n is_primary: boolean;\n type: string | null;\n content_type: string | null;\n num_pages: number | null;\n file_size: number | null;\n created: string;\n updated_at: string;\n}\n\nexport interface DocumentVersionList {\n data: PublicDocumentVersion[];\n}\n\nexport type FolderIcon =\n | \"folder\"\n | \"folder-open\"\n | \"briefcase\"\n | \"archive\"\n | \"box\"\n | \"file\"\n | \"book\"\n | \"bookmark\"\n | \"star\"\n | \"heart\"\n | \"lock\"\n | \"shield\"\n | \"users\"\n | \"settings\"\n | \"tag\"\n | \"layers\"\n | \"globe\"\n | \"home\"\n | \"mail\"\n | \"image\"\n | \"video\"\n | \"music\"\n | \"palette\"\n | \"pen-tool\"\n | \"lightbulb\"\n | \"zap\"\n | \"wrench\"\n | \"sparkles\"\n | \"cloud\"\n | \"flag\"\n | \"award\"\n | \"flame\"\n | \"bell\"\n | \"sun\"\n | \"hash\";\n\nexport type FolderColor =\n | \"gray\"\n | \"red\"\n | \"orange\"\n | \"yellow\"\n | \"green\"\n | \"blue\"\n | \"black\";\n\nexport interface PublicFolder {\n id: string;\n object: \"folder\";\n name: string;\n parent_id: string | null;\n path: string;\n icon: string | null;\n color: string | null;\n document_count: number;\n child_folder_count: number;\n created: string;\n updated_at: string;\n}\n\nexport interface FolderList {\n data: PublicFolder[];\n next_cursor: string | null;\n}\n\nexport interface PublicDataroomFolder {\n id: string;\n object: \"dataroom_folder\";\n name: string;\n parent_id: string | null;\n path: string;\n icon: string | null;\n color: string | null;\n document_count: number;\n child_folder_count: number;\n order_index: number | null;\n created: string;\n updated_at: string;\n}\n\nexport interface DataroomFolderList {\n data: PublicDataroomFolder[];\n next_cursor: string | null;\n}\n\nexport interface DocumentList {\n data: PublicDocument[];\n next_cursor: string | null;\n}\n\nexport interface UploadUrlResponse {\n upload_url: string;\n upload_id: string;\n required_headers: Record<string, string>;\n expires_at: string;\n}\n\nexport type WatermarkPosition =\n | \"top-left\"\n | \"top-center\"\n | \"top-right\"\n | \"middle-left\"\n | \"middle-center\"\n | \"middle-right\"\n | \"bottom-left\"\n | \"bottom-center\"\n | \"bottom-right\";\n\nexport type WatermarkRotation = 0 | 30 | 45 | 90 | 180;\n\nexport interface WatermarkConfig {\n text: string;\n is_tiled: boolean;\n position: WatermarkPosition;\n rotation: WatermarkRotation;\n color: string;\n font_size: number;\n opacity: number;\n}\n\nexport interface PublicLink {\n id: string;\n object: \"link\";\n name: string | null;\n target_type: \"document\" | \"dataroom\";\n document_id: string | null;\n dataroom_id: string | null;\n url: string;\n domain: string | null;\n slug: string | null;\n expires_at: string | null;\n is_password_protected: boolean;\n email_protected: boolean;\n email_authenticated: boolean;\n allow_download: boolean;\n allow_list: string[];\n deny_list: string[];\n enable_watermark: boolean;\n watermark_config: WatermarkConfig | null;\n enable_feedback: boolean;\n enable_screenshot_protection: boolean;\n enable_confidential_view: boolean;\n created: string;\n updated_at: string;\n}\n\nexport interface LinkList {\n data: PublicLink[];\n next_cursor: string | null;\n}\n\nexport interface PublicView {\n id: string;\n object: \"view\";\n link_id: string | null;\n document_id: string | null;\n dataroom_id: string | null;\n viewer_email: string | null;\n view_type: string | null;\n viewed_at: string;\n downloaded_at: string | null;\n download_type: string | null;\n}\n\nexport interface ViewList {\n data: PublicView[];\n next_cursor: string | null;\n}\n\nexport interface UpdateDocumentBody {\n name?: string;\n folder_id?: string | null;\n}\n\nexport interface UpdateLinkBody {\n name?: string;\n expires_at?: string | null;\n password?: string | null;\n email_protected?: boolean;\n email_authenticated?: boolean;\n allow_download?: boolean;\n allow_list?: string[];\n deny_list?: string[];\n enable_watermark?: boolean;\n watermark_config?: WatermarkConfig | null;\n enable_screenshot_protection?: boolean;\n enable_confidential_view?: boolean;\n}\n\n// Uniform acknowledgment returned by every v1 DELETE endpoint.\nexport interface DeletedObject {\n id: string;\n object:\n | \"document\"\n | \"folder\"\n | \"link\"\n | \"dataroom\"\n | \"dataroom_folder\"\n | \"dataroom_document\";\n deleted: true;\n}\n\nexport const api = {\n // Documents\n listDocuments: (\n query?: { limit?: number; cursor?: string; query?: string },\n token?: string,\n ) => request<DocumentList>(\"/v1/documents\", { query, token }),\n\n getDocument: (id: string, token?: string) =>\n request<PublicDocument>(`/v1/documents/${id}`, { token }),\n\n searchDocuments: (q: string, limit?: number, token?: string) =>\n request<DocumentList>(\"/v1/documents/search\", { query: { q, limit }, token }),\n\n updateDocument: (id: string, body: UpdateDocumentBody, token?: string) =>\n request<PublicDocument>(`/v1/documents/${id}`, {\n method: \"PATCH\",\n body,\n token,\n }),\n\n deleteDocument: (id: string, token?: string) =>\n request<DeletedObject>(`/v1/documents/${id}`, { method: \"DELETE\", token }),\n\n uploadUrl: (\n body: { file_name: string; content_type: string; content_length?: number },\n token?: string,\n ) =>\n request<UploadUrlResponse>(\"/v1/documents/upload-url\", {\n method: \"POST\",\n body,\n token,\n }),\n\n createDocument: (\n body: {\n name: string;\n // Set to create a non-file document from `external_url`: `link` (any\n // external page) or `notion` (a public Notion page). Omit for file-based\n // documents created via `upload_id` or `source_url`.\n type?: \"link\" | \"notion\";\n upload_id?: string;\n source_url?: string;\n external_url?: string;\n folder_id?: string;\n create_link?: boolean;\n },\n token?: string,\n ) =>\n request<PublicDocument>(\"/v1/documents\", { method: \"POST\", body, token }),\n\n // Document versions\n listDocumentVersions: (id: string, token?: string) =>\n request<DocumentVersionList>(`/v1/documents/${id}/versions`, { token }),\n addDocumentVersion: (\n id: string,\n // `external_url` repoints a link/notion document at a new URL (preserved\n // type); upload_id/source_url replace a file document's bytes.\n body: { upload_id?: string; source_url?: string; external_url?: string },\n token?: string,\n ) =>\n request<PublicDocumentVersion>(`/v1/documents/${id}/versions`, {\n method: \"POST\",\n body,\n token,\n }),\n getDocumentVersion: (id: string, vid: string, token?: string) =>\n request<PublicDocumentVersion>(`/v1/documents/${id}/versions/${vid}`, {\n token,\n }),\n promoteDocumentVersion: (id: string, vid: string, token?: string) =>\n request<PublicDocumentVersion>(`/v1/documents/${id}/versions/${vid}`, {\n method: \"PATCH\",\n body: { is_primary: true },\n token,\n }),\n\n // Folders\n listFolders: (\n query?: { limit?: number; cursor?: string; parent_id?: string },\n token?: string,\n ) => request<FolderList>(\"/v1/folders\", { query, token }),\n createFolder: (\n body: {\n name: string;\n parent_id?: string | null;\n icon?: FolderIcon;\n color?: FolderColor;\n },\n token?: string,\n ) => request<PublicFolder>(\"/v1/folders\", { method: \"POST\", body, token }),\n getFolder: (id: string, token?: string) =>\n request<PublicFolder>(`/v1/folders/${id}`, { token }),\n updateFolder: (\n id: string,\n body: { name?: string; icon?: FolderIcon | null; color?: FolderColor | null },\n token?: string,\n ) =>\n request<PublicFolder>(`/v1/folders/${id}`, { method: \"PATCH\", body, token }),\n deleteFolder: (id: string, opts?: { cascade?: boolean }, token?: string) =>\n request<DeletedObject>(`/v1/folders/${id}`, {\n method: \"DELETE\",\n query: opts?.cascade ? { cascade: \"true\" } : undefined,\n token,\n }),\n moveFolder: (\n id: string,\n body: { parent_id: string | null },\n token?: string,\n ) =>\n request<PublicFolder>(`/v1/folders/${id}/move`, {\n method: \"POST\",\n body,\n token,\n }),\n\n // Links\n listLinks: (\n query?: {\n limit?: number;\n cursor?: string;\n document_id?: string;\n dataroom_id?: string;\n },\n token?: string,\n ) => request<LinkList>(\"/v1/links\", { query, token }),\n\n getLink: (id: string, token?: string) =>\n request<PublicLink>(`/v1/links/${id}`, { token }),\n\n createLink: (\n body: {\n document_id?: string;\n dataroom_id?: string;\n name?: string;\n expires_at?: string;\n password?: string;\n email_protected?: boolean;\n allow_download?: boolean;\n enable_confidential_view?: boolean;\n enable_watermark?: boolean;\n watermark_config?: WatermarkConfig;\n },\n token?: string,\n ) => request<PublicLink>(\"/v1/links\", { method: \"POST\", body, token }),\n\n updateLink: (id: string, body: UpdateLinkBody, token?: string) =>\n request<PublicLink>(`/v1/links/${id}`, { method: \"PATCH\", body, token }),\n\n deleteLink: (id: string, token?: string) =>\n request<DeletedObject>(`/v1/links/${id}`, { method: \"DELETE\", token }),\n\n listViews: (\n linkId: string,\n query?: { limit?: number; cursor?: string },\n token?: string,\n ) => request<ViewList>(`/v1/links/${linkId}/views`, { query, token }),\n\n // Datarooms\n listDatarooms: (\n query?: { limit?: number; cursor?: string; query?: string },\n token?: string,\n ) => request<DataroomList>(\"/v1/datarooms\", { query, token }),\n getDataroom: (id: string, token?: string) =>\n request<PublicDataroom>(`/v1/datarooms/${id}`, { token }),\n createDataroom: (\n body: { name: string; internal_name?: string; description?: string },\n token?: string,\n ) => request<PublicDataroom>(\"/v1/datarooms\", { method: \"POST\", body, token }),\n updateDataroom: (\n id: string,\n body: {\n name?: string;\n internal_name?: string | null;\n description?: string | null;\n allow_bulk_download?: boolean;\n },\n token?: string,\n ) =>\n request<PublicDataroom>(`/v1/datarooms/${id}`, { method: \"PATCH\", body, token }),\n deleteDataroom: (id: string, token?: string) =>\n request<DeletedObject>(`/v1/datarooms/${id}`, { method: \"DELETE\", token }),\n listDataroomDocuments: (\n id: string,\n query?: { limit?: number; cursor?: string; folder_id?: string },\n token?: string,\n ) => request<DataroomItemList>(`/v1/datarooms/${id}/documents`, { query, token }),\n attachDataroomDocument: (\n id: string,\n body: { document_id: string; folder_id?: string },\n token?: string,\n ) =>\n request<PublicDataroomItem>(`/v1/datarooms/${id}/documents`, {\n method: \"POST\",\n body,\n token,\n }),\n detachDataroomDocument: (id: string, ddId: string, token?: string) =>\n request<DeletedObject>(`/v1/datarooms/${id}/documents/${ddId}`, {\n method: \"DELETE\",\n token,\n }),\n moveDataroomDocument: (\n id: string,\n ddId: string,\n body: { folder_id: string | null },\n token?: string,\n ) =>\n request<PublicDataroomItem>(`/v1/datarooms/${id}/documents/${ddId}/move`, {\n method: \"POST\",\n body,\n token,\n }),\n\n // Dataroom folders\n listDataroomFolders: (\n id: string,\n query?: { limit?: number; cursor?: string; parent_id?: string },\n token?: string,\n ) =>\n request<DataroomFolderList>(`/v1/datarooms/${id}/folders`, {\n query,\n token,\n }),\n createDataroomFolder: (\n id: string,\n body: {\n name: string;\n parent_id?: string | null;\n icon?: FolderIcon;\n color?: FolderColor;\n },\n token?: string,\n ) =>\n request<PublicDataroomFolder>(`/v1/datarooms/${id}/folders`, {\n method: \"POST\",\n body,\n token,\n }),\n getDataroomFolder: (id: string, fid: string, token?: string) =>\n request<PublicDataroomFolder>(`/v1/datarooms/${id}/folders/${fid}`, {\n token,\n }),\n updateDataroomFolder: (\n id: string,\n fid: string,\n body: { name?: string; icon?: FolderIcon | null; color?: FolderColor | null },\n token?: string,\n ) =>\n request<PublicDataroomFolder>(`/v1/datarooms/${id}/folders/${fid}`, {\n method: \"PATCH\",\n body,\n token,\n }),\n deleteDataroomFolder: (\n id: string,\n fid: string,\n opts?: { cascade?: boolean },\n token?: string,\n ) =>\n request<DeletedObject>(`/v1/datarooms/${id}/folders/${fid}`, {\n method: \"DELETE\",\n query: opts?.cascade ? { cascade: \"true\" } : undefined,\n token,\n }),\n moveDataroomFolder: (\n id: string,\n fid: string,\n body: { parent_id: string | null },\n token?: string,\n ) =>\n request<PublicDataroomFolder>(`/v1/datarooms/${id}/folders/${fid}/move`, {\n method: \"POST\",\n body,\n token,\n }),\n\n // Visitors\n listVisitors: (\n query?: {\n limit?: number;\n cursor?: string;\n email?: string;\n dataroom_id?: string;\n },\n token?: string,\n ) => request<VisitorList>(\"/v1/visitors\", { query, token }),\n getVisitor: (id: string, token?: string) =>\n request<PublicVisitor>(`/v1/visitors/${id}`, { token }),\n listVisitorViews: (\n id: string,\n query?: { limit?: number; cursor?: string },\n token?: string,\n ) => request<VisitorViewList>(`/v1/visitors/${id}/views`, { query, token }),\n\n // Analytics\n documentAnalytics: (\n id: string,\n query?: { since?: number; until?: number },\n token?: string,\n ) => request<DocumentAnalytics>(`/v1/analytics/documents/${id}`, { query, token }),\n linkAnalytics: (\n id: string,\n query?: { since?: number; until?: number },\n token?: string,\n ) => request<LinkAnalytics>(`/v1/analytics/links/${id}`, { query, token }),\n dataroomAnalytics: (\n id: string,\n query?: { since?: number; until?: number },\n token?: string,\n ) => request<DataroomAnalytics>(`/v1/analytics/datarooms/${id}`, { query, token }),\n viewAnalytics: (id: string, token?: string) =>\n request<ViewAnalytics>(`/v1/analytics/views/${id}`, { token }),\n};\n\nexport interface PublicDataroom {\n id: string;\n object: \"dataroom\";\n pid: string;\n name: string;\n internal_name: string | null;\n description: string | null;\n document_count: number;\n folder_count: number;\n conversations_enabled: boolean;\n agents_enabled: boolean;\n allow_bulk_download: boolean;\n is_frozen: boolean;\n created: string;\n updated_at: string;\n}\n\nexport interface DataroomList {\n data: PublicDataroom[];\n next_cursor: string | null;\n}\n\nexport interface PublicDataroomItem {\n id: string;\n object: \"dataroom_document\";\n document_id: string;\n document_name: string;\n content_type: string | null;\n num_pages: number | null;\n folder_id: string | null;\n folder_path: string | null;\n order_index: number | null;\n created: string;\n}\n\nexport interface DataroomItemList {\n data: PublicDataroomItem[];\n next_cursor: string | null;\n}\n\nexport interface PublicVisitor {\n id: string;\n object: \"visitor\";\n email: string;\n verified: boolean;\n dataroom_id: string | null;\n invited_at: string | null;\n total_views: number;\n last_viewed_at: string | null;\n created: string;\n updated_at: string;\n}\n\nexport interface VisitorList {\n data: PublicVisitor[];\n next_cursor: string | null;\n}\n\nexport interface PublicVisitorView {\n id: string;\n object: \"visitor_view\";\n link_id: string;\n document_id: string | null;\n dataroom_id: string | null;\n view_type: string;\n viewed_at: string;\n downloaded_at: string | null;\n is_archived: boolean;\n}\n\nexport interface VisitorViewList {\n data: PublicVisitorView[];\n next_cursor: string | null;\n}\n\nexport interface DocumentAnalytics {\n document_id: string;\n total_views: number;\n unique_viewers: number;\n total_duration_seconds: number;\n avg_page_duration_seconds: { page_number: number; avg_duration_seconds: number }[];\n since: string;\n until: string;\n}\n\nexport interface LinkAnalytics {\n link_id: string;\n total_views: number;\n total_duration_seconds: number;\n unique_viewers: number;\n since: string;\n until: string;\n}\n\nexport interface DataroomAnalytics {\n dataroom_id: string;\n total_views: number;\n unique_viewers: number;\n total_duration_seconds: number;\n since: string;\n until: string;\n}\n\nexport interface ViewAnalytics {\n view_id: string;\n document_id: string | null;\n viewer_email: string | null;\n viewed_at: string;\n page_durations: { page_number: number; duration_seconds: number }[];\n total_duration_seconds: number;\n location: { country: string | null; city: string | null } | null;\n client: { browser: string | null; os: string | null; device: string | null } | null;\n}\n"],"mappings":"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","names":["doc"]}
|
package/dist/tools-contract.d.ts
CHANGED
|
@@ -47,6 +47,7 @@ declare const documentObjectOutputSchema: z.ZodObject<{
|
|
|
47
47
|
name: z.ZodString;
|
|
48
48
|
type: z.ZodNullable<z.ZodString>;
|
|
49
49
|
content_type: z.ZodNullable<z.ZodString>;
|
|
50
|
+
url: z.ZodNullable<z.ZodString>;
|
|
50
51
|
num_pages: z.ZodNullable<z.ZodNumber>;
|
|
51
52
|
folder_id: z.ZodNullable<z.ZodString>;
|
|
52
53
|
created: z.ZodString;
|
|
@@ -245,6 +246,7 @@ declare const documentOutputSchema: z.ZodObject<{
|
|
|
245
246
|
name: z.ZodString;
|
|
246
247
|
type: z.ZodNullable<z.ZodString>;
|
|
247
248
|
content_type: z.ZodNullable<z.ZodString>;
|
|
249
|
+
url: z.ZodNullable<z.ZodString>;
|
|
248
250
|
num_pages: z.ZodNullable<z.ZodNumber>;
|
|
249
251
|
folder_id: z.ZodNullable<z.ZodString>;
|
|
250
252
|
created: z.ZodString;
|
|
@@ -371,6 +373,7 @@ declare const documentsListOutputSchema: z.ZodObject<{
|
|
|
371
373
|
name: z.ZodString;
|
|
372
374
|
type: z.ZodNullable<z.ZodString>;
|
|
373
375
|
content_type: z.ZodNullable<z.ZodString>;
|
|
376
|
+
url: z.ZodNullable<z.ZodString>;
|
|
374
377
|
num_pages: z.ZodNullable<z.ZodNumber>;
|
|
375
378
|
folder_id: z.ZodNullable<z.ZodString>;
|
|
376
379
|
created: z.ZodString;
|
|
@@ -547,6 +550,7 @@ declare const deletedObjectOutputSchema: z.ZodObject<{
|
|
|
547
550
|
dataroom: "dataroom";
|
|
548
551
|
folder: "folder";
|
|
549
552
|
dataroom_folder: "dataroom_folder";
|
|
553
|
+
dataroom_document: "dataroom_document";
|
|
550
554
|
}>;
|
|
551
555
|
deleted: z.ZodLiteral<true>;
|
|
552
556
|
}, z.core.$strip>;
|
|
@@ -778,10 +782,11 @@ declare const getDocumentVersionContract: {
|
|
|
778
782
|
declare const addDocumentVersionContract: {
|
|
779
783
|
readonly name: "add_document_version";
|
|
780
784
|
readonly title: "Add a new document version";
|
|
781
|
-
readonly description: "
|
|
785
|
+
readonly description: "Add a new version of an existing document. The new version becomes primary by default; live links automatically serve it.\n\nFor a file document, pass `source_url` — a public HTTPS URL the server fetches as the new file. For a `link`/`notion` document, pass `external_url` to repoint it at a new URL (its type is preserved; the URL is stored as-is, not downloaded). Provide exactly one.\n\nWORKFLOW:\n(1) Resolve the target document via `search_documents` or `list_documents`.\n(2) The user must give you the URL — don't fabricate one.\n(3) After creation, mention the version_number so the user can promote/rollback later.\n\nNOTE: Adding a version from a local file path is not supported by this MCP tool — for that, use the `upload_document` tool to create a new document, or have the user upload via the Papermark UI.\n\nRequires scope `documents.write`.";
|
|
782
786
|
readonly inputSchema: {
|
|
783
787
|
readonly document_id: z.ZodString;
|
|
784
|
-
readonly source_url: z.ZodString
|
|
788
|
+
readonly source_url: z.ZodOptional<z.ZodString>;
|
|
789
|
+
readonly external_url: z.ZodOptional<z.ZodString>;
|
|
785
790
|
};
|
|
786
791
|
};
|
|
787
792
|
declare const promoteDocumentVersionContract: {
|
|
@@ -1023,6 +1028,25 @@ declare const attachDataroomDocumentContract: {
|
|
|
1023
1028
|
readonly folder_id: z.ZodOptional<z.ZodString>;
|
|
1024
1029
|
};
|
|
1025
1030
|
};
|
|
1031
|
+
declare const detachDataroomDocumentContract: {
|
|
1032
|
+
readonly name: "detach_dataroom_document";
|
|
1033
|
+
readonly title: "Detach a document from a dataroom";
|
|
1034
|
+
readonly description: "Remove a single document's attachment to a dataroom, identified by its dataroom-document id — the `id` returned by `attach_dataroom_document` or `list_dataroom_documents`, NOT the underlying `document_id`. The document stays in the team library and remains attached to any other datarooms; only this one attachment is removed.\n\nPrefer this over deleting and recreating a folder when you only need to remove one file. Requires scope `datarooms.write`.";
|
|
1035
|
+
readonly inputSchema: {
|
|
1036
|
+
readonly dataroom_id: z.ZodString;
|
|
1037
|
+
readonly dataroom_document_id: z.ZodString;
|
|
1038
|
+
};
|
|
1039
|
+
};
|
|
1040
|
+
declare const moveDataroomDocumentContract: {
|
|
1041
|
+
readonly name: "move_dataroom_document";
|
|
1042
|
+
readonly title: "Move a document within a dataroom";
|
|
1043
|
+
readonly description: "Move a dataroom document into a different folder of the same dataroom. Identify it by its dataroom-document id — the `id` from `attach_dataroom_document` or `list_dataroom_documents`, NOT the underlying `document_id`. Pass `folder_id: null` to move it to the dataroom root. The target folder must belong to this dataroom. Requires scope `datarooms.write`.";
|
|
1044
|
+
readonly inputSchema: {
|
|
1045
|
+
readonly dataroom_id: z.ZodString;
|
|
1046
|
+
readonly dataroom_document_id: z.ZodString;
|
|
1047
|
+
readonly folder_id: z.ZodNullable<z.ZodString>;
|
|
1048
|
+
};
|
|
1049
|
+
};
|
|
1026
1050
|
declare const listDataroomFoldersContract: {
|
|
1027
1051
|
readonly name: "list_dataroom_folders";
|
|
1028
1052
|
readonly title: "List folders in a dataroom";
|
|
@@ -1191,6 +1215,7 @@ declare const SHARED_TOOL_OUTPUT_SCHEMAS: {
|
|
|
1191
1215
|
name: z.ZodString;
|
|
1192
1216
|
type: z.ZodNullable<z.ZodString>;
|
|
1193
1217
|
content_type: z.ZodNullable<z.ZodString>;
|
|
1218
|
+
url: z.ZodNullable<z.ZodString>;
|
|
1194
1219
|
num_pages: z.ZodNullable<z.ZodNumber>;
|
|
1195
1220
|
folder_id: z.ZodNullable<z.ZodString>;
|
|
1196
1221
|
created: z.ZodString;
|
|
@@ -1204,6 +1229,7 @@ declare const SHARED_TOOL_OUTPUT_SCHEMAS: {
|
|
|
1204
1229
|
name: z.ZodString;
|
|
1205
1230
|
type: z.ZodNullable<z.ZodString>;
|
|
1206
1231
|
content_type: z.ZodNullable<z.ZodString>;
|
|
1232
|
+
url: z.ZodNullable<z.ZodString>;
|
|
1207
1233
|
num_pages: z.ZodNullable<z.ZodNumber>;
|
|
1208
1234
|
folder_id: z.ZodNullable<z.ZodString>;
|
|
1209
1235
|
created: z.ZodString;
|
|
@@ -1216,6 +1242,7 @@ declare const SHARED_TOOL_OUTPUT_SCHEMAS: {
|
|
|
1216
1242
|
name: z.ZodString;
|
|
1217
1243
|
type: z.ZodNullable<z.ZodString>;
|
|
1218
1244
|
content_type: z.ZodNullable<z.ZodString>;
|
|
1245
|
+
url: z.ZodNullable<z.ZodString>;
|
|
1219
1246
|
num_pages: z.ZodNullable<z.ZodNumber>;
|
|
1220
1247
|
folder_id: z.ZodNullable<z.ZodString>;
|
|
1221
1248
|
created: z.ZodString;
|
|
@@ -1506,6 +1533,7 @@ declare const SHARED_TOOL_OUTPUT_SCHEMAS: {
|
|
|
1506
1533
|
name: z.ZodString;
|
|
1507
1534
|
type: z.ZodNullable<z.ZodString>;
|
|
1508
1535
|
content_type: z.ZodNullable<z.ZodString>;
|
|
1536
|
+
url: z.ZodNullable<z.ZodString>;
|
|
1509
1537
|
num_pages: z.ZodNullable<z.ZodNumber>;
|
|
1510
1538
|
folder_id: z.ZodNullable<z.ZodString>;
|
|
1511
1539
|
created: z.ZodString;
|
|
@@ -1520,6 +1548,7 @@ declare const SHARED_TOOL_OUTPUT_SCHEMAS: {
|
|
|
1520
1548
|
dataroom: "dataroom";
|
|
1521
1549
|
folder: "folder";
|
|
1522
1550
|
dataroom_folder: "dataroom_folder";
|
|
1551
|
+
dataroom_document: "dataroom_document";
|
|
1523
1552
|
}>;
|
|
1524
1553
|
deleted: z.ZodLiteral<true>;
|
|
1525
1554
|
}, z.core.$strip>;
|
|
@@ -1660,6 +1689,7 @@ declare const SHARED_TOOL_OUTPUT_SCHEMAS: {
|
|
|
1660
1689
|
dataroom: "dataroom";
|
|
1661
1690
|
folder: "folder";
|
|
1662
1691
|
dataroom_folder: "dataroom_folder";
|
|
1692
|
+
dataroom_document: "dataroom_document";
|
|
1663
1693
|
}>;
|
|
1664
1694
|
deleted: z.ZodLiteral<true>;
|
|
1665
1695
|
}, z.core.$strip>;
|
|
@@ -1786,6 +1816,7 @@ declare const SHARED_TOOL_OUTPUT_SCHEMAS: {
|
|
|
1786
1816
|
dataroom: "dataroom";
|
|
1787
1817
|
folder: "folder";
|
|
1788
1818
|
dataroom_folder: "dataroom_folder";
|
|
1819
|
+
dataroom_document: "dataroom_document";
|
|
1789
1820
|
}>;
|
|
1790
1821
|
deleted: z.ZodLiteral<true>;
|
|
1791
1822
|
}, z.core.$strip>;
|
|
@@ -1815,6 +1846,7 @@ declare const SHARED_TOOL_OUTPUT_SCHEMAS: {
|
|
|
1815
1846
|
dataroom: "dataroom";
|
|
1816
1847
|
folder: "folder";
|
|
1817
1848
|
dataroom_folder: "dataroom_folder";
|
|
1849
|
+
dataroom_document: "dataroom_document";
|
|
1818
1850
|
}>;
|
|
1819
1851
|
deleted: z.ZodLiteral<true>;
|
|
1820
1852
|
}, z.core.$strip>;
|
|
@@ -1832,6 +1864,32 @@ declare const SHARED_TOOL_OUTPUT_SCHEMAS: {
|
|
|
1832
1864
|
created: z.ZodString;
|
|
1833
1865
|
}, z.core.$loose>;
|
|
1834
1866
|
}, z.core.$strip>;
|
|
1867
|
+
readonly detach_dataroom_document: z.ZodObject<{
|
|
1868
|
+
id: z.ZodString;
|
|
1869
|
+
object: z.ZodEnum<{
|
|
1870
|
+
document: "document";
|
|
1871
|
+
link: "link";
|
|
1872
|
+
dataroom: "dataroom";
|
|
1873
|
+
folder: "folder";
|
|
1874
|
+
dataroom_folder: "dataroom_folder";
|
|
1875
|
+
dataroom_document: "dataroom_document";
|
|
1876
|
+
}>;
|
|
1877
|
+
deleted: z.ZodLiteral<true>;
|
|
1878
|
+
}, z.core.$strip>;
|
|
1879
|
+
readonly move_dataroom_document: z.ZodObject<{
|
|
1880
|
+
item: z.ZodObject<{
|
|
1881
|
+
id: z.ZodString;
|
|
1882
|
+
object: z.ZodLiteral<"dataroom_document">;
|
|
1883
|
+
document_id: z.ZodString;
|
|
1884
|
+
document_name: z.ZodString;
|
|
1885
|
+
content_type: z.ZodNullable<z.ZodString>;
|
|
1886
|
+
num_pages: z.ZodNullable<z.ZodNumber>;
|
|
1887
|
+
folder_id: z.ZodNullable<z.ZodString>;
|
|
1888
|
+
folder_path: z.ZodNullable<z.ZodString>;
|
|
1889
|
+
order_index: z.ZodNullable<z.ZodNumber>;
|
|
1890
|
+
created: z.ZodString;
|
|
1891
|
+
}, z.core.$loose>;
|
|
1892
|
+
}, z.core.$strip>;
|
|
1835
1893
|
readonly list_dataroom_folders: z.ZodObject<{
|
|
1836
1894
|
folders: z.ZodArray<z.ZodObject<{
|
|
1837
1895
|
id: z.ZodString;
|
|
@@ -1915,6 +1973,7 @@ declare const SHARED_TOOL_OUTPUT_SCHEMAS: {
|
|
|
1915
1973
|
dataroom: "dataroom";
|
|
1916
1974
|
folder: "folder";
|
|
1917
1975
|
dataroom_folder: "dataroom_folder";
|
|
1976
|
+
dataroom_document: "dataroom_document";
|
|
1918
1977
|
}>;
|
|
1919
1978
|
deleted: z.ZodLiteral<true>;
|
|
1920
1979
|
}, z.core.$strip>;
|
|
@@ -1951,4 +2010,4 @@ declare const SHARED_TOOL_OUTPUT_SCHEMAS: {
|
|
|
1951
2010
|
}, z.core.$loose>;
|
|
1952
2011
|
};
|
|
1953
2012
|
|
|
1954
|
-
export { SHARED_TOOL_OUTPUT_SCHEMAS, type ToolContract, addDocumentVersionContract, anyObjectOutputSchema, attachDataroomDocumentContract, createDataroomContract, createDataroomFolderContract, createFolderContract, createLinkContract, dataroomAnalyticsOutputSchema, dataroomDocumentsListOutputSchema, dataroomItemObjectOutputSchema, dataroomItemOutputSchema, dataroomObjectOutputSchema, dataroomOutputSchema, dataroomsListOutputSchema, deleteDataroomContract, deleteDataroomFolderContract, deleteDocumentContract, deleteFolderContract, deleteLinkContract, deletedObjectOutputSchema, documentAnalyticsOutputSchema, documentObjectOutputSchema, documentOutputSchema, documentVersionObjectOutputSchema, documentsListOutputSchema, folderObjectOutputSchema, folderOutputSchema, foldersListOutputSchema, getDataroomAnalyticsContract, getDataroomContract, getDataroomFolderContract, getDocumentAnalyticsContract, getDocumentContract, getDocumentVersionContract, getFolderContract, getLinkAnalyticsContract, getLinkContract, getViewAnalyticsContract, getVisitorContract, linkAnalyticsOutputSchema, linkObjectOutputSchema, linkOutputSchema, linksListOutputSchema, listDataroomDocumentsContract, listDataroomFoldersContract, listDataroomsContract, listDocumentVersionsContract, listDocumentsContract, listFoldersContract, listLinkViewsContract, listLinksContract, listVisitorViewsContract, listVisitorsContract, moveDataroomFolderContract, moveFolderContract, promoteDocumentVersionContract, searchDataroomsContract, searchDocumentsContract, updateDataroomContract, updateDataroomFolderContract, updateDocumentContract, updateFolderContract, updateLinkContract, versionOutputSchema, versionsListOutputSchema, viewAnalyticsOutputSchema, viewObjectOutputSchema, viewsListOutputSchema, visitorObjectOutputSchema, visitorViewObjectOutputSchema, visitorViewsListOutputSchema, visitorsListOutputSchema, watermarkConfigInputSchema };
|
|
2013
|
+
export { SHARED_TOOL_OUTPUT_SCHEMAS, type ToolContract, addDocumentVersionContract, anyObjectOutputSchema, attachDataroomDocumentContract, createDataroomContract, createDataroomFolderContract, createFolderContract, createLinkContract, dataroomAnalyticsOutputSchema, dataroomDocumentsListOutputSchema, dataroomItemObjectOutputSchema, dataroomItemOutputSchema, dataroomObjectOutputSchema, dataroomOutputSchema, dataroomsListOutputSchema, deleteDataroomContract, deleteDataroomFolderContract, deleteDocumentContract, deleteFolderContract, deleteLinkContract, deletedObjectOutputSchema, detachDataroomDocumentContract, documentAnalyticsOutputSchema, documentObjectOutputSchema, documentOutputSchema, documentVersionObjectOutputSchema, documentsListOutputSchema, folderObjectOutputSchema, folderOutputSchema, foldersListOutputSchema, getDataroomAnalyticsContract, getDataroomContract, getDataroomFolderContract, getDocumentAnalyticsContract, getDocumentContract, getDocumentVersionContract, getFolderContract, getLinkAnalyticsContract, getLinkContract, getViewAnalyticsContract, getVisitorContract, linkAnalyticsOutputSchema, linkObjectOutputSchema, linkOutputSchema, linksListOutputSchema, listDataroomDocumentsContract, listDataroomFoldersContract, listDataroomsContract, listDocumentVersionsContract, listDocumentsContract, listFoldersContract, listLinkViewsContract, listLinksContract, listVisitorViewsContract, listVisitorsContract, moveDataroomDocumentContract, moveDataroomFolderContract, moveFolderContract, promoteDocumentVersionContract, searchDataroomsContract, searchDocumentsContract, updateDataroomContract, updateDataroomFolderContract, updateDocumentContract, updateFolderContract, updateLinkContract, versionOutputSchema, versionsListOutputSchema, viewAnalyticsOutputSchema, viewObjectOutputSchema, viewsListOutputSchema, visitorObjectOutputSchema, visitorViewObjectOutputSchema, visitorViewsListOutputSchema, visitorsListOutputSchema, watermarkConfigInputSchema };
|