Skip to main content
Glama
nashirabbash

CoppeliaSim MCP Server

by nashirabbash

CoppeliaSim MCP Server

Build, control, and inspect CoppeliaSim scenes from AI assistants via MCP.

License: MIT

Connect an MCP client to CoppeliaSim's ZeroMQ Remote API. Run Python with coppelia_step, or use structured tools for simulation, motion, sensors, scene management, and ROS 2. The scene persists between calls, so an agent can inspect and refine it without recreating everything.

Quick start · MCP setup · Tools · CLI · Troubleshooting

What you can do

  • Create shapes, load bundled robot models by alias, and control simulation with CoppeliaSim's sim API.

  • Inspect the current floor and scene hierarchy before adding objects.

  • Capture top-down and isometric snapshots to verify scene placement.

  • Use the same runner directly from the command line or through an MCP client.

  • Solve inverse kinematics, plan joint paths, and execute monitored trajectories.

  • Read typed sensors and record synchronized datasets with bounded sample counts.

  • Run repeatable scene-based experiments and compare physics-engine outcomes.

  • Import robot models, meshes, and floor plans; exchange ROS 2 messages, services, and actions.

Related MCP server: MuJoCo MCP Server

Quick start

Requirements

  • Python 3.10 or newer and CoppeliaSim with its ZeroMQ Remote API addon available on port 23000.

  • A local CoppeliaSim installation with the bundled Python client and robot models. Set COPPELIASIM_ROOT explicitly: the Python connection module currently defaults to /home/myarchlinux/.local/opt/coppeliaSim, while the shell launcher defaults to $HOME/.local/opt/coppeliaSim.

  • An MCP-compatible client for agent use; the command-line runner works without one.

  • Docker Engine is only needed for the optional ROS 2 Humble integration.

1. Install

git clone https://github.com/nashirabbash/coppeliasim-mcp.git
cd coppeliasim-mcp
bash setup_env.sh
.venv/bin/python -m pip install -e .

setup_env.sh creates .venv and installs runner dependencies; pip install -e . also installs the MCP server dependency.

2. Start CoppeliaSim

Set the path to your CoppeliaSim installation before running the CLI or starting your MCP client:

export COPPELIASIM_ROOT=/path/to/coppeliaSim

Launch the simulator:

bash coppelia_launch.sh

The launcher opens the GUI by default. Use bash coppelia_launch.sh --headless when no GUI is needed.

3. Inspect the current scene

Run a read-only query:

./coppelia_run --code 'print(get_floor_info())'

It prints JSON with success, captured output, floor and scene objects, and snapshot paths when image capture succeeds. Open both snapshot files to check actual placement; success: true only confirms Python code ran, not that geometry or physics is correct. If no simulator is connected, the command reports a connection error instead.

Connect an MCP client

Find the absolute path to this checkout, then replace /absolute/path/to/coppeliasim-mcp below. For omp, add this server to ~/.omp/agent/mcp.json (merge it with existing mcpServers entries):

{
  "mcpServers": {
    "coppeliasim": {
      "type": "stdio",
      "command": "/absolute/path/to/coppeliasim-mcp/.venv/bin/python",
      "args": ["/absolute/path/to/coppeliasim-mcp/coppelia_mcp.py"],
      "enabled": true
    }
  }
}

For Claude Desktop, use its claude_desktop_config.json (~/.config/Claude/ on Linux or ~/Library/Application Support/Claude/ on macOS) with the same command and args under mcpServers; omit type and enabled. Other stdio MCP clients can use the same executable and script paths. Restart your client after editing its configuration.

GUI clients may not inherit shell environment variables. Add "env": {"COPPELIASIM_ROOT": "/path/to/coppeliaSim"} to the server entry when needed. After installation, .venv/bin/coppeliasim-mcp is also available as a stdio server entry point.

Trust boundary: coppelia_step executes Python on the server host with that process's filesystem and network access. It is not a sandbox. Only connect trusted clients and run trusted code. Save scene work before loading scenes, running experiments, or benchmarking physics.

Tools

The server currently registers 18 MCP tools:

Area

Tools

Python execution

coppelia_step

Simulation and recording

coppelia_simulate, coppelia_record_dataset

Scene and asset management

coppelia_catalog, coppelia_scene, coppelia_import_model, coppelia_import_floorplan

Motion

coppelia_health, coppelia_motion, coppelia_trajectory

Observation and experiments

coppelia_sensors, coppelia_mechanism, coppelia_experiments

Signals and physics

coppelia_signals, coppelia_physics_engine, coppelia_physics_benchmark

ROS 2

coppelia_ros2_status, coppelia_ros2

Run Python with coppelia_step

Ask your client to call coppelia_step with Python source in code. Example:

# coppelia_step(code="...")
print(get_floor_info())
print(get_scene_hierarchy())
robot = load_robot('pioneer', [0.0, 0.0, 0.3])
print(sim.getObjectPosition(robot, -1))

Check scene_objects before creating objects; it contains root nodes with recursive children, including every non-system descendant. Each node includes name, unique path, transient handle, object type, is_model, world pos, and children. Handles are valid only for the current scene. If response contains scene_hierarchy_error, do not assume scene is empty.

Parameter

Default

Behavior

code

""

Python executed with sim, client, simIK, simOMPL, solve_ik, plan_joint_path, load_robot, scene helpers, and snapshot helpers. Empty code captures the current scene.

reset

false

Stops a running simulation before executing code; does not clear scene objects.

headless

false

Requests headless mode only if the server needs to launch CoppeliaSim.

diagnostics

null

List of checks, e.g. [{"kind": "collision", "objects": ["/A", "/B"]}]. Other kinds: distance with objects and threshold, or floor_bounds with object.

timeout

30.0

Maximum seconds for user script execution. Expiry interrupts the script and returns a failed result.

Canceling the MCP request terminates the isolated runner process; only the worker is canceled, not the simulator process itself.

Response includes JSON text plus image content for each successful snapshot. Paths remain in the JSON response. Diagnostic results use clear, issue, or unavailable; checks inspect the post-script scene without advancing simulation time. Floor-boundary checks test each transformed object bounding-box corner against detected floor XY bounds. Distance checks always return the measured minimum distance and closest points; threshold only selects issue versus clear.

Execution flow: code errors, successful snapshot capture, and snapshot warnings return different results

View editable execution-flow diagram.

Simulation and scene management

coppelia_simulate advances the simulation in steps and returns sampled JSON state. It runs the simulator with stepping enabled, then leaves stepping off and the simulation running.

Parameter

Default

Behavior

steps

100

Number of steps to run, max 10000.

observe

null

Object paths whose absolute positions are sampled, e.g. ["/PioneerP3DX"].

sensors

null

Proximity sensor paths read each sample; returns detected and distance (null when nothing detected).

sample_every

1

Record a sample every N steps.

until

null

Stop early when a diagnostic becomes issue: { "kind": "distance", "objects": ["/A", "/B"], "threshold": 0.1 } or collision/floor_bounds as in coppelia_step.

export_path

null

Also write the full result JSON to this path.

headless

false

Requests headless mode only if the server launches CoppeliaSim.

Object paths are CoppeliaSim absolute paths. Root objects need a leading slash: /Shape resolves, Shape returns "Object not found". Result includes stopped_by (steps or condition), steps_run, final_time, and samples.

coppelia_catalog searches .ttm models and .ttt scenes under COPPELIASIM_ROOT without contacting the simulator. Parameters: query (space-separated terms, all must match path or alias), kind (all, model, or scene), limit (default 50). Results include kind, name, path, relative, and alias.

