Skip to main content
Glama

generate_and_print

Destructive

Generates a 3D model from a text prompt, validates and slices it, then uploads a print preview to the target printer without starting. Call start_print only after reviewing the preview.

Instructions

Full pipeline: generate a model, validate, slice, and upload (preview).

        **EXPERIMENTAL:** This generates a 3D model, validates it, slices it,
        and uploads it to the printer — but does NOT start printing.  3D
        printers are delicate hardware and AI-generated models are not
        guaranteed to be safe or printable.  You MUST call ``start_print``
        separately after reviewing the preview results.

        When possible, prefer downloading proven models from marketplaces
        (Thingiverse, MyMiniFactory) instead of generating new ones.

        Args:
            brief_id: The saved goal's id from ``design_session``, so this make
                is recorded against the goal and checked against it. Empty when
                there is no goal.
            prompt: Text description of the 3D model to generate.
            provider: Generation provider: ``"meshy"``, ``"gemini"``,
                ``"tripo3d"``, ``"stability"`` (cloud, each needs its own
                key) or ``"openscad"`` (local, keyless).  Default
                ``"meshy"``.
            style: Optional style hint for cloud providers.
            printer_name: Target printer.  Omit for the default printer.
            profile: Slicer profile path.
            printer_id: Optional printer model ID for bundled profile
                auto-selection (e.g. ``"prusa_mini"``).
            timeout: Max seconds to wait for generation (default 600).
            material: Filament material for the slice (``"PLA"``,
                ``"PETG"``, …).  It sets the temperatures, melt rate and
                cooling, and its density weighs the print.  Omitted, the
                spool the printer reports loaded answers, then PLA —
                ``slice.filament`` says which.
            placement: Where the part goes when the plate still holds
                the last print: ``[x, y]`` in mm, a named region
                (``"front-left"``, ``"centre"``, …), or ``"keep"``.
                Omitted, an occupied plate refuses before slicing and
                lists the spots that would work.  The clearance verdict
                is free; placing and starting a second print on an
                occupied plate is a kiln-pro feature.

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.

MAKE DOORS: design_session, Kiln's front door for making an object, is not installed here (signed in to Kiln it runs on Kiln's servers). On this install compile_scad IS the make → preview → iterate loop: make it, show the preview, iterate.

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": {
      "prompt": "<prompt>"
    },
    "name": "generate_and_print"
  }
}

Input Schema

NameRequiredDescriptionDefault
styleNoOptional style hint for cloud providers.
promptYesText description of the 3D model to generate.
profileNoSlicer profile path.
timeoutNoMax seconds to wait for generation (default 600). Default: 600.
brief_idNoThe saved goal's id from ``design_session``, so this make is recorded against the goal and checked against it. Empty when there is no goal. Default: "".
materialNoFilament material for the slice (``"PLA"``, ``"PETG"``, …). It sets the temperatures, melt rate and cooling, and its density weighs the print. Omitted, the spool the printer reports loaded answers, then PLA — ``slice.filament`` says which.
providerNoGeneration provider: ``"meshy"``, ``"gemini"``, ``"tripo3d"``, ``"stability"`` (cloud, each needs its own key) or ``"openscad"`` (local, keyless). Default ``"meshy"``. Default: "meshy".
placementNoWhere the part goes when the plate still holds the last print: ``[x, y]`` in mm, a named region (``"front-left"``, ``"centre"``, …), or ``"keep"``. Omitted, an occupied plate refuses before slicing and lists the spots that would work. The clearance verdict is free; placing and starting a second print on an occupied plate is a kiln-pro feature.
printer_idNoOptional printer model ID for bundled profile auto-selection (e.g. ``"prusa_mini"``).
printer_nameNoTarget printer. Omit for the default printer.

Schema Changelog

