Skip to main content
Glama

split_mesh_to_fit

Cuts one solid model into printable, reassembling pieces that fit your printer bed, preserving the part's real dimensions instead of scaling it down.

Instructions

Cut ONE solid into printable pieces that reassemble — the other honest answer to "it doesn't fit" (scale_mesh_to_fit shrinks; this cuts, so a functional part keeps its real dimensions). 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 part splits 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": {
      "model_path": "<model_path>"
    },
    "name": "split_mesh_to_fit"
  }
}

Input Schema

NameRequiredDescriptionDefault
bed_x_mmNoExplicit bed width (with y and z; used when no printer_id). Default: 0.0.
bed_y_mmNoExplicit bed depth. Default: 0.0.
bed_z_mmNoExplicit bed height. Default: 0.0.
cut_axisNo"x" | "y" | "z" for user-directed cuts. Default: "".
materialNoFilament — sizes the pin joints and the glue advice. Default: "PLA".
design_idNoTrack the split under this design. The result's ``kit`` block reports what was filed: pieces as versions with piece branches, and the assembly graph on the design's record. Splitting a mesh that IS one of the design's versions anchors the kit to that exact version (re-splitting a piece nests its children under it); a loose file births as a new version first. When speaking to the user, lead with piece labels ("Piece 2", "Piece 3.1"); the full branch address (``kit/<id>/piece/2``) is in the result too — give it when the user is disambiguating (several projects with a "piece 2", or comparing variants of one piece to keep working off the winner). When the kit cannot be filed where the call ran, ``kit.note`` says so and ``kit.save_payload`` is the ready-made record to land it on the design in your account. Default: "".
add_jointsNoMaster switch for seam joinery (default on). Off = every seam flush. Default: true.
max_piecesNoHard cap on the number of pieces; 0 (default) lets the planner decide, within the piece allowance of your plan. Default: 0.
model_pathYesThe solid to cut (STL/OBJ/3MF/PLY/GLB, or STEP — converted at the door). Must be watertight.
output_dirNoWhere piece STLs land (default: temp). Default: "".
printer_idNoSupported printer model id — its measured or rated usable volume becomes the bed. Omitted: falls back to explicit bed dims, then to your one registered printer. Default: "".
structuralNoThe seam carries real load (bracket, frame, anything holding weight). Steers auto away from magnets; with pins it also means: read the per-seam ``shear_rating`` before trusting the joint. Default: false.
hardware_okNoOutside (non-printed) parts are welcome. False = printed-plastic-only build: no screws, inserts or magnets are ever suggested or cut. Default: true.
magnet_d_mmNoYour disc magnets' diameter (default 6). Default: 6.0.
magnet_h_mmNoYour disc magnets' height (default 3). Default: 3.0.
serviceableNoThe seam will be taken apart again (battery door, maintenance panel, transportable prop). Auto routes to magnet seats (light duty) or heat-set inserts + screws (load / big seams) — CUT IN PLACE at the seam. Most people never set this themselves; the agent sets it when the person's intent says "opens", "swappable", "take apart". Default: false.
joint_methodNo"auto" (default) — every seam asks the seam-strategy engine, which weighs the item's own physics (seam section, thinnest engagement, material stiffness) plus your intent flags. Or say it outright: "pins", "adhesive", "screws", "magnets", "none" — an explicit choice always wins, with honest physics warnings when the seam disagrees. Default: "auto".
fastener_sizeNoScrew thread for screw joints (default "M3") — insert bore and clearance come from the fastener tables, not guesses. Default: "M3".
arrange_platesNoPack the pieces onto plates (default on). Default: true.
snap_to_naturalNoLet each user cut shift a few millimeters to the nearest thin section. Default: false.
cut_positions_mmNoCut positions along cut_axis, in the mesh's own coordinates (see analyze_mesh_geometry for the bounds).
pin_clearance_mmNoRadial pin/socket clearance (default 0.2 — the assembles-as-is bound). Default: 0.2.

Schema Changelog