coppelia_scene saves or loads a scene. action is save or load; path is the .ttt file. Save requires an existing parent directory. Load stops a running simulation first, then replaces the current scene (unsaved objects are lost).

coppelia_import_model imports existing URDF, SDF, STL, OBJ, or DAE files. Optional position and orientation place every new root; scale applies to meshes. Results include created roots and joint counts. URDF package_root replaces package:// resource prefixes. Imports modify the active scene.

ROS 2 integration

coppelia_ros2_status checks whether CoppeliaSim can load simROS2; it does not start ROS 2 itself. Its shared connection helper may auto-launch CoppeliaSim if no simulator is available. ROS 2 Humble runs in an isolated Docker image, avoiding host package changes. Build and start it with ./coppelia_ros2_container.sh build and ./coppelia_ros2_container.sh start. CoppeliaSim launches in GUI mode by default. Set COPPELIASIM_ROS2_MODE=docker to launch through the headless ROS 2 container, or auto to select that container when its image exists.

coppelia_ros2 accepts operation, name, and interface_type such as std_msgs/msg/String. Prefer absolute ROS names. Operations use Docker with host networking and shared IPC; ROS_DOMAIN_ID defaults to 0. The tool starts the ROS 2 container before running an operation.

Operation

Behavior

publish, echo

Publish one JSON-object payload, or read one message.

capture

Collect messages until count or a time bound. Defaults to 10 messages when neither count nor duration is supplied.

publish_sequence

Publish payloads in order, or repeat one payload using count and rate.

session, closed_loop

Start feedback capture, then publish commands. Optional feedback_topic and feedback_type select the feedback stream.

service_call, action_goal

Send a JSON-object payload with a package/srv/Type or package/action/Type interface.

timeout defaults to 10.0 seconds and accepts up to 120; optional count accepts 1–1000, duration up to 120 seconds, and rate up to 1000 Hz. These are operation/subprocess limits, not a total request deadline: container startup and multi-payload sequences can take longer. session and closed_loop collect feedback but do not compute feedback-driven control; inspect feedback_messages because success only reflects publishing. Captures return message text, not parsed typed JSON.

Floor plans, signals, and physics

coppelia_import_floorplan converts a grayscale image into static cuboid segments. Pass image_path, pixel_size, wall_height, door_height, window_height, and non-overlapping grayscale ranges wall_range, door_range, and window_range as [minimum, maximum]. Pixels outside those ranges are ignored. respondable defaults to true. Inputs are limited to 1,000,000 pixels and 10,000 horizontal segments. This is an MCP image converter, not a wrapper around the CoppeliaSim GUI add-on.

coppelia_signals uses operation="get" or "set", signal_type="integer"|"float"|"string", and name; value is required for writes. A missing signal read returns found=false. Signals are simulator-local; this tool is not a PLC, OPC UA, or Modbus adapter.

coppelia_physics_engine reports and can set the scene's dynamicsEngine [index, version] pair and dynamicsStepSize; settings change only while simulation is stopped. coppelia_physics_benchmark accepts scenes as 2–5 engine-name to .ttt path entries plus identical episodes. Each scene must already be configured for its named engine; labels are caller-supplied and are not checked against scene properties. The tool reloads each scene and runs the same bounded episode definitions; save unsaved scene work first. Results compare task outcomes and elapsed simulation time, not equivalent solver parameters or hardware safety.

Runtime health and typed motion

coppelia_health checks the active ZeroMQ endpoint, simulator version, and whether simIK and simOMPL load. It does not launch CoppeliaSim or alter the scene.

coppelia_motion provides two typed operations:

  • operation="ik" requires base, tip, and target absolute object paths. Optional constraints accepts pose, position, or orientation; method accepts damped_least_squares or pseudo_inverse. A solved result is applied to the scene.

  • operation="plan" requires joints paths and a numeric goal state. Optional collision_pairs contains pairs of object paths; algorithm, max_time, simplify_time, and path_states tune planning. The returned path is not applied to the robot.

Both operations return structured JSON and fail explicitly when plugins or object paths are unavailable.

coppelia_trajectory executes the path returned by coppelia_motion, passed as trajectory, in the same joint order. It interpolates each state over steps_per_waypoint, checks each joint's configured position and max_velocity limits, and requires at least one collision_pairs pair checked after every simulation step.

Required max_velocity contains one positive limit per joint. Optional max_acceleration and max_jerk also take one positive limit per joint; either enables smooth seventh-order interpolation with profile-limit checks. steps_per_waypoint defaults to 10. Limits are checked against the requested trajectory profile, not guaranteed measured actuator motion.

gripper_actions contains { "waypoint": 0, "joint": "/GripperJoint", "position": 0.0, "settle_steps": 5 } entries. grasp requires object, gripper, min_normal_force, hold_until_waypoint, min_lift, max_slip, max_rotation_rad, and wrench_sweep: { "force_n": 0.2, "torque_nm": 0.02, "steps_per_direction": 2 }. The executor checks contact, translation and quaternion rotation relative to the gripper, then applies positive and negative force and torque on all three world axes. Failed contact, slip, lift, collision, or any tested wrench stops simulation. The 12-direction sweep measures only bounded wrench resistance; it is not an analytic force-closure proof or hardware-safety validation. place remains a geometric distance check. Successful execution leaves simulation running.

Live verification on CoppeliaSim 4.10.0: a Panda joint trajectory ran 80 steps toward 0.2 rad and reported 0.19711282 rad. Excess velocity was rejected; an intentional surface collision stopped the simulation (state 0). Both camera captures were inspected and temporary models were removed. This run did not verify gripper manipulation.

P0 live grasp verification first used a synthetic lift fixture, not a commercial finger gripper. A later four-wall dynamic clamp passed a 12-direction sweep at ±0.05 N and ±0.001 N·m; measured translation and rotation stayed below 2.6e-7 m and 4.9e-6 rad. That fixture had no actuated arm or lift, and camera snapshots were black. The sweep does not prove analytic force closure, real-world friction, safe hardware, or successful release. See P0 verification and REA evidence.

Typed sensors and mechanism inspection

coppelia_sensors accepts sensors=[{"path": "/Robot/Camera", "type": "vision_rgb"}]. Supported types: proximity, vision_rgb, vision_depth, force_torque, and point_cloud. RGB uses RGB8 base64; depth returns numeric values in meters with encoding="float32_meters". Point clouds use metric depth and coordinates with +X right, +Y up, and +Z forward; max_points defaults to 4096 and accepts 1–100000. Vision sensor data is refreshed before each read. Sensor paths must match requested CoppeliaSim object types.

coppelia_mechanism(root_path="/Robot") reports descendant joints with type, interval, position, and target, plus sensors. The selected root is the base candidate. Leaf shapes and dummies are end-effector candidates only; the tool does not infer semantic tool frames.

Synchronized dataset recording

coppelia_record_dataset advances simulation and samples typed sensors together with observed object state. Unlike coppelia_simulate, its sensors parameter uses the same typed specifications as coppelia_sensors, not a list of proximity-sensor paths.

Parameter

Default

Behavior

steps

100

Simulation steps, 1–10000.

sensors

null

Typed sensor requests, including RGB, depth, force/torque, and point clouds.

observe

null

Absolute object paths; records positions, plus quaternions and joint positions when available.

sample_every

1

Sample every N steps; also records the final step or triggering condition.

until

null

Stop on a diagnostic issue, using the same condition format as coppelia_simulate.

