Skip to main content
Glama

analyze_printability

Read-only

Analyze STL or OBJ meshes for FDM print readiness: detect overhangs, thin walls, bridging issues and support needs, then get a clear ready or won't-print verdict with actionable fixes.

Instructions

Analyze a 3D model for FDM printing readiness.

        Performs deep analysis of an STL or OBJ mesh including overhang
        detection, thin wall analysis, bridging assessment, bed adhesion
        surface estimation, and support volume estimation.  Returns one
        ``verdict`` (``ready``, ``prints_with_supports``, ``wont_print``
        or ``check``) with its sentence as ``message``, and the full
        ``report`` with actionable recommendations.  The report keeps a
        0-100 score and a letter grade for comparing versions of a part;
        tell the person the verdict, not the score.

        Pass ``material`` (and ``printer_id`` when a printer is
        registered) so the warping, thermal-stress, and adhesion checks
        run against the actual filament instead of generic PLA defaults.
        On the free tier those checks use conservative safe-floor
        thresholds; with Kiln Pro they are tuned to the specific
        material and printer.

        When the mesh turns out to have holes in it, the result also
        carries a ``fastener_advice`` block saying they were measured
        but not checked against the hardware meant to go in.  Kiln
        raises that once per session across every tool that can raise
        it, so a later analysis may omit the block even though the
        part has holes.  Read its ``agent_instruction`` before
        repeating any of it to the user.

        Args:
            file_path: Path to an STL or OBJ mesh file.
            nozzle_diameter: Printer nozzle diameter in mm.  Leave unset
                and name the printer: Kiln then checks for the nozzle on
                record for it, else the printer's own setting, else the
                model's stock size, and ``report.nozzle`` says which.
                With no printer named, the only printer Kiln knows of
                stands in; with none, the check assumes 0.4 and says so.
            layer_height: Print layer height in mm (default 0.2).
            max_overhang_angle: Maximum overhang angle in degrees before
                supports are needed.  Leave unset for the material's own
                limit (45 when none is known) — the value every other
                tool that reports this score uses, so the numbers agree.
            build_volume_x: Optional build volume X dimension in mm.
            build_volume_y: Optional build volume Y dimension in mm.
            build_volume_z: Optional build volume Z dimension in mm.
            material: Material ID for warping / thermal-stress / adhesion
                analysis (default ``"pla"``).
            printer_id: Optional registered printer whose real geometry
                and calibration should inform the analysis.
        

Tool call template

Replace each placeholder with a value matching the input schema. Only required parameters are included; add optional parameters as needed.

{
  "id": 1,
  "jsonrpc": "2.0",
  "method": "tools/call",
  "params": {
    "arguments": {
      "file_path": "<file_path>"
    },
    "name": "analyze_printability"
  }
}

Input Schema

NameRequiredDescriptionDefault
materialNoMaterial ID for warping / thermal-stress / adhesion analysis (default ``"pla"``). Default: "pla".
file_pathYesPath to an STL or OBJ mesh file.
printer_idNoOptional registered printer whose real geometry and calibration should inform the analysis. Default: "".
layer_heightNoPrint layer height in mm (default 0.2). Default: 0.2.
build_volume_xNoOptional build volume X dimension in mm.
build_volume_yNoOptional build volume Y dimension in mm.
build_volume_zNoOptional build volume Z dimension in mm.
nozzle_diameterNoPrinter nozzle diameter in mm. Leave unset and name the printer: Kiln then checks for the nozzle on record for it, else the printer's own setting, else the model's stock size, and ``report.nozzle`` says which. With no printer named, the only printer Kiln knows of stands in; with none, the check assumes 0.4 and says so.
max_overhang_angleNoMaximum overhang angle in degrees before supports are needed. Leave unset for the material's own limit (45 when none is known) — the value every other tool that reports this score uses, so the numbers agree.

Schema Changelog

