Multi-agent AI layer for robot control via MCP + ROS2. Provides three specialized MCP servers: robo_sense (perception), robo_move (movement control), and robo_task (task management).
23 tools with consistent naming (verb_noun pattern) and comprehensive parameter schemas. Descriptions are present and moderately detailed (avg ~120 chars), but lack LLM-optimized guidance on WHEN to use each tool vs. alternatives. Parameter types are well-defined with min/max constraints, but descriptions often omit format/range details. Output schemas are not documented, LLMs cannot predict response structure. Error handling is absent; no recovery guidance. Security considerations (e.g., collision avoidance enforcement) are mentioned in descriptions but not formalized as tool annotations.
Multi-waypoint path following. Navigates the robot through a sequence of waypoints in order.
Return to (0, 0). Navigates the robot back to its home position at the origin.
Rotate N degrees in-place. Rotates the robot by a specified number of degrees at a given angular speed.
Timed velocity command with safety gating. Sends a velocity command (linear_x, angular_z) for a specified duration. All commands pass through the safety controller which enforces hard velocity limits and collision avoidance.
Emergency stop. Immediately halts the robot or all robots in multi-robot mode.
Navigate to (x, y). Moves the robot to a target point with optional altitude control for drones.
No output schemas documented. LLMs cannot predict response structure (e.g., what fields robo_sense_get_position returns, whether robo_task_get_history returns paginated results). Forces agents to guess and retry on parsing failures.
No error handling or recovery guidance. Tools lack descriptions of failure modes (e.g., what happens if robot is offline, collision detected, or path unreachable). LLMs cannot self-correct or retry intelligently.
No tool annotations (readOnlyHint, destructiveHint, idempotentHint). Agents cannot distinguish safe reads from destructive writes without parsing descriptions. robo_move_stop and robo_task_abort are destructive but unmarked.
Inferred effective spec: <=2025-11-25.
| Scored | Grade | Overall | Spec posture | Rubric |
|---|---|---|---|---|
| 2026-09-23 | C | 60 | <=2025-11-25 | v2 |
Get a natural language description of the robot's surroundings. Combines position, velocity, obstacles, and battery status into a human-readable summary.
Detect obstacles within a threshold distance. Returns list of obstacles sorted by distance with severity levels.
Get battery status (drones only). Returns battery percentage, time remaining, and critical status.
Get IMU data. Returns acceleration, angular velocity, and orientation (roll, pitch, yaw).
Get LIDAR scan data. Returns obstacle detection by sector (front, left, right, rear, etc.) with distances and severity levels.
Get current robot position and heading. Returns x, y, z (altitude for drones), theta in radians and degrees.
Get current robot velocity. Returns linear velocity (x, y) and angular velocity (z).
Cancel current task. Aborts the current task and transitions to ABORTED state.
Evaluate goal completion. Checks if the current task goal has been achieved based on coverage and step completion.
Get coverage map. Returns coverage statistics including cells covered, percentage, and ASCII grid visualization.
Get full event log. Returns the complete event history for the current task including state changes, observations, and actions.
Get current state + progress + coverage %. Returns task state, step progress, elapsed time, and coverage percentage.
Record observation/action/warning. Logs an event to the task event log with type (observation, action, warning, error).
Create task with goal + steps. Initializes a new task with a goal description and list of execution steps. Transitions from IDLE to PLANNING state.
Change state. Transitions the task state machine to a new state (executing, blocked, replanning, etc.) with validation of allowed transitions.
Update coverage from robot position. Updates the coverage grid based on current robot position.
Mark step complete/failed. Updates the status of a specific task step (complete, failed, or in_progress).
Parameter descriptions lack format/constraint details. E.g., 'degrees' in robo_move_rotate has no range; 'waypoints' in robo_move_follow_path lacks coordinate system or unit clarification. Descriptions should state 'Degrees to rotate (unbounded, but typical range -360 to +360)' or similar.
Multi-robot mode requires robot_id parameter, but single-robot mode makes it optional with default=null. Descriptions say 'Required when NUM_ROBOTS > 1' but do not clarify behavior when omitted in single-robot mode. Ambiguous parameter semantics.