About Ros2 Exec MCP
Ros2 Exec MCP is an MCP server published by TakanariShimbo in the Developer Tools category: an MCP server that executes ROS 2 (ros2) CLI commands.
Six months or more without a commit doesn't mean the server is broken, but check the open issues before depending on it in production.
Install
git clone https://github.com/TakanariShimbo/ros2-exec-mcpThis server has no ConduID identity, so agent calls to it are not receipted. Pin the version you install and review the source before granting it credentials.
Ask AI
Ask AI about Ros2 Exec MCP
Powered by Claude · Grounded in docs
Security checks
- ✓README presentThe repository ships documentation.
- !Scoped permissionsDoesn't declare a permission scope. Assume it can do anything its process can.
4 checks have not been run yet.
Releases
README
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-mcp
MCP 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 sync -
Run the server:
uv run takanarishimbo-ros2-exec-mcp -
Test 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-mcp - Workflow name:
pypi-publish.yml - Environment:
pypi(optional but recommended)
- Owner:
- 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:
pypi - Configure 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.3
5. 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 files- Creates 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 format
Project 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
└── .gitignore
License
MIT
README copy captured when this server was indexed; it may lag the repository. The original is authoritative.