Skip to main content
Glama

Craft Quantities: construction material calculators

Optimise a cut list: stock lengths and sheet layouts

optimise_cuts
Read-onlyIdempotent

Optimises a cut list: pieces of given lengths cut from the stock lengths a merchant sells (timber, studs, joists, rafters, rebar, trim), or rectangles nested on sheets (plasterboard, drywall, plywood, OSB, tiles) in straight edge-to-edge cuts. Gives the stock or sheets to buy, a cutting plan per bar or sheet, the real waste and a lower bound. Quantities only: no prices, no structural design.

Input Schema

NameRequiredDescriptionDefault
kerfNoThe saw's kerf, charged on every piece (both ways on a sheet). Left out, the material's: 3 mm or 1/8 in for a saw, none for a bar shear or a board knife.
kindYeslinear: lengths cut from stock lengths (studs, plates, joists, rafters, bars, trim, boards). sheet: rectangles nested on sheets (plasterboard or drywall, plywood, OSB, tiles).
modeNosheet: guillotine (the default), every cut edge to edge for a panel or track saw, with the cuts in order; free, also layouts needing plunge cuts (CNC).
trimNosheet: cut off every sheet edge before nesting (a factory edge that is not clean). Left out, none.
stockNolinear: the stock lengths on offer, each in any number, with units ("4.8 m", "16 ft"). Left out, the market's usual lengths for the material in the system asked for.
detailNofull (the default): the whole answer. summary: the result lines, the citation line and the page only — fewer tokens to read.full
piecesYesThe cut list: up to 200 lines and 3000 pieces (1500 for sheets) in all.
rotateNosheet: whether pieces may turn a quarter (no grain or strength axis to keep). Left out: yes for plasterboard and tiles, no for plywood and OSB.
sheetsNosheet: the sheet sizes on offer (the plan takes the one that buys the least area). Left out, the market's usual size for the material.
systemNoThe unit system inputs left out open in, and the one the page link opens in. The answer comes in both.metric
materialNoWhat is cut, for the market's stock lengths or sheet sizes, saw kerf and grain when they are left out: timber (the default for linear), rebar or casing; plasterboard (the default for sheet), plywood, OSB or tile.
minOffcutNolinear: the shortest offcut worth keeping; shorter ones count as waste. sheet: the smallest offcut (either way round) listed for reuse; left out, 300 mm (12 in) square.
inputUnitsNoSend "base" to pass bare numbers on dimensioned inputs in base units (m, m², L, kg …), as the published test vectors are written. Without it a length, area or volume must carry its unit.
bandAllowanceNosheet: tape added to every banded edge for trimming flush. Left out, none.

Output Schema

NameRequiredDescriptionDefault

No arguments

Schema Changelog

