Skip to main content
Glama

apply_design_reinforcements

Analyze a 3D part for structural risks and auto-apply fixes—thicken thin walls, round sharp inside corners, and add a stabilizing base—then return a reinforced model with before/after scores.

Instructions

Analyze a part for structural risks, then auto-apply fixes.

        This is the **one-step design hardening tool** — it runs the full
        structural analysis pipeline, then applies every applicable fix:

        - **Thin necks** → thickened walls (+material at narrow sections)
        - **Sharp inside corners** → rounded, so the load spreads (outside edges are left as they are)
        - **Insufficient base** → a base plate wide enough that the part no
          longer reads as a tipping risk

        Each fix is kept only if the part it makes carries no more
        structural risk than the part before it; one that would is left
        out and listed in ``skipped`` with what it would have added.
        Cantilevers are listed in ``skipped`` with where to add a rib
        (``locations_mm``): Kiln knows where an overhang is, not which
        wall carries it, so it does not place one.

        Thickening and edge rounding are done on the part's CAD file, so
        pass its STEP file when there is one (or a mesh Kiln converted
        from one that still sits beside it).  When every fix applied was
        a CAD one the result carries ``step_path``, the reinforced part as
        CAD.  On a mesh with no CAD file, edge rounding is skipped with
        the reason.

        Edge rounding is sized for the printer: name it (or the nozzle,
        layer height and material) and each rounded edge keeps one nozzle
        width of flat beside it.  Each rounded entry's ``edges`` lists
        what was finished, what stayed sharp and why, and ``cautions``
        for edges that will print badly; ``print_aware`` sums it up.
        Choosing the finish edge by edge for the printer and material is
        a Kiln Pro feature.

        ``summary`` says which structural risks the part had and which
        remain; ``before_score`` / ``after_score`` compare the two
        versions.  Reinforcements that can't be auto-applied (like
        ``reorient``) are listed in ``skipped`` with guidance.

        Requires OpenSCAD for the base plate.

        AGENT DISPLAY CONTRACT: a result carries a before|after self-check
        of the part.  Look at it and write what changed before calling
        the job done.

        :param file_path: The part: an STL, or its STEP file.
        :param output_path: Output path (defaults to ``<name>_reinforced.stl``).
        :param fillet_radius_mm: Fillet radius for sharp corners (default 1.5).
        :param wall_thicken_mm: Amount to add to thin walls (default 0.6).
        :param base_height_mm: Height of stabilizing base plate (default 2.0).
        :param printer_id: The printer the part is for.
        :param nozzle_mm: The nozzle size, when it differs from the one
            Kiln has for the printer.
        :param layer_height_mm: The layer height it will print at.
        :param material: The material it will print in.
        :param fastener: The fastener the part's holes take, e.g.
            ``"M3"`` — pass only if the user actually named one.  Kiln
            does not read the part looking for screw holes.  Where the
            plan includes it, each hole that threads onto it is prepared
            for it as the corners are rounded; otherwise the holes are
            left as drawn and ``print_aware`` says so.
        :returns: Dict with before/after scores, applied/skipped reinforcements.

INLINE 3D STAGE: on success this tool opens Kiln's interactive 3D stage — an inline viewer panel the user can orbit, zoom, and turn over — in hosts that render MCP Apps panels (Kiln's hosted connection attaches a browser stage link for hosts that don't). Oversized meshes are decimated automatically for the stage; the PNG preview is the floor, not the whole experience.

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": "apply_design_reinforcements"
  }
}

Input Schema

NameRequiredDescriptionDefault
fastenerNoThe fastener the part's holes take, e.g. ``"M3"`` — pass only if the user actually named one. Kiln does not read the part looking for screw holes. Where the plan includes it, each hole that threads onto it is prepared for it as the corners are rounded; otherwise the holes are left as drawn and ``print_aware`` says so. Default: "".
materialNoThe material it will print in. Default: "".
file_pathYesThe part: an STL, or its STEP file.
nozzle_mmNoThe nozzle size, when it differs from the one Kiln has for the printer.
printer_idNoThe printer the part is for. Default: "".
output_pathNoOutput path (defaults to ``<name>_reinforced.stl``). Default: "".
base_height_mmNoHeight of stabilizing base plate (default 2.0). Default: 2.0.
layer_height_mmNoThe layer height it will print at.
wall_thicken_mmNoAmount to add to thin walls (default 0.6). Default: 0.6.
fillet_radius_mmNoFillet radius for sharp corners (default 1.5). Default: 1.5.

Schema Changelog

