
Ros Mcp Server
Bridges Claude, GPT, and other LLMs to ROS and ROS2 robots through rosbridge, letting you publish and subscribe to topics, call services and actions, set parameters, and read sensor data without modifying your robot code. The LLM can discover available topics and services at runtime, including custom message types, so it learns the right syntax on the fly. Works across ROS distributions from ROS1 through ROS2 Jazzy and Humble. Particularly useful for natural language robot control, debugging industrial systems by querying state through custom services, or giving LLMs full observability into what your robot is doing. Built on stdio transport and works with any MCP client.
- GitHub stars
- 1.5K
- tools
- 31
- transport
- STDIO
- last updated
- Sep 23, 2026
Install
From registry metadata$ npx add-mcp 'uvx ros-mcp' --name rosRun in your terminal. add-mcp asks which agents to add it to (Claude Code, Codex, Cursor and more). Add -g to install it for every project.
Review the command, arguments and environment values before installing. MCP servers run with your local permissions.
Other ways
Claude Code
$ claude mcp add ros -- uvx ros-mcpRun in your terminal. Replace YOUR_* placeholders with real values; add --scope user to install for every project.
Tools
Verified live · 31 toolsVerified live against the running server on Jun 11, 2026.
get_actionsGet list of all available ROS actions. Works only with ROS 2. Example: get_actions()
Get list of all available ROS actions. Works only with ROS 2. Example: get_actions()
No parameters. Call it with no arguments.
get_action_detailsGet complete action details including type, goal, result, and feedback structures. Works only with ROS 2. Example: get_action_details('/turtle1/rotate_absolute')1 params
Get complete action details including type, goal, result, and feedback structures. Works only with ROS 2. Example: get_action_details('/turtle1/rotate_absolute')
action*stringget_action_statusGet action status for a specific action name. Works only with ROS 2. Example: get_action_status('/fibonacci')1 params
Get action status for a specific action name. Works only with ROS 2. Example: get_action_status('/fibonacci')
action_name*stringsend_action_goalSend a goal to a ROS action server. Works only with ROS 2. Example: send_action_goal('/turtle1/rotate_absolute', 'turtlesim/action/RotateAbsolute', {'theta': 1.57})4 params
Send a goal to a ROS action server. Works only with ROS 2. Example: send_action_goal('/turtle1/rotate_absolute', 'turtlesim/action/RotateAbsolute', {'theta': 1.57})
action_name*stringaction_type*stringgoal*objecttimeoutnumbercancel_action_goalCancel a specific action goal. Works only with ROS 2. Example: cancel_action_goal('/turtle1/rotate_absolute', 'goal_1758653551839_21acd486')2 params
Cancel a specific action goal. Works only with ROS 2. Example: cancel_action_goal('/turtle1/rotate_absolute', 'goal_1758653551839_21acd486')
action_name*stringgoal_id*stringconnect_to_robotConnect to the robot by setting the IP/port. This tool also tests connectivity to confirm that the robot is reachable and the port is open.4 params
Connect to the robot by setting the IP/port. This tool also tests connectivity to confirm that the robot is reachable and the port is open.
ipstringping_timeoutnumberportvalueport_timeoutnumberping_robotPing a robot's IP address and check if a specific port is open. A successful ping to the IP but not the port can indicate that ROSbridge is not running. Example: ping_robot(ip='192.168.1.100', port=9090)4 params
Ping a robot's IP address and check if a specific port is open. A successful ping to the IP but not the port can indicate that ROSbridge is not running. Example: ping_robot(ip='192.168.1.100', port=9090)
ip*stringping_timeoutnumberport*integerport_timeoutnumberget_verified_robot_specLoad specifications and usage context for a verified robot model. ONLY use if the robot model is in the verified list (use get_verified_robots_list first to check). Most robots won't have a spec - that's OK, connect directly using connect_to_robot instead.1 params
Load specifications and usage context for a verified robot model. ONLY use if the robot model is in the verified list (use get_verified_robots_list first to check). Most robots won't have a spec - that's OK, connect directly using connect_to_robot instead.
name*stringget_verified_robots_listList pre-verified robot models that have specification files with usage guidance available. Use this to check if a robot model has additional context available before calling get_verified_robot_spec. If your robot is not in this list, you can still connect to it directly using...
List pre-verified robot models that have specification files with usage guidance available. Use this to check if a robot model has additional context available before calling get_verified_robot_spec. If your robot is not in this list, you can still connect to it directly using...
No parameters. Call it with no arguments.
detect_ros_versionDetect the ROS version and distribution via rosbridge.
Detect the ROS version and distribution via rosbridge.
No parameters. Call it with no arguments.
analyze_previously_received_imageAnalyze a previously received image that was saved by any ROS operation. Images can be received from: - Any topic containing image data (not just topics with 'Image' in the name) - Service responses containing image data - subscribe_once() or subscribe_for_duration() operation...1 params
Analyze a previously received image that was saved by any ROS operation. Images can be received from: - Any topic containing image data (not just topics with 'Image' in the name) - Service responses containing image data - subscribe_once() or subscribe_for_duration() operation...
image_pathstringget_nodesGet list of all currently running ROS nodes. Example: get_nodes()
Get list of all currently running ROS nodes. Example: get_nodes()
No parameters. Call it with no arguments.
get_node_detailsGet detailed information about a specific node including its publishers, subscribers, and services. Example: get_node_details('/turtlesim')1 params
Get detailed information about a specific node including its publishers, subscribers, and services. Example: get_node_details('/turtlesim')
node*stringget_parameterGet a single ROS parameter value by name. Works only with ROS 2. Example: get_parameter('/turtlesim:background_b')1 params
Get a single ROS parameter value by name. Works only with ROS 2. Example: get_parameter('/turtlesim:background_b')
name*stringset_parameterSet a single ROS parameter value. Works only with ROS 2. Example: set_parameter('/turtlesim:background_b', '255')2 params
Set a single ROS parameter value. Works only with ROS 2. Example: set_parameter('/turtlesim:background_b', '255')
name*stringvalue*stringhas_parameterCheck if a ROS parameter exists. Works only with ROS 2. Example: has_parameter('/turtlesim:background_b')1 params
Check if a ROS parameter exists. Works only with ROS 2. Example: has_parameter('/turtlesim:background_b')
name*stringdelete_parameterDelete a ROS parameter. Works only with ROS 2. Example: delete_parameter('/turtlesim:background_b')1 params
Delete a ROS parameter. Works only with ROS 2. Example: delete_parameter('/turtlesim:background_b')
name*stringget_parametersGet list of all ROS parameter names for a specific node. Works only with ROS 2. Example: get_parameters('cam2image') get_parameters('/cam2image')1 params
Get list of all ROS parameter names for a specific node. Works only with ROS 2. Example: get_parameters('cam2image') get_parameters('/cam2image')
node_name*stringget_parameter_detailsGet comprehensive details about a specific ROS parameter including value, type, and metadata. Works only with ROS 2. Example: get_parameter_details('/turtlesim:background_r')1 params
Get comprehensive details about a specific ROS parameter including value, type, and metadata. Works only with ROS 2. Example: get_parameter_details('/turtlesim:background_r')
name*stringget_servicesGet list of all available ROS services. Example: get_services()
Get list of all available ROS services. Example: get_services()
No parameters. Call it with no arguments.
get_service_typeGet the service type for a specific service. Example: get_service_type('/rosapi/topics')1 params
Get the service type for a specific service. Example: get_service_type('/rosapi/topics')
service*stringget_service_detailsGet complete service details including request/response structures and provider nodes. Example: get_service_details('/rosapi/topics')1 params
Get complete service details including request/response structures and provider nodes. Example: get_service_details('/rosapi/topics')
service*stringcall_serviceCall a ROS service with specified request data. Example: call_service('/rosapi/topics', 'rosapi/Topics', {}) call_service('/slow_service', 'my_package/SlowService', {}, timeout=10.0) # Specify timeout only for slow services IMPORTANT: Field names in the request dict should mat...4 params
Call a ROS service with specified request data. Example: call_service('/rosapi/topics', 'rosapi/Topics', {}) call_service('/slow_service', 'my_package/SlowService', {}, timeout=10.0) # Specify timeout only for slow services IMPORTANT: Field names in the request dict should mat...
request*objectservice_name*stringservice_type*stringtimeoutnumberget_topicsGet list of all available ROS topics. Example: get_topics()
Get list of all available ROS topics. Example: get_topics()
No parameters. Call it with no arguments.
get_topic_typeGet the message type for a specific topic. Example: get_topic_type('/cmd_vel')1 params
Get the message type for a specific topic. Example: get_topic_type('/cmd_vel')
topic*stringget_topic_detailsGet detailed information about a specific topic including its type, publishers, and subscribers. Example: get_topic_details('/cmd_vel')1 params
Get detailed information about a specific topic including its type, publishers, and subscribers. Example: get_topic_details('/cmd_vel')
topic*stringget_message_detailsGet the complete structure/definition of a message type. Example: get_message_details('geometry_msgs/Twist')1 params
Get the complete structure/definition of a message type. Example: get_message_details('geometry_msgs/Twist')
message_type*stringsubscribe_onceSubscribe to a ROS topic and return the first message received. Example: subscribe_once(topic='/cmd_vel', msg_type='geometry_msgs/msg/TwistStamped') subscribe_once(topic='/slow_topic', msg_type='my_package/SlowMsg', timeout=10.0) # Use longer timeout for slow topics subscribe_...6 params
Subscribe to a ROS topic and return the first message received. Example: subscribe_once(topic='/cmd_vel', msg_type='geometry_msgs/msg/TwistStamped') subscribe_once(topic='/slow_topic', msg_type='my_package/SlowMsg', timeout=10.0) # Use longer timeout for slow topics subscribe_...
expects_imagestringmsg_typestringqueue_lengthintegerthrottle_rate_msintegertimeoutnumbertopicstringsubscribe_for_durationSubscribe to a topic for a duration and collect messages. Example: subscribe_for_duration(topic='/cmd_vel', msg_type='geometry_msgs/msg/TwistStamped', duration=5, max_messages=10) subscribe_for_duration(topic='/high_rate_topic', msg_type='sensor_msgs/Image', duration=10, queue...7 params
Subscribe to a topic for a duration and collect messages. Example: subscribe_for_duration(topic='/cmd_vel', msg_type='geometry_msgs/msg/TwistStamped', duration=5, max_messages=10) subscribe_for_duration(topic='/high_rate_topic', msg_type='sensor_msgs/Image', duration=10, queue...
durationnumberexpects_imagestringmax_messagesintegermsg_typestringqueue_lengthintegerthrottle_rate_msintegertopicstringpublish_for_durationsPublish a sequence of messages with delays. Example: publish_for_durations(topic='/cmd_vel', msg_type='geometry_msgs/msg/TwistStamped', messages=[{'linear': {'x': 1.0}}, {'linear': {'x': 0.0}}], durations=[1, 2])4 params
Publish a sequence of messages with delays. Example: publish_for_durations(topic='/cmd_vel', msg_type='geometry_msgs/msg/TwistStamped', messages=[{'linear': {'x': 1.0}}, {'linear': {'x': 0.0}}], durations=[1, 2])
durationsarraymessagesarraymsg_typestringtopicstringpublish_oncePublish a single message to a ROS topic. Example: publish_once(topic='/cmd_vel', msg_type='geometry_msgs/msg/TwistStamped', msg={'linear': {'x': 1.0}})3 params
Publish a single message to a ROS topic. Example: publish_once(topic='/cmd_vel', msg_type='geometry_msgs/msg/TwistStamped', msg={'linear': {'x': 1.0}})
msgobjectmsg_typestringtopicstringSponsors
Readme
ROS MCP Server 🧠⇄🤖
ROS-MCP-Server connects large language models (such as Claude, GPT, and Gemini) to robots, enabling bidirectional communication with no changes to existing robot source code.
Why ROS-MCP?
Details
- Repository
- github.com/robotmcp/ros-mcp-server
- Package
ros-mcp- Transport
- STDIO
- Registry
- MCP registry, active
- Resources
- 6
- Prompts
- 7
- Tools verified
- Jun 11, 2026