ROS2 Exec MCP Server
Executes ROS 2 CLI commands, enabling management of ROS 2 nodes, topics, services, and other ROS 2 components.
Click on "Install Server".
Wait a few minutes for the server to deploy. Once ready, it will show a "Started" state.
In the chat, type
@followed by the MCP server name and your instructions, e.g., "@ROS2 Exec MCP Serverlist all ROS2 topics"
That's it! The server will respond to your query, and you can continue using it as needed.
Here is a step-by-step guide with screenshots.
ROS2 Exec MCP Server
A Model Context Protocol (MCP) server that executes ROS 2 (ros2) CLI commands.
Features
Execute ROS 2 CLI commands (e.g.,
ros2 topic list,ros2 node list)Configurable default timeout via environment variable
Optional working directory control
Secure by default: only allows commands starting with
ros2(overridable)
Usage
Below are examples for both stdio and streamable-http.
Stdio (default)
MCP client example:
{
"mcpServers": {
"ros2": {
"command": "uvx",
"args": ["takanarishimbo-ros2-exec-mcp"]
}
}
}You can also configure timeout, default working directory, or allow non-ros2 commands:
{
"mcpServers": {
"ros2": {
"command": "uvx",
"args": ["takanarishimbo-ros2-exec-mcp"],
"env": {
"ROS2_EXEC_TIMEOUT": "60",
"DEFAULT_CWD": "/your/ros2/ws",
"ALLOW_NON_ROS2": "true",
"MCP_TRANSPORT": "stdio"
}
}
}
}streamable-http
Start the MCP server on the robot side first:
# Optional: set host/port if needed
MCP_TRANSPORT=streamable-http MCP_HOST=0.0.0.0 MCP_PORT=8000 \
uvx takanarishimbo-ros2-exec-mcpMCP client example:
{
"mcpServers": {
"ros2": {
"url": "http://xxx.xxx.xxx.xxx:8000/mcp",
"env": {
"MCP_TRANSPORT": "streamable-http"
}
}
}
}Environment Variables
ROS2_EXEC_TIMEOUT: Default timeout seconds for command execution (default:30)DEFAULT_CWD: Default working directory for command execution (optional)ALLOW_NON_ROS2: If set totrue, allows executing non-ros2commands (default:false)MCP_TRANSPORT: Transport mode.stdio(default) orstreamable-httpMCP_HOST: HTTP host/interface forstreamable-http(default:0.0.0.0)MCP_PORT: HTTP port forstreamable-http(default:8080)
Available Tools
ros2_exec
Execute a ROS 2 CLI command.
Parameters:
command(required): Full command string, e.g.,"ros2 topic list"timeout(optional): Timeout seconds (overridesROS2_EXEC_TIMEOUT)cwd(optional): Working directory (overridesDEFAULT_CWD)
Returns combined stdout/stderr and exit code.
Development
Clone and install dependencies with
uv:uv syncRun the server:
uv run takanarishimbo-ros2-exec-mcpTest with MCP Inspector (optional):
npx @modelcontextprotocol/inspector uv run takanarishimbo-ros2-exec-mcp
Publishing to PyPI
This project uses PyPI's Trusted Publishers feature for secure, token-less publishing via GitHub Actions.
1. Configure PyPI Trusted Publisher
Log in to PyPI (create account if needed)
Go to https://pypi.org/
Navigate to Publishing Settings
Go to your account settings
Click on "Publishing" or go to https://pypi.org/manage/account/publishing/
Add GitHub Publisher
Click "Add a new publisher"
Select "GitHub" as the publisher
Fill in:
Owner:
TakanariShimbo(your GitHub username/org)Repository:
ros2-exec-mcpWorkflow name:
pypi-publish.ymlEnvironment:
pypi(optional but recommended)
Click "Add"
2. Configure GitHub Environment (Recommended)
Navigate to Repository Settings
Go to your GitHub repository
Click "Settings" → "Environments"
Create PyPI Environment
Click "New environment"
Name:
pypiConfigure protection rules (optional):
Add required reviewers
Restrict to specific branches/tags
3. Setup GitHub Personal Access Token (for release script)
The release script needs to push to GitHub, so you'll need a GitHub token:
Create GitHub Personal Access Token
Go to https://github.com/settings/tokens
Click "Generate new token" → "Generate new token (classic)"
Set expiration (recommended: 90 days or custom)
Select scopes:
✅
repo(Full control of private repositories)
Click "Generate token"
Copy the generated token (starts with
ghp_)
Configure Git with Token
# Option 1: Use GitHub CLI (recommended) gh auth login # Option 2: Configure git to use token git config --global credential.helper store # Then when prompted for password, use your token instead
4. Release New Version
Use the release script to automatically version, tag, and trigger publishing:
# First time setup
chmod +x scripts/release.sh
# Increment patch version (0.1.0 → 0.1.1)
./scripts/release.sh patch
# Increment minor version (0.1.0 → 0.2.0)
./scripts/release.sh minor
# Increment major version (0.1.0 → 1.0.0)
./scripts/release.sh major
# Set specific version
./scripts/release.sh 1.2.35. Verify Publication
Check GitHub Actions
Go to "Actions" tab in your repository
Verify the "Publish to PyPI" workflow completed successfully
Verify PyPI Package
Visit: https://pypi.org/project/takanarishimbo-ros2-exec-mcp/
Or run:
pip show takanarishimbo-ros2-exec-mcp
Release Process Flow
release.shscript updates version in all filesCreates git commit and tag
Pushes to GitHub
GitHub Actions workflow triggers on new tag
Workflow uses OIDC to authenticate with PyPI (no tokens needed!)
Workflow builds project and publishes to PyPI
Package becomes available globally via
pip installoruvx
Code Quality
Uses ruff for linting and formatting:
uv run ruff check
uv run ruff check --fix
uv run ruff formatProject Structure
ros2-exec-mcp/
├── src/
│ ├── __init__.py
│ ├── __main__.py
│ └── server.py
├── pyproject.toml
├── uv.lock
├── .github/
│ └── workflows/
│ └── pypi-publish.yml
├── scripts/
│ └── release.sh
├── docs/
│ ├── README.md
│ └── README_ja.md
└── .gitignoreLicense
MIT
This server cannot be installed
Resources
Unclaimed servers have limited discoverability.
Looking for Admin?
If you are the server author, to access and configure the admin panel.
Latest Blog Posts
MCP directory API
We provide all the information about MCP servers via our MCP API.
curl -X GET 'https://glama.ai/api/mcp/v1/servers/TakanariShimbo/ros2-exec-mcp'
If you have feedback or need assistance with the MCP directory API, please join our Discord server