Skip to main content
Glama

Verify Design

verify
Read-onlyIdempotent

Use this when you need to check a design against a rule set. One verifier, selected by check:

  • 'assembly' — static assembly review ({ file | code }, or the session evaluate_script left): mate validator, default-pose interference, joint topology, mechanical plausibility. ok:false with blocking[] exactly when review_cad's blocking rules fire on these findings; review_cad also sweeps joint ranges and runs physics.

  • 'urdf' — structural validity of a .urdf file ({ urdf_path }).

  • 'dfm' — print-readiness gates declared by dfmSpec() ({ file | code }).

  • 'dfm-preflight' — sheet-metal flat pattern vs a job-shop's ordering rules ({ vendor, material, thicknessIn|thicknessMm, ... }). Returns the vendor's catalog source pages as sources; when disclosure is present, show it with those links.

  • 'assembly-path' — continuous straight-line removal of each assembly part along ±X/±Y/±Z and optional world-space directions. Returns valid directions, blocking parts and one of three states (removable / blocked / unknown); sequence peels the directional blocking graph and reverses it into a build sequence with a model stamp. Fastened-mate and fixed-connect clusters become subassemblies: each is planned recursively inside and installed as one unit at the top level (Step.subassembly). Remaining valid orders use deterministic heuristics (subassemblies first, outside-in, fewest reorientations, fewest tool changes); stuck sets get a budgeted blocking-reduction partition and a sampling fallback whose paths are labelled found-by-search, never proven. A fastener with a fastened-mate fastener declaration (axis, pitch, optional tool envelope) is tested along its helical path and reported motion: helical; a press/snap fit declaration becomes a requires-force step, never simulated. A modelled driver/socket/hex-key envelope swept along the approach axis adds toolBlocked { fastener, blockers } and a failing S2 ledger entry; unmodelled tools add nothing. Threaded fasteners without metadata stay unknown: non-straight-path. stability: true adds an approximate P3 support check at each build step: each part's mesh centre of mass must project inside the support polygon of its contacts with already-stable parts (declared or inferred base/fixture under gravity, default [0,0,-1]); unsupported parts become needsHold { part, reason, supports } and their steps carry stability: 'needs-hold', while stable steps may carry heldBy. This is a projection, not gravity simulation, friction, tipping or fixture analysis. disassemblyOrder runs a deterministic greedy removal pass. Watertight mesh approximation, conservative contact, no rotation/mate/hardware certification.

  • 'swept-collision' — sweep declared joint range(s) and report colliding poses.

  • 'reachable' — inverse-kinematics reachability for an end-effector ({ tip_link, target_position, ... }).

  • 'geometry-quality' — one solid body's BREP tiny faces and short edges (ids, locations, mm²/mm), plus sampled mirror symmetry about centroid XY/YZ/XZ and principal inertia planes ({ file | code, feature_id?, tiny_face_area_mm2?, tiny_face_relative?, short_edge_length_mm?, symmetry_tolerance_mm?, mesh_deflection_mm?, asserted_plane?: { origin, normal } }). Relative area is a fraction of total surface area; thresholds are ORed. Candidate planes are discovery; only an asserted plane gates symmetry. Approximate sampled tessellation, not exact BREP proof.

  • 'fastener-installation' — measured explicit catalog-screw installation stations on lowered assembly BREP ({ file | code, fasteners:[{ part, against, engagementPart?, minEngagementMm?, maxProtrusionMm? }], toleranceMm?, angleToleranceDeg? }). Reports annular bearing gap, bore axis/diameter/overlap and receiver geometric engagement/protrusion. Unknown or zero coverage cannot pass. Simplified threads do not certify torque, preload or strength.

  • 'mounting-holes' — fastened mates: hole pairs one screw can use (equal, or clearance over a tap drill / hole({ thread }) of the same metric size; hole-free faces are a rigid bond) and fastener holes meeting at the contact face are coaxial. Sides it cannot resolve are info, never mismatches.

  • 'load-capacity' — will it hold? Closed-form Euler-Bernoulli beam check ({ loads, materials, ... }), or mode:'fea' to solve the script's feaStudy (quadratic-tet FEA, CalculiX) — both return { ok, safetyFactor, elements[{ partName, stressPa, yieldPa, safetyFactor }], failures[], diagnostics }; fea adds the threshold, the stress regions as @kc[...] faces with their location, and fea { peakStressPa, maxDisplacementMm, meshTrusted, peakAtSupportPa, refinement }; it refines the mesh automatically until the stress is trusted (refine: false for one solve).

  • 'static-hold' — gravitational holding torque/force at a sampled pose grid vs each actuated joint's declared actuator capacity ({ joint?, pose?, gravity?, min_torque_margin_pct?, range_samples? }).

  • 'motion-load' — loads on each driven joint (mechanicalJoint on a revolute mate) while the model moves: gravity, inertia from the animationView tracks (finite differences), optional external forces. Mass and inertia come from the solids and density/material, or a part's massKg. Returns per joint peak torque vs the mechanicalJoint torqueNm (margin; < 1x error, < 2x warning), axial / radial force and bending moment on the actuator shaft (checked only against radialLimitN / axialLimitN; without them 'no rating, not checked'), the radial load on each of up to two coaxial supports (each at its station on the shaft: the actuator at the joint origin, else the support's connector on the axis, else the middle of its material nearest the shaft; an ambiguous station is a mechanism.load.not-resolved warning, not a number), the worst pose, a torque-vs-time series, and partLoads (the worst wrench per part and side in that part's own frame, which feaStudy({ loadsFrom }) consumes) ({ file | code, motion_mode?: 'tracks'|'range'|'poses', motion_poses?: [{ joint: value }], sample_ms?, range_samples?, quasi_static?, gravity?, motion_loads?: [{ part, point, force, fromMs?, toMs? }], supports?: { joint: [parts] }, series_points? }). Pass supports to compare with and without a bushing. Rigid bodies, tree mate graphs, no friction.

  • 'physics' — full mechanism truth with physics engine: kinematic disconnect / interference / DOF checks plus static equilibrium and drop-on-release under gravity ({ file | code, assembly?, physics? }). Returns { ok, mechanism: 'real'|'broken'|'unverified', failures[], coverage }.

  • 'edge-radius' — general edge-break specification on final BREP ({ file | code, min_radius_mm?, max_radius_mm?, require_edge_break?: 'external'|'internal'|'all', feature_id?, assembly?, parts?, edges?, faces? }). Reports sharp convex/concave edges, analytic cylindrical/toroidal fillet radii and spherical junctions, and heuristic planar chamfer strips. Radius bounds apply only to fillets; selectors/points are part-local. Unknown/empty coverage cannot pass. All params except check are check-specific and forwarded verbatim; each check fails closed on its own missing required params.

Input Schema

NameRequiredDescriptionDefault
dxfNocheck:'dfm-preflight' — path to a DXF file.
codeNoInline kernelCAD script source (same checks as `file`).
fileNoPath to a .kcad.ts script (assembly/dfm/dfm-preflight/swept-collision/reachable/mounting-holes/load-capacity/static-hold/geometry-quality/edge-radius/requirements). Hosted server: cannot read files from your machine — pass `code`, or `project:<slug>` for a saved project.
modeNocheck:'load-capacity' — 'beam' (default), 'stub', or 'fea' (solve the script's feaStudy: CalculiX + gmsh when installed, else the in-process voxel estimate).
poseNocheck:'static-hold' — explicit pose (joint name -> deg/mm) or array of poses; omit to sample a grid across the evaluated joint's range.
seedNocheck:'reachable' — numeric IK seed pose (joint name -> deg/mm).
checkYesWhich verification to run. Omit only when passing call-time `requirements`; then the requirements ledger is the verification.
edgesNocheck:'edge-radius' — EdgeQuery or @kc[...] edge ref(s); intersected with faces. Query near sorts, it does not filter.
facesNocheck:'edge-radius' — FaceQuery or @kc[...] face ref(s); includes incident edges and fillets on selected faces.
jointNocheck:'swept-collision' — joint to sweep; omit to sweep every declared joint. check:'static-hold' — joint to evaluate; omit to evaluate every joint with a declared actuator.
loadsNocheck:'load-capacity' — partName -> { force?: [Fx,Fy,Fz] N, torque?: [Tx,Ty,Tz] N*m }.
partsNocheck:'edge-radius' — explicit assembly part names (default all).
rangeNocheck:'swept-collision' — [lower, upper, step] in joint-native units.
studyNocheck:'load-capacity' mode:'fea' — feaStudy name (default: the last declared one).
refineNocheck:'load-capacity' mode:'fea' — one automatic finer pass (0.75x element size) when the stress is untrusted, inside the element budget (default true); false solves once at the study's meshSize.
vendorNocheck:'dfm-preflight' — vendor SKU (required for that check).
gravityNocheck:'static-hold' — gravity vector, m/s^2, world frame (default [0, 0, -9.81]). check:'assembly-path' with stability:true — gravity direction, world frame, magnitude ignored (default [0, 0, -1]).
serviceNocheck:'dfm-preflight' — service.
assemblyNoAssembly name; defaults to the first captured assembly.
fixturesNocheck:'assembly-path' with stability:true — declared base/fixture part names, stable from step 1. Default: the lowest part(s) along gravity.
heatmapsNocheck:'load-capacity' mode:'fea' — also render stress heatmap PNGs (default false).
materialNocheck:'dfm-preflight' — material SKU (required for that check).
sequenceNocheck:'assembly-path' — plan a build sequence { steps, model, unknown, search?, requiresForce?, toolBlocked?, needsHold? }. Fastened/fixed clusters become subassemblies planned inside and installed as one unit; steps carry the insertion direction (reverse removal), and may be motion: helical (declared fastener), requires-force (press/snap, not proven) or search. Stuck sets use a budgeted partition; non-straight paths found by sampling are labelled found-by-search and are not proven. Blocked and unknown parts are not reported as impossible.
supportsNocheck:'motion-load' — mechanicalJoint name -> support part names to use instead of the declared supports (compare with / without a bushing).
tip_linkNocheck:'reachable' — end-effector part name (required for that check).
fastenersNocheck:'fastener-installation' — explicit named stations; empty means no coverage.
featureIdNocheck:'dfm-preflight' — FeatureId to scope to.
materialsNocheck:'load-capacity' — partName -> material declaration.
mesh_sizeNocheck:'load-capacity' mode:'fea' — element size override, mm.
sample_msNocheck:'motion-load' — timeline sample step, ms (default 20). Inertia peaks depend on it at keyframe velocity steps.
stabilityNocheck:'assembly-path' — run the approximate P3 static-stability pass on the sequence. Each part's closed-mesh volume centroid (uniform density) must project inside the convex hull of its contacts with already-stable parts. Unsupported parts become needsHold { part, reason, supports } and ok:false; a stable step may carry heldBy. Not a physics simulation.
urdf_pathNocheck:'urdf' — path to the .urdf file.
directionsNocheck:'assembly-path' — additional nonzero world-space removal vectors; normalized and deduplicated.
feature_idNocheck:'geometry-quality' — body feature to measure; defaults to script return. check:'edge-radius' — lowered feature; default the returned model.
motion_modeNocheck:'motion-load' — 'tracks' (default): along the animationView timeline with inertia; 'range': quasi-static grid over each driven joint's limits; 'poses': exactly motion_poses (a user-named pose is one entry).
thicknessInNocheck:'dfm-preflight' — material thickness in inches.
thicknessMmNocheck:'dfm-preflight' — material thickness in millimeters.
toleranceMmNocheck:'fastener-installation' — linear tolerance, default .05 mm.
motion_loadsNocheck:'motion-load' — external forces: [{ part, point: [x,y,z] mm in the part's modeled frame, force: [Fx,Fy,Fz] N world, fromMs?, toMs? }].
motion_posesNocheck:'motion-load' motion_mode:'poses' — explicit mate poses, each an object of joint name -> value in degrees.
quasi_staticNocheck:'motion-load' — drop velocity/acceleration terms (gravity and external loads only).
requirementsNoCall-time external requirements ([{ name, predicate }]) measured in the same ledger as script require(), dfmSpec and feaStudy, tagged source: 'external' and never persisted. The predicate is the serializable form of require(): { metric: clearance | distance | mass | volume | bbox | centerOfMass | count | innerLoops | angle | concentric | coplanar, a?, b?, op: gte | lte | eq | between | within, limit, tolerance?, density? }. Operands are { kind: body | faces | edges | part, ref: <feature id/name or part name>, query? }. With `check` omitted the ledger is the whole verification; check 'requirements' is the explicit form.
max_radius_mmNocheck:'edge-radius' — maximum fillet radius in mm; must be >= min_radius_mm.
min_radius_mmNocheck:'edge-radius' — minimum fillet radius in mm (does not imply sharp-edge prohibition).
prefer_solverNocheck:'reachable' — force the IK path ('auto' default).
range_samplesNocheck:'static-hold' — grid density per evaluated joint when `pose` is omitted (default 9). check:'motion-load' motion_mode:'range' — grid points per joint (default 5).
series_pointsNocheck:'motion-load' — max torque-vs-time points per joint in the result (default 120; 0 omits the series).
asserted_planeNocheck:'geometry-quality' — optional required mirror plane in model coordinates; normal is normalized and must be nonzero.
max_iterationsNocheck:'reachable' — numeric-path iteration cap.
refreshCatalogNocheck:'dfm-preflight' — force vendor catalog refresh.
target_positionNocheck:'reachable' — target [x, y, z] mm (world frame).
disassemblyOrderNocheck:'assembly-path' — iteratively remove freed parts and return removalOrder or stuckParts.
angleToleranceDegNocheck:'fastener-installation' — axis tilt tolerance, default 1 degree.
threadedFastenersNocheck:'assembly-path' — part names that need a helical removal. Catalog screw/bolt/nut families are detected automatically; without a fastened-mate fastener declaration (axis/pitch) they remain unknown: non-straight-path. Declare the motion on arm.mate(..., 'fastened', { fastener: { part, axis, pitchMm, tool? }, fit?: { kind, part? } }).
contactToleranceMmNocheck:'assembly-path' with stability:true — surface distance at or below which parts count as touching (default 0.05 mm).
mesh_deflection_mmNocheck:'geometry-quality' — absolute mesh deflection, defaults to tolerance/4; must be <= tolerance/2.
require_edge_breakNocheck:'edge-radius' — prohibit sharp convex/external, concave/internal, or all edges.
target_orientationNocheck:'reachable' — target XYZ Euler angles in radians.
tiny_face_area_mm2Nocheck:'geometry-quality' — flag faces strictly below this absolute area; zero disables.
tiny_face_relativeNocheck:'geometry-quality' — fraction of total BREP surface area, ORed with absolute threshold.
short_edge_length_mmNocheck:'geometry-quality' — flag edges strictly below this length; zero disables.
min_torque_margin_pctNocheck:'static-hold' — safety-margin floor as a percent of actuator capacity (default 20).
position_tolerance_mmNocheck:'reachable' — position tolerance in mm.
symmetry_tolerance_mmNocheck:'geometry-quality' — maximum sampled mirror-to-mesh distance, mm.
collision_tolerance_mm3Nocheck:'swept-collision' — BREP intersection volume tolerance (mm^3).
safety_factor_thresholdNocheck:'load-capacity' — pass/fail safety-factor floor (default 1.5; mode 'fea': the study's minSafetyFactor when declared).
orientation_tolerance_radNocheck:'reachable' — orientation tolerance in radians.

Output Schema

NameRequiredDescriptionDefault

No arguments

Schema Changelog

Changes observed during successful MCP inspections.

  1. Changed8 schema fields changed
    • addedInput schema / properties / contactToleranceMm
      Added value: +{
      +  "description": "check:'assembly-path' with stability:true — surface distance at or below which parts count as touching (default 0.05 mm).",
      +  "minimum": 0,
      +  "type": "number"
      +}
    • addedInput schema / properties / fixtures
      Added value: +{
      +  "description": "check:'assembly-path' with stability:true — declared base/fixture part names, stable from step 1. Default: the lowest part(s) along gravity.",
      +  "items": {
      +    "minLength": 1,
      +    "type": "string"
      +  },
      +  "type": "array",
      +  "uniqueItems": true
      +}
    • changedInput schema / properties / gravity / description
      Previous value: -"check:'static-hold' — gravity vector, m/s^2, world frame (default [0, 0, -9.81])."New value: +"check:'static-hold' — gravity vector, m/s^2, world frame (default [0, 0, -9.81]). check:'assembly-path' with stability:true — gravity direction, world frame, magnitude ignored (default [0, 0, -1])."
    • changedInput schema / properties / motion_mode / description
      Previous value: -"check:'motion-load' — 'tracks' (default): along the animationView timeline with inertia; 'range': quasi-static grid over each driven joint's limits."New value: +"check:'motion-load' — 'tracks' (default): along the animationView timeline with inertia; 'range': quasi-static grid over each driven joint's limits; 'poses': exactly motion_poses (a user-named pose is one entry)."
    • changedInput schema / properties / motion_mode / enum
      Previous value: -[
      -  "tracks",
      -  "range"
      -]New value: +[
      +  "tracks",
      +  "range",
      +  "poses"
      +]
    • addedInput schema / properties / motion_poses
      Added value: +{
      +  "description": "check:'motion-load' motion_mode:'poses' — explicit mate poses, each an object of joint name -> value in degrees.",
      +  "items": {
      +    "additionalProperties": {
      +      "type": "number"
      +    },
      +    "type": "object"
      +  },
      +  "type": "array"
      +}
    • changedInput schema / properties / sequence / description
      Previous value: -"check:'assembly-path' — plan a build sequence { steps, model, unknown, search?, requiresForce?, toolBlocked? }. Fastened/fixed clusters become subassemblies planned inside and installed as one unit; steps carry the insertion direction (reverse removal), and may be motion: helical (declared fastener), requires-force (press/snap, not proven) or search. Stuck sets use a budgeted partition; non-straight paths found by sampling are labelled found-by-search and are not proven. Blocked and unknown parts are not reported as impossible."New value: +"check:'assembly-path' — plan a build sequence { steps, model, unknown, search?, requiresForce?, toolBlocked?, needsHold? }. Fastened/fixed clusters become subassemblies planned inside and installed as one unit; steps carry the insertion direction (reverse removal), and may be motion: helical (declared fastener), requires-force (press/snap, not proven) or search. Stuck sets use a budgeted partition; non-straight paths found by sampling are labelled found-by-search and are not proven. Blocked and unknown parts are not reported as impossible."
    • addedInput schema / properties / stability
      Added value: +{
      +  "description": "check:'assembly-path' — run the approximate P3 static-stability pass on the sequence. Each part's closed-mesh volume centroid (uniform density) must project inside the convex hull of its contacts with already-stable parts. Unsupported parts become needsHold { part, reason, supports } and ok:false; a stable step may carry heldBy. Not a physics simulation.",
      +  "type": "boolean"
      +}
  2. Changed2 schema fields changed
    • changedInput schema / properties / sequence / description
      Previous value: -"check:'assembly-path' — plan a build sequence { steps, model, unknown, search? }. Fastened/fixed clusters become subassemblies planned inside and installed as one unit; steps carry the insertion direction (reverse removal). Stuck sets use a budgeted partition; non-straight paths found by sampling are labelled found-by-search and are not proven. Blocked and unknown parts are not reported as impossible."New value: +"check:'assembly-path' — plan a build sequence { steps, model, unknown, search?, requiresForce?, toolBlocked? }. Fastened/fixed clusters become subassemblies planned inside and installed as one unit; steps carry the insertion direction (reverse removal), and may be motion: helical (declared fastener), requires-force (press/snap, not proven) or search. Stuck sets use a budgeted partition; non-straight paths found by sampling are labelled found-by-search and are not proven. Blocked and unknown parts are not reported as impossible."
    • changedInput schema / properties / threadedFasteners / description
      Previous value: -"check:'assembly-path' — part names that need a helical removal. Catalog screw/bolt/nut families are detected automatically; these are reported unknown: non-straight-path until P2."New value: +"check:'assembly-path' — part names that need a helical removal. Catalog screw/bolt/nut families are detected automatically; without a fastened-mate fastener declaration (axis/pitch) they remain unknown: non-straight-path. Declare the motion on arm.mate(..., 'fastened', { fastener: { part, axis, pitchMm, tool? }, fit?: { kind, part? } })."
  3. Changed6 schema fields changed
    • changedInput schema / properties / check / description
      Previous value: -"Which verification to run."New value: +"Which verification to run. Omit only when passing call-time `requirements`; then the requirements ledger is the verification."
    • changedInput schema / properties / check / enum
      Previous value: -[
      -  "assembly",
      -  "urdf",
      -  "dfm",
      -  "dfm-preflight",
      -  "swept-collision",
      -  "reachable",
      -  "mounting-holes",
      -  "load-capacity",
      -  "static-hold",
      -  "motion-load",
      -  "fastener-installation",
      -  "geometry-quality",
      -  "assembly-path",
      -  "edge-radius"
      -]New value: +[
      +  "assembly",
      +  "urdf",
      +  "dfm",
      +  "dfm-preflight",
      +  "swept-collision",
      +  "reachable",
      +  "mounting-holes",
      +  "load-capacity",
      +  "static-hold",
      +  "motion-load",
      +  "fastener-installation",
      +  "geometry-quality",
      +  "assembly-path",
      +  "edge-radius",
      +  "physics",
      +  "requirements"
      +]
    • changedInput schema / properties / file / description
      Previous value: -"Path to a .kcad.ts script (assembly/dfm/dfm-preflight/swept-collision/reachable/mounting-holes/load-capacity/static-hold/geometry-quality/edge-radius). Hosted server: cannot read files from your machine — pass `code`, or `project:<slug>` for a saved project."New value: +"Path to a .kcad.ts script (assembly/dfm/dfm-preflight/swept-collision/reachable/mounting-holes/load-capacity/static-hold/geometry-quality/edge-radius/requirements). Hosted server: cannot read files from your machine — pass `code`, or `project:<slug>` for a saved project."
    • addedInput schema / properties / requirements
      Added value: +{
      +  "description": "Call-time external requirements ([{ name, predicate }]) measured in the same ledger as script require(), dfmSpec and feaStudy, tagged source: 'external' and never persisted. The predicate is the serializable form of require(): { metric: clearance | distance | mass | volume | bbox | centerOfMass | count | innerLoops | angle | concentric | coplanar, a?, b?, op: gte | lte | eq | between | within, limit, tolerance?, density? }. Operands are { kind: body | faces | edges | part, ref: <feature id/name or part name>, query? }. With `check` omitted the ledger is the whole verification; check 'requirements' is the explicit form.",
      +  "items": {
      +    "additionalProperties": true,
      +    "type": "object"
      +  },
      +  "type": "array"
      +}
    • addedInput schema / properties / sequence
      Added value: +{
      +  "description": "check:'assembly-path' — plan a build sequence { steps, model, unknown, search? }. Fastened/fixed clusters become subassemblies planned inside and installed as one unit; steps carry the insertion direction (reverse removal). Stuck sets use a budgeted partition; non-straight paths found by sampling are labelled found-by-search and are not proven. Blocked and unknown parts are not reported as impossible.",
      +  "type": "boolean"
      +}
    • addedInput schema / properties / threadedFasteners
      Added value: +{
      +  "description": "check:'assembly-path' — part names that need a helical removal. Catalog screw/bolt/nut families are detected automatically; these are reported unknown: non-straight-path until P2.",
      +  "items": {
      +    "type": "string"
      +  },
      +  "type": "array"
      +}
  4. Changed8 schema fields changed
    • removedInput schema / properties / body_bbox
      Removed value: -{
      -  "description": "check:'body-likeness' — body AABB { min:[x,y,z], max:[x,y,z] } in mm.",
      -  "type": "object"
      -}
    • removedInput schema / properties / body_feature_id
      Removed value: -{
      -  "description": "check:'body-likeness' — FeatureId to read body AABB from when body_bbox omitted.",
      -  "type": "string"
      -}
    • removedInput schema / properties / cabin_bbox
      Removed value: -{
      -  "description": "check:'body-likeness' — optional cabin/greenhouse AABB for automated cabin-aft.",
      -  "type": "object"
      -}
    • changedInput schema / properties / check / enum
      Previous value: -[
      -  "assembly",
      -  "urdf",
      -  "dfm",
      -  "dfm-preflight",
      -  "swept-collision",
      -  "reachable",
      -  "mounting-holes",
      -  "load-capacity",
      -  "static-hold",
      -  "motion-load",
      -  "body-likeness",
      -  "fastener-installation",
      -  "geometry-quality",
      -  "assembly-path",
      -  "edge-radius"
      -]New value: +[
      +  "assembly",
      +  "urdf",
      +  "dfm",
      +  "dfm-preflight",
      +  "swept-collision",
      +  "reachable",
      +  "mounting-holes",
      +  "load-capacity",
      +  "static-hold",
      +  "motion-load",
      +  "fastener-installation",
      +  "geometry-quality",
      +  "assembly-path",
      +  "edge-radius"
      +]
    • removedInput schema / properties / length_axis
      Removed value: -{
      -  "description": "check:'body-likeness' — wheelbase axis (default 'x').",
      -  "enum": [
      -    "x",
      -    "y"
      -  ],
      -  "type": "string"
      -}
    • removedInput schema / properties / require_stills
      Removed value: -{
      -  "description": "check:'body-likeness' — require still_verdicts (default true).",
      -  "type": "boolean"
      -}
    • removedInput schema / properties / still_verdicts
      Removed value: -{
      -  "description": "check:'body-likeness' — agent ortho still checklist [{ code, passed, finding, view? }]. Required codes: side-body-over-wheels, side-cabin-aft, rear-haunch, ortho-proportions-vs-reference.",
      -  "items": {
      -    "type": "object"
      -  },
      -  "type": "array"
      -}
    • removedInput schema / properties / wheels
      Removed value: -{
      -  "description": "check:'body-likeness' — wheel centres + tire radii [{ center:[x,y,z], radius }].",
      -  "items": {
      -    "type": "object"
      -  },
      -  "type": "array"
      -}
  5. Changed3 schema fields changed
    • addedInput schema / properties / edges / type
      Added value: +[
      +  "object",
      +  "array",
      +  "string"
      +]
    • addedInput schema / properties / faces / type
      Added value: +[
      +  "object",
      +  "array",
      +  "string"
      +]
    • addedInput schema / properties / pose / type
      Added value: +[
      +  "object",
      +  "array"
      +]
  6. Changed8 schema fields changed
    • changedInput schema / properties / check / enum
      Previous value: -[
      -  "assembly",
      -  "urdf",
      -  "dfm",
      -  "dfm-preflight",
      -  "swept-collision",
      -  "reachable",
      -  "mounting-holes",
      -  "load-capacity",
      -  "static-hold",
      -  "body-likeness",
      -  "fastener-installation",
      -  "geometry-quality",
      -  "assembly-path",
      -  "edge-radius"
      -]New value: +[
      +  "assembly",
      +  "urdf",
      +  "dfm",
      +  "dfm-preflight",
      +  "swept-collision",
      +  "reachable",
      +  "mounting-holes",
      +  "load-capacity",
      +  "static-hold",
      +  "motion-load",
      +  "body-likeness",
      +  "fastener-installation",
      +  "geometry-quality",
      +  "assembly-path",
      +  "edge-radius"
      +]
    • addedInput schema / properties / motion_loads
      Added value: +{
      +  "description": "check:'motion-load' — external forces: [{ part, point: [x,y,z] mm in the part's modeled frame, force: [Fx,Fy,Fz] N world, fromMs?, toMs? }].",
      +  "items": {
      +    "properties": {
      +      "force": {
      +        "items": {
      +          "type": "number"
      +        },
      +        "maxItems": 3,
      +        "minItems": 3,
      +        "type": "array"
      +      },
      +      "fromMs": {
      +        "type": "number"
      +      },
      +      "part": {
      +        "type": "string"
      +      },
      +      "point": {
      +        "items": {
      +          "type": "number"
      +        },
      +        "maxItems": 3,
      +        "minItems": 3,
      +        "type": "array"
      +      },
      +      "toMs": {
      +        "type": "number"
      +      }
      +    },
      +    "required": [
      +      "part",
      +      "point",
      +      "force"
      +    ],
      +    "type": "object"
      +  },
      +  "type": "array"
      +}
    • addedInput schema / properties / motion_mode
      Added value: +{
      +  "description": "check:'motion-load' — 'tracks' (default): along the animationView timeline with inertia; 'range': quasi-static grid over each driven joint's limits.",
      +  "enum": [
      +    "tracks",
      +    "range"
      +  ],
      +  "type": "string"
      +}
    • addedInput schema / properties / quasi_static
      Added value: +{
      +  "description": "check:'motion-load' — drop velocity/acceleration terms (gravity and external loads only).",
      +  "type": "boolean"
      +}
    • changedInput schema / properties / range_samples / description
      Previous value: -"check:'static-hold' — grid density per evaluated joint when `pose` is omitted (default 9)."New value: +"check:'static-hold' — grid density per evaluated joint when `pose` is omitted (default 9). check:'motion-load' motion_mode:'range' — grid points per joint (default 5)."
    • addedInput schema / properties / sample_ms
      Added value: +{
      +  "description": "check:'motion-load' — timeline sample step, ms (default 20). Inertia peaks depend on it at keyframe velocity steps.",
      +  "type": "number"
      +}
    • addedInput schema / properties / series_points
      Added value: +{
      +  "description": "check:'motion-load' — max torque-vs-time points per joint in the result (default 120; 0 omits the series).",
      +  "type": "number"
      +}
    • addedInput schema / properties / supports
      Added value: +{
      +  "description": "check:'motion-load' — mechanicalJoint name -> support part names to use instead of the declared supports (compare with / without a bushing).",
      +  "type": "object"
      +}
  7. Changed1 schema field changed
    • changedInput schema / properties / mode / description
      Previous value: -"check:'load-capacity' — 'beam' (default), 'stub', or 'fea' (solve the script's feaStudy; needs the CalculiX + gmsh toolchain)."New value: +"check:'load-capacity' — 'beam' (default), 'stub', or 'fea' (solve the script's feaStudy: CalculiX + gmsh when installed, else the in-process voxel estimate)."
  8. Changed9 schema fields changed
    • changedInput schema / properties / check / enum
      Previous value: -[
      -  "assembly",
      -  "urdf",
      -  "dfm",
      -  "dfm-preflight",
      -  "swept-collision",
      -  "reachable",
      -  "mounting-holes",
      -  "load-capacity",
      -  "static-hold",
      -  "body-likeness",
      -  "fastener-installation",
      -  "geometry-quality",
      -  "assembly-path"
      -]New value: +[
      +  "assembly",
      +  "urdf",
      +  "dfm",
      +  "dfm-preflight",
      +  "swept-collision",
      +  "reachable",
      +  "mounting-holes",
      +  "load-capacity",
      +  "static-hold",
      +  "body-likeness",
      +  "fastener-installation",
      +  "geometry-quality",
      +  "assembly-path",
      +  "edge-radius"
      +]
    • addedInput schema / properties / edges
      Added value: +{
      +  "description": "check:'edge-radius' — EdgeQuery or @kc[...] edge ref(s); intersected with faces. Query near sorts, it does not filter."
      +}
    • addedInput schema / properties / faces
      Added value: +{
      +  "description": "check:'edge-radius' — FaceQuery or @kc[...] face ref(s); includes incident edges and fillets on selected faces."
      +}
    • changedInput schema / properties / feature_id / description
      Previous value: -"check:'geometry-quality' — body feature to measure; defaults to script return."New value: +"check:'geometry-quality' — body feature to measure; defaults to script return. check:'edge-radius' — lowered feature; default the returned model."
    • changedInput schema / properties / file / description
      Previous value: -"Path to a .kcad.ts script (assembly/dfm/dfm-preflight/swept-collision/reachable/mounting-holes/load-capacity/static-hold/geometry-quality). Hosted server: cannot read files from your machine — pass `code`, or `project:<slug>` for a saved project."New value: +"Path to a .kcad.ts script (assembly/dfm/dfm-preflight/swept-collision/reachable/mounting-holes/load-capacity/static-hold/geometry-quality/edge-radius). Hosted server: cannot read files from your machine — pass `code`, or `project:<slug>` for a saved project."
    • addedInput schema / properties / max_radius_mm
      Added value: +{
      +  "description": "check:'edge-radius' — maximum fillet radius in mm; must be >= min_radius_mm.",
      +  "minimum": 0,
      +  "type": "number"
      +}
    • addedInput schema / properties / min_radius_mm
      Added value: +{
      +  "description": "check:'edge-radius' — minimum fillet radius in mm (does not imply sharp-edge prohibition).",
      +  "minimum": 0,
      +  "type": "number"
      +}
    • addedInput schema / properties / parts
      Added value: +{
      +  "description": "check:'edge-radius' — explicit assembly part names (default all).",
      +  "items": {
      +    "minLength": 1,
      +    "type": "string"
      +  },
      +  "minItems": 1,
      +  "type": "array",
      +  "uniqueItems": true
      +}
    • addedInput schema / properties / require_edge_break
      Added value: +{
      +  "description": "check:'edge-radius' — prohibit sharp convex/external, concave/internal, or all edges.",
      +  "enum": [
      +    "external",
      +    "internal",
      +    "all"
      +  ],
      +  "type": "string"
      +}
  9. Changed11 schema fields changed
    • addedInput schema / properties / asserted_plane
      Added value: +{
      +  "additionalProperties": false,
      +  "description": "check:'geometry-quality' — optional required mirror plane in model coordinates; normal is normalized and must be nonzero.",
      +  "properties": {
      +    "normal": {
      +      "items": {
      +        "type": "number"
      +      },
      +      "maxItems": 3,
      +      "minItems": 3,
      +      "type": "array"
      +    },
      +    "origin": {
      +      "items": {
      +        "type": "number"
      +      },
      +      "maxItems": 3,
      +      "minItems": 3,
      +      "type": "array"
      +    }
      +  },
      +  "required": [
      +    "origin",
      +    "normal"
      +  ],
      +  "type": "object"
      +}
    • changedInput schema / properties / check / enum
      Previous value: -[
      -  "assembly",
      -  "urdf",
      -  "dfm",
      -  "dfm-preflight",
      -  "swept-collision",
      -  "reachable",
      -  "mounting-holes",
      -  "load-capacity",
      -  "static-hold",
      -  "body-likeness",
      -  "fastener-installation"
      -]New value: +[
      +  "assembly",
      +  "urdf",
      +  "dfm",
      +  "dfm-preflight",
      +  "swept-collision",
      +  "reachable",
      +  "mounting-holes",
      +  "load-capacity",
      +  "static-hold",
      +  "body-likeness",
      +  "fastener-installation",
      +  "geometry-quality",
      +  "assembly-path"
      +]
    • addedInput schema / properties / directions
      Added value: +{
      +  "description": "check:'assembly-path' — additional nonzero world-space removal vectors; normalized and deduplicated.",
      +  "items": {
      +    "items": {
      +      "type": "number"
      +    },
      +    "maxItems": 3,
      +    "minItems": 3,
      +    "type": "array"
      +  },
      +  "maxItems": 64,
      +  "type": "array"
      +}
    • addedInput schema / properties / disassemblyOrder
      Added value: +{
      +  "description": "check:'assembly-path' — iteratively remove freed parts and return removalOrder or stuckParts.",
      +  "type": "boolean"
      +}
    • addedInput schema / properties / feature_id
      Added value: +{
      +  "description": "check:'geometry-quality' — body feature to measure; defaults to script return.",
      +  "type": "string"
      +}
    • changedInput schema / properties / file / description
      Previous value: -"Path to a .kcad.ts script (assembly/dfm/dfm-preflight/swept-collision/reachable/mounting-holes/load-capacity/static-hold). Hosted server: cannot read files from your machine — pass `code`, or `project:<slug>` for a saved project."New value: +"Path to a .kcad.ts script (assembly/dfm/dfm-preflight/swept-collision/reachable/mounting-holes/load-capacity/static-hold/geometry-quality). Hosted server: cannot read files from your machine — pass `code`, or `project:<slug>` for a saved project."
    • addedInput schema / properties / mesh_deflection_mm
      Added value: +{
      +  "description": "check:'geometry-quality' — absolute mesh deflection, defaults to tolerance/4; must be <= tolerance/2.",
      +  "minimum": 1e-7,
      +  "type": "number"
      +}
    • addedInput schema / properties / short_edge_length_mm
      Added value: +{
      +  "default": 0.1,
      +  "description": "check:'geometry-quality' — flag edges strictly below this length; zero disables.",
      +  "minimum": 0,
      +  "type": "number"
      +}
    • addedInput schema / properties / symmetry_tolerance_mm
      Added value: +{
      +  "default": 0.05,
      +  "description": "check:'geometry-quality' — maximum sampled mirror-to-mesh distance, mm.",
      +  "minimum": 0.000001,
      +  "type": "number"
      +}
    • addedInput schema / properties / tiny_face_area_mm2
      Added value: +{
      +  "default": 0.01,
      +  "description": "check:'geometry-quality' — flag faces strictly below this absolute area; zero disables.",
      +  "minimum": 0,
      +  "type": "number"
      +}
    • addedInput schema / properties / tiny_face_relative
      Added value: +{
      +  "default": 0,
      +  "description": "check:'geometry-quality' — fraction of total BREP surface area, ORed with absolute threshold.",
      +  "maximum": 1,
      +  "minimum": 0,
      +  "type": "number"
      +}
  10. Changed4 schema fields changed
    • addedInput schema / properties / angleToleranceDeg
      Added value: +{
      +  "description": "check:'fastener-installation' — axis tilt tolerance, default 1 degree.",
      +  "maximum": 90,
      +  "minimum": 0,
      +  "type": "number"
      +}
    • changedInput schema / properties / check / enum
      Previous value: -[
      -  "assembly",
      -  "urdf",
      -  "dfm",
      -  "dfm-preflight",
      -  "swept-collision",
      -  "reachable",
      -  "mounting-holes",
      -  "load-capacity",
      -  "static-hold",
      -  "body-likeness"
      -]New value: +[
      +  "assembly",
      +  "urdf",
      +  "dfm",
      +  "dfm-preflight",
      +  "swept-collision",
      +  "reachable",
      +  "mounting-holes",
      +  "load-capacity",
      +  "static-hold",
      +  "body-likeness",
      +  "fastener-installation"
      +]
    • addedInput schema / properties / fasteners
      Added value: +{
      +  "description": "check:'fastener-installation' — explicit named stations; empty means no coverage.",
      +  "items": {
      +    "additionalProperties": false,
      +    "properties": {
      +      "against": {
      +        "items": {
      +          "minLength": 1,
      +          "type": "string"
      +        },
      +        "minItems": 1,
      +        "type": "array",
      +        "uniqueItems": true
      +      },
      +      "engagementPart": {
      +        "minLength": 1,
      +        "type": "string"
      +      },
      +      "maxProtrusionMm": {
      +        "minimum": 0,
      +        "type": "number"
      +      },
      +      "minEngagementMm": {
      +        "description": "Declared geometric axial overlap minimum; no thread-strength claim.",
      +        "minimum": 0,
      +        "type": "number"
      +      },
      +      "part": {
      +        "minLength": 1,
      +        "type": "string"
      +      }
      +    },
      +    "required": [
      +      "part",
      +      "against"
      +    ],
      +    "type": "object"
      +  },
      +  "type": "array"
      +}
    • addedInput schema / properties / toleranceMm
      Added value: +{
      +  "description": "check:'fastener-installation' — linear tolerance, default .05 mm.",
      +  "minimum": 0,
      +  "type": "number"
      +}
  11. Changed2 schema fields changed
    • removedOutput schema / properties
      Removed value: -{
      -  "diagnostics": {
      -    "description": "Verifier diagnostics (most checks).",
      -    "items": {
      -      "additionalProperties": true,
      -      "type": "object"
      -    },
      -    "type": "array"
      -  },
      -  "error": {
      -    "description": "Failure message (present on failure).",
      -    "type": "string"
      -  },
      -  "errorCode": {
      -    "type": "string"
      -  },
      -  "ok": {
      -    "description": "Whether the verification ran and passed its gate.",
      -    "type": "boolean"
      -  }
      -}
    • removedOutput schema / required
      Removed value: -[
      -  "ok"
      -]
  12. Changed1 schema field changed
    • changedInput schema / properties / refine / description
      Previous value: -"check:'load-capacity' mode:'fea' — automatic mesh refinement until the stress is trusted, inside the element and wall-time budgets (default true); false solves once at the study's meshSize."New value: +"check:'load-capacity' mode:'fea' — one automatic finer pass (0.75x element size) when the stress is untrusted, inside the element budget (default true); false solves once at the study's meshSize."
  13. Changed1 schema field changed
    • addedInput schema / properties / refine
      Added value: +{
      +  "description": "check:'load-capacity' mode:'fea' — automatic mesh refinement until the stress is trusted, inside the element and wall-time budgets (default true); false solves once at the study's meshSize.",
      +  "type": "boolean"
      +}
  14. Changed6 schema fields changed
    • addedInput schema / properties / heatmaps
      Added value: +{
      +  "description": "check:'load-capacity' mode:'fea' — also render stress heatmap PNGs (default false).",
      +  "type": "boolean"
      +}
    • addedInput schema / properties / mesh_size
      Added value: +{
      +  "description": "check:'load-capacity' mode:'fea' — element size override, mm.",
      +  "type": "number"
      +}
    • changedInput schema / properties / mode / description
      Previous value: -"check:'load-capacity' — 'beam' (default) or 'stub'."New value: +"check:'load-capacity' — 'beam' (default), 'stub', or 'fea' (solve the script's feaStudy; needs the CalculiX + gmsh toolchain)."
    • changedInput schema / properties / mode / enum
      Previous value: -[
      -  "stub",
      -  "beam"
      -]New value: +[
      +  "stub",
      +  "beam",
      +  "fea"
      +]
    • changedInput schema / properties / safety_factor_threshold / description
      Previous value: -"check:'load-capacity' — pass/fail safety-factor floor (default 1.5)."New value: +"check:'load-capacity' — pass/fail safety-factor floor (default 1.5; mode 'fea': the study's minSafetyFactor when declared)."
    • addedInput schema / properties / study
      Added value: +{
      +  "description": "check:'load-capacity' mode:'fea' — feaStudy name (default: the last declared one).",
      +  "type": "string"
      +}
  15. Changed1 schema field changed
    • changedInput schema / properties / file / description
      Previous value: -"Path to a .kcad.ts script (assembly/dfm/dfm-preflight/swept-collision/reachable/mounting-holes/load-capacity/static-hold)."New value: +"Path to a .kcad.ts script (assembly/dfm/dfm-preflight/swept-collision/reachable/mounting-holes/load-capacity/static-hold). Hosted server: cannot read files from your machine — pass `code`, or `project:<slug>` for a saved project."
  16. Changed8 schema fields changed
    • addedInput schema / properties / body_bbox
      Added value: +{
      +  "description": "check:'body-likeness' — body AABB { min:[x,y,z], max:[x,y,z] } in mm.",
      +  "type": "object"
      +}
    • addedInput schema / properties / body_feature_id
      Added value: +{
      +  "description": "check:'body-likeness' — FeatureId to read body AABB from when body_bbox omitted.",
      +  "type": "string"
      +}
    • addedInput schema / properties / cabin_bbox
      Added value: +{
      +  "description": "check:'body-likeness' — optional cabin/greenhouse AABB for automated cabin-aft.",
      +  "type": "object"
      +}
    • changedInput schema / properties / check / enum
      Previous value: -[
      -  "assembly",
      -  "urdf",
      -  "dfm",
      -  "dfm-preflight",
      -  "swept-collision",
      -  "reachable",
      -  "mounting-holes",
      -  "load-capacity",
      -  "static-hold"
      -]New value: +[
      +  "assembly",
      +  "urdf",
      +  "dfm",
      +  "dfm-preflight",
      +  "swept-collision",
      +  "reachable",
      +  "mounting-holes",
      +  "load-capacity",
      +  "static-hold",
      +  "body-likeness"
      +]
    • addedInput schema / properties / length_axis
      Added value: +{
      +  "description": "check:'body-likeness' — wheelbase axis (default 'x').",
      +  "enum": [
      +    "x",
      +    "y"
      +  ],
      +  "type": "string"
      +}
    • addedInput schema / properties / require_stills
      Added value: +{
      +  "description": "check:'body-likeness' — require still_verdicts (default true).",
      +  "type": "boolean"
      +}
    • addedInput schema / properties / still_verdicts
      Added value: +{
      +  "description": "check:'body-likeness' — agent ortho still checklist [{ code, passed, finding, view? }]. Required codes: side-body-over-wheels, side-cabin-aft, rear-haunch, ortho-proportions-vs-reference.",
      +  "items": {
      +    "type": "object"
      +  },
      +  "type": "array"
      +}
    • addedInput schema / properties / wheels
      Added value: +{
      +  "description": "check:'body-likeness' — wheel centres + tire radii [{ center:[x,y,z], radius }].",
      +  "items": {
      +    "type": "object"
      +  },
      +  "type": "array"
      +}
  17. Changed7 schema fields changed
    • changedInput schema / properties / check / enum
      Previous value: -[
      -  "assembly",
      -  "urdf",
      -  "dfm",
      -  "dfm-preflight",
      -  "swept-collision",
      -  "reachable",
      -  "mounting-holes",
      -  "load-capacity"
      -]New value: +[
      +  "assembly",
      +  "urdf",
      +  "dfm",
      +  "dfm-preflight",
      +  "swept-collision",
      +  "reachable",
      +  "mounting-holes",
      +  "load-capacity",
      +  "static-hold"
      +]
    • changedInput schema / properties / file / description
      Previous value: -"Path to a .kcad.ts script (assembly/dfm/dfm-preflight/swept-collision/reachable/mounting-holes/load-capacity)."New value: +"Path to a .kcad.ts script (assembly/dfm/dfm-preflight/swept-collision/reachable/mounting-holes/load-capacity/static-hold)."
    • addedInput schema / properties / gravity
      Added value: +{
      +  "description": "check:'static-hold' — gravity vector, m/s^2, world frame (default [0, 0, -9.81]).",
      +  "items": {
      +    "type": "number"
      +  },
      +  "maxItems": 3,
      +  "minItems": 3,
      +  "type": "array"
      +}
    • changedInput schema / properties / joint / description
      Previous value: -"check:'swept-collision' — joint to sweep; omit to sweep every declared joint."New value: +"check:'swept-collision' — joint to sweep; omit to sweep every declared joint. check:'static-hold' — joint to evaluate; omit to evaluate every joint with a declared actuator."
    • addedInput schema / properties / min_torque_margin_pct
      Added value: +{
      +  "description": "check:'static-hold' — safety-margin floor as a percent of actuator capacity (default 20).",
      +  "type": "number"
      +}
    • addedInput schema / properties / pose
      Added value: +{
      +  "description": "check:'static-hold' — explicit pose (joint name -> deg/mm) or array of poses; omit to sample a grid across the evaluated joint's range."
      +}
    • addedInput schema / properties / range_samples
      Added value: +{
      +  "description": "check:'static-hold' — grid density per evaluated joint when `pose` is omitted (default 9).",
      +  "type": "number"
      +}
  18. Changed1 schema field changed
    • changedOutput schema / (root)
      Previous value: -nullNew value: +{
      +  "additionalProperties": true,
      +  "properties": {
      +    "diagnostics": {
      +      "description": "Verifier diagnostics (most checks).",
      +      "items": {
      +        "additionalProperties": true,
      +        "type": "object"
      +      },
      +      "type": "array"
      +    },
      +    "error": {
      +      "description": "Failure message (present on failure).",
      +      "type": "string"
      +    },
      +    "errorCode": {
      +      "type": "string"
      +    },
      +    "ok": {
      +      "description": "Whether the verification ran and passed its gate.",
      +      "type": "boolean"
      +    }
      +  },
      +  "required": [
      +    "ok"
      +  ],
      +  "type": "object"
      +}
  19. Added

TDQS

A4.1/5.0
Behavior5/5

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

Annotations already declare readOnlyHint, idempotentHint, destructiveHint=false and openWorldHint=false, so the safety bar is low; the description goes far beyond it. It discloses failure semantics ('fails closed on its own missing required params', 'unknown or zero coverage cannot pass'), approximation limits ('This is a projection, not gravity simulation', 'never proven', 'not exact BREP proof'), and result-shape details like `blocking[]`, `needsHold`, `toolBlocked`, and ledger behavior. This is exactly the kind of beyond-annotation context that helps an agent call it correctly.

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?

It is front-loaded and organized as a check-by-check list, but the entry is enormous and contains substantial duplication of schema descriptions (e.g., the `stability`, `sequence`, `threadedFasteners`, and `requirements` details are restated near-verbatim). For a 16-mode dispatcher some length is justified, but a good portion of the assembly-path prose is implementation detail that does not help an agent select or invoke the tool.

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?

Given 67 parameters, nested objects, an output schema, and annotation coverage of the safety profile, the description supplies the missing glue: the check selector semantics, per-check required inputs, failure/coverage caveats, and what several checks do not prove. An agent has enough to choose a check and pass the right parameters without opening the schema.

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 100% and every one of the 67 properties already carries a check-scoped description, so the schema does the heavy lifting. The prose adds useful cross-parameter semantics ('all params except `check` are check-specific and forwarded verbatim; each check fails closed on its own missing required params') and clarifies the omitted-check/requirements relationship. Beyond that, most per-check narratives restate what the schema already labels.

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 opening sentence gives a specific verb and resource ('check a design against a rule set') and the `check` enumeration makes each of the 16 verification modes concrete (assembly review, URDF validity, DFM gates, swept collision, IK reachability, FEA, etc.). It even distinguishes itself from review_cad by explaining the blocking-rule relationship. What it does not do is clearly separate itself from siblings like dfm_review, run_fea, inspect, or physics-vs-physics checks, so an agent still has to reason about overlap.

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?

Each `check` value carries an explicit 'use this for' statement (e.g., 'assembly — static assembly review', 'load-capacity — will it hold?', 'dfm-preflight — sheet-metal flat pattern vs a job-shop's ordering rules'), which is strong when-to-use guidance. It also states the fail-closed rule. It does not, however, say when to prefer this tool over siblings like dfm_review, run_fea, inspect, or review_cad, nor does it give explicit exclusions.

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

Try in Browser

Glama MCP Gateway

Add one secure layer between your agents and this server.