robot-motion-mcp
Click on "Deploy Server".
Wait a few minutes for the server to deploy. Once ready, it will show a "Started" state.
In the chat, type
@followed by the MCP server name and your instructions, e.g., "@robot-motion-mcpstart an offline plan for the pick-and-place task, then check its status"
That's it! The server will respond to your query, and you can continue using it as needed.
Here is a step-by-step guide with screenshots.
robot-motion-mcp
A local stdio MCP server for inspecting robot motion-planning tasks and records, starting an isolated planning run, checking its status, and reporting validation evidence.
Tools
Tool | Purpose |
| List tasks found in the configured data roots and protocol fixtures. |
| Read task inputs, model/version information, completeness, and collision semantics. |
| Read a configured historical planning or validation record. |
| Start an offline planner in a per-run worktree and return a run ID. |
| Read execution, planning-result, and validation state separately. |
| Report the available independent validation evidence. |
The server does not control a physical robot. A planner finding a path does not by itself mean that the path passed independent validation. A timeout is not proof that a path does not exist.
Related MCP server: golden-flow-mcp
Install
Requires Python 3.11 or newer.
git clone <repository-url> robot-motion-mcp
cd robot-motion-mcp
py -3.11 -m venv .venv
.\.venv\Scripts\python.exe -m pip install -r requirements.txt
.\.venv\Scripts\python.exe -m pip install -e .Configure local inputs
The repository contains the MCP server and Skill integration files. Planning inputs and the planner environment are configured on the machine that runs the server; they are not downloaded by the server automatically.
Set the roots to directories with the expected project layout. ROBOT_MOTION_NEW_DESIGN_ROOT points to a New_Design tree; ROBOT_MOTION_AUDIT_ROOT points to a directory of historical JSON records. For real planning, set ROBOT_MOTION_PLANNER_PYTHON to a Python interpreter that has the planner's required packages installed.
$env:ROBOT_MOTION_NEW_DESIGN_ROOT = 'D:\robot-data\New_Design'
$env:ROBOT_MOTION_AUDIT_ROOT = 'D:\robot-data\research_audit'
$env:ROBOT_MOTION_RUNS_ROOT = 'D:\robot-data\robot-motion-runs'
$env:ROBOT_MOTION_PLANNER_PYTHON = 'D:\Python\envs\planner\python.exe'The supported variables are ROBOT_MOTION_WORKSPACE, ROBOT_MOTION_NEW_DESIGN_ROOT, ROBOT_MOTION_AUDIT_ROOT, ROBOT_MOTION_RUNS_ROOT, and ROBOT_MOTION_PLANNER_PYTHON. Explicit root variables take precedence over the workspace defaults. The planner interpreter is fixed by configuration and cannot be selected by a model tool argument.
Run
Start the server directly over stdio:
.\.venv\Scripts\python.exe -m robot_motion_mcp.serverFor an MCP host that loads workspace configuration, open agent-workspace as its working directory and use the included .mcp.json; run_server.cmd resolves the project and virtual environment relative to itself.
Install the Skill
The companion repository, robot-motion-diagnosis-skill, contains the robot-motion-diagnosis Skill. Install it in the Skill directory used by your agent. The Skill expects the six tools listed above to be available.
Development
python -m pytest tests/test_runner.py -qThe included runner test uses a synthetic planner fixture. Tests that need a real planning workspace or a specific MCP host configuration should be run in an environment that provides those inputs.
Available Tools
6 toolsget_experiment_reportA
Read a frozen experiment/run report with honest status semantics: planner raw status + canonical state, candidate-path facts, independent-validation state (PASSED/FAILED/INCOMPLETE/NOT_VALIDATED/TOOL_ERROR), durations, error class, caveats and source-file references. run_id forms: '/' (e.g. 'rm_next_009_full_motion_generation_cost/T1_CM2B_P0', 'third_workpiece_process_boundary/EXPERIMENT', '_audit/FINAL_QA'), 'ND-SEED-', 'MOCK-*'. Timeouts are never reported as infeasibility.
| Name | Required | Description | Default |
|---|---|---|---|
| run_id | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
| ok | Yes | |
| mock | No | |
| report | Yes | |
| run_id | Yes |
TDQS
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 does substantial work: it declares the report is frozen (immutable snapshot), enumerates the semantic guarantees (raw vs canonical status, validation states, error class, caveats), and explicitly states timeouts are never reported as infeasibility. Missing auth/permission requirements and behavior on an unknown run_id keeps it from a 5.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Front-loaded with the verb and resource, then the payload and the id formats. The middle clause is a dense comma-list of return fields, which is information-rich but reads as a run-on; it could be trimmed given an output schema already exists.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a single-parameter read tool with an output schema, the description covers the input format thoroughly and adds semantic guarantees. The enumerated return fields overlap with what the output schema presumably declares, and invalid-run_id behavior is unstated, but nothing essential for a correct call is missing.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 0% (run_id has no description), so the description must compensate, and it does: three run_id shapes are given with concrete examples ('<experiment>/<record>', 'ND-SEED-<seed>', 'MOCK-*'). This is more than the schema provides and enough to construct a valid argument.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource ("Read a frozen experiment/run report") and the word "frozen" implicitly separates it from live-status siblings like get_plan_status. It does not name a sibling explicitly, so an agent must infer the boundary rather than being told.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Usage is implied by "read a frozen report" and the enumerated run_id forms, but there is no explicit statement of when to prefer this over get_plan_status, list_tasks or get_task_info. The agent gets context but no exclusions or routing rule.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_plan_statusA
Query a real planning run (run_id from start_motion_plan) with three separate dimensions: execution_status (PENDING/RUNNING/COMPLETED/FAILED/TIMEOUT/UNKNOWN - COMPLETED means the tool finished, not that a path was found), plan_result (PATH_FOUND/NO_CANDIDATE_WITHIN_BUDGET/ERROR/NOT_AVAILABLE) and validation_status. Status survives service restarts via persistent records; unverifiable outcomes are reported as UNKNOWN, never silently converted.
| Name | Required | Description | Default |
|---|---|---|---|
| run_id | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
| ok | Yes | |
| run_id | Yes | |
| details | Yes | |
| task_id | No | |
| warnings | No | |
| plan_result | No | |
| execution_status | Yes | |
| validation_status | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries full behavioral burden and does unusually well: it discloses persistence across service restarts and that unverifiable outcomes surface as UNKNOWN rather than being silently converted. It omits whether the call blocks, whether polling is expected, and cost/latency, which matter for a status-query tool.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Front-loaded with verb, resource, and the three query dimensions, and every clause earns its place — the COMPLETED clarification prevents a real misinterpretation. The dense parenthetical enum lists make it slightly heavy to parse but are not wasteful.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a one-parameter status reader with an output schema, this is nearly sufficient: status semantics, persistence, and UNKNOWN handling are all covered. The remaining gap is operational — whether an agent should poll and how quickly a run transitions — which is left implicit.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 0%, so the description must compensate for the single run_id parameter; it does add provenance (obtained from start_motion_plan) but not format or validation rules. Much of the semantic detail it provides is about return-value enums, which the output schema already covers.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb (Query) and resource (a planning run keyed by run_id) and names the sibling that produces the id (start_motion_plan), which immediately separates it from list_tasks and get_task_info. It also enumerates the three result dimensions, so an agent knows exactly what it will learn.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The reference to 'run_id from start_motion_plan' establishes the calling context: use this after starting a plan. It gives no explicit exclusions (e.g., when to use list_tasks or get_task_info instead) and no polling guidance, so it stops short of full when/when-not guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_task_infoA
Read one task's configuration: workpieces, placement/allocation, robots, planner methods, collision-semantics flags (verbatim from config), start/end data sources and data completeness. task_id forms: 'ND-SEED-', frozen research task ids (e.g. 'T1_CM2B'), or 'MOCK-*' fixtures.
| Name | Required | Description | Default |
|---|---|---|---|
| task_id | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
| ok | Yes | |
| info | Yes | |
| kind | Yes | |
| mock | No | |
| task_id | Yes | |
| warnings | No | |
| source_id | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description does real work: 'Read' signals a non-mutating operation, 'verbatim from config' tells the agent values are raw/non-normalized, and 'data completeness' warns that returned fields may be partial. It omits error behavior for an unknown or malformed task_id, which is the main remaining gap for a 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.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two tight sentences, zero filler: the payload enumeration comes first and the id-format guidance second. Every clause carries information an agent cannot get from the schema alone.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
An output schema exists, so return-value shape need not be explained, and the description still adds the notable caveat that completeness is reported. What's missing is failure behavior for bad task ids and whether config is static or live — modest gaps for a single-parameter read tool.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 0% and the single task_id param has no schema description, so the description carries the full burden — and it does, spelling out three accepted id forms ('ND-SEED-<seed>', frozen research ids like 'T1_CM2B', and 'MOCK-*' fixtures). It does not say how invalid ids fail or whether these forms are exhaustive.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Opens with a specific verb+resource ('Read one task's configuration') and then enumerates exactly what that configuration contains: workpieces, placement/allocation, robots, planner methods, collision-semantics flags, and data sources. The 'one task' framing implicitly separates it from list_tasks, but no sibling is named explicitly, so it stops short of full differentiation.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Usage is implied by the enumerated payload — an agent can infer this is the tool to reach for when it needs the full config of a single task. However, there is no explicit when-to-use vs. when-to-use-something-else guidance (e.g. versus list_tasks or get_experiment_report), nor any stated preconditions.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_tasksB
List tasks that actually exist in the connected read-only sources (New_Design placement seeds, frozen research-audit tasks, labeled MOCK fixtures). No task ids are invented.
| Name | Required | Description | Default |
|---|---|---|---|
| include_mock | No |
Output Schema
| Name | Required | Description |
|---|---|---|
| ok | Yes | |
| tasks | Yes | |
| server | Yes | |
| sources | Yes | |
| task_count | Yes | |
| server_version | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description usefully discloses that sources are read-only and that no task ids are invented, which adds behavioral context beyond the schema. However, without annotations it does not cover ordering, pagination, permission requirements, or how include_mock affects results.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two tightly written sentences with the core scope front-loaded and no redundant filler. The parenthetical source list earns its place by defining what counts as a task.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple one-parameter listing tool with an output schema, the description covers source scope and the no-invented-ids guarantee. It is incomplete regarding include_mock behavior and result ordering/pagination, which an agent may need before calling.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The sole parameter include_mock has 0% schema description coverage, but the description only alludes to MOCK fixtures in the source list. It does not explain what include_mock controls or what changing its default true value does, so the parameter remains under-specified.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description gives a specific verb and resource ('List tasks') and narrows scope to tasks from connected read-only sources, naming concrete source categories. It is clear what the tool returns, though it does not explicitly distinguish itself from the sibling get_task_info.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
There is no explicit guidance on when to use this tool versus get_task_info or other siblings, and no when-not conditions. The read-only task-listing purpose is implied, but the agent must infer the selection criteria.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
start_motion_planA
Start ONE real offline planning run for a New_Design seed task (task_id 'ND-SEED-') inside an isolated per-run worktree copy; the upstream project is never written (pre/post SHA-256 manifests attached). planner: whitelist ['Lazy_PRM'] (applied to the worktree config). time_budget_seconds: 10-1800 (default 120); on expiry the process tree is killed and status becomes TIMEOUT (never 'no path exists'). request_id (optional, [\w.-]{1,64}) makes retries idempotent. Returns immediately with a run_id; poll get_plan_status. Only one real run at a time.
| Name | Required | Description | Default |
|---|---|---|---|
| planner | No | Lazy_PRM | |
| task_id | Yes | ||
| request_id | No | ||
| time_budget_seconds | No |
Output Schema
| Name | Required | Description |
|---|---|---|
| ok | Yes | |
| seed | No | |
| run_id | Yes | |
| message | Yes | |
| planner | No | |
| task_id | Yes | |
| accepted | Yes | |
| budget_s | No | |
| duplicate | No | |
| execution_status | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the entire burden and does so: isolated per-run worktree copy, upstream project never written with pre/post SHA-256 manifests, timeout kills the process tree and yields TIMEOUT rather than a false 'no path exists', idempotent retries via request_id, and single-run concurrency. This is exactly the mutation-safety and failure-mode context an agent needs.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Front-loaded with the action and its scope, then parameter notes, then the return/poll hint and concurrency rule. Every clause is informational, but the dense semicolon-chained parameter block makes it slightly harder to scan than a cleanly structured description.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For an asynchronous, sandboxed, mutating planning job with an output schema present, the description covers initiation, isolation guarantees, timeout behavior, idempotency, concurrency, and the polling handoff. Nothing an agent needs to invoke it correctly is missing.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, and the description compensates fully for all four parameters: task_id naming pattern, planner whitelist ['Lazy_PRM'] applied to the worktree config, time_budget_seconds bounds 10-1800 with default 120 and expiry semantics, and request_id's regex plus idempotency purpose.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource ('Start ONE real offline planning run for a New_Design seed task') with clear scope: one run, seed task namespace, isolated worktree. The terminal clause 'poll get_plan_status' plus 'Only one real run at a time' separates it from the read-only sibling tool that reports results.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description gives clear usage context: form the task_id as 'ND-SEED-<seed>', start the run, then poll get_plan_status rather than waiting. It also states the concurrency constraint ('Only one real run at a time'). It stops short of explicitly excluding alternatives such as validate_motion, so it is not a full when/when-not statement.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
validate_motionA
Report the independent-validation status bound to a run's candidate path. For NEW local runs this is NOT_RUN until a scene-compatible strict validator is registered - planning success is never treated as PASS, and historical verdicts are never transferred to new paths. For frozen research-audit records the recorded verdict is reported verbatim, bound to the recorded path sha256 and input contract. run_id forms: local 'R-*' runs and historical records like 'rm_next_015_fr69b_transfer_expansion/Q1_RRT_E1' or '.../REF_T1_CM2B_P0'.
| Name | Required | Description | Default |
|---|---|---|---|
| run_id | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
| ok | Yes | |
| run_id | Yes | |
| source | No | |
| details | No | |
| task_id | No | |
| model_version | Yes | |
| validation_method | No | |
| validation_status | Yes | |
| evidence_reference | No | |
| candidate_path_hash | No | |
| error_or_incomplete_reason | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full burden and does so well: it discloses that NEW runs return NOT_RUN, that planning success is never treated as PASS, and that verdicts are never transferred to new paths. It stops short of explicitly stating read-only/side-effect-free behavior, though 'Report' implies it.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Front-loads the purpose, then layers result semantics and finally the run_id format. Dense but each sentence contributes; minor cost is the slightly run-on clause about sha256 binding.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given an output schema exists (return values needn't be described), the description covers purpose, result semantics, and the required parameter's format. An agent has enough to invoke it correctly without further clarification.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The schema provides 0% description coverage for run_id, so the description must compensate. It does, specifying accepted forms: local 'R-*' runs and historical record paths like 'rm_next_015_fr69b_transfer_expansion/Q1_RRT_E1' or '.../REF_T1_CM2B_P0'.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb ('Report') and precise resource ('the independent-validation status bound to a run's candidate path'). This clearly separates it from siblings like get_plan_status or get_experiment_report, which concern planning/report state rather than validation verdicts.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explains the meaning of results in two distinct scenarios (NEW local runs vs. frozen research-audit records), which implies when the output applies. However, it never explicitly routes the agent away from alternatives such as get_plan_status, leaving the when-to-use decision to inference.
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.
6 tool updates
v0.1.0- First observed
get_experiment_report - First observed
get_plan_status - First observed
get_task_info - First observed
list_tasks - First observed
start_motion_plan - First observed
validate_motion
TDQS
Scored across 6 tools
Each tool maps to a distinct action/resource: listing tasks, reading task details, reading frozen experiment reports, starting a planning run, polling run status, and validating a run's path. The frozen-report versus live-run-status split is clearly described and unlikely to be confused.
All tools use snake_case with a clear verb_noun pattern: list_tasks, get_task_info, get_experiment_report, start_motion_plan, get_plan_status, validate_motion. The convention is uniform and predictable.
Six tools is well-scoped for a motion-planning server: task inspection, report reading, run initiation, status polling, and validation are each represented exactly once. There is no redundant or filler tool.
The core lifecycle is covered: discover tasks, inspect them, start a plan, poll status, and validate results. Minor gaps remain, such as canceling/stopping an in-flight planning run or listing available runs/reports directly.
Maintenance
Related MCP Connectors
Governed data discovery, exact queries, decisions, simulations, and runtime utilities over MCP.
Plan projects, develop learning, and inspect agent activity with account-scoped MCP tools.
1Control plane for autonomous software labor. Agents claim objectives over MCP with audit trail.
Public MCP digital twin with synthetic systems and an agent firewall. No customer data.
Related MCP Servers
- AlicenseNot gradedqualityAmaintenanceThis MCP server enables inspecting ROS 2 manipulators, computing kinematics, planning motion, and managing primitive MoveIt planning-scene objects via a typed API, with no physical execution support.Apache 2.0
- AlicenseNot gradedqualityBmaintenanceEnables agents to inspect repositories, manage Golden Packs, plan golden flows, and run asynchronous validation tasks over MCP, providing a deterministic foundation for project-specific workflows.MIT
- AlicenseNot gradedqualityCmaintenanceEnables MCP clients to run bounded robotics tasks, retrieve independently verified results, and reuse checked data or artifacts from the local WorldFuzz platform.MIT
- FlicenseNot gradedqualityCmaintenanceEnables AI agents to search and retrieve source-linked robotics projects, bills of materials, and technical components, compare components, and validate RPPS documents via a remote MCP endpoint.-