MCP server for ALS-RSOXS Beamline Control System - provides tools for reading analog input (AI) channels, digital I/O (DIO) channels, and motor positions/status
Eight tools with consistent but minimal quality. All tools have basic names starting with action verbs (list_, get_) and brief descriptions (17-78 chars). Input schemas are present and properly typed for all tools, but parameter descriptions are sparse or missing entirely. Output schemas are not documented. No error handling guidance, no field chaining for composition, and descriptions lack context for LLM tool selection. This is a functional but subpar definition set typical of internal beamline tools that prioritize API simplicity over agent usability.
Get current values for AI channels.
Get AI channel values with uncertainty (mean and standard deviation).
Get current states for DIO channels.
Get current positions for motors.
Get full status for motors including position, goal, and status bits.
List all available AI channel names.
List all available DIO channel names.
Parameter descriptions missing or minimal. 'channels' parameters lack context, do not explain what channel names are valid, how to discover them, or constraints. LLMs cannot determine valid values without consulting list_* tools.
Output schemas not documented. Functions return dict[str, Any] with no schema visible, LLMs cannot predict response structure or plan downstream tool calls. For 'get_motor_status' returning 'position, goal, status bits', the response format should be explicit.
No error handling guidance. Functions can raise RuntimeError and ValueError (visible in get_ai_values docstring) but no error response examples or recovery instructions provided. LLMs have no guidance on what to do if a channel name is invalid.
| Scored | Grade | Overall | Spec posture | Rubric |
|---|---|---|---|---|
| 2026-09-22 | D | 59 | 2026-07-28+ | v2 |
| 2026-03-09 | F | 17 | - | v1 |
List all available motor names.
Tool descriptions too brief (17 - 78 chars, baseline 194 chars). 'Get current values for AI channels' does not explain WHEN to call this vs list_ai_channels, WHAT constitutes 'current', or WHAT the response structure is. LLMs lack context for selection and interpretation.
Optional array parameters (channels, motors) default to 'all' but this is not documented in parameter descriptions. LLMs cannot know whether omitting 'channels' queries all AI channels or returns an error.
No tool composition hints. Tools return values but do not indicate what related tools to call next. E.g., get_motor_status returns 'status bits' but doesn't explain what bits mean or how to act on them. No tool chaining support.