max_samples

1000

Stop at the sample cap; accepts 1–10000.

stop_on_finish

false

Request simulation stop after recording; otherwise simulation remains running. Stepping is disabled on exit.

export_path

null

Write JSON to a .json path whose parent directory already exists. Existing files are overwritten.

headless

false

Used only when launching CoppeliaSim.

Results contain metadata, summary, and samples; summary.stopped_by is steps, condition, or max_samples. Sampling begins after advancing the first step; there is no step-zero sample.

Example MCP arguments for an existing scene:

{
  "steps": 100,
  "observe": ["/Robot"],
  "sensors": [{"path": "/Robot/Camera", "type": "vision_rgb"}],
  "sample_every": 10,
  "max_samples": 10,
  "export_path": "/tmp/coppelia-dataset.json"
}

Use actual paths from your scene. Large images and point clouds can produce large JSON responses even with bounded sample counts.

Repeatable experiments

coppelia_experiments(initial_scene="/absolute/baseline.ttt", episodes=[...]) runs at most 20 episodes and 10000 combined steps. Each episode replaces the current scene with that baseline, removing objects and dynamic state from preceding episodes. Save unsaved scene work first. Per-episode joint_positions map absolute joint paths to positions applied while stopped, including position targets. Shared observe, sensors (proximity), and sample_every apply to all episodes.

Every episode requires nonempty success_conditions: { "kind": "object_position", "object": "/Part", "position": [0, 0, 0.5], "tolerance": 0.01 } or { "kind": "proximity", "sensor": "/Sensor", "detected": true }. All assertions must pass and no until diagnostic may trigger. Top-level success means the batch ran; inspect episode success and summary counts for task outcomes. Results include baseline initial_state, a step-zero sample, subsequent samples, elapsed simulation time, and success_checks. Assertions run while stepping remains enabled; the batch finishes stopped with stepping disabled. Reload does not reset external controllers or ROS 2 state.

These observation and batch tools return structured JSON and emit JSON event logs. They do not establish hardware safety.

Command-line runner

./coppelia_run --code 'print(get_scene_hierarchy())'
./coppelia_run --file path/to/scene.py
./coppelia_run --reset --code 'sim.startSimulation()'

Runner accepts --host and --port for an existing remote simulator; most MCP tools use localhost:23000, while coppelia_health also accepts host and port. --reset stops simulation, not object removal. Use --timeout to bound script execution, --no-snapshot to skip camera capture, or --diagnostics '[{"kind":"collision","objects":["/A","/B"]}]' for post-script checks. --launch and --launch-headless opt into auto-launch; --only-launch starts the simulator without running a script. For all options, run ./coppelia_run --help.

Architecture and workflows

Architecture: MCP client calls the server, runner uses CoppeliaSim, and snapshots are saved locally

Editable architecture · Detailed user workflows

Troubleshooting

  • Cannot connect to localhost:23000: Set COPPELIASIM_ROOT, run bash coppelia_launch.sh --headless, and inspect /tmp/coppelia_stdout.log. The launcher disables interactive Commander (-GsimCmd.autoStart=false): Commander exits on closed stdin during unattended startup. It also suppresses startup dialogs and selects .venv/bin/python for simulator scripts.

  • Failed to import coppeliasim_zmqremoteapi_client: Check COPPELIASIM_ROOT points to the CoppeliaSim directory containing programming/zmqRemoteApi/clients/python/src, then rerun with the project virtual environment.

  • Robot model not found: Check the model exists beneath COPPELIASIM_ROOT/models. Use ./coppelia_run --list-robots to inspect alias paths or pass an existing .ttm path to load_robot.

  • No snapshots: Check stderr in the tool response. Snapshots are written to /tmp only after successful code execution and capture; they are local to the machine running the server.

Contributing

Issues and pull requests are welcome at github.com/nashirabbash/coppeliasim-mcp. For local development, use the install steps above and verify basic CLI behavior with ./coppelia_run --list-robots. A live simulator is required to verify scene changes and camera output. The optional ./run_benchmark.sh exercises agent-driven scenes and requires a configured omp client; it changes the active simulation, so use a disposable scene.

License

MIT.

Available Tools

18 tools
coppelia_catalogB

Search CoppeliaSim model (.ttm) and scene (.ttt) files by space-separated terms matched against relative path and robot alias. kind: all|model|scene.

NameRequiredDescriptionDefault
kindNoall
limitNo
queryNo

TDQS

B3.3/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations, the description must carry the full behavioral burden. It does disclose meaningful matching semantics (space-separated terms matched against relative path and robot alias), which goes beyond structured data, but it omits case sensitivity, whether terms are ANDed or ORed, result ordering, and what happens when the limit truncates results.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Two tight sentences, front-loaded with the verb and resource, followed by the matching rule and the kind filter. Zero padding and no restatement of the name.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a tool with no annotations, 0% schema description coverage, and no output schema, the description is adequate but thin: it never explains limit behavior, match combination logic, or result shape, which an agent needs in order to query reliably and interpret truncated results.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 0%, so the description must compensate. It does explain `query` semantics and enumerates `kind: all|model|scene`, covering two of the three parameters; however, `limit` (default 50) is never mentioned, so the truncation behavior of results is undocumented in both schema and description.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb and resource: it searches CoppeliaSim model (.ttm) and scene (.ttt) files, and names the fields matched (relative path, robot alias). The scope is clear enough to separate it from siblings like coppelia_import_model or coppelia_scene, though it never explicitly says how it differs from those.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description implies a discovery/lookup use case but gives no explicit when-to-use, when-not-to-use, or alternatives. An agent is left to infer that this is the catalog lookup step before coppelia_import_model, with no statement of prerequisites or exclusions.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

coppelia_experimentsB

Run up to 20 simulation episodes in an explicit scene with per-episode scene reload, joint positions, diagnostics, and success conditions; combined steps are capped at 10000.

NameRequiredDescriptionDefault
observeNo
sensorsNo
episodesYes
headlessNo
sample_everyNo
initial_sceneYes

TDQS

B3.1/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations, the description carries the full burden and does disclose real behavioral facts: episode cap of 20, per-episode scene reload, combined step cap of 10000, and that joint positions/diagnostics/success conditions are produced. It omits blocking behavior, what happens to simulator state, and error handling on episode failure.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

A single dense sentence that front-loads the action and the two hard caps. Nothing is wasted, though the semicolon-clause packing makes it read like a feature list rather than prioritized guidance.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness2/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a 6-parameter tool with a required array-of-objects 'episodes' argument, no output schema, and no annotations, the description is far too thin. An agent cannot construct a valid episode entry or know what sample_every/headless/sensors do from this text alone.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters2/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 0% across 6 parameters, so the description must explain them and largely does not. It hints at initial_scene ('explicit scene') and episodes, and loosely at observe ('joint positions, diagnostics'), but headless, sample_every, sensors, and the structure of each episode object are entirely undocumented.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb and resource ('Run ... simulation episodes') plus concrete scope limits (up to 20 episodes, explicit scene, 10000 combined steps). It implicitly separates itself from single-step siblings like coppelia_step/coppelia_simulate by being a batch-episode runner, but never names them.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The word 'experiments' and the 20-episode/10000-step caps imply this is for multi-episode batch evaluation rather than single stepping, but there is no explicit 'use this instead of coppelia_simulate when...' guidance or prerequisite statement.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

coppelia_healthB

Check active ZeroMQ connection, simulator version, and runtime availability of simIK and simOMPL. Does not launch or modify the scene.

