pdf-toolbox-mcp
This server is a local-first PDF processing toolbox for AI agents, letting you read, transform, secure, and publish PDFs entirely on your machine—from OCR and encryption handling to splitting, compressing, and redaction.
Inspect & diagnose:
pdf_info,is_searchable,list_fonts,check_repair,dependency_status,doctorExtract content:
extract_text,extract_images,extract_attachments,render_pages(as PNG/image blocks for vision)OCR scanned PDFs:
ocr_pdfwrites a searchable text layer back into the file;batch_ocrhandles directoriesUnlock & protect:
unlock_pdfdecrypts with user password;protect_pdfapplies AES-256 encryption with granular permissionsManipulate pages:
split_pdf,merge_pdfs,rotate_pagesPublish & optimize:
linearize,sanitize,edit_metadata,compress_pdf(optionally to a target size)Redact securely:
redactandredact_textphysically remove content by rasterizing affected pages;locate_textfinds text coordinatesFill forms:
fill_formpopulates AcroForm fieldsSelf-routing errors guide agents (e.g.,
encrypted_pdf→ callunlock_pdf;missing_dependency→ see install command)
Click on "Deploy Server".
Wait a few minutes for the server to deploy. Once ready, it will show a "Started" state.
In the chat, type
@followed by the MCP server name and your instructions, e.g., "@pdf-toolbox-mcpOCR this scanned PDF and make it searchable"
That's it! The server will respond to your query, and you can continue using it as needed.
Here is a step-by-step guide with screenshots.
pdf-toolbox-mcp
中文文档 | Local-first PDF processing for AI agents.
Built for people already using Claude Desktop, Claude Code, Cursor, or another MCP client who want local PDF OCR, unlock, split/merge, render, and compress without uploading files.
Others help AI read PDFs. This one helps AI process them — OCR a scan into a truly searchable file, unlock encrypted PDFs, split/merge/rotate, re-encrypt for sharing. 100% on your machine: no cloud calls, no file uploads, no per-page fees.
Quick start
Add to any MCP client:
{
"mcpServers": {
"pdf-toolbox": {
"command": "uvx",
"args": ["--from", "pdf-toolbox-mcp", "pdftoolbox"]
}
}
}PyPI project page: pdf-toolbox-mcp
Need a paste-ready setup for a specific client?
List clients:
uv run pdftoolbox client listClaude Desktop:
uv run pdftoolbox client show claude-desktopCursor:
uv run pdftoolbox client show cursorUniversal project
.mcp.json:uv run pdftoolbox client show universalExport all client files:
uv run pdftoolbox client exportDetect the current client surface:
uv run pdftoolbox client detectSemi-auto install:
uv run pdftoolbox client installoruv run pdftoolbox client install --scope autoImport an existing Claude Desktop setup into Claude Code:
uv run pdftoolbox client import-claude-desktopAdd
--allonly if you want every supported client bundle
Need a one-shot diagnosis and dependency snapshot before your first task? Run uv run pdftoolbox doctor or uv run pdftoolbox doctor --json. It prints available_now, starter_action, starter_cli, and starter_tool so you can jump straight to the first supported move.
First task:
OCR a scan:
uv run pdftoolbox ocr scan.pdf --lang chi_sim+engUnlock a file:
uv run pdftoolbox unlock locked.pdf --password 'xxx'
MCP first task:
Ask
tool_doctorThen call
tool_ocr_pdf
Python dependencies resolve automatically. System tools are capability-leveled — missing ones never crash the server; the tool returns a structured error with the exact install command:
Need the full stack in one shot?
macOS:
brew install qpdf poppler tesseract tesseract-lang ghostscriptDebian/Ubuntu:
sudo apt install qpdf poppler-utils tesseract-ocr tesseract-ocr-chi-sim ghostscriptWindows: use the per-package commands in the table below
Level | Binary | Unlocks | macOS | Debian/Ubuntu | Windows |
L0 | qpdf | split / merge / rotate / unlock |
|
|
|
L1 | poppler | extract_text / render / info |
|
|
|
L2 | tesseract | ocr_pdf (write-back) |
|
|
|
L3 | ghostscript | compress |
|
|
|
Windows note: Ghostscript's binary is
gswin64c.exethere — the probe detects it automatically, socompress_pdfworks out of the box. Tesseract language packs (e.g.chi_sim) must be downloaded to itstessdatafolder separately.
Upstream / reference:
Every successful response carries a _deps summary ({"level": 2, "missing": ["gs"]}) so the agent always knows what's available.
In an MCP session, use tool_doctor.
Related MCP server: pdf-agent-toolkit-mcp
Why another PDF MCP?
The PDF MCP space is crowded — but only on the reading side. Based on a hands-on survey of the ecosystem (2026-09):
Capability | pdf-toolbox | Citra (916★) | ODA PDF-Tools (153★) | jztan/pdf-mcp (130★) | Cloud SaaS MCPs |
OCR write-back → searchable PDF file | ✅ | ❌ read-out only | ❌ (no OCR) | ❌ read-out only | ☁️ paid |
Unlock encrypted (user password) | ✅ | ❌ hard fail | ⚠️ owner-pw only | ❌ hard fail | ☁️ paid |
Split / merge / rotate | ✅ | ❌ | ✅ | ❌ | ☁️ paid |
Compress to target size | ✅ | ❌ | ❌ | ❌ | ☁️ paid |
Render pages for vision | ✅ | ✅ | ✅ | ✅ | ☁️ |
100% local & private | ✅ | ✅ | ✅ | ✅ | ❌ |
Pain points this addresses directly:
Claude natively refuses encrypted PDFs; ChatGPT reports "No text could be extracted" on scans — here, OCR writes a real text layer back into the file, and
unlock_pdfdecrypts with just the user password (sent to qpdf via stdin, never exposed in process arguments).Claude Code burns ~30× more tokens reading a PDF page-as-image than extracting text locally.
Tools (25)
Tool | What it does | Engine |
| Pages, encryption status, metadata — always call first | pdfinfo |
| Smart routing: text density check → recommends | pdftotext |
| Layout-aware text, exact page ranges | pdftotext |
| OCR write-back: scan → searchable PDF (deskew, skip/redo, lang fallback) | OCRmyPDF |
| Whole-directory OCR with per-file results, retries, timeouts | OCRmyPDF |
| PNG per page, | pdftoppm |
| Pull embedded images (inventory or PNG files) | pdfimages |
| Pull embedded attachment files | pdfdetach |
| Font audit — non-embedded fonts risk missing glyphs on other machines | pdffonts |
| Decrypt with user password, output a clean decrypted file; password sent via stdin | qpdf |
| AES-256 + granular permissions (print/extract/modify/…) | pikepdf |
| By ranges or every N pages | qpdf |
| Ordered merge | qpdf |
| 90/180/270 on selected pages | qpdf |
| Structural check; | qpdf |
| Web-optimized progressive-loading output | qpdf |
| Publishing hygiene: strip JS/OpenAction/metadata/attachments | pikepdf |
| True redaction: affected pages rasterized + opaque boxes — redacted text physically unrecoverable, other pages keep their text layer ( | pdftoppm + PIL |
| Redact by content: locate every occurrence of the given keywords and black them out — no manual coordinates needed | pdftotext -bbox |
| Find where text occurs: page + bounding boxes (PDF points, top-left origin) — the foundation for redaction & highlighting | pdftotext -bbox |
| Fill AcroForm fields (missing fields reported) | pikepdf |
| Set/clear Title/Author/… (docinfo + XMP) | pikepdf |
| Compress, optionally down a quality ladder until hitting | ghostscript |
| Probe system tools + install commands | — |
| One-shot onboarding check: imports, dependency probe, README paths | — |
Error contract (agents self-route): failures return {"ok": false, "error": "<code>"} — missing_dependency (with install per platform), encrypted_pdf (hint: call unlock_pdf first), wrong_password, output_exists (explicit overwrite required), invalid_page_range, …
Output safety
Single-file outputs are written to a same-directory temporary file and atomically replaced only after the operation succeeds.
render_pages,extract_images, andextract_attachmentsstage multi-file exports in a temporary directory and publish them only after all files are ready.overwritedefaults tofalse; passoverwrite=true(or the CLI--overwrite) to replace an existing output. Failed runs leave the previous output untouched.Unlock passwords are passed to qpdf over stdin, and protect passwords stay inside the Python/pikepdf process rather than command-line arguments.
Examples
In an MCP client, just describe the outcome — the agent chains the tools itself, and the error contract makes it self-routing (an encrypted_pdf error tells it to call unlock_pdf first, and so on). For headless use, define once:
PTX="uvx --from pdf-toolbox-mcp pdftoolbox"
# PyPI form: uvx --from pdf-toolbox-mcp pdftoolbox1 · Scan → searchable PDF (the flagship)
“
contract-scan.pdfis a scanned contract I can't search. Make it searchable — mostly Chinese with some English.”
Agent: pdf_info → is_searchable reports low text density → ocr_pdf(path, lang="chi_sim+eng") writes contract-scan_ocr.pdf. Text extraction and Ctrl+F now work on the output.
$PTX ocr contract-scan.pdf --lang chi_sim+eng
$PTX text contract-scan_ocr.pdf --pages 1-32 · Encrypted PDF → readable
“
locked.pdfis password-protected; the password ishunter2. Unlock it and summarize page 3.”
Agent: unlock_pdf(path, password="hunter2") → locked_unlocked.pdf → extract_text(pages="3").
$PTX unlock locked.pdf --password 'hunter2'
$PTX text locked_unlocked.pdf --pages 33 · Redact secrets before sharing
“Black out every occurrence of
张三andHT-2026-088indraft.pdf— it must be physically unrecoverable.”
Agent: redact_text(queries=["张三", "HT-2026-088"]) → draft_redacted.pdf. Pages containing hits are rasterized, so the strings vanish from the pixels and the text layer; other pages keep their selectable text. Verify by running extract_text on the output: zero hits expected.
$PTX redact-text draft.pdf --query 张三 --query HT-2026-088More recipes — merge & protect, compress-to-target, batch OCR, the publish-hygiene chain (sanitize → edit_metadata → linearize), vision rendering, locate-and-redact, form filling, damaged-file rescue — in the cookbook.
Configuration
Env | Default | Meaning |
|
| Default OCR languages; missing packs auto-fallback (flagged via |
| unset | If set, all writes are confined to this directory; system dirs are always denied |
CLI
Everything is also available headless (great for scripts and CI):
uvx --from pdf-toolbox-mcp pdftoolbox ocr scan.pdf --lang chi_sim+eng
uvx --from pdf-toolbox-mcp pdftoolbox unlock locked.pdf --password 'xxx'
uvx --from pdf-toolbox-mcp pdftoolbox split big.pdf --every-n 10
uvx --from pdf-toolbox-mcp pdftoolbox probe all(Use uvx --from pdf-toolbox-mcp … when installing from PyPI.)
Security & privacy
No network calls. Files never leave the machine.
All subprocess calls use argument lists (no shell interpolation); page-range parsing is shared and validated.
Outputs never silently overwrite:
overwrite=truemust be passed explicitly.Writes honor
PDF_TOOLBOX_WORKSPACE; system directories are denied, and staged outputs are published atomically.Passwords are never logged in error payloads.
Untrusted PDF content is flagged in tool descriptions (prompt-injection awareness).
License compliance
MIT. System tools are invoked as independent processes (aggregation): poppler (GPL-2.0), qpdf (Apache-2.0), tesseract (Apache-2.0), ghostscript (AGPL, optional); Python deps ocrmypdf/pikepdf are MPL-2.0. See PLAN.md §7 for the full table.
Development
uv sync --dev # install
uv run pytest -m "not realworld" # fast path
uv run pytest -m realworld # noisy / slower regression pack
uv run pytest # full suite
uv run pdftoolbox probe all
uv run pdftoolbox probe all --json # structured dependency snapshot
uv run pdftoolbox doctor
uv run python tools/onboarding_check.py
uv run python tools/onboarding_check.py --jsonCross-platform check without leaving macOS:
docker run --rm -v "$PWD":/src:ro python:3.12-slim bash -c \
'apt-get update -qq >/dev/null && apt-get install -y -qq poppler-utils tesseract-ocr qpdf ghostscript >/dev/null &&
pip install -q uv && cp -r /src /work && cd /work && uv sync --dev --quiet && uv run pytest -q'Roadmap: v0.1.4 ships all 25 tools above; v0.1.5 hardened output safety and failure isolation; v0.1.6 hardens secrets handling, configuration writes, and sparse page extraction. Explicit non-goals: editing existing text, password cracking — see PLAN.md.
License
MIT
Available Tools
25 toolstool_batch_ocrTool Batch OcrB
批量 OCR 写回:inputs 为文件路径或目录(取全部 PDF)。单文件失败不中断,逐文件返回结果。
| Name | Required | Description | Default |
|---|---|---|---|
| lang | No | ||
| deskew | No | ||
| inputs | Yes | ||
| out_dir | No | ||
| redo_ocr | No | ||
| overwrite | No | ||
| max_retries | No | ||
| per_file_timeout | No |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description must carry full behavioral disclosure. It clearly discloses the write-back nature, per-file result returning, and failure isolation. However, it does not clarify whether files are overwritten in place, how out_dir relates to write-back, or how redo_ocr/overwrite/retries/timeouts affect behavior, leaving operational side effects under-specified.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two short sentences, front-loaded with the main action and scope, and no filler or repetition. Every phrase contributes useful information.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Despite the presence of an output schema, the tool has 8 parameters and no annotations or schema descriptions. The description covers the required input and failure handling but leaves essential operational details like write destination, overwrite behavior, and advanced options unexplained, so an agent can make a default call but cannot confidently handle non-default use cases.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, so the description must compensate for all parameters. It only explains 'inputs' as file paths or directories taking all PDFs; the other seven parameters (lang, deskew, out_dir, redo_ocr, overwerite, max_retries, per_file_timeout) are left without meaningful semantics beyond their names and defaults.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description opens with '批量 OCR 写回' (batch OCR write-back), which identifies a concrete action and resource, then specifies that inputs can be file paths or directories containing all PDFs. This distinguishes it from the single-file sibling tool_ocr_pdf via the 'batch' and 'per-file' framing, though it does not fully define the write-back target.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The input guidance about directories and all PDFs, plus the statement that a single-file failure does not interrupt the batch, implies the intended use case for batch OCR over multiple files. However, no alternatives are named and there is no explicit when-to-use vs when-not-to-use guidance relative to the many sibling tools.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
tool_check_repairTool Check RepairC
结构体检(语法/流编码);repair=true 尝试重建输出修复版文件。
| Name | Required | Description | Default |
|---|---|---|---|
| path | Yes | ||
| output | No | ||
| repair | No | ||
| overwrite | No |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full behavioral burden. It does disclose the core behavior—checking structure and, when repair=true, rebuilding a repaired output file. However, it omits important behavioral traits such as whether the original file is modified, what happens without repair, and whether overwrite is required or destructive.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is compact and front-loads the main purpose. It contains no filler or redundant phrasing. It could be slightly improved by adding minimal context around output and overwrite, but as a concise summary it is effective.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a tool with four parameters, no annotations, and no output schema, this description is incomplete. It does not explain the output file behavior, overwrite semantics, failure modes, or when to prefer this tool over similar siblings. An agent would still need to infer or discover important calling conditions.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, so the description must compensate for the four parameters, but it only clarifies repair=true. The meanings of path, output, and overwrite are left entirely to the schema's types and defaults. This is insufficient given the lack of schema descriptions.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific action—structural inspection of syntax/stream encoding—and mentions an optional repair mode that rebuilds a repaired output file. This is clear about the resource and operation, but it does not explicitly distinguish it from sibling tools like tool_sanitize or tool_linearize, so it stops short of full differentiation.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No guidance is given about when to use this tool versus alternatives such as tool_sanitize, tool_linearize, or tool_pdf_info. The description implies it is for structural health checks and repairs, but there is no explicit condition, prerequisite, or exclusion to help an agent select it correctly.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
tool_compress_pdfTool Compress PdfA
压缩 PDF(ghostscript,有损:图像重采样)。target_mb 给定时沿 ebook→screen 下探直到达标(尽力而为)。
| Name | Required | Description | Default |
|---|---|---|---|
| path | Yes | ||
| output | No | ||
| quality | No | ebook | |
| overwrite | No | ||
| target_mb | No |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the full burden of behavioral disclosure. It effectively discloses that compression is lossy, uses image resampling via ghostscript, and that target_mb triggers a best-effort descent from ebook to screen quality. This is meaningful behavioral context beyond a simple 'compress PDF' statement, though it does not describe overwrite safety or output-file behavior.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is exceptionally concise, with no filler. It front-loads the core purpose, then adds the key behavioral nuance about target_mb and quality descent. Every clause earns its place.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given five parameters, zero schema descriptions, and no annotations, the description is not complete enough for an agent to confidently invoke the tool in all cases. The output schema may cover return shape, but the parameter semantics for output, overwrite, and path behavior are still missing, and the quality parameter's full range of allowed values is unstated.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, so the description must compensate for the five parameters. It adds meaning for target_mb (size target) and quality (values ebook and screen), but it does not explain path, output, or overwrite semantics. That leaves a significant portion of the parameter surface undocumented.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly identifies the tool as compressing PDFs, specifies the underlying engine (ghostscript), and the lossy nature (image resampling). This is a specific verb+resource pairing that makes the tool's purpose unmistakable, and it is distinct from sibling tools which do other PDF operations.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies the tool is used to reduce PDF file size, and it explains the quality descent path (ebook→screen) when target_mb is set. However, it does not explicitly state when to use this tool versus alternatives, mention prerequisites, or call out situations where lossy compression would be inappropriate.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
tool_dependency_statusTool Dependency StatusA
探测系统依赖、安装命令与可解锁工具。
工具报 missing_dependency 时先看这里。
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the behavioral disclosure burden. It frames the tool as a detection/lookup operation rather than a mutating one. The only minor gap is not explicitly stating that it does not install dependencies or modify the system, though '探测' strongly implies read-only behavior.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two short sentences, front-loaded with the core function and followed by the practical usage condition. There is no redundant or filler content.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The description is sufficient for a zero-parameter diagnostic tool, especially since an output schema exists. The phrase '可解锁工具' (unlockable tools) is slightly ambiguous, but the overall trigger condition and purpose are complete enough for an agent to select and invoke the tool correctly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The tool has zero parameters and the schema already covers them completely, so the description need not add parameter-level detail. It adds no parameter-specific semantics, but none are required in this case.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description uses a specific verb ('探测' / detect) with clear objects: system dependencies, installation commands, and unlockable tools. This clearly distinguishes the tool from the sibling PDF-processing tools and identifies it as a diagnostic utility.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It gives an explicit trigger condition: when a tool reports missing_dependency, look here first. This tells an agent exactly when to invoke this tool and establishes priority over other possible diagnostic actions.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
tool_doctorTool DoctorB
一键诊断:导入、依赖快照、README 关键路径。
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full burden of behavioral disclosure. It does not state whether this is read-only, whether it modifies anything, what triggers a failure, or what the 'diagnosis' output covers beyond the terse list.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is very short and front-loads the key action with '一键诊断'. However, the phrase 'README 关键路径' is somewhat cryptic and could be clearer while remaining concise.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a zero-parameter tool, the description is minimal but does not explain what the diagnosis produces, how to interpret it, or when to choose it over tool_dependency_status. The existence of an output schema mitigates return-format concerns, but the tool's role and boundaries remain under-specified.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The tool has zero parameters, so the description does not need to explain parameter semantics. The schema is already complete, and the description adds no confusion about inputs.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a clear verb ('diagnose') and names specific diagnostic targets: imports, dependency snapshot, and README key paths. This distinguishes it from the PDF-operation siblings, though it does not explicitly name overlapping alternatives like tool_dependency_status.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No guidance is provided on when to use this tool versus alternatives, nor any exclusions. The sibling tool_dependency_status could plausibly overlap with the 'dependency snapshot' aspect, but the description gives no routing information.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
tool_edit_metadataTool Edit MetadataA
编辑元数据(docinfo+XMP 双写);clear=true 清空全部——对外发布前配合 sanitize 使用。
| Name | Required | Description | Default |
|---|---|---|---|
| path | Yes | ||
| clear | No | ||
| title | No | ||
| author | No | ||
| output | No | ||
| creator | No | ||
| subject | No | ||
| keywords | No | ||
| overwrite | No |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With zero annotations, the description carries the full behavioral burden and it does disclose the dual-target side effect (docinfo+XMP) and the destructive clear-all path. However it is silent on whether the original file is modified in place, what overwrite does, and reversibility, leaving material behavioral risk undisclosed.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
A single front-loaded sentence packs operation, side-effect, destructive mode, and workflow pairing with zero wasted words. The semicolon and dash structure keeps the clear special case and the sanitize pairing immediately readable.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a mutating tool with 9 params, no annotations, and 0% schema coverage, the description is too thin: it never explains in-place vs output behavior, overwrite merge semantics, or how the dual-rite manifests on clear. The output schema may cover return values, but core invocation semantics remain guesswork.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0% across 9 parameters, so the description must compensate. Only clear=true receives real semantics; the roles of overwrite and output, and how title/author/subject etc. interact with overwrite, are left to name-guessing.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description opens with a specific verb+resource ('编辑元数据') and adds the dual-write mode ('docinfo+XMP 双写'), making the tool's scope unambiguous. No sibling tool targets metadata, so this clearly differentiates it from the extraction and content-manipulation tools in the family.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It states a concrete invocation context ('对外发布前配合 sanitize 使用') and a conditional mode (clear=true 清空全部), which tells an agent when this workflow step matters. It does not explicitly name when-not-to-use cases or alternatives, so it stops just short of the highest bar.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
tool_extract_attachmentsTool Extract AttachmentsA
抽取 PDF 内嵌附件文件到指定目录;overwrite=true 才允许覆盖同名文件。
| Name | Required | Description | Default |
|---|---|---|---|
| path | Yes | ||
| out_dir | No | ||
| overwrite | No |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Without annotations, the description carries the full burden. It does disclose a key behavioral trait: overwrite=true is required to overwrite existing files, which is useful. However, it does not explain other behaviors such as out_dir default handling, directory creation, or whether the source PDF is modified.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single sentence with no filler, front-loading the core action before the overwrite condition. Every part adds value, and it is appropriately sized for a tool with only three parameters.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The tool is relatively simple and has an output schema, so return-value details are not required. Still, the absence of explanation for out_dir's default behavior and the role of 'path' leaves minor gaps that matter for correct invocation, especially with no annotations to fill them.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, so the description must compensate. It adds meaning for 'out_dir' via '指定目录' and clarifies the overwrite semantics. However, it does not explain the meaning of the required 'path' parameter or what happens when out_dir is null.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific action ('extract PDF embedded attachment files') and a target resource, clearly distinguishing it from sibling tools like extract_images or extract_text. The phrase 'PDF 内嵌附件文件' precisely identifies what is being extracted.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description does not provide explicit guidance on when to use this tool versus alternatives such as tool_extract_images or tool_extract_text. The intended use case is implied by the purpose, but no exclusions, preconditions, or alternative tool references are provided.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
tool_extract_imagesTool Extract ImagesA
抽取 PDF 内嵌图片为 PNG;list_only=true 只返回图片清单不落盘。
overwrite=true 才允许覆盖同名图片。
| Name | Required | Description | Default |
|---|---|---|---|
| path | Yes | ||
| pages | No | ||
| out_dir | No | ||
| list_only | No | ||
| overwrite | No |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the behavioral transparency burden. It usefully discloses that list_only=true avoids writing files and that overwrite=true is required to replace same-named images, implying default write behavior and overwrite protection. However, it does not mention default output directory behavior, page handling, or error cases, leaving meaningful gaps.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is two sentences, front-loads the core action, and uses a clear newline to separate high-level behavior from parameter semantics. Every sentence adds non-redundant information; there is no filler or repetition of the title.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a tool with five parameters and no annotations, the description is incomplete: it omits the meaning of pages and out_dir, and does not clarify default output behavior or what happens when overwrite is false and a file exists. The output schema may cover return structure, but the missing parameter and side-effect context leaves an agent under-informed.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, so the description must compensate for missing parameter documentation. It meaningfully explains list_only and overwrite, but pages and out_dir remain unexplained. The description adds value for two of five parameters but does not fully compensate for the schema's lack of descriptions.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description names a specific action ('抽取 PDF 内嵌图片') and output format ('PNG'), which clearly identifies the tool's resource and distinguishes it from siblings like tool_extract_text and tool_extract_attachments. Even without explicit sibling naming, 'embedded images' is unambiguous.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description gives clear context for extracting embedded images but does not explicitly state when to prefer this tool over alternatives or when not to use it. The list_only and overwrite hints are parameter-level usage guidance, not tool-selection guidance, so usage remains mostly implied by the tool name.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
tool_extract_textTool Extract TextB
提取 PDF 文本(pdftotext)。pages 精确页范围如 '1-3,5';layout 保持版面;per_page 按页返回。
| Name | Required | Description | Default |
|---|---|---|---|
| path | Yes | ||
| pages | No | ||
| layout | No | ||
| per_page | No |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description bears the behavioral disclosure burden. It adds useful parameter behavior — exact page-range syntax, layout preservation, and per-page return mode — but it omits broader traits such as that pdftotext only reads the embedded text layer, that scanned PDFs may return empty text, and that the file is not modified.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single front-loaded sentence that names the operation first and then gives a compact semicolon-separated parameter summary. Every phrase adds relevant information without redundancy.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a four-parameter tool with no annotations, the description covers the main extraction options and an output schema exists for return values. However, it does not cover the critical decision boundary between this tool and OCR-based text extraction, nor what happens when pages is null, leaving the agent with partial context for correct invocation.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, so the parameter-level details in the description are essential. It explains pages with an example, layout as preserving layout, and per_page as returning by page; only path is left implicit, but its meaning is clear from the tool context.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific operation: extract PDF text via pdftotext, with a clear verb and resource. It does not explicitly differentiate itself from sibling OCR tools like tool_ocr_pdf that can also produce text from PDFs, relying on the pdftotext reference to imply embedded-text extraction.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
There is no guidance on when to use this tool versus alternatives such as tool_ocr_pdf for scanned PDFs or tool_locate_text for finding text positions. The description only explains parameter behaviors, not the use-case conditions that should select this tool.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
tool_fill_formTool Fill FormB
填写 AcroForm 表单(字段名→字符串/布尔)。未匹配字段在 missing 中返回。
| Name | Required | Description | Default |
|---|---|---|---|
| path | Yes | ||
| fields | Yes | ||
| output | No | ||
| overwrite | No |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the full burden of behavioral disclosure. It does reveal one useful behavior: unmatched fields are returned in 'missing' rather than throwing an error. However, it does not state whether the source file is modified, how 'overrite' and 'output' interact, or what happens for unsupported field types — significant gaps for a mutation-like tool.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single, front-loaded sentence with no filler or redundancy. Every clause adds information: the operation, the target, and the unmatched-field behavior.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a tool with four parameters, nested structures, and no annotations, the description is too thin. It leaves the output/overrite model and path semantics to the reader's inference. The one behavioral detail about missing fields is useful but not enough to safely invoke the tool with confidence in all intended cases.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, so the description must compensate for all parameters. It adds meaning only for 'fields' by stating the mapping is field name → string/boolean, and it hints at a 'missing' key in the result. It does not explain 'path', 'output', or 'overrite', which remain completely undocumented.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description uses a specific verb ('填写' / fill) and a specific resource ('AcroForm 表单'), clearly identifying the tool as a form-filling operation. This distinguishes it from the many sibling PDF tools like extraction, rendering, splitting, or redaction.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No guidance is given about when to use this tool instead of a sibling or when not to use it. The intended use is only implied by the description, with no explicit context, exclusions, or alternatives.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
tool_is_searchableTool Is SearchableA
智能路由入口:判断 PDF 是否已有可提取文本层,返回建议动作(extract_text 或先 ocr_pdf)。不确定时先调这个。
| Name | Required | Description | Default |
|---|---|---|---|
| path | Yes | ||
| sample_pages | No |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the behavioral disclosure burden. It explains that the tool only returns a recommended action rather than performing extraction, which is useful, but it does not mention whether the operation is read-only, what happens with invalid paths, or any edge cases around sampling.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
One concise sentence with critical routing information front-loaded. Every clause earns its place, and the fallback instruction '不确定时先调这个' is a useful, compact guideline.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a lightweight routing tool with an output schema present, the description covers the core decision flow and names both target tools. The only gap is the unexplained sample_pages parameter, which prevents full completeness.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, so the description must explain parameter meaning, but it mentions no parameters. 'path' is somewhat inferable, but 'sample_pages' and its default of 5 are completely unexplained, leaving the agent unsure how sampling affects the check.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific verb and resource: it checks whether a PDF has an extractable text layer and returns a recommended action. It clearly distinguishes itself from sibling tools by positioning itself as the routing entry point between extract_text and ocr_pdf.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description explicitly names when to use this tool: when uncertain, call it first. It also names the two alternative actions it routes between (extract_text and ocr_pdf), giving clear decision context.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
tool_linearizeTool LinearizeB
Web 优化:输出渐进加载版,适合在线浏览的发布文件。
| Name | Required | Description | Default |
|---|---|---|---|
| path | Yes | ||
| output | No | ||
| overwrite | No |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the full burden of behavioral disclosure. It does communicate that the output is a progressive-loading, web-optimized version, which is useful. However, it does not explain side effects, such as whether the original file is modified, what the `output` and `overwrite` parameters do semantically, or what happens if output is null.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single concise sentence with no filler, and the key purpose is front-loaded with 'Web 优化'. It is appropriately sized for a simple tool, though the phrasing is slightly vague and could be more explicit about the resource being linearized.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a tool with 3 parameters, no annotations, and no schema-level parameter descriptions, this description is incomplete. It provides the high-level use case but omits essential operational details like what input path should point to, how output/overwrite interact, and whether the operation is destructive. The sibling names strongly suggest PDF handling, but the description itself does not state this.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, so the description must compensate for parameter meaning, but it only weakly implies an output parameter via '输出'. The required `path` parameter and the `overwrite` behavior are not explained at all, leaving the agent to guess what values and side effects are involved.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific behavior: '输出渐进加载版' (outputs a progressive-loading version) and gives the use context: web-optimized, online browsing. It is distinguishable from sibling PDF operations like compress_pdf because it focuses on progressive loading behavior, though it never explicitly names PDF as the resource.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description clearly indicates when this tool is appropriate: for publishing files intended to be viewed online, with progressive loading as the goal. It does not mention alternatives or exclusion criteria, but the stated context is specific enough for an agent to select it over general PDF manipulation tools.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
tool_list_fontsTool List FontsA
字体体检:列出字体与嵌入状态,未嵌入字体跨设备查看/打印可能缺字。
| Name | Required | Description | Default |
|---|---|---|---|
| path | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full disclosure burden. It states that the tool lists fonts and their embedding status, and it adds a useful real-world implication. The verb 'list' implies a read-only operation, though it does not explicitly say so.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is compact, front-loaded with the core action, and each clause contributes information. There is no filler or redundant restating of the tool name.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple one-parameter, read-oriented tool with an output schema, the description covers the central purpose and the user-facing consequence well. The main gap is the undocumented path parameter, but the sibling context and the nature of the task make the intended input reasonably inferable.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The schema has one required parameter, path, with 0% description coverage, and the description does not compensate. It gives no guidance that path should point to a PDF, no format details, and no example, so an agent gets no additional parameter meaning from the description.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description uses a specific verb and object ('列出字体与嵌入状态' — list fonts and embedding status), making the tool's function immediately clear. It also distinguishes itself from every sibling tool in the list, none of which covers font inspection.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It provides a clear use context: a 'font health check' to detect embedding issues. The added consequence — unembedded fonts may cause missing characters when viewing or printing across devices — tells an agent when this tool is valuable, though it does not name alternatives or exclusions.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
tool_locate_textTool Locate TextA
定位文本出现的页面与坐标框(PDF 点、左上原点)——找内容在哪、给 redact 量坐标的地基。
中文无分词、英文跨词均可命中(NFKC 归一化去空白匹配)。
| Name | Required | Description | Default |
|---|---|---|---|
| path | Yes | ||
| pages | No | ||
| query | Yes | ||
| max_results | No |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries more weight, and it does disclose non-obvious matching behavior: no Chinese segmentation, English cross-word matching, NFKC normalization, and whitespace removal. It also clarifies the coordinate system. It does not explicitly note absence of side effects, but 'locate' is read-only by nature.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is compact, front-loaded with the primary function, then adds matching nuance in a second sentence. Every sentence earns its place, and there is no redundant noise.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The output schema covers return shape, and the description covers coordinate semantics and matching behavior. However, because schema coverage is 0% and annotations are absent, the missing documentation of pages and max_results leaves a real gap for an agent trying to call the tool correctly in non-trivial cases.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, so the description must explain the parameters, but it only elaborates on query matching. It does not describe the format or meaning of pages, the semantics of max_results, or how path should be supplied. The param names are somewhat self-evident, but the description provides little value beyond the schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description gives a specific verb and resource: locate text and return its page and coordinate box in PDF points with top-left origin. It also frames the tool as the coordinate source for redaction, which clearly separates it from extraction or rendering tools.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It communicates a clear use case: find where content is and provide coordinates for redaction. It does not explicitly mention alternatives like extract_text or state when not to use it, but the redaction-focused framing is sufficient context for most agents.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
tool_merge_pdfsTool Merge PdfsA
按传入顺序合并多个 PDF 为一个文件。
| Name | Required | Description | Default |
|---|---|---|---|
| paths | Yes | ||
| output | Yes | ||
| overwrite | No |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
There are no annotations, so the description carries the full behavioral transparency burden. It discloses the ordering behavior but does not mention whether input files are modified, how the optional overwrite parameter affects behavior, or what happens if the output file already exists. These are relevant side-effect details for an agent invoking the tool.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single concise sentence with no filler and the most important constraint (ordering) is included. Every word contributes to understanding what the tool does.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a straightforward merge operation the description covers the core behavior, but it leaves gaps around the optional overwrite parameter and failure behavior. Given that annotations are absent and the operation creates a file, a more complete description would state whether existing outputs are overwritten only when the flag is set and whether source files are left untouched.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The schema has 0% description coverage, so the description must compensate. It adds meaning by clarifying that the 'paths' array is order-sensitive and that 'output' is the single result file. However, it does not describe the 'overwrite' parameter, whose semantics are only partially inferable from its name and default value.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific action ('merge'), a clear resource ('PDFs'), and a meaningful constraint ('in the order passed in'). No sibling tool performs merging, so it is immediately distinguishable from the other PDF operations.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies that the tool should be used when you need to combine multiple PDFs, but it does not explicitly state when to use it versus alternatives or mention prerequisites such as input file validity or output path expectations. Since no sibling tool merges PDFs, the ambiguity is low, but the guidance is still only implicit.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
tool_ocr_pdfTool Ocr PdfA
对扫描件 OCR 并把文本层写回,产出可搜索 PDF(输出 _ocr.pdf)——本工具箱的核心差异化能力。
默认跳过已有文本层的页;默认语言 chi_sim+eng(缺语言包时自动降级并在结果中说明)。
| Name | Required | Description | Default |
|---|---|---|---|
| lang | No | ||
| path | Yes | ||
| deskew | No | ||
| output | No | ||
| redo_ocr | No | ||
| overwrite | No |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the full burden of behavioral disclosure. It clearly states the output artifact and naming convention, the default behavior of skipping existing text layers, language defaults (chi_sim+eng), and language-pack fallback behavior. These are meaningful behavioral traits beyond the schema. It doesn't mention performance expectations, side effects on the original file, or what happens when OCR is impossible, but it discloses more than most.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is concise and information-dense, with the primary purpose front-loaded in the first sentence and the key defaults and special behaviors in the second. Every sentence adds value, and there is no repetition of the tool name or schema details.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For an OCR tool with a single required parameter (path), the description provides usable defaults and output expectations. But it omits the meaning and valid ranges of the optional parameters (e.g., what 'deskew' does, how 'output' interacts with the naming convention, what 'redo_ocr' affects), and there is no annotation layer to fill that gap. The output schema exists but is not shown here, so return-structure clarification would be needed for a fully confident invocation.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, so every parameter lacks schema doc. The description does not explain individual parameters, so the agent must infer the effect of 'lang', 'deskew', 'redo_ocr', 'overwrite', and 'output'. However, the description's behavioral details (e.g., 'redo_ocr' likely relates to re-OCRing pages with existing text layers, 'overwrite' likely controls whether an existing output file is replaced) provide some implicit context. Since the tool has 6 parameters and 0% schema coverage, the description does not fully compensate for the gap.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description immediately identifies the tool's core function: OCR scanned PDFs and write the text layer back, producing a searchable PDF. It also specifies the output naming convention (<stem>_ocr.pdf), which is concrete and actionable. The claim that it is a core differentiating capability of the toolbox distinguishes it from sibling PDF tools.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description explains the default behavior when to use this tool: it is for scanned documents and searchable PDF output. It also mentions when it will skip pages (those already having text layers), which helps the agent understand when the tool is still useful. However, it doesn't explicitly name sibling alternatives such as tool_extract_text or tool_is_searchable for non-OCR workflows, so the when-not-to-use guidance is only partially explicit.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
tool_pdf_infoTool Pdf InfoA
获取 PDF 元信息:页数、是否加密、页面尺寸、标题作者等。处理任何 PDF 前先调用此工具。
| Name | Required | Description | Default |
|---|---|---|---|
| path | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description clearly implies a read-only metadata retrieval operation and lists what the call reveals, which is useful. However, with no annotations provided, the description carries a heavier burden and does not explicitly state side-effect freedom, error behavior, or what happens with invalid/encrypted files.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is two short sentences with no fluff. It front-loads the operation and metadata fields, then adds the critical usage timing guidance. Every sentence earns its place.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple one-parameter metadata tool with an output schema present, the description is mostly complete: it says what the tool returns, when to call it, and what resource it operates on. Minor gaps are path semantics and edge-case behavior, already reflected in other dimensions.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The only parameter, 'path', has 0% schema description coverage, and the description does not explain the expected path format, file accessibility, or whether it must be a local file vs a URI. The phrase '任何 PDF' implies it is a path to a PDF, but the description fails to compensate for the bare schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description uses a specific verb ('获取') and a specific resource ('PDF 元信息'), and enumerates concrete metadata fields (page count, encryption, page size, title, author). It also distinguishes itself from the sibling PDF-processing tools by positioning itself as the pre-flight info tool.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It explicitly states when to use it: '处理任何 PDF 前先调用此工具' (call this before processing any PDF). It does not explicitly name alternatives or when-not-to-use cases, but the pre-processing direction is clear enough for an agent to select it first.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
tool_protect_pdfTool Protect PdfB
AES-256 加密(对外分发)。user_password 留空 = 打开无密码、仅权限限制;权限默认可打印可复制、不可修改。
| Name | Required | Description | Default |
|---|---|---|---|
| path | Yes | ||
| output | No | ||
| overwrite | No | ||
| allow_form | No | ||
| allow_print | No | ||
| allow_modify | No | ||
| allow_extract | No | ||
| user_password | No | ||
| allow_annotate | No | ||
| allow_assembly | No | ||
| owner_password | No |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full transparency burden. It usefully discloses the blank user_password behavior and the default permissions, but it does not explain output/overwrite behavior or what happens when owner_password is null. These are material unknowns for a file-modifying tool.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two dense sentences with zero filler; the primary encryption purpose comes first and the critical user_password semantics immediately follow. This is appropriately sized for the information it conveys.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For an 11-parameter mutating tool with no annotations and 0% schema description coverage, this is too thin. Essential invocation details like what output=null means, whether overwrite applies to the input path, and what owner_password controls are absent. The output schema may cover return values, but not the file-side behavior.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, so the description must add parametric meaning. It does add the crucial semantic that an empty user_password still applies permissions without requiring an open password, and it summarizes three permission defaults. However, it leaves output, overwrite, owner_password, and several allow_* booleans unexplained beyond their raw names, and some default details are already present in the schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description nails the core action: it is AES-256 encryption for external distribution, which clearly identifies a protect/encrypt operation on a PDF. It distinguishes generally from siblings like unlock/extract/merge, though it never names a specific sibling.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The phrase 对外分发 gives a clear intended context: protect PDFs that will be sent outside the organization. It does not explicitly say when not to use it or point to unlock/aliternative tools, leaving some routing inference to the agent.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
tool_redactTool RedactA
真涂黑(安全级):regions=[{page,x,y,w,h}](PDF 点、左上原点)。含涂黑区域的页被光栅化—— 被涂文字物理删除,复制/提取/文本层均无法恢复;其余页保留原文本层。 rasterize_all=true 全文档光栅化(最高防护档)。
| Name | Required | Description | Default |
|---|---|---|---|
| dpi | No | ||
| path | Yes | ||
| output | No | ||
| regions | Yes | ||
| overwrite | No | ||
| rasterize_all | No |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full burden. It discloses critical behavior: pages with redactions are rasterized, text is physically and irrecoverably removed, other pages keep their text layer, and rasterize_all rasterizes the whole document.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two compact sentences deliver the security promise, coordinate format, irreversibility, and the rasterize_all escalation. No filler.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The core destructive behavior and region format are well covered, and an output schema reduces the need to document return values. Still, it omits output/overwrite flow, dpi effect, and path constraints, which matter for a destructive tool.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 0%, and the description meaningfully documents regions=[{page,x,y,w,h}] with coordinate units and origin, plus rasterize_all semantics. However, dpi, path, output, and overwrite are not explained in either the schema or description.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific verb/resource: secure redaction via coordinate regions, and clearly distinguishes itself by explaining physical deletion and rasterization, which separates it from sibling tools like tool_redact_text.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It gives context that this is the security-level true redaction option and describes when rasterize_all=true is strongest, but it does not explicitly state when to prefer this tool over tool_redact_text or tool_sanitize.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
tool_redact_textTool Redact TextA
按内容真涂黑:自动定位每个关键词的全部出现处并涂黑(无需手工量坐标)。 如"把所有合同编号涂掉"。被涂页光栅化、文字物理删除;其余页保留文本层。
| Name | Required | Description | Default |
|---|---|---|---|
| dpi | No | ||
| path | Yes | ||
| output | No | ||
| queries | Yes | ||
| overwrite | No | ||
| rasterize_all | No |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the burden and reveals destructive effects: redacted pages are rasterized, text is physically deleted, and other pages retain their text layer. It does not cover output/overwrite side effects, but the core mutating behavior is explicit.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two terse sentences plus a concrete example convey the action, workflow, and destructive side effects with no filler. The key behavior is front-loaded.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The description is sufficient for the core redaction scenario but incomplete for optional output behavior: it does not clarify how dpi, overwrite, output, or rasterize_all alter the result. Since an output schema exists, returns are covered, but the overall tool behavior is not fully specified.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 0%, so the description must explain parameters, but it only clarifies 'queries' as keywords. 'path', 'dpi', 'output', 'overwrite', and 'rasterize_all' receive no meaningful explanation, leaving most parameters under-specified.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Identifies a precise action: automatically locate every occurrence of given keywords and black them out by content, without manual coordinates. The phrase '按内容' and the example distinguish it from coordinate-based redaction tools and sibling tool_redact.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The example '把所有合同编号涂掉' and the automatic keyword-location behavior make the intended use case clear. It implies a content-driven redaction workflow, though it never explicitly names alternatives or says when not to use it.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
tool_render_pagesTool Render PagesC
渲染指定页为 PNG。return_images=True 时直接返回图像内容块(供视觉查看复杂版面/图表/扫描页)。
| Name | Required | Description | Default |
|---|---|---|---|
| dpi | No | ||
| path | Yes | ||
| pages | No | 1 | |
| out_dir | No | ||
| overwrite | No | ||
| return_images | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full behavioral disclosure burden. It reveals the core rendering behavior and the return_images=True mode, but it is silent on what happens by default (e.g., whether PNGs are written to out_dir), how overwrite behaves, and what the response looks like when return_images is false.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is short and front-loaded: the main function appears first, and the return_images behavior is presented as a conditional addition. It is efficient, though the brevity comes at the cost of missing useful parameter and output context.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given 6 parameters, no schema descriptions, no annotations, and no output schema, this description is insufficient for reliable invocation. An agent would still need to infer how pages should be formatted, what dpi/out_dir/overwrite do, and what the tool returns in its default mode.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0% and there are 6 parameters, so the description must compensate. It only explains return_images, leaving dpi, pages syntax, out_dir, overwrite, and path semantics undocumented. The phrase '指定页' weakly hints at pages, but the key parameters are not explained.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the action ('渲染指定页为 PNG' – render specified pages as PNG) with a specific verb and resource. It also explains the purpose of return_images for visual inspection, making the tool's function distinct from text-extraction and OCR siblings, though it does not explicitly name alternatives.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description gives a conditional usage hint: use return_images=True for direct image content when visually inspecting complex layouts, charts, or scanned pages. However, it does not say when to prefer this tool over siblings such as extract_images or ocr_pdf, nor does it mention when not to use it.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
tool_rotate_pagesTool Rotate PagesB
旋转页面 90/180/270 度。pages 缺省旋转全部页。
| Name | Required | Description | Default |
|---|---|---|---|
| path | Yes | ||
| angle | Yes | ||
| pages | No | ||
| output | No | ||
| overwrite | No |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description must carry the full behavioral disclosure burden. It reveals the angle range and the default 'pages' behavior, but it does not disclose whether the original file is modified in place, what happens when 'output' is omitted, or what 'overwrite' actually controls. For a mutating PDF tool, these are critical safety-relevant behaviors.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is very concise and front-loaded, with no wasted words. However, it is somewhat terse for a mutating tool with multiple undocumented parameters; a sentence or two about output/overwrite behavior would make it appropriately sized without adding clutter.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The tool has 5 parameters, no annotations, and 0% schema description coverage, yet the description only covers the rotation action and the 'pages' default. It omits essential input-side behavior such as how 'output' and 'overwrite' interact and whether the original file is modified. The existence of an output schema does not compensate for these input-behavior gaps.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, so the description must compensate for the bare input schema. It adds meaning for 'angle' (allowed values) and 'pages' (default all), but leaves 'path', 'output', and 'overwrite' semantically unexplained. This is insufficient for a 5-parameter tool with no field descriptions.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description uses a specific verb ('rotate') with a specific resource ('pages'), and states exact supported angles (90/180/270 degrees). It also communicates that omitting 'pages' rotates all pages. This clearly differentiates it from the sibling tools, none of which are rotation tools.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The intended use case is clear from the operation itself: rotate PDF pages by the specified angle. No sibling tool performs rotation, so there is no ambiguity about which alternative to choose. However, the description does not explicitly state exclusions or conditions such as output-file requirements or overwrite behavior.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
tool_sanitizeTool SanitizeA
发布版脱敏:剥离 JS/OpenAction/元数据/附件(可选注释)。正文文本不动——防元数据与隐藏对象泄密。
| Name | Required | Description | Default |
|---|---|---|---|
| path | Yes | ||
| output | No | ||
| overwrite | No | ||
| strip_metadata | No | ||
| strip_javascript | No | ||
| strip_annotations | No | ||
| strip_attachments | No |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations present, the description carries the full burden of disclosing behavior. It clearly lists what the tool strips (JS/OpenAction/metadata/attachments) and explicitly states that body text is untouched, which is critical destructive semantic information. It does not mention side effects around overwriting or output handling, but the core behavioral profile is adequately transparent.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single compact sentence with a clear colon-led list and a dash-introduced rationale. Every clause adds information: purpose, stripped items, optional toggle, non-goal, and security motivation. There is no filler or redundancy.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a destructive 7-parameter tool with no annotations, the description provides purpose, scope, excluded behavior, and security rationale. An output schema exists, so return-value documentation is not required here. It would be more complete if it related the output/overwrite parameters to the described sanitation workflow, but the agent can still select and invoke the tool correctly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, so the description must compensate. It usefully maps the strip_metadata, strip_javascript, strip_attachments, and strip_annotations parameters to concrete behaviors, and '正文文本不动' clarifies that no text-modification parameter is intended. However, it does not clarify the required 'path' parameter nor the semantics of 'output' and 'overwrite', which are meaningful for safe invocation.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description uses a specific verb ('剥离' / strip) and a clear target ('发布版脱敏' / release-sanitization), then enumerates exactly which components are removed: JS, OpenAction, metadata, attachments, and optionally annotations. It also states a key non-goal (body text unchanged), which distinguishes it from sibling tools like tool_redact and tool_edit_metadata.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The phrase '发布版脱敏' gives a clear release/distribution context for when this tool should be used, and '正文文本不动' signals that it is not for content redaction. It does not explicitly name sibling alternatives or state when-not-to-use conditions, so it falls slightly short of a 5.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
tool_split_pdfTool Split PdfA
拆分 PDF:ranges='1-3,5' 按区间出文件,或 every_n=N 每 N 页一段。二者二选一。
| Name | Required | Description | Default |
|---|---|---|---|
| path | Yes | ||
| ranges | No | ||
| every_n | No | ||
| out_dir | No | ||
| overwrite | No |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description must carry behavioral disclosure. It does reveal mutual exclusivity of ranges/every_n and that files are produced per range/page-group, but says nothing about side effects like overiting, file creation location, or whether the source PDF is modified.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
One compact sentence that front-loads the action and uses concrete examples. No filler.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The core splitting behavior is covered and output schema exists, but with no annotations and five params, the holostic description misses important operational details such as what out_dir/overwrite do and what the output files are called. This is adequate but not complete.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Input schema has 0% description coverage, so the description needs to compensate. It explains the ranges and every_n formats and their exclusivity, which helps, but it leaves path, out_dir, and overwrite semantically unexplained.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description names the operation ('拆分 PDF') and illustrates both split modes with concrete syntax, which unambiguously identifies this as the splitting tool among siblings like merge/rotate. It goes beyond the tautological title.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It includes some parameter usage guidance ('二者二选一' for ranges/every_n) but never addresses when to choose this tool over siblings or states exclusions/alternatives. The context is mostly about mode selection, not tool selection.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
tool_unlock_pdfTool Unlock PdfA
用密码解锁加密 PDF,输出解密文件。user(打开)密码即可,无需 owner 密码。解锁后再走其他工具。
| Name | Required | Description | Default |
|---|---|---|---|
| path | Yes | ||
| output | No | ||
| password | Yes | ||
| overwrite | No |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description must carry behavioral disclosure by itself. It does state the key behavior of producing a decrypted output file and clarifies that only the user/open password is needed, which is useful. But it does not disclose side effects, whether the original file is preserved, or what happens when overwrite is used.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is three short purposeful sentences: it states what the tool does, adds the crucial password distinction, and gives workflow guidance. Every sentence earns its place, and the most important information is front-loaded.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given that the tool has few parameters and an output schema exists, the description is mostly sufficient for basic invocation. The main contextual gaps are the meaning and default behavior of 'output' and 'overwrite', plus failure behavior on an incorrect password. These are not fatal, but they require the agent to infer.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The schema description coverage is 0%, so the description needs to compensate. It does clarify the password parameter meaningfully ('user(打开)密码即可,无需 owner 密码') and implies the output parameter via '输出解密文件'. However, 'path' and especially 'overwrite' remain underexplained in the description.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states a specific action ('解锁加密 PDF') and a concrete result ('输出解密文件'), making the tool's purpose obvious. It does not explicitly name a sibling to differentiate from, but the verb and resource are specific enough to separate it from protect, compress, and metadata tools.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The statement '解锁后再走其他工具' gives some workflow context by implying this tool should be run before other PDF tools when a password is present. However, it does not explicitly state when not to use it or compare it with alternatives such as tool_protect_pdf or tool_check_repair.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
Tool Schema Changelog
Recent tool additions, removals, and schema changes observed during successful MCP inspections.
4 tool updates
v0.1.6- Added
tool_doctor - Changed
tool_extract_attachments1 field changed- added
Input schema / properties / overwriteAdded value: +{ + "default": false, + "type": "boolean" +}
- Changed
tool_extract_images1 field changed- added
Input schema / properties / overwriteAdded value: +{ + "default": false, + "type": "boolean" +}
- Changed
tool_render_pages1 field changed- added
Input schema / properties / overwriteAdded value: +{ + "default": false, + "type": "boolean" +}
24 tool updates
v0.1.1- First observed
tool_batch_ocr - First observed
tool_check_repair - First observed
tool_compress_pdf - First observed
tool_dependency_status - First observed
tool_edit_metadata - First observed
tool_extract_attachments - First observed
tool_extract_images - First observed
tool_extract_text - First observed
tool_fill_form - First observed
tool_is_searchable - First observed
tool_linearize - First observed
tool_list_fonts - First observed
tool_locate_text - First observed
tool_merge_pdfs - First observed
tool_ocr_pdf - First observed
tool_pdf_info - First observed
tool_protect_pdf - First observed
tool_redact - First observed
tool_redact_text - First observed
tool_render_pages - First observed
tool_rotate_pages - First observed
tool_sanitize - First observed
tool_split_pdf - First observed
tool_unlock_pdf
TDQS
Scored across 25 tools
Most tools target distinct PDF operations, but a few have overlapping boundaries: tool_redact and tool_redact_text both perform redaction via different input modes, and tool_doctor/tool_dependency_status both serve diagnostic purposes. The descriptions are generally clear enough to route correctly, so the overlap is manageable rather than confusing.
All tools follow a consistent snake_case style with a uniform tool_ prefix, and most use a verb_noun pattern like tool_merge_pdfs or tool_extract_text. A few names deviate into noun phrases or question style (tool_doctor, tool_dependency_status, tool_is_searchable), but these are minor exceptions in an otherwise predictable naming scheme.
25 tools sits at the heavy end of the ideal range for a PDF toolbox; each tool does target a genuine PDF operation, but the count is borderline and could feel sprawling. Grouping or reducing some of the more granular diagnostic tools might have made the surface tighter.
The surface covers the main PDF lifecycle well: inspection, text extraction, OCR, merge/split, rotation, redaction, compression, encryption, forms, metadata, and sanitization. Obvious gaps remain, such as creating a PDF from scratch, deleting/reordering pages, digital signing, or watermarking, but these are not core to the demonstrated purpose and can be worked around.
Maintenance
Related MCP Connectors
Merge, split, extract, rotate, reorder and stamp PDF pages from your AI chat, all offline.
Merge, split, extract, rotate, reorder and stamp PDF pages from your AI chat, all offline.
Merge, split, extract, rotate, reorder and stamp PDF pages from your AI chat, all offline.
Convert PDF pages into editable Word-ready text from your AI chat, all offline.
Related MCP Servers
- FlicenseNot gradedqualityBmaintenanceEnables AI agents to process files locally — OCR images, extract text from PDFs and DOCX, and describe images using local vision models, all without sending data to external services.-
- FlicenseNot gradedqualityAmaintenanceEnables AI agents to perform comprehensive PDF operations locally, including compression, text extraction, PII redaction, page organization, splitting, merging, watermarking, creation, and form filling, all without cloud uploads.6 npm-
- AlicenseAqualityBmaintenanceEnables AI agents to inspect PDFs, merge or extract pages, and clean text entirely offline through the Model Context Protocol, with no uploads, API keys, or network calls.444 npmMIT
- FlicenseBqualityAmaintenanceEnables local, offline document extraction and manipulation—PDF first but also HTML, DOCX, XLSX, PPTX, EML, EPUB, Markdown, and plain text—through tools for probing, locating, extracting, converting, assembling, OCR, protecting, and redacting documents, with nothing leaving the machine.7-