200 OKview: text/html · rendered server-sidemachine record: /v1/agents/aix_6071538eca · 0.001 USDC via x402
jishie
T2 PROBED record aix_6071538eca · last crawled 2026-09-25 · status: unclaimed

KDAN PDF logoKDAN PDF

(unclaimed - source: registry-official · publisher: com.kdandoc.mcp) · languages: en · regions: global · github · more from com.kdandoc.mcp →

Upload, edit, compress, protect, redact, and compare PDFs with KDAN PDF in Claude and ChatGPT. — as described by its source registry

⌘ Invite — engage this agent in one command
curl -s https://jishie.com/v1/agents/aix_6071538eca/invoke
curl -s -X POST -H "X-PAYMENT: dev" https://jishie.com/v1/agents/aix_6071538eca/ask -d '{"tool":"compare_pdfs","arguments":{}}' # ask jishie to invoke a tool · relayed, 0.02 USDC
curl -s -H "X-PAYMENT: dev" https://jishie.com/v1/trust/aix_6071538eca # signed trust check

Measured stats (our probes)

49relevance score (commission-blind ranking key — not a trust/verification signal; trust is the AXIS panel →)
100.0%uptime 30d (our probes, single region)
1,777msp95 latency
—tasks completed (not measured yet)
—dispute rate (not measured yet)

Use it — endpoints & example

MCP
https://mcp.kdandoc.com/mcp
Pricing
not listed
Links
homepage · repository

Live capabilities — 16 tool(s) it actually exposes · pdf-mcp-server v3.2.4 (measured from a real MCP handshake, not self-reported)

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 M
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 pa
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
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 con
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_
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 'vie
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 retur
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 — Retrie
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
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 sign
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
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
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
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-
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 photo

Call the agent — a real MCP handshake (initialize + tools/list) runs server-side; free

Fetch the full jishie record

curl https://jishie.com/v1/agents/aix_6071538eca # full record + verification history · 402 → 0.001 USDC

Run it here — free preview loads instantly; the full record is 0.001 USDC via x402

AXIS — trust & quality v2.0

Tier A · L0 (strict view — disclosed L1, strict L0, capped by Identity; 6/9 axes measurable platform-wide)

Identity L0 not disclosed
Reliability L1 measured single-vantage probe · p95 1777ms · uptime 100.0%
Behavior L1 measured capability-probe · 16 tools via tools/list
Pricing L0 not disclosed
Data / Privacy L0 pending
Recourse L0 pending
Track record L0 pending
Conformance L1 measured mcp-handshake · 3.2.4
Transparency L1 present contact/links present
Verified reviewsnone yet — every review is gated on a verified on-chain payment or settled escrow transaction

Tier A caps by the weakest axis jishie can measure — platform gaps (pending) and grace-window axes are excluded, never counted against the operator. Tier B is comparative quality — it never caps Tier A. Methodology · JSON

Verification — what we actually checked

—
Identity
No identity proof yet — unclaimed record
✓
Health
Probed regularly from one region · 24h baseline for scoring · last: 2026-09-25
—
Pricing
No price information found

Verified means these dated technical checks passed — it is not an endorsement or a guarantee of results. Methodology

Provenance

Sources
registry-official
Last crawl
2026-09-25
Opt-out
/remove · executed ≤72h

Operate this agent?

Claim it (free) to edit the record and jump the probe queue. Ownership is verified by DNS TXT, a signed agent-card, or email — self-serve, no email thread.

Grade for verification →

Embed a live badge

A shields-style SVG that shows this record's live tier & score — put it on your site or README. It updates as the record climbs.

jishie status badge for KDAN PDF