NameRequiredDescriptionDefault
hostNolocalhost
portNo

TDQS

B3.4/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations exist, so the description carries the full burden, and it only covers the non-mutating aspect. It says nothing about what happens when the simulator is unreachable (raises vs. reports a degraded status), any connection timeout, or whether a partial result is returned when simIK is missing but simOMPL is present — all critical for a health probe.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Two short sentences, front-loaded with the actual checks and followed by the negative boundary. Nothing redundant and nothing that merely restates the tool name.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a two-parameter read-only probe the enumerated checks roughly imply the return payload, and no output schema exists to do that job. Still, with no annotations and undocumented parameters, an agent lacks guidance on connection failure semantics and endpoint configuration — gaps the description should have closed.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters2/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 0%: host and port are bare typed fields with defaults and no explanation. The description never mentions either parameter, so nothing clarifies that host/port target the ZeroMQ endpoint or what happens if the simulator listens elsewhere. With zero coverage the description should compensate and does not.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

A specific verb (check) paired with three explicitly enumerated resources: the ZeroMQ connection, the simulator version, and runtime availability of simIK/simOMPL. That inventory makes it instantly distinguishable from the action-oriented siblings (coppelia_step, coppelia_simulate, coppelia_motion), which none of the other tools could be confused with.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The sentence 'Does not launch or modify the scene' gives a useful negative boundary, telling the agent this is a diagnostic probe rather than a scene operation. But it never states the positive trigger — e.g. call this before coppelia_motion to confirm simIK is available, or to diagnose a dead ZeroMQ connection. Usage is implied rather than directed.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

coppelia_import_floorplanC

Create static cuboid segments from grayscale floor-plan pixels classified as walls, doors, and windows.

NameRequiredDescriptionDefault
headlessNo
door_rangeYes
image_pathYes
pixel_sizeYes
wall_rangeYes
door_heightYes
respondableNo
wall_heightYes
window_rangeYes
window_heightYes

TDQS

C2.7/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations are supplied, so the description carries the full burden, yet it does not disclose that this mutates the scene by instantiating objects, whether existing scene content is affected, whether a running CoppeliaSim instance is required, or what headless/respondable do. Only the word 'Create' implies mutation, which is not enough for a scene-mutating tool with zero annotation coverage.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

A single, front-loaded sentence with no filler; it is efficient, though it is arguably too terse given the tool's parameter complexity.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness2/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a 10-parameter (8 required) scene-construction tool with no annotations, no output schema, and undocumented parameters, the description is far too thin. An agent could not reliably choose values for the six required numeric/range parameters from this text alone.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters2/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

With 10 parameters and 0% schema description coverage, the description needs to compensate heavily but only hints at the domain (grayscale pixel classification). It never explains what wall_range/door_range/window_range integer arrays mean (presumably intensity thresholds), what units pixel_size uses, or what headless and respondable control.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description gives a specific verb ('Create') and a precise resource ('static cuboid segments from grayscale floor-plan pixels classified as walls, doors, and windows'), which clearly separates it from siblings like coppelia_import_model or coppelia_scene. It just stops short of naming an alternative explicitly.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

There is no guidance on when to use this versus coppelia_import_model or coppelia_scene, nor any prerequisite such as needing an active simulation or a specific image format. The agent must infer usage entirely from the purpose sentence.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

coppelia_import_modelC

Import a URDF, SDF, STL, OBJ, or DAE file and report newly created roots and joint counts.

NameRequiredDescriptionDefault
pathYes
scaleNo
headlessNo
positionNo
orientationNo
package_rootNo

TDQS

C2.7/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations are provided, so the description carries the full behavioral burden. It indicates that importing creates roots and reports joint counts, but it omits important side effects such as whether it mutates the current scene, how existing objects are handled, what happens on failure, and what headless mode changes.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

A single tightly written sentence that front-loads the action and supported formats, then states the reported outputs. No wasted text.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness2/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a mutation-capable import tool with six undocumented parameters, no annotations, and no output schema, the description is too thin. It gives the file formats and a partial return summary but lacks sufficient behavioral and parameter context for confident invocation.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters1/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 0% across six parameters. The description mentions file formats relevant to path but does not explain scale, headless, position, orientation, or package_root, leaving most parameters undocumented in both schema and description.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb (Import) and resource (URDF, SDF, STL, OBJ, or DAE files), and notes the reported outputs (roots and joint counts). It is fairly easy to distinguish from coppelia_import_floorplan, though it does not explicitly name that sibling.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The supported file formats imply when the tool is applicable, but there is no explicit guidance on when to use it instead of coppelia_import_floorplan or other scene-building tools. No prerequisites or exclusions are stated.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

coppelia_mechanismB

Inspect a robot subtree and report joint types, limits, current/target positions, sensors, base candidate, and end-effector candidates.

NameRequiredDescriptionDefault
root_pathYes

TDQS

B3/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations exist, so the description carries the full burden. 'Inspect' and 'report' imply a read-only operation, and the enumerated field list is genuinely useful behavioural context, but nothing is said about what happens with an invalid or nonexistent root_path, whether it errors or returns empty, or whether it is safe to call repeatedly. Adequate but incomplete for an unannotated tool.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

One front-loaded sentence with no filler; the verb and scope come first and the payload enumeration follows. Dense without being cryptic. A slightly clearer separation between 'inspect' and 'report' clauses would have earned a 5.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

There is no output schema, and the description usefully compensates by listing the returned fields (joint types, limits, positions, base and end-effector candidates). However, the input side is left entirely open (path format, error behaviour) and there is no annotation coverage, so the definition is only just sufficient to call correctly.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters2/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 0%: root_path is a bare string with no title beyond 'Root Path' and no format hint. The description mentions 'robot subtree', which loosely ties the parameter to a scene-tree concept, but it never says whether the path is a slash-delimited scene path, a handle, or an alias. With a single undocumented parameter, the description needed to compensate and does not.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description names a specific verb (inspect) and resource (robot subtree) and enumerates exactly what it reports: joint types, limits, positions, sensors, base and end-effector candidates. That is far more informative than the opaque tool name. It stops short of 5 because it never contrasts with near-neighbours such as coppelia_sensors or coppelia_scene, so an agent must infer the boundary from the report contents.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

There is no statement of when to call this versus the many sibling tools, nor any prerequisite such as loading a scene first. The only guidance is implicit in the enumerated outputs. With seventeen siblings, an explicit 'use this before motion planning / instead of coppelia_sensors' note would have been cheap and valuable.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

coppelia_motionB

Typed motion operations: operation='ik' uses base, tip, target, constraints and method; operation='plan' uses joints, goal, collision_pairs, algorithm, max_time, simplify_time and path_states. Planning returns a path and never applies it to robot joints.

NameRequiredDescriptionDefault
tipNo
baseNo
goalNo
jointsNo
methodNodamped_least_squares
targetNo
dampingNo
headlessNo
max_timeNo
algorithmNoRRTConnect
operationYes
iterationsNo
constraintsNopose
path_statesNo
simplify_timeNo
collision_pairsNo

TDQS

