Skip to main content
Glama
ros-claw

unitree-sdk2-mcp

by ros-claw

unitree-sdk2-mcp

🌐 English | δΈ­ζ–‡

ROSClaw MCP Server for Unitree Robots via DDS protocol.

Supports: G1, Go2, Go2w, H1, H2, B2, B2w, A2, R1

Part of the ROSClaw Embodied Intelligence Operating System.

Overview

This MCP server enables LLM agents (Claude, GPT-4, etc.) to control any Unitree robot through the Model Context Protocol. It communicates with the robot using DDS (Data Distribution Service) β€” the same protocol used by Unitree's official SDK.

LLM Agent  ──MCP──►  unitree-sdk2-mcp  ──DDS──►  Unitree Robot

Supported Robots

Model

Type

DOF

Features

Weight

Battery

G1

Humanoid

23

Walking, Arm Control

~35kg

2.5h

Go2

Quadruped

12

Trotting, Galloping

~15kg

2.0h

Go2w

Quadruped+Wheels

12

Hybrid Locomotion

~16kg

2.0h

H1

Humanoid

20

Walking, Arm Control

~47kg

2.0h

H2

Humanoid

20

Walking, Arm Control

~45kg

2.5h

B2

Quadruped

12

Industrial, Heavy Payload

~60kg

4.0h

B2w

Quadruped+Wheels

12

Industrial+Wheels

~62kg

4.0h

A2

Quadruped

12

Agile, Education

~15kg

1.5h

R1

Wheeled

4

Navigation, Delivery

~25kg

3.0h

SDK Information

Property

Value

SDK Name

unitree_sdk2

SDK Version

2.1.0+

Protocol

DDS (Data Distribution Service)

Source Repository

github.com/unitreerobotics/unitree_sdk2

Documentation

support.unitree.com

License

BSD-3-Clause

Generated

2026-04-15

Features

  • Multi-Robot Support: Control any Unitree robot with unified interface

  • Dynamic Configuration: Automatic robot type detection and configuration

  • High-Level Actions: Stand, sit, walk, wave (robot-dependent)

  • Safety Guards: Joint limits enforced before every command

  • Real-time State: Battery, mode, joint positions, IMU at 100Hz

  • DDS Protocol: CycloneDDS / FastDDS compatible

  • Async Design: Non-blocking MCP tools with background state thread

Installation

# Clone
git clone https://github.com/ros-claw/unitree-sdk2-mcp.git
cd unitree-sdk2-mcp

# Install with uv (recommended)
uv venv --python python3.10
source .venv/bin/activate
uv pip install -e .

# Or with pip
pip install -e .

Dependencies

# Required: Unitree SDK2
# Download from: https://github.com/unitreerobotics/unitree_sdk2

# DDS Middleware (choose one)
pip install cyclonedds  # or fastdds

Quick Start

Run as MCP Server

# stdio transport (for Claude Desktop / MCP clients)
python src/unitree_sdk2_mcp_server.py

# Or using the installed entry point
unitree-sdk2-mcp

# Legacy alias (backward compatible)
rosclaw-g1-mcp

Connect to a Robot

# First, list available robots
list_robots()

# Get robot info
get_robot_info(robot_id="g1")

# Connect
connect_robot(robot_id="g1", domain_id=0)

# Or connect to Go2
connect_robot(robot_id="go2", domain_id=0)

Claude Desktop Configuration

Add to your claude_desktop_config.json:

{
  "mcpServers": {
    "unitree-sdk2": {
      "command": "python",
      "args": ["/path/to/unitree-sdk2-mcp/src/unitree_sdk2_mcp_server.py"],
      "transportType": "stdio",
      "description": "Unitree Multi-Robot via DDS",
      "sdk_version": "2.1.0",
      "sdk_source": "https://github.com/unitreerobotics/unitree_sdk2"
    }
  }
}

MCP Inspector (Testing)

mcp dev src/unitree_sdk2_mcp_server.py

Available Tools

Multi-Robot Tools

Tool

Description

list_robots

List all supported Unitree robots

get_robot_info

Get configuration for specific robot

connect_robot

Connect to a robot (specify robot_id)

disconnect_robot

Disconnect from a robot

Control Tools

Tool

Description

Supported Robots

stand_up

Command robot to stand up

G1, H1, H2, Go2, B2, A2

sit_down

Command robot to sit down/stop

All

walk_with_velocity

Walk with linear/angular velocity

G1, Go2, H1, H2, B2, A2

move_joint

Move a single joint to target angle

All with joints

move_joints

Move multiple joints simultaneously

All with joints

stop_movement

Stop and hold current position

All

emergency_stop

Emergency halt (use with caution!)

All

wave_hand

Perform waving gesture

G1, H1, H2

Available Resources

Resource

Description

unitree://{robot_id}/status

Battery, mode, joint positions

unitree://{robot_id}/joints

Joint limits for all joints

unitree://connections

All active DDS connections

Robot Configuration

Humanoid Robots (G1, H1, H2)

Joint Structure:

Left Leg:   left_hip_yaw, left_hip_roll, left_hip_pitch, left_knee, left_ankle
Right Leg:  right_hip_yaw, right_hip_roll, right_hip_pitch, right_knee, right_ankle
Waist:      waist_yaw, waist_roll, waist_pitch (G1: 3 DOF, H1/H2: 1 DOF)
Left Arm:   left_shoulder_pitch, left_shoulder_roll, left_shoulder_yaw, left_elbow
Right Arm:  right_shoulder_pitch, right_shoulder_roll, right_shoulder_yaw, right_elbow

