Skip to main content
Glama
Lynn-hh

io.github.Lynn-hh/armguard-mcp

plan_to_joints

Read-only

Plans a joint-space motion from the current state to target joint positions without moving the robot; validates the trajectory against the safety envelope and returns a plan ID for execution.

Instructions

Plan (do NOT move) a joint-space motion from the current state to joint_positions [rad]. Returns a plan summary validated against the safety envelope; if status is not 'rejected', pass plan_id to execute_plan. Scaling above the policy cap is clamped.

Input Schema

NameRequiredDescriptionDefault
joint_positionsYesTarget joint positions [rad], one per joint in the order ['fr3_joint1', 'fr3_joint2', 'fr3_joint3', 'fr3_joint4', 'fr3_joint5', 'fr3_joint6', 'fr3_joint7']
velocity_scalingNoFraction of max joint speed (0, 1]
acceleration_scalingNoFraction of max joint accel (0, 1]

Output Schema

NameRequiredDescriptionDefault
kindYes
notesNo
statusYesrejected plans can never be executed; needs_approval requires a human to approve
dry_runYes
plan_idYes
duration_sYes
executableYes
expires_atNoISO-8601 UTC expiry of the plan handle
violationsNo
final_ee_poseYes
num_waypointsYes
force_monitoringYesWhether the backend currently provides an external wrench estimate. Without one the server cannot enforce the contact force limit, and execute_plan refuses to move unless the policy sets force.require_wrench: false
velocity_scalingYes
requires_approvalYes
tcp_path_length_mYes
acceleration_scalingYes
max_joint_travel_radYes
final_joint_positionsYes
start_joint_positionsYes
max_joint_velocity_ratioYesPeak joint speed as a fraction of the joint limit
max_joint_acceleration_ratioYesPeak joint acceleration (estimated from the waypoint timing) as a fraction of the joint limit

Schema Changelog

Changes observed during successful MCP inspections.

  1. First observedv0.1.0

TDQS

A4.5/5.0
Behavior4/5

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

Adds real context beyond the annotations: the plan is validated against the safety envelope, a plan summary with a status field is returned, and scaling above the policy cap is clamped rather than rejected. The readOnlyHint=true annotation aligns with "do NOT move", so no contradiction. It doesn't say what a 'rejected' status implies or whether plan_ids expire.

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?

Front-loads the critical constraint "(do NOT move)" and packs purpose, validation, next step, and clamping behavior into two tight sentences with no filler.

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?

Covers what the tool does, what it returns conceptually (plan summary + status), what to do next (plan_id to execute_plan), and edge-case behavior (clamping). With an output schema present, nothing material is left for the description to carry.

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?

Schema coverage is 100%, so the baseline is 3, but the description adds meaning the schema lacks: the clamping behavior when scaling exceeds the policy cap explains what actually happens at the boundary instead of just stating a max. It also reinforces the [rad] unit and current-state origin for joint_positions.

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?

States a specific verb and resource ("Plan ... a joint-space motion") and disambiguates from pose/Cartesian planning siblings via "joint-space" plus the explicit "do NOT move" scope limit. An agent can pick it apart from plan_to_pose and plan_cartesian_path without opening any schema.

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?

Gives a concrete workflow rule: if status is not 'rejected', pass plan_id to execute_plan — clear downstream handoff. It also implies what not to expect (this tool does not move the robot). It stops short of naming plan_to_pose/plan_cartesian_path as alternatives with a stated selection condition.

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