Skip to main content
Glama
sandraschi

Robotics MCP Server

robot_control

Operate physical and virtual robots from a single interface, executing actions like navigation, vacuuming, docking, and status checks with conversational AI responses.

Instructions

Unified robot control with conversational responses.

Provides a single interface for controlling physical robots, virtual robots, and specialized devices with intelligent routing and rich conversational responses. Primary: Dreame D20 Pro vacuum. Also supports Yahboom ROSMASTER, Moorebot Scout, Unitree (when hardware available), and virtual robots in Unity/VRChat.

PORTMANTEAU PATTERN RATIONALE: Instead of creating separate tools for each robot type and operation, this tool consolidates all robot control operations into a single interface. This design:

  • Prevents tool explosion (15+ tools -> 1 tool) while maintaining full functionality

  • Enables seamless switching between physical and virtual robots

  • Provides consistent error handling and safety protocols across all robot types

  • Supports conversational AI interaction with context-aware responses

  • Follows FastMCP 2.13+ best practices for feature-rich MCP servers

SUPPORTED ROBOT TYPES:

  • Dreame D20 Pro: Primary platform - LIDAR vacuum with mapping, zone cleaning, mop, auto-empty

  • Yahboom Robots: ROSMASTER series with AI, navigation, and optional robotic arms

  • Moorebot Scout: ROS1 wheeled robot

  • Elegoo Robots: ROS-on-PC robots with serial communication

  • Unitree Go2/G1: Quadrupedal robots (when hardware available)

  • Virtual Robots: Unity3D/VRChat robots

  • Hue HomeAware: Philips Hue Bridge Pro with RF-based movement detection

SUPPORTED OPERATIONS:

  • Universal: "get_status", "move", "stop"

  • Physical Robots: "return_to_dock", "stand", "sit", "walk", "sync_vbot"

  • Yahboom: "home_patrol", "camera_capture", "arm_move", "gripper_control", "navigate_to", "ai_query"

  • Elegoo: "emergency_stop" (ROS-on-PC serial communication)

  • Dreame: "start_auto_empty", "stop_auto_empty", "start_self_clean", "stop_self_clean", "set_suction_level", "set_water_volume", "set_mop_humidity", "clean_zone", "clean_spot", "start_mapping", "rename_room", "set_cleaning_sequence", "set_restricted_zones", "get_cleaning_history", "clear_error"

  • Hue HomeAware: "hue_get_movement_events", "hue_get_sensor_status", "hue_get_movement_zones"

Input Schema

