Connect KDAN PDF and your agent gets 16 tools, among them batch_upload_pdf, change_password, check_upload_status. It answers at https://mcp.kdandoc.com/mcp over streamable HTTP, and it listed its tools to an anonymous client, so no sign-in was needed for that. Our probes reached it 10 of 10 times since 5 September 2026; the last check, on 18 October 2026, succeeded.
Upload, edit, compress, protect, redact, and compare PDFs with KDAN PDF in Claude and ChatGPT.
Description as the publisher wrote it.
| Tool | What it does |
|---|---|
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, Inputs: pdf_files, session_id |
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 unprotec Inputs: session_id, job_id, old_password, owner, password |
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. Inputs: session_id, pending_filenames |
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. Disp Inputs: session_id, job_id_a, job_id_b |
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 c Inputs: session_id, job_id |
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 Inputs: session_id |
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 call Inputs: session_id, job_id, page_numbers |
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 sess Inputs: session_id |
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 visua Inputs: session_id, job_id |
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 scre Inputs: session_id, job_id, start_page, count |
get_pdf_status | Return current status of a PDF viewer job. Used internally by the viewer widget. Inputs: session_id, job_id |
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 Inputs: session_id, job_id |
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 Inputs: session_id, job_id, content |
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-pr Inputs: session_id, job_id, owner, password |
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 Inputs: pdf_file, session_id |
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-)d Inputs: session_id, job_id |
Every block below points at https://mcp.kdandoc.com/mcp. Pick your client and copy.
claude mcp add --transport http kdan-pdf https://mcp.kdandoc.com/mcp
{
"mcpServers": {
"kdan-pdf": {
"command": "npx",
"args": ["-y", "mcp-remote", "https://mcp.kdandoc.com/mcp"]
}
}
}{
"mcpServers": {
"kdan-pdf": {
"url": "https://mcp.kdandoc.com/mcp"
}
}
}{
"servers": {
"kdan-pdf": {
"type": "http",
"url": "https://mcp.kdandoc.com/mcp"
}
}
}{
"context_servers": {
"kdan-pdf": {
"url": "https://mcp.kdandoc.com/mcp"
}
}
}{
"mcpServers": {
"kdan-pdf": {
"serverUrl": "https://mcp.kdandoc.com/mcp"
}
}
}{
"mcpServers": {
"kdan-pdf": {
"url": "https://mcp.kdandoc.com/mcp"
}
}
}name: KDAN PDF
version: 0.0.1
schema: v1
mcpServers:
- name: KDAN PDF
type: streamable-http
url: https://mcp.kdandoc.com/mcp{
"mcpServers": {
"kdan-pdf": {
"httpUrl": "https://mcp.kdandoc.com/mcp"
}
}
}{
"mcpServers": {
"kdan-pdf": {
"type": "http",
"url": "https://mcp.kdandoc.com/mcp"
}
}
}{
"mcpServers": {
"kdan-pdf": {
"url": "https://mcp.kdandoc.com/mcp"
}
}
}goose://extension?url=https%3A%2F%2Fmcp.kdandoc.com%2Fmcp&type=streamable_http&id=kdan-pdf&name=KDAN%20PDF
It answered our last check on 18 October 2026 in 231 ms. Over 10 checks since 5 September 2026 it answered 10. Status here comes from Neuronto's own probes, not from the publisher.
Yes. It is published by kdandoc.com and served from mcp.kdandoc.com, the vendor's own domain: https://mcp.kdandoc.com/mcp.
16, as returned by the server's own tools/list on 31 August 2026: batch_upload_pdf, change_password, check_upload_status, compare_pdfs, compress_pdf, create_upload_page, delete_pdf_page, get_latest_comparison, and 8 more.
It answered our last check on 18 October 2026 in 231 ms. Over 10 checks since 5 September 2026 it answered 10.
Put the server under mcpServers in ~/.cursor/mcp.json with the URL https://mcp.kdandoc.com/mcp. The exact JSON is above, with the same setup for Claude Code, Claude Desktop, VS Code, Windsurf, Zed, Gemini CLI and the rest.
It listed its tools to an anonymous client, so reading the tool list needs no key. Individual tools can still ask for credentials in their own inputs.
Publisher: com.kdandoc.mcp. Endpoint host: mcp.kdandoc.com. ARD identifier: urn:air:com.kdandoc.mcp:mcp:kdan-pdf-mcp.
First indexed 31 August 2026. The tools are exactly what the server returned; nothing on this page
is inferred from its name. Ranking in Neuronto search is never for sale.