Skip to main content
Glama

apply_procedural_texture

Apply multicolor procedural textures to 3D models for AMS/MMU printing, then preview the result in an interactive 3D stage.

Instructions

Apply a multicolor procedural texture (requires AMS/MMU for multi-material printing). Opens Kiln's interactive inline 3D stage on the result (orbit/zoom panel in MCP Apps hosts; hosted sessions add a browser stage link).

Free accounts get 3 textures a month; Pro has no monthly limit.

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.

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": {
      "input_path": "<input_path>",
      "texture": "<texture>"
    },
    "name": "apply_procedural_texture"
  }
}

Input Schema

NameRequiredDescriptionDefault
seedNoRandom seed for reproducible results (default 0). Default: 0.
scaleNoTexture scale multiplier. Larger = coarser pattern, smaller = finer detail. Default 1.0. Default: 1.0.
presetNoOptional name of one of the texture's curated colourways, as ``list_procedural_textures`` lists them. Used when neither ``color_palette`` nor ``color_overrides`` is given; an unknown name is refused with the available presets.
surfaceNoWhich faces to texture. "all" textures every face (default). "outside" skips interior faces. "walls" only textures vertical/curved faces. "caps" only textures flat/horizontal faces. Filtered-out faces are placed in zone 0 (base color). Default: "all".
textureYesWhich color pattern: "camo", "tiger_stripe", "digital_camo", "ocean", "tie_dye", "marble", "lava", "galaxy", or "custom" (your own image via ``image_path``). ``list_procedural_textures`` describes each.
image_pathNoYour own pattern image as the texture — only with ``texture="custom"``. The image's tones posterize into ``num_colors`` zones (2 colors on a black/white pattern reproduces it exactly); works with any palette. One-shot: no sizing input needed (see ``image_tile_mm``).
input_pathYesPath to an STL file.
mark_scaleNoMark box as a fraction of the face (default 0.45); contain-fit, aspect kept. Default: 0.45.
mark_styleNo``"stencil"`` (default, logos), ``"coin"``, ``"photo"``, ``"medallion"``, ``"portrait"``, ``"default"``. Default: "stencil".
num_colorsNoNumber of color zones / AMS slots (default 4). Default: 4.
printer_idNoOptional printer to check this palette against its loaded filament. When given, the result carries an ``ams_advisory`` saying whether the design prints true on what's loaded right now -- advice only, never a block. Read only from that exact printer (or reported as unknown); on the hosted API, where there is no printer, it is always unknown.
color_paletteNoOptional list of hex colors (overrides all). **Keeping a custom look:** when this is the user's own colors (not a curated preset) and they seem happy with the result, offer to save it with ``save_custom_palette`` -- that's what makes it available to ``push_palettes_to_cloud`` later, the same way the web app's explicit "save to library" works. Ask, don't save automatically; a quick experiment doesn't need to be kept. The result carries a ``save_this_palette`` hint with ready-to-use call args when this applies.
image_tile_mmNoPhysical repeat size for a custom image pattern. Default (None) measures the motif period from the image and sizes the repeat so motifs print at a size the material can show, like the curated presets; the response carries ``auto_tile_mm`` + a warning naming the choice. Pass a value to override.
mark_depth_mmNoMark carve depth in mm (default 1.2).
mark_placementNo``"center"`` (default), ``"top"``, ``"bottom"``, ``"top-rim"``, or ``"bottom-rim"``. Default: "center".
relief_textureNoOptional geometric texture (``"alligator"``, ``"wood"``, ...) to carve as physical relief UNDER the color split -- the stacked finish. One compile: the relief debosses first, then the color zones split over the carved surface, so the recess walls carry the zones straight through (the same proven carve-then-split path the lava relief and user marks use). A mark can ride along too; its clear panel composes into the same carve.
color_overridesNoOptional dict mapping semantic role names to hex colors. Only specified roles are changed; the rest keep defaults. Example: ``{"foam": "#87CEEB", "deep": "#000033"}``. Use ``list_procedural_textures`` to see available roles.
mark_image_pathNoOptional PNG/JPG of a logo or photo to carve into the finish (see **Layered finish** above).
relief_depth_mmNoCarve depth for ``relief_texture`` in mm; unset uses that texture's own catalog depth (what ``apply_geometric_texture`` would cut).
save_to_libraryNoIf True, save the texture result to the decoration library for reuse. The decoration will have ``content_type="procedural_texture"`` and store all parameters needed to reproduce it. Default: false.
mark_offset_x_mmNoContinuous placement offset from the face centre, along the face's own width axis (image right), in mm. Adds on top of ``mark_placement``. Default: 0.0.
mark_offset_y_mmNoSame, along the face's height axis (image up). The mark's clear panel is clamped to stay on the face after offsets. Default: 0.0.
custom_palette_nameNoOptional name of a palette saved with ``save_custom_palette``. Used when no explicit colours or preset are given; an unknown name is refused with the saved names.

