Visual frontend accessibility inspector MCP server. WCAG contrast checking, touch target validation, heading hierarchy audits, responsive screenshots.
lo-eyes has 5 tools with clear verb-noun naming (eyes_screenshot, eyes_scan, eyes_audit, eyes_compare, eyes_devices). All tools have descriptions (10-60 chars, mostly adequate). Input schemas are present with type definitions and parameter descriptions. However, descriptions are terse (avg 35 chars vs baseline 194 chars), lack WHEN/WHY context, and omit actionable error guidance. Output schemas are not documented. No error handling guidance visible. Tool composition is sound (each does one thing), but descriptions don't explain prerequisites, dependencies, or recovery paths. Baseline compliance: 100% have descriptions, but only ~40% meet depth standards (50-200 chars, LLM-optimized).
responsive + a11y audit across all viewports
visual regression: pixel-diff vs saved baseline
list available device presets
auto-chunk full page into readable pieces
viewport screenshot at any device preset
Descriptions are too terse (avg 35 chars vs baseline 194 chars). Missing WHEN/WHY context, prerequisites, and actionable error guidance. E.g., 'viewport screenshot at any device preset' doesn't explain when to use it vs eyes_scan, what happens on network errors, or what the output contains.
Output schemas are not documented. LLMs cannot infer what fields to expect from eyes_screenshot, eyes_scan, or eyes_audit responses. This breaks downstream tool chaining and forces agents to guess at response structure.
No error handling guidance. If a URL is unreachable, Playwright fails, or a baseline doesn't exist, the tool returns an error but doesn't tell the LLM what to do next (retry, ask user, try different URL). Violates recovery-guide pattern.
| Scored | Grade | Overall | Spec posture | Rubric |
|---|---|---|---|---|
| 2026-09-23 | D | 51 | 2026-07-28+ | v2 |
Parameter descriptions lack format/constraint details. 'device' param accepts enum values (iphone-se, iphone-14, ipad, laptop, desktop) but description doesn't list them. LLMs must infer valid options from code, not from the tool definition.
eyes_compare has a WRITE risk (save_baseline flag) but description doesn't warn that this modifies state. Agents need to know which calls are idempotent vs destructive to plan safely.