Skip to main content
Glama

Verify Design

verify
Read-only

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

  • 'assembly' — mate-aware assembly validator on the active session (run evaluate_script first).

  • '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, ... }).

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

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

  • 'mounting-holes' — fastened mates expose matching hole diameters on both sides.

  • 'load-capacity' — closed-form Euler-Bernoulli beam stress / safety-factor check ({ loads, materials, ... }).

  • '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? }). All params except check are check-specific and forwarded verbatim; each check fails closed on its own missing required params.

Input Schema

TableJSON 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).
modeNocheck:'load-capacity' — 'beam' (default) or 'stub'.
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.
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 }.
rangeNocheck:'swept-collision' — [lower, upper, step] in joint-native units.
vendorNocheck:'dfm-preflight' — vendor SKU (required for that check).
gravityNocheck:'static-hold' — gravity vector, m/s^2, world frame (default [0, 0, -9.81]).
serviceNocheck:'dfm-preflight' — service.
assemblyNoAssembly name; defaults to the first captured assembly.
materialNocheck:'dfm-preflight' — material SKU (required for that check).
tip_linkNocheck:'reachable' — end-effector part name (required for that check).
featureIdNocheck:'dfm-preflight' — FeatureId to scope to.
materialsNocheck:'load-capacity' — partName -> material declaration.
urdf_pathNocheck:'urdf' — path to the .urdf file.
thicknessInNocheck:'dfm-preflight' — material thickness in inches.
thicknessMmNocheck:'dfm-preflight' — material thickness in millimeters.
prefer_solverNocheck:'reachable' — force the IK path ('auto' default).
range_samplesNocheck:'static-hold' — grid density per evaluated joint when `pose` is omitted (default 9).
max_iterationsNocheck:'reachable' — numeric-path iteration cap.
refreshCatalogNocheck:'dfm-preflight' — force vendor catalog refresh.
target_positionNocheck:'reachable' — target [x, y, z] mm (world frame).
target_orientationNocheck:'reachable' — target XYZ Euler angles in radians.
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.
collision_tolerance_mm3Nocheck:'swept-collision' — BREP intersection volume tolerance (mm^3).
safety_factor_thresholdNocheck:'load-capacity' — pass/fail safety-factor floor (default 1.5).
orientation_tolerance_radNocheck:'reachable' — orientation tolerance in radians.

Output Schema

TableJSON Schema
NameRequiredDescriptionDefault
okYesWhether the verification ran and passed its gate.
errorNoFailure message (present on failure).
errorCodeNo
diagnosticsNoVerifier diagnostics (most checks).

Schema Changelog

Changes observed during successful MCP inspections.

  1. 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"
      +}
  2. 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"
      +}
  3. Added

TDQS

A4.2/5.0
Behavior4/5

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

Annotations already declare readOnlyHint=true and destructiveHint=false, so the safety profile is covered. The description adds meaningful behavioral details beyond that: assembly requires evaluate_script first, checks fail closed on missing required params, and several modes have documented default or omission behavior. No contradiction with annotations exists.

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

Conciseness5/5

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

The description is long, but every sentence earns its place: the primary trigger is front-loaded, the nine modes are organized as scannable bullets, and the closing line about forwarding and fail-closed behavior is necessary. There is no fluff or repetition.

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 tool with 32 parameters, 9 checks, and high complexity, the description covers check selection, prerequisites, parameter grouping, defaults, and failure behavior. The presence of an output schema means return-format details need not be repeated, and annotations cover non-destructiveness and read-only status.

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 value by grouping parameters per check, showing which params belong to which verifier, and explaining that all non-check params are forwarded verbatim. The 'fails closed on its own missing required params' note also clarifies how incomplete parameter sets are handled.

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

Purpose4/5

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

The description clearly states the tool's purpose: check a design against a rule set, and it enumerates nine distinct verification modes. This is specific about verb and resource, but it does not explicitly differentiate the tool from similar siblings like inspect, review_cad, or solve_mates, so it stops short of full sibling differentiation.

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?

The opening 'Use this when you need to check a design against a rule set' gives a direct when-to-use signal, and each bullet provides a compact condition and input for its check. It lacks explicit 'use X instead' exclusions or alternatives, but the check-specific guidance is clear enough for an agent to select the right mode.

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.