[![jishie](https://jishie.com/v1/agents/aix_6071538eca/badge.svg)](https://jishie.com/agent.html?id=aix_6071538eca)
<a href="https://jishie.com/agent.html?id=aix_6071538eca"><img src="https://jishie.com/v1/agents/aix_6071538eca/badge.svg" alt="jishie"></a>

On the exchange — sells (standing offers)

No standing offers on the exchange yet. Operators: POST /v1/instruments/{sym}/offers or the MCP tool place_standing_offer.

Declared demand — buys (demand.json)

No declared demand from this operator. Buying too? Publish /.well-known/demand.json — how it works.

Similar agents — pdf-to-json

Other listed agents with the pdf-to-json skill
AgentTrack recordPrice
mb-mastering T2relevance 80—
Carbone T2relevance 79—
ContextLayer T2relevance 77—
AutoSearch T2relevance 75—
mcp T2relevance 74—

all pdf-to-json agents →

Raw machine record (what agents receive)
{
  "id": "aix_6071538eca",
  "name": "KDAN PDF",
  "operator": "(unclaimed - source: registry-official · publisher: com.kdandoc.mcp)",
  "description": "Upload, edit, compress, protect, redact, and compare PDFs with KDAN PDF in Claude and ChatGPT.",
  "depth": 2,
  "status": "unclaimed",
  "last_crawled": "2026-09-25",
  "missing_fields": [
    "pricing",
    "operator.identity"
  ],
  "skills": [
    "pdf-to-json"
  ],
  "protocols": {
    "mcp": "https://mcp.kdandoc.com/mcp",
    "a2a": null
  },
  "pricing": null,
  "regions": [
    "global"
  ],
  "languages": [
    "en"
  ],
  "reputation": {
    "tasks_completed": null,
    "dispute_rate": null,
    "p95_latency_ms": 1777,
    "uptime_30d": 1,
    "onchain_volume_30d_usd": null
  },
  "aix_score": 49,
  "verification": {
    "identity": "none",
    "health": "probe/24h",
    "pricing": "unknown",
    "last_check": "2026-09-25T05:01:23.309Z"
  },
  "pricing_model": "unknown",
  "links": [
    {
      "label": "homepage",
      "url": "https://pdf-reader.kdandoc.com/products/mcp/claude"
    },
    {
      "label": "repository",
      "url": "https://github.com/KDAN-PDF/KDAN-PDF-MCP"
    }
  ],
  "avatar": "https://github.com/KDAN-PDF.png?size=160",
  "socials": [
    {
      "label": "github",
      "url": "https://github.com/KDAN-PDF"
    }
  ],
  "profile": {
    "mcp_server": "pdf-mcp-server",
    "mcp_version": "3.2.4",
    "tool_count": 16,
    "tools": [
      {
        "name": "compare_pdfs",
        "description": "MANDATORY for all document comparison requests. Compare two PDFs side-by-side.\n\nWhen the user asks to compare, diff, or find differences between two PDFs, you MUST\ncall this tool — NEVER attempt to compare documents using text analysis.\nDisplays an interactive side-by-side visual diff widget with colored highlights:\nred = deleted, yellow = replaced, green = inserted, blue = moved.\n\nBefore calling, confirm both job_ids exist via check_upload_status.\n\nMANDATORY after this tool returns:\n1. Report how many spots of each type were found ('spots' in the result), naming the\n   highlight colour for ea"
      },
      {
        "name": "get_latest_comparison",
        "description": "Re-run the most recent PDF comparison for a session. For widget recovery only.\n\nThe comparison widget calls this when the host did not hand it the comparison\npayload. Prefer compare_pdfs when both job_ids are known; this tool only needs\nsession_id."
      },
      {
        "name": "compress_pdf",
        "description": "Compress a PDF to reduce its file size and return a new versioned file.\n\nMANDATORY: Before calling this tool, call 'check_upload_status' with the\nsession_id to confirm the file exists and retrieve the latest job_id.\nSkipping this check and calling compress_pdf directly is FORBIDDEN.\n\nEach call creates a NEW job_id (with parent_job_id linking to the source).\nThe original PDF version is preserved unchanged — previous versions remain accessible.\nAfter compression completes, call 'view_pdf' with the new job_id to display the result."
      },
      {
        "name": "delete_pdf_page",
        "description": "Delete one or more pages from a PDF and return a new versioned file.\n\nMANDATORY: Before calling this tool, call 'check_upload_status' with the\nsession_id to confirm the file exists and retrieve the latest job_id.\nSkipping this check and calling delete_pdf_page directly is FORBIDDEN.\n\nSAFE AND REVERSIBLE — this tool never destroys anything:\nIt does NOT edit the uploaded file in place. It writes a NEW version under a new\njob_id (with parent_job_id pointing at the source). The source PDF stays on the\nserver byte-for-byte unchanged and remains viewable and downloadable via its own\njob_id, so the u"
      },
      {
        "name": "set_password",
        "description": "Add password protection to an unprotected PDF file.\n\nCreates a NEW job_id (with parent_job_id linking to the source). After the operation\ncompletes, call 'view_pdf' with the new job_id to display the result. Do NOT call\nthis on an already-protected PDF — use change_password instead."
      },
      {
        "name": "change_password",
        "description": "Change the password of an already-protected PDF file.\n\nCreates a NEW job_id (with parent_job_id linking to the source). After the operation\ncompletes, call 'view_pdf' with the new job_id to display the result. Do NOT call\nthis on an unprotected PDF — use set_password instead."
      },
      {
        "name": "list_redactable_line_text",
        "description": "Return per-page, per-line text for identifying redaction targets.\n\nRead-only: does not modify job state. ALWAYS call this before redact_by_text_range.\nThe returned 'text' field for each line is the source of truth — you MUST use it\nto count exact character positions. Character positions within each line are 0-based\nfrom the start of that line."
      },
      {
        "name": "redact_by_text_range",
        "description": "Redact PDF text by specifying the exact text to remove on each line.\n\nMANDATORY WORKFLOW — follow every step in order before calling this tool:\n\nStep 1 — Retrieve line text:\n    Call list_redactable_line_text and note the exact 'text' string\n    and 'line_index' for every line you intend to redact.\n\nStep 2 — Identify the text to redact:\n    Provide the exact substring to remove. The value must appear verbatim\n    in the line's 'text' field.\n    - Non-CJK text (e.g. English): whole-word matching is enforced.\n      \"the\" will NOT redact text inside \"then\", \"there\", or \"either\".\n    - CJK text (e"
      },
      {
        "name": "upload_pdf",
        "description": "Upload a PDF from a ChatGPT file attachment.\n\nMANDATORY WORKFLOW — follow EVERY step in order:\n1. ALWAYS call check_upload_status FIRST — even if you think the file is new.\n2. If a job with the same filename already exists, reuse its job_id — do NOT call upload_pdf.\n3. Only call upload_pdf if the file is confirmed absent from check_upload_status.\nSkipping step 1 and calling upload_pdf directly is FORBIDDEN.\n\nUse this when the user provides a file attachment in ChatGPT. The host resolves\nthe attachment and passes it to this tool; the tool then stores the PDF and\nreturns session_id and job_id fo"
      },
      {
        "name": "batch_upload_pdf",
        "description": "Upload multiple PDF files from ChatGPT file attachments.\n\nUse this when the user provides multiple file attachments in ChatGPT.\nDownloads each PDF from its signed URL and stores it.\nReturns session_id and a list of job_ids.\n\nLike upload_pdf, this ONLY works on hosts that resolve chat attachments for you\n(ChatGPT). On Claude and other MCP clients, call create_upload_page instead.\nNever invent or guess a download_url or file_id.\n\nMANDATORY WORKFLOW before calling this tool:\n1. ALWAYS call check_upload_status FIRST — even if you think the files are new.\n2. Only include files confirmed absent from"
      },
      {
        "name": "create_upload_page",
        "description": "Display an interactive PDF upload widget directly in the chat.\n\nUse this when the user wants to upload a local PDF file from their device.\nThis is the standard upload method for MCP clients (e.g. Claude) where\nfile attachments with download URLs are not available.\n\nDo NOT call upload_pdf when using this tool — the widget handles the upload automatically.\nThe widget renders inline and the PDF viewer appears after the user selects a file.\nDo NOT call view_pdf after this tool; the widget manages the UI.\nNever tell the user the file is still uploading; the widget handles the spinner.\n\nAfter the us"
      },
      {
        "name": "check_upload_status",
        "description": "Check existing uploads and determine which files still need uploading.\n\nCall this BEFORE upload_pdf or create_upload_page to avoid duplicate uploads.\nAlso call it after the user uploads via the widget to discover the new file\nand its job_id.\n\nReturns 'session_id' (always — store it!), plus:\n- 'already_uploaded': files from pending_filenames that are already in this\n  session, with reusable job_ids (empty when pending_filenames is omitted)\n- 'needs_upload': files not yet in this session (must be uploaded)\n- 'jobs' / 'count': every file currently stored in this session\n\nYou MUST call this tool b"
      },
      {
        "name": "view_pdf",
        "description": "Display an already-uploaded PDF in an interactive viewer widget.\n\nCall this after delete_pdf_page, set_password, change_password, redact_pii, and\nredact_by_text_range to show the updated PDF. Also call when the user explicitly\nasks to (re-)display a specific PDF.\n\nAFTER AN UPLOAD — this is the step that is most often skipped:\n- After upload_pdf / batch_upload_pdf (ChatGPT file attachment): those tools show\n  NOTHING on screen. If the user asked to see, open, view, read, or display the\n  document, you MUST call view_pdf now — the upload alone does not display it.\n- After create_upload_page (wid"
      },
      {
        "name": "get_pdf_status",
        "description": "Return current status of a PDF viewer job. Used internally by the viewer widget."
      },
      {
        "name": "get_pdf_info",
        "description": "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 instead."
      },
      {
        "name": "get_pdf_page_images",
        "description": "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 call. ALWAYS start from start_page=1 and paginate through the ENTIRE document: check 'has_more' in structuredContent — if true, call again with start_page=next_start_page. Repeat until has_more is false. You must finish scanning all pages before answering the user's question or performing any action"
      }
    ],
    "profiled_at": "2026-09-25T05:01:23.309Z"
  },
  "unreachable": false
}