Skip to main content
Glama

smart_reprint

Destructive

Reprint a 3D model in a chosen material by finding the source file, selecting the matching AMS slot, applying material-specific slicer overrides, reslicing, and starting the print.

Instructions

Smart one-shot material-switch reprint — finds the model, detects the right AMS slot, adjusts slicer settings, and prints.

This is the highest-level reprinting tool. Give it a file name (or
partial name) and a target material, and it handles everything:

1. **Find the model**: Searches print history for the file name, then
   searches common local directories for the source STL/3MF/STEP file.
2. **Check AMS**: Reads AMS tray status to find which slot has the
   target material loaded. Auto-selects the matching slot.
3. **Build overrides**: Generates material-specific slicer overrides
   (temperature, speed, retraction) for the target material.
4. **Reslice + print**: Reslices the model with new settings and
   starts the print with the correct AMS mapping.

Example: "Reprint my grip extension in PETG"::

    smart_reprint(
        file_name="grip_extension",
        material_id="petg",
        printer_name="my_bambu",
        printer_id="bambu_a1",
    )

The tool will find ``grip_extension.stl`` on disk, detect that PETG
is loaded in AMS slot 1, adjust temps/speeds for PETG, reslice, and
start printing — all in one call.

Saved-goal carry-forward: when the source model on disk has a
``<file>.intent.json`` sidecar tagged with a saved goal, that
goal's id is auto-recovered and surfaced as ``brief_id`` in the
result so downstream ``record_print_outcome`` correctly links the
reprint back to the goal. Pass ``brief_id="..."`` explicitly to
override the sidecar derivation (rare — useful for one-off
re-attributions).

Args:
    file_name: Full or partial file name to search for (e.g.
        ``"grip_extension"`` or ``"grip_extension.stl"``).
        Searched in print history first, then in local directories.
    material_id: Target material (e.g. ``"petg"``, ``"tpu"``).
    printer_name: Registered printer name in fleet.
    printer_id: Printer model ID for profile selection.
    search_dirs: Optional JSON array of extra directories to search
        for the model file (e.g. ``'["/home/user/models"]'``).
    extra_overrides: Optional JSON string of additional slicer
        overrides (e.g. ``'{"fill_density": "30%"}'``).
    auto_ams: If ``True`` (default), automatically detect AMS slot
        for the target material. Set to ``False`` to skip AMS
        detection (useful for non-Bambu printers).
    brief_id: Optional saved-goal id from ``design_session``.  When
        omitted, the source model's intent sidecar (if any) is read
        and the saved goal's id is derived from its ``generator``
        field — so a reprint of a brief-attached design keeps the
        goal link automatically.  Best-effort: missing kiln-pro or
        missing sidecar silently skips.  The goal then records the
        material its part printed in (``goal_material`` in the reply).
    chosen_by: Who picked this material: ``"person"`` when they named it,
        ``"agent"`` when you proposed it.  Kept with the goal's record;
        omitted, it is left unsaid.

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_name": "<file_name>",
      "material_id": "<material_id>"
    },
    "name": "smart_reprint"
  }
}

Input Schema

NameRequiredDescriptionDefault
auto_amsNoIf ``True`` (default), automatically detect AMS slot for the target material. Set to ``False`` to skip AMS detection (useful for non-Bambu printers). Default: true.
brief_idNoOptional saved-goal id from ``design_session``. When omitted, the source model's intent sidecar (if any) is read and the saved goal's id is derived from its ``generator`` field — so a reprint of a brief-attached design keeps the goal link automatically. Best-effort: missing kiln-pro or missing sidecar silently skips. The goal then records the material its part printed in (``goal_material`` in the reply). Default: "".
chosen_byNoWho picked this material: ``"person"`` when they named it, ``"agent"`` when you proposed it. Kept with the goal's record; omitted, it is left unsaid. Default: "".
file_nameYesFull or partial file name to search for (e.g. ``"grip_extension"`` or ``"grip_extension.stl"``). Searched in print history first, then in local directories.
printer_idNoPrinter model ID for profile selection.
material_idYesTarget material (e.g. ``"petg"``, ``"tpu"``).
search_dirsNoOptional JSON array of extra directories to search for the model file (e.g. ``'["/home/user/models"]'``).
printer_nameNoRegistered printer name in fleet.
extra_overridesNoOptional JSON string of additional slicer overrides (e.g. ``'{"fill_density": "30%"}'``).

Schema Changelog