Changes observed during successful MCP inspections.

  1. Changed10 schema fields changedv1.5.1
    • changedInput schema / properties / base_height_mm / description
      Previous value: -"Default: 2.0."New value: +"Height of stabilizing base plate (default 2.0). Default: 2.0."
    • changedInput schema / properties / fastener / description
      Previous value: -"Default: \"\"."New value: +"The fastener the part's holes take, e.g. ``\"M3\"`` — pass only if the user actually named one.  Kiln does not read the part looking for screw holes.  Where the plan includes it, each hole that threads onto it is prepared for it as the corners are rounded; otherwise the holes are left as drawn and ``print_aware`` says so. Default: \"\"."
    • addedInput schema / properties / file_path / description
      Added value: +"The part: an STL, or its STEP file."
    • changedInput schema / properties / fillet_radius_mm / description
      Previous value: -"Default: 1.5."New value: +"Fillet radius for sharp corners (default 1.5). Default: 1.5."
    • addedInput schema / properties / layer_height_mm / description
      Added value: +"The layer height it will print at."
    • changedInput schema / properties / material / description
      Previous value: -"Default: \"\"."New value: +"The material it will print in. Default: \"\"."
    • addedInput schema / properties / nozzle_mm / description
      Added value: +"The nozzle size, when it differs from the one Kiln has for the printer."
    • changedInput schema / properties / output_path / description
      Previous value: -"Default: \"\"."New value: +"Output path (defaults to ``<name>_reinforced.stl``). Default: \"\"."
    • changedInput schema / properties / printer_id / description
      Previous value: -"Default: \"\"."New value: +"The printer the part is for. Default: \"\"."
    • changedInput schema / properties / wall_thicken_mm / description
      Previous value: -"Default: 0.6."New value: +"Amount to add to thin walls (default 0.6). Default: 0.6."
  2. Changed13 schema fields changedv1.5.0
    • removedInput schema / properties / base_height_mm / default
      Removed value: -2
    • addedInput schema / properties / base_height_mm / description
      Added value: +"Default: 2.0."
    • addedInput schema / properties / fastener
      Added value: +{
      +  "description": "Default: \"\".",
      +  "title": "Fastener",
      +  "type": "string"
      +}
    • removedInput schema / properties / fillet_radius_mm / default
      Removed value: -1.5
    • addedInput schema / properties / fillet_radius_mm / description
      Added value: +"Default: 1.5."
    • addedInput schema / properties / layer_height_mm
      Added value: +{
      +  "anyOf": [
      +    {
      +      "type": "number"
      +    },
      +    {
      +      "type": "null"
      +    }
      +  ],
      +  "title": "Layer Height Mm"
      +}
    • addedInput schema / properties / material
      Added value: +{
      +  "description": "Default: \"\".",
      +  "title": "Material",
      +  "type": "string"
      +}
    • addedInput schema / properties / nozzle_mm
      Added value: +{
      +  "anyOf": [
      +    {
      +      "type": "number"
      +    },
      +    {
      +      "type": "null"
      +    }
      +  ],
      +  "title": "Nozzle Mm"
      +}
    • removedInput schema / properties / output_path / default
      Removed value: -""
    • addedInput schema / properties / output_path / description
      Added value: +"Default: \"\"."
    • addedInput schema / properties / printer_id
      Added value: +{
      +  "description": "Default: \"\".",
      +  "title": "Printer Id",
      +  "type": "string"
      +}
    • removedInput schema / properties / wall_thicken_mm / default
      Removed value: -0.6
    • addedInput schema / properties / wall_thicken_mm / description
      Added value: +"Default: 0.6."
  3. First observedv0.1.0

TDQS

A4.3/5.0
Behavior5/5

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

Annotations only declare readOnlyHint=false and destructiveHint=false; the description supplies everything else an agent needs: which fixes get applied and their physical effect, the keep-or-skip rule ('kept only if the part it makes carries no more structural risk'), what goes into 'skipped' with reasons, that thickening/rounding operate on the CAD file, that OpenSCAD is required for the base plate, and that per-edge finish selection is a Kiln Pro gated feature. It even states an agent display contract and clarifies that the original is not overwritten (a new output path is produced), which is consistent with destructiveHint=false.

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?

Purpose and the fix list are front-loaded and easy to scan, and the markdown bolding of key terms helps. However, the definition is roughly 450 words with a docstring-style parameter block that duplicates the schema, plus a ':returns:' line and a trailing inline-stage paragraph that sit oddly after the parameter list.

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 carries the return-shape burden and does so thoroughly: before_score/after_score, summary, applied/skipped, step_path, print_aware, per-entry edges and cautions, and locations_mm for cantilevers. For a 10-parameter mutation tool with environment prerequisites, an agent has enough to call it correctly and to interpret the result.

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 the description largely restates each parameter's schema text verbatim (file_path, output_path, fillet_radius_mm, wall_thicken_mm, base_height_mm, printer_id, nozzle_mm, layer_height_mm, material, fastener). It does add genuine relational meaning — that printer/nozzle/layer-height/material together determine rounding sizing, and that nozzle_mm only matters when it differs from Kiln's record — but that is a modest increment over the schema baseline.

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?

The first two sentences state a specific verb and resource ('Analyze a part for structural risks, then auto-apply fixes') and position the tool precisely as 'the one-step design hardening tool' that runs the full pipeline and applies every applicable fix. That framing implicitly separates it from the analysis-only and recommendation-only siblings without the agent needing to open another 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?

It gives concrete calling context: pass the STEP file when one exists, name the printer/nozzle/material so edge rounding is sized correctly, and pass 'fastener' only if the user actually named one. It also says what happens on a mesh with no CAD file. What it lacks is explicit routing against siblings such as analyze_structural_risks or recommend_design_reinforcements — an agent must infer that this tool replaces the analyze-then-apply sequence rather than following it.

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