MCP server for image quality assessment, alignment, diffing, and defect severity classification for solar panel inspection
Five tools with complete input schemas and descriptions, but descriptions are terse (avg 95 chars, below 194-char baseline). All tools have type-annotated parameters with descriptions. Output schemas are partially documented in code (e.g., _diff_payload helper) but not formally declared in tool definitions. No enum constraints on detector parameter. Error handling is minimal, no recovery guidance or actionable error messages. Tool names follow verb_noun pattern (assess_quality, align_to_baseline, diff_against_memory, crop_and_rescan, classify_severity), which is good. However, descriptions lack WHEN/WHY context and dependency hints that LLMs need for tool selection.
Align an image to a baseline image using feature detection and homography estimation
Assess the quality of an image by analyzing blur variance, mean brightness, clipped dark ratio, clipped bright ratio, and coverage ratio
Classify the severity of a defect in a cropped region by comparing aligned and baseline images
Crop a region from aligned and baseline images and rescan for differences within that region
Compute pixel-level differences between an aligned image and a baseline image, identifying changed regions
Descriptions are terse (avg 95 chars vs 194-char baseline) and lack WHEN/WHY context. 'Assess the quality of an image by analyzing blur variance...' lists what fields are computed but not when an LLM should call this tool or what the results mean for downstream decisions.
No enum constraint on 'detector' parameter in align_to_baseline. LLMs may hallucinate invalid detector names. Valid values should be declared as an enum (e.g., 'sift', 'orb', 'akaze') to prevent invalid calls.
Output schemas are not formally documented in tool definitions. Return types are inferred from code (e.g., _diff_payload returns dict with 'changed_ratio', 'largest_area_ratio', 'regions'). LLMs cannot plan downstream calls without explicit output schema documentation.
| Scored | Grade | Overall | Spec posture | Rubric |
|---|---|---|---|---|
| 2026-09-23 | D | 54 | 2026-07-28+ | v2 |
Error handling is minimal. No recovery guidance. E.g., _bbox raises ValueError for invalid bbox but does not suggest what valid format is. classify_severity raises ValueError for out-of-bounds bbox but does not guide the LLM to retry with adjusted coordinates.
No tool annotations (readOnlyHint, destructiveHint, idempotentHint). Risk field indicates align_to_baseline is WRITE, but this is not declared in the tool definition. LLMs cannot distinguish safe (read-only) tools from state-modifying ones.