Two tools with complete input/output schemas and clear descriptions. Tool names follow verb_noun pattern (pdf.read, pdf.info). Descriptions are adequate (100-150 chars) but lack actionable context for LLM selection. Parameters are well-typed with descriptions, but lack constraint documentation (e.g., page range format, maxPages/maxChars rationale). Output schemas are defined but not visible in source excerpt. Error handling and recovery guidance absent. No tool annotations (readOnlyHint, idempotentHint) despite both being read-only operations.
Return page count, encryption status, permission flags, and standard document metadata for a local PDF.
Extract text (and optionally structured per-item positions) from a local PDF, over an optional page range, with per-call size caps.
Missing tool annotations for read-only operations. Both pdf.read and pdf.info should declare readOnlyHint=true to signal to agents these are safe, non-destructive calls.
Descriptions lack actionable context for LLM selection. 'Extract text from a local PDF' does not explain WHEN to use pdf.read vs pdf.info, or what structured=true does. Add: 'Use for text extraction; use pdf.info for metadata only. Set structured=true to get per-item positions (slower).'
Parameter constraints not documented in descriptions. 'pages' accepts '1-5' or '1,3,5' but description does not specify format. 'maxPages' and 'maxChars' lack rationale (why 50 pages? why 200k chars?). Add format examples and explain caps.
| Scored | Grade | Overall | Spec posture | Rubric |
|---|---|---|---|---|
| 2026-09-23 | D | 56 | 2025-06-18+ | v2 |
No error recovery guidance. If a PDF is encrypted and password is wrong, or file does not exist, the tool should return actionable error messages (e.g., 'File not found at /path/to/file. Check path and permissions.' or 'PDF encrypted. Provide password parameter.'). Current code likely returns raw exceptions.
Output schemas defined but not visible in source excerpt. Cannot verify if responses include all necessary fields for downstream tool chaining (e.g., page count, character count, extraction status). Verify readOutputSchema and infoOutputSchema are complete and documented.