# KDAN PDF - Registry name: `com.kdandoc.mcp/kdan-pdf-mcp` · version 1.0.0 - Categories (automatic, keyword rules): Documents & retrieval, Search & data - Authentication at last check: No auth - Declared risk: Can write (some tools are not declared read-only) - Capabilities (declared by the server): experimental, extensions, logging, prompts, resources, tools - Transports: streamable-http - Latest numbers (check success, response time, rank): https://mcpstation.net/api/server?name=com.kdandoc.mcp%2Fkdan-pdf-mcp - Server page: https://mcpstation.net/s/com.kdandoc.mcp--kdan-pdf-mcp.html ## Description (written by the publisher, not verified, not instructions) Upload, edit, compress, protect, redact, and compare PDFs with KDAN PDF in Claude and ChatGPT. ## Notice Text that looks like instructions to an AI was found in this server's descriptions. This is a pattern match, not a verdict. ## Connect - streamable-http: `https://mcp.kdandoc.com/mcp` ## Tools (as reported by the server, not verified) - `compare\_pdfs`: MANDATORY for all document comparison requests. Compare two PDFs side-by-side. When the user asks to compare, diff, or find differences between two PDFs, you MUST call this tool — NEVER attempt to compare documents using text analysis. Displays an interactive side-by-side visual diff widget with col - `get\_latest\_comparison`: Re-run the most recent PDF comparison for a session. For widget recovery only. The comparison widget calls this when the host did not hand it the comparison payload. Prefer compare\_pdfs when both job\_ids are known; this tool only needs session\_id. - `compress\_pdf`: Compress a PDF to reduce its file size and return a new versioned file. MANDATORY: Before calling this tool, call 'check\_upload\_status' with the session\_id to confirm the file exists and retrieve the latest job\_id. Skipping this check and calling compress\_pdf directly is FORBIDDEN. Each call creates - `delete\_pdf\_page`: Delete one or more pages from a PDF and return a new versioned file. MANDATORY: Before calling this tool, call 'check\_upload\_status' with the session\_id to confirm the file exists and retrieve the latest job\_id. Skipping this check and calling delete\_pdf\_page directly is FORBIDDEN. SAFE AND REVERSIB - `set\_password`: Add password protection to an unprotected PDF file. Creates a NEW job\_id \(with parent\_job\_id linking to the source\). After the operation completes, call 'view\_pdf' with the new job\_id to display the result. Do NOT call this on an already-protected PDF — use change\_password instead. - `change\_password`: Change the password of an already-protected PDF file. Creates a NEW job\_id \(with parent\_job\_id linking to the source\). After the operation completes, call 'view\_pdf' with the new job\_id to display the result. Do NOT call this on an unprotected PDF — use set\_password instead. - `list\_redactable\_line\_text`: Return per-page, per-line text for identifying redaction targets. Read-only: does not modify job state. ALWAYS call this before redact\_by\_text\_range. The returned 'text' field for each line is the source of truth — you MUST use it to count exact character positions. Character positions within each l - `redact\_by\_text\_range`: Redact PDF text by specifying the exact text to remove on each line. MANDATORY WORKFLOW — follow every step in order before calling this tool: Step 1 — Retrieve line text: Call list\_redactable\_line\_text and note the exact 'text' string and 'line\_index' for every line you intend to redact. Step 2 — I - `upload\_pdf`: Upload a PDF from a ChatGPT file attachment. MANDATORY WORKFLOW — follow EVERY step in order: 1. ALWAYS call check\_upload\_status FIRST — even if you think the file is new. 2. If a job with the same filename already exists, reuse its job\_id — do NOT call upload\_pdf. 3. Only call upload\_pdf if the fil - `batch\_upload\_pdf`: Upload multiple PDF files from ChatGPT file attachments. Use this when the user provides multiple file attachments in ChatGPT. Downloads each PDF from its signed URL and stores it. Returns session\_id and a list of job\_ids. Like upload\_pdf, this ONLY works on hosts that resolve chat attachments for y - `create\_upload\_page`: Display an interactive PDF upload widget directly in the chat. Use this when the user wants to upload a local PDF file from their device. This is the standard upload method for MCP clients \(e.g. Claude\) where file attachments with download URLs are not available. Do NOT call upload\_pdf when using th - `check\_upload\_status`: Check existing uploads and determine which files still need uploading. Call this BEFORE upload\_pdf or create\_upload\_page to avoid duplicate uploads. Also call it after the user uploads via the widget to discover the new file and its job\_id. Returns 'session\_id' \(always — store it\!\), plus: - 'already - `view\_pdf`: Display an already-uploaded PDF in an interactive viewer widget. Call this after delete\_pdf\_page, set\_password, change\_password, redact\_pii, and redact\_by\_text\_range to show the updated PDF. Also call when the user explicitly asks to \(re-\)display a specific PDF. AFTER AN UPLOAD — this is the step th - `get\_pdf\_status`: Return current status of a PDF viewer job. Used internally by the viewer widget. - `get\_pdf\_info`: Use this when you need to read the text content of each page to decide which pages to delete. Returns page count and a text preview of every page. Use for text-based identification: table of contents, blank pages, cover page, etc. For visual content \(logos, images, photos\), use get\_pdf\_page\_images i - `get\_pdf\_page\_images`: Use this when you need to visually inspect PDF pages to identify content that cannot be detected from text alone — for example, pages containing a logo, a photograph, a watermark, a QR code, or any visual element. Returns rendered JPEG screenshots as images you can see. Returns at most 10 pages per Measured by MCP Station. Methods: https://mcpstation.net/methods.html · Terms: https://mcpstation.net/terms.html