A service that controls animatronic eyes via Arduino
Server has 6 tools with complete input schemas and descriptions, but quality is inconsistent. All tools use action verbs (moveEyes, setEyelids, blink, lookAt, randomMovement, setAutoBlink), which is good. However, descriptions are terse (10-40 chars), below the 50-200 char baseline for LLM optimization. Parameter descriptions are present but minimal. No output schema documentation. Error handling returns isError flag but lacks recovery guidance. Tools are single-responsibility and well-composed. Schemas use Zod validation with proper type constraints (enums, min/max bounds), which is strong. Missing: pagination (not applicable here), per-tool output schema docs, and actionable error messages.
Trigger blink animation
Move eyes to predefined direction positions
Move eyes to specified horizontal and vertical position
Enable or disable random eye movements
Enable or disable automatic blinking
Set eyelid openness percentage
Tool descriptions are 10-40 characters, well below the 50-200 char baseline. Descriptions like 'Move eyes to specified horizontal and vertical position' lack context on WHEN to use this tool vs lookAt, and what the return value contains.
No output schema documentation. Tools return {content: [{type: 'text', text: string}], isError: boolean}, but this structure is not documented for the LLM. Agents cannot plan downstream calls or extract structured data.
Error messages lack recovery guidance. When sendHttpRequest fails, the tool returns 'Failed to send command: <error>' but does not suggest next steps (retry, check ESP32 connectivity, verify IP config). LLM has no actionable path forward.
| Scored | Grade | Overall | Spec posture | Rubric |
|---|---|---|---|---|
| 2026-09-23 | F | 48 | 2026-07-28+ | v2 |
Parameter descriptions are minimal (e.g., 'Horizontal position (0-180)' for moveEyes.horizontal). No guidance on what values mean in physical terms (degrees? servo units?) or when to use moveEyes vs lookAt.
No tool annotations (readOnlyHint, destructiveHint, idempotentHint). All 6 tools are WRITE operations but lack destructiveHint annotation. Agents cannot distinguish safe reads from state-modifying calls.