Skip to main content
Glama

estimate_before_design

Read-only

Calculate print time, cost, and filament usage from dimensions or a template before generating a 3D model, so you can check budgets and material needs before committing to a design.

Instructions

Estimate print time, cost, and filament usage BEFORE generating a model.

        Works from dimensions alone — no file, no slicing, no generation
        needed.  Use this to answer "how long will it take?", "how much
        will it cost?", and "how much filament?" before committing to a
        design.

        **Two ways to specify dimensions:**

        1. **Direct dimensions** — provide ``width_mm``, ``depth_mm``,
           ``height_mm`` explicitly.
        2. **Template** — provide ``template_id`` (e.g. ``"phone_stand"``,
           ``"box_with_lid"``) and optional ``template_overrides`` to use
           the template's default dimensions.

        **Multi-material prints:** Pass comma-separated materials
        (e.g. ``"PLA,PLA"`` for two-color) with optional fractions
        (e.g. ``"0.85,0.15"`` for body + accent).  The tool estimates
        per-filament usage and tool change overhead automatically.

        Returns time estimate, per-filament weight/length/cost breakdown,
        electricity cost, total cost, and tool swap count.

        :param width_mm: Part width (X) in mm.  Required if no template.
        :param depth_mm: Part depth (Y) in mm.  Required if no template.
        :param height_mm: Part height (Z) in mm.  Required if no template.
        :param template_id: Design template ID (e.g. ``"phone_stand"``).
            Resolves dimensions from template defaults.  Overrides
            width/depth/height if provided.
        :param template_overrides: JSON string of template parameter
            overrides (e.g. ``'{"phone_width": 85}'``).
        :param materials: Comma-separated material names
            (e.g. ``"PLA"`` or ``"PLA,PLA"`` for two-color).
        :param material_fractions: Comma-separated volume fractions
            (e.g. ``"0.85,0.15"``).  Must match materials count and sum
            to 1.0.  Default: body gets 85%, accents split the rest.
        :param material_roles: Comma-separated role labels
            (e.g. ``"body,accent"``).  Default: auto-generated.
        :param infill_percent: Infill density override (0-100).
            Default: from printer profile or 20%.  Pass ``-1`` for auto.
        :param layer_height_mm: Layer height override.  ``0`` = auto.
        :param nozzle_mm: Nozzle diameter in mm.  Leave unset for the
            nozzle Kiln has for ``printer_id`` (or the only printer it
            knows of), else 0.4.
        :param wall_layers: Number of perimeter shells (default 3).
        :param printer_id: Printer model for speed/setting lookup
            (e.g. ``"bambu_a1"``, ``"prusa_mk4"``).
        :param tool_changer_addon: Optional multi-material add-on ID.
            Overrides the printer's built-in tool change timing.
            Examples: ``"creality_cfs"`` (K1 series),
            ``"mosaic_palette3"`` (universal), ``"coprint_kcm"``
            (Klipper printers), ``"chameleon_mk4"`` (universal),
            ``"elegoo_canvas"`` (Centauri Carbon 2).
            Use ``list_multi_material_addons`` to see all options.
        :param electricity_rate: Cost per kWh in USD (default 0.12).
        :param printer_wattage: Printer power in watts (default 200).
        

Tool call template

This tool declares no required parameters. Add optional parameters from the input schema as needed.

{
  "id": 1,
  "jsonrpc": "2.0",
  "method": "tools/call",
  "params": {
    "arguments": {},
    "name": "estimate_before_design"
  }
}

Input Schema

NameRequiredDescriptionDefault
depth_mmNoPart depth (Y) in mm. Required if no template. Default: 0.0.
width_mmNoPart width (X) in mm. Required if no template. Default: 0.0.
height_mmNoPart height (Z) in mm. Required if no template. Default: 0.0.
materialsNoComma-separated material names (e.g. ``"PLA"`` or ``"PLA,PLA"`` for two-color). Default: "PLA".
nozzle_mmNoNozzle diameter in mm. Leave unset for the nozzle Kiln has for ``printer_id`` (or the only printer it knows of), else 0.4.
printer_idNoPrinter model for speed/setting lookup (e.g. ``"bambu_a1"``, ``"prusa_mk4"``). Default: "".
template_idNoDesign template ID (e.g. ``"phone_stand"``). Resolves dimensions from template defaults. Overrides width/depth/height if provided. Default: "".
wall_layersNoNumber of perimeter shells (default 3). Default: 3.
infill_percentNoInfill density override (0-100). Default: from printer profile or 20%. Pass ``-1`` for auto. Default: -1.0.
material_rolesNoComma-separated role labels (e.g. ``"body,accent"``). Default: auto-generated. Default: "".
layer_height_mmNoLayer height override. ``0`` = auto. Default: 0.0.
printer_wattageNoPrinter power in watts (default 200). Default: 200.0.
electricity_rateNoCost per kWh in USD (default 0.12). Default: 0.12.
material_fractionsNoComma-separated volume fractions (e.g. ``"0.85,0.15"``). Must match materials count and sum to 1.0. Default: body gets 85%, accents split the rest. Default: "".
template_overridesNoJSON string of template parameter overrides (e.g. ``'{"phone_width": 85}'``). Default: "".
tool_changer_addonNoOptional multi-material add-on ID. Overrides the printer's built-in tool change timing. Examples: ``"creality_cfs"`` (K1 series), ``"mosaic_palette3"`` (universal), ``"coprint_kcm"`` (Klipper printers), ``"chameleon_mk4"`` (universal), ``"elegoo_canvas"`` (Centauri Carbon 2). Use ``list_multi_material_addons`` to see all options. Default: "".

