analyze_robot_data
Analyses a robot's recorded data statistically or for trends, anomalies or performance.
Read and drive Universal Robots arms over the network — state, joint and TCP moves, URScript, and multi-robot tasks.
LABSCO SUMMARY
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.
connect_ur, disconnect_ur, get_serial_number, get_robot_model, get_ur_software_versionget_robot_mode, get_safety_mode, get_program_state, get_actual_tcp_pose, get_actual_joint_poseget_actual_robot_voltage, get_actual_robot_current, get_actual_joint_voltage, get_actual_joint_current, get_joint_temperaturesget_output_int_register, get_output_double_register, get_output_bit_registermovej 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 movesdraw_circle, draw_square, draw_rectangle, in the plane you chooseget_programs lists the .urp files over SSH, send_program_script sends URScript to runsetup_multi_robot_coordination, create_collaborative_task, execute_collaborative_taskgenerate_bezier_path from control points, optimize_trajectory for time, energy or smoothness, start_data_recording, analyze_robot_data, generate_robot_report, compare_robots_performanceA Universal Robots arm reachable on the network, and its IP address — every tool takes one, and most need connect_ur first. Python 3.12 (the PyPI package accepts >=3.12,<3.13), 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
USE CASES
Read its running mode, safety mode and which program is loaded and executing.
Pull the per-joint temperatures and currents and compare them across the arm.
Read the current TCP pose, then move a set distance along one axis.
Generate the curve from control points, optimise it for smoothness, then send the joint moves.
Record the run, analyse it for anomalies or trend, then produce the report file.
Counted once with only startup setup. Other versions, modes or optional credentials may expose a different list.
analyze_robot_dataAnalyses a robot's recorded data statistically or for trends, anomalies or performance.
compare_robots_performanceCompares several robots on chosen metric columns over a given time range.
connect_urConnects to the Universal Robots arm at the IP address given.
create_collaborative_taskCreates a multi-robot collaborative task with a name and an operation assigned to each robot.
disconnect_urDisconnects from the robot at the IP address given.
draw_circleDraws a circle of a given radius in metres around a centre TCP pose, in a plane either perpendicular to the base or horizontal.
draw_rectangleDraws a rectangle of a given width and height in metres from a starting TCP pose, in a horizontal or vertical plane.
draw_squareDraws a square of a given side length in metres from a starting TCP pose, in a horizontal or vertical plane.
execute_collaborative_taskExecutes a collaborative task by its ID and returns the result.
generate_bezier_pathGenerates a Bézier curve path from a list of control points given as positions and orientations.
generate_robot_reportGenerates an operating report for a robot between two timestamps and writes it to the given path.
get_actual_joint_currentReturns each joint's current in amperes.
get_actual_joint_poseReturns the current joint angles of the robot at the given IP address.
get_actual_joint_voltageReturns each joint's voltage in volts.
get_actual_robot_currentReturns the robot's current in amperes.
get_actual_robot_voltageReturns the robot's voltage in volts.
get_actual_tcp_poseReturns the current TCP position of the robot at the given IP address.
get_joint_temperaturesReturns each joint's temperature in degrees Celsius.
get_output_bit_registerReturns the value of a boolean output register by index, where the index runs from 0 to 23.
get_output_double_registerReturns the value of a double output register by index, where the index runs from 0 to 23.
get_output_int_registerReturns the value of an integer output register by index, where the index runs from 0 to 23.
get_program_stateReturns the execution state of the program on the robot at the given IP address.
get_programsLists the programs stored on the robot, using an SSH account and password.
get_robot_modeReturns the operating state of the robot at the given IP address.
get_robot_modelReturns the model of the robot at the given IP address.
get_safety_modeReturns the safety mode of the robot at the given IP address.
get_serial_numberReturns the serial number of the robot at the given IP address.
get_timeReturns how long the robot at the given IP address has been powered on, in seconds.
get_ur_software_versionReturns the software version running on the robot at the given IP address.
movejMoves every joint to the specified angles in radians, with acceleration in metres per second squared, speed in metres per second, a duration in seconds and a blend radius.
movelMoves the TCP in a straight line to the specified pose, with acceleration in metres per second squared, speed in metres per second and a duration in seconds.
movel_xMoves the TCP a given distance in metres along the X axis.
movel_yMoves the TCP a given distance in metres along the Y axis.
movel_zMoves the TCP a given distance in metres along the Z axis.
optimize_trajectoryOptimises a trajectory through given waypoints for time, energy or smoothness.
send_program_scriptSends script content to the robot at the given IP address.
setup_multi_robot_coordinationSets up a coordinated working environment for a list of robot IDs, in sequential or parallel collaboration mode.
start_data_recordingStarts recording a robot's data for the chosen types, such as robot state, joint data and TCP data.
stop_data_recordingStops a recording session by its session ID and returns the stop status.
BEFORE YOU INSTALL
39 tools when we connected. The 9 trajectory, recording, analysis and multi-robot tools need their extension modules initialized, and most others need a successful connect_ur first.
All 3 documented clients run the server on your machine.
CONTEXT COST
Rated by the size of the 39 tool definitions that ride along on every turn, not by how many there are
INSTALLATION
git clone https://gitee.com/nonead/Nonead-Universal-Robots-MCP.git
cd Nonead-Universal-Robots-MCP
pip install -r requirements.txtuvx nonead-universal-robots-mcp{
"mcpServers": {
"nUR_MCP_SERVER": {
"command": "uvx",
"args": [
"nonead-universal-robots-mcp"
]
}
}
}{
"mcpServers": {
"Nonead-Universal-Robots-MCP": {
"name": "Nonead-Universal-Robots-MCP",
"type": "stdio",
"isActive": true,
"registryUrl": "https://pypi.tuna.tsinghua.edu.cn/simple",
"timeout": "600",
"command": "uvx",
"args": [
"nonead-universal-robots-mcp"
]
}
}
}