Skip to main content
Glama

add_mesh_fillet

Rounds selected sharp edges on a STEP or Kiln-converted CAD part at the chosen radius, rebuilding a closed solid and returning both mesh and STEP outputs for further edits.

Instructions

Round a part's edges, exactly, on its CAD file.

        Pass the part's STEP file (or a mesh Kiln converted from one that
        still sits beside it).  The CAD kernel rebuilds each face, so the
        result is a closed solid of the size geometry gives; it comes back
        as a mesh (``path``) and as CAD beside it (``step_path``), so the
        next edit starts from CAD again.

        Literal: it rounds the edges you select at the radius you give.
        Two things can change that, and the reply says so each time:

        * an edge on a narrow face gets a smaller radius (the face keeps
          one nozzle width of flat), or stays sharp when what is left
          would not show in a print;
        * a hole's rim stays sharp unless you select it.

        ``edges.left_sharp`` lists every selected edge left sharp, with
        its reason.  ``edges.cautions`` says what will print badly as
        asked: a finish on the bed or facing down whose surface overhangs
        past what the printer bridges, and by how much.

        A mesh with no CAD file behind it is refused: rounding on a mesh
        left an open surface and a bigger part on every part measured.  A
        part made from an OpenSCAD script is rounded in its script; the
        refusal names it.

        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: a STEP file, or a mesh converted from one.
        :param radius_mm: Fillet radius in mm (default 1.0).
        :param angle_threshold_deg: An edge is sharp when the surface
            turns at least this much across it (default 60).
        :param output_path: Output ``.stl`` path (defaults to
            ``<name>_filleted.stl``); the CAD is written beside it.
        :param edges: Which edges.  Empty or ``all``: every sharp edge.
            Words narrow it -- where the edge sits as the part prints
            (``vertical``, ``top``, ``bottom``, ``under``, ``sloped``) and
            which way the corner goes (``outside``, ``inside``);
            ``holes`` selects hole rims.  Combine with commas:
            ``top,outside``.  Or name edges by id: ``e12,e15`` (ids come
            from ``plan_only``).
        :param printer_id: The printer the part is for; sizes are limited
            by its nozzle and layer height.
        :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 plan_only: Return the plan and every edge's id without
            building anything.
        :returns: ``path``, ``step_path``, ``edges`` (finished, left
            sharp, cautions), ``sized_for``, ``volume_mm3`` and the
            measurements before and after; or a refusal saying why.

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

Input Schema

NameRequiredDescriptionDefault
edgesNoWhich edges. Empty or ``all``: every sharp edge. Words narrow it -- where the edge sits as the part prints (``vertical``, ``top``, ``bottom``, ``under``, ``sloped``) and which way the corner goes (``outside``, ``inside``); ``holes`` selects hole rims. Combine with commas: ``top,outside``. Or name edges by id: ``e12,e15`` (ids come from ``plan_only``). Default: "".
materialNoThe material it will print in. Default: "".
file_pathYesThe part: a STEP file, or a mesh converted from one.
nozzle_mmNoThe nozzle size, when it differs from the one Kiln has for the printer.
plan_onlyNoReturn the plan and every edge's id without building anything. Default: false.
radius_mmNoFillet radius in mm (default 1.0). Default: 1.0.
printer_idNoThe printer the part is for; sizes are limited by its nozzle and layer height. Default: "".
output_pathNoOutput ``.stl`` path (defaults to ``<name>_filleted.stl``); the CAD is written beside it. Default: "".
layer_height_mmNoThe layer height it will print at.
angle_threshold_degNoAn edge is sharp when the surface turns at least this much across it (default 60). Default: 60.0.

Schema Changelog

