Skip to main content
Glama

multi_color_copies

Destructive

Print multiple copies of one model, each in a different AMS filament slot, to produce multi-color plates from a single STL or OBJ file.

Instructions

Print multiple copies of the same model, each in a different AMS color.

**Only a printer Kiln drives can make this print** — today a Bambu with
an AMS.  At any other printer the copies are REFUSED before slicing
with code ``MULTI_MATERIAL_NOT_DRIVEN`` (every copy would print in one
colour; the slot map below is a Bambu instruction).  The refusal
carries what Kiln saw on the printer (``multi_material``) and the
composed plate (``multi_material_3mf``) for slicing elsewhere.

Takes a single model file and produces a multi-color print where each
copy uses a different AMS filament slot.  Perfect for "print 4 lids
in 4 different colors" workflows.

**Auto-detect mode** (default): omit *copies*, *ams_slots*, and
*colors* — the tool queries the AMS, finds all loaded trays matching
*material*, and prints one copy per loaded tray.

**Manual mode**: specify *ams_slots* (and optionally *colors*) to
choose exactly which AMS trays to use and how many copies.

Requires PrusaSlicer or OrcaSlicer installed locally.  The printer
must be idle and have an AMS with loaded filament.

The emitted 3MF (``multi_color_3mf`` in the result) also opens in
Bambu Studio, which keeps the per-copy colors but re-derives print
settings itself — the result's ``slicer_note`` explains this; relay
it to the user when handing over the file.

:param model_path: Path to the model file (STL or OBJ).
:param copies: Number of copies.  Auto-detected from AMS if omitted.
:param ams_slots: The tray each copy prints from, by the printer's own
    tray id (``unit * 4 + slot`` on a chained unit, the unit id on an
    AMS HT; ``ams_status`` lists each tray's ``tray_id``).  E.g.
    ``[0, 1, 2, 3]`` for all 4 AMS Lite trays, ``[0, 5]`` for A1 and B2.
:param colors: Hex color strings per copy for slicer preview.
    E.g. ``["#FF0000", "#00FF00", "#0000FF", "#FFFF00"]``.
    Auto-read from AMS if omitted.
:param material: Material type filter for AMS auto-detect
    (default ``"PLA"``).  Only trays matching this type are used.
:param spacing_mm: Gap between copies on the plate (default 10 mm).
    Copies are arranged side by side, centered on the plate.
:param printer_id: Printer model ID for slicer profile selection and
    plate-size lookup when arranging the copies.
:param slicer_path: Explicit path to slicer binary.
:returns: Dict with print result, object details, and AMS mapping.
:param preview_token: Token from ``issue_preview_token`` proving this
    model was shown to the person before printing.  Required beside their
    go-ahead: a print is shown to its owner before it starts.

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": {
      "model_path": "<model_path>"
    },
    "name": "multi_color_copies"
  }
}

Input Schema

NameRequiredDescriptionDefault
colorsNoHex color strings per copy for slicer preview. E.g. ``["#FF0000", "#00FF00", "#0000FF", "#FFFF00"]``. Auto-read from AMS if omitted.
copiesNoNumber of copies. Auto-detected from AMS if omitted.
materialNoMaterial type filter for AMS auto-detect (default ``"PLA"``). Only trays matching this type are used. Default: "PLA".
ams_slotsNoThe tray each copy prints from, by the printer's own tray id (``unit * 4 + slot`` on a chained unit, the unit id on an AMS HT; ``ams_status`` lists each tray's ``tray_id``). E.g. ``[0, 1, 2, 3]`` for all 4 AMS Lite trays, ``[0, 5]`` for A1 and B2.
model_pathYesPath to the model file (STL or OBJ).
printer_idNoPrinter model ID for slicer profile selection and plate-size lookup when arranging the copies.
spacing_mmNoGap between copies on the plate (default 10 mm). Copies are arranged side by side, centered on the plate. Default: 10.0.
slicer_pathNoExplicit path to slicer binary.
preview_tokenNoToken from ``issue_preview_token`` proving this model was shown to the person before printing. Required beside their go-ahead: a print is shown to its owner before it starts.

Schema Changelog