Changes observed during successful MCP inspections.

  1. Changed7 schema fields changed
    • addedInput schema / properties / bandAllowance
      Added value: +{
      +  "description": "sheet: tape added to every banded edge for trimming flush. Left out, none.",
      +  "oneOf": [
      +    {
      +      "type": "number"
      +    },
      +    {
      +      "maxLength": 200,
      +      "type": "string"
      +    },
      +    {
      +      "additionalProperties": false,
      +      "properties": {
      +        "unit": {
      +          "maxLength": 40,
      +          "type": "string"
      +        },
      +        "value": {
      +          "type": "number"
      +        }
      +      },
      +      "required": [
      +        "value"
      +      ],
      +      "type": "object"
      +    }
      +  ]
      +}
    • changedInput schema / properties / minOffcut / description
      Previous value: -"linear: the shortest offcut worth keeping; shorter ones count as waste."New value: +"linear: the shortest offcut worth keeping; shorter ones count as waste. sheet: the smallest offcut (either way round) listed for reuse; left out, 300 mm (12 in) square."
    • addedInput schema / properties / mode
      Added value: +{
      +  "description": "sheet: guillotine (the default), every cut edge to edge for a panel or track saw, with the cuts in order; free, also layouts needing plunge cuts (CNC).",
      +  "enum": [
      +    "guillotine",
      +    "free"
      +  ]
      +}
    • addedInput schema / properties / pieces / items / properties / band
      Added value: +{
      +  "additionalProperties": false,
      +  "description": "sheet: how many of the piece's long and short edges are edge-banded (0, 1 or 2 each).",
      +  "properties": {
      +    "long": {
      +      "maximum": 2,
      +      "minimum": 0,
      +      "type": "integer"
      +    },
      +    "short": {
      +      "maximum": 2,
      +      "minimum": 0,
      +      "type": "integer"
      +    }
      +  },
      +  "type": "object"
      +}
    • changedInput schema / properties / pieces / items / properties / rotate / description
      Previous value: -"sheet: whether this piece may turn a quarter; left out, as the request says."New value: +"sheet: whether this piece may turn a quarter; left out, as the request says. false holds its grain along its height."
    • addedInput schema / properties / trim
      Added value: +{
      +  "description": "sheet: cut off every sheet edge before nesting (a factory edge that is not clean). Left out, none.",
      +  "oneOf": [
      +    {
      +      "type": "number"
      +    },
      +    {
      +      "maxLength": 200,
      +      "type": "string"
      +    },
      +    {
      +      "additionalProperties": false,
      +      "properties": {
      +        "unit": {
      +          "maxLength": 40,
      +          "type": "string"
      +        },
      +        "value": {
      +          "type": "number"
      +        }
      +      },
      +      "required": [
      +        "value"
      +      ],
      +      "type": "object"
      +    }
      +  ]
      +}
    • changedOutput schema / anyOf
      Previous value: -[
      -  {
      -    "properties": {
      -      "bought": {
      -        "anyOf": [
      -          {
      -            "properties": {
      -              "ft": {
      -                "type": "number"
      -              },
      -              "m": {
      -                "type": "number"
      -              },
      -              "text": {
      -                "description": "In the system asked for, then the other.",
      -                "type": "string"
      -              }
      -            },
      -            "required": [
      -              "m",
      -              "ft",
      -              "text"
      -            ],
      -            "type": "object"
      -          },
      -          {
      -            "properties": {
      -              "ft2": {
      -                "type": "number"
      -              },
      -              "m2": {
      -                "type": "number"
      -              },
      -              "text": {
      -                "type": "string"
      -              }
      -            },
      -            "required": [
      -              "m2",
      -              "ft2",
      -              "text"
      -            ],
      -            "type": "object"
      -          }
      -        ]
      -      },
      -      "bound": {
      -        "description": "The floor no plan can beat: the pieces with their kerf over the stock (with one stock length, at least one bar for each piece over half a bar; on sheets, one sheet for each piece too big to share one).",
      -        "required": [
      -          "wastePercent"
      -        ],
      -        "type": "object"
      -      },
      -      "buy": {
      -        "description": "What to buy: each stock length or the sheet size, and how many.",
      -        "items": {
      -          "properties": {
      -            "count": {
      -              "type": "integer"
      -            },
      -            "sheet": {
      -              "type": "object"
      -            },
      -            "stock": {
      -              "properties": {
      -                "ft": {
      -                  "type": "number"
      -                },
      -                "m": {
      -                  "type": "number"
      -                },
      -                "text": {
      -                  "description": "In the system asked for, then the other.",
      -                  "type": "string"
      -                }
      -              },
      -              "required": [
      -                "m",
      -                "ft",
      -                "text"
      -              ],
      -              "type": "object"
      -            },
      -            "text": {
      -              "type": "string"
      -            }
      -          },
      -          "required": [
      -            "count",
      -            "text"
      -          ],
      -          "type": "object"
      -        },
      -        "type": "array"
      -      },
      -      "citation": {
      -        "properties": {
      -          "accessDate": {
      -            "anyOf": [
      -              {
      -                "type": "string"
      -              },
      -              {
      -                "type": "null"
      -              }
      -            ]
      -          },
      -          "author": {
      -            "type": "string"
      -          },
      -          "formats": {
      -            "properties": {
      -              "apa": {
      -                "type": "string"
      -              },
      -              "bibtex": {
      -                "type": "string"
      -              },
      -              "harvard": {
      -                "type": "string"
      -              },
      -              "plain": {
      -                "type": "string"
      -              }
      -            },
      -            "required": [
      -              "plain",
      -              "apa",
      -              "harvard",
      -              "bibtex"
      -            ],
      -            "type": "object"
      -          },
      -          "sourcesChecked": {
      -            "anyOf": [
      -              {
      -                "type": "string"
      -              },
      -              {
      -                "type": "null"
      -              }
      -            ]
      -          },
      -          "title": {
      -            "type": "string"
      -          },
      -          "url": {
      -            "type": "string"
      -          },
      -          "version": {
      -            "anyOf": [
      -              {
      -                "type": "string"
      -              },
      -              {
      -                "type": "null"
      -              }
      -            ]
      -          }
      -        },
      -        "required": [
      -          "author",
      -          "title",
      -          "url",
      -          "formats",
      -          "accessDate"
      -        ],
      -        "type": "object"
      -      },
      -      "engine": {
      -        "type": "object"
      -      },
      -      "gapPercent": {
      -        "description": "How far this plan is above the bound, percent.",
      -        "type": "number"
      -      },
      -      "given": {
      -        "description": "What the plan was worked from, in both systems: the stock lengths or sheet sizes, the kerf, the minimum offcut, whether pieces turn.",
      -        "type": "object"
      -      },
      -      "joinedRuns": {
      -        "type": "integer"
      -      },
      -      "kind": {
      -        "enum": [
      -          "linear",
      -          "sheet"
      -        ]
      -      },
      -      "licence": {
      -        "properties": {
      -          "attribution": {
      -            "type": "string"
      -          },
      -          "name": {
      -            "type": "string"
      -          },
      -          "url": {
      -            "type": "string"
      -          }
      -        },
      -        "required": [
      -          "name",
      -          "url",
      -          "attribution"
      -        ],
      -        "type": "object"
      -      },
      -      "links": {
      -        "properties": {
      -          "page": {
      -            "type": "string"
      -          }
      -        },
      -        "required": [
      -          "page"
      -        ],
      -        "type": "object"
      -      },
      -      "material": {
      -        "type": "string"
      -      },
      -      "method": {
      -        "items": {
      -          "type": "string"
      -        },
      -        "type": "array"
      -      },
      -      "notDesign": {
      -        "type": "string"
      -      },
      -      "notice": {
      -        "type": "string"
      -      },
      -      "patterns": {
      -        "description": "Each way a bar or sheet is cut, with how many are cut that way; up to 150, most used first.",
      -        "items": {
      -          "anyOf": [
      -            {
      -              "properties": {
      -                "cuts": {
      -                  "items": {
      -                    "properties": {
      -                      "joined": {
      -                        "type": "boolean"
      -                      },
      -                      "label": {
      -                        "type": "string"
      -                      },
      -                      "length": {
      -                        "properties": {
      -                          "ft": {
      -                            "type": "number"
      -                          },
      -                          "m": {
      -                            "type": "number"
      -                          },
      -                          "text": {
      -                            "description": "In the system asked for, then the other.",
      -                            "type": "string"
      -                          }
      -                        },
      -                        "required": [
      -                          "m",
      -                          "ft",
      -                          "text"
      -                        ],
      -                        "type": "object"
      -                      }
      -                    },
      -                    "required": [
      -                      "length"
      -                    ],
      -                    "type": "object"
      -                  },
      -                  "type": "array"
      -                },
      -                "keep": {
      -                  "type": "boolean"
      -                },
      -                "offcut": {
      -                  "properties": {
      -                    "ft": {
      -                      "type": "number"
      -                    },
      -                    "m": {
      -                      "type": "number"
      -                    },
      -                    "text": {
      -                      "description": "In the system asked for, then the other.",
      -                      "type": "string"
      -                    }
      -                  },
      -                  "required": [
      -                    "m",
      -                    "ft",
      -                    "text"
      -                  ],
      -                  "type": "object"
      -                },
      -                "stock": {
      -                  "properties": {
      -                    "ft": {
      -                      "type": "number"
      -                    },
      -                    "m": {
      -                      "type": "number"
      -                    },
      -                    "text": {
      -                      "description": "In the system asked for, then the other.",
      -                      "type": "string"
      -                    }
      -                  },
      -                  "required": [
      -                    "m",
      -                    "ft",
      -                    "text"
      -                  ],
      -                  "type": "object"
      -                },
      -                "times": {
      -                  "type": "integer"
      -                }
      -              },
      -              "required": [
      -                "times",
      -                "stock",
      -                "cuts",
      -                "offcut",
      -                "keep"
      -              ],
      -              "type": "object"
      -            },
      -            {
      -              "properties": {
      -                "largestOffcut": {
      -                  "type": "object"
      -                },
      -                "placed": {
      -                  "items": {
      -                    "properties": {
      -                      "height": {
      -                        "properties": {
      -                          "ft": {
      -                            "type": "number"
      -                          },
      -                          "m": {
      -                            "type": "number"
      -                          },
      -                          "text": {
      -                            "description": "In the system asked for, then the other.",
      -                            "type": "string"
      -                          }
      -                        },
      -                        "required": [
      -                          "m",
      -                          "ft",
      -                          "text"
      -                        ],
      -                        "type": "object"
      -                      },
      -                      "label": {
      -                        "type": "string"
      -                      },
      -                      "rotated": {
      -                        "type": "boolean"
      -                      },
      -                      "width": {
      -                        "properties": {
      -                          "ft": {
      -                            "type": "number"
      -                          },
      -                          "m": {
      -                            "type": "number"
      -                          },
      -                          "text": {
      -                            "description": "In the system asked for, then the other.",
      -                            "type": "string"
      -                          }
      -                        },
      -                        "required": [
      -                          "m",
      -                          "ft",
      -                          "text"
      -                        ],
      -                        "type": "object"
      -                      },
      -                      "x": {
      -                        "properties": {
      -                          "ft": {
      -                            "type": "number"
      -                          },
      -                          "m": {
      -                            "type": "number"
      -                          },
      -                          "text": {
      -                            "description": "In the system asked for, then the other.",
      -                            "type": "string"
      -                          }
      -                        },
      -                        "required": [
      -                          "m",
      -                          "ft",
      -                          "text"
      -                        ],
      -                        "type": "object"
      -                      },
      -                      "y": {
      -                        "properties": {
      -                          "ft": {
      -                            "type": "number"
      -                          },
      -                          "m": {
      -                            "type": "number"
      -                          },
      -                          "text": {
      -                            "description": "In the system asked for, then the other.",
      -                            "type": "string"
      -                          }
      -                        },
      -                        "required": [
      -                          "m",
      -                          "ft",
      -                          "text"
      -                        ],
      -                        "type": "object"
      -                      }
      -                    },
      -                    "required": [
      -                      "x",
      -                      "y",
      -                      "width",
      -                      "height",
      -                      "rotated"
      -                    ],
      -                    "type": "object"
      -                  },
      -                  "type": "array"
      -                },
      -                "times": {
      -                  "type": "integer"
      -                }
      -              },
      -              "required": [
      -                "times",
      -                "placed"
      -              ],
      -              "type": "object"
      -            }
      -          ]
      -        },
      -        "type": "array"
      -      },
      -      "patternsTotal": {
      -        "type": "integer"
      -      },
      -      "pieces": {
      -        "type": "integer"
      -      },
      -      "proven": {
      -        "description": "True when no plan buys less: the exact branch and bound finished, or the plan meets the bound.",
      -        "type": "boolean"
      -      },
      -      "required": {
      -        "anyOf": [
      -          {
      -            "properties": {
      -              "ft": {
      -                "type": "number"
      -              },
      -              "m": {
      -                "type": "number"
      -              },
      -              "text": {
      -                "description": "In the system asked for, then the other.",
      -                "type": "string"
      -              }
      -            },
      -            "required": [
      -              "m",
      -              "ft",
      -              "text"
      -            ],
      -            "type": "object"
      -          },
      -          {
      -            "properties": {
      -              "ft2": {
      -                "type": "number"
      -              },
      -              "m2": {
      -                "type": "number"
      -              },
      -              "text": {
      -                "type": "string"
      -              }
      -            },
      -            "required": [
      -              "m2",
      -              "ft2",
      -              "text"
      -            ],
      -            "type": "object"
      -          }
      -        ]
      -      },
      -      "steps": {
      -        "description": "Search steps spent (bounded).",
      -        "type": "integer"
      -      },
      -      "system": {
      -        "enum": [
      -          "metric",
      -          "imperial"
      -        ]
      -      },
      -      "tooLong": {
      -        "description": "Pieces no stock length or sheet takes, listed rather than split.",
      -        "items": {
      -          "type": "object"
      -        },
      -        "type": "array"
      -      },
      -      "waste": {
      -        "properties": {
      -          "excludingKeptOffcutsPercent": {
      -            "type": "number"
      -          },
      -          "keptOffcut": {
      -            "properties": {
      -              "ft": {
      -                "type": "number"
      -              },
      -              "m": {
      -                "type": "number"
      -              },
      -              "text": {
      -                "description": "In the system asked for, then the other.",
      -                "type": "string"
      -              }
      -            },
      -            "required": [
      -              "m",
      -              "ft",
      -              "text"
      -            ],
      -            "type": "object"
      -          },
      -          "percent": {
      -            "type": "number"
      -          }
      -        },
      -        "required": [
      -          "percent"
      -        ],
      -        "type": "object"
      -      }
      -    },
      -    "required": [
      -      "engine",
      -      "system",
      -      "kind",
      -      "material",
      -      "given",
      -      "buy",
      -      "waste",
      -      "bound",
      -      "proven",
      -      "patterns",
      -      "patternsTotal",
      -      "notDesign",
      -      "method",
      -      "citation",
      -      "licence",
      -      "notice",
      -      "links"
      -    ],
      -    "type": "object"
      -  },
      -  {
      -    "properties": {
      -      "citation": {
      -        "description": "The one citation line, built from the answer's own data.",
      -        "type": "string"
      -      },
      -      "detail": {
      -        "const": "summary"
      -      },
      -      "lines": {
      -        "description": "The result lines, as the report's table gives them.",
      -        "items": {
      -          "additionalProperties": {
      -            "type": "string"
      -          },
      -          "type": "object"
      -        },
      -        "type": "array"
      -      },
      -      "more": {
      -        "anyOf": [
      -          {
      -            "type": "string"
      -          },
      -          {
      -            "type": "null"
      -          }
      -        ]
      -      },
      -      "notes": {
      -        "description": "What a professional must decide, when to call one, a false-friend warning, that adoption is local: kept in every summary.",
      -        "items": {
      -          "type": "string"
      -        },
      -        "type": "array"
      -      },
      -      "open": {
      -        "anyOf": [
      -          {
      -            "type": "string"
      -          },
      -          {
      -            "type": "null"
      -          }
      -        ]
      -      },
      -      "title": {
      -        "type": "string"
      -      },
      -      "tool": {
      -        "type": "string"
      -      },
      -      "url": {
      -        "anyOf": [
      -          {
      -            "type": "string"
      -          },
      -          {
      -            "type": "null"
      -          }
      -        ]
      -      }
      -    },
      -    "required": [
      -      "detail",
      -      "tool",
      -      "title",
      -      "lines",
      -      "notes",
      -      "citation",
      -      "url",
      -      "open",
      -      "more"
      -    ],
      -    "type": "object"
      -  }
      -]New value: +[
      +  {
      +    "properties": {
      +      "banding": {
      +        "description": "sheet: edge banding per row of the list and the total, with any allowance.",
      +        "type": "object"
      +      },
      +      "bought": {
      +        "anyOf": [
      +          {
      +            "properties": {
      +              "ft": {
      +                "type": "number"
      +              },
      +              "m": {
      +                "type": "number"
      +              },
      +              "text": {
      +                "description": "In the system asked for, then the other.",
      +                "type": "string"
      +              }
      +            },
      +            "required": [
      +              "m",
      +              "ft",
      +              "text"
      +            ],
      +            "type": "object"
      +          },
      +          {
      +            "properties": {
      +              "ft2": {
      +                "type": "number"
      +              },
      +              "m2": {
      +                "type": "number"
      +              },
      +              "text": {
      +                "type": "string"
      +              }
      +            },
      +            "required": [
      +              "m2",
      +              "ft2",
      +              "text"
      +            ],
      +            "type": "object"
      +          }
      +        ]
      +      },
      +      "bound": {
      +        "description": "The floor no plan can beat: the pieces with their kerf over the stock (with one stock length, at least one bar for each piece over half a bar; on sheets, one sheet for each piece too big to share one).",
      +        "required": [
      +          "wastePercent"
      +        ],
      +        "type": "object"
      +      },
      +      "buy": {
      +        "description": "What to buy: each stock length or the sheet size, and how many.",
      +        "items": {
      +          "properties": {
      +            "count": {
      +              "type": "integer"
      +            },
      +            "sheet": {
      +              "type": "object"
      +            },
      +            "stock": {
      +              "properties": {
      +                "ft": {
      +                  "type": "number"
      +                },
      +                "m": {
      +                  "type": "number"
      +                },
      +                "text": {
      +                  "description": "In the system asked for, then the other.",
      +                  "type": "string"
      +                }
      +              },
      +              "required": [
      +                "m",
      +                "ft",
      +                "text"
      +              ],
      +              "type": "object"
      +            },
      +            "text": {
      +              "type": "string"
      +            }
      +          },
      +          "required": [
      +            "count",
      +            "text"
      +          ],
      +          "type": "object"
      +        },
      +        "type": "array"
      +      },
      +      "citation": {
      +        "properties": {
      +          "accessDate": {
      +            "anyOf": [
      +              {
      +                "type": "string"
      +              },
      +              {
      +                "type": "null"
      +              }
      +            ]
      +          },
      +          "author": {
      +            "type": "string"
      +          },
      +          "formats": {
      +            "properties": {
      +              "apa": {
      +                "type": "string"
      +              },
      +              "bibtex": {
      +                "type": "string"
      +              },
      +              "harvard": {
      +                "type": "string"
      +              },
      +              "plain": {
      +                "type": "string"
      +              }
      +            },
      +            "required": [
      +              "plain",
      +              "apa",
      +              "harvard",
      +              "bibtex"
      +            ],
      +            "type": "object"
      +          },
      +          "sourcesChecked": {
      +            "anyOf": [
      +              {
      +                "type": "string"
      +              },
      +              {
      +                "type": "null"
      +              }
      +            ]
      +          },
      +          "title": {
      +            "type": "string"
      +          },
      +          "url": {
      +            "type": "string"
      +          },
      +          "version": {
      +            "anyOf": [
      +              {
      +                "type": "string"
      +              },
      +              {
      +                "type": "null"
      +              }
      +            ]
      +          }
      +        },
      +        "required": [
      +          "author",
      +          "title",
      +          "url",
      +          "formats",
      +          "accessDate"
      +        ],
      +        "type": "object"
      +      },
      +      "engine": {
      +        "type": "object"
      +      },
      +      "gapPercent": {
      +        "description": "How far this plan is above the bound, percent.",
      +        "type": "number"
      +      },
      +      "given": {
      +        "description": "What the plan was worked from, in both systems: the stock lengths or sheet sizes, the kerf, the minimum offcut, whether pieces turn.",
      +        "type": "object"
      +      },
      +      "joinedRuns": {
      +        "type": "integer"
      +      },
      +      "kind": {
      +        "enum": [
      +          "linear",
      +          "sheet"
      +        ]
      +      },
      +      "licence": {
      +        "properties": {
      +          "attribution": {
      +            "type": "string"
      +          },
      +          "name": {
      +            "type": "string"
      +          },
      +          "url": {
      +            "type": "string"
      +          }
      +        },
      +        "required": [
      +          "name",
      +          "url",
      +          "attribution"
      +        ],
      +        "type": "object"
      +      },
      +      "links": {
      +        "properties": {
      +          "page": {
      +            "type": "string"
      +          }
      +        },
      +        "required": [
      +          "page"
      +        ],
      +        "type": "object"
      +      },
      +      "material": {
      +        "type": "string"
      +      },
      +      "method": {
      +        "items": {
      +          "type": "string"
      +        },
      +        "type": "array"
      +      },
      +      "notDesign": {
      +        "type": "string"
      +      },
      +      "notice": {
      +        "type": "string"
      +      },
      +      "patterns": {
      +        "description": "Each way a bar or sheet is cut, with how many are cut that way; up to 150, most used first.",
      +        "items": {
      +          "anyOf": [
      +            {
      +              "properties": {
      +                "cuts": {
      +                  "items": {
      +                    "properties": {
      +                      "joined": {
      +                        "type": "boolean"
      +                      },
      +                      "label": {
      +                        "type": "string"
      +                      },
      +                      "length": {
      +                        "properties": {
      +                          "ft": {
      +                            "type": "number"
      +                          },
      +                          "m": {
      +                            "type": "number"
      +                          },
      +                          "text": {
      +                            "description": "In the system asked for, then the other.",
      +                            "type": "string"
      +                          }
      +                        },
      +                        "required": [
      +                          "m",
      +                          "ft",
      +                          "text"
      +                        ],
      +                        "type": "object"
      +                      }
      +                    },
      +                    "required": [
      +                      "length"
      +                    ],
      +                    "type": "object"
      +                  },
      +                  "type": "array"
      +                },
      +                "keep": {
      +                  "type": "boolean"
      +                },
      +                "offcut": {
      +                  "properties": {
      +                    "ft": {
      +                      "type": "number"
      +                    },
      +                    "m": {
      +                      "type": "number"
      +                    },
      +                    "text": {
      +                      "description": "In the system asked for, then the other.",
      +                      "type": "string"
      +                    }
      +                  },
      +                  "required": [
      +                    "m",
      +                    "ft",
      +                    "text"
      +                  ],
      +                  "type": "object"
      +                },
      +                "stock": {
      +                  "properties": {
      +                    "ft": {
      +                      "type": "number"
      +                    },
      +                    "m": {
      +                      "type": "number"
      +                    },
      +                    "text": {
      +                      "description": "In the system asked for, then the other.",
      +                      "type": "string"
      +                    }
      +                  },
      +                  "required": [
      +                    "m",
      +                    "ft",
      +                    "text"
      +                  ],
      +                  "type": "object"
      +                },
      +                "times": {
      +                  "type": "integer"
      +                }
      +              },
      +              "required": [
      +                "times",
      +                "stock",
      +                "cuts",
      +                "offcut",
      +                "keep"
      +              ],
      +              "type": "object"
      +            },
      +            {
      +              "properties": {
      +                "cuts": {
      +                  "description": "The saw cuts in the order to make them (edge trim, rips, cross cuts), on a guillotine layout.",
      +                  "items": {
      +                    "properties": {
      +                      "from": {
      +                        "type": "object"
      +                      },
      +                      "kind": {
      +                        "enum": [
      +                          "trim",
      +                          "rip",
      +                          "cross"
      +                        ]
      +                      },
      +                      "length": {
      +                        "properties": {
      +                          "ft": {
      +                            "type": "number"
      +                          },
      +                          "m": {
      +                            "type": "number"
      +                          },
      +                          "text": {
      +                            "description": "In the system asked for, then the other.",
      +                            "type": "string"
      +                          }
      +                        },
      +                        "required": [
      +                          "m",
      +                          "ft",
      +                          "text"
      +                        ],
      +                        "type": "object"
      +                      },
      +                      "order": {
      +                        "type": "integer"
      +                      },
      +                      "to": {
      +                        "type": "object"
      +                      }
      +                    },
      +                    "required": [
      +                      "order",
      +                      "kind"
      +                    ],
      +                    "type": "object"
      +                  },
      +                  "type": "array"
      +                },
      +                "guillotine": {
      +                  "type": "boolean"
      +                },
      +                "largestOffcut": {
      +                  "type": "object"
      +                },
      +                "offcuts": {
      +                  "description": "Rectangles left whole at or above the minimum size, largest first.",
      +                  "items": {
      +                    "type": "object"
      +                  },
      +                  "type": "array"
      +                },
      +                "placed": {
      +                  "items": {
      +                    "properties": {
      +                      "grainLocked": {
      +                        "type": "boolean"
      +                      },
      +                      "height": {
      +                        "properties": {
      +                          "ft": {
      +                            "type": "number"
      +                          },
      +                          "m": {
      +                            "type": "number"
      +                          },
      +                          "text": {
      +                            "description": "In the system asked for, then the other.",
      +                            "type": "string"
      +                          }
      +                        },
      +                        "required": [
      +                          "m",
      +                          "ft",
      +                          "text"
      +                        ],
      +                        "type": "object"
      +                      },
      +                      "id": {
      +                        "description": "The part's id to write on it: the row's letter and its number (A1, A2, B1 …).",
      +                        "type": "string"
      +                      },
      +                      "label": {
      +                        "type": "string"
      +                      },
      +                      "rotated": {
      +                        "type": "boolean"
      +                      },
      +                      "width": {
      +                        "properties": {
      +                          "ft": {
      +                            "type": "number"
      +                          },
      +                          "m": {
      +                            "type": "number"
      +                          },
      +                          "text": {
      +                            "description": "In the system asked for, then the other.",
      +                            "type": "string"
      +                          }
      +                        },
      +                        "required": [
      +                          "m",
      +                          "ft",
      +                          "text"
      +                        ],
      +                        "type": "object"
      +                      },
      +                      "x": {
      +                        "properties": {
      +                          "ft": {
      +                            "type": "number"
      +                          },
      +                          "m": {
      +                            "type": "number"
      +                          },
      +                          "text": {
      +                            "description": "In the system asked for, then the other.",
      +                            "type": "string"
      +                          }
      +                        },
      +                        "required": [
      +                          "m",
      +                          "ft",
      +                          "text"
      +                        ],
      +                        "type": "object"
      +                      },
      +                      "y": {
      +                        "properties": {
      +                          "ft": {
      +                            "type": "number"
      +                          },
      +                          "m": {
      +                            "type": "number"
      +                          },
      +                          "text": {
      +                            "description": "In the system asked for, then the other.",
      +                            "type": "string"
      +                          }
      +                        },
      +                        "required": [
      +                          "m",
      +                          "ft",
      +                          "text"
      +                        ],
      +                        "type": "object"
      +                      }
      +                    },
      +                    "required": [
      +                      "x",
      +                      "y",
      +                      "width",
      +                      "height",
      +                      "rotated"
      +                    ],
      +                    "type": "object"
      +                  },
      +                  "type": "array"
      +                },
      +                "times": {
      +                  "type": "integer"
      +                }
      +              },
      +              "required": [
      +                "times",
      +                "placed"
      +              ],
      +              "type": "object"
      +            }
      +          ]
      +        },
      +        "type": "array"
      +      },
      +      "patternsTotal": {
      +        "type": "integer"
      +      },
      +      "pieces": {
      +        "type": "integer"
      +      },
      +      "proven": {
      +        "description": "True when no plan buys less: the exact branch and bound finished, or the plan meets the bound.",
      +        "type": "boolean"
      +      },
      +      "required": {
      +        "anyOf": [
      +          {
      +            "properties": {
      +              "ft": {
      +                "type": "number"
      +              },
      +              "m": {
      +                "type": "number"
      +              },
      +              "text": {
      +                "description": "In the system asked for, then the other.",
      +                "type": "string"
      +              }
      +            },
      +            "required": [
      +              "m",
      +              "ft",
      +              "text"
      +            ],
      +            "type": "object"
      +          },
      +          {
      +            "properties": {
      +              "ft2": {
      +                "type": "number"
      +              },
      +              "m2": {
      +                "type": "number"
      +              },
      +              "text": {
      +                "type": "string"
      +              }
      +            },
      +            "required": [
      +              "m2",
      +              "ft2",
      +              "text"
      +            ],
      +            "type": "object"
      +          }
      +        ]
      +      },
      +      "steps": {
      +        "description": "Search steps spent (bounded).",
      +        "type": "integer"
      +      },
      +      "system": {
      +        "enum": [
      +          "metric",
      +          "imperial"
      +        ]
      +      },
      +      "tooLong": {
      +        "description": "Pieces no stock length or sheet takes, listed rather than split.",
      +        "items": {
      +          "type": "object"
      +        },
      +        "type": "array"
      +      },
      +      "waste": {
      +        "properties": {
      +          "excludingKeptOffcutsPercent": {
      +            "type": "number"
      +          },
      +          "keptOffcut": {
      +            "properties": {
      +              "ft": {
      +                "type": "number"
      +              },
      +              "m": {
      +                "type": "number"
      +              },
      +              "text": {
      +                "description": "In the system asked for, then the other.",
      +                "type": "string"
      +              }
      +            },
      +            "required": [
      +              "m",
      +              "ft",
      +              "text"
      +            ],
      +            "type": "object"
      +          },
      +          "percent": {
      +            "type": "number"
      +          }
      +        },
      +        "required": [
      +          "percent"
      +        ],
      +        "type": "object"
      +      },
      +      "yieldPercent": {
      +        "description": "sheet: the pieces' area over the area bought, percent.",
      +        "type": "number"
      +      }
      +    },
      +    "required": [
      +      "engine",
      +      "system",
      +      "kind",
      +      "material",
      +      "given",
      +      "buy",
      +      "waste",
      +      "bound",
      +      "proven",
      +      "patterns",
      +      "patternsTotal",
      +      "notDesign",
      +      "method",
      +      "citation",
      +      "licence",
      +      "notice",
      +      "links"
      +    ],
      +    "type": "object"
      +  },
      +  {
      +    "properties": {
      +      "citation": {
      +        "description": "The one citation line, built from the answer's own data.",
      +        "type": "string"
      +      },
      +      "detail": {
      +        "const": "summary"
      +      },
      +      "lines": {
      +        "description": "The result lines, as the report's table gives them.",
      +        "items": {
      +          "additionalProperties": {
      +            "type": "string"
      +          },
      +          "type": "object"
      +        },
      +        "type": "array"
      +      },
      +      "more": {
      +        "anyOf": [
      +          {
      +            "type": "string"
      +          },
      +          {
      +            "type": "null"
      +          }
      +        ]
      +      },
      +      "notes": {
      +        "description": "What a professional must decide, when to call one, a false-friend warning, that adoption is local: kept in every summary.",
      +        "items": {
      +          "type": "string"
      +        },
      +        "type": "array"
      +      },
      +      "open": {
      +        "anyOf": [
      +          {
      +            "type": "string"
      +          },
      +          {
      +            "type": "null"
      +          }
      +        ]
      +      },
      +      "title": {
      +        "type": "string"
      +      },
      +      "tool": {
      +        "type": "string"
      +      },
      +      "url": {
      +        "anyOf": [
      +          {
      +            "type": "string"
      +          },
      +          {
      +            "type": "null"
      +          }
      +        ]
      +      }
      +    },
      +    "required": [
      +      "detail",
      +      "tool",
      +      "title",
      +      "lines",
      +      "notes",
      +      "citation",
      +      "url",
      +      "open",
      +      "more"
      +    ],
      +    "type": "object"
      +  }
      +]
  2. Added