B3.1/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations are provided, so the description carries the full behavioral-disclosure burden. It usefully states that planning returns a path and never applies it to robot joints, but it does not say whether operation='ik' mutates robot state, what permissions are required, what happens on failure, or how headless mode affects behavior.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is compact and front-loaded, with no filler text. The dense inline parameter listing is efficient but reads more like a schema summary than structured usage guidance.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness2/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a 16-parameter motion tool with no annotations, no output schema, and zero schema description coverage, the description is insufficient. It leaves several parameters undocumented and does not explain the return path format, error cases, or the side-effect profile of the IK operation.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 0% across 16 parameters. The description maps 12 parameters to the 'ik' and 'plan' operation modes, which adds useful grouping beyond the bare schema, but it omits damping, iterations, headless, and does not explain the meaning or allowed values of constraints, method, or algorithm.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description states that this tool provides typed motion operations and enumerates operation='ik' and operation='plan' with associated parameter sets, so an agent can tell it handles inverse kinematics and motion planning. It does not distinguish this tool from siblings such as coppelia_trajectory or coppelia_step.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

It provides operation-specific parameter usage for 'ik' versus 'plan' and notes that planning returns a path without applying it to robot joints, which implies when to choose plan versus execution. However, it gives no explicit when-to-use guidance versus sibling tools, prerequisites, or exclusions.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

coppelia_physics_benchmarkC

Run identical bounded episodes on 2–5 caller-prepared scenes and compare task outcomes; each scene retains its configured physics engine.

NameRequiredDescriptionDefault
scenesYes
observeNo
sensorsNo
episodesYes
headlessNo
sample_everyNo

TDQS

C2.9/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations, the description carries the full burden and only partially delivers: it discloses the 2–5 scene bound, that episodes are identical across scenes, and that each scene keeps its own physics engine. It says nothing about whether simulation state is mutated or reset, how long runs take, whether scenes are paths or handles, or what a 'comparison' result looks like — critical given there is no output schema.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

A single dense sentence with the core action front-loaded and no filler; the trailing clause about retaining the configured physics engine earns its place by explaining the comparison's validity. Slightly cryptic phrasing ('caller-prepared', 'bounded episodes') costs it the top mark.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness2/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a high-complexity tool with six parameters, nested objects, no annotations, and no output schema, the description is far too thin. It should at minimum explain what the four undocumented parameters do and what the caller receives back, since nothing else in the definition supplies that.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters2/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 0% across six parameters including nested objects, and the description only gestures at two of them ('scenes' as caller-prepared with a configured physics engine, 'episodes' as identical and bounded). The semantics of observe, sensors, headless, and sample_every — including whether sample_every is per-episode or global — are entirely undocumented.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb (run) and resource (identical bounded episodes across 2–5 scenes) plus the outcome (compare task outcomes), which is far more informative than a name restatement. It does not, however, differentiate itself from close siblings like coppelia_experiments or coppelia_simulate, so an agent still has to infer which one to reach for.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The phrase '2–5 caller-prepared scenes' and 'identical bounded episodes' implies the preconditions for use (scenes must already exist, episodes must be comparable), but there is no explicit when-to-use, when-not-to-use, or named alternative among the many simulation siblings. Usage is inferable rather than stated.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

coppelia_physics_engineA

Inspect or set the scene physics engine property and dynamics step size. Changes require simulation stopped; engine_property is [index, version].

NameRequiredDescriptionDefault
headlessNo
engine_propertyNo
dynamics_step_sizeNo

TDQS

A4.4/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Since no annotations were provided, the description carries the full burden of behavioral disclosure. Stating that the simulation must be stopped to make changes is a major behavioral constraint that would otherwise be unknown to the agent.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is a single, highly efficient sentence that front-loads the core purpose while placing necessary constraints and hints at the end. There is no superfluous language.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the complete lack of structured metadata (0% schema coverage, no annotations), the description is exceptionally complete, covering functionality, required state for changes, and data format hints for complex parameters.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

With 0% schema description coverage, the description provides vital semantic information. It defines the format of the 'engine_property' argument as '[index, version],' guiding the agent on how to structure this specific input.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly and specifically states the function (Inspect or set) and the resource it acts upon (scene physics engine property and dynamics step size). It distinguishes its purpose as a configuration tool, distinct from general simulation or catalog tools.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

It provides a critical precondition for modification: 'Changes require simulation stopped.' This is a vital usage guideline that prevents agents from attempting mutations that would fail at runtime.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

coppelia_record_datasetC

Record bounded, per-step synchronized simulation state and typed sensor samples to JSON.

NameRequiredDescriptionDefault
stepsNo
untilNo
observeNo
sensorsNo
headlessNo
export_pathNo
max_samplesNo
sample_everyNo
stop_on_finishNo

TDQS

C2.7/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations, the description carries the full burden and only discloses that recording is bounded/per-step and outputs JSON. It never warns that the tool likely launches a simulation, may stop it (stop_on_finish), runs headless, or has side effects on the current simulator state—all significant traits an agent needs before invoking a 9-parameter execution tool.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The single sentence is dense and front-loaded with no filler, which is structurally efficient. Its brevity is a liability only because it under-specifies, which is better captured by the completeness dimension.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness2/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a complex 9-parameter tool with no annotations and no output schema, one sentence is far too thin. The description omits parameter behavior, simulation side effects, and result/export semantics, leaving the agent with substantial gaps before it can call the tool correctly.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters2/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 0%, so the description must explain the nine parameters, but it only vaguely gestures at steps/until ('bounded'), sensors, and JSON export. Key parameters like observe, headless, max_samples, sample_every, and stop_on_finish are never clarified, leaving half the inputs undocumented.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description names a specific verb (Record) and concrete resources (simulation state, typed sensor samples) plus the output format (JSON), which is far more informative than a title restatement. It does not explicitly contrast itself with siblings like coppelia_step or coppelia_sensors, so it falls short of a 5.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

There is no indication of when to choose this tool over coppelia_step, coppelia_simulate, or coppelia_sensors. 'Bounded, per-step synchronized' hints at a recording workflow but does not state prerequisites or exclusions, leaving the agent to infer usage from the name alone.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

coppelia_ros2C

Publish, echo, capture, or stream ROS 2 topics, call services, or send action goals through CoppeliaSim ROS 2 Humble runtime.

NameRequiredDescriptionDefault
nameYes
rateNo
countNo
payloadNo
timeoutNo
durationNo
payloadsNo
operationYes
feedback_typeNo
feedback_topicNo
interface_typeYes

TDQS

C2.4/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations are provided, so the description carries the full behavioral burden. It implies side effects by mentioning publish, capture, and send action goals, but it does not disclose blocking behavior, timeout semantics, rate limits, runtime prerequisites, or failure modes for a multi-modal ROS 2 interface.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness3/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is a single front-loaded sentence with no filler, which is structurally efficient. However, it is under-specified for a tool with 11 parameters and multiple operation modes, so conciseness comes at the cost of necessary detail.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness1/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

This is a complex 11-parameter tool with no annotations, no output schema, and no schema descriptions, yet the description provides only a broad list of ROS 2 interaction categories. It leaves operation values, parameter roles, return behavior, and safety/blocking characteristics entirely unspecified.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters1/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 0% across 11 parameters, and the description does not mention any parameter names or meanings. Critical parameters such as operation, name, interface_type, rate, count, payload, duration, and feedback_topic are left completely undocumented beyond bare titles.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description states specific verbs (publish, echo, capture, stream, call, send) and resources (ROS 2 topics, services, action goals) within the CoppeliaSim ROS 2 Humble runtime. However, it does not differentiate this tool from the sibling coppelia_ros2_status, so an agent cannot tell when this tool is preferred over status.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

There is no guidance on when to use this tool versus alternatives, including the closely named coppelia_ros2_status sibling. The description also does not clarify which operation to choose for a given task or mention prerequisites for interacting with the ROS 2 runtime.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

