Skip to main content
Glama

Measure a model

measure
Read-onlyIdempotent

Exact volume, surface area, centre of mass and connected-body count, plus an estimate of the filament a print would consume and what it would cost. Use it to answer "how heavy / how much material / how much filament / how much will this cost" — nothing else reports those, and they cannot be derived from a bounding box. Also checks a model is ONE body — two bodies where you expected one means operands that never touched.

Input Schema

NameRequiredDescriptionDefault
scadNoOpenSCAD source, as an alternative to `nodes` (supply exactly one). Interpreted by the same engine the editor’s .scad import uses; BOSL2/MCAD includes resolve. minkowski() and resize() are not supported here — use hull() or offset().
nodesNoParametric node tree. mm, Z-up, rotations in DEGREES (a rotation.* binding: radians). Read owlcad://schema/primitives for every primitive, modifier and generator and its parameter ranges (unknown params are dropped silently), and owlcad://schema/conventions for the placement arithmetic, which is where most models go wrong.
infillNoInfill density 0–1 (default 0.15).
shellMmNoSolid skin thickness in mm (default 1.2).
projectIdNoId of one of your saved projects, as an alternative to `nodes`/`scad` (supply exactly one).
materialIdNoFilament to cost it against (default "pla"). Ids come from the owlcad://materials resource.
smoothnessNoCurve quality for shapes that left their segment count automatic. Defaults to "standard", which is the editor default — pass "high" to match a project authored at high smoothness, "draft" for a cheaper check.

Schema Changelog

Changes observed during successful MCP inspections.

  1. Changed1 schema field changed
    • changedInput schema / properties / nodes / items / properties / generatorKey / description
      Previous value: -"Generator to expand (kind=generator). PREFER one over hand-building the same thing — they carry standards dimensions and solve fits a tree of primitives gets subtly wrong: gearTrain · planetary · rackPinion · wormDrive · herringbone · herringboneTrain · pulley · bearing · belt · spring · adapter · boardMount · enclosure · gridfinity · threadedJar · pinHinge · snapFit · ballSocket · fastener · textPlate · fitCoupon · calibrationBlock · clamp · impeller · axialFan · fanFrame · plugCap · pillowBlock."New value: +"Generator to expand (kind=generator). PREFER one over hand-building the same thing — they carry standards dimensions and solve fits a tree of primitives gets subtly wrong: gearTrain · planetary · rackPinion · wormDrive · bevelPair · herringbone · herringboneTrain · pulley · bearing · belt · spring · adapter · boardMount · enclosure · gridfinity · threadedJar · pinHinge · snapFit · ballSocket · fastener · textPlate · fitCoupon · calibrationBlock · clamp · impeller · axialFan · fanFrame · plugCap · pillowBlock."
  2. Changed1 schema field changed
    • changedInput schema / properties / nodes / description
      Previous value: -"Parametric node tree. mm, Z-up, rotations in DEGREES. Read owlcad://schema/primitives for every primitive, modifier and generator and its parameter ranges (unknown params are dropped silently), and owlcad://schema/conventions for the placement arithmetic, which is where most models go wrong."New value: +"Parametric node tree. mm, Z-up, rotations in DEGREES (a rotation.* binding: radians). Read owlcad://schema/primitives for every primitive, modifier and generator and its parameter ranges (unknown params are dropped silently), and owlcad://schema/conventions for the placement arithmetic, which is where most models go wrong."
  3. Changed1 schema field changed
    • changedInput schema / properties / nodes / items / properties / generatorKey / description
      Previous value: -"Generator to expand (kind=generator). PREFER one over hand-building the same thing — they carry standards dimensions and solve fits a tree of primitives gets subtly wrong: gearTrain · planetary · rackPinion · wormDrive · herringbone · herringboneTrain · pulley · bearing · belt · spring · adapter · boardMount · enclosure · gridfinity · threadedJar · pinHinge · snapFit · ballSocket · fastener · textPlate · fitCoupon · calibrationBlock · clamp · impeller · axialFan · fanFrame · plugCap."New value: +"Generator to expand (kind=generator). PREFER one over hand-building the same thing — they carry standards dimensions and solve fits a tree of primitives gets subtly wrong: gearTrain · planetary · rackPinion · wormDrive · herringbone · herringboneTrain · pulley · bearing · belt · spring · adapter · boardMount · enclosure · gridfinity · threadedJar · pinHinge · snapFit · ballSocket · fastener · textPlate · fitCoupon · calibrationBlock · clamp · impeller · axialFan · fanFrame · plugCap · pillowBlock."
  4. Changed1 schema field changed
    • changedInput schema / properties / scad / description
      Previous value: -"OpenSCAD source, as an alternative to `nodes` (supply exactly one). Interpreted by the same engine the editor’s .scad import uses. minkowski() and resize() are not supported here — use hull() or offset()."New value: +"OpenSCAD source, as an alternative to `nodes` (supply exactly one). Interpreted by the same engine the editor’s .scad import uses; BOSL2/MCAD includes resolve. minkowski() and resize() are not supported here — use hull() or offset()."
  5. First observed

TDQS

A4.2/5.0
Behavior4/5

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

Annotations already cover safety (readOnly, idempotent, non-destructive), and the description adds value beyond them: results cannot be derived from a bounding box, and multi-body results flag operands that never touched. It does not describe performance cost or accuracy caveats, which is a minor gap.

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?

Two sentences, output list front-loaded, then the routing rationale and the body-count use case. Dense but every clause earns its place; slightly packed.

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?

With no output schema, the description compensates by enumerating the returned measurements and their intended interpretation. Combined with read-only annotations and a fully documented input schema, an agent has everything needed to call it correctly.

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 coverage is 100% and the schema already documents every parameter in detail (scad/node tree, infill, shellMm, materialId, smoothness). The description adds no parameter-level meaning beyond that, so the baseline of 3 applies.

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 specific outputs (volume, surface area, centre of mass, connected-body count, filament/cost estimates) and explicitly differentiates from siblings: 'nothing else reports those.' An agent can route to measure without inspecting other schemas.

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 clear trigger questions ('how heavy / how much material / how much filament / how much will this cost') and an additional diagnostic use (checking a model is ONE body). It does not name a specific competing sibling tool (e.g. print_check, evaluate) or state when NOT to use it, so it stops short of full routing guidance.

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.

Resources