Simple MCP server for linear rail control
Single tool with basic schema and description. Tool name violates single-responsibility principle ('move_rail_and_wait' combines movement + waiting). Description is adequate (89 chars) but lacks WHEN/WHY guidance. Input schema present with enums and types, but parameter descriptions are minimal (10-20 chars each). No output schema documented. Error handling returns text but lacks recovery guidance or error classification. No idempotency hints despite WRITE risk classification.
Move linear rail to a position and wait for completion. Simple command-based control.
Tool name violates single-responsibility principle: 'move_rail_and_wait' combines two concerns (movement + delay). Should split into 'move_rail' + 'wait_for_movement' or document why they must be atomic.
Parameter descriptions are too brief (10-20 chars). 'Named position to move to' and 'Or specify numeric position (mm)' lack context on mutual exclusivity, valid ranges, or when to use each. LLMs cannot infer constraints from short descriptions.
No output schema documented. Callers cannot predict response structure (content array with text type). LLMs need explicit output schema to plan downstream operations and extract data reliably.
Error handling returns unstructured markdown text without recovery guidance. Errors like 'Cannot connect to rail controller' lack actionable next steps (e.g., 'Check RAIL_IP environment variable' or 'Retry in 5 seconds').
| Scored | Grade | Overall | Spec posture | Rubric |
|---|---|---|---|---|
| 2026-09-23 | F | 44 | 2026-07-28+ | v2 |
Tool marked as WRITE risk but lacks idempotency hint or confirmation pattern. Agents may retry failed moves, causing duplicate rail movements. No dry-run or confirmation step to prevent accidental repositioning.