Skip to main content
Glama

decorate_during_print

Add a decoration to an in-flight paused 3D print, then preview and inspect the result in an interactive 3D stage.

Instructions

Add a decoration to an in-flight paused print (Pro). Opens Kiln's interactive inline 3D stage on the result (orbit/zoom panel in MCP Apps hosts; hosted sessions add a browser stage link).

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": {
      "decoration": "<decoration>",
      "gcode_path": "<gcode_path>",
      "current_layer": "<current_layer>"
    },
    "name": "decorate_during_print"
  }
}

Input Schema

NameRequiredDescriptionDefault
bevelNoSlant the carved walls over the top N layers for cleaner edges (default True). Default: true.
styleNoHow the image becomes a carve mask: ``"stencil"`` (the default, a clean binary silhouette) or ``"coin"`` (a medallion-style recessed background around the image); the other image styles of Kiln's emboss pipeline are accepted too. A style the pipeline refuses fails with ``HEIGHTMAP_GENERATION_FAILED``. Default: "stencil".
bed_tempNoBed temperature, read and checked the same way as ``hotend_temp``.
depth_mmNoDeboss depth in mm, (0, 5]. Defaults to 1.2 which looks clean on 0.4 nozzles. Default: 1.2.
thresholdNoHeightmap value above which a pixel is treated as carved-away (0.0–1.0, default 0.35). Default: 0.35.
decorationYesPlain-language spec string (``photo:``, ``logo:``, a texture name, or a description).
gcode_pathYesOriginal sliced .gcode of the in-flight job.
output_dirNoEngine session directory. Empty = system temp dir (a new ``kiln_midprint_*`` subdirectory). Default: "".
hotend_tempNoNozzle temperature for the resume pre-heat and Bambu 3MF metadata. Leave unset to use the print's own (read off ``gcode_path`` at the pause). A value that differs from the print's own is kept and said in ``warnings``.
image_scaleNo0.0–1.0, what fraction of the top-face AABB the image fills. Default 0.7 leaves a visual margin. Default: 0.7.
printer_nameNoPrinter identifier — passed to provenance and to the fleet layer. Default: "default".
aspect_policyNo``"auto_crop"`` / ``"auto_scale"`` / ``"strict"`` — how to handle aspect mismatch between image and top face. Default: "auto_crop".
current_layerYes1-indexed layer the printer is paused at.
filament_typeNoThe print's material, for Bambu 3MF metadata and material-routing provenance. Leave it out and Kiln reads the print's own material; when nothing says which, the call is refused (``PRINT_MATERIAL_UNKNOWN``).
image_center_xyNoOptional ``[x, y]`` in bed coords for where the image's center lands. ``None`` = center of the top-face AABB.
printer_z_knownNoREQUIRED ``True``. The safety gate from ``generate_recovery_gcode`` — refuses with ``PRINTER_Z_UNKNOWN`` if the printer's absolute Z can't be trusted (power-cycle / reconnect / etc.). Default: false.
source_3mf_pathNoOptional original .3mf — passed to the Bambu wrapper so the resume 3MFs inherit the thumbnails + 3D model preview from the original job. Default: "".
target_ams_slotNoOptional 0-indexed material slot that must feed the transformed resume artifact. On Bambu this is verified against AMS status. On non-Bambu adapters it is accepted only as an explicit declared tool slot route, for example when the user says the requested material/color is in slot 2. ``-1`` means no explicit material route was requested. Default: -1.
parent_design_idNoOptional identifier of the design this print is derived from — threads through to the provenance sidecar so reprint/diff tooling can follow the lineage. Default: "".
require_ams_matchNoWhen True, refuse to emit a material-changing resume artifact unless AMS status proves the requested slot/type/color. Keep True for user-facing work. Default: true.
accept_unsafe_depthNoCaller's acknowledgement that the carve mask satisfies the centered-carve safety envelope (centered interior, uniform top-to-bottom, no lost bridge endpoints). Required when ``start_layer_override`` is strictly below the analyzer's ``band_floor``. Without it the engine raises ``DEPTH_UNSAFE_WITHOUT_ACKNOWLEDGEMENT``. Default: false.
start_layer_overrideNoForce the carver's first carved layer. ``0`` (the default) defers to the analyzer's verified ``top_band_start_layer`` floor — the correct choice for any carve whose mask might touch a perimeter. A non-zero value reaches down to that layer instead, enabling deeper tactile debosses on thin parts whose analyzer floor is overly conservative. Setting this below the analyzer's band_floor requires ``accept_unsafe_depth=True`` AND a centered carve mask (the analyzer's depth-safety envelope). Default: 0.
target_filament_typeNoOptional expected tray material (``PLA``, ``PETG``, etc.). Without an explicit slot, the tool resolves exactly one loaded matching AMS tray from Kiln's existing ``ams_status`` data or fails closed. Default: "".
target_filament_colorNoOptional expected tray color (``#RRGGBB`` or common name like ``blue``). Used with the same hard verification as ``target_filament_type``. Default: "".
accept_bridge_cascade_riskNoTHIRD safety gate on top of ``start_layer_override`` + ``accept_unsafe_depth``. Required when the override drops below ``band_floor`` AND any layer in ``[override, last_layer]`` is tagged ``;TYPE:Bridge infill`` or ``;TYPE:Internal infill`` in the source gcode. Crossing one of those layers removes the substrate the solid infill above was going to cool against, cascading into a cap failure. Without it the engine raises ``BRIDGE_CASCADE_RISK``. Default: false.
manual_material_change_confirmedNoNon-Bambu safety gate for material/color changes. Set True only after the target material is loaded in the active feed path; otherwise Kiln refuses before emitting an artifact. Default: false.

Schema Changelog

Changes observed during successful MCP inspections.

  1. Changed26 schema fields changedv1.5.1
    • changedInput schema / properties / accept_bridge_cascade_risk / description
      Previous value: -"Default: false."New value: +"THIRD safety gate on top of ``start_layer_override`` + ``accept_unsafe_depth``. Required when the override drops below ``band_floor`` AND any layer in ``[override, last_layer]`` is tagged ``;TYPE:Bridge infill`` or ``;TYPE:Internal infill`` in the source gcode.  Crossing one of those layers removes the substrate the solid infill above was going to cool against, cascading into a cap failure. Without it the engine raises ``BRIDGE_CASCADE_RISK``. Default: false."
    • changedInput schema / properties / accept_unsafe_depth / description
      Previous value: -"Default: false."New value: +"Caller's acknowledgement that the carve mask satisfies the centered-carve safety envelope (centered interior, uniform top-to-bottom, no lost bridge endpoints).  Required when ``start_layer_override`` is strictly below the analyzer's ``band_floor``.  Without it the engine raises ``DEPTH_UNSAFE_WITHOUT_ACKNOWLEDGEMENT``. Default: false."
    • changedInput schema / properties / aspect_policy / description
      Previous value: -"Default: \"auto_crop\"."New value: +"``\"auto_crop\"`` / ``\"auto_scale\"`` / ``\"strict\"`` — how to handle aspect mismatch between image and top face. Default: \"auto_crop\"."
    • changedInput schema / properties / bed_temp / description
      Previous value: -"Default: 65."New value: +"Bed temperature, read and checked the same way as ``hotend_temp``."
    • changedInput schema / properties / bevel / description
      Previous value: -"Default: true."New value: +"Slant the carved walls over the top N layers for cleaner edges (default True). Default: true."
    • addedInput schema / properties / current_layer / description
      Added value: +"1-indexed layer the printer is paused at."
    • addedInput schema / properties / decoration / description
      Added value: +"Plain-language spec string (``photo:``, ``logo:``, a texture name, or a description)."
    • changedInput schema / properties / depth_mm / description
      Previous value: -"Default: 1.2."New value: +"Deboss depth in mm, (0, 5].  Defaults to 1.2 which looks clean on 0.4 nozzles. Default: 1.2."
    • changedInput schema / properties / filament_type / description
      Previous value: -"Default: \"PLA\"."New value: +"The print's material, for Bambu 3MF metadata and material-routing provenance.  Leave it out and Kiln reads the print's own material; when nothing says which, the call is refused (``PRINT_MATERIAL_UNKNOWN``)."
    • addedInput schema / properties / gcode_path / description
      Added value: +"Original sliced .gcode of the in-flight job."
    • changedInput schema / properties / hotend_temp / description
      Previous value: -"Default: 220."New value: +"Nozzle temperature for the resume pre-heat and Bambu 3MF metadata.  Leave unset to use the print's own (read off ``gcode_path`` at the pause).  A value that differs from the print's own is kept and said in ``warnings``."
    • addedInput schema / properties / image_center_xy / description
      Added value: +"Optional ``[x, y]`` in bed coords for where the image's center lands.  ``None`` = center of the top-face AABB."
    • changedInput schema / properties / image_scale / description
      Previous value: -"Default: 0.7."New value: +"0.0–1.0, what fraction of the top-face AABB the image fills.  Default 0.7 leaves a visual margin. Default: 0.7."
    • changedInput schema / properties / manual_material_change_confirmed / description
      Previous value: -"Default: false."New value: +"Non-Bambu safety gate for material/color changes. Set True only after the target material is loaded in the active feed path; otherwise Kiln refuses before emitting an artifact. Default: false."
    • changedInput schema / properties / output_dir / description
      Previous value: -"Default: \"\"."New value: +"Engine session directory.  Empty = system temp dir (a new ``kiln_midprint_*`` subdirectory). Default: \"\"."
    • changedInput schema / properties / parent_design_id / description
      Previous value: -"Default: \"\"."New value: +"Optional identifier of the design this print is derived from — threads through to the provenance sidecar so reprint/diff tooling can follow the lineage. Default: \"\"."
    • changedInput schema / properties / printer_name / description
      Previous value: -"Default: \"default\"."New value: +"Printer identifier — passed to provenance and to the fleet layer. Default: \"default\"."
    • changedInput schema / properties / printer_z_known / description
      Previous value: -"Default: false."New value: +"REQUIRED ``True``.  The safety gate from ``generate_recovery_gcode`` — refuses with ``PRINTER_Z_UNKNOWN`` if the printer's absolute Z can't be trusted (power-cycle / reconnect / etc.). Default: false."
    • changedInput schema / properties / require_ams_match / description
      Previous value: -"Default: true."New value: +"When True, refuse to emit a material-changing resume artifact unless AMS status proves the requested slot/type/color. Keep True for user-facing work. Default: true."
    • changedInput schema / properties / source_3mf_path / description
      Previous value: -"Default: \"\"."New value: +"Optional original .3mf — passed to the Bambu wrapper so the resume 3MFs inherit the thumbnails + 3D model preview from the original job. Default: \"\"."
    • changedInput schema / properties / start_layer_override / description
      Previous value: -"Default: 0."New value: +"Force the carver's first carved layer.  ``0`` (the default) defers to the analyzer's verified ``top_band_start_layer`` floor — the correct choice for any carve whose mask might touch a perimeter.  A non-zero value reaches down to that layer instead, enabling deeper tactile debosses on thin parts whose analyzer floor is overly conservative.  Setting this below the analyzer's band_floor requires ``accept_unsafe_depth=True`` AND a centered carve mask (the analyzer's depth-safety envelope). Default: 0."
    • changedInput schema / properties / style / description
      Previous value: -"Default: \"stencil\"."New value: +"How the image becomes a carve mask: ``\"stencil\"`` (the default, a clean binary silhouette) or ``\"coin\"`` (a medallion-style recessed background around the image); the other image styles of Kiln's emboss pipeline are accepted too. A style the pipeline refuses fails with ``HEIGHTMAP_GENERATION_FAILED``. Default: \"stencil\"."
    • changedInput schema / properties / target_ams_slot / description
      Previous value: -"Default: -1."New value: +"Optional 0-indexed material slot that must feed the transformed resume artifact. On Bambu this is verified against AMS status. On non-Bambu adapters it is accepted only as an explicit declared tool slot route, for example when the user says the requested material/color is in slot 2. ``-1`` means no explicit material route was requested. Default: -1."
    • changedInput schema / properties / target_filament_color / description
      Previous value: -"Default: \"\"."New value: +"Optional expected tray color (``#RRGGBB`` or common name like ``blue``). Used with the same hard verification as ``target_filament_type``. Default: \"\"."
    • changedInput schema / properties / target_filament_type / description
      Previous value: -"Default: \"\"."New value: +"Optional expected tray material (``PLA``, ``PETG``, etc.). Without an explicit slot, the tool resolves exactly one loaded matching AMS tray from Kiln's existing ``ams_status`` data or fails closed. Default: \"\"."
    • changedInput schema / properties / threshold / description
      Previous value: -"Default: 0.35."New value: +"Heightmap value above which a pixel is treated as carved-away (0.0–1.0, default 0.35). Default: 0.35."
  2. Addedv1.5.0

TDQS

B3.4/5.0
Behavior3/5

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

The annotations already declare readOnlyHint=false, destructiveHint=false, and openWorldHint=false. The description adds useful behavior about opening an interactive 3D stage and automatic decimation of oversized meshes, but it omits the safety-gate/refusal behavior and artifact-generation workflow that matter for this complex mutation.

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 first sentence is front-loaded and states the core action efficiently. The second paragraph is somewhat repetitive, restating the inline 3D stage after the opening sentence already introduced it, but the overall structure remains readable.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a 26-parameter mutation tool with no output schema, the description covers the purpose and the stage-opening side effect. It does not explain the generated resume artifact, refusal conditions, or material-change workflow, leaving important context to the schema and annotations.

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 input schema already documents all 26 parameters in detail. The description does not add parameter-level meaning beyond what the schema provides, so the baseline score of 3 is appropriate.

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 states a specific verb and resource: "Add a decoration to an in-flight paused print (Pro)." It clearly scopes the tool to paused, in-flight prints, but it does not explicitly distinguish it from close siblings such as deboss_during_print or decorate_surface.

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 "in-flight paused print" and the Pro qualifier, so an agent can infer the context. However, the description gives no explicit when-to-use guidance, exclusions, or named alternatives for choosing between this and related decoration tools.

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