Skip to main content
Glama

generate_soap_dish

Create a draining soap dish with optional bottom text or image branding, then open an interactive 3D preview to orbit, zoom, and iterate on the design.

Instructions

Generate a draining soap dish with optional bottom branding. Opens Kiln's interactive inline 3D stage on the result (orbit/zoom panel in MCP Apps hosts; hosted sessions add a browser stage link). 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.

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

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": "generate_soap_dish"
  }
}

Input Schema

NameRequiredDescriptionDefault
brief_idNoOptional saved-goal id from ``design_session``. When supplied, the produced mesh gets a ``design_brief:<id>`` intent sidecar so the audit's "matches what you asked for" gate, the brief failure_history wiring, and the ``compare_design_versions`` intent diff all light up against the saved goal. Omit to skip — REST callers without a goal still get an auto-inferred brief at dispatch time. Default: "".
depth_mmNoFront-to-back size of the dish body in mm (default 65), not how deep the basin is; the drain spout adds ``spout_length_mm`` beyond it. Default: 65.0.
materialNoMaterial (default PETG). Default: "PETG".
width_mmNoDish width in mm (default 90). Default: 90.0.
height_mmNoTotal height in mm (default 15). Default: 15.0.
body_colorNoBody color (default white). Default: "white".
decorationNoBottom content — ``"text:..."`` for debossed text, a PNG/JPG path for an embossed image, or empty for plain. Default: "".
photo_maskNoPhoto crop shape for a photograph (a logo on a clean field is carved unmasked whatever is passed; a name outside this list is refused) — ``"circle"``, ``"rectangle"`` or ``"rounded_rectangle"`` (the default; empty or ``"auto"`` reads the same, since the dish is rectangular). Default: "rounded_rectangle".
ridge_countNoDrain ridges across basin (default 6, range 3-12). Default: 6.
include_stepNoAlso emit a CAD-exact STEP file — REAL analytic B-rep (the tapered spout as an exact hull of circles, drain ridges as true capsules), never a tessellated conversion. On success the response gains a ``step`` block with ``step_path``. Image decorations refuse honestly — the mesh outputs are always unaffected. Default: false.
spout_width_mmNoWidth of drain spout in mm (default 25). Default: 25.0.
color_overridesNoJSON dict mapping role → color name/hex. Default: "".
spout_length_mmNoSpout overhang in mm (default 18; 0 = closed basin). Default: 18.0.
corner_radius_mmNoOuter corner radius in mm (default 10). Default: 10.0.

Schema Changelog

Changes observed during successful MCP inspections.

  1. Changed14 schema fields changedv1.5.1
    • changedInput schema / properties / body_color / description
      Previous value: -"Default: \"white\"."New value: +"Body color (default white). Default: \"white\"."
    • changedInput schema / properties / brief_id / description
      Previous value: -"Default: \"\"."New value: +"Optional saved-goal id from ``design_session``. When supplied, the produced mesh gets a ``design_brief:<id>`` intent sidecar so the audit's \"matches what you asked for\" gate, the brief failure_history wiring, and the ``compare_design_versions`` intent diff all light up against the saved goal.  Omit to skip — REST callers without a goal still get an auto-inferred brief at dispatch time. Default: \"\"."
    • changedInput schema / properties / color_overrides / description
      Previous value: -"Default: \"\"."New value: +"JSON dict mapping role → color name/hex. Default: \"\"."
    • changedInput schema / properties / corner_radius_mm / description
      Previous value: -"Default: 10.0."New value: +"Outer corner radius in mm (default 10). Default: 10.0."
    • changedInput schema / properties / decoration / description
      Previous value: -"Default: \"\"."New value: +"Bottom content — ``\"text:...\"`` for debossed text, a PNG/JPG path for an embossed image, or empty for plain. Default: \"\"."
    • changedInput schema / properties / depth_mm / description
      Previous value: -"Default: 65.0."New value: +"Front-to-back size of the dish body in mm (default 65), not how deep the basin is; the drain spout adds ``spout_length_mm`` beyond it. Default: 65.0."
    • changedInput schema / properties / height_mm / description
      Previous value: -"Default: 15.0."New value: +"Total height in mm (default 15). Default: 15.0."
    • changedInput schema / properties / include_step / description
      Previous value: -"Default: false."New value: +"Also emit a CAD-exact STEP file — REAL analytic B-rep (the tapered spout as an exact hull of circles, drain ridges as true capsules), never a tessellated conversion.  On success the response gains a ``step`` block with ``step_path``.  Image decorations refuse honestly — the mesh outputs are always unaffected. Default: false."
    • changedInput schema / properties / material / description
      Previous value: -"Default: \"PETG\"."New value: +"Material (default PETG). Default: \"PETG\"."
    • changedInput schema / properties / photo_mask / description
      Previous value: -"Default: \"rounded_rectangle\"."New value: +"Photo crop shape for a photograph (a logo on a clean field is carved unmasked whatever is passed; a name outside this list is refused) — ``\"circle\"``, ``\"rectangle\"`` or ``\"rounded_rectangle\"`` (the default; empty or ``\"auto\"`` reads the same, since the dish is rectangular). Default: \"rounded_rectangle\"."
    • changedInput schema / properties / ridge_count / description
      Previous value: -"Default: 6."New value: +"Drain ridges across basin (default 6, range 3-12). Default: 6."
    • changedInput schema / properties / spout_length_mm / description
      Previous value: -"Default: 18.0."New value: +"Spout overhang in mm (default 18; 0 = closed basin). Default: 18.0."
    • changedInput schema / properties / spout_width_mm / description
      Previous value: -"Default: 25.0."New value: +"Width of drain spout in mm (default 25). Default: 25.0."
    • changedInput schema / properties / width_mm / description
      Previous value: -"Default: 90.0."New value: +"Dish width in mm (default 90). Default: 90.0."
  2. Addedv1.5.0

TDQS

B3.4/5.0
Behavior4/5

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

Annotations already declare this is a non-read-only, non-destructive, closed-world operation, so the bar is lower; the description still adds real behavior — that the tool opens an interactive 3D stage, that oversized meshes are auto-decimated, and that hosts without MCP Apps get a browser link instead. It does not say whether the mesh is persisted to the design library or what identifiers come back beyond what the schema mentions.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness2/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The purpose sentence is well front-loaded, but the INLINE 3D STAGE paragraph repeats what the first sentence already said about the orbit/zoom stage and the hosted browser link, and the ALL-CAPS meta-commentary about 'MAKE DOORS' consumes significant space without helping an agent invoke this specific tool.

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 14-parameter generator with no output schema and no required fields, the description covers the stage experience and decimation but leaves the return payload underspecified — no mention of mesh file paths, preview PNG output fields, or whether the result is saved as a design version. Adequate but with clear gaps for a tool of this size.

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 descriptions there are detailed (including the depth_mm vs. basin-depth distinction and decoration syntax), so the baseline of 3 applies. The tool description adds only the phrase 'optional bottom branding' for decoration and nothing about materials, color_overrides, or geometry parameters.

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 opening sentence gives a specific verb and resource: generating a draining soap dish with optional bottom branding. It does not, however, distinguish this from the many similar parametric generators in the sibling list (generate_coaster, generate_ashtray, generate_pet_bowl, generate_pen_cup) — it relies on the tool name to do that work.

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?

There is implicit guidance (call this to make a soap dish) and useful context that design_session is unavailable on this install, but the paragraph instead points at compile_scad as 'the make → preview → iterate loop', which is more confusing than directive. No explicit statement of when to pick this over generate_from_template, generate_model, or the other generate_* dish-shaped tools.

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