Skip to main content
Glama

Fredenslund workshop tools

French cleat wall plan

french_cleat_plan
Read-onlyIdempotent

Plan a French cleat wall for a workshop with the Fredenslund cleat system: 90 mm cleat boards and 90 mm gaps (180 mm pitch), hook plate 72 mm including 12 mm material, 30 mm buffer between hangers, a 900 mm table that hangs on its own cleat one hook lower (cleat top 840) with the rows following that cleat, top cleat at least one gap below the ceiling, lowest cleat at least 210 mm above the floor (its underside; rows 300 … 2280 on the default wall). A hanger comes off by lifting it the material + 3 mm, so the hook plate is at most the gap − 3 and the top cleat at least the hook plate + 3 below the ceiling. The default wall is a full plywood sheet, 1220 × 2440 mm. Give the wall size and the hangers to hang (hooks, shelves, boxes, panels: left edge, the cleat row it hangs on, width, extra rows spanned below — a shelf usually spans one row). Returns the cleat rows (cleat top heights from the floor), every hanger with its panel height and whether it fits — and why not (row missing, row off, outside wall, collision) — the cut list with cleat metres, wall coverage, a picture of the wall (a link to a 1200 × 630 PNG) and a link that opens the same plan editable in the tool. All values in mm. Call with no hangers to get the rows for a wall first. Beta.

Input Schema

TableJSON Schema
NameRequiredDescriptionDefault
systemNoOverride the Fredenslund system (all in mm). Leave out to use the defaults
hangersNoHangers to place. Each hangs on one cleat row, given by the height of that cleat's top edge from the floor
rows_offNoCleat rows to switch off, by cleat top height from the floor
wall_width_mmNoWall width in mm (200–8000, default 1220 — a full plywood sheet)
wall_height_mmNoWall height in mm (300–4000, default 2440 — a full plywood sheet)

Schema Changelog

Changes observed during successful MCP inspections.

  1. Changed2 schema fields changed
    • changedInput schema / properties / hangers / items / properties / cleat_top_mm / description
      Previous value: -"Height from the floor of the top edge of the cleat the hanger hangs on; must be one of the wall's rows (e.g. 660, 840, 1020, 1200 … with default settings)"New value: +"Height from the floor of the top edge of the cleat the hanger hangs on; must be one of the wall's rows (300, 480, 660, 840, 1020, 1200 … 2280 with default settings)"
    • changedInput schema / properties / system / properties / bottom_limit_mm / description
      Previous value: -"The lowest cleat keeps its underside this far above the floor (default 450)"New value: +"The lowest cleat keeps its underside this far above the floor (default 210)"
  2. Changed8 schema fields changed
    • changedInput schema / properties / system / properties / board_mm / description
      Previous value: -"Cleat board height (default 90; gap = board, pitch = 2 × board)"New value: +"Cleat board height (default 90). The gap equals the board unless gap_mm is given"
    • addedInput schema / properties / system / properties / gap_mm
      Added value: +{
      +  "description": "Gap between cleat boards (default = board_mm, as in the Fredenslund system); pitch = board + gap",
      +  "maximum": 200,
      +  "minimum": 40,
      +  "type": "integer"
      +}
    • changedInput schema / properties / system / properties / hook_plate_mm / description
      Previous value: -"Hook plate incl. material (default 72)"New value: +"Hook plate incl. material (default 72); at most the gap − 3, so a hanger can be lifted off"
    • changedInput schema / properties / system / properties / top_clearance_mm / description
      Previous value: -"Clearance below the ceiling (default 90)"New value: +"Clearance below the ceiling (default = the gap, 90); at least the hook plate + 3, so a hanger on the top row can be lifted off"
    • changedInput schema / properties / wall_height_mm / default
      Previous value: -2400New value: +2440
    • changedInput schema / properties / wall_height_mm / description
      Previous value: -"Wall height in mm (300–4000, default 2400)"New value: +"Wall height in mm (300–4000, default 2440 — a full plywood sheet)"
    • changedInput schema / properties / wall_width_mm / default
      Previous value: -3000New value: +1220
    • changedInput schema / properties / wall_width_mm / description
      Previous value: -"Wall width in mm (200–8000, default 3000)"New value: +"Wall width in mm (200–8000, default 1220 — a full plywood sheet)"
  3. Changed2 schema fields changed
    • changedInput schema / properties / hangers / items / properties / width_mm / description
      Previous value: -"Width in mm (snap grid is the buffer, 30 mm)"New value: +"Width in whole mm (the planner drags in 10 mm steps; the palette sizes are 50–550)"
    • changedInput schema / properties / system / properties / buffer_mm / description
      Previous value: -"Buffer between hangers, also the snap grid (default 30)"New value: +"Buffer between hangers and above the floor (default 30)"
  4. Changed3 schema fields changed
    • changedInput schema / properties / hangers / items / properties / cleat_top_mm / description
      Previous value: -"Height from the floor of the top edge of the cleat the hanger hangs on; must be one of the wall's rows (e.g. 900, 1080, 1260 … with default settings)"New value: +"Height from the floor of the top edge of the cleat the hanger hangs on; must be one of the wall's rows (e.g. 660, 840, 1020, 1200 … with default settings)"
    • changedInput schema / properties / system / properties / table_height_mm / description
      Previous value: -"Table height — the top of a cleat that anchors the rows (default 900)"New value: +"Table height — the top of the table (default 900). The table hangs on a cleat table_offset_mm lower, and that cleat anchors the rows"
    • addedInput schema / properties / system / properties / table_offset_mm
      Added value: +{
      +  "description": "How far below the table height the table's own cleat has its top edge (default 60 = hook plate − material, so the tabletop hangs like a hanger; 0 makes the table height the top of a cleat)",
      +  "maximum": 1000,
      +  "minimum": 0,
      +  "type": "integer"
      +}
  5. Changed1 schema field changed
    • changedInput schema / properties / hangers / items / properties / rows_below / description
      Previous value: -"Extra cleat rows spanned below the hook row (0 = one cleat; each adds one pitch, 180 mm, to the panel height)"New value: +"Extra cleat rows spanned below the hook row (0 = one cleat; each adds one pitch, 180 mm, to the panel height). Typical: hooks 0; shelves and boxes 1 (a shelf hangs on its row and rests on the cleat below); deep boxes and panels 2; tall panels 3"
  6. Changed7 schema fields changed
    • addedInput schema / properties / hangers / items / properties / cleat_top_mm / maximum
      Added value: +4000
    • addedInput schema / properties / hangers / items / properties / extension_mm / maximum
      Added value: +4000
    • addedInput schema / properties / hangers / items / properties / rows_below / maximum
      Added value: +49
    • addedInput schema / properties / hangers / items / properties / width_mm / maximum
      Added value: +8000
    • changedInput schema / properties / hangers / items / properties / x_mm / description
      Previous value: -"Left edge, mm from the wall's left edge"New value: +"Left edge, mm from the wall's left edge (x + width at most 8000, the widest wall)"
    • addedInput schema / properties / hangers / items / properties / x_mm / maximum
      Added value: +7990
    • changedInput schema / properties / system / properties / top_clearance_mm / maximum
      Previous value: -1500New value: +4000
  7. First observed

