MuJoCo MCP Server (Rongxuan-Zhou/mujoco-mcp-server) is an MCP server listed on the M8ven Trust Index. It scores 54 out of 100, grade D. It declares 130 tools. No publisher has claimed this listing.
Exposes MuJoCo physics simulation to AI assistants via 65 MCP tools, enabling natural language control of robotics simulation, trajectory optimization, contact analysis, and video export.
Caution. Specific findings reduced this grade. They are listed on the page. Grades reflect the full trust pyramid: code, verification depth, and reputation. New projects cap at C until adoption is earned.
How we verified
Verified is a snapshot. Live keeps it current, and builds your track record.
⚡ Connect GitHub → continuous verification on every pushwhy connect →Who stands behind it
Rongxuan-Zhou
Source: Glama
Claim it to get a verified publisher badge, a free copy of our full audit findings, and direct contact for any high-priority issues we find. Or connect your repo for our deepest verification, Live Monitored: read-only, revoke anytime. What we access →
Install from
The grade above is for the source repository. Registries can serve a different version, so we mark the ones we were not able to read.
These names and descriptions are the publisher's own, read from the source code. We print them as written. Our assessment is the findings above, not this list.
analyze_contactsActive contact pairs: geom names, positions, forces, penetration depth.
compute_jacobianEnd-effector Jacobian (6×nv), SVD, manipulability, condition number.
compute_derivativesLinearized discrete-time dynamics: x_{t+1} ≈ A x_t + B u_t.
read_sensorsRead current sensor values by name, or all sensors if no names given.
analyze_energyCurrent potential energy, kinetic energy, and total mechanical energy.
analyze_forcesJoint-space force decomposition: applied, constraint, passive, bias, actuator.
run_sweepParallel parameter sweep: run one experiment per value, return statistics.
create_controllerCreate a PID+trajectory controller for a robot in a sim slot.
plan_trajectoryPlan a smooth joint-space trajectory and store it on the slot's controller.
step_controllerExecute N physics steps with PID+trajectory-tracking control.
get_controller_stateGet controller state: current qpos, target, error, trajectory status.
coordinator_add_robotRegister a robot in the multi-robot coordinator.
coordinator_get_statusGet multi-robot coordinator system status.
coordinator_check_collisionsRun pairwise collision detection across all registered robots.
coordinator_assign_taskAssign a coordinated task to a set of robots.
validate_mjcfPre-load static validation of MJCF XML. Does NOT require a loaded sim slot.
model_summaryCompact structural overview of a loaded model.
suggest_contact_paramsAnalyse contact solver configuration and recommend adjustments.
diagnose_instabilityRun a short simulation window and detect numerical instability signals.
export_csvExport recorded trajectory to a CSV file.
plot_dataRead a CSV file and return a matplotlib plot as an inline PNG image.
export_state_logExport full-state CSV with selectable columns from recorded trajectory.
plot_trajectoryPlot phase portrait or 3D body trajectory from a state log CSV.
solve_ikSolve inverse kinematics using Damped Least Squares (DLS).
export_videoExport recorded trajectory as MP4 or GIF video.
list_menagerie_modelsList available MuJoCo Menagerie robot models by category.
validate_menagerie_modelDownload and validate a Menagerie model. Returns body/joint/actuator counts.
load_menagerie_modelDownload, resolve XML includes, and load a Menagerie model into a sim slot.
server_diagnosticsReturn server health info: MuJoCo version, GL backend, loaded slots, env config.
modify_modelModify compiled MjModel fields in-place via numpy writes. No recompilation needed.
reload_from_xmlFull model reload from XML string. Use for structural changes (add/remove bodies/joints).
optimize_ilqrIterative Linear Quadratic Regulator (iLQR) trajectory optimization.
optimize_mppiModel Predictive Path Integral (MPPI) trajectory optimization.
render_snapshotRender the current simulation state as a PNG image.
render_depthRender a depth map as a grayscale PNG image.
create_rl_envCreate a Gymnasium RL environment wrapping a sim slot's model.
rl_stepExecute one RL environment step.
apply_perturbationApply an external force/torque pulse to a body and observe recovery.
stability_analysisCharacterise stability margin by sweeping force magnitudes and directions.
randomize_dynamicsSample N physics parameter sets from distributions and evaluate robustness.
configure_sensor_fusionConfigure sensor fusion for a robot in the simulation.
get_fused_stateGet fused sensor state from the simulation.
sim_loadLoad a MuJoCo MJCF model into a named simulation slot.
sim_stepAdvance physics simulation by n_steps timesteps (max 100 000 per call).
sim_forwardRecompute derived quantities (positions, forces, contacts) without advancing time.
sim_resetReset simulation to t=0 with default qpos/qvel.
sim_get_stateRead current simulation state: time, qpos, qvel, ctrl.
sim_set_stateWrite simulation state. Calls mj_forward automatically after changes.
sim_recordControl trajectory recording. action: 'start' | 'stop' | 'clear'.
sim_listList all loaded simulation slots with their status.
scene_mapReturn a hierarchical map of all bodies in the scene with world positions.
body_aabbCompute axis-aligned bounding box (AABB) of a body in world coordinates.
surface_anchorGet world coordinates of a specific point on a body's surface.
compute_placementCompute the world position to place an object on a body's surface.
viewer_openOpen a live MuJoCo viewer window tied to a simulation slot.
viewer_syncManually push the current simulation state to the viewer window.
viewer_closeClose the live viewer window for a simulation slot.
analyze_sceneAnalyze the current simulation scene using Gemini 2.5 Pro vision.
compare_scenesCompare two simulation scenes using Gemini vision.
track_objectTrack a body's trajectory and analyze its motion using Gemini vision.
render_figure_stripRender frames at specified timestamps from a recorded trajectory.
run_and_analyzeRun simulation and return a time-series + sparse keyframe images.
debug_contactsRun simulation with event-triggered contact capture.
evaluate_trajectoryReplay an external trajectory and check physical plausibility.
compare_trajectoriesCompare recorded trajectories from two simulation slots.
MUJOCO_MCP_RENDER_WIDTH640 Render width in pixelsMUJOCO_MCP_RENDER_HEIGHT480 Render height in pixelsMUJOCO_MCP_MAX_WORKERS8 Worker processes for run_sweepMUJOCO_GL"env": { "": "egl" }MUJOCO_MCP_NO_RENDER0 Set 1 to skip GL init entirelyDISPLAYWAYLAND_DISPLAYMJV_DISPLAY_OVERRIDEMUJOCO_MCP_VISION_JPEG_QUALITYGEMINI_API_KEYexport =your_keyGEMINI_VISION_MODELgemini-2.5-pro Override Gemini modelTool annotations
No tools have read-only/destructive annotations
Add readOnlyHint or destructiveHint annotations to every tool so hosts can warn users before invoking.
All four hints declared on every tool
130/130 tools missing one or more hints — analyze_contacts (missing: readOnlyHint, destructiveHint, idempotentHint, openWorldHint); analyze_contacts (missing: readOnlyHint, destructiveHint, idempotentHint, openWorldHint); compute_jacobian (missing: readOnlyHint, destructiveHint, idempotentHint, openWorldHint), +127 more. OpenAI's directory rejects tools where any of the four hints are missing or non-boolean.
For every tool, set all four hints (readOnlyHint, destructiveHint, idempotentHint, openWorldHint) to explicit true/false values that match the handler’s actual behaviour.
Descriptions match behaviour
2 tools describe read intent but their handlers mutate — plot_data (line 159: with open(output_path, "wb") as f:); plot_data (line 159: with open(output_path, "wb") as f:)
Rename the tool, rewrite the description, or move the side-effect into a separate clearly-named tool.
Tool inputs are validated
122/130 tool handlers declare input schemas (94%)
Declare an inputSchema with zod/joi/yup on every tool definition.
Tool handlers catch errors
Only 22/130 tool handlers wrap calls in try/catch (17%)
Wrap each tool handler body in try/catch and return a structured error response.
Tests exist
No test files found
Add tests that exercise each declared tool.
Tool description accuracy
plot_data: description implies read-only but handler writes/deletes/executes; plot_data: description implies read-only but handler writes/deletes/executes
Update tool descriptions to accurately reflect all capabilities — especially write, delete, or execute operations.
Claim the listing to review these findings one by one and send us a correction where you disagree, straight to the team. Claiming also means we tell you when the grade moves, and reach you first if we find anything urgent.
[](https://m8ven.ai/mcp/rongxuan-zhou/mujoco-mcp-server)?variant=verified from the URL.Vetting this one by hand? Tool Check is an MCP that scores other MCPs. Add it once and ask Claude, ChatGPT, or any MCP client to grade a server, surface CVEs, check the publisher, and suggest safer alternatives — before you install.
https://m8ven.ai/api/mcp/tool-check