State, electrical readings and per-joint temperatures make this useful for watching an arm without touching it, and the register reads let an agent follow a running program's progress. The motion tools move a real machine: `movej`, `movel` and `send_program_script` execute on the arm, and the vendor requires it stay within sight with the work area cleared first.
An MCP server for Universal Robots collaborative arms, from Nonead. Every tool takes the robot's IP address, so one server can address several arms: it reads state, sends motion commands and URScript, and records and analyses run data.
- Connection and identity: `connect_ur`, `disconnect_ur`, `get_serial_number`, `get_robot_model`, `get_ur_software_version`
- Live state — `get_robot_mode`, `get_safety_mode`, `get_program_state`, `get_actual_tcp_pose`, `get_actual_joint_pose`
- Electrical and thermal readings for condition monitoring: `get_actual_robot_voltage`, `get_actual_robot_current`, `get_actual_joint_voltage`, `get_actual_joint_current`, `get_joint_temperatures`
- Registers read back by index: `get_output_int_register`, `get_output_double_register`, `get_output_bit_register`
- Motion: `movej` in joint space and `movel` in a straight line, each taking acceleration, speed, duration and blend radius, plus `movel_x`, `movel_y` and `movel_z` for relative moves
- Shape primitives that write the path for you — `draw_circle`, `draw_square`, `draw_rectangle`, in the plane you choose
- Programs on the controller: `get_programs` lists the `.urp` files over SSH, `send_program_script` sends URScript to run
- Several arms at once — `setup_multi_robot_coordination`, `create_collaborative_task`, `execute_collaborative_task`
- Paths and data: `generate_bezier_path` from control points, `optimize_trajectory` for time, energy or smoothness, `start_data_recording`, `analyze_robot_data`, `generate_robot_report`, `compare_robots_performance`
A Universal Robots arm reachable on the network, and its IP address — every tool takes one, and most need `connect_ur` first. Python 3.11 or newer, pip 25.1 or newer, uv 0.6.14 or newer and bun 1.2.8 or newer; the package is `nonead-universal-robots-mcp`, launched over stdio through `uvx`. `get_programs` additionally needs the controller's SSH username and password. The trajectory, recording, analysis and multi-robot tools depend on extension modules that must initialise before they answer. The vendor's safety terms are binding: the arm stays in view while it runs, and the work area is cleared before it does.
One command — uvx nonead-universal-robots-mcp
