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.

D
Caution
54/100

MuJoCo MCP Server

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

⚡ Live Monitored: not connected

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

Is this your MCP?

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.

// key findings
⚠️
Tool descriptions don’t match what handlers do
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:)
No credential exfiltration, no sensitive file access, no obfuscation
Static analysis found nothing flowing your secrets to unexpected places.
Open source with a license and README
Anyone can audit the code, the license is declared, and the publisher documents what it does.
🔐
You'll be asked for 1 credential: GEMINI_API_KEY
These are read from process.env at runtime. Make sure you trust where they’ll be sent.
// tools this server exposes65 tools

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_contacts

Active contact pairs: geom names, positions, forces, penetration depth.

compute_jacobian

End-effector Jacobian (6×nv), SVD, manipulability, condition number.

compute_derivatives

Linearized discrete-time dynamics: x_{t+1} ≈ A x_t + B u_t.

read_sensors

Read current sensor values by name, or all sensors if no names given.

analyze_energy

Current potential energy, kinetic energy, and total mechanical energy.

analyze_forces

Joint-space force decomposition: applied, constraint, passive, bias, actuator.

run_sweep

Parallel parameter sweep: run one experiment per value, return statistics.

create_controller

Create a PID+trajectory controller for a robot in a sim slot.

plan_trajectory

Plan a smooth joint-space trajectory and store it on the slot's controller.

step_controller

Execute N physics steps with PID+trajectory-tracking control.

get_controller_state

Get controller state: current qpos, target, error, trajectory status.

coordinator_add_robot

Register a robot in the multi-robot coordinator.

coordinator_get_status

Get multi-robot coordinator system status.

coordinator_check_collisions

Run pairwise collision detection across all registered robots.

coordinator_assign_task

Assign a coordinated task to a set of robots.

validate_mjcf

Pre-load static validation of MJCF XML. Does NOT require a loaded sim slot.

model_summary

Compact structural overview of a loaded model.

suggest_contact_params

Analyse contact solver configuration and recommend adjustments.

diagnose_instability

Run a short simulation window and detect numerical instability signals.

export_csv

Export recorded trajectory to a CSV file.

plot_data

Read a CSV file and return a matplotlib plot as an inline PNG image.

export_state_log

Export full-state CSV with selectable columns from recorded trajectory.

plot_trajectory

Plot phase portrait or 3D body trajectory from a state log CSV.

solve_ik

Solve inverse kinematics using Damped Least Squares (DLS).

export_video

Export recorded trajectory as MP4 or GIF video.

list_menagerie_models

List available MuJoCo Menagerie robot models by category.

validate_menagerie_model

Download and validate a Menagerie model. Returns body/joint/actuator counts.

load_menagerie_model

Download, resolve XML includes, and load a Menagerie model into a sim slot.

server_diagnostics

Return server health info: MuJoCo version, GL backend, loaded slots, env config.

modify_model

Modify compiled MjModel fields in-place via numpy writes. No recompilation needed.

reload_from_xml

Full model reload from XML string. Use for structural changes (add/remove bodies/joints).

optimize_ilqr

Iterative Linear Quadratic Regulator (iLQR) trajectory optimization.

optimize_mppi

Model Predictive Path Integral (MPPI) trajectory optimization.

render_snapshot

Render the current simulation state as a PNG image.

render_depth

Render a depth map as a grayscale PNG image.

create_rl_env

Create a Gymnasium RL environment wrapping a sim slot's model.

rl_step

Execute one RL environment step.

apply_perturbation

Apply an external force/torque pulse to a body and observe recovery.

stability_analysis

Characterise stability margin by sweeping force magnitudes and directions.

randomize_dynamics

Sample N physics parameter sets from distributions and evaluate robustness.

configure_sensor_fusion

Configure sensor fusion for a robot in the simulation.

get_fused_state

Get fused sensor state from the simulation.

sim_load

Load a MuJoCo MJCF model into a named simulation slot.

sim_step

Advance physics simulation by n_steps timesteps (max 100 000 per call).

sim_forward

Recompute derived quantities (positions, forces, contacts) without advancing time.

sim_reset

Reset simulation to t=0 with default qpos/qvel.

sim_get_state

Read current simulation state: time, qpos, qvel, ctrl.

sim_set_state

Write simulation state. Calls mj_forward automatically after changes.

sim_record

Control trajectory recording. action: 'start' | 'stop' | 'clear'.

sim_list

List all loaded simulation slots with their status.

scene_map

Return a hierarchical map of all bodies in the scene with world positions.

body_aabb

Compute axis-aligned bounding box (AABB) of a body in world coordinates.

surface_anchor

Get world coordinates of a specific point on a body's surface.

compute_placement

Compute the world position to place an object on a body's surface.

viewer_open

Open a live MuJoCo viewer window tied to a simulation slot.

viewer_sync

Manually push the current simulation state to the viewer window.

viewer_close

Close the live viewer window for a simulation slot.

analyze_scene

Analyze the current simulation scene using Gemini 2.5 Pro vision.

compare_scenes

Compare two simulation scenes using Gemini vision.

track_object

Track a body's trajectory and analyze its motion using Gemini vision.

render_figure_strip

Render frames at specified timestamps from a recorded trajectory.

run_and_analyze

Run simulation and return a time-series + sparse keyframe images.

debug_contacts

Run simulation with event-triggered contact capture.

evaluate_trajectory

Replay an external trajectory and check physical plausibility.

compare_trajectories

Compare recorded trajectories from two simulation slots.

// environment variables
To run this server yourself, you supply these values. They go in your own MCP client configuration and stay on your machine. The secret label means the value is sensitive, not that the server mishandles it.
configMUJOCO_MCP_RENDER_WIDTH640 Render width in pixels
configMUJOCO_MCP_RENDER_HEIGHT480 Render height in pixels
configMUJOCO_MCP_MAX_WORKERS8 Worker processes for run_sweep
configMUJOCO_GL"env": { "": "egl" }
configMUJOCO_MCP_NO_RENDER0 Set 1 to skip GL init entirely
configDISPLAY
configWAYLAND_DISPLAY
configMJV_DISPLAY_OVERRIDE
configMUJOCO_MCP_VISION_JPEG_QUALITY
🔐 secretGEMINI_API_KEYexport =your_key
configGEMINI_VISION_MODELgemini-2.5-pro Override Gemini model
// quality suggestions

Tool 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.

// full audit trail
The findings above are the summary. The full trail, every check we ran, each deduction, the network hosts observed and the dependency advisories, goes to verified publishers, along with an alert whenever a new one lands. Verified publishers can also review each finding and dispute it in one click. Publisher corrections have sharpened several of our checks this month, because the maintainer knows the codebase better than any scanner.
// improvement guidance — verified publishers only
We have 7 concrete improvements we can share with the publisher of this MCP. Each comes with specific guidance to raise the trust score.
// embed badge in your README
[![M8ven Verified](https://m8ven.ai/badge/mcp/rongxuan-zhou/mujoco-mcp-server?variant=verified)](https://m8ven.ai/mcp/rongxuan-zhou/mujoco-mcp-server)
Shows verification status without the grade. Want the grade badge instead? Remove ?variant=verified from the URL.
commit: ce9bed80ec3698d7b778230abc21f2228a3ce94b
code hash: 7371e1d8d829e52f32967c103f93a95969ea9ab795f7cd784a515751f353c2c4
view raw JSON →
Check MCPs from inside your assistant
Tool Check · MCP

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
check_toolsearch_toolscompare_toolsrecommend_alternativescheck_publisherreport_concern
How to add it →Free · no account needed · works in any MCP client