Changes observed during successful MCP inspections.

  1. Changed10 schema fields changedv1.5.1
    • changedInput schema / properties / brief_id / description
      Previous value: -"Default: \"\"."New value: +"The saved goal's id from ``design_session``, so this make is recorded against the goal and checked against it. Empty when there is no goal. Default: \"\"."
    • addedInput schema / properties / material / description
      Added value: +"Filament material for the slice (``\"PLA\"``, ``\"PETG\"``, …).  It sets the temperatures, melt rate and cooling, and its density weighs the print.  Omitted, the spool the printer reports loaded answers, then PLA — ``slice.filament`` says which."
    • addedInput schema / properties / placement / description
      Added value: +"Where the part goes when the plate still holds the last print: ``[x, y]`` in mm, a named region (``\"front-left\"``, ``\"centre\"``, …), or ``\"keep\"``. Omitted, an occupied plate refuses before slicing and lists the spots that would work.  The clearance verdict is free; placing and starting a second print on an occupied plate is a kiln-pro feature."
    • addedInput schema / properties / printer_id / description
      Added value: +"Optional printer model ID for bundled profile auto-selection (e.g. ``\"prusa_mini\"``)."
    • addedInput schema / properties / printer_name / description
      Added value: +"Target printer.  Omit for the default printer."
    • addedInput schema / properties / profile / description
      Added value: +"Slicer profile path."
    • addedInput schema / properties / prompt / description
      Added value: +"Text description of the 3D model to generate."
    • changedInput schema / properties / provider / description
      Previous value: -"Default: \"meshy\"."New value: +"Generation provider: ``\"meshy\"``, ``\"gemini\"``, ``\"tripo3d\"``, ``\"stability\"`` (cloud, each needs its own key) or ``\"openscad\"`` (local, keyless).  Default ``\"meshy\"``. Default: \"meshy\"."
    • addedInput schema / properties / style / description
      Added value: +"Optional style hint for cloud providers."
    • changedInput schema / properties / timeout / description
      Previous value: -"Default: 600."New value: +"Max seconds to wait for generation (default 600). Default: 600."
  2. Changed11 schema fields changedv1.5.0
    • addedInput schema / properties / brief_id
      Added value: +{
      +  "description": "Default: \"\".",
      +  "title": "Brief Id",
      +  "type": "string"
      +}
    • addedInput schema / properties / material
      Added value: +{
      +  "anyOf": [
      +    {
      +      "type": "string"
      +    },
      +    {
      +      "type": "null"
      +    }
      +  ],
      +  "title": "Material"
      +}
    • addedInput schema / properties / placement
      Added value: +{
      +  "anyOf": [
      +    {
      +      "type": "string"
      +    },
      +    {
      +      "items": {
      +        "type": "number"
      +      },
      +      "type": "array"
      +    },
      +    {
      +      "type": "null"
      +    }
      +  ],
      +  "title": "Placement"
      +}
    • removedInput schema / properties / printer_id / default
      Removed value: -null
    • removedInput schema / properties / printer_name / default
      Removed value: -null
    • removedInput schema / properties / profile / default
      Removed value: -null
    • removedInput schema / properties / provider / default
      Removed value: -"meshy"
    • addedInput schema / properties / provider / description
      Added value: +"Default: \"meshy\"."
    • removedInput schema / properties / style / default
      Removed value: -null
    • removedInput schema / properties / timeout / default
      Removed value: -600
    • addedInput schema / properties / timeout / description
      Added value: +"Default: 600."
  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?

Annotations already flag destructiveHint=true and openWorldHint=false, but the description adds substantial context beyond them: the pipeline stops at upload, cloud providers each need their own key while openscad is local/keyless, an occupied plate refuses before slicing, and placing a second print on an occupied plate is a gated 'kiln-pro' feature. It also discloses side effects (oversized meshes decimated for the stage) and the material fallback chain (spool-reported → PLA).

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 safety-critical warning is front-loaded before any parameter detail, which is the right ordering for a destructive tool. It is long, and the trailing INLINE 3D STAGE and MAKE DOORS blocks are somewhat digressive, but each earns its place by changing how the agent acts (review the stage, use compile_scad here).

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 destructive pipeline with no output schema, the definition covers the full lifecycle: generation, validation, slicing, upload, preview review, and the separate print step, plus provider prerequisites and plate-occupancy failure behavior. Nothing critical to invoking it correctly is missing.

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%, and the Args section largely restates the same field text (provider list, material defaults, placement formats). It adds marginal elaboration rather than new meaning, so the baseline 3 for a fully documented schema is appropriate.

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 precise verb chain and resource: 'Full pipeline: generate a model, validate, slice, and upload (preview).' It immediately carves out its boundary against siblings like start_print ('does NOT start printing') and slice_and_print, so an agent can distinguish it 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 Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Explicitly states the required follow-up ('You MUST call start_print separately after reviewing the preview results'), names an alternative strategy ('prefer downloading proven models from marketplaces'), and routes to a different make loop ('On this install compile_scad IS the make → preview → iterate loop') when design_session is unavailable. When/when-not/alternative are all present.

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