TableJSON Schema
NameRequiredDescriptionDefault
xNoTarget X coordinate (meters) for navigation operations
yNoTarget Y coordinate (meters) for navigation operations
queryNoAI query text for multimodal analysis (Yahboom robots)
thetaNoTarget orientation (radians) for navigation operations
zonesNoList of zone coordinates [[x1,y1,x2,y2], ...] for zone cleaning
actionYesOperation to perform. MUST be one of the supported operations above: Universal Operations: - "get_status": Get comprehensive robot status (battery, position, sensors, capabilities) - "move": Control movement with linear/angular velocities (all mobile robots) - "stop": Emergency stop all movement (all robots) Physical Robot Operations: - "return_to_dock": Return to charging dock (vacuums only) - "stand": Stand up from sitting position (legged robots) - "sit": Sit down (legged robots) - "walk": Start walking gait (legged robots) - "sync_vbot": Synchronize virtual robot with physical robot state Yahboom Robot Operations: - "home_patrol": Start autonomous home security patrol - "camera_capture": Capture image from robot camera - "arm_move": Move robotic arm to specified joint angles - "gripper_control": Control gripper open/close/stop - "navigate_to": Navigate to specific coordinates - "ai_query": Multimodal AI query (text/vision/voice/multimodal) Dreame Vacuum Operations: - "start_auto_empty": Start automatic dust bin emptying - "stop_auto_empty": Stop automatic dust bin emptying - "start_self_clean": Start mop self-cleaning cycle - "stop_self_clean": Stop mop self-cleaning cycle - "set_suction_level": Set vacuum suction power (1-4) - "set_water_volume": Set mopping water volume (1-3) - "set_mop_humidity": Set mop pad humidity (1-3) - "clean_zone": Clean specific rectangular zones - "clean_spot": Intensive spot cleaning at coordinates - "start_mapping": Start new map creation/mapping - "rename_room": Rename a detected room - "set_cleaning_sequence": Set room cleaning order - "set_restricted_zones": Create virtual walls/restricted zones - "get_cleaning_history": Retrieve cleaning history - "clear_error": Clear error conditions
linearNoLinear velocity (m/s) for move operations. Range: -2.0 to 2.0 m/s
spot_xNoX coordinate for intensive spot cleaning
spot_yNoY coordinate for intensive spot cleaning
angularNoAngular velocity (rad/s) for rotation. Range: -3.14 to 3.14 rad/s
room_idNoRoom identifier for room-specific operations
durationNoMovement duration in seconds. Default: continuous until stopped
robot_idYesUnique robot identifier. MUST follow naming convention: - Physical: "scout_01", "go2_01", "g1_01", "yahboom_01", "elegoo_01", "dreame_01", "hue_01" - Virtual: "vbot_scout_01", "unity_bot_01", "vrchat_bot_01"
room_nameNoNew name for room renaming operations
query_typeNoAI query type. MUST be "text", "vision", "voice", or "multimodal"
joint_anglesNoDictionary of joint names to target angles (degrees) for arm control
mop_humidityNoMop pad humidity level (1-3, where 3 is maximum humidity)
patrol_routeNoName of predefined patrol route for autonomous navigation
water_volumeNoMopping water volume level (1-3, where 3 is maximum)
suction_levelNoVacuum suction power level (1-4, where 4 is maximum)
gripper_actionNoGripper action. MUST be "open", "close", or "stop"
restricted_zonesNoDictionary with 'walls' and 'zones' keys for virtual barriers
cleaning_sequenceNoList of room IDs defining cleaning order [room1, room2, ...]

Output Schema

TableJSON Schema
NameRequiredDescriptionDefault

No arguments

Schema Changelog

