ROS 2 MCP Server
ROS 2 nodes, topics, and services bridge for AI agents using the MCP standard.
Data last scanned today · Reviewed yesterday
Overview
This Python-based MCP server enables AI assistants to interact directly with ROS 2 environments over stdio. It provides functionality to list, subscribe to, and publish ROS 2 topics, as well as call services and manage action goals. The server includes several built-in prompts for specialized tasks, such as performing topic health checks, analyzing message statistics, and relaying data between topics. It is compatible with both ROS 2 Humble and Jazzy distributions.
Our verdict
With a security score of 23/100, this server carries a high-risk rating. The primary vulnerability is the complete lack of an authentication method, meaning any entity with access to the configuration can execute commands against the ROS 2 system. Additionally, the server provides full write access to ROS 2 topics and services without a read-only mode, creating a potential vector for unauthorized system modification. It is recommended only for use in isolated or non-critical environments where security boundaries are managed externally.
- Supports both ROS 2 Humble and Jazzy versions.
- Includes pre-built prompts for analysis and health monitoring.
- Minimal supply chain risk with zero direct dependencies.
- No authentication method implemented for user access.
- Lacks a read-only mode, exposing full write capabilities.
- Maintained by community contributors rather than an official vendor.
Tools
| Tool | Description | Risk |
|---|---|---|
| ros2_topic_list | Returns list of available topics | low |
| ros2_topic_subscribe | Subscribes to a ROS 2 topic and collects messages for a duration or message limit | low |
| ros2_get_messages | Retrieves past messages from a topic (data black box) | low |
| ros2_get_message_fields | Gets field names and types for a message type | low |
| ros2_topic_publish | Publishes message to a topic | medium |
| ros2_service_list | Returns list of available services | low |
| ros2_service_call | Calls a ROS 2 service | medium |
| ros2_list_actions | Returns list of available ROS 2 actions with their types and request fields | low |
| ros2_send_action_goal | Sends a goal to an action. Optionally waits for the result. | medium |
| ros2_cancel_action_goal | Cancels a specific goal or all goals for an action | medium |
| ros2_action_request_result | Waits for the RESULT of a given goal via GetResult | low |
| ros2_action_subscribe_feedback | Subscribes to feedback messages for an action. Can filter by goal_id. Collects messages for duration or max count. | low |
| ros2_action_subscribe_status | Subscribes to an action's status topic and returns collected status frames | low |
Compatibility
| Client | Local | Docker | Remote | Read-only |
|---|---|---|---|---|
| Claude Desktop | ||||
| Cursor | ||||
| VS Code | ||||
| Windsurf | ||||
| ChatGPT |
Frequently asked questions
›What ROS 2 distributions are supported?
The server currently supports ROS 2 Humble and ROS 2 Jazzy.
›How do I call a service with a custom, non-default message type?
You must source the ROS 2 package that defines the custom service type in your environment before starting the server.
›How does the server handle Quality of Service (QoS) settings?
The server automatically selects appropriate Quality of Service settings for all topics and services.
›What should I do if the server returns an incomplete list of topics or services in Docker?
DDS discovery may still be in progress immediately after startup. You can tune the discovery warm-up behavior using the MCP_ROS_DISCOVERY_S environment variable.
Alternatives
Changelog
- SecurityRelease 2606
2026-07-16
- NewRelease 2511
2025-11-19
- FixRelease 2508
2025-09-02
Badge
Maintain this server? Add the live badge to your README.