ROS MCP Server
An MCP server that connects an agent to a ROS robot through rosbridge: reading sensors and control without changing the robot's code
High risk
We rate an entry high when the tool writes to external systems, handles money, production databases or secrets, or runs arbitrary commands. The CLI installs it only with your consent.
Why this level
- Controls a real robot: publishes to topics, calls services and actions, sets parameters
- A wrong command can cause unwanted movement of mechanisms
Install
In your terminal, with SkillFoxx CLI
npx skillfoxx add mcp/ros-mcp-serverDetects the agents on your machine, checks the risk and pins the version.
Other ways to install
This entry is high risk, so there is no one-click install. Review the code and add the config by hand.
Run in a terminal
claude mcp add --transport stdio ros-mcp-server -- uvx ros-mcp==3.1.2Or add to the file .mcp.json, in the project
{
"mcpServers": {
"ros-mcp-server": {
"command": "uvx",
"args": [
"ros-mcp==3.1.2"
]
}
}
}If the file already exists, add the server inside the mcpServers key.
Add to the file ~/.cursor/mcp.json, for all projects
{
"mcpServers": {
"ros-mcp-server": {
"command": "uvx",
"args": [
"ros-mcp==3.1.2"
]
}
}
}If the file already exists, add the server inside the mcpServers key. For a single project, put the same block into .cursor/mcp.json.
Run in a terminal
code --add-mcp '{"name":"ros-mcp-server","type":"stdio","command":"uvx","args":["ros-mcp==3.1.2"]}'Or add to the file .vscode/mcp.json, in the project
{
"servers": {
"ros-mcp-server": {
"type": "stdio",
"command": "uvx",
"args": [
"ros-mcp==3.1.2"
]
}
}
}If the file already exists, add the server inside the servers key.
Run in a terminal
codex mcp add ros-mcp-server -- uvx ros-mcp==3.1.2Or add to the file ~/.codex/config.toml, for all projects
[mcp_servers.ros-mcp-server]
command = "uvx"
args = ["ros-mcp==3.1.2"]If the file already exists, append the block to the end.
Run in a terminal
gemini mcp add -s user ros-mcp-server uvx ros-mcp==3.1.2Or add to the file ~/.gemini/settings.json, for all projects
{
"mcpServers": {
"ros-mcp-server": {
"command": "uvx",
"args": [
"ros-mcp==3.1.2"
]
}
}
}If the file already exists, add the server inside the mcpServers key.
Add to the file ~/.config/devin/mcp_config.json, for all projects
{
"mcpServers": {
"ros-mcp-server": {
"command": "uvx",
"args": [
"ros-mcp==3.1.2"
]
}
}
}If the file already exists, add the server inside the mcpServers key. Legacy Cascade keeps the MCP config in ~/.codeium/windsurf/mcp_config.json.
Formerly Windsurf.
Add to the file cline_mcp_settings.json, for all projects
{
"mcpServers": {
"ros-mcp-server": {
"command": "uvx",
"args": [
"ros-mcp==3.1.2"
]
}
}
}If the file already exists, add the server inside the mcpServers key. Open the settings file in Cline: MCP Servers tab, Configure MCP Servers.
Add to the file .roo/mcp.json, in the project
{
"mcpServers": {
"ros-mcp-server": {
"command": "uvx",
"args": [
"ros-mcp==3.1.2"
]
}
}
}If the file already exists, add the server inside the mcpServers key.
A fork of Roo Code, same .roo folders.
Add to the file opencode.json, in the project
{
"mcp": {
"ros-mcp-server": {
"type": "local",
"command": [
"uvx",
"ros-mcp==3.1.2"
]
}
}
}If the file already exists, add the server inside the mcp key.
Add to the file ~/.config/zed/settings.json, for all projects
{
"context_servers": {
"ros-mcp-server": {
"command": "uvx",
"args": [
"ros-mcp==3.1.2"
]
}
}
}If the file already exists, add the server inside the context_servers key.
Add to the file .codeassistant/mcp.json, in the project
{
"mcpServers": {
"ros-mcp-server": {
"command": "uvx",
"args": [
"ros-mcp==3.1.2"
]
}
}
}If the file already exists, add the server inside the mcpServers key.
Install uv, then in Claude Code run claude mcp add ros-mcp -- uvx ros-mcp --transport=stdio. On the robot machine install rosbridge, for example sudo apt install ros-<distro>-rosbridge-server, and launch it with ros2 launch rosbridge_server rosbridge_websocket_launch.xml.
Other ways from the author
claude mcp add ros-mcp -- uvx ros-mcp --transport=stdioRequires uv, which provides uvx. Rosbridge with rosapi is set up separately on the robot machine.
This is third-party code. Review the repository files before installing.
What it does
The server gives the agent two-way access to a robot running ROS through a rosbridge node, without changing the robot's source code. The agent can publish and subscribe to topics, call services and actions, set parameters, read sensor data and monitor robot state in real time. It helps the model discover the available topics, services, actions and their types, including custom ones, so it can address them with the right syntax and no manual setup. It works with ROS 2, such as Jazzy and Humble, and ROS 1 distributions; the link runs over WebSocket, so the agent and the robot can sit on different machines in one network.
Who it is for. For robotics engineers and ROS developers who want to control a robot and inspect its state through an agent.
Good fit when
- You want to control a ROS robot with natural-language commands
- You want to read topics, sensors and robot state together with the agent
- You need to call services or actions and set parameters without hand-written syntax
- You want to diagnose a robot or debug behavior in simulation
Not a fit when
- The robot machine has no ROS and cannot run rosbridge
- The task is unrelated to ROS and robots
Example request
Connect to the robot on localhost through ros-mcp and show which topics and services are availableLimitations
The robot machine must have ROS installed and rosbridge running together with rosapi, or the introspection tools fail. Rosbridge is started through its launch file, not ros2 run, otherwise rosapi does not come up. Installing the server needs Python 3.10 or newer and pip 23.0 or newer. Controlling a real robot needs care: the agent can move mechanisms and change parameters. ROS 1 is declared end of life.
How to disable. Run claude mcp remove ros-mcp or delete the ros-mcp entry from the client's MCP configuration. If installed via pip, uninstall the ros-mcp package.
MCP
- Transport
- stdio, http
- Authentication
- not required
Security check
- Controls a real robot: publishes to topics, calls services and actions, sets parameters
- A wrong command can cause unwanted movement of mechanisms
README in short
The README describes a server that connects large language models to robots through MCP and ROS without changing the robot's code. It claims two-way communication: publishing and subscribing to topics, calling services and actions, working with parameters, and reading sensors and state. The server helps the model discover topics, services and their types, including custom ones, and works with ROS 2 and ROS 1. It shows examples with an industrial robot, the Wilson mobile robot and a Unitree Go2 quadruped in NVIDIA Isaac Sim. Setup goes through uvx or pip, with rosbridge and rosapi on the robot. Apache 2.0 licensed.
FAQ
Do I need to change the robot's code?
No. You just run a rosbridge node in the existing ROS setup, and the server connects to it over WebSocket.
Does it work with ROS 1?
Yes, the server supports ROS 2 and ROS 1 distributions, though ROS 1 is declared end of life.
Related
An MCP server with n8n node and template knowledge: the agent picks nodes, validates configs and, with API access, creates workflows in your n8n
Zapier's official MCP plugin: the agent gets actions across thousands of apps through your Zapier account
Awesome Claude Skills by Composio
Awesome Claude Skills
A curated list of Claude skills and plugins, plus Composio's own automation skills for 78 SaaS apps
A plugin and CLI catalog for agents: generates command-line interfaces for GUI apps like GIMP and Blender and installs ready ones via CLI-Hub