MCP server that lets text-only LLMs (GLM, DeepSeek, ...) read images and PDFs via a local vision model. No API keys — runs on your own GPU through Ollama.
Three well-named tools with strong descriptions (194 - 250 chars, above baseline 194). All tools have complete input schemas with Zod validation and parameter descriptions. Tool annotations (readOnlyHint, openWorldHint) present. Error handling returns structured messages via fail() helper. Key gaps: no output schema documentation, no pagination support for multi-page results, no explicit error categorization or recovery guidance in descriptions.
Read a local image file (png, jpg, webp, gif, bmp, tiff, avif, heic) with a local vision model. Returns a verbatim transcription of all visible text plus a structural description of UI, charts, and diagrams. Use this for screenshots, error dialogs, design mockups, whiteboard photos, and graphs. Supply `question` to ask about one detail instead of transcribing the whole image.
Read a local PDF. Pages with a text layer are extracted exactly and for free; scanned or image-only pages are rendered and read by a local vision model. Use `pages` (e.g. "1-5" or "2,7") to limit the work on long documents, and `question` to search for one fact instead of transcribing everything.
Report whether llama-server is reachable and loaded, which model it is serving, and whether poppler is installed for PDF rendering. Call this first when read_image or read_pdf fails.
Output schemas not documented. LLMs cannot infer what fields to expect from read_image, read_pdf, or vision_doctor responses. Descriptions mention 'returns text' but do not specify structure, field names, or types.
read_pdf lacks explicit error guidance. When mode='text' and a page has no text layer, the tool silently returns empty content. Description should state: 'If text extraction fails, try mode=vision or call vision_doctor to verify poppler is installed.'
vision_doctor name is vague. 'doctor' is not an action verb. Better names: 'check_vision_health', 'diagnose_vision_setup', or 'verify_vision_dependencies'. Current name does not clearly signal what the tool does.
No pagination or result limits documented. read_pdf can process up to config.maxPages (default likely 10 - 20), but the description does not state this cap. If a user requests pages 1-100, the tool silently drops pages beyond the limit without clear feedback.
Inferred effective spec: 2026-07-28+.
| Scored | Grade | Overall | Spec posture | Rubric |
|---|---|---|---|---|
| 2026-09-23 | D | 59 | 2026-07-28+ | v2 |
Error messages use generic VisionError class without categorization. LLMs cannot distinguish retryable errors (e.g., 'llama-server unreachable') from user-fixable errors (e.g., 'file not found'). Add error codes or explicit guidance: 'This is retryable, call vision_doctor to check llama-server status.'