coppelia_ros2_statusB

Check whether the installed CoppeliaSim simROS2 plugin loads. This tool does not start ROS 2 or alter the scene.

NameRequiredDescriptionDefault
headlessNo

TDQS

B3.3/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations, the description carries the full burden, and it does disclose the key safety traits: read-only in effect, no scene mutation, no ROS 2 startup. It stops short of describing what a failure looks like (returned error, exception, boolean) or whether the tool spins up a simulator instance at all, which the 'headless' parameter hints at.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Two short sentences, the purpose first and the scope disclaimer second. No filler, nothing to trim.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a simple one-parameter status check with no output schema, the description covers what is checked and what is not done. It is incomplete on the one thing the schema leaves blank — the meaning and side effects of 'headless' — and on what a positive/negative result looks like.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters2/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 0% and the single parameter 'headless' (default false) is never mentioned in the description. An agent cannot tell whether headless=true launches a GUI-less simulator process or merely affects how the plugin check is performed, which is a meaningful behavioral difference left undocumented.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

Specific verb+resource: 'Check whether the installed CoppeliaSim simROS2 plugin loads' tells the agent exactly what is being verified. It partially differentiates itself from the sibling coppelia_ros2 by disclaiming that it does not start ROS 2, but it never names that sibling or describes how the two relate.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

'This tool does not start ROS 2 or alter the scene' is a useful exclusion that implies coppelia_ros2 is the tool for actually starting the bridge. However, no alternative is named and no precondition is given (e.g., run this before coppelia_ros2 to verify the plugin is installed).

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

coppelia_sceneB

Save or load a CoppeliaSim scene. action: save|load. path: absolute .ttt path. load stops the running simulation and replaces the current scene.

NameRequiredDescriptionDefault
pathYes
actionYes
headlessNo

TDQS

B3.4/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations at all, the description carries the full burden, and it does deliver the key hazard: load stops the running simulation and replaces the current scene. It omits other load-bearing behavior such as whether save overwrites an existing file, what happens if the path is invalid, and what the call returns.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Two sentences and a terse param list, with the core purpose and hazard front-loaded ahead of parameter notes. The telegraphic 'action: save|load' style is compact and earns its space, though the sentence fragments read slightly as notes rather than prose.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a 3-parameter, annotation-free mutation tool with no output schema, the description covers purpose, one parameter constraint set, and the destructive side effect of load, but leaves headless undefined and says nothing about save semantics or failure modes.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 0%, so the description must compensate. It documents the two required parameters with useful constraints ('action: save|load', 'path: absolute .ttt path') that the bare string schema does not convey, but leaves the third parameter (headless) completely undocumented in both schema and text.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb pair and resource ('Save or load a CoppeliaSim scene') plus the discriminating parameter values (action: save|load), so the agent can distinguish it from siblings like coppelia_import_model or coppelia_step. It stops short of explicitly saying how it differs from related scene-importing tools.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Usage is only implied: save vs load is selectable via the action field, and the destructive nature of load hints at caution. There is no explicit 'use this when...' guidance and no mention of when to prefer coppelia_import_model or coppelia_import_floorplan over loading a .ttt scene.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

coppelia_sensorsC

Read selected proximity, vision RGB, metric depth, force/torque, or sampled vision point-cloud data from typed sensor paths.

NameRequiredDescriptionDefault
sensorsYes

TDQS

C2.7/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations are provided, so the description carries the full behavioral burden. It implies a read-only operation through the verb 'Read' but does not disclose permissions, error handling, units, ordering, snapshot semantics, or behavior for missing/invalid sensor paths. It adds the useful detail that paths are typed and that multiple data modalities are supported, but this falls short of the transparency needed for a sensor-reading tool with zero annotation coverage.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is a single front-loaded sentence with no wasted words, efficiently naming the action and the data categories. It could be slightly clearer or more structured, but it is appropriately sized for the tool's surface.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness2/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given no annotations, no output schema, and a complex array-of-objects parameter with zero schema description coverage, the description leaves major gaps. It does not explain the shape of sensor entries, return format, units, or selection semantics, so an agent would need to inspect external documentation to call it reliably.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters2/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The schema has 0% description coverage for its single required parameter, an array of objects, and the description does not compensate by explaining the object shape, required fields, or how to specify a typed sensor path. It adds only the high-level notion of 'typed sensor paths' and data-type categories, which is insufficient to invoke the tool correctly without inspecting undocumented nested objects.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description states a specific verb, 'Read', and a clear resource: sensor data from typed sensor paths. It enumerates supported data types (proximity, vision RGB, metric depth, force/torque, point-cloud), making the tool's purpose distinguishable, though it does not explicitly differentiate itself from siblings such as coppelia_signals.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

There is no guidance on when to use this tool versus alternatives, nor any prerequisites or exclusions. The phrase 'read selected ... data' implies a selective read but does not tell the agent under what circumstances to choose coppelia_sensors over related tools like coppelia_signals.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

coppelia_signalsC

Read or write a named integer, float, or string CoppeliaSim signal. This is not a PLC network adapter.

NameRequiredDescriptionDefault
nameYes
valueNo
headlessNo
operationYes
signal_typeYes

TDQS

C2.6/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

There are no annotations, so the description carries the full behavioral burden. It discloses that writes are possible, but it says nothing about permissions, whether writing overwrites existing values, side effects, the role of 'headless', or error behavior. This is a significant gap for a mutation-capable tool.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness3/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is short and front-loads the main capability, which is good. However, the second sentence about not being a PLC network adapter is abrupt and does not clearly earn its place as a disambiguation.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness2/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a five-parameter tool with no annotations, no output schema, and zero schema description coverage, the description is too thin. It identifies the resource but leaves key calling details undocumented.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters2/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 0%, so the description must explain the five parameters. It only maps the signal value type to integer, float, or string and implies a read/write operation. It does not clarify accepted values for 'operation' or 'signal_type', requiredness, or what 'headless' controls.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description states a specific verb pair ('Read or write') and resource ('named integer, float, or string CoppeliaSim signal'), which is enough for an agent to grasp the tool's function. The negative clarification about not being a PLC network adapter is confusing, but sibling differentiation is implicit because no other coppelia_* tool handles signals.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description only implies that read and write are the supported operations. It does not say when to choose this tool over alternatives, what prerequisites exist, or what values 'operation' accepts. An agent must infer all usage conditions.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

coppelia_simulateC

Step CoppeliaSim N times (or until a diagnostic issue). Returns positions and proximity sensor samples as JSON. until: {kind: collision|distance|floor_bounds, objects, threshold?}. export_path: .json file to write results.

NameRequiredDescriptionDefault
stepsNo
untilNo
observeNo
sensorsNo
headlessNo
export_pathNo
sample_everyNo

TDQS

C2.9/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations are provided, so the description carries the full behavioral burden. It discloses that results include positions and proximity sensor samples and that export_path writes a .json file, but it does not disclose simulation-state side effects, whether file writes overwrite existing data, or how headless mode changes behavior.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is short and front-loaded with the main action and return behavior. The compact 'until' schema notation is efficient, though the overall terseness leaves important parameter and behavioral gaps.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness2/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

