
ROS MCP Server: Control ROS Robots from Claude and Cursor
Lets Claude, Cursor and other assistants read from and control ROS and ROS 2 robots through rosbridge.
This is a community server from the robotmcp project. It runs on your computer and talks to the robot through rosbridge, which you start on the robot's machine. The assistant can list topics, services, actions and parameters, read sensor data, and send commands.
It works with ROS 1 and ROS 2, but the action and parameter tools work only with ROS 2. A real robot can move when you send commands, so test in simulation first.
Good for
- Robotics developers who want to debug topics, services and parameters by asking questions
- Teams testing a robot in simulation, such as turtlesim or Isaac Sim, with plain-language commands
- Technicians who want the assistant to run diagnostic tests on a robot they are working on
Works in
12 should work
Tap an app to see how to set it up and any known problems.
Supports local MCP servers.
Supports local MCP servers.
Supports local MCP servers.
Supports local MCP servers.
Supports local MCP servers.
Supports local MCP servers.
Supports local MCP servers.
Supports local MCP servers.
Supports local MCP servers.
Supports local MCP servers.
Supports local MCP servers.
Supports local MCP servers.
Client does not support this transport.
Client does not support this transport.
Install ros-mcp-server
Claude Code
- 1
Copy this prompt.
Add the ros-mcp-server server to Claude Code. Run this command: claude mcp add ros -- uvx ros-mcp Then check that it loaded and tell me if I need to sign in or restart.
- 2
Paste it into Claude Code. It shows the change and asks before running it.
Requires uv (Python), rosbridge running on the robot.
Read-only mode: There is no read-only mode. Approve only the tools that list and read.
Start rosbridge on the robot first: install the rosbridge server package for your ROS distro, then launch it (see the install guide). Then tell the assistant the robot's IP address and port 9090. Our configs are adapted from the guide's Claude Code example, which uses uvx and the ros-mcp package. Python 3.10 or later is needed.
Built from the package data we hold. Not yet tested by us.
Tools
Points the server at your robot and checks it answers
Sets the robot's IP address and port, then tests that the robot is reachable and the port is open.
Try: “Connect to the robot at 192.168.1.50”
Network ·
connect_to_robotChecks which robots are reachable on your network
Pings one or more addresses and checks whether the rosbridge port is open. An answer from the address but not the port suggests rosbridge is not running.
Try: “Check if the robots at 192.168.1.100 and 192.168.1.101 are up”
Network ·
ping_robotsTells you which ROS version the robot runs
Asks the robot, through rosbridge, which ROS version and distribution it is on.
Try: “Is this robot on ROS 1 or ROS 2?”
Network ·
detect_ros_versionLists the topics the robot publishes
Returns every ROS topic currently available.
Try: “What topics does the robot have?”
Network ·
get_topicsShows the message type of one topic
Returns the type of messages that a topic carries.
Try: “What message type is /cmd_vel?”
Network ·
get_topic_typeShows a topic with its publishers and subscribers
Returns the topic's type and which nodes publish and subscribe to it.
Try: “Who publishes and subscribes to /cmd_vel?”
Network ·
get_topic_detailsShows the fields of a message type
Returns the full structure of a message type so the assistant can build valid messages.
Try: “Show me the fields in geometry_msgs/Twist”
Network ·
get_message_detailsReads one message from a topic
Waits for the first message on a topic and returns it. Image messages from camera topics are saved to a local file.
Try: “Read one message from /odom”
Files ·
subscribe_onceListens to a topic for a few seconds
Collects messages from a topic for a set time, up to a maximum count, and can limit the rate for fast topics.
Try: “Listen to /scan for 5 seconds”
Files ·
subscribe_for_durationShows an image saved earlier from a camera topic
Opens an image file from disk, by default the last camera frame, without subscribing again.
Try: “Show me the last camera image”
Files ·
view_saved_imageLists the running ROS nodes
Returns every node currently running.
Try: “Which nodes are running?”
Network ·
get_nodesShows what one node publishes, subscribes to and offers
Returns the node's publishers, subscribers and services.
Try: “What does the /turtlesim node publish?”
Network ·
get_node_detailsLists the services the robot offers
Returns every ROS service currently available.
Try: “What services does the robot offer?”
Network ·
get_servicesShows the type of one service
Returns the service type for a service name.
Try: “What type is /rosapi/topics?”
Network ·
get_service_typeShows a service's request and reply fields
Returns the request and response structure and the nodes that provide the service.
Try: “Show the request fields for /spawn”
Network ·
get_service_detailsCalls a ROS service on the robot
Sends a request to a service and returns its reply. What it does depends on the service, and it is marked as possibly destructive.
Try: “Call the /clear service”
Write ·
call_serviceLists the actions the robot supports
Returns every ROS action available.
Try: “What actions can this robot do?”
Network ·
get_actionsShows an action's goal, result and feedback fields
Returns the structures for an action. You give the action type, or call it without one to get the list of types back.
Try: “Show the goal fields for /turtle1/rotate_absolute”
Network ·
get_action_detailsShows the status of an action
Returns the status of goals for one action. It works only with ROS 2.
Try: “What is the status of /turtle1/rotate_absolute?”
Network ·
get_action_statusGives the robot a goal to carry out
Sends a goal to an action server, such as turning to an angle or moving to a pose. It works only with ROS 2 and is marked as possibly destructive.
Try: “Rotate the turtle to 1.57 radians”
Write ·
send_action_goalStops a goal the robot is working on
Cancels a running action goal by its ID. It works only with ROS 2.
Try: “Cancel goal goal_1758653551839”
Write ·
cancel_action_goalSends one message to a topic
Publishes a single message, for example a velocity command, to a topic. The robot acts on it if something is listening.
Try: “Publish a forward velocity of 0.2 to /cmd_vel”
Write ·
publish_onceSends a timed series of messages to a topic
Publishes messages one after another, each held for a set time, and can repeat them at a rate for controllers that need a steady stream.
Try: “Drive forward for 2 seconds, then stop”
Write ·
publish_for_durationsLists the parameters of one node
Returns every parameter name for a node. It works only with ROS 2.
Try: “What parameters does /turtlesim have?”
Network ·
get_parametersReads one parameter value
Returns the value of a single parameter. It works only with ROS 2.
Try: “What is background_b on /turtlesim?”
Network ·
get_parameterShows a parameter's value, type and metadata
Returns the value, type and other details for a parameter. It works only with ROS 2.
Try: “Show the details for background_r”
Network ·
get_parameter_detailsChecks whether a parameter exists
Returns yes or no for a parameter name. It works only with ROS 2.
Try: “Does the parameter background_b exist?”
Network ·
has_parameterChanges a parameter on the robot
Sets a parameter to a new value, which can change how a running node behaves. It works only with ROS 2.
Try: “Set background_b on /turtlesim to 255”
Write ·
set_parameterRemoves a parameter from the robot
Deletes a parameter. It works only with ROS 2.
Try: “Delete the parameter background_b”
Delete ·
delete_parameterLists robot models with extra guidance included
Returns the robot models that have a ready-made specification file, which holds usage tips.
Try: “Which robot models have built-in specs?”
Read ·
get_verified_robots_listLoads the guidance file for a listed robot model
Returns a model's specification. Most robots have none, and the tool says to connect directly instead.
Try: “Load the spec for my robot model”
Read ·
get_verified_robot_spec
Read from the source code
Permissions
high risk · 4 things to watch
High risk
The assistant can move a real robot and change or delete its parameters, and there is no read-only mode. Test in simulation first and approve each command that moves hardware.
What it can do
- Read your data
- Create and change things
- Delete things
- Read-only mode
Watch out for
It can move a real robot
Publishing messages, calling services and sending action goals can make a robot move. Keep the robot clear and the emergency stop in reach, and test in simulation first. github.com
It can delete and change robot parameters
delete_parameter removes a parameter and set_parameter changes one on a running node. Write down the current values before you let the assistant change them. github.com
There is no read-only mode
All 31 tools load every time. Only approve read tools such as listing topics and reading messages, and review each command before you allow it. github.com
Camera frames are saved to disk
Reading an image topic saves the frame as a JPEG under ./camera in the folder the server runs from. Delete saved frames if they show private spaces. github.com
Security advisories
No published security advisories as of Nov 1, 2026.
Technical details
| Talks to | The rosbridge WebSocket on your robot (default 127.0.0.1:9090) |
|---|---|
| Sign-in and keys | No sign-in. Anyone who can reach rosbridge can use the robot, so access depends on your network. |
Questions
Is the ROS MCP server official?
No. It is a community project from the robotmcp GitHub organization, not made by the ROS maintainers. It is Apache-2.0 licensed.
What do I need on the robot?
ROS with rosbridge running. The install guide has you install the rosbridge server package for your ROS distro and launch it, so the MCP server can connect over a WebSocket. No robot code changes are needed.
Does it work with ROS 1 and ROS 2?
Yes, but the action and parameter tools work only with ROS 2. Topics, services and nodes work with both.
Can it control a real robot?
Yes. It can publish velocity commands, call services and send action goals, and the README shows it driving real and simulated robots. Test in simulation first.
Can I make it read-only?
No. There is no read-only switch. Approve only the tools that list and read, and check each command before you allow it.
Does it need an API key or account?
No key for the server itself. It connects to rosbridge on the robot, which has no sign-in. You do need an account with your AI provider for the assistant.
Can the robot be on a different machine?
Yes. The install guide describes a laptop running the assistant and the server, and the robot on the same local network. Tell the assistant the robot's IP address, or use a VPN to reach it from elsewhere.
Which apps does it work with?
The README names Claude Code, Codex CLI, Gemini CLI, Claude Desktop, ChatGPT and Cursor, with a guide for each. Claude Code is the one the docs recommend.
Information
updated Nov 2, 2026
- Publisher
- Community
- Package
ros-mcp- Registry
- PyPI
- Transport
- stdio
- Auth
- None
- Version
- 3.1.2
- License
- Apache-2.0
- Last commit
- Oct 30, 2026
- Open issues
- 26
- Listed in
- Official MCP registry
Sources
Docs, issue trackers and discussions this page is built from. Issues, quotes and findings above link to their own source.
Show all 3Hide
- ROS MCP installation guide · github.com
- ROS MCP Server README · github.com
- Tool registrations at v3.1.2 · github.com