TDQS

A4.7/5.0
Behavior5/5

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

Annotations already set readOnlyHint=true and destructiveHint=false, and the description reinforces this by describing a planning/calculation tool. It adds substantial behavioral context: the cleat dimensions, the lifting constraint (hook plate ≤ gap − 3), the table offset logic, and the list of return values (rows, fits, cut list, coverage, PNG, editable link). It explains failure reasons (row missing, row off, outside wall, collision). No contradictions with annotations.

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 is a dense, single paragraph with many numbers and rules. It front-loads the purpose but then flows into a wall of specifications. It is not structured (no bullet points or sections) and includes a trailing 'Beta.' While all information is present, it could be more scannable and concise for an agent to parse quickly.

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?

Given the tool's complexity (nested objects, 5 top-level parameters, no output schema), the description covers the full scope: inputs, defaults, constraints, return values, and a usage tip. It explains what the tool does, what it returns, and why hangers might fail. It even notes the default wall size. This is sufficiently complete for an agent to invoke it correctly without additional documentation.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100% with detailed parameter descriptions, so the baseline is 3. The description adds relational meaning beyond the schema: it explains how parameters interact (e.g., hook plate ≤ gap − 3, top cleat ≥ hook plate + 3, table offset = hook plate − material) and provides default values (90, 90, 72, 12, 30, 900) that contextualize the system. It doesn't repeat schema text but enriches understanding of the parameters' roles.

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 clearly states it plans a French cleat wall, specifies the exact system (Fredenslund), and enumerates the inputs (wall size, hangers) and outputs (rows, fits, cut list, picture, editable link). It distinguishes itself from the sibling mft3_hole_pattern by focusing on wall planning, not hole patterns.

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

Usage Guidelines5/5

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

Provides explicit workflow guidance: 'Call with no hangers to get the rows for a wall first.' It also explains what inputs are expected ('Give the wall size and the hangers to hang') and the purpose of each parameter category. Though it doesn't name alternatives, the sibling is clearly different, and the description gives enough context to select this tool appropriately.

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