MCP server for KolmoPDF — PDF parsing, layout-preserving translation, and Markdown format conversion.
KolmoPDF MCP server has well-structured tool definitions with complete input schemas and descriptions. All 6 tools are explicitly registered with Zod schemas and descriptions. However, descriptions are generic and lack LLM-optimized guidance on WHEN to use each tool vs alternatives. Parameter descriptions exist but are minimal (avg ~40 chars vs baseline 72). Output schemas are not documented, LLMs cannot infer what fields to expect from responses. Error handling is present but generic. No tool annotations (readOnlyHint, destructiveHint, idempotentHint) despite all tools being read-only. Missing guidance on multi-step workflows (e.g., parse → convert → check_balance chain).
Show the current KolmoPDF credit balance for the configured API key.
Convert parsed markdown or ZIP archives to target formats (Word, HTML, LaTeX, PDF).
Estimate the credit cost for parsing, translating, or converting a file.
Get the status and results of a previously submitted parsing, translation, or conversion task.
Parse a PDF file and extract text, tables, and images in Markdown format.
Translate a PDF while preserving layout and formatting.
Output schemas not documented. LLMs cannot infer response structure (fields, types, pagination). Forces agents to guess what data is available for downstream tool calls.
Descriptions lack LLM-optimized guidance. Generic descriptions (avg 50-70 chars) do not explain WHEN to use each tool vs alternatives or what prerequisites exist. E.g., 'Parse a PDF file...' does not explain that parse_pdf is async (returns task_id) vs synchronous.
No tool annotations despite all tools being read-only. Missing readOnlyHint in tool definitions. Agents cannot determine which tools are safe to call speculatively vs which require user confirmation.
| Scored | Grade | Overall | Spec posture | Rubric |
|---|---|---|---|---|
| 2026-09-23 | D | 50 | 2025-06-18+ | v2 |
Parameter descriptions are minimal. E.g., 'Path to the PDF file to parse' lacks format guidance (absolute vs relative, file:// URIs?). 'Target language for translation if enabled' does not specify language code format (ISO 639-1, 639-2, or full name?).
Async task pattern not documented. parse_pdf and translate_pdf return task_ids but descriptions do not explain that results are async. LLMs may expect immediate results and not call get_task_status.