Changes observed during successful MCP inspections.

  1. Changed9 schema fields changedv1.5.1
    • addedInput schema / properties / ams_slots / description
      Added value: +"The tray each copy prints from, by the printer's own tray id (``unit * 4 + slot`` on a chained unit, the unit id on an AMS HT; ``ams_status`` lists each tray's ``tray_id``).  E.g. ``[0, 1, 2, 3]`` for all 4 AMS Lite trays, ``[0, 5]`` for A1 and B2."
    • addedInput schema / properties / colors / description
      Added value: +"Hex color strings per copy for slicer preview. E.g. ``[\"#FF0000\", \"#00FF00\", \"#0000FF\", \"#FFFF00\"]``. Auto-read from AMS if omitted."
    • addedInput schema / properties / copies / description
      Added value: +"Number of copies.  Auto-detected from AMS if omitted."
    • changedInput schema / properties / material / description
      Previous value: -"Default: \"PLA\"."New value: +"Material type filter for AMS auto-detect (default ``\"PLA\"``).  Only trays matching this type are used. Default: \"PLA\"."
    • addedInput schema / properties / model_path / description
      Added value: +"Path to the model file (STL or OBJ)."
    • addedInput schema / properties / preview_token / description
      Added value: +"Token from ``issue_preview_token`` proving this model was shown to the person before printing.  Required beside their go-ahead: a print is shown to its owner before it starts."
    • addedInput schema / properties / printer_id / description
      Added value: +"Printer model ID for slicer profile selection and plate-size lookup when arranging the copies."
    • addedInput schema / properties / slicer_path / description
      Added value: +"Explicit path to slicer binary."
    • changedInput schema / properties / spacing_mm / description
      Previous value: -"Default: 10.0."New value: +"Gap between copies on the plate (default 10 mm). Copies are arranged side by side, centered on the plate. Default: 10.0."
  2. Changed10 schema fields changedv1.5.0
    • removedInput schema / properties / ams_slots / default
      Removed value: -null
    • removedInput schema / properties / colors / default
      Removed value: -null
    • removedInput schema / properties / copies / default
      Removed value: -null
    • removedInput schema / properties / material / default
      Removed value: -"PLA"
    • addedInput schema / properties / material / description
      Added value: +"Default: \"PLA\"."
    • addedInput schema / properties / preview_token
      Added value: +{
      +  "anyOf": [
      +    {
      +      "type": "string"
      +    },
      +    {
      +      "type": "null"
      +    }
      +  ],
      +  "title": "Preview Token"
      +}
    • removedInput schema / properties / printer_id / default
      Removed value: -null
    • removedInput schema / properties / slicer_path / default
      Removed value: -null
    • removedInput schema / properties / spacing_mm / default
      Removed value: -10
    • addedInput schema / properties / spacing_mm / description
      Added value: +"Default: 10.0."
  3. First observedv0.1.0

TDQS

A4.5/5.0
Behavior5/5

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

Annotations only flag destructiveHint=true and readOnlyHint=false; the description goes well beyond that by disclosing the pre-slice refusal path with error code MULTI_MATERIAL_NOT_DRIVEN, what the refusal payload carries (multi_material, multi_material_3mf), and the preview_token gate proving the model was shown to the owner. It also warns that the emitted 3MF re-derives print settings in Bambu Studio and that slicer_note must be relayed to the user — context an agent could not infer from the schema or annotations.

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 core purpose and the hard printer constraint are front-loaded well, but the body is long and carries docstring residue (:param/:returns markup, backtick pairs) plus a near-verbatim restatement of all nine schema parameter descriptions. Roughly a third of the text is duplicated structured data rather than added guidance.

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 destructive, hardware-dependent print tool with nine parameters and no output schema, the description covers prerequisites, failure modes, the two operating modes, return payload keys (multi_color_3mf, slicer_note, multi_material), and the consent gate. Nothing an agent needs before invoking it is missing.

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 baseline is 3; the description adds real meaning on top by explaining the mode interaction (omitting copies, ams_slots, and colors together triggers AMS auto-detection) and the tray-id derivation formula (unit * 4 + slot, unit id on AMS HT, cross-referenced to ams_status). Most individual parameter text duplicates the schema verbatim, which caps it below 5.

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 a specific verb and resource: 'Print multiple copies of the same model, each in a different AMS color,' and immediately names the concrete workflow ('print 4 lids in 4 different colors'). The first sentence plus the AMS-slot framing clearly separates it from siblings such as multi_copy_print, multi_material_print, and compose_multicolor_3mf.

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 explicit operating conditions (only a Kiln-driven Bambu with AMS; printer idle; AMS loaded; PrusaSlicer/OrcaSlicer installed) and defines the two usage modes, auto-detect (default, omit copies/ams_slots/colors) versus manual (specify ams_slots). It does not name sibling alternatives or say when to prefer multi_copy_print or multi_material_print instead, so routing between same-family tools is left to inference.

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