This is a comparatively complex tool with 7 parameters, no annotations, and no output schema. The description covers the core action and return shape but is not complete enough to explain the remaining parameters or the full side-effect profile.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters2/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 0% for 7 parameters, so the description must compensate. It adds useful syntax for 'until' and export_path and implies 'steps', but leave observe, sensors, headless, and sample_every completely undocumented.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb and resource: 'Step CoppeliaSim N times', with the stopping condition 'or until a diagnostic issue'. The batch-stepping scope distinguishes it somewhat from a single-step sibling, but it does not explicitly contrast itself with coppelia_step or coppelia_sensors.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description implies usage through 'N times' and the 'until' diagnostic condition, suggesting this is for multi-step simulation with an early stop. However, it gives no explicit guidance on when to choose this over coppelia_step, coppelia_sensors, or other siblings, and no alternatives are named.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

coppelia_stepB

🚨 STRICT SUPREME DIRECTIVE FOR AI AGENT (READ THIS FIRST): NEVER CONCLUDE OR REPORT SUCCESS BASED SOLELY ON CODE LOGS OR EXIT STATUS! You are interacting with a physical 3D simulation environment. Code that executes without error often produces physically broken scenes (e.g. walls collapsing under gravity, objects intersecting, robots falling through floors or flipped upside-down).