Schema Changelog

Changes observed during successful MCP inspections.

  1. Changed23 schema fields changedv1.5.1
    • addedInput schema / properties / color_overrides / description
      Added value: +"Optional dict mapping semantic role names to hex colors.  Only specified roles are changed; the rest keep defaults.  Example: ``{\"foam\": \"#87CEEB\", \"deep\": \"#000033\"}``. Use ``list_procedural_textures`` to see available roles."
    • addedInput schema / properties / color_palette / description
      Added value: +"Optional list of hex colors (overrides all). **Keeping a custom look:** when this is the user's own colors (not a curated preset) and they seem happy with the result, offer to save it with ``save_custom_palette`` -- that's what makes it available to ``push_palettes_to_cloud`` later, the same way the web app's explicit \"save to library\" works.  Ask, don't save automatically; a quick experiment doesn't need to be kept.  The result carries a ``save_this_palette`` hint with ready-to-use call args when this applies."
    • addedInput schema / properties / custom_palette_name / description
      Added value: +"Optional name of a palette saved with ``save_custom_palette``.  Used when no explicit colours or preset are given; an unknown name is refused with the saved names."
    • addedInput schema / properties / image_path / description
      Added value: +"Your own pattern image as the texture — only with ``texture=\"custom\"``.  The image's tones posterize into ``num_colors`` zones (2 colors on a black/white pattern reproduces it exactly); works with any palette. One-shot: no sizing input needed (see ``image_tile_mm``)."
    • addedInput schema / properties / image_tile_mm / description
      Added value: +"Physical repeat size for a custom image pattern.  Default (None) measures the motif period from the image and sizes the repeat so motifs print at a size the material can show, like the curated presets; the response carries ``auto_tile_mm`` + a warning naming the choice.  Pass a value to override."
    • addedInput schema / properties / input_path / description
      Added value: +"Path to an STL file."
    • addedInput schema / properties / mark_depth_mm / description
      Added value: +"Mark carve depth in mm (default 1.2)."
    • addedInput schema / properties / mark_image_path / description
      Added value: +"Optional PNG/JPG of a logo or photo to carve into the finish (see **Layered finish** above)."
    • changedInput schema / properties / mark_offset_x_mm / description
      Previous value: -"Default: 0.0."New value: +"Continuous placement offset from the face centre, along the face's own width axis (image right), in mm.  Adds on top of ``mark_placement``. Default: 0.0."
    • changedInput schema / properties / mark_offset_y_mm / description
      Previous value: -"Default: 0.0."New value: +"Same, along the face's height axis (image up).  The mark's clear panel is clamped to stay on the face after offsets. Default: 0.0."
    • changedInput schema / properties / mark_placement / description
      Previous value: -"Default: \"center\"."New value: +"``\"center\"`` (default), ``\"top\"``, ``\"bottom\"``, ``\"top-rim\"``, or ``\"bottom-rim\"``. Default: \"center\"."
    • changedInput schema / properties / mark_scale / description
      Previous value: -"Default: 0.45."New value: +"Mark box as a fraction of the face (default 0.45); contain-fit, aspect kept. Default: 0.45."
    • changedInput schema / properties / mark_style / description
      Previous value: -"Default: \"stencil\"."New value: +"``\"stencil\"`` (default, logos), ``\"coin\"``, ``\"photo\"``, ``\"medallion\"``, ``\"portrait\"``, ``\"default\"``. Default: \"stencil\"."
    • changedInput schema / properties / num_colors / description
      Previous value: -"Default: 4."New value: +"Number of color zones / AMS slots (default 4). Default: 4."
    • addedInput schema / properties / preset / description
      Added value: +"Optional name of one of the texture's curated colourways, as ``list_procedural_textures`` lists them.  Used when neither ``color_palette`` nor ``color_overrides`` is given; an unknown name is refused with the available presets."
    • addedInput schema / properties / printer_id / description
      Added value: +"Optional printer to check this palette against its loaded filament.  When given, the result carries an ``ams_advisory`` saying whether the design prints true on what's loaded right now -- advice only, never a block.  Read only from that exact printer (or reported as unknown); on the hosted API, where there is no printer, it is always unknown."
    • addedInput schema / properties / relief_depth_mm / description
      Added value: +"Carve depth for ``relief_texture`` in mm; unset uses that texture's own catalog depth (what ``apply_geometric_texture`` would cut)."
    • addedInput schema / properties / relief_texture / description
      Added value: +"Optional geometric texture (``\"alligator\"``, ``\"wood\"``, ...) to carve as physical relief UNDER the color split -- the stacked finish.  One compile: the relief debosses first, then the color zones split over the carved surface, so the recess walls carry the zones straight through (the same proven carve-then-split path the lava relief and user marks use).  A mark can ride along too; its clear panel composes into the same carve."
    • changedInput schema / properties / save_to_library / description
      Previous value: -"Default: false."New value: +"If True, save the texture result to the decoration library for reuse.  The decoration will have ``content_type=\"procedural_texture\"`` and store all parameters needed to reproduce it. Default: false."
    • changedInput schema / properties / scale / description
      Previous value: -"Default: 1.0."New value: +"Texture scale multiplier.  Larger = coarser pattern, smaller = finer detail.  Default 1.0. Default: 1.0."
    • changedInput schema / properties / seed / description
      Previous value: -"Default: 0."New value: +"Random seed for reproducible results (default 0). Default: 0."
    • changedInput schema / properties / surface / description
      Previous value: -"Default: \"all\"."New value: +"Which faces to texture. \"all\" textures every face (default). \"outside\" skips interior faces. \"walls\" only textures vertical/curved faces. \"caps\" only textures flat/horizontal faces. Filtered-out faces are placed in zone 0 (base color). Default: \"all\"."
    • addedInput schema / properties / texture / description
      Added value: +"Which color pattern: \"camo\", \"tiger_stripe\", \"digital_camo\", \"ocean\", \"tie_dye\", \"marble\", \"lava\", \"galaxy\", or \"custom\" (your own image via ``image_path``). ``list_procedural_textures`` describes each."
  2. Addedv1.5.0

