MCP server for controlling a Phosphobot robot, providing camera frame access and object pickup capabilities
Two tools with minimal descriptions and no parameter descriptions. get_camera_frame has an empty input schema ({}); pickup_object has a constrained enum parameter but lacks any description of what the parameter controls or when to use it. Both tool descriptions are short but present. No output schemas are documented. Error handling is minimal, exceptions are caught but responses lack recovery guidance. Tool names follow verb-noun convention but descriptions are insufficient for LLM selection in a multi-tool context. This server is well below the baseline for production use.
Récupère une image depuis le flux webcam du robot (via API phosphobot).
Launches a replay sequence to pick up a specified object
get_camera_frame has NO input schema (empty {}). Tool provides no way for LLMs to understand what parameters it expects or constraints.
No parameter descriptions for pickup_object's 'name' enum parameter. LLMs cannot infer when to use 'banana' vs 'black circle' vs 'green cross' without context. Description field is required for every parameter.
Tool descriptions are below the 50-200 char baseline for LLM optimization. get_camera_frame (85 chars including French text) and pickup_object (56 chars) are minimal. Neither explains WHEN to call the tool vs alternatives or what downstream operations require.
No output schemas documented for either tool. get_camera_frame returns Image; pickup_object returns str. LLMs cannot plan downstream tool calls or parse responses without explicit output schema documentation.
| Scored | Grade | Overall | Spec posture | Rubric |
|---|---|---|---|---|
| 2026-09-22 | F | 45 | 2026-07-28+ | v2 |
| 2026-03-09 | F | 12 | - | v1 |
Error handling does not guide recovery. RuntimeError exceptions (e.g., 'Invalid response from phosphobot', 'No camera frame returned') are raw and provide no remediation path for LLMs. Missing recovery-guide pattern.
pickup_object's success response ('Launched replay for {name}.') is unstructured text. No structured fields or IDs returned for potential chaining. If a downstream tool needs an episode_id or status, there's no reference to chain on.
No tool annotations (readOnlyHint, destructiveHint, idempotentHint) present. pickup_object is clearly a WRITE/destructive operation but is not marked. get_camera_frame is READ_ONLY but annotation is missing from code.