Overview

The ROS MCP Server is designed to support robots in performing complex tasks and adapting effectively to various environments by providing a set of functions that transform natural language commands, entered by a user through an LLM, into ROS commands for robot control. Furthermore, by utilizing rosbridge
, it is configured to operate with both ROS
and ROS2
systems, and its WebSocket-based communication enables broad applicability across diverse platforms.
Research based on this project can be found in the video linked below.
Supported Types
- geometry_msgs/Twist
- sensor_msgs/Image
Installation
Installing via Smithery
To install ros-mcp-server
for Claude Desktop automatically via Smithery:
npx -y @smithery/cli install @lpigeon/ros-mcp-server --client claude
Installing Locally
uv
Installation
- To install
uv
, you can use the following command:
curl -LsSf https://astral.sh/uv/install.sh | sh
or
pip install uv
- Create virtual environment and activate it (Optional)
uv venv
source .venv/bin/activate
MCP Server Configuration
Set MCP setting to mcp.json.
"ros-mcp-server": {
"command": "uv",
"args": [
"--directory",
"/ABSOLUTE/PATH/TO/PARENT/FOLDER/ros-mcp-server",,
"run",
"server.py"
]
}
If you use Claude Desktop, you can find mcp.json using the following command:
- MacOS/Linux
code ~/Library/Application\ Support/Claude/claude_desktop_config.json
- Windows
code $env:AppData\Claude\claude_desktop_config.json
MCP Functions
get_topics
- Purpose: Retrieves the list of available topics from the robot's ROS system.
- Returns: List of topics (List[Any])
pub_twist
- Purpose: Sends movement commands to the robot by setting linear and angular velocities.
- Parameters:
linear
: Linear velocity (List[Any])angular
: Angular velocity (List[Any])
pub_twist_seq
- Purpose: Sends a sequence of movement commands to the robot, allowing for multi-step motion control.
- Parameters:
linear
: List of linear velocities (List[Any])angular
: List of angular velocities (List[Any])duration
: List of durations for each step (List[Any])
sub_image
- Purpose: Receive images from the robot's point of view or of the surrounding environment.
- Parameters:
save_path
: By default, the image is saved to theDownloads
folder.
How To Use
1. Set IP and Port to connect rosbridge.
- Open
server.py
and change yourLOCAL_IP
,ROSBRIDGE_IP
andROSBRIDGE_PORT
. (ROSBRIDGE_PORT
's default value is9090
)
2. Run rosbridge server.
ROS 1
roslaunch rosbridge_server rosbridge_websocket.launch
ROS 2
ros2 launch rosbridge_server rosbridge_websocket_launch.xml
3. Run any AI system that has imported ros-mcp-server
.
4. Type "Make the robot move forward.".

5. Check rosbridge_server
and ros topic
.
rosbridge_server

ros topic

Simulation Test
MCP-based control using the MOCA mobile manipulator within the NVIDIA Isaac Sim simulation environment.