TDQS

A3.5/5.0
Behavior4/5

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

Annotations only declare readOnly=false, destructive=false, openWorld=false. The description adds genuinely useful behavior beyond that: the AMS/MMU requirement, monthly quota limits, automatic decimation of oversized meshes for the stage, and the fact that a PNG preview is a floor rather than the full output. It does not describe error modes or what the returned artifact contains, keeping it short of a 5.

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 opening paragraph is front-loaded and efficient, but the 'INLINE 3D STAGE' block largely restates the stage behavior already mentioned in the first sentence, and the decimation/preview caveat is buried at the end. Some redundancy costs it points.

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

Completeness3/5

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

For a 23-parameter tool with no output schema, the description covers quota, material requirements, and stage behavior, but says nothing about the layered relief/mark composition or the save-to-library path that dominate the schema. The schema compensates, but the description is not fully complete for a tool this complex.

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% across 23 parameters, so the schema already carries the semantics for texture, preset, palette, relief, and mark options. The description adds only the AMS/MMU framing that contextualizes num_colors; baseline 3 is appropriate when the schema does the heavy lifting.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description states a specific verb and resource ('Apply a multicolor procedural texture') and adds the hard prerequisite (AMS/MMU for multi-material). It implicitly distinguishes itself from apply_geometric_texture and apply_image_texture by naming the 'procedural' texture class, but never names those siblings explicitly.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

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

It gives a real usage constraint (requires AMS/MMU) and quota context (3/month free, unlimited Pro), which helps an agent decide feasibility. However, it never says when to prefer this over apply_image_texture or apply_geometric_texture, leaving the sibling choice 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