This gives GitHub Copilot and other AI agents direct access to ROS 2 systems through stdio transport. You get tools for listing and monitoring nodes, topics, services, and TF2 frames, plus runtime parameter modification and launch file execution. The monitor_topic tool is particularly handy since it blocks for 1-30 seconds to collect message streams, letting agents naturally observe sensor data or debug throughput issues. It also includes generate_ros_graph for visualizing node/topic connections and check_ros_system_status for daemon health checks. Everything runs through ros2 CLI commands under the hood. Reach for this when you want Copilot to help debug a running ROS 2 system or automate common monitoring tasks during development.
A Model Context Protocol (MCP) server for ROS 2 that enables GitHub Copilot and other AI agents to interact with ROS 2 systems. This server provides tools for monitoring, debugging, and managing ROS 2 nodes, topics, services, and TF2 frames.
Add the following to .vscode/mcp.json
{
"servers": {
"ros": {
"command": "npx",
"args": ["ros-mcp"]
}
}
}
Ensure the server is selected in tools for vs code copilot
You're good to go! try "List active ros topics" to test it out.
# Clone or navigate to the repository
cd /path/to/ROS-MCP
# Install dependencies
npm install
# Build the TypeScript
npm run build
WSL might need linking the nvm node to the default node path
sudo ln -s ~/.nvm/versions/node/v24.11.0/bin/node /usr/local/bin/node sudo ln -s ~/.nvm/versions/node/v24.11.0/bin/npm /usr/local/bin/npm
# Direct execution (recommended for MCP integration)
npm start
# Development with ts-node
npm run dev
Configure the MCP server in your GitHub Copilot settings:
{
"servers": {
"ros": {
"command": "node",
"args": ["/path/to/ROS-MCP/build/index.js"]
}
}
}
Some tools are designed to collect data over time, allowing the agent to wait and observe:
monitor_topic: Waits for 1-30 seconds, collecting messages from a topic. Supports custom message count limits. Perfect for:
monitor_tf2_frames: Observes TF2 frame transforms over a specified duration (1-30 seconds)
Tool: monitor_topic
Parameters:
- topic_name: "/sensor_msgs/LaserScan"
- duration_seconds: 5
- message_count: 10
This collects up to 10 messages from the LaserScan topic over 5 seconds.
Tool: generate_ros_graph
Parameters:
- output_format: "text" (or "dot" for Graphviz)
Returns a visual representation of how nodes and topics are connected.
Tool: check_ros_system_status
Parameters:
- include_diagnostics: true
Provides comprehensive system status including daemon health, active nodes, and services.
The server is built with:
ros2 CLI commandThis MCP server follows patterns that work well with AI agents:
monitor_topic block for the specified duration, allowing agents to naturally await resultsA Copilot agent using this MCP can:
Agent: "What topics are currently being published?"
[Uses: list_ros_topics]
Agent: "Let me observe the /cmd_vel topic for 5 seconds"
[Uses: monitor_topic with topic_name="/cmd_vel", duration_seconds=5]
[Waits 5 seconds for data collection]
Agent: "Here are the velocity commands being sent: [parsed data]"
Agent: "Show me how all nodes are connected"
[Uses: generate_ros_graph with output_format="text"]
Agent: "Let me try publishing a test message to the /cmd_vel topic"
[Uses: publish_to_topic]
Agent: "Let me check if any node is having issues"
[Uses: check_ros_system_status with include_diagnostics=true]
tf2_tools package to be installedMIT
Contributions welcome! Please ensure all tools handle errors gracefully and include proper parameter validation.