Changes observed during successful MCP inspections.

  1. Changed9 schema fields changedv1.5.1
    • addedInput schema / properties / build_volume_x / description
      Added value: +"Optional build volume X dimension in mm."
    • addedInput schema / properties / build_volume_y / description
      Added value: +"Optional build volume Y dimension in mm."
    • addedInput schema / properties / build_volume_z / description
      Added value: +"Optional build volume Z dimension in mm."
    • addedInput schema / properties / file_path / description
      Added value: +"Path to an STL or OBJ mesh file."
    • changedInput schema / properties / layer_height / description
      Previous value: -"Default: 0.2."New value: +"Print layer height in mm (default 0.2). Default: 0.2."
    • changedInput schema / properties / material / description
      Previous value: -"Default: \"pla\"."New value: +"Material ID for warping / thermal-stress / adhesion analysis (default ``\"pla\"``). Default: \"pla\"."
    • addedInput schema / properties / max_overhang_angle / description
      Added value: +"Maximum overhang angle in degrees before supports are needed.  Leave unset for the material's own limit (45 when none is known) — the value every other tool that reports this score uses, so the numbers agree."
    • addedInput schema / properties / nozzle_diameter / description
      Added value: +"Printer nozzle diameter in mm.  Leave unset and name the printer: Kiln then checks for the nozzle on record for it, else the printer's own setting, else the model's stock size, and ``report.nozzle`` says which. With no printer named, the only printer Kiln knows of stands in; with none, the check assumes 0.4 and says so."
    • changedInput schema / properties / printer_id / description
      Previous value: -"Default: \"\"."New value: +"Optional registered printer whose real geometry and calibration should inform the analysis. Default: \"\"."
  2. Changed15 schema fields changedv1.5.0
    • removedInput schema / properties / build_volume_x / default
      Removed value: -null
    • removedInput schema / properties / build_volume_y / default
      Removed value: -null
    • removedInput schema / properties / build_volume_z / default
      Removed value: -null
    • removedInput schema / properties / layer_height / default
      Removed value: -0.2
    • addedInput schema / properties / layer_height / description
      Added value: +"Default: 0.2."
    • removedInput schema / properties / material / default
      Removed value: -"pla"
    • addedInput schema / properties / material / description
      Added value: +"Default: \"pla\"."
    • addedInput schema / properties / max_overhang_angle / anyOf
      Added value: +[
      +  {
      +    "type": "number"
      +  },
      +  {
      +    "type": "null"
      +  }
      +]
    • removedInput schema / properties / max_overhang_angle / default
      Removed value: -45
    • removedInput schema / properties / max_overhang_angle / type
      Removed value: -"number"
    • addedInput schema / properties / nozzle_diameter / anyOf
      Added value: +[
      +  {
      +    "type": "number"
      +  },
      +  {
      +    "type": "null"
      +  }
      +]
    • removedInput schema / properties / nozzle_diameter / default
      Removed value: -0.4
    • removedInput schema / properties / nozzle_diameter / type
      Removed value: -"number"
    • removedInput schema / properties / printer_id / default
      Removed value: -""
    • addedInput schema / properties / printer_id / description
      Added value: +"Default: \"\"."
  3. Changed2 schema fields changedv1.3.0
    • addedInput schema / properties / material
      Added value: +{
      +  "default": "pla",
      +  "title": "Material",
      +  "type": "string"
      +}
    • addedInput schema / properties / printer_id
      Added value: +{
      +  "default": "",
      +  "title": "Printer Id",
      +  "type": "string"
      +}
  4. First observedv0.1.0

TDQS

A3.9/5.0
Behavior5/5

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

With readOnlyHint/destructiveHint already covering safety, the description adds substantial behavior beyond annotations: the four possible verdict values, the report's 0-100 score and letter grade, the free-tier safe-floor versus Pro-tuned thresholds, and the once-per-session fastening-advice block with its agent_instruction. The once-per-session dedup caveat is exactly the kind of nuance an agent could not infer from structured fields.

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?

The prose paragraphs are front-loaded and earn their place, but the trailing Args section duplicates nine schema descriptions that are already at 100% coverage, adding length without new information. The valuable verdict and dedup guidance sits mid-document rather than being surfaced first.

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 nine-parameter analysis tool with no output schema, the description still specifies the return shape (verdict, message, report with score/grade), the recommendation content, and the conditional fastener_advice block. Nothing an agent needs to call it correctly or relay results safely is missing.

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%, so the Args block largely restates the schema verbatim rather than adding meaning. The one piece of genuine semantic value is the nozzle_diameter resolution chain (printer record, printer setting, model stock, 0.4 fallback) and the max_overhang_angle consistency guarantee, but both already appear in the schema text.

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 opens with a specific verb and resource ('analyze a 3D model for FDM printing readiness') and enumerates the concrete checks performed (overhang detection, thin walls, bridging, bed adhesion, support volume), so an agent knows exactly what work happens. It does not, however, distinguish itself from near-neighbours in the very large sibling list such as check_print_readiness, analyze_model_geometry, or mesh_quality_scorecard.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Usage is implied by the free-tier/Pro threshold note and by the instruction to pass material and printer_id for accurate warping and adhesion checks, plus a clear directive to report the verdict rather than the score. There is no explicit 'use this instead of X' routing against the many overlapping readiness/geometry tools, so the agent must infer selection.

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

Deploy Server

Other Tools