sphero-rvr-mcp
Server Configuration
Describes the environment variables required to run the server.
| Name | Required | Description | Default |
|---|---|---|---|
| RVR_BAUD_RATE | No | Serial baud rate | 115200 |
| RVR_LOG_LEVEL | No | Log level (DEBUG, INFO, WARNING, ERROR) | INFO |
| RVR_LOG_FORMAT | No | Log format (json, console) | json |
| RVR_SERIAL_PORT | No | Serial port for RVR | /dev/ttyAMA0 |
| RVR_COMMAND_TIMEOUT | No | Auto-stop timeout (seconds, 0=disabled) | 5.0 |
| RVR_MAX_SPEED_PERCENT | No | Default speed limit (0-100) | 50.0 |
| RVR_COMMAND_QUEUE_SIZE | No | Max queued commands | 100 |
Instructions
Guidance the server publishes about itself, which clients place ahead of the tool catalog so the model reads it before choosing anything.
This server publishes no instructions, or was last inspected before Glama recorded them.
Capabilities
Features and capabilities supported by this server
Protocol revision2025-11-25
| Capability | Details |
|---|---|
| tools | {
"listChanged": true
} |
| logging | {} |
| prompts | {
"listChanged": false
} |
| resources | {
"subscribe": false,
"listChanged": false
} |
| extensions | {
"io.modelcontextprotocol/ui": {}
} |
| experimental | {} |
Tools
Functions exposed to the LLM to take actions
| Name | Description |
|---|---|
| test_immediate_returnB | Test tool that returns immediately. |
| test_slow_returnB | Test tool that takes 3 seconds. |
| connect_simpleB | Simple connect test without parameters. |
| connectC | Connect to the Sphero RVR robot and wake it up. |
| disconnectB | Disconnect from RVR. |
| get_connection_statusB | Get connection status. |
| drive_with_headingC | Drive at speed toward heading. |
| drive_tankC | Drive with tank controls. |
| drive_rcD | Drive with RC controls. |
| stopB | Stop RVR. |
| emergency_stopC | Emergency stop. |
| clear_emergency_stopB | Clear emergency stop. |
| reset_yawC | Reset yaw. |
| reset_locatorC | Reset locator. |
| pivotA | Pivot (turn in place) by a specified number of degrees. Rotates the RVR without forward motion. Uses internal heading control for accurate turning. |
| drive_forwardA | Drive forward a specified distance in meters. Uses RVR's internal position controller for accurate movement. |
| drive_backwardA | Drive backward a specified distance in meters. Uses RVR's internal position controller for accurate movement. |
| set_all_ledsC | Set all LEDs. |
| set_ledC | Set specific LED group. |
| turn_leds_offA | Turn off all LEDs. |
| start_sensor_streamingD | Start sensor streaming. |
| stop_sensor_streamingA | Stop sensor streaming. |
| get_sensor_dataB | Get sensor data. Note: Sensor queries use blocking serial I/O. Each query typically completes in <100ms but may block the event loop briefly. |
| get_ambient_lightB | Get ambient light. |
| enable_color_detectionD | Enable color detection. |
| get_color_detectionD | Get color detection. |
| get_battery_statusC | Get battery status. |
| get_safety_statusC | Get safety status. |
| set_speed_limitC | Set speed limit. |
| set_command_timeoutD | Set command timeout. |
| send_ir_messageD | Send IR message. |
| start_ir_broadcastingC | Start IR broadcasting. |
| stop_ir_broadcastingA | Stop IR broadcasting. |
| get_temperatureA | Get temperature sensor readings (motor and Nordic die temps). Returns temperatures in Celsius for left_motor, right_motor, and nordic_die. |
| get_motor_thermal_protection_statusA | Get motor thermal protection status. Returns temperature and status for each motor. Status: 0=ok, 1=warning, 2=critical |
| get_firmware_versionA | Get firmware version (major.minor.revision) for both processors. |
| get_mac_addressA | Get Bluetooth MAC address. |
| get_board_revisionA | Get PCB board revision for both processors. |
| get_processor_nameA | Get processor identifier strings for both processors. |
| get_skuA | Get product SKU string. |
| get_core_uptimeA | Get core uptime in milliseconds since power-on for both processors. |
| get_battery_voltageB | Get battery voltage in volts (calibrated). |
| get_battery_voltage_stateA | Get battery voltage state (ok/low/critical). |
| get_battery_thresholdsA | Get battery voltage thresholds (critical, low, hysteresis). |
| get_encoder_countsA | Get wheel encoder tick counts (left and right). |
| get_magnetometerA | Get magnetometer X, Y, Z readings with heading and cardinal direction. |
| calibrate_magnetometerA | Start magnetometer calibration (calibrate to north). This is an async operation - the RVR will notify when complete. Rotate the RVR 360 degrees during calibration. |
| get_motor_fault_stateA | Check if motor fault is currently active. |
| enable_motor_stall_notifyB | Enable or disable motor stall detection notifications. |
| enable_motor_fault_notifyC | Enable or disable motor fault detection notifications. |
| start_ir_followingB | Start following an IR-broadcasting robot. |
| stop_ir_followingA | Stop IR following behavior. |
| start_ir_evadingC | Start evading an IR-broadcasting robot. |
| stop_ir_evadingC | Stop IR evading behavior. |
| get_ir_readingsA | Get all 4 IR sensor readings (front_left, front_right, back_right, back_left). |
Prompts
Interactive templates invoked by user choice
| Name | Description |
|---|---|
No prompts | |
Resources
Contextual data attached and managed by the client
| Name | Description |
|---|---|
No resources | |
TDQS
Scored across 55 tools
Most tools target distinct actions or sensors, but there is some overlap: multiple battery getters (status, voltage, voltage_state, thresholds) and get_sensor_data could be seen as a catch-all that duplicates specific getters. The test tools and connect_simple/connect add minor confusion, but descriptions generally clarify boundaries.
The majority of tools use a consistent verb_noun pattern (get_*, set_*, start_*, stop_*, drive_*). However, there are deviations like test_immediate_return, test_slow_return, connect_simple, emergency_stop, clear_emergency_stop, and turn_leds_off which break the pattern slightly.
With 55 tools, the server is well beyond the typical 3-15 range and even exceeds the 25+ threshold. The surface is bloated with redundant test utilities and multiple specialized getters that could be consolidated, making it overwhelming for agents.
The toolset covers core robot operations: connection, driving, LEDs, sensors, IR, battery, safety, and system info. Notable gaps include a direct position getter (only reset_locator and encoder counts) and no gyroscope/accelerometer readings, but the domain is largely covered.