Schema Changelog

Changes observed during successful MCP inspections.

  1. Changed16 schema fields changedv1.5.1
    • changedInput schema / properties / depth_mm / description
      Previous value: -"Default: 0.0."New value: +"Part depth (Y) in mm.  Required if no template. Default: 0.0."
    • changedInput schema / properties / electricity_rate / description
      Previous value: -"Default: 0.12."New value: +"Cost per kWh in USD (default 0.12). Default: 0.12."
    • changedInput schema / properties / height_mm / description
      Previous value: -"Default: 0.0."New value: +"Part height (Z) in mm.  Required if no template. Default: 0.0."
    • changedInput schema / properties / infill_percent / description
      Previous value: -"Default: -1.0."New value: +"Infill density override (0-100). Default: from printer profile or 20%.  Pass ``-1`` for auto. Default: -1.0."
    • changedInput schema / properties / layer_height_mm / description
      Previous value: -"Default: 0.0."New value: +"Layer height override.  ``0`` = auto. Default: 0.0."
    • changedInput schema / properties / material_fractions / description
      Previous value: -"Default: \"\"."New value: +"Comma-separated volume fractions (e.g. ``\"0.85,0.15\"``).  Must match materials count and sum to 1.0.  Default: body gets 85%, accents split the rest. Default: \"\"."
    • changedInput schema / properties / material_roles / description
      Previous value: -"Default: \"\"."New value: +"Comma-separated role labels (e.g. ``\"body,accent\"``).  Default: auto-generated. Default: \"\"."
    • changedInput schema / properties / materials / description
      Previous value: -"Default: \"PLA\"."New value: +"Comma-separated material names (e.g. ``\"PLA\"`` or ``\"PLA,PLA\"`` for two-color). Default: \"PLA\"."
    • addedInput schema / properties / nozzle_mm / description
      Added value: +"Nozzle diameter in mm.  Leave unset for the nozzle Kiln has for ``printer_id`` (or the only printer it knows of), else 0.4."
    • changedInput schema / properties / printer_id / description
      Previous value: -"Default: \"\"."New value: +"Printer model for speed/setting lookup (e.g. ``\"bambu_a1\"``, ``\"prusa_mk4\"``). Default: \"\"."
    • changedInput schema / properties / printer_wattage / description
      Previous value: -"Default: 200.0."New value: +"Printer power in watts (default 200). Default: 200.0."
    • changedInput schema / properties / template_id / description
      Previous value: -"Default: \"\"."New value: +"Design template ID (e.g. ``\"phone_stand\"``). Resolves dimensions from template defaults.  Overrides width/depth/height if provided. Default: \"\"."
    • changedInput schema / properties / template_overrides / description
      Previous value: -"Default: \"\"."New value: +"JSON string of template parameter overrides (e.g. ``'{\"phone_width\": 85}'``). Default: \"\"."
    • changedInput schema / properties / tool_changer_addon / description
      Previous value: -"Default: \"\"."New value: +"Optional multi-material add-on ID. Overrides the printer's built-in tool change timing. Examples: ``\"creality_cfs\"`` (K1 series), ``\"mosaic_palette3\"`` (universal), ``\"coprint_kcm\"`` (Klipper printers), ``\"chameleon_mk4\"`` (universal), ``\"elegoo_canvas\"`` (Centauri Carbon 2). Use ``list_multi_material_addons`` to see all options. Default: \"\"."
    • changedInput schema / properties / wall_layers / description
      Previous value: -"Default: 3."New value: +"Number of perimeter shells (default 3). Default: 3."
    • changedInput schema / properties / width_mm / description
      Previous value: -"Default: 0.0."New value: +"Part width (X) in mm.  Required if no template. Default: 0.0."
  2. Changed33 schema fields changedv1.5.0
    • removedInput schema / properties / depth_mm / default
      Removed value: -0
    • addedInput schema / properties / depth_mm / description
      Added value: +"Default: 0.0."
    • removedInput schema / properties / electricity_rate / default
      Removed value: -0.12
    • addedInput schema / properties / electricity_rate / description
      Added value: +"Default: 0.12."
    • removedInput schema / properties / height_mm / default
      Removed value: -0
    • addedInput schema / properties / height_mm / description
      Added value: +"Default: 0.0."
    • removedInput schema / properties / infill_percent / default
      Removed value: --1
    • addedInput schema / properties / infill_percent / description
      Added value: +"Default: -1.0."
    • removedInput schema / properties / layer_height_mm / default
      Removed value: -0
    • addedInput schema / properties / layer_height_mm / description
      Added value: +"Default: 0.0."
    • removedInput schema / properties / material_fractions / default
      Removed value: -""
    • addedInput schema / properties / material_fractions / description
      Added value: +"Default: \"\"."
    • removedInput schema / properties / material_roles / default
      Removed value: -""
    • addedInput schema / properties / material_roles / description
      Added value: +"Default: \"\"."
    • removedInput schema / properties / materials / default
      Removed value: -"PLA"
    • addedInput schema / properties / materials / description
      Added value: +"Default: \"PLA\"."
    • addedInput schema / properties / nozzle_mm / anyOf
      Added value: +[
      +  {
      +    "type": "number"
      +  },
      +  {
      +    "type": "null"
      +  }
      +]
    • removedInput schema / properties / nozzle_mm / default
      Removed value: -0.4
    • removedInput schema / properties / nozzle_mm / type
      Removed value: -"number"
    • removedInput schema / properties / printer_id / default
      Removed value: -""
    • addedInput schema / properties / printer_id / description
      Added value: +"Default: \"\"."
    • removedInput schema / properties / printer_wattage / default
      Removed value: -200
    • addedInput schema / properties / printer_wattage / description
      Added value: +"Default: 200.0."
    • removedInput schema / properties / template_id / default
      Removed value: -""
    • addedInput schema / properties / template_id / description
      Added value: +"Default: \"\"."
    • removedInput schema / properties / template_overrides / default
      Removed value: -""
    • addedInput schema / properties / template_overrides / description
      Added value: +"Default: \"\"."
    • removedInput schema / properties / tool_changer_addon / default
      Removed value: -""
    • addedInput schema / properties / tool_changer_addon / description
      Added value: +"Default: \"\"."
    • removedInput schema / properties / wall_layers / default
      Removed value: -3
    • addedInput schema / properties / wall_layers / description
      Added value: +"Default: 3."
    • removedInput schema / properties / width_mm / default
      Removed value: -0
    • addedInput schema / properties / width_mm / description
      Added value: +"Default: 0.0."
  3. First observedv0.1.0