Changes observed during successful MCP inspections.

  1. Changed10 schema fields changedv1.5.1
    • changedInput schema / properties / angle_threshold_deg / description
      Previous value: -"Default: 60.0."New value: +"An edge is sharp when the surface turns at least this much across it (default 60). Default: 60.0."
    • changedInput schema / properties / edges / description
      Previous value: -"Default: \"\"."New value: +"Which edges.  Empty or ``all``: every sharp edge. Words narrow it -- where the edge sits as the part prints (``vertical``, ``top``, ``bottom``, ``under``, ``sloped``) and which way the corner goes (``outside``, ``inside``); ``holes`` selects hole rims.  Combine with commas: ``top,outside``.  Or name edges by id: ``e12,e15`` (ids come from ``plan_only``). Default: \"\"."
    • addedInput schema / properties / file_path / description
      Added value: +"The part: a STEP file, or a mesh converted from one."
    • 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 ``.stl`` path (defaults to ``<name>_filleted.stl``); the CAD is written beside it. Default: \"\"."
    • changedInput schema / properties / plan_only / description
      Previous value: -"Default: false."New value: +"Return the plan and every edge's id without building anything. Default: false."
    • changedInput schema / properties / printer_id / description
      Previous value: -"Default: \"\"."New value: +"The printer the part is for; sizes are limited by its nozzle and layer height. Default: \"\"."
    • changedInput schema / properties / radius_mm / description
      Previous value: -"Default: 1.0."New value: +"Fillet radius in mm (default 1.0). Default: 1.0."
  2. Changed12 schema fields changedv1.5.0
    • removedInput schema / properties / angle_threshold_deg / default
      Removed value: -60
    • addedInput schema / properties / angle_threshold_deg / description
      Added value: +"Default: 60.0."
    • addedInput schema / properties / edges
      Added value: +{
      +  "description": "Default: \"\".",
      +  "title": "Edges",
      +  "type": "string"
      +}
    • 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 / plan_only
      Added value: +{
      +  "description": "Default: false.",
      +  "title": "Plan Only",
      +  "type": "boolean"
      +}
    • addedInput schema / properties / printer_id
      Added value: +{
      +  "description": "Default: \"\".",
      +  "title": "Printer Id",
      +  "type": "string"
      +}
    • removedInput schema / properties / radius_mm / default
      Removed value: -1
    • addedInput schema / properties / radius_mm / description
      Added value: +"Default: 1.0."
  3. First observedv0.1.0

TDQS

A4.6/5.0
Behavior5/5

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

Beyond the annotations, the description discloses major behavioral traits: the CAD kernel rebuilds faces into a closed solid, returns both a mesh and CAD, reduces fillet radius on narrow faces, leaves hole rims sharp unless selected, and reports refusals for mesh-only or script-derived parts. It also describes the agent display contract and the inline 3D stage, which an agent would not infer from the annotations alone.

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?

The description is long but front-loaded with the core action and organized into clear sections: literal behavior, deviations and cautions, refusals, display contract, parameters. Every paragraph carries useful information, though some repetition between the prose and parameter block could be trimmed.

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 10-parameter mutation tool with no output schema, the description covers the return shape (path, step_path, edges, sized_for, volume_mm3, before/after measurements), refusal conditions, side effects, and the interactive stage. An agent has everything needed to call it correctly and understand the result.

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 schema already documents every parameter, setting a baseline of 3. The description adds useful meaning by explaining that radius may be overridden on narrow faces, that edge ids come from plan_only, and that printer/nozzle/layer height constrain sizes, giving the agent context for parameter choices beyond the schema text.

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 description opens with a specific verb and resource: 'Round a part's edges, exactly, on its CAD file.' It immediately conveys the operation (fillet) and the artifact type (CAD part), which also distinguishes it from the sibling add_mesh_chamfer without needing to name it.

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 clear context for use: pass a STEP file or a mesh Kiln converted from one, and explains that meshes without a backing CAD file or OpenSCAD-script parts are refused. It also explains when to use plan_only (to get edge ids without building). It does not explicitly compare against the sibling chamfer tool, which keeps it from a 5.

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