Changes observed during successful MCP inspections.

  1. Changed9 schema fields changedv1.5.1
    • changedInput schema / properties / auto_ams / description
      Previous value: -"Default: true."New value: +"If ``True`` (default), automatically detect AMS slot for the target material. Set to ``False`` to skip AMS detection (useful for non-Bambu printers). Default: true."
    • changedInput schema / properties / brief_id / description
      Previous value: -"Default: \"\"."New value: +"Optional saved-goal id from ``design_session``.  When omitted, the source model's intent sidecar (if any) is read and the saved goal's id is derived from its ``generator`` field — so a reprint of a brief-attached design keeps the goal link automatically.  Best-effort: missing kiln-pro or missing sidecar silently skips.  The goal then records the material its part printed in (``goal_material`` in the reply). Default: \"\"."
    • addedInput schema / properties / chosen_by
      Added value: +{
      +  "description": "Who picked this material: ``\"person\"`` when they named it, ``\"agent\"`` when you proposed it.  Kept with the goal's record; omitted, it is left unsaid. Default: \"\".",
      +  "title": "Chosen By",
      +  "type": "string"
      +}
    • addedInput schema / properties / extra_overrides / description
      Added value: +"Optional JSON string of additional slicer overrides (e.g. ``'{\"fill_density\": \"30%\"}'``)."
    • addedInput schema / properties / file_name / description
      Added value: +"Full or partial file name to search for (e.g. ``\"grip_extension\"`` or ``\"grip_extension.stl\"``). Searched in print history first, then in local directories."
    • addedInput schema / properties / material_id / description
      Added value: +"Target material (e.g. ``\"petg\"``, ``\"tpu\"``)."
    • addedInput schema / properties / printer_id / description
      Added value: +"Printer model ID for profile selection."
    • addedInput schema / properties / printer_name / description
      Added value: +"Registered printer name in fleet."
    • addedInput schema / properties / search_dirs / description
      Added value: +"Optional JSON array of extra directories to search for the model file (e.g. ``'[\"/home/user/models\"]'``)."
  2. Changed10 schema fields changedv1.5.0
    • removedInput schema / properties / auto_ams / default
      Removed value: -true
    • addedInput schema / properties / auto_ams / description
      Added value: +"Default: true."
    • removedInput schema / properties / brief_id / default
      Removed value: -""
    • addedInput schema / properties / brief_id / description
      Added value: +"Default: \"\"."
    • changedInput schema / properties / extra_overrides / anyOf
      Previous value: -[
      -  {
      -    "type": "string"
      -  },
      -  {
      -    "type": "null"
      -  }
      -]New value: +[
      +  {
      +    "type": "string"
      +  },
      +  {
      +    "additionalProperties": true,
      +    "type": "object"
      +  },
      +  {
      +    "type": "null"
      +  }
      +]
    • removedInput schema / properties / extra_overrides / default
      Removed value: -null
    • removedInput schema / properties / printer_id / default
      Removed value: -null
    • removedInput schema / properties / printer_name / default
      Removed value: -null
    • changedInput schema / properties / search_dirs / anyOf
      Previous value: -[
      -  {
      -    "type": "string"
      -  },
      -  {
      -    "type": "null"
      -  }
      -]New value: +[
      +  {
      +    "type": "string"
      +  },
      +  {
      +    "items": {
      +      "type": "string"
      +    },
      +    "type": "array"
      +  },
      +  {
      +    "type": "null"
      +  }
      +]
    • removedInput schema / properties / search_dirs / default
      Removed value: -null
  3. First observedv0.1.0

TDQS

A4.4/5.0
Behavior4/5

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

Annotations declare destructiveHint=true; the description adds real context beyond that — it actually starts a print, auto-selects AMS slots, derives brief_id from an intent sidecar, and notes sidecar recovery is best-effort and silently skipped. It could still say more about failure modes if a material isn't loaded or the file isn't found.

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?

Front-loaded with a one-line purpose followed by a clean numbered pipeline and a concrete example — easy to scan. The saved-goal carry-forward paragraph and the brief_id Args entry substantially repeat each other and the schema, adding length without new information.

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 high-level orchestration tool with no output schema, it covers the whole flow, the example, and the return-value linkage (brief_id, goal_material in the reply). An agent has enough to invoke it correctly and understand downstream effects.

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 baseline is 3, but the description adds value via a worked example call and explains the sidecar derivation path and the 'chosen_by' semantics in narrative rather than restating the schema. The Args block mostly duplicates the schema text, 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+resource (one-shot material-switch reprint) and enumerates the four sub-steps it performs. An agent can distinguish this from siblings like reprint_with_material, slice_and_print, or run_quick_print without opening any 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?

Explicitly positions itself as 'the highest-level reprinting tool' and tells the agent to use it when it has a file name and target material. It says what it handles end-to-end but never names a lower-level sibling (e.g. reslice_with_overrides, start_print) as the alternative to pick instead, so the routing is implied 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