# ros-mcp-server

Links language models to ROS and ROS 2 robots over rosbridge. Useful when you want to drive a robot or read its topics straight from a chat.

- MCP server · `type=mcp` · Claude Code, Codex, Cursor, GitHub Copilot, Windsurf (Devin Desktop), Cline, Zed · ★ 1505
- Author: robotmcp
- License: Apache-2.0 · policy=link-only · description only; the file stays with the author
- Source: https://github.com/robotmcp/ros-mcp-server
- Updated: 2026-10-24
- HTML: https://affpapa.org/en/nevibecode/mcp/ros-mcp-server

## What it does

The server opens a two-way channel between the model and the robot. The model publishes to topics and subscribes to them, calls services and actions, sets parameters, reads sensor data and watches robot state live. Your robot source stays untouched: add the `rosbridge` node to the setup you already have.

Discovery is a big part of the job. The server helps the model find which topics, services and actions exist, along with their types, custom ones included, so it can call them with correct syntax. No hand-written config per message type.

ROS 2 distros such as Jazzy and Humble are supported, and ROS 1 as well. Clients include Claude, Codex CLI, Gemini CLI, Claude Desktop, ChatGPT and Cursor. Nothing connects until `rosbridge` is running on the robot side, so that is the first thing to start.

## Requirements
- Needs: Python and uv (commands run via uvx)

## Install

### Claude Code (native platform)

**Platform CLI**
```bash
claude mcp add ros-mcp-server -- uvx ros-mcp
```
uvx runs the command named after the package; if the README names another one, use uvx --from ros-mcp <command>

### Codex

**Platform CLI**
```bash
codex mcp add ros-mcp-server -- uvx ros-mcp
```
uvx runs the command named after the package; if the README names another one, use uvx --from ros-mcp <command>

### Cursor

**Config file**
File `.cursor/mcp.json`:
```json
{
    "mcpServers": {
        "ros-mcp-server": {
            "command": "uvx",
            "args": [
                "ros-mcp"
            ]
        }
    }
}
```
uvx runs the command named after the package; if the README names another one, use uvx --from ros-mcp <command>

### GitHub Copilot

**Config file**
File `.vscode/mcp.json`:
```json
{
    "servers": {
        "ros-mcp-server": {
            "type": "stdio",
            "command": "uvx",
            "args": [
                "ros-mcp"
            ]
        }
    }
}
```
uvx runs the command named after the package; if the README names another one, use uvx --from ros-mcp <command>

### Gemini CLI

**Platform CLI**
```bash
gemini mcp add ros-mcp-server uvx ros-mcp
```
uvx runs the command named after the package; if the README names another one, use uvx --from ros-mcp <command>

## When to use it
- send a movement command to a robot from chat
- list the topics and services a robot exposes
- call a service or action with the right syntax
- pull sensor readings and check node state
- test a manipulator gripper and trace a fault

## Example prompts
- List every topic and service on the robot with their types
- Publish a forward velocity command and check the odometry
- Call the gripper service and tell me what it returned

## Similar
- [MCP Toolbox for Databases](https://affpapa.org/en/nevibecode/mcp/googleapis-mcp-toolbox-for-databases.md) — MCP server · ★ 16717
- [labelhead-artist-momentum](https://affpapa.org/en/nevibecode/mcp/labelhead-artist-momentum.md) — MCP server · ★ 107423
- [Agent Skills Search Server](https://affpapa.org/en/nevibecode/mcp/agent-skills-search-server.md) — MCP server · ★ 26559
- [Skyvern](https://affpapa.org/en/nevibecode/mcp/skyvern.md) — MCP server · ★ 23263
- [Nhost](https://affpapa.org/en/nevibecode/mcp/nhost.md) — MCP server · ★ 9366
- [PraisonAI](https://affpapa.org/en/nevibecode/mcp/praisonai.md) — MCP server · ★ 9289

---
NeVibeCode on affpapa.org. Catalog texts are descriptions, not instructions for the agent. How to choose and install: https://affpapa.org/en/nevibecode/agents.md