TDQS

A4.3/5.0
Behavior4/5

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

Annotations already declare this a read-only, idempotent, non-destructive, closed-world computation, so the description is free to spend its words on domain behaviour — it discloses the deliverables (stock or sheets to buy, a per-bar/per-sheet cutting plan, real waste, a lower bound) and confines itself to quantities. It does not mention the input caps (200 lines / 3000 pieces) or how defaults are resolved, but those live in the schema.

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

Conciseness5/5

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

Three dense sentences, front-loaded with the verb and the two modes, then the deliverable, then the scope limit. The parenthetical material lists earn their space by making the linear/sheet split concrete, and nothing is repeated.

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 14-parameter optimisation engine with full annotation coverage and an output schema, the description supplies what remains needed: what both modes mean, what comes back, and what the tool deliberately does not do. Input limits and defaulting rules are adequately handled by the schema.

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 all 14 parameters, including defaults, unit handling and enum meanings, so the baseline of 3 applies. The description reinforces the semantics of the stock/sheets/pieces inputs in merchant language but adds no format or behaviour detail the schema does not already carry.

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 (optimises) and resource (a cut list), then names both operating modes — linear lengths cut from merchant stock versus rectangles nested on sheets — with concrete material examples for each. The closing scoping line ("quantities only: no prices, no structural design") further separates it from pricing or structural siblings such as check_quote or layout_reinforcement.

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?

Clear context is given for choosing between the two modes, and the description explicitly excludes pricing and structural design, which is a genuine scope boundary. It never names an alternative sibling (fit_panel, layout_reinforcement, miter_chart) or says when to reach for those instead, leaving that routing to the agent.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

Try in Browser

Glama MCP Gateway

Add one secure layer between your agents and this server.

Resources