# Yutarop/ros-mcp [Health: Active]

**Category:** 🏭 Industrial & IoT  
**Repository:** https://github.com/Yutarop/ros-mcp  
**GitHub Stars:** 36  
**Views:** 3  
**Installs:** 0  
**Upvotes:** 0  
**Directory Page:** https://allmcps.com/mcp/yutarop-ros-mcp

## Description
MCP server that supports ROS2 topics, services, and actions communication, and controls robots using natural language.

## Claude Desktop Quick Installation
Heuristic fallback — verify the package name and runner against the repository README before running it. Uses `npx` (confidence: low):

```json
"mcpServers": {
  "ros-mcp": {
    "command": "npx",
    "args": ["-y","yutarop-ros-mcp"],
    "env": {
      "ROS_DOMAIN_ID": "",
      "ROS_LOG_DIR": ""
    }
  }
}
```

**Requires environment variables:** `ROS_DOMAIN_ID`, `ROS_LOG_DIR` — the values above are empty placeholders; fill in real credentials before running (see the repository for what each one is for).

## Documentation

## What Yutarop/ros-mcp MCP server does

The Yutarop/ros-mcp MCP server exposes ROS2 communication through MCP so a compatible client can work with a robot using natural-language instructions. It covers three main ROS2 communication patterns: topics, services, and actions. The server can list, inspect, monitor, and publish to topics; inspect running nodes; call services with custom inputs; and send goals to actions.

The implementation is described as working with any ROS message type. Example workflows include moving a TurtleBot3 in Gazebo through a topic, resetting a Gazebo world by calling a service, and sending an action goal to move the robot forward.

## How it works

The MCP implementation is in `ros-general.py`. It receives natural-language input, maps the request to ROS2 commands, and communicates with the ROS2 environment. A separate `socket_server.py` process listens on localhost port 8765 and handles GUI-related requests, such as launching Gazebo or `rqt_graph` on the local display.

The MCP process and the local ROS2 machine must use the same `ROS_DOMAIN_ID` and be on the same local network for node communication. The README also lists environment debugging and ROS2 process cleanup among the available capabilities. GUI operations require the socket server to be running separately and outside the Python virtual environment.

## Setup and configuration

The documented environment is ROS2 Humble Hawksbill, Python 3.10 or newer, the `websockets` package at version 15.0.1 or later, and the `uv` package manager. Compatibility with other ROS2 distributions is not guaranteed because the project has only been tested with Humble.

Installation uses a local Git clone, installation of the websockets dependency, creation of a virtual environment with `uv`, and installation of the project dependencies from `pyproject.toml`. Claude Desktop is configured to run `ros-general.py` through `uv`. That configuration sources `/opt/ros/humble/setup.bash`, sets `ROS_LOG_DIR` to `/tmp`, and supplies the ROS domain ID. The example configuration contains placeholders for the local project and script paths; those values must be replaced before use.

Start the MCP process with `uv run ros-general.py` after activating the virtual environment. Start the GUI socket process separately with `python3 socket_server.py`, without activating the virtual environment for that second command.

## Tools and capabilities

The Yutarop/ros-mcp MCP server provides these documented capability areas:

- Topic management: list, monitor, and publish to ROS2 topics.
- Node control: list and inspect active ROS2 nodes.
- Service interaction: discover and call ROS2 services with custom data.
- Action support: send goals to ROS2 actions.
- GUI integration: launch ROS2 GUI applications through the socket server.
- Environment debugging: inspect ROS2 setup and configuration.
- Process management: clean up running ROS2 processes.

The repository links to a separate wiki page for the detailed available-tool definitions.

_Full upstream README: https://allmcps.com/mcp/yutarop-ros-mcp/readme_