THEREFORE, YOU ARE STRICTLY REQUIRED TO USE YOUR EYES: Every call returns TWO visual snapshots:

  1. /tmp/coppelia_topdown.png (TOP-DOWN BIRD'S-EYE VIEW of entire board)

  2. /tmp/coppelia_snapshot.png (ISOMETRIC 3D PERSPECTIVE VIEW of structures)

MANDATORY PROTOCOL AFTER EVERY CALL:

  1. You MUST explicitly read and inspect BOTH image files using your image viewing / file inspection capabilities.

  2. Check /tmp/coppelia_topdown.png to verify: 2D room dimensions, obstacle spacing, robot heading, and boundary clearance.

  3. Check /tmp/coppelia_snapshot.png to verify: wall heights (e.g. 5m), roof alignment, upright robot stability, and no physical sagging or collision clipping.

  4. IF YOUR EYES SEE ANY VISUAL DEFECT (collapsed wall, misplaced robot, clipping mesh), YOU MUST NOT CLAIM COMPLETION. You must immediately self-correct your script coordinates and run again! Reporting "Task complete" without having visually verified both screenshots is a fatal protocol violation.


TOOL SUMMARY: Execute Python code directly inside CoppeliaSim simulator. Auto-launches simulator if closed, runs physics/scene code, auto-captures dual camera snapshots, and returns execution result in ONE single call.

SCENE HIERARCHY AWARENESS RULE (PREVENT DUPLICATE MODELS): Every call returns "scene_objects" as root nodes. Each node includes name, path, handle, type, is_model, pos, and recursive children; this covers every non-system object. ALWAYS inspect the full hierarchy before creating or spawning:

  1. DO NOT spawn a robot if a matching model already exists anywhere under scene_objects.

  2. To reuse existing robot: robot = sim.getObject('/PioneerP3DX') (or use existing handle).

  3. To remove duplicate/old objects: sim.removeObject(sim.getObject('/OldName')). If scene_hierarchy_error is present, scene inventory failed; do not treat an empty list as an empty scene.

WALLS & ENCLOSURE VISIBILITY RULE (PREVENT GREY VOID BLINDNESS): NEVER build solid block labyrinths or closed rooms that entomb the camera/robot in solid gray geometry!

  1. DO NOT spawn 50+ individual solid wall cuboids for mazes. Use thin perimeter borders instead (thickness 0.1m - 0.2m, NOT 0.8m thick blocks!).

  2. Color your walls and floor distinctly (e.g. walls = light blue [0.3, 0.6, 0.9], floor = dark grey [0.2, 0.2, 0.2]). NEVER leave all shapes default uncolored grey!

  3. If creating rooms or houses with roofs: DO NOT seal roofs with solid opaque material. Either leave roof off, or make it high and distinctly colored so internal contents remain visible.

INJECTED OBJECTS IN CODE:

  • sim: CoppeliaSim ZeroMQ API module.

  • simIK: CoppeliaSim Inverse/Forward Kinematics solver module.

  • simOMPL: Open Motion Planning Library module (RRT, RRT*, PRM path planners).

  • load_robot(alias, position=[x,y,z], orientation=[a,b,g]): Loads robot model. Valid aliases: ['pioneer', 'youbot', 'hexapod', 'ant_hexapod', 'omni', 'quadcopter', 'asti', 'panda', 'ur5', 'ur10', 'vacuum', 'epuck'].

  • get_scene_hierarchy(): Returns root objects with nested children for every non-system object type.

  • get_floor_info(): Returns default floor size, position, and bounding box.

  • client: RemoteAPIClient instance.

EXACT API CHEAT-SHEET (DO NOT SEARCH OR GUESS - USE THESE DIRECTLY):

  1. Shapes & Environment:

    • Create cuboid: h = sim.createPrimitiveShape(sim.primitiveshape_cuboid, [sizeX, sizeY, sizeZ], 0)

    • Create cylinder: h = sim.createPrimitiveShape(sim.primitiveshape_cylinder, [diameter, diameter, height], 0)

    • Create sphere: h = sim.createPrimitiveShape(sim.primitiveshape_sphere, [diameter, diameter, diameter], 0)

    • Make static (walls/floors/roofs): sim.setObjectInt32Param(h, sim.shapeintparam_static, 1)

    • Make respondable (solid collisions): sim.setObjectInt32Param(h, sim.shapeintparam_respondable, 1)

    • Color shape: sim.setShapeColor(h, None, sim.colorcomponent_ambient_diffuse, [R, G, B]) # values 0.0 - 1.0

  2. Positions & Hierarchy:

    • Set position: sim.setObjectPosition(handle, -1, [x, y, z]) # -1 = absolute world coords

    • Get position: pos = sim.getObjectPosition(handle, -1) # returns [x, y, z]

    • Set orientation: sim.setObjectOrientation(handle, -1, [alpha, beta, gamma])

    • Find object by name: h = sim.getObject('/ObjectName', {'noError': True})

    • Remove object: sim.removeObject(handle)

  3. Collision & Distance Detection:

    • Collision check: result, collPair = sim.checkCollision(entity1Handle, entity2Handle) # 1 = colliding, 0 = clear

    • Distance check: result, distData, pairHandles = sim.checkDistance(entity1Handle, entity2Handle) returns distance and closest points without a threshold.

Optional diagnostics request returns structured results in the JSON text content. Use {"kind":"distance","objects":["/A","/B"],"threshold":0.1} to receive distance, closest_points, threshold, and status; threshold only controls issue/clear classification. Scripts can also inspect and edit the full scene through sim.*.

  1. Path & Motion Planning (simOMPL & simIK):

    • simOMPL Task: task = simOMPL.createTask('task_name')

    • Set Algorithm: simOMPL.setAlgorithm(task, simOMPL.Algorithm.RRTConnect) # or RRTstar, PRM

    • Compute Path: solved, path = simOMPL.compute(task, maxTime=4.0)

    • simIK Solver: env = simIK.createEnvironment(); simIK.addElementFromScene(env, ikGroup, tip, target, base)

    • Native Path Interpolation: pathHandle = sim.createPath(ctrlPoints, options)

  2. Simulation & Motors:

    • Start simulation: sim.startSimulation()

    • Stop simulation: sim.stopSimulation()

    • Set motor velocity: sim.setJointTargetVelocity(jointHandle, float_val)

    • Read proximity sensor: detected, dist, pt, obj, normal = sim.readProximitySensor(sensorHandle)

sim.stopSimulation()
# House floor
floor = sim.createPrimitiveShape(sim.primitiveshape_cuboid, [10.0, 10.0, 0.2], 0)
sim.setObjectInt32Param(floor, sim.shapeintparam_static, 1)
sim.setObjectInt32Param(floor, sim.shapeintparam_respondable, 1)

# Spawn robot inside
robot = load_robot('pioneer', [0.0, 0.0, 0.3])
sim.startSimulation()
NameRequiredDescriptionDefault
codeNo
resetNo
timeoutNo
headlessNo
diagnosticsNo

TDQS

B3.4/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations to lean on, the description carries the full burden and does so thoroughly: it discloses auto-launch behavior, the exact snapshot paths written, the shape of the `scene_objects` return, the `scene_hierarchy_error` failure signal, and mutation side effects (spawning/removing objects). An agent knows the observable behavior and side effects before calling.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness2/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The definition is bloated with repeated all-caps directives and duplicated warnings, and it front-loads a shouting protocol notice ahead of the actual tool summary. The genuinely useful material (return format, API cheat-sheet) is buried under rhetorical repetition.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a code-execution tool with no output schema, the return behavior is described well (two PNG paths, scene hierarchy, diagnostics results). However, the three undocumented parameters and the absence of any note on what `reset`/`timeout` do leave real gaps for correct invocation.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters2/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 0%, so the description must document all five parameters, yet it only explains `diagnostics` (with a concrete example payload) and implicitly `code`. `reset`, `timeout`, and `headless` are never defined, so an agent must guess their semantics and defaults.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The 'TOOL SUMMARY' block states a specific verb and resource: execute Python code inside CoppeliaSim, auto-launch the simulator, capture dual snapshots, and return results in one call. It is concrete and distinguishable, but it never explicitly contrasts itself with siblings like coppelia_simulate or coppelia_scene, leaving the differentiation to inference.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

It gives strong procedural guidance for *how* to use the output (inspect both PNGs, check hierarchy before spawning), but no guidance on *when* this tool should be chosen over coppelia_simulate, coppelia_scene, or coppelia_motion. Usage context is implied rather than stated against alternatives.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

coppelia_trajectoryC

Execute a joint path with velocity and optional acceleration/jerk limits, per-step collision checks, dynamic-contact grasp checks with post-lift retention and slip limits, and distance-based place checks.

NameRequiredDescriptionDefault
jointsYes
headlessNo
max_jerkNo
trajectoryYes
max_velocityYes
collision_pairsYes
gripper_actionsNo
max_accelerationNo
steps_per_waypointNo

TDQS

C2.8/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations, the description carries the full burden, and it does disclose meaningful behavior: per-step collision checks, dynamic-contact grasp checks with post-lift retention and slip limits, and distance-based place checks. It says nothing about blocking vs. async execution, what happens on a failed check (abort? raise?), or the effect of headless mode.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness3/5

Is the description appropriately sized, front-loaded, and free of redundancy?

One front-loaded sentence with no filler, but it is an overstuffed clause chain that is hard to parse. Structure would improve by splitting the limits from the validation checks.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness2/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a 9-parameter motion execution tool with no annotations, no output schema, and zero schema descriptions, the description leaves major gaps: parameter shapes, gripper action format, failure semantics, and return values are all unaddressed.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters2/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 0% across 9 parameters, so the description must compensate and largely fails. It hints at max_velocity, max_acceleration, and max_jerk, but says nothing about joints, trajectory, collision_pairs, gripper_actions, steps_per_waypoint, or headless, all of which are undocumented everywhere.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description states a concrete verb+resource: executing a joint path with velocity/acceleration/jerk limits plus collision and grasp checks. It is specific about what the execution validates. However, it never distinguishes itself from siblings like coppelia_motion, coppelia_step, or coppelia_simulate, which plausibly also move a robot.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

There is no indication of when to use this tool versus coppelia_motion or coppelia_step, no prerequisites, and no exclusions. The agent must infer routing from the tool name alone.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

Tool Schema Changelog

Recent tool additions, removals, and schema changes observed during successful MCP inspections.

  1. 18 tool updatesv1.0.1
    • Addedcoppelia_catalog
    • Addedcoppelia_experiments
    • Addedcoppelia_health
    • Addedcoppelia_import_floorplan
    • Addedcoppelia_import_model
    • Addedcoppelia_mechanism
    • Addedcoppelia_motion
    • Addedcoppelia_physics_benchmark
    • Addedcoppelia_physics_engine
    • Addedcoppelia_record_dataset
    • Addedcoppelia_ros2
    • Addedcoppelia_ros2_status
    • Addedcoppelia_scene
    • Addedcoppelia_sensors
    • Addedcoppelia_signals
    • Addedcoppelia_simulate
    • Changedcoppelia_step3 fields changed
      • addedInput schema / properties / diagnostics
        Added value: +{
        +  "anyOf": [
        +    {
        +      "items": {
        +        "additionalProperties": true,
        +        "type": "object"
        +      },
        +      "type": "array"
        +    },
        +    {
        +      "type": "null"
        +    }
        +  ],
        +  "default": null,
        +  "title": "Diagnostics"
        +}
      • addedInput schema / properties / timeout
        Added value: +{
        +  "default": 30,
        +  "title": "Timeout",
        +  "type": "number"
        +}
      • changedOutput schema / (root)
        Previous value: -{
        -  "properties": {
        -    "result": {
        -      "title": "Result",
        -      "type": "string"
        -    }
        -  },
        -  "required": [
        -    "result"
        -  ],
        -  "title": "coppelia_stepOutput",
        -  "type": "object"
        -}New value: +null
    • Addedcoppelia_trajectory
  2. 1 tool updatev0.1.0
    • First observedcoppelia_step

TDQS

B3.2/5.0

Scored across 18 tools

Disambiguation3/5

Most tool families are distinct (scene, sensors, ROS 2, mechanisms, physics), but coppelia_step is a mega-tool that can execute arbitrary simulator code and overlaps with simulate, motion, trajectory, sensors, imports, and scene operations. Close pairs like experiments vs. physics_benchmark and ros2 vs. ros2_status further blur boundaries, though descriptions provide guidance.

Naming Consistency5/5

All tools use the same coppelia_ prefix and lower snake_case style, making names predictable and easy to scan. The mix of noun-like and verb-like stems (scene, health, step, import_model) is still consistent with the namespace convention.

Tool Count3/5

At 18 tools, the server is in the borderline-heavy range for a single MCP surface. While the domain is broad, several tools overlap in practice, and some pairs could likely be consolidated without losing capability.

Completeness5/5

The surface covers execution, simulation stepping, scene save/load, model and floorplan import, sensors, motion planning/IK, trajectory execution, ROS 2 integration, datasets, experiments, physics engine configuration, signals, and health checks. No obvious lifecycle gap remains for a CoppeliaSim robotics simulation server.

Maintenance

ActivityMaintained
ResponsivenessNo issues

Related MCP Connectors

Related MCP Servers

  • A
    license
    Not graded
    quality
    D
    maintenance
    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.
    9
    MIT
  • A
    license
    Not graded
    quality
    D
    maintenance
    Enables LLMs to create and manipulate 3D models using OpenSCAD through MCP tools for code-based modeling, preview, and export.
    1
    MIT
  • A
    license
    A
    quality
    D
    maintenance
    Exposes 12 robotics/simulation tools from robosimtools.com as MCP tools, enabling AI agents to perform conversions (quaternion, URDF, MJCF), validation, and CAD imports locally.
    12
    1
    MIT