MCP server for controlling OpenFlexure microscopes, capturing images, and managing stage positioning
Server has 5 tools with basic schemas and descriptions, but significant gaps limit production readiness. All tools have descriptions (10-50 chars, mostly short) and input schemas with types. However, descriptions lack depth, they state WHAT but not WHEN or WHY to use each tool. Parameter descriptions are minimal (e.g., 'X-axis position in steps' lacks range/constraint info). No output schemas documented. Error handling is present but generic ('Extension not found' lacks recovery guidance). No tool annotations (readOnlyHint, destructiveHint). The move_stage tool accepts optional x/y/z but lacks guidance on mutual exclusivity or coordinate system details. capture_image returns Image but no metadata (resolution, timestamp). autofocus has empty input schema, acceptable but underdocumented. call_extension is a generic pass-through that could mask underlying API complexity. run_z_stack lacks validation on start_z < end_z or steps > 0. Overall: functional but below production bar for agent reliability.
Run the autofocus routine
Call a specific extension method on the microscope
Capture an image from the microscope
Move the microscope stage to a specific position
Run a Z-stack acquisition
Descriptions lack WHEN/WHY context. 'Move the microscope stage to a specific position' does not explain when to use relative vs absolute, or coordinate system conventions. LLMs cannot infer intent.
No output schemas documented. capture_image returns Image but no metadata (resolution, bit depth, timestamp). run_z_stack returns string but no structured list of captured images or Z positions. Agents cannot chain results.
Parameter constraints missing. move_stage x/y/z lack min/max ranges. run_z_stack steps defaults to 10 but no bounds stated. capture_image high_quality is boolean but no guidance on when to use each mode (speed vs quality tradeoff).
Inferred effective spec: <=2025-11-25.
| Scored | Grade | Overall | Spec posture | Rubric |
|---|---|---|---|---|
| 2026-09-23 | F | 48 | <=2025-11-25 | v2 |
call_extension is a generic pass-through that exposes raw extension API. This violates single-responsibility principle and forces LLMs to reason about extension names, link names, and HTTP methods. Should wrap common extensions (device-info, position) as dedicated tools.
No tool annotations. move_stage, autofocus, run_z_stack are destructive (WRITE risk) but lack destructiveHint. capture_image is read-only but lacks readOnlyHint. Agents cannot distinguish safe from risky operations.