TDQS

A4/5.0
Behavior4/5

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

Annotations already establish this as a safe, non-destructive, non-open-world read, so the description only needs to add estimation behavior. It does: it discloses that the estimate is computed analytically from dimensions (no slicing/generation), that multi-material runs get per-filament usage plus automatic tool-change overhead, and it enumerates the returned fields (per-filament weight/length/cost, electricity, total, swap count) despite there being no output schema.

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?

Front-loaded well: purpose, then the two dimension modes, then multi-material, then return values — a sensible order. But roughly half the body is a ':param' list duplicating a schema that already has 100% description coverage, and 16 parameters make the whole thing long enough that the useful behavioral content competes with redundancy.

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 16-parameter, zero-required-parameter tool with no output schema, it covers the important gaps: what is returned, how the two dimension modes interact, how multi-material fractions/roles work, the auto-sentinel values (-1 infill, 0 layer height, unset nozzle), and it points to list_multi_material_addons for the addon enumeration. The only real omission is guidance on which printer_id values are valid.

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 already 100%, and the ':param' block is largely a verbatim restatement of the schema text, so most of it earns no credit. The genuinely additive part is the framing of the two mutually exclusive input modes (explicit width/depth/height vs. template_id with template_overrides taking precedence), which clarifies an OR-relationship the flat schema cannot express.

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 (estimate print time, cost, filament usage) plus a decisive scope qualifier: 'BEFORE generating a model' and 'works from dimensions alone — no file, no slicing, no generation needed.' That qualifier is exactly what separates it from mesh-based siblings like estimate_mesh_print_time, estimate_print_cost_from_mesh, and slice_and_estimate.

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 concrete triggering questions ('how long will it take?', 'how much will it cost?') and a clear precondition (before committing to a design), and the two-way dimension specification is spelled out. It stops short of naming the alternative tools to use when a mesh already exists, so the agent must infer the boundary rather than being routed to it.

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