Server data from the Official MCP Registry
View ROS 2 nodes and topics, and call services and actions via MCP
View ROS 2 nodes and topics, and call services and actions via MCP
Valid MCP server (1 strong, 1 medium validity signals). No known CVEs in dependencies. Imported from the Official MCP Registry.
3 files analyzed · No issues found
Security scores are indicators to help you make informed decisions, not guarantees. Always review permissions before connecting any MCP server.
Set these up before or after installing:
Environment variable: MCP_CUSTOM_PROMPTS
Environment variable: MCP_PROMPTS_LOCAL
Environment variable: MCP_PROMPTS_PATH
Environment variable: MCP_PROMPTS_MODULE
From the project's GitHub README.

A Python implementation of the Model Context Protocol (MCP) for ROS 2. This server enables AI tooling to connect with ROS 2 nodes, topics, and services using the MCP standard over stdio. Designed to be the easiest ROS 2 MCP server to configure.
Subscribe to a ROS2 topic, collect messages for a specified duration, and provide statistical analysis of the collected data.
➡️ Can auto-detect topic if only one is available. Analyzes message rates, counts, and statistics on numeric fields.
Subscribe to one ROS2 topic and republish messages to another topic with optional transformations.
➡️ Supports identity relay, rate limiting, and change-based filtering.
Check if expected ROS2 topics and services are available and functioning correctly with optional publication rate monitoring.
➡️ Provides comprehensive health report with status indicators and recommendations.
Compare two ROS2 topics and report differences in their messages with detailed field-by-field analysis.
➡️ Useful for comparing raw sensor data with filtered/processed versions or verifying topic synchronization.
Note: To call a service with a custom (non-default) type, source the package that defines it before starting the server.
Save hours of development time with native AI integration for your ROS 2 projects:
Perfect for: Robotics developers, researchers, students, and anyone working with ROS 2 who wants to leverage AI for faster development and debugging.
If you find this useful, please ⭐ star the repo — it helps others discover it.
🚀 Enjoying this project?
Feel free to contribute or reach out for support! Write issues, submit PRs, or join our Discord community to connect with other ROS 2 and AI enthusiasts.


Follow the installation guide for step-by-step instructions:
Check out the Gazebo Drone Demo section
| Tool | Description | Inputs | Outputs |
|---|---|---|---|
ros2_topic_list | Returns list of available topics | – | topic_name (string): Topic name topic_type (string): Message type |
ros2_topic_subscribe | Subscribes to a ROS 2 topic and collects messages for a duration or message limit | topic_name (string) duration (float) message_limit (int) (defaults: first msg, 5s) | messages count duration |
ros2_get_messages | Retrieves past messages from a topic (data black box) | topic_name (string) message_type (string) number_of_messages (int) time_start (str) time_end (str) | timestamps messages |
ros2_get_message_fields | Gets field names and types for a message type | message_type (string) | Field names + types |
ros2_topic_publish | Publishes message to a topic | topic_name (string) message_type (string) data (dict) | status |
| Tool | Description | Inputs | Outputs |
|---|---|---|---|
ros2_service_list | Returns list of available services | – | service_name (string) service_type (string) request_fields (array) |
ros2_service_call | Calls a ROS 2 service | service_name (string) service_type (string) fields (array) force_call (bool, default: false) | result (string) error (string, if any) |
| Tool | Description | Inputs | Outputs |
|---|---|---|---|
ros2_list_actions | Returns list of available ROS 2 actions with their types and request fields | – | actions[] (array) └ name (string) └ types[] (array of string) └ request_fields (array) |
ros2_send_action_goal | Sends a goal to an action. Optionally waits for the result. | action_name (string) action_type (string) goal_fields (object) wait_for_result (bool, default: false) timeout_sec (number, default: 60.0) | accepted (bool) goal_id (string|null) send_goal_stamp (object|null) waited (bool) result_timeout_sec (number|null) status_code (int|null) status (string|null) result (object|null) | error (string) |
ros2_cancel_action_goal | Cancels a specific goal or all goals for an action | action_name (string) goal_id_hex (string, required if cancel_all=false) cancel_all (bool, default: false) stamp_sec (int, default: 0) stamp_nanosec (int, default: 0) wait_timeout_sec (number, default: 3.0) | service (string) return_code (int) return_code_text (string) goals_canceling[] (array of {goal_id, stamp}) | error (string) |
ros2_action_request_result | Waits for the RESULT of a given goal via GetResult | action_name (string) action_type (string) goal_id_hex (string, 32-char UUID) timeout_sec (number|null, default: 60.0) wait_for_service_sec (number, default: 3.0) | service (string) goal_id (string) waited (bool) result_timeout_sec (number|null) status_code (int|null) status (string|null) result (object|null) | error (string) |
ros2_action_subscribe_feedback | Subscribes to feedback messages for an action. Can filter by goal_id. Collects messages for duration or max count. | action_name (string) action_type (string) goal_id_hex (string|null) duration_sec (number, default: 5.0) max_messages (int, default: 100) | topic (string) action_type (string) goal_id_filter (string|null) duration_sec (number) messages[] (array of {goal_id, feedback, recv_stamp}) | error (string) |
ros2_action_subscribe_status | Subscribes to an action's status topic and returns collected status frames | action_name (string) duration_sec (number, default: 5.0) max_messages (int, default: 100) | topic (string) duration_sec (number) frames[] (array of {stamp, statuses[]}) | error (string) |
Since MCP servers run over stdio, debugging can be challenging. For the best debugging experience, we strongly recommend using the MCP Inspector.
You can launch the MCP Inspector via npm with this command:
npx @modelcontextprotocol/inspector uv --directory /path/to/ros2_mcp run mcp_ros_2_server
Upon launching, the Inspector will display a URL that you can access in your browser to begin debugging.
We built this server to make AI‑assisted ROS 2 development fast and reliable. Internally, we needed a simple way for agents to discover message types, publish/subscribe to topics, and call services—without boilerplate or flaky networking. That led to a few core design goals:
After dogfooding it, we open‑sourced the project to help the broader ROS 2 community build faster with AI. It’s now useful not only for development, but also for controlling robots, running QoS experiments, and analyzing live data and robot/swarm state. The project is actively maintained—features and improvements ship regularly based on user feedback. If this project helps you, please star the repo and share your use case!
Be the first to review this server!
by Modelcontextprotocol · Developer Tools
Read, search, and manipulate Git repositories programmatically
by Toleno · Developer Tools
Toleno Network MCP Server — Manage your Toleno mining account with Claude AI using natural language.
by mcp-marketplace · Developer Tools
Create, build, and publish Python MCP servers to PyPI — conversationally.
by Microsoft · Content & Media
Convert files (PDF, Word, Excel, images, audio) to Markdown for LLM consumption
by mcp-marketplace · Developer Tools
Scaffold, build, and publish TypeScript MCP servers to npm — conversationally
by mcp-marketplace · Finance
Free stock data and market news for any MCP-compatible AI assistant.