Schema-driven document extraction with local OCR + LLM. Document in, Structured JSON out.
Three tools with complete input schemas and descriptions, but significant gaps in output documentation and error handling. Tool names follow verb_noun convention (extract_, ocr_, list_). Descriptions are present (90-150 chars) but lack context on when to use each tool vs. alternatives. Parameters have types and defaults, but no enum constraints for ocr_engine/schema values despite accepting only specific options. Output schemas are undocumented, LLMs cannot plan downstream calls or validate responses. No error recovery guidance. Composition is reasonable (three distinct concerns), but missing idempotency guarantees and batch variants.
Extract structured data from a document using OCR + LLM. Supports PDF and image files (PNG, JPG, TIFF). Returns structured JSON matching the specified schema.
List all available built-in document schemas with their fields.
Run OCR on a document without LLM extraction. Returns recognized text as markdown with structure preserved.
Output schemas undocumented. extract_document and ocr_document return JSON strings, but LLMs cannot see the field structure. This prevents downstream tool chaining and forces LLMs to parse unstructured output.
Enum constraints missing for constrained parameters. 'schema' accepts only 8 built-in values (invoice, receipt, etc.) and 'ocr_engine' accepts only 5 (auto, paddle, easyocr, got, vlm), but these are documented as free-form strings. LLMs will hallucinate invalid values.
No error recovery guidance. Tool descriptions do not explain what to do if a file is not found, OCR fails, or schema is invalid. LLMs receive raw errors with no actionable next steps.
| Scored | Grade | Overall | Spec posture | Rubric |
|---|---|---|---|---|
| 2026-09-23 | D | 56 | 2026-07-28+ | v2 |
Tool descriptions lack context on when to use each tool. extract_document vs ocr_document distinction is unclear, when should an LLM choose OCR-only over extraction? No guidance on prerequisites or dependencies.
No idempotency guarantees documented. If extract_document is called twice with the same file and schema, will it return identical results? This matters for agent retry logic and prevents duplicate processing.