Skip to main content
Glama
Lynn-hh

io.github.Lynn-hh/armguard-mcp

execute_plan

Destructive

Executes a previously planned robot motion, re-validating safety limits, enforcing human approval, monitoring contact force, and streaming progress; cancelling stops the robot.

Instructions

EXECUTE a previously planned motion on the robot. The server re-validates the plan against the safety envelope, rejects stale/expired/used plans, may ask a human to approve (depending on policy), monitors contact force while moving (aborting and latching an e-stop above the limit), and streams progress. Plan handles are single-use and one plan executes at a time. Refused if the robot provides no force estimate (unless the policy allows it). Cancelling the call stops the robot. In dry-run mode nothing moves.

Input Schema

NameRequiredDescriptionDefault
plan_idYesplan_id returned by a plan_* tool

Output Schema

NameRequiredDescriptionDefault
statusYes
dry_runYes
messageYes
plan_idYes
approvalYesHow the execution was authorised
executedYes
duration_sYes
final_ee_poseNo
max_observed_force_nNo
final_joint_positionsNo

Schema Changelog

Changes observed during successful MCP inspections.

  1. First observedv0.1.0

TDQS

A4.6/5.0
Behavior5/5

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

Goes far beyond the annotations: re-validation against the safety envelope, rejection of stale/used handles, possible human approval gate, live force monitoring with a latching e-stop, progress streaming, single-use handles and serialized execution. Annotations already flag destructive/non-idempotent, and the description adds the concrete consequences behind those hints.

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?

Front-loads the action and stays dense, with each clause covering a distinct behavior (validation, approval, force guard, cancel, dry-run). The middle sentence is packed with many clauses and could be split for readability, but little is wasted.

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

Completeness5/5

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

For a potentially destructive, open-world motion tool with one parameter, the description covers safety gating, refusal conditions, cancellation semantics, and dry-run behavior. An output schema exists, so return-value detail is correctly omitted.

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?

The only parameter is fully documented in the schema (plan_id returned by a plan_* tool), so the baseline is 3. The description adds real semantics on top: the handle is single-use and rejected if stale, expired, or already used, which affects how an agent must manage the value.

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?

Opens with a specific verb in caps plus the resource and scope: 'EXECUTE a previously planned motion on the robot.' This clearly separates it from the plan_* siblings that create plans and from stop_motion/estop that halt motion.

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?

States the precondition (a plan returned by plan_* tools), the single-use/one-at-a-time constraint, and when the call will be refused (stale, expired, used, or no force estimate). It stops short of explicitly routing to stop_motion/estop for the abort case, so there is no full alternative comparison.

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