ros2_manipulator_mcp
Allows interaction with ROS 2 manipulators, providing tools for discovering manipulators and planning groups, reading robot state and end-effector pose, computing forward and inverse kinematics, planning joint, pose, and Cartesian trajectories, validating motion plans, and managing MoveIt planning-scene primitive collision objects.
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_manipulator_mcpPlan a Cartesian path to move the end effector 10 cm along the x-axis."
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_manipulator_mcp
ros2_manipulator_mcp is a backend-neutral Model Context Protocol server for
inspecting ROS 2 manipulators, computing kinematics, planning and validating
motion, managing primitive MoveIt planning-scene objects, and executing
application-owned plans when execution has been explicitly enabled. It exposes
a small typed manipulation API rather than arbitrary ROS, controller, or shell
access.
Version 0.2.0 adds bounded execution, status, and cancellation workflows. The
shipped default remains fail-closed: execution.enabled = false.
Architecture
MCP client
-> stdio MCP server
-> application service
-> backend-neutral domain and safety policy
-> application ports
-> ROS 2 Jazzy / MoveIt adapter
-> MoveIt 2 -> ros2_control -> manipulator hardware or mock hardwareMoveIt is replaceable backend infrastructure, not the Manipulator domain.
Domain, application, and safety modules contain no ROS, MoveIt, or MCP types.
ROS messages and version-specific Jazzy behavior, including execution stopping,
remain behind the adapter boundary. Controller and hardware lifecycle management
belong to ros2_control_mcp, not this project's public MCP surface.
Related MCP server: nrs_llm
Supported baseline
The verified v0.2.0 baseline is:
Ubuntu 24.04.4 LTS and Python 3.12+
ROS 2 Jazzy,
rclpy7.1.11MoveIt 2.12.4 and
moveit_msgs2.6.0ros2_control4.45.2 andjoint_trajectory_controller4.40.1ROBOTIS OpenMANIPULATOR-X packages 4.1.3 and
dynamixel_hardware_interface1.5.2MCP Specification 2026-07-28, MCP Python SDK 2.0.0, and
mcp-types2.0.0
The MCP server exposes stdio only.
MCP surface
The public v0.2.0 surface contains 22 Tools, 7 static Resources, 4 Resource Templates, and 7 Prompts.
The Tools cover discovery; state, pose, FK, IK, and validity; joint, pose, and Cartesian planning; application-owned plan inspection, validation, and discard; primitive planning-scene operations; and these three execution operations:
execute_motion_plan(plan_id)get_execution_status(execution_id)cancel_execution(execution_id)
Execution context is also available at
manipulator://executions/{execution_id}, and
diagnose_execution_failure(execution_id) provides a non-mutating diagnostic
prompt. No raw trajectory, controller name, direct FollowJointTrajectory,
arbitrary ROS service/action/topic, controller-management, or shell interface is
exposed.
Safety and execution contract
Planning, scene mutation, and execution pass through deterministic application policy and validation. Stored plans are process-local, immutable, and application-owned. Before execution the service reserves the plan, requires a fresh matching start state, enforces start tolerance and exact scene revision, and permits only one active execution per manipulator. Backend acceptance consumes the plan permanently; a failure before acceptance releases its reservation. Ambiguous cancellation or unsafe timeout outcomes quarantine the backend until process/adapter restart.
These controls are application safeguards, not certified physical safety. In particular:
physical execution is opt-in and disabled in the shipped configuration;
cancel_executionis not an emergency stop or machinery-safety function;project
CANCELLEDrequires causal MoveItPREEMPTEDand measured-state stabilization evidence, but does not certify physical standstill;the physical power cutoff remains the emergency mechanism;
the
/trajectory_execution_eventstop mechanism is specific to the audited MoveIt 2.12.4 baseline and must be reverified for every newly supported MoveIt version.
OpenMANIPULATOR-X reference and verification
The generic API is manipulator-independent. The shipped reference profile uses
the official ROBOTIS 4.1.3 model: world planning frame, four-joint arm
group, gripper group, and end_effector_link. Only the independently
commandable gripper_left_joint is exposed in the gripper group;
gripper_right_joint remains its URDF mimic joint.
The complete MCP-to-MoveIt path is verified on official mock hardware. Phase 20 also verified real startup, Dynamixel IDs 11-15, controller and torque lifecycle, real execution and separately operator-visible movement for joints 1-4 and ID 15, orderly Torque OFF, and serial-device release. See Phase 20 for the evidence matrix.
Accepted hardware limitations are: real-hardware cancellation was deliberately
not physically release-verified; the tested ID 15 mechanism has a mechanical or
encoder-reference mismatch relative to the official model; one historical ID
12 shutdown has an unknown initiating cause; and FastSyncRead can return -3001
before the official driver successfully falls back to normal SyncRead. Do not
change URDF/SRDF limits or offsets to mask the ID 15 mechanical-reference issue.
Installation
Install the ROS dependencies from the ROS 2 Jazzy apt repository:
sudo apt-get install \
ros-jazzy-moveit \
ros-jazzy-open-manipulator-bringup \
ros-jazzy-open-manipulator-moveit-configThen create the isolated Python environment from the lock file:
cd /path/to/ros2_manipulator_mcp
uv sync --frozenConfiguration and startup
The packaged configuration is
src/ros2_manipulator_mcp/config/default.toml. Select a deployment-specific
copy with ROS2_MANIPULATOR_MCP_CONFIG. The default selects the
ros2_jazzy_moveit backend and open_manipulator_x profile and has:
[execution]
enabled = falseFor planning-only use, start the desired ROS 2/MoveIt graph and then start the stdio server from a ROS-sourced shell. The verified mock-hardware example is:
export ROS_DOMAIN_ID=66
ros2 launch open_manipulator_bringup open_manipulator_x.launch.py \
use_mock_hardware:=true init_position:=false start_rviz:=falseexport ROS_DOMAIN_ID=66
ros2 launch open_manipulator_moveit_config open_manipulator_x_moveit.launch.py \
start_rviz:=falsesource /opt/ros/jazzy/setup.bash
export ROS_DOMAIN_ID=66
uv run ros2-manipulator-mcpThe server writes MCP protocol messages to stdout. A client that does not
inherit a ROS-sourced environment should use a wrapper that sources Jazzy and
then execs .venv/bin/ros2-manipulator-mcp.
To enable execution intentionally, make a reviewed deployment-specific copy of
the configuration, set [execution] enabled = true, point
ROS2_MANIPULATOR_MCP_CONFIG at that copy, and restart the server. This switch
does not authorize a particular motion or make the system safe: operators must
separately establish hardware readiness, clearance, observation, and immediate
physical cutoff access. Never enable execution merely to inspect or plan.
Planning and execution workflow
A bounded planning workflow is:
Inspect overview, health, safety, current-state, group, and scene Resources.
Validate the fresh current state and select a returned planning group.
Plan a joint, pose, or Cartesian goal with conservative scaling.
Inspect the opaque
plan_idand callvalidate_motion_plan.Discard the plan if it will not be executed.
When execution is explicitly enabled and separately authorized:
Reconfirm current physical and backend readiness.
Call
execute_motion_plan(plan_id)once; never submit a raw trajectory.Observe
get_execution_statusor the execution Resource to a terminal state.Treat telemetry, controller result, and physical observation as separate evidence.
Use
cancel_executiononly as an application stop request, never as an emergency-stop substitute.
Testing
Run the normal graph-independent regression suite with:
uv run pytest -qLive integration tests are opt-in and require the documented official
OpenMANIPULATOR-X mock graph. Each integration module documents its required
ROS2_MANIPULATOR_MCP_RUN_* environment gate. Phase 20 hardware results are
documented evidence and are not part of routine regression.
Known scope limits
v0.2.0 provides one production composition profile, one stdio transport, primitive collision objects, and process-local plans and executions. It does not provide attach/detach, meshes, Servo/jogging, Hybrid Planning, MoveIt Task Constructor, perception, navigation, task orchestration, controller or hardware management, persistent plan storage, authentication, or certified safety.
The development history and exact verification evidence are indexed in docs/README_PHASES.md.
License
Licensed under the Apache License 2.0. See NOTICE for copyright and attribution information.
This server cannot be installed
Maintenance
Resources
Unclaimed servers have limited discoverability.
Looking for Admin?
If you are the server author, to access and configure the admin panel.
Related MCP Connectors
MCP server for generating rough-draft project plans from natural-language prompts.
An authenticated remote MCP server for user-owned devices and one-shot capability invocation.
MCP server for progressive tool usage at any scale (see https://klavis.ai)
MCP server for mandates, delegation, policy-gated execution, credential grants, and audit.
Related MCP Servers
- AlicenseNot gradedqualityAmaintenancePublic implementation of MCP for ROS 2 enabling to interact with system visible various robots, capable of: List available topics List available services Call service Subscribe topic to get messages Publish message on topic and more86Mozilla Public 2.0
- AlicenseNot gradedqualityDmaintenanceAn MCP server for ROS 2 environments that connects via rosbridge WebSocket, enabling topic/service introspection, publish/subscribe, service calls, robot connectivity checks, and polishing pipeline operations.Apache 2.0
- AlicenseNot gradedqualityBmaintenanceMCP server for AI agents to inspect and control ROS2 graphs, enabling topic listing, node info, service calls, parameter management, and pub/echo without manual ROS2 CLI usage.11MIT
- FlicenseNot gradedqualityCmaintenanceMCP server for controlling a simulated robot arm with vision-based pick-and-place, driven by LLM or manual control.1-