Changes observed during successful MCP inspections.

  1. Changed25 schema fields changedv0.2.1
    • addedInput schema / additionalProperties
      Added value: +false
    • addedInput schema / properties / action / description
      Added value: +"Operation to perform. MUST be one of the supported operations above:\nUniversal Operations:\n- \"get_status\": Get comprehensive robot status (battery, position, sensors, capabilities)\n- \"move\": Control movement with linear/angular velocities (all mobile robots)\n- \"stop\": Emergency stop all movement (all robots)\n\nPhysical Robot Operations:\n- \"return_to_dock\": Return to charging dock (vacuums only)\n- \"stand\": Stand up from sitting position (legged robots)\n- \"sit\": Sit down (legged robots)\n- \"walk\": Start walking gait (legged robots)\n- \"sync_vbot\": Synchronize virtual robot with physical robot state\n\nYahboom Robot Operations:\n- \"home_patrol\": Start autonomous home security patrol\n- \"camera_capture\": Capture image from robot camera\n- \"arm_move\": Move robotic arm to specified joint angles\n- \"gripper_control\": Control gripper open/close/stop\n- \"navigate_to\": Navigate to specific coordinates\n- \"ai_query\": Multimodal AI query (text/vision/voice/multimodal)\n\nDreame Vacuum Operations:\n- \"start_auto_empty\": Start automatic dust bin emptying\n- \"stop_auto_empty\": Stop automatic dust bin emptying\n- \"start_self_clean\": Start mop self-cleaning cycle\n- \"stop_self_clean\": Stop mop self-cleaning cycle\n- \"set_suction_level\": Set vacuum suction power (1-4)\n- \"set_water_volume\": Set mopping water volume (1-3)\n- \"set_mop_humidity\": Set mop pad humidity (1-3)\n- \"clean_zone\": Clean specific rectangular zones\n- \"clean_spot\": Intensive spot cleaning at coordinates\n- \"start_mapping\": Start new map creation/mapping\n- \"rename_room\": Rename a detected room\n- \"set_cleaning_sequence\": Set room cleaning order\n- \"set_restricted_zones\": Create virtual walls/restricted zones\n- \"get_cleaning_history\": Retrieve cleaning history\n- \"clear_error\": Clear error conditions"
    • changedInput schema / properties / action / enum
      Previous value: -[
      -  "get_status",
      -  "move",
      -  "stop",
      -  "return_to_dock",
      -  "stand",
      -  "sit",
      -  "walk",
      -  "sync_vbot"
      -]New value: +[
      +  "get_status",
      +  "move",
      +  "stop",
      +  "return_to_dock",
      +  "stand",
      +  "sit",
      +  "walk",
      +  "sync_vbot",
      +  "home_patrol",
      +  "camera_capture",
      +  "arm_move",
      +  "gripper_control",
      +  "navigate_to",
      +  "ai_query",
      +  "start_cleaning",
      +  "stop_cleaning",
      +  "start_auto_empty",
      +  "stop_auto_empty",
      +  "start_self_clean",
      +  "stop_self_clean",
      +  "set_suction_level",
      +  "set_water_volume",
      +  "set_mop_humidity",
      +  "clean_zone",
      +  "clean_spot",
      +  "clean_room",
      +  "go_to",
      +  "get_map",
      +  "start_mapping",
      +  "start_fast_mapping",
      +  "rename_room",
      +  "set_cleaning_sequence",
      +  "set_restricted_zones",
      +  "get_cleaning_history",
      +  "clear_error",
      +  "emergency_stop",
      +  "hue_get_movement_events",
      +  "hue_get_sensor_status",
      +  "hue_get_movement_zones"
      +]
    • addedInput schema / properties / angular / description
      Added value: +"Angular velocity (rad/s) for rotation. Range: -3.14 to 3.14 rad/s"
    • addedInput schema / properties / cleaning_sequence
      Added value: +{
      +  "anyOf": [
      +    {
      +      "items": {
      +        "type": "integer"
      +      },
      +      "type": "array"
      +    },
      +    {
      +      "type": "null"
      +    }
      +  ],
      +  "default": null,
      +  "description": "List of room IDs defining cleaning order [room1, room2, ...]"
      +}
    • addedInput schema / properties / duration / description
      Added value: +"Movement duration in seconds. Default: continuous until stopped"
    • addedInput schema / properties / gripper_action
      Added value: +{
      +  "anyOf": [
      +    {
      +      "enum": [
      +        "open",
      +        "close",
      +        "stop"
      +      ],
      +      "type": "string"
      +    },
      +    {
      +      "type": "null"
      +    }
      +  ],
      +  "default": null,
      +  "description": "Gripper action. MUST be \"open\", \"close\", or \"stop\""
      +}
    • addedInput schema / properties / joint_angles
      Added value: +{
      +  "anyOf": [
      +    {
      +      "additionalProperties": {
      +        "type": "number"
      +      },
      +      "type": "object"
      +    },
      +    {
      +      "type": "null"
      +    }
      +  ],
      +  "default": null,
      +  "description": "Dictionary of joint names to target angles (degrees) for arm control"
      +}
    • addedInput schema / properties / linear / description
      Added value: +"Linear velocity (m/s) for move operations. Range: -2.0 to 2.0 m/s"
    • addedInput schema / properties / mop_humidity
      Added value: +{
      +  "anyOf": [
      +    {
      +      "type": "integer"
      +    },
      +    {
      +      "type": "null"
      +    }
      +  ],
      +  "default": null,
      +  "description": "Mop pad humidity level (1-3, where 3 is maximum humidity)"
      +}
    • addedInput schema / properties / patrol_route
      Added value: +{
      +  "anyOf": [
      +    {
      +      "type": "string"
      +    },
      +    {
      +      "type": "null"
      +    }
      +  ],
      +  "default": null,
      +  "description": "Name of predefined patrol route for autonomous navigation"
      +}
    • addedInput schema / properties / query
      Added value: +{
      +  "anyOf": [
      +    {
      +      "type": "string"
      +    },
      +    {
      +      "type": "null"
      +    }
      +  ],
      +  "default": null,
      +  "description": "AI query text for multimodal analysis (Yahboom robots)"
      +}
    • addedInput schema / properties / query_type
      Added value: +{
      +  "anyOf": [
      +    {
      +      "enum": [
      +        "text",
      +        "vision",
      +        "voice",
      +        "multimodal"
      +      ],
      +      "type": "string"
      +    },
      +    {
      +      "type": "null"
      +    }
      +  ],
      +  "default": null,
      +  "description": "AI query type. MUST be \"text\", \"vision\", \"voice\", or \"multimodal\""
      +}
    • addedInput schema / properties / restricted_zones
      Added value: +{
      +  "anyOf": [
      +    {
      +      "additionalProperties": {
      +        "items": {
      +          "items": {
      +            "type": "integer"
      +          },
      +          "type": "array"
      +        },
      +        "type": "array"
      +      },
      +      "type": "object"
      +    },
      +    {
      +      "type": "null"
      +    }
      +  ],
      +  "default": null,
      +  "description": "Dictionary with 'walls' and 'zones' keys for virtual barriers"
      +}
    • addedInput schema / properties / robot_id / description
      Added value: +"Unique robot identifier. MUST follow naming convention:\n- Physical: \"scout_01\", \"go2_01\", \"g1_01\", \"yahboom_01\", \"elegoo_01\", \"dreame_01\", \"hue_01\"\n- Virtual: \"vbot_scout_01\", \"unity_bot_01\", \"vrchat_bot_01\""
    • addedInput schema / properties / room_id
      Added value: +{
      +  "anyOf": [
      +    {
      +      "type": "integer"
      +    },
      +    {
      +      "type": "null"
      +    }
      +  ],
      +  "default": null,
      +  "description": "Room identifier for room-specific operations"
      +}
    • addedInput schema / properties / room_name
      Added value: +{
      +  "anyOf": [
      +    {
      +      "type": "string"
      +    },
      +    {
      +      "type": "null"
      +    }
      +  ],
      +  "default": null,
      +  "description": "New name for room renaming operations"
      +}
    • addedInput schema / properties / spot_x
      Added value: +{
      +  "anyOf": [
      +    {
      +      "type": "integer"
      +    },
      +    {
      +      "type": "null"
      +    }
      +  ],
      +  "default": null,
      +  "description": "X coordinate for intensive spot cleaning"
      +}
    • addedInput schema / properties / spot_y
      Added value: +{
      +  "anyOf": [
      +    {
      +      "type": "integer"
      +    },
      +    {
      +      "type": "null"
      +    }
      +  ],
      +  "default": null,
      +  "description": "Y coordinate for intensive spot cleaning"
      +}
    • addedInput schema / properties / suction_level
      Added value: +{
      +  "anyOf": [
      +    {
      +      "type": "integer"
      +    },
      +    {
      +      "type": "null"
      +    }
      +  ],
      +  "default": null,
      +  "description": "Vacuum suction power level (1-4, where 4 is maximum)"
      +}
    • addedInput schema / properties / theta
      Added value: +{
      +  "anyOf": [
      +    {
      +      "type": "number"
      +    },
      +    {
      +      "type": "null"
      +    }
      +  ],
      +  "default": null,
      +  "description": "Target orientation (radians) for navigation operations"
      +}
    • addedInput schema / properties / water_volume
      Added value: +{
      +  "anyOf": [
      +    {
      +      "type": "integer"
      +    },
      +    {
      +      "type": "null"
      +    }
      +  ],
      +  "default": null,
      +  "description": "Mopping water volume level (1-3, where 3 is maximum)"
      +}
    • addedInput schema / properties / x
      Added value: +{
      +  "anyOf": [
      +    {
      +      "type": "number"
      +    },
      +    {
      +      "type": "null"
      +    }
      +  ],
      +  "default": null,
      +  "description": "Target X coordinate (meters) for navigation operations"
      +}
    • addedInput schema / properties / y
      Added value: +{
      +  "anyOf": [
      +    {
      +      "type": "number"
      +    },
      +    {
      +      "type": "null"
      +    }
      +  ],
      +  "default": null,
      +  "description": "Target Y coordinate (meters) for navigation operations"
      +}
    • addedInput schema / properties / zones
      Added value: +{
      +  "anyOf": [
      +    {
      +      "items": {
      +        "items": {
      +          "type": "integer"
      +        },
      +        "type": "array"
      +      },
      +      "type": "array"
      +    },
      +    {
      +      "type": "null"
      +    }
      +  ],
      +  "default": null,
      +  "description": "List of zone coordinates [[x1,y1,x2,y2], ...] for zone cleaning"
      +}
  2. First observed

TDQS

C2.9/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations available, the description carries the full transparency burden. It does disclose some behavioral traits: 'intelligent routing', 'rich conversational responses', and 'consistent error handling and safety protocols across all robot types'. But it is mostly promotional and vague—there is no mention of side effects, what happens on failure, software requirements, whether actions require confirmation, or how physical safety is enforced. The description is not contradictory, but it gives only partial transparency.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness2/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is far too long for an agent-facing tool definition. The PORTMANTEAU PATTERN RATIONALE section explains internal design philosophy rather than how to call the tool, and the SUPPORTED OPERATIONS list duplicates the action enum that is already in the schema. While the description uses headings and bullet formatting, many sentences (e.g., 'Follows FastMCP 2.13+ best practices') do not help an agent invoke the tool correctly.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness2/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the tool's complexity (23 parameters, 40 actions, many robot types), the description is incomplete: the SUPPORTED OPERATIONS section omits at least six actions that appear in the schema's `action` enum—`start_cleaning`, `stop_cleaning`, `clean_room`, `go_to`, `get_map`, and `start_fast_mapping`. It also fails to map which parameters are required for specific actions, leaving the agent to infer or scout a large parameter space. The presence of an output schema helps, but the gap between the narrative operations and the actual enum is a meaningful completeness error.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The input schema already provides 100% parameter description coverage, including descriptions for every action enum value and ranges for velocity, water/suction levels, and coordinates. The description mostly restates or duplicates this information (especially the SUPPORTED OPERATIONS list) without adding actionable param semantics beyond what the schema already provides. Per the baseline, 3 is appropriate when schema does this heavy lifting.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states this is a 'Unified robot control' interface and lists the exact platforms it supports ('Dreame D20 Pro', 'Yahboom', 'Moorebot', 'Unitree', 'virtual robots'). It is more specific than the name alone and conveys it is an aggregation tool. However, it does not explicitly differentiate from siblings like robot_virtual, dreame_control, or drone_control, so the boundary of what this tool owns vs. those tools is inferred rather than stated.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description explains why a consolidated tool exists ('Instead of creating separate tools for each robot type...') and what robot types it supports, which implies when to use it. However, it never says 'use this instead of X' and does not list exclusions or conditions that would route the agent to sibling tools such as dreame_control, drone_control, robot_behavior, or robot_virtual. There is no practical guidance for selecting between this and the many sibling tools that appear to overlap in purpose.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.