G1 Joint Limits:

Joint

Range (rad)

left_hip_yaw

[-2.35, 2.35]

left_hip_roll

[-0.78, 0.78]

left_hip_pitch

[-2.5, 2.5]

left_knee

[-0.5, 2.5]

left_ankle

[-1.0, 1.0]

right_hip_yaw

[-2.35, 2.35]

right_hip_roll

[-0.78, 0.78]

right_hip_pitch

[-2.5, 2.5]

right_knee

[-0.5, 2.5]

right_ankle

[-1.0, 1.0]

waist_yaw

[-2.5, 2.5]

waist_roll

[-0.5, 0.5]

waist_pitch

[-1.0, 1.0]

left_shoulder_pitch

[-3.14, 3.14]

left_shoulder_roll

[-0.5, 3.5]

left_shoulder_yaw

[-2.0, 2.0]

left_elbow

[-1.5, 2.0]

right_shoulder_pitch

[-3.14, 3.14]

right_shoulder_roll

[-3.5, 0.5]

right_shoulder_yaw

[-2.0, 2.0]

right_elbow

[-1.5, 2.0]

Quadruped Robots (Go2, Go2w, B2, B2w, A2)

Joint Structure:

Front Left:  front_left_hip, front_left_thigh, front_left_calf
Front Right: front_right_hip, front_right_thigh, front_right_calf
Rear Left:   rear_left_hip, rear_left_thigh, rear_left_calf
Rear Right:  rear_right_hip, rear_right_thigh, rear_right_calf

Go2 Joint Limits:

Joint

Range (rad)

front_left_hip

[-0.87, 0.87]

front_left_thigh

[-0.52, 2.97]

front_left_calf

[-2.76, -0.52]

... (similar for other legs)

Safety Information

WARNING: This MCP server controls physical robots. Improper use can cause:

  • Equipment damage

  • Personal injury

  • Property damage

Safety Features

Feature

Description

Joint Limits

All commands validated against hardware limits per robot type

Velocity Limits

Enforced per robot configuration

Emergency Stop

emergency_stop() disables motors immediately

Safety Levels

Level

Color

Description

CRITICAL

πŸ”΄

Immediate danger (falling, collision)

HIGH

🟠

Potential hardware damage

MEDIUM

🟑

Operational issue

LOW

🟒

Informational

Emergency Procedures

  1. Immediate Stop: Use emergency_stop(robot_id) or press physical E-stop

  2. Power Off: Disconnect battery if safe

  3. Check Status: Use unitree://{robot_id}/status resource

Error Handling

Error Codes

Code

Name

Severity

Description

-1

CONNECTION_FAILED

🟠 error

Failed to connect to DDS domain

-2

TIMEOUT

🟠 error

Operation timed out

-3

INVALID_PARAMETER

🟠 error

Invalid joint name or value

-4

SAFETY_VIOLATION

πŸ”΄ critical

Command exceeds joint limits

-5

NOT_INITIALIZED

🟠 error

Not connected to robot

-6

UNKNOWN_ROBOT

🟠 error

Unsupported robot ID

Troubleshooting

Issue

Possible Cause

Solution

Connection failed

Robot powered off

Check battery and power switch

Connection failed

Wrong DDS domain

Verify domain_id parameter

Command rejected

Joint limit exceeded

Check robot-specific joint limits

Slow response

Network latency

Check WiFi/Ethernet connection

Unknown robot ID

Typo in robot_id

Use list_robots() to see valid IDs

Architecture

unitree_sdk2_mcp_server.py
β”œβ”€β”€ SDK_METADATA        β€” SDK version and source info
β”œβ”€β”€ RobotState          β€” Robot state dataclass (generic)
β”œβ”€β”€ StateBuffer         β€” Thread-safe ring buffer for DDS data
β”œβ”€β”€ UnitreeDDSBridge    β€” DDS communication bridge
β”‚   β”œβ”€β”€ connect()       β€” Initialize DDS participant
β”‚   β”œβ”€β”€ _dds_listener() β€” Background thread at 100Hz
β”‚   └── publish_command() β€” Send /lowcmd
β”œβ”€β”€ robot_configs.py    β€” Configuration for all 9 robots
β”‚   β”œβ”€β”€ G1_CONFIG       β€” G1 humanoid (23 DOF)
β”‚   β”œβ”€β”€ GO2_CONFIG      β€” Go2 quadruped (12 DOF)
β”‚   β”œβ”€β”€ H1_CONFIG       β€” H1 humanoid (20 DOF)
β”‚   β”œβ”€β”€ B2_CONFIG       β€” B2 industrial quadruped
β”‚   β”œβ”€β”€ A2_CONFIG       β€” A2 agile quadruped
β”‚   └── R1_CONFIG       β€” R1 wheeled robot
└── MCP Tools           β€” FastMCP tool definitions

DDS Topics

Topic

Direction

Description

/lowstate

Subscribe

Robot state (joints, IMU, battery)

/lowcmd

Publish

Robot commands (joint targets, mode)

/sportmodestate

Subscribe

Sport mode state

Dependencies

  • Python 3.10+

  • mcp[fastmcp] β€” MCP framework

  • unitree_sdk2 β€” Unitree DDS SDK (install separately from hardware package)

  • cyclonedds or fastdds β€” DDS middleware

References

License

MIT License β€” See LICENSE

Part of ROSClaw


Generated by ROSClaw SDK-to-MCP Transformer

SDK Version: unitree_sdk2 2.1.0+ | Protocol: DDS | Robots: G1, Go2, Go2w, H1, H2, B2, B2w, A2, R1