Skip to main content
Glama

analyze_frame_bracing

Read-only

Analyzes frame bracing to determine where diagonals belong in shelves, racks, frames, and lattices, checking existing braces, panels, and bay dimensions for structural layout decisions.

Instructions

Where the diagonals go in a shelf, rack, frame, or lattice.

Needs Kiln Pro.

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

Input Schema

NameRequiredDescriptionDefault
colsNoNumber of cell columns (bays), >= 1.
modeNo"normie" | "engineer" | "auto". Default: "auto".
rowsNoNumber of cell rows (bays) in the grid, >= 1.
briefNoOptional user brief (auto-detects engineer mode).
bracesNoCells that already have a diagonal, as ``[row, col]`` pairs (0-indexed from the top-left) or ``{"row": r, "col": c}`` dicts. Omit for a bare frame. A cell listed twice is an X of both diagonals: it counts once and the second is reported as surplus.
jointsNoTruss form — number of joints (not for grids).
panelsNoSheets fixed across the frame, as inclusive blocks ``[row_start, col_start, row_end, col_end]``. A full back panel on a 3x2 bookcase is ``[[0, 0, 2, 1]]``.
membersNoTruss form — bars as ``[a, b]`` joint-index pairs.
brace_kindNoWhat an unmarked brace IS: "rigid" (pushes and pulls) or "tension_only" (cable/strap: a bay needs a crossed pair, one each way). LEAVE UNSET when the user has not said — the verdict then flags the assumption and queues the question instead of guessing silently.
bay_width_mmNoWidth of each bay opening — one number, or one per column. Unlocks per-bay diagonal spans.
bay_height_mmNoHeight of each bay opening — one number, or one per row.

Schema Changelog

Changes observed during successful MCP inspections.

  1. Changed11 schema fields changedv1.5.1
    • addedInput schema / properties / bay_height_mm / description
      Added value: +"Height of each bay opening — one number, or one per row."
    • addedInput schema / properties / bay_width_mm / description
      Added value: +"Width of each bay opening — one number, or one per column.  Unlocks per-bay diagonal spans."
    • addedInput schema / properties / brace_kind / description
      Added value: +"What an unmarked brace IS: \"rigid\" (pushes and pulls) or \"tension_only\" (cable/strap: a bay needs a crossed pair, one each way).  LEAVE UNSET when the user has not said — the verdict then flags the assumption and queues the question instead of guessing silently."
    • addedInput schema / properties / braces / description
      Added value: +"Cells that already have a diagonal, as ``[row, col]`` pairs (0-indexed from the top-left) or ``{\"row\": r, \"col\": c}`` dicts.  Omit for a bare frame. A cell listed twice is an X of both diagonals: it counts once and the second is reported as surplus."
    • addedInput schema / properties / brief / description
      Added value: +"Optional user brief (auto-detects engineer mode)."
    • addedInput schema / properties / cols / description
      Added value: +"Number of cell columns (bays), >= 1."
    • addedInput schema / properties / joints / description
      Added value: +"Truss form — number of joints (not for grids)."
    • addedInput schema / properties / members / description
      Added value: +"Truss form — bars as ``[a, b]`` joint-index pairs."
    • changedInput schema / properties / mode / description
      Previous value: -"Default: \"auto\"."New value: +"\"normie\" | \"engineer\" | \"auto\". Default: \"auto\"."
    • addedInput schema / properties / panels / description
      Added value: +"Sheets fixed across the frame, as inclusive blocks ``[row_start, col_start, row_end, col_end]``.  A full back panel on a 3x2 bookcase is ``[[0, 0, 2, 1]]``."
    • addedInput schema / properties / rows / description
      Added value: +"Number of cell rows (bays) in the grid, >= 1."
  2. Addedv1.5.0

TDQS

C2.5/5.0
Behavior2/5

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

Annotations already declare readOnlyHint=true, destructiveHint=false, and openWorldHint=false, so the safety profile is carried by structured data. The description contributes one genuinely new behavioral fact — the Kiln Pro entitlement requirement — but says nothing about the output (the schema mentions a "verdict" and a queued clarifying question), how the grid form and truss form differ, or what happens when assumptions are unset.

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?

At two short lines there is no wasted wording, and the Kiln Pro gate is clearly separated. However the opening line is not front-loaded with a verb or object, reading as a fragment rather than a definition, so brevity comes at the cost of an immediately parseable statement of purpose.

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

Completeness2/5

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

This is a complex tool: 11 optional parameters, two distinct input modes (grid vs truss via rows/cols vs joints/members), an assumption-flagging mode for brace_kind, and no output schema. Given that weight and the absence of any return-value documentation, the description should explain what a result looks like and how the two input modes differ; it does neither.

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 parameter docs are unusually rich — they define brace_kind's unset semantics, the X-brace surplus rule, panel block notation, and per-bay dimension unlocking. The description adds nothing to any of the 11 parameters, so the baseline 3 applies when the schema does all the work.

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

Purpose3/5

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

"Where the diagonals go in a shelf, rack, frame, or lattice" conveys the domain — diagonal bracing layout for framed structures — and adds situational vocabulary the bare name lacks. But it never names the operation the tool performs (analyze? recommend? verify? score?) or what the caller gets back, so the agent must infer the deliverable from the name alone.

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

Usage Guidelines2/5

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

The description gives no when-to-use guidance and no exclusions. With siblings like recommend_joint_strategy, get_joint_recommendation, analyze_structural_risks, and add_pin_joints in the catalog, an agent has no stated basis for choosing this bracing analysis over those. The only stated condition is the "Needs Kiln Pro" gate, which is a prerequisite rather than a selection rule.

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