Skip to main content
Glama

multi_copy_print

Destructive

Prints multiple copies of a 3D model on one build plate, arranging them in a spaced grid and slicing as a single job; overflow copies are refused or queued for later plates.

Instructions

Print multiple copies of a model arranged on one build plate.

Automatically arranges copies in a grid with spacing so they don't
overlap, slices the plate as a single job, and prints.

Uses PrusaSlicer's ``--duplicate`` flag when available (handles placement,
collision avoidance, and travel optimization). Falls back to STL mesh
duplication for OrcaSlicer or when fine control is needed.  Copies that do
not all fit the bed are refused, saying so, never sliced short.

With ``fill=True`` (an STL, 1 to 50 copies) Kiln places as many copies
as fit on the plate as it stands, up to ``copies``, beside anything
already there, and never refuses because fewer fit: the result says how
many it placed (``copies_placed``).  The copies that did not fit are
queued on the same printer (``queued_job_id``) and print as the next
plate once this one is taken off and the plate is said to be clear,
plate after plate until all are done; ``cancel_queued_job`` stops the
rest.  How many fit is answered on every tier; placing copies beside a
part still on the plate is a kiln-pro feature.

Requires a slicer (PrusaSlicer or OrcaSlicer) installed locally.
The printer must be idle and connected.

Args:
    model_path: Path to input model (STL, OBJ).
    copies: Number of copies to print (2-20; with ``fill``, at most
        this many, 1-50).
    printer_name: Registered printer name in fleet.
    printer_id: Printer model ID for auto-profile selection.
    spacing_mm: Gap between copies in mm (default 10).
    overrides: JSON string of slicer parameter overrides.
    slicer_path: Explicit path to the slicer binary.
    fill: Place as many copies as fit on the plate as it stands.
    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>",
      "copies": "<copies>"
    },
    "name": "multi_copy_print"
  }
}

Input Schema

NameRequiredDescriptionDefault
fillNoPlace as many copies as fit on the plate as it stands. Default: false.
copiesYesNumber of copies to print (2-20; with ``fill``, at most this many, 1-50).
overridesNoJSON string of slicer parameter overrides.
model_pathYesPath to input model (STL, OBJ).
printer_idNoPrinter model ID for auto-profile selection.
spacing_mmNoGap between copies in mm (default 10). Default: 10.0.
slicer_pathNoExplicit path to the slicer binary.
printer_nameNoRegistered printer name in fleet.
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 / copies / description
      Added value: +"Number of copies to print (2-20; with ``fill``, at most this many, 1-50)."
    • addedInput schema / properties / fill
      Added value: +{
      +  "description": "Place as many copies as fit on the plate as it stands. Default: false.",
      +  "title": "Fill",
      +  "type": "boolean"
      +}
    • addedInput schema / properties / model_path / description
      Added value: +"Path to input model (STL, OBJ)."
    • addedInput schema / properties / overrides / description
      Added value: +"JSON string of slicer parameter overrides."
    • 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 auto-profile selection."
    • addedInput schema / properties / printer_name / description
      Added value: +"Registered printer name in fleet."
    • addedInput schema / properties / slicer_path / description
      Added value: +"Explicit path to the slicer binary."
    • changedInput schema / properties / spacing_mm / description
      Previous value: -"Default: 10.0."New value: +"Gap between copies in mm (default 10). Default: 10.0."
  2. Changed8 schema fields changedv1.5.0
    • changedInput schema / properties / overrides / anyOf
      Previous value: -[
      -  {
      -    "type": "string"
      -  },
      -  {
      -    "type": "null"
      -  }
      -]New value: +[
      +  {
      +    "type": "string"
      +  },
      +  {
      +    "additionalProperties": true,
      +    "type": "object"
      +  },
      +  {
      +    "type": "null"
      +  }
      +]
    • removedInput schema / properties / overrides / default
      Removed value: -null
    • 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 / printer_name / 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.2/5.0
Behavior5/5

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

Annotations only mark this as non-read-only and destructive; the description goes well beyond that by stating that copies which do not fit are refused rather than sliced short, that fill mode queues overflow onto the same printer with a queued_job_id, that cancel_queued_job stops the remainder, and that placing beside an existing part is a paid-tier feature. This is exactly the irreversibility and gating context an agent needs before committing a print.

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 purpose is front-loaded and the fill/queue paragraph is valuable, but the text is roughly 300 words with repeated phrasing ('plate after plate until all are done', 'as many copies as fit' stated twice) and an Args block that duplicates a 100%-covered schema. It could be trimmed by a third without losing information.

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

Completeness4/5

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

For a 9-parameter mutation with no output schema, the description covers prerequisites, tier gating, the refusal-versus-queue distinction, and even names the return fields (copies_placed, queued_job_id) an agent should expect. What is missing is the result shape for the non-fill path and how overrides interact with the built-in duplication behavior.

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 coverage is 100%, so the schema already documents all nine parameters and the Args block largely restates it verbatim. The description does add genuine meaning for fill (at most `copies`, 1-50, never refuses) and for preview_token (proof the model was shown to its owner), but the remaining parameters get no information beyond the schema. Baseline 3 applies.

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?

Opens with a specific verb and resource plus scope: 'Print multiple copies of a model arranged on one build plate.' The second sentence explains the mechanism (grid arrangement, single slicing job), which makes it easy to separate from siblings such as multi_color_copies or plan_multi_copy_split.

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 clear conditions: a slicer must be installed, the printer must be idle and connected, and preview_token is required alongside the owner's go-ahead. The fill=True path is explained with distinct ranges and behavior. It never names an alternative tool to use instead (e.g., a multicolor-copy or split-plate variant), so routing is inferred rather than explicit.

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