Changes observed during successful MCP inspections.

  1. Changed22 schema fields changedv1.5.1
    • changedInput schema / properties / add_joints / description
      Previous value: -"Default: true."New value: +"Master switch for seam joinery (default on).  Off = every seam flush. Default: true."
    • changedInput schema / properties / arrange_plates / description
      Previous value: -"Default: true."New value: +"Pack the pieces onto plates (default on). Default: true."
    • changedInput schema / properties / bed_x_mm / description
      Previous value: -"Default: 0.0."New value: +"Explicit bed width (with y and z; used when no printer_id). Default: 0.0."
    • changedInput schema / properties / bed_y_mm / description
      Previous value: -"Default: 0.0."New value: +"Explicit bed depth. Default: 0.0."
    • changedInput schema / properties / bed_z_mm / description
      Previous value: -"Default: 0.0."New value: +"Explicit bed height. Default: 0.0."
    • changedInput schema / properties / cut_axis / description
      Previous value: -"Default: \"\"."New value: +"\"x\" | \"y\" | \"z\" for user-directed cuts. Default: \"\"."
    • addedInput schema / properties / cut_positions_mm / description
      Added value: +"Cut positions along cut_axis, in the mesh's own coordinates (see analyze_mesh_geometry for the bounds)."
    • changedInput schema / properties / design_id / description
      Previous value: -"Default: \"\"."New value: +"Track the split under this design.  The result's ``kit`` block reports what was filed: pieces as versions with piece branches, and the assembly graph on the design's record.  Splitting a mesh that IS one of the design's versions anchors the kit to that exact version (re-splitting a piece nests its children under it); a loose file births as a new version first.  When speaking to the user, lead with piece labels (\"Piece 2\", \"Piece 3.1\"); the full branch address (``kit/<id>/piece/2``) is in the result too — give it when the user is disambiguating (several projects with a \"piece 2\", or comparing variants of one piece to keep working off the winner).  When the kit cannot be filed where the call ran, ``kit.note`` says so and ``kit.save_payload`` is the ready-made record to land it on the design in your account. Default: \"\"."
    • changedInput schema / properties / fastener_size / description
      Previous value: -"Default: \"M3\"."New value: +"Screw thread for screw joints (default \"M3\") — insert bore and clearance come from the fastener tables, not guesses. Default: \"M3\"."
    • changedInput schema / properties / hardware_ok / description
      Previous value: -"Default: true."New value: +"Outside (non-printed) parts are welcome. False = printed-plastic-only build: no screws, inserts or magnets are ever suggested or cut. Default: true."
    • changedInput schema / properties / joint_method / description
      Previous value: -"Default: \"auto\"."New value: +"\"auto\" (default) — every seam asks the seam-strategy engine, which weighs the item's own physics (seam section, thinnest engagement, material stiffness) plus your intent flags.  Or say it outright: \"pins\", \"adhesive\", \"screws\", \"magnets\", \"none\" — an explicit choice always wins, with honest physics warnings when the seam disagrees. Default: \"auto\"."
    • changedInput schema / properties / magnet_d_mm / description
      Previous value: -"Default: 6.0."New value: +"Your disc magnets' diameter (default 6). Default: 6.0."
    • changedInput schema / properties / magnet_h_mm / description
      Previous value: -"Default: 3.0."New value: +"Your disc magnets' height (default 3). Default: 3.0."
    • changedInput schema / properties / material / description
      Previous value: -"Default: \"PLA\"."New value: +"Filament — sizes the pin joints and the glue advice. Default: \"PLA\"."
    • changedInput schema / properties / max_pieces / description
      Previous value: -"Default: 0."New value: +"Hard cap on the number of pieces; 0 (default) lets the planner decide, within the piece allowance of your plan. Default: 0."
    • addedInput schema / properties / model_path / description
      Added value: +"The solid to cut (STL/OBJ/3MF/PLY/GLB, or STEP — converted at the door).  Must be watertight."
    • changedInput schema / properties / output_dir / description
      Previous value: -"Default: \"\"."New value: +"Where piece STLs land (default: temp). Default: \"\"."
    • changedInput schema / properties / pin_clearance_mm / description
      Previous value: -"Default: 0.2."New value: +"Radial pin/socket clearance (default 0.2 — the assembles-as-is bound). Default: 0.2."
    • changedInput schema / properties / printer_id / description
      Previous value: -"Default: \"\"."New value: +"Supported printer model id — its measured or rated usable volume becomes the bed.  Omitted: falls back to explicit bed dims, then to your one registered printer. Default: \"\"."
    • changedInput schema / properties / serviceable / description
      Previous value: -"Default: false."New value: +"The seam will be taken apart again (battery door, maintenance panel, transportable prop). Auto routes to magnet seats (light duty) or heat-set inserts + screws (load / big seams) — CUT IN PLACE at the seam.  Most people never set this themselves; the agent sets it when the person's intent says \"opens\", \"swappable\", \"take apart\". Default: false."
    • changedInput schema / properties / snap_to_natural / description
      Previous value: -"Default: false."New value: +"Let each user cut shift a few millimeters to the nearest thin section. Default: false."
    • changedInput schema / properties / structural / description
      Previous value: -"Default: false."New value: +"The seam carries real load (bracket, frame, anything holding weight).  Steers auto away from magnets; with pins it also means: read the per-seam ``shear_rating`` before trusting the joint. Default: false."
  2. Addedv1.5.0

TDQS

A4.2/5.0
Behavior5/5

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

Beyond the annotations, the description discloses the interactive 3D stage, automatic decimation for oversized meshes, the PNG preview limitation, and the free-account limit of three part splits per month. It also explains that hosted sessions may add a browser stage link. This adds substantial behavioral context beyond readOnly, destructive, and openWorld hints.

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 description front-loads the purpose and the key alternative, which is good. However, it is verbose and repeats the inline 3D stage explanation across two paragraphs, including near-duplicate wording about MCP Apps hosts and browser stage links, which reduces conciseness.

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 complex 22-parameter mesh-splitting tool with no output schema, the description covers purpose, alternative, limits, and the interactive stage. It is fairly complete, but it does not fully describe the returned artifacts such as piece files, kit output, or assembly output in the description itself, leaving some of that to schema documentation.

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 schema itself provides rich semantics for all 22 parameters, including design_id kit behavior, joint methods, materials, and printer bed handling. The tool description does not add much parameter-level meaning beyond that already structured schema documentation, so the baseline score of 3 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?

The description states a specific action and resource: cutting one solid mesh into printable pieces that reassemble. It explicitly distinguishes this from the sibling scale_mesh_to_fit by explaining that this cuts instead of shrinking, which lets a functional part keep its real dimensions.

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?

It gives clear usage context: use this when a model does not fit but should keep real dimensions, and use scale_mesh_to_fit when shrinking is acceptable. It also warns that the input should be ONE solid. However, it does not explicitly route multi-component meshes to siblings such as split_mesh_by_component.

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