Koskamo

NestingCalc MCP

An official MCP server exposing 37 woodworking and construction calculators as tools, including linear cutting, sheet nesting, timber volume, kiln drying, and material weight estimations, allowing agents to perform precise calculations for cutting lists, waste minimization, and cost estimation.

Endpoint and access

No sign-in to connect and list tools. Individual tools may still need a vendor account, credentials, or permissions; check the documented prerequisites.

NestingCalc MCP logo, by NestingCalcVendor evidenceStreamable HTTPNo sign-inEndpoint checked 2026-11-06Operated by NestingCalc
MCP endpoint (Streamable HTTP)
https://mcp.nestingcalc.com/mcp
Vendor documentation

What its tools do

37 tools, grouped by the hints the server advertises. Hints are self-declared, not verified behavior.

37 of 37 have a description · 0 of 37 declare behavior hints · 18 of 37 with parameters document them all

Checks and signals

Each line is separate evidence, not a trust score.

  • Passed Endpoint answered the live check ·
  • Passed Official MCP Registry namespace is tied to nestingcalc.com ·
  • Passed Endpoint is on the registry namespace domain ·
  • Availability 1 of 1 checks passed in 30 days

What you can do with it

  • Optimize linear cutting and sheet nesting layouts to minimize material waste
  • Calculate timber volume, board feet, and log weight using standard formulas
  • Estimate material costs and bill-of-materials for furniture projects
  • Determine cutting speeds, feeds, and miter angles for CNC and manual machining

Source and maintenance

Vendor evidenceRegistry 1.2.0

Protocol and capabilities

Server
nestingcalc 1.2.0
MCP protocol negotiated in check
2025-11-25
Tools
37 advertised
Resources
Not advertised
Resource templates
Not advertised
Prompts
Not advertised
Server-advertised capabilities
{
  "tools": {
    "listChanged": true
  }
}

Tools

37 advertised

linear_cutting_optimizer
Advertised by the server during the last successful anonymous check.

Optimize 1D cutting plans for bars, pipes and profiles (linear cutting stock problem, best-fit decreasing heuristic). Returns bars used, per-bar cut lists with positions, total waste and unplaced parts. A web_url with the plan prefilled is included for a visual SVG diagram.

linear_cutting_optimizer input schema
{
  "type": "object",
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "required": [
    "unit",
    "stock_length",
    "parts"
  ],
  "properties": {
    "kerf": {
      "type": "number",
      "default": 0,
      "minimum": 0,
      "description": "Saw blade width consumed by each cut"
    },
    "trim": {
      "type": "number",
      "default": 0,
      "minimum": 0,
      "description": "Unusable trim at bar ends"
    },
    "unit": {
      "enum": [
        "mm",
        "cm",
        "m",
        "in",
        "ft"
      ],
      "type": "string",
      "description": "Unit for all lengths"
    },
    "parts": {
      "type": "array",
      "items": {
        "type": "object",
        "required": [
          "length"
        ],
        "properties": {
          "qty": {
            "type": "integer",
            "default": 1,
            "maximum": 9007199254740991,
            "description": "How many of this part",
            "exclusiveMinimum": 0
          },
          "label": {
            "type": "string",
            "description": "Optional part name"
          },
          "length": {
            "type": "number",
            "description": "Cut length",
            "exclusiveMinimum": 0
          }
        }
      },
      "minItems": 1,
      "description": "Parts to cut"
    },
    "stock_count": {
      "type": "integer",
      "default": 1,
      "maximum": 9007199254740991,
      "description": "How many stock bars are available",
      "exclusiveMinimum": 0
    },
    "stock_length": {
      "type": "number",
      "description": "Length of one stock bar",
      "exclusiveMinimum": 0
    }
  }
}
sheet_cutting_optimizer
Advertised by the server during the last successful anonymous check.

Optimize 2D guillotine cutting plans for plywood, MDF, glass, sheet metal (2D nesting with kerf, per-part rotation lock for grain direction, optional sheet trim and multiple stock sizes). Returns sheets used, piece positions, utilization, estimated cut length/count and unplaced pieces. Includes a web_url with the plan prefilled for a visual layout diagram.

sheet_cutting_optimizer input schema
{
  "type": "object",
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "required": [
    "unit",
    "stock_width",
    "stock_height",
    "pieces"
  ],
  "properties": {
    "kerf": {
      "type": "number",
      "default": 0,
      "minimum": 0,
      "description": "Blade/saw width consumed by each cut"
    },
    "unit": {
      "enum": [
        "mm",
        "cm",
        "m",
        "in",
        "ft"
      ],
      "type": "string",
      "description": "Unit for all dimensions"
    },
    "pieces": {
      "type": "array",
      "items": {
        "type": "object",
        "required": [
          "width",
          "height"
        ],
        "properties": {
          "qty": {
            "type": "integer",
            "default": 1,
            "maximum": 9007199254740991,
            "description": "How many of this piece",
            "exclusiveMinimum": 0
          },
          "label": {
            "type": "string",
            "description": "Optional piece name"
          },
          "width": {
            "type": "number",
            "description": "Piece width",
            "exclusiveMinimum": 0
          },
          "height": {
            "type": "number",
            "description": "Piece height",
            "exclusiveMinimum": 0
          },
          "rotatable": {
            "type": "boolean",
            "default": true,
            "description": "Allow 90-degree rotation (false = grain lock)"
          }
        }
      },
      "minItems": 1,
      "description": "Pieces to cut"
    },
    "stocks": {
      "type": "array",
      "items": {
        "type": "object",
        "required": [
          "width",
          "height",
          "count"
        ],
        "properties": {
          "count": {
            "type": "integer",
            "maximum": 9007199254740991,
            "description": "Sheets available of this size",
            "exclusiveMinimum": 0
          },
          "width": {
            "type": "number",
            "description": "Sheet width",
            "exclusiveMinimum": 0
          },
          "height": {
            "type": "number",
            "description": "Sheet height",
            "exclusiveMinimum": 0
          }
        }
      },
      "maxItems": 6,
      "description": "Optional mixed stock sizes; replaces stock_width/stock_height/stock_count when given"
    },
    "trim_x": {
      "type": "number",
      "default": 0,
      "minimum": 0,
      "description": "Symmetric trim removed from left/right sheet edges (damaged edges)"
    },
    "trim_y": {
      "type": "number",
      "default": 0,
      "minimum": 0,
      "description": "Symmetric trim removed from top/bottom sheet edges"
    },
    "stock_count": {
      "type": "integer",
      "default": 1,
      "maximum": 9007199254740991,
      "description": "How many sheets are available",
      "exclusiveMinimum": 0
    },
    "stock_width": {
      "type": "number",
      "description": "Sheet width",
      "exclusiveMinimum": 0
    },
    "stock_height": {
      "type": "number",
      "description": "Sheet height",
      "exclusiveMinimum": 0
    }
  }
}
board_feet_calculator
Advertised by the server during the last successful anonymous check.

Calculate board feet and lumber cost (thickness x width x length / 144 in inches). Accepts multiple boards and an optional price quoted per board foot or per MBF (thousand board feet).

board_feet_calculator input schema
{
  "type": "object",
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "required": [
    "boards"
  ],
  "properties": {
    "unit": {
      "enum": [
        "in",
        "ft",
        "mm",
        "cm",
        "m"
      ],
      "type": "string",
      "default": "in",
      "description": "Unit for board dimensions"
    },
    "price": {
      "type": "number",
      "minimum": 0,
      "description": "Optional price per price_unit"
    },
    "boards": {
      "type": "array",
      "items": {
        "type": "object",
        "required": [
          "thickness",
          "width",
          "length"
        ],
        "properties": {
          "qty": {
            "type": "integer",
            "default": 1,
            "maximum": 9007199254740991,
            "exclusiveMinimum": 0
          },
          "label": {
            "type": "string"
          },
          "width": {
            "type": "number",
            "exclusiveMinimum": 0
          },
          "length": {
            "type": "number",
            "exclusiveMinimum": 0
          },
          "thickness": {
            "type": "number",
            "exclusiveMinimum": 0
          }
        }
      },
      "minItems": 1,
      "description": "Boards (dimensions in the chosen unit)"
    },
    "price_unit": {
      "enum": [
        "bf",
        "mbf"
      ],
      "type": "string",
      "default": "bf",
      "description": "Unit the price is quoted in: single board foot or MBF (1,000 bf)"
    }
  }
}
miter_angle_calculator
Advertised by the server during the last successful anonymous check.

Miter angles three ways: corner mode (any corner angle between two pieces), sides mode (regular polygon with N sides), crown mode (miter + bevel for crown molding at a spring angle).

miter_angle_calculator input schema
{
  "type": "object",
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "required": [
    "mode"
  ],
  "properties": {
    "mode": {
      "enum": [
        "corner",
        "sides",
        "crown"
      ],
      "type": "string",
      "description": "Calculation mode"
    },
    "sides": {
      "type": "integer",
      "maximum": 120,
      "minimum": 3,
      "description": "sides mode: number of sides of the frame/polygon"
    },
    "corner_angle_deg": {
      "type": "number",
      "description": "corner mode: interior corner angle, e.g. 90 or 135",
      "exclusiveMaximum": 180,
      "exclusiveMinimum": 0
    },
    "spring_angle_deg": {
      "type": "number",
      "description": "crown mode: spring angle, typically 38 or 45",
      "exclusiveMaximum": 90,
      "exclusiveMinimum": 0
    }
  }
}
lumber_weight_calculator
Advertised by the server during the last successful anonymous check.

Weight of lumber by species, dimensions, quantity and moisture (dry/fresh), using species density tables. Optional custom density in kg/m3.

lumber_weight_calculator input schema
{
  "type": "object",
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "required": [
    "species",
    "thickness_mm",
    "width_mm",
    "length_m"
  ],
  "properties": {
    "qty": {
      "type": "integer",
      "default": 1,
      "maximum": 9007199254740991,
      "exclusiveMinimum": 0
    },
    "species": {
      "enum": [
        "pine",
        "spruce",
        "fir",
        "cedar",
        "poplar",
        "oak-red",
        "oak-white",
        "maple-hard",
        "birch",
        "ash",
        "beech",
        "walnut",
        "cherry",
        "mahogany",
        "teak",
        "mdf",
        "plywood",
        "oak-engineered"
      ],
      "type": "string",
      "description": "Wood species key"
    },
    "length_m": {
      "type": "number",
      "exclusiveMinimum": 0
    },
    "moisture": {
      "enum": [
        "dry",
        "fresh"
      ],
      "type": "string",
      "default": "dry",
      "description": "fresh (green) wood uses 1.5x density (+50% weight)"
    },
    "width_mm": {
      "type": "number",
      "exclusiveMinimum": 0
    },
    "thickness_mm": {
      "type": "number",
      "exclusiveMinimum": 0
    },
    "custom_density_kg_m3": {
      "type": "number",
      "minimum": 0,
      "description": "Overrides species density"
    }
  }
}
rebar_takeoff
Advertised by the server during the last successful anonymous check.

Rebar weight takeoff (d2/162 rule): total length, weight in kg and bars per tonne for a list of rebar lines. Supports metric mm bars and US # sizes as diameters.

rebar_takeoff input schema
{
  "type": "object",
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "required": [
    "lines"
  ],
  "properties": {
    "lines": {
      "type": "array",
      "items": {
        "type": "object",
        "required": [
          "diameter_mm",
          "length_m"
        ],
        "properties": {
          "qty": {
            "type": "integer",
            "default": 1,
            "maximum": 9007199254740991,
            "exclusiveMinimum": 0
          },
          "length_m": {
            "type": "number",
            "exclusiveMinimum": 0
          },
          "diameter_mm": {
            "type": "number",
            "description": "Bar diameter, e.g. 12 or 15.875 (#5)",
            "exclusiveMinimum": 0
          }
        }
      },
      "minItems": 1,
      "description": "Rebar lines"
    }
  }
}
metal_weight_calculator
Advertised by the server during the last successful anonymous check.

Weight of metal stock per profile: pipe/tube (OD + wall), round bar, square/rectangular tube, flat bar, angle, beam/I-beam. Materials: steel, stainless, aluminum, copper, brass.

metal_weight_calculator input schema
{
  "type": "object",
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "required": [
    "profile",
    "material",
    "length_m"
  ],
  "properties": {
    "qty": {
      "type": "integer",
      "default": 1,
      "maximum": 9007199254740991,
      "exclusiveMinimum": 0
    },
    "od_mm": {
      "type": "number",
      "minimum": 0,
      "description": "pipe/round-bar: outer diameter"
    },
    "web_mm": {
      "type": "number",
      "minimum": 0,
      "description": "beam: web thickness"
    },
    "profile": {
      "enum": [
        "pipe",
        "round-bar",
        "square-tube",
        "rect-tube",
        "flat-bar",
        "angle",
        "beam"
      ],
      "type": "string"
    },
    "wall_mm": {
      "type": "number",
      "minimum": 0,
      "description": "pipe/tubes: wall thickness"
    },
    "length_m": {
      "type": "number",
      "description": "Length in meters",
      "exclusiveMinimum": 0
    },
    "material": {
      "enum": [
        "steel",
        "stainless",
        "aluminum",
        "copper",
        "brass"
      ],
      "type": "string"
    },
    "width_mm": {
      "type": "number",
      "minimum": 0,
      "description": "rect-tube/flat-bar/angle/beam: width"
    },
    "height_mm": {
      "type": "number",
      "minimum": 0,
      "description": "rect-tube/beam: height"
    }
  }
}
cnc_feeds_speeds
Advertised by the server during the last successful anonymous check.

CNC spindle RPM and feed rate from tool diameter, flute count, chip load and cutting speed. Works for routers and mills, metric and imperial.

cnc_feeds_speeds input schema
{
  "type": "object",
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "required": [
    "unit",
    "tool_diameter",
    "chip_load",
    "cutting_speed"
  ],
  "properties": {
    "unit": {
      "enum": [
        "metric",
        "imperial"
      ],
      "type": "string"
    },
    "flutes": {
      "type": "integer",
      "default": 2,
      "maximum": 9007199254740991,
      "exclusiveMinimum": 0
    },
    "machine": {
      "enum": [
        "router",
        "mill"
      ],
      "type": "string",
      "default": "router"
    },
    "chip_load": {
      "type": "number",
      "description": "Chip load per tooth (mm or inch)",
      "exclusiveMinimum": 0
    },
    "cutting_speed": {
      "type": "number",
      "description": "Cutting speed Vc (m/min or ft/min)",
      "exclusiveMinimum": 0
    },
    "tool_diameter": {
      "type": "number",
      "description": "Cutter diameter (mm or inch)",
      "exclusiveMinimum": 0
    }
  }
}
sheet_metal_gauge
Advertised by the server during the last successful anonymous check.

Convert sheet metal gauge to thickness (mm) or thickness to gauge, and compute sheet weight for steel, stainless, aluminum or galvanized steel.

sheet_metal_gauge input schema
{
  "type": "object",
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "properties": {
    "qty": {
      "type": "integer",
      "default": 1,
      "maximum": 9007199254740991,
      "exclusiveMinimum": 0
    },
    "mode": {
      "enum": [
        "gauge",
        "mm"
      ],
      "type": "string",
      "default": "gauge",
      "description": "gauge: from gauge number; mm: from thickness"
    },
    "gauge": {
      "type": "integer",
      "maximum": 9007199254740991,
      "description": "gauge mode: gauge number, e.g. 16",
      "exclusiveMinimum": 0
    },
    "material": {
      "enum": [
        "steel",
        "stainless",
        "aluminum",
        "galvanized"
      ],
      "type": "string",
      "default": "steel"
    },
    "width_mm": {
      "type": "number",
      "default": 1000,
      "minimum": 0
    },
    "length_mm": {
      "type": "number",
      "default": 2000,
      "minimum": 0
    },
    "thickness_mm": {
      "type": "number",
      "minimum": 0,
      "description": "mm mode: thickness in mm"
    }
  }
}
tile_calculator
Advertised by the server during the last successful anonymous check.

Tiles, boxes and cost for a room: room and tile dimensions, grout width, waste factor by layout pattern (straight, offset, diagonal, herringbone...), optional box size and prices.

tile_calculator input schema
{
  "type": "object",
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "required": [
    "room_width_m",
    "room_length_m",
    "tile_width_mm",
    "tile_length_mm"
  ],
  "properties": {
    "layout": {
      "enum": [
        "straight",
        "offset",
        "diagonal",
        "herringbone",
        "large-format",
        "natural-stone"
      ],
      "type": "string",
      "default": "straight",
      "description": "Layout pattern (sets default waste factor)"
    },
    "box_size": {
      "type": "integer",
      "default": 10,
      "maximum": 9007199254740991,
      "description": "Tiles per box",
      "exclusiveMinimum": 0
    },
    "grout_mm": {
      "type": "number",
      "default": 3,
      "minimum": 0
    },
    "price_per_m2": {
      "type": "number",
      "minimum": 0
    },
    "room_width_m": {
      "type": "number",
      "exclusiveMinimum": 0
    },
    "price_per_box": {
      "type": "number",
      "minimum": 0
    },
    "room_length_m": {
      "type": "number",
      "exclusiveMinimum": 0
    },
    "tile_width_mm": {
      "type": "number",
      "exclusiveMinimum": 0
    },
    "waste_percent": {
      "type": "number",
      "minimum": 0,
      "description": "Overrides the layout default"
    },
    "tile_length_mm": {
      "type": "number",
      "exclusiveMinimum": 0
    }
  }
}
wallpaper_calculator
Advertised by the server during the last successful anonymous check.

Wallpaper rolls needed for a wall, accounting for pattern repeat and openings. Use a standard roll preset (eu, us-single, us-double, commercial54) or custom roll dimensions.

wallpaper_calculator input schema
{
  "type": "object",
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "required": [
    "wall_width_m",
    "wall_height_m"
  ],
  "properties": {
    "openings_m2": {
      "type": "number",
      "default": 0,
      "minimum": 0,
      "description": "Area of doors/windows to subtract"
    },
    "roll_preset": {
      "enum": [
        "us-single",
        "us-double",
        "eu",
        "commercial54"
      ],
      "type": "string"
    },
    "roll_width_m": {
      "type": "number",
      "minimum": 0,
      "description": "Custom roll width (overrides preset)"
    },
    "wall_width_m": {
      "type": "number",
      "exclusiveMinimum": 0
    },
    "roll_length_m": {
      "type": "number",
      "minimum": 0,
      "description": "Custom roll length (overrides preset)"
    },
    "wall_height_m": {
      "type": "number",
      "exclusiveMinimum": 0
    },
    "pattern_repeat_m": {
      "type": "number",
      "default": 0,
      "minimum": 0,
      "description": "Pattern repeat length"
    }
  }
}
baluster_spacing_calculator
Advertised by the server during the last successful anonymous check.

Equal baluster/spindle spacing for a run: number of balusters, exact gap and positions. Enforces a maximum gap (e.g. the 4-inch / 100 mm sphere code rule).

baluster_spacing_calculator input schema
{
  "type": "object",
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "required": [
    "run_mm",
    "baluster_width_mm"
  ],
  "properties": {
    "run_mm": {
      "type": "number",
      "description": "Total run length between posts",
      "exclusiveMinimum": 0
    },
    "max_gap_mm": {
      "type": "number",
      "default": 100,
      "minimum": 0,
      "description": "Maximum allowed gap (100 mm = sphere rule, 102 mm = 4 in)"
    },
    "baluster_width_mm": {
      "type": "number",
      "exclusiveMinimum": 0
    }
  }
}
flooring_calculator
Advertised by the server during the last successful anonymous check.

Laminate/vinyl plank takeoff: planks, boxes and cost with offcut reuse between rows (best-fit), expansion gap, layout waste presets and direction.

flooring_calculator input schema
{
  "type": "object",
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "required": [
    "room_width_m",
    "room_length_m",
    "plank_width_mm",
    "plank_length_mm"
  ],
  "properties": {
    "layout": {
      "enum": [
        "straight",
        "staggered",
        "herringbone",
        "diagonal"
      ],
      "type": "string",
      "default": "staggered"
    },
    "direction": {
      "enum": [
        "length",
        "width"
      ],
      "type": "string",
      "default": "length",
      "description": "Plank direction"
    },
    "expansion_mm": {
      "type": "number",
      "default": 10,
      "minimum": 0
    },
    "price_per_m2": {
      "type": "number",
      "minimum": 0
    },
    "room_width_m": {
      "type": "number",
      "exclusiveMinimum": 0
    },
    "min_offcut_mm": {
      "type": "number",
      "default": 300,
      "minimum": 0,
      "description": "Offcuts shorter than this are not reused"
    },
    "price_per_box": {
      "type": "number",
      "minimum": 0
    },
    "room_length_m": {
      "type": "number",
      "exclusiveMinimum": 0
    },
    "waste_percent": {
      "type": "number",
      "minimum": 0,
      "description": "Overrides the layout default"
    },
    "plank_width_mm": {
      "type": "number",
      "exclusiveMinimum": 0
    },
    "planks_per_box": {
      "type": "integer",
      "default": 8,
      "maximum": 9007199254740991,
      "exclusiveMinimum": 0
    },
    "plank_length_mm": {
      "type": "number",
      "exclusiveMinimum": 0
    }
  }
}
embroidery_resize
Advertised by the server during the last successful anonymous check.

Resize an embroidery design file (PES or DST) by a scale percentage. Returns stitch stats before/after, a density safety verdict (safe within +/-15%) and the resized file as base64.

embroidery_resize input schema
{
  "type": "object",
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "required": [
    "file_base64",
    "scale_percent"
  ],
  "properties": {
    "file_base64": {
      "type": "string",
      "minLength": 4,
      "description": "Base64-encoded PES or DST file"
    },
    "scale_percent": {
      "type": "number",
      "description": "Target scale in percent, e.g. 80 for -20%",
      "exclusiveMinimum": 0
    }
  }
}
hoppus_volume
Advertised by the server during the last successful anonymous check.

Hoppus (quarter-girth) volume of round logs from mid-length circumference and length: (C/4)^2 x L. Returns Hoppus volume, true volume (x 4/pi), Hoppus tons (50 h ft3) and a board-feet approximation, with optional quantity and value per Hoppus unit.

hoppus_volume input schema
{
  "type": "object",
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "required": [
    "circumference",
    "length"
  ],
  "properties": {
    "qty": {
      "type": "integer",
      "default": 1,
      "maximum": 9007199254740991,
      "exclusiveMinimum": 0
    },
    "unit": {
      "enum": [
        "imperial",
        "metric"
      ],
      "type": "string",
      "default": "imperial",
      "description": "imperial: circumference in inches, length in feet; metric: cm and m"
    },
    "length": {
      "type": "number",
      "description": "Log length (ft or m)",
      "exclusiveMinimum": 0
    },
    "circumference": {
      "type": "number",
      "description": "Circumference at mid-length (in or cm)",
      "exclusiveMinimum": 0
    },
    "price_per_hoppus_unit": {
      "type": "number",
      "minimum": 0,
      "description": "Optional value per Hoppus ft3/m3"
    }
  }
}
log_volume
Advertised by the server during the last successful anonymous check.

Cubic volume of a log by classical formula: Huber (mid diameter only), Smalian (both end diameters) or Newton (all three, most accurate). Metric (cm, m) or imperial (in, ft); returns volume in m3 and ft3.

log_volume input schema
{
  "type": "object",
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "required": [
    "length"
  ],
  "properties": {
    "unit": {
      "enum": [
        "metric",
        "imperial"
      ],
      "type": "string",
      "default": "metric",
      "description": "metric: diameters in cm, length in m; imperial: in and ft"
    },
    "length": {
      "type": "number",
      "exclusiveMinimum": 0
    },
    "method": {
      "enum": [
        "huber",
        "smalian",
        "newton"
      ],
      "type": "string",
      "default": "huber"
    },
    "diameter_mid": {
      "type": "number",
      "minimum": 0,
      "description": "Mid-length diameter (huber/newton)"
    },
    "diameter_large": {
      "type": "number",
      "minimum": 0,
      "description": "Large-end diameter (smalian/newton)"
    },
    "diameter_small": {
      "type": "number",
      "minimum": 0,
      "description": "Small-end diameter (smalian/newton)"
    }
  }
}
jas_log_scale
Advertised by the server during the last successful anonymous check.

Japanese Agricultural Standard (JAS) log scale: official diameter rounding (floor to 1 cm below 14 cm, even 2 cm at 14 cm and above), oval-log averaging, optional +2 cm ovality adjustment and the length allowance for logs over 6 m. Volume per log and totals in m3.

jas_log_scale input schema
{
  "type": "object",
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "required": [
    "diameter_small_cm",
    "length_m"
  ],
  "properties": {
    "qty": {
      "type": "integer",
      "default": 1,
      "maximum": 9007199254740991,
      "exclusiveMinimum": 0
    },
    "length_m": {
      "type": "number",
      "description": "Log length in meters",
      "exclusiveMinimum": 0
    },
    "oval_adjust": {
      "type": "boolean",
      "default": false,
      "description": "Add the +2 cm ovality adjustment"
    },
    "diameter_long_cm": {
      "type": "number",
      "minimum": 0,
      "description": "Long-axis diameter for oval logs (cm)"
    },
    "diameter_small_cm": {
      "type": "number",
      "description": "Short-axis diameter in cm",
      "exclusiveMinimum": 0
    }
  }
}
timber_unit_converter
Advertised by the server during the last successful anonymous check.

Convert timber quantities between m3, ft3, board feet, MBF, Hoppus ft3, Hoppus m3 and Hoppus tons, and translate a price quoted in any unit into $/m3 and $/MBF (1 MBF = 2.3597 m3).

timber_unit_converter input schema
{
  "type": "object",
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "required": [
    "value",
    "from"
  ],
  "properties": {
    "qty": {
      "type": "integer",
      "default": 1,
      "maximum": 9007199254740991,
      "description": "Multiplier (number of lots)",
      "exclusiveMinimum": 0
    },
    "from": {
      "enum": [
        "m3",
        "ft3",
        "bf",
        "mbf",
        "hft3",
        "hm3",
        "ht"
      ],
      "type": "string",
      "description": "Source unit"
    },
    "price": {
      "type": "number",
      "minimum": 0,
      "description": "Optional price per price_per unit"
    },
    "value": {
      "type": "number",
      "description": "Quantity in the source unit",
      "exclusiveMinimum": 0
    },
    "price_per": {
      "enum": [
        "m3",
        "ft3",
        "bf",
        "mbf",
        "hft3",
        "hm3",
        "ht"
      ],
      "type": "string",
      "default": "mbf"
    }
  }
}
green_log_weight
Advertised by the server during the last successful anonymous check.

Weight of a roundwood/log batch at any moisture content: W = volume x basic density x (1 + MC/100), per USDA Wood Handbook 2021 Ch.4. Presets for 14 verified species (acacia, rubberwood, eucalyptus, oak, teak, spruce...) or a custom basic density. Returns oven-dry mass, water mass and tonnes.

green_log_weight input schema
{
  "type": "object",
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "required": [
    "volume_m3"
  ],
  "properties": {
    "mc_pct": {
      "type": "number",
      "minimum": 0,
      "description": "Moisture content % oven-dry basis; defaults to the species' freshly-felled MC (~73% acacia, ~75% rubberwood)"
    },
    "species": {
      "type": "string",
      "description": "Species key, e.g. acacia-mangium, rubberwood, white-oak, teak"
    },
    "volume_m3": {
      "type": "number",
      "description": "Roundwood volume in m3 (Hoppus true, Huber or JAS volume)",
      "exclusiveMinimum": 0
    },
    "basic_density_kg_m3": {
      "type": "number",
      "minimum": 0,
      "description": "Custom basic density (oven-dry kg per green m3); overrides the species preset"
    }
  }
}
stowage_factor
Advertised by the server during the last successful anonymous check.

Stowage factor SF = cargo volume (m3) / cargo mass (tonnes), with classification against the IMO CSS Code Table 4.1 reference ranges for wood cargoes (sawn timber, tropical logs, plywood...).

stowage_factor input schema
{
  "type": "object",
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "required": [
    "volume_m3",
    "tonnes"
  ],
  "properties": {
    "tonnes": {
      "type": "number",
      "description": "Total cargo mass in metric tonnes",
      "exclusiveMinimum": 0
    },
    "volume_m3": {
      "type": "number",
      "description": "Total cargo volume in cubic metres",
      "exclusiveMinimum": 0
    }
  }
}
container_loading
Advertised by the server during the last successful anonymous check.

How many uniform cartons fit in a shipping container before cube-out or weigh-out. Presets: 20GP (33.2 CBM nominal, 28,200 kg payload), 40GP (67.7 CBM, 26,700 kg), 40HC (76.4 CBM, 68 usable, 26,500 kg) — all editable. Returns max pieces by volume vs weight, the binding limit, balanced density (kg/m3) and containers needed for a planned quantity.

container_loading input schema
{
  "type": "object",
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "required": [
    "kg_per_piece"
  ],
  "properties": {
    "container": {
      "enum": [
        "20gp",
        "40gp",
        "40hc",
        "custom"
      ],
      "type": "string",
      "default": "40hc"
    },
    "piece_h_m": {
      "type": "number",
      "minimum": 0,
      "description": "Carton height (m)"
    },
    "piece_l_m": {
      "type": "number",
      "minimum": 0,
      "description": "Carton length (m)"
    },
    "piece_w_m": {
      "type": "number",
      "minimum": 0,
      "description": "Carton width (m)"
    },
    "payload_kg": {
      "type": "number",
      "minimum": 0,
      "description": "Override max payload (kg); route limits are often lower than the container maximum"
    },
    "usable_cbm": {
      "type": "number",
      "minimum": 0,
      "description": "Override usable/stowable volume (CBM)"
    },
    "planned_qty": {
      "type": "integer",
      "maximum": 9007199254740991,
      "description": "Planned number of cartons (returns containers needed)",
      "exclusiveMinimum": 0
    },
    "kg_per_piece": {
      "type": "number",
      "description": "Mass per carton (kg)",
      "exclusiveMinimum": 0
    },
    "cbm_per_piece": {
      "type": "number",
      "minimum": 0,
      "description": "Volume per carton in CBM (alternative to dimensions)"
    }
  }
}
sawmill_recovery
Advertised by the server during the last successful anonymous check.

Sawmill recovery rate (lumber recovery factor): sawn volume out / roundwood volume in, benchmarked against FAO/EU/SE-Asia reference ranges. Also computes log-rule overrun/underrun: (actual BF - rule BF) / rule BF — Doyle underestimates small logs, so overrun is usually positive.

sawmill_recovery input schema
{
  "type": "object",
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "required": [
    "input_volume_m3",
    "output_volume_m3"
  ],
  "properties": {
    "actual_bf": {
      "type": "number",
      "minimum": 0,
      "description": "Optional: board feet actually sawn — enables the overrun calculation"
    },
    "log_rule_bf": {
      "type": "number",
      "minimum": 0,
      "description": "Optional: board feet predicted by the log rule (Doyle/Scribner/International)"
    },
    "input_volume_m3": {
      "type": "number",
      "description": "Roundwood volume in (m3)",
      "exclusiveMinimum": 0
    },
    "output_volume_m3": {
      "type": "number",
      "description": "Sawn lumber volume out (m3)",
      "exclusiveMinimum": 0
    }
  }
}
moisture_content
Advertised by the server during the last successful anonymous check.

Wood moisture content (WH-2021 Ch.4 Eq. 4-1..4-4). Two modes: (1) sample-based MC_od/MC_wb from wet+dry masses; (2) drying outcome — mass + water lost when going from start MC to target MC. Optional Gb (kg/m³) returns MCmax and MCsink. Basis 'od' (oven-dry, industry default) or 'wb' (wet).

moisture_content input schema
{
  "type": "object",
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "properties": {
    "mode": {
      "enum": [
        "sample",
        "drying",
        "max"
      ],
      "type": "string",
      "default": "sample"
    },
    "basis": {
      "enum": [
        "od",
        "wb"
      ],
      "type": "string",
      "default": "od"
    },
    "dry_mass": {
      "type": "number",
      "minimum": 0,
      "description": "Oven-dry mass of sample (sample mode)"
    },
    "wet_mass": {
      "type": "number",
      "minimum": 0,
      "description": "Wet mass of sample (sample mode)"
    },
    "end_mc_pct": {
      "type": "number",
      "minimum": 0,
      "description": "Target MC after drying, %"
    },
    "start_mass": {
      "type": "number",
      "minimum": 0,
      "description": "Mass at start of drying (drying mode)"
    },
    "start_mc_pct": {
      "type": "number",
      "minimum": 0,
      "description": "MC at start of drying, %"
    },
    "basic_density_kg_m3": {
      "type": "number",
      "minimum": 0,
      "description": "Basic density kg/m³ for MCmax/MCsink (max mode)"
    }
  }
}
wood_shrinkage
Advertised by the server during the last successful anonymous check.

Wood shrinkage from a start MC to an end MC (WH-2021 Eq. 4-9: S_x = S_od × (1 − x/FSP)). Direction: tangential (board width) or radial (board thickness) or volumetric. Picks a species from the wood-species table (16 verified species) or accepts custom S_od + FSP. MC is clamped to FSP — above FSP wood doesn't change dimension.

wood_shrinkage input schema
{
  "type": "object",
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "required": [
    "start_mc_pct",
    "end_mc_pct",
    "dimension_mm",
    "direction"
  ],
  "properties": {
    "species": {
      "type": "string",
      "description": "Species key, e.g. 'white-oak', 'rubberwood'"
    },
    "direction": {
      "enum": [
        "tangential",
        "radial",
        "volumetric"
      ],
      "type": "string"
    },
    "end_mc_pct": {
      "type": "number",
      "description": "Target MC, %, must be ≤ start_mc_pct",
      "exclusiveMinimum": 0
    },
    "dimension_mm": {
      "type": "number",
      "description": "Original dimension in mm (width, thickness, or volume)",
      "exclusiveMinimum": 0
    },
    "start_mc_pct": {
      "type": "number",
      "description": "Starting MC, %",
      "exclusiveMinimum": 0
    },
    "custom_fsp_pct": {
      "type": "number",
      "minimum": 0,
      "description": "Custom FSP %, default 30 (22 for teak)"
    },
    "custom_shrink_od_pct": {
      "type": "number",
      "minimum": 0,
      "description": "Custom green→OD shrinkage %, used if no species"
    }
  }
}
wood_emc
Advertised by the server during the last successful anonymous check.

Equilibrium moisture content (EMC) from temperature and RH using the Hailwood–Horrobin sorption model (Simpson 1973 coefficients, desorption branch — WH-2021 Ch.4 Table 4-2). Optional reverse mode: target MC → required RH at the given temperature.

wood_emc input schema
{
  "type": "object",
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "required": [
    "temp_c"
  ],
  "properties": {
    "mode": {
      "enum": [
        "emc",
        "reverse"
      ],
      "type": "string",
      "default": "emc"
    },
    "branch": {
      "enum": [
        "desorption",
        "adsorption"
      ],
      "type": "string",
      "default": "desorption"
    },
    "rh_pct": {
      "type": "number",
      "minimum": 0,
      "description": "Relative humidity, 0–100 (emc mode)"
    },
    "temp_c": {
      "type": "number",
      "description": "Air temperature, °C",
      "exclusiveMinimum": 0
    },
    "target_mc_pct": {
      "type": "number",
      "minimum": 0,
      "description": "Target MC % (reverse mode)"
    }
  }
}
kiln_capacity
Advertised by the server during the last successful anonymous check.

Kiln charge capacity: wood volume per batch (AH-188 / TechDrying). V_wood = D×R×C × t/(t+s) × f where t=board thickness, s=sticker thickness, f=fill factor (0.85–0.95). Returns wood volume in m³ and board feet (1 m³ = 423.77 BF).

kiln_capacity input schema
{
  "type": "object",
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "required": [
    "length_m",
    "width_m",
    "height_m",
    "board_thickness_mm",
    "sticker_thickness_mm"
  ],
  "properties": {
    "width_m": {
      "type": "number",
      "description": "Stack width, m",
      "exclusiveMinimum": 0
    },
    "height_m": {
      "type": "number",
      "description": "Stack height, m",
      "exclusiveMinimum": 0
    },
    "length_m": {
      "type": "number",
      "description": "Stack length, m",
      "exclusiveMinimum": 0
    },
    "fill_factor": {
      "type": "number",
      "minimum": 0,
      "description": "Stack fill factor 0–1, default 0.9"
    },
    "board_thickness_mm": {
      "type": "number",
      "description": "Average board thickness, mm",
      "exclusiveMinimum": 0
    },
    "sticker_thickness_mm": {
      "type": "number",
      "description": "Sticker thickness, mm (default 19)",
      "exclusiveMinimum": 0
    }
  }
}
rough_sizing
Advertised by the server during the last successful anonymous check.

Rough sizing — convert between finished (planed, kiln-dried) and rough-sawn dimensions before drying and planing. Adds planing allowance (default 2.5 mm/face) + saw kerf (default 2.2 mm band) and applies WH-2021 Eq. 4-9 shrinkage. Direction: tangential (board width) or radial (board thickness).

rough_sizing input schema
{
  "type": "object",
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "required": [
    "finished_mc_pct",
    "sawn_mc_pct",
    "direction"
  ],
  "properties": {
    "mode": {
      "enum": [
        "forward",
        "reverse"
      ],
      "type": "string",
      "default": "forward"
    },
    "kerf_mm": {
      "type": "number",
      "minimum": 0,
      "description": "Saw kerf, mm (default 2.2 band)"
    },
    "species": {
      "type": "string",
      "description": "Species key for shrinkage (e.g. 'white-oak')"
    },
    "rough_mm": {
      "type": "number",
      "minimum": 0,
      "description": "Rough-sawn dimension mm (reverse mode)"
    },
    "direction": {
      "enum": [
        "tangential",
        "radial"
      ],
      "type": "string"
    },
    "planing_mm": {
      "type": "number",
      "minimum": 0,
      "description": "Planing allowance per face, mm (default 2.5)"
    },
    "finished_mm": {
      "type": "number",
      "minimum": 0,
      "description": "Finished dimension mm (forward mode)"
    },
    "sawn_mc_pct": {
      "type": "number",
      "description": "MC at which the wood is sawn, %",
      "exclusiveMinimum": 0
    },
    "custom_fsp_pct": {
      "type": "number",
      "minimum": 0,
      "description": "Custom FSP %, default 30"
    },
    "finished_mc_pct": {
      "type": "number",
      "description": "Target finished MC, %",
      "exclusiveMinimum": 0
    },
    "custom_shrink_od_pct": {
      "type": "number",
      "minimum": 0,
      "description": "Custom S_od % (used if no species)"
    }
  }
}
firewood_calculator
Advertised by the server during the last successful anonymous check.

Convert firewood volume between cord (128 ft3), stere/Raummeter (stacked m3), solid m3 (Festmeter), loose m3 and ft3, with optional weight estimate by wood species (dry/fresh).

firewood_calculator input schema
{
  "type": "object",
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "required": [
    "value",
    "from"
  ],
  "properties": {
    "from": {
      "enum": [
        "stere",
        "cord",
        "loose",
        "ft3"
      ],
      "type": "string",
      "description": "Input unit: stere = 1 stacked m3, cord = 128 ft3, loose = bulk m3"
    },
    "value": {
      "type": "number",
      "exclusiveMinimum": 0
    },
    "species": {
      "enum": [
        "pine",
        "spruce",
        "fir",
        "cedar",
        "poplar",
        "oak-red",
        "oak-white",
        "maple-hard",
        "birch",
        "ash",
        "beech",
        "walnut",
        "cherry",
        "mahogany",
        "teak",
        "mdf",
        "plywood",
        "oak-engineered"
      ],
      "type": "string",
      "description": "Optional species key for weight"
    },
    "moisture": {
      "enum": [
        "dry",
        "fresh"
      ],
      "type": "string",
      "default": "dry",
      "description": "fresh = 1.5x weight"
    },
    "loose_factor": {
      "type": "number",
      "default": 1.4,
      "description": "Loose m3 per stacked m3 (1.35-1.55 typical)",
      "exclusiveMinimum": 1
    },
    "solid_factor": {
      "type": "number",
      "default": 0.7,
      "maximum": 1,
      "description": "Solid m3 per stacked m3 (Festmeter/Raummeter, 0.65-0.75 typical) - the weight runs off this",
      "exclusiveMinimum": 0
    }
  }
}
rpm_calculator
Advertised by the server during the last successful anonymous check.

Spindle speed (RPM) from cutting speed: n = Vc*1000/(pi*D) metric, n = Vc*12/(pi*D) imperial. Metric takes diameter in mm and Vc in m/min; imperial takes diameter in inches and Vc in SFM. Includes a web_url with the calculation prefilled.

rpm_calculator input schema
{
  "type": "object",
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "required": [
    "diameter",
    "cutting_speed"
  ],
  "properties": {
    "unit": {
      "enum": [
        "metric",
        "imperial"
      ],
      "type": "string",
      "default": "metric",
      "description": "Unit system"
    },
    "diameter": {
      "type": "number",
      "description": "Tool/workpiece diameter (metric: mm, imperial: inch)",
      "exclusiveMinimum": 0
    },
    "cutting_speed": {
      "type": "number",
      "description": "Cutting speed (metric: m/min, imperial: SFM)",
      "exclusiveMinimum": 0
    }
  }
}
cutting_speed_calculator
Advertised by the server during the last successful anonymous check.

Cutting speed from spindle speed: Vc = pi*D*n/1000 metric (m/min), SFM = pi*D*n/12 imperial. Always also returns the same speed converted to the other unit system. Includes a web_url with the calculation prefilled.

cutting_speed_calculator input schema
{
  "type": "object",
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "required": [
    "diameter",
    "rpm"
  ],
  "properties": {
    "rpm": {
      "type": "number",
      "description": "Spindle speed in revolutions per minute",
      "exclusiveMinimum": 0
    },
    "unit": {
      "enum": [
        "metric",
        "imperial"
      ],
      "type": "string",
      "default": "metric",
      "description": "Unit system"
    },
    "diameter": {
      "type": "number",
      "description": "Tool/workpiece diameter (metric: mm, imperial: inch)",
      "exclusiveMinimum": 0
    }
  }
}
timber_beam_capacity
Advertised by the server during the last successful anonymous check.

Allowable load on a simply supported rectangular timber beam (planning estimate, Eurocode 5 conventions, EN 338 grades C16-D40/D24-D40). Returns allowable UDL and center point load (gross and net of self-weight), governing mode (bending vs deflection at L/300), utilization, section properties. NOT a structural design - verify with an engineer. Includes a web_url with the beam prefilled.

timber_beam_capacity input schema
{
  "type": "object",
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "required": [
    "span_mm",
    "width_mm",
    "height_mm",
    "grade"
  ],
  "properties": {
    "grade": {
      "enum": [
        "C16",
        "C18",
        "C24",
        "C30",
        "C35",
        "C40",
        "D24",
        "D30",
        "D40"
      ],
      "type": "string",
      "description": "Timber grade (EN 338)"
    },
    "span_mm": {
      "type": "number",
      "description": "Clear span between supports in mm",
      "exclusiveMinimum": 0
    },
    "width_mm": {
      "type": "number",
      "description": "Beam width b in mm",
      "exclusiveMinimum": 0
    },
    "height_mm": {
      "type": "number",
      "description": "Beam depth h in mm (strong axis)",
      "exclusiveMinimum": 0
    },
    "load_type": {
      "enum": [
        "udl",
        "point"
      ],
      "type": "string",
      "default": "udl",
      "description": "Load type of interest"
    }
  }
}
glass_price_calculator
Advertised by the server during the last successful anonymous check.

Cut-to-size glass cost and weight estimate: net area with optional waste allowance, weight (2.5 kg/m2 per mm of thickness), material cost from your price per m2, optional polished-edge work per running metre, total and per-piece cost. Includes a web_url with the quote prefilled.

glass_price_calculator input schema
{
  "type": "object",
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "required": [
    "width_mm",
    "height_mm",
    "thickness_mm",
    "price_per_m2"
  ],
  "properties": {
    "quantity": {
      "type": "integer",
      "default": 1,
      "maximum": 9007199254740991,
      "description": "Number of identical panes",
      "exclusiveMinimum": 0
    },
    "width_mm": {
      "type": "number",
      "description": "Pane width in mm",
      "exclusiveMinimum": 0
    },
    "height_mm": {
      "type": "number",
      "description": "Pane height in mm",
      "exclusiveMinimum": 0
    },
    "waste_pct": {
      "type": "number",
      "default": 0,
      "maximum": 50,
      "minimum": 0,
      "description": "Cutting-waste allowance added on top of net area (%)"
    },
    "price_per_m2": {
      "type": "number",
      "description": "Glass price per square metre",
      "exclusiveMinimum": 0
    },
    "thickness_mm": {
      "type": "number",
      "description": "Glass thickness in mm (2-25)",
      "exclusiveMinimum": 0
    },
    "edge_price_per_m": {
      "type": "number",
      "default": 0,
      "minimum": 0,
      "description": "Polished-edge work price per running metre"
    }
  }
}
manufacturing_yield
Advertised by the server during the last successful anonymous check.

Cumulative yield through a wood production chain (sawing -> drying -> machining -> finishing). Multiplies stage yields, shows per-stage loss and computes the roundwood volume needed for a target finished volume.

manufacturing_yield input schema
{
  "type": "object",
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "required": [
    "stages"
  ],
  "properties": {
    "stages": {
      "type": "array",
      "items": {
        "type": "object",
        "required": [
          "yield_pct"
        ],
        "properties": {
          "label": {
            "type": "string",
            "description": "Optional stage name"
          },
          "yield_pct": {
            "type": "number",
            "description": "Share of stage input that becomes usable output, %",
            "exclusiveMinimum": 0
          }
        }
      },
      "minItems": 1,
      "description": "Production stages in process order"
    },
    "target_output_m3": {
      "type": "number",
      "minimum": 0,
      "description": "Finished volume wanted, m3 (reverse mode)"
    }
  }
}
glue_consumption
Advertised by the server during the last successful anonymous check.

Wood adhesive quantity: bond area x spread (g/m2, TDS presets like PVAc D3 175, EGP 250, finger-joint PUR 530) x application faces x waste allowance. Also computes bond area for edge-glued panels (joints from board width) and face lamination lay-ups.

glue_consumption input schema
{
  "type": "object",
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "required": [
    "spread_gsm"
  ],
  "properties": {
    "faces": {
      "enum": [
        "1",
        "2"
      ],
      "type": "string",
      "default": "1",
      "description": "1 = single-face, 2 = both mating faces"
    },
    "face_lam": {
      "type": "object",
      "required": [
        "length_mm",
        "width_mm",
        "layers"
      ],
      "properties": {
        "sets": {
          "type": "integer",
          "default": 1,
          "maximum": 9007199254740991,
          "exclusiveMinimum": 0
        },
        "layers": {
          "type": "integer",
          "maximum": 9007199254740991,
          "minimum": 2
        },
        "width_mm": {
          "type": "number",
          "exclusiveMinimum": 0
        },
        "length_mm": {
          "type": "number",
          "exclusiveMinimum": 0
        }
      },
      "description": "Face lamination lay-up instead of a direct area"
    },
    "waste_pct": {
      "type": "number",
      "default": 5,
      "maximum": 100,
      "minimum": 0,
      "description": "Application/squeeze-out waste, %"
    },
    "edge_panel": {
      "type": "object",
      "required": [
        "panel_length_mm",
        "panel_width_mm",
        "board_width_mm",
        "panel_thickness_mm"
      ],
      "properties": {
        "panels": {
          "type": "integer",
          "default": 1,
          "maximum": 9007199254740991,
          "exclusiveMinimum": 0
        },
        "board_width_mm": {
          "type": "number",
          "description": "Sawn lamella width - joint count = ceil(width/board)-1",
          "exclusiveMinimum": 0
        },
        "panel_width_mm": {
          "type": "number",
          "exclusiveMinimum": 0
        },
        "panel_length_mm": {
          "type": "number",
          "exclusiveMinimum": 0
        },
        "panel_thickness_mm": {
          "type": "number",
          "exclusiveMinimum": 0
        }
      },
      "description": "Edge-glued panel dimensions instead of a direct area"
    },
    "spread_gsm": {
      "type": "number",
      "description": "Spread rate g/m2 (PVAc D3 one face ~175, EGP ~250, finger PUR ~530)",
      "exclusiveMinimum": 0
    },
    "bond_area_m2": {
      "type": "number",
      "minimum": 0,
      "description": "Total bond-line area, m2"
    },
    "density_gcm3": {
      "type": "number",
      "minimum": 0,
      "description": "Glue density g/cm3 to get litres (PVAc ~1.08)"
    },
    "price_per_kg": {
      "type": "number",
      "minimum": 0,
      "description": "Glue price per kg"
    }
  }
}
paint_coverage
Advertised by the server during the last successful anonymous check.

Wood finishing paint quantity. Technical route: theoretical coverage = 10 x %volume solids / DFT(um), multiplied by transfer efficiency (conventional spray 30-35%, airless ~50%, HVLP ~65-90%, brush/roller ~90%); or a data-sheet coverage in m2/L. Adds an optional extra % for carved/3D surfaces.

paint_coverage input schema
{
  "type": "object",
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "required": [
    "area_m2",
    "coats"
  ],
  "properties": {
    "coats": {
      "type": "integer",
      "maximum": 10,
      "minimum": 1,
      "description": "Number of coats"
    },
    "area_m2": {
      "type": "number",
      "description": "Surface to coat, m2 (flat projected area)",
      "exclusiveMinimum": 0
    },
    "solids_pct": {
      "type": "number",
      "minimum": 0,
      "description": "Volume solids % (mode B)"
    },
    "dft_microns": {
      "type": "number",
      "minimum": 0,
      "description": "Target dry film thickness um (mode B)"
    },
    "price_per_l": {
      "type": "number",
      "minimum": 0,
      "description": "Coating price per litre"
    },
    "shape_extra_pct": {
      "type": "number",
      "default": 0,
      "maximum": 100,
      "minimum": 0,
      "description": "Extra % for 3D surfaces"
    },
    "transfer_eff_pct": {
      "type": "number",
      "minimum": 0,
      "description": "Transfer efficiency % (mode B; HVLP ~70)"
    },
    "coverage_m2_per_l": {
      "type": "number",
      "minimum": 0,
      "description": "Data-sheet coverage m2/L (mode A)"
    }
  }
}
cbm_shipment
Advertised by the server during the last successful anonymous check.

Packing CBM for cartons: per-line and lot volume (m3), total weight and lot density, with a cube-out / weigh-out verdict against the 40HC balanced density (390 kg/m3 - same presets as container loading).

cbm_shipment input schema
{
  "type": "object",
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "required": [
    "lines"
  ],
  "properties": {
    "lines": {
      "type": "array",
      "items": {
        "type": "object",
        "required": [
          "length_cm",
          "width_cm",
          "height_cm",
          "count"
        ],
        "properties": {
          "count": {
            "type": "integer",
            "maximum": 9007199254740991,
            "exclusiveMinimum": 0
          },
          "width_cm": {
            "type": "number",
            "exclusiveMinimum": 0
          },
          "height_cm": {
            "type": "number",
            "exclusiveMinimum": 0
          },
          "length_cm": {
            "type": "number",
            "exclusiveMinimum": 0
          },
          "weight_kg": {
            "type": "number",
            "minimum": 0,
            "description": "Gross weight per carton, kg"
          }
        }
      },
      "minItems": 1,
      "description": "Carton lines"
    }
  }
}
bom_costing
Advertised by the server during the last successful anonymous check.

Bill-of-materials cost roll-up for furniture: buy quantity = net qty x (1 + waste%, verified presets: S4S lumber 18%, rough 28%, nested panels 10%, hardware 3%), line and total costs, cost per product and a selling price from a target margin (price = cost / (1 - margin)).

bom_costing input schema
{
  "type": "object",
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "required": [
    "lines"
  ],
  "properties": {
    "lines": {
      "type": "array",
      "items": {
        "type": "object",
        "required": [
          "qty",
          "unit_cost"
        ],
        "properties": {
          "qty": {
            "type": "number",
            "description": "Net quantity per product",
            "exclusiveMinimum": 0
          },
          "name": {
            "type": "string"
          },
          "unit": {
            "type": "string",
            "description": "Unit label (m3, m2, pcs...)"
          },
          "unit_cost": {
            "type": "number",
            "description": "Cost per unit",
            "exclusiveMinimum": 0
          },
          "waste_pct": {
            "type": "number",
            "default": 0,
            "maximum": 200,
            "minimum": 0,
            "description": "Waste allowance %"
          }
        }
      },
      "minItems": 1
    },
    "products": {
      "type": "integer",
      "default": 1,
      "maximum": 9007199254740991,
      "description": "Products this BOM covers",
      "exclusiveMinimum": 0
    },
    "margin_pct": {
      "type": "number",
      "maximum": 90,
      "minimum": 0,
      "description": "Target margin on selling price, %"
    },
    "labor_per_product": {
      "type": "number",
      "minimum": 0,
      "description": "Direct labour per product"
    }
  }
}

Prompts

Not advertised

No prompt definitions available.

Resources

Not advertised

No resource definitions available.

90-day uptime

A lightweight connection check about every six hours, sampled on hosts with many listings. It shows the server answered, not that its tools work.

Too few checks for a percentage yet (2 of 2 answered).

  1. 2026-11-06: 1 of 1 checks answered
  2. 2026-11-07: 1 of 1 checks answered

30-day availability

Aggregated from read-only remote checks; this is not a tool-execution or security guarantee.

Successful checks
1 of 1 (100%)
Average latency
433 ms
95th percentile latency
433 ms

Maintenance history

Public check and source-refresh events. Editorial and ownership records remain private.

  • · probe · passed · 433 ms · metadata changed · 37 tool(s)

Connect from your client

Each snippet registers the same endpoint; pick the client you use.

This server is operated by the named third party. Listing and endpoint checks are not an endorsement or a security audit. Review the operator's permissions, terms, and data handling before connecting. How listings are checked and corrected.

Claude Code

Run this once in a terminal. It registers the remote server. Use --scope project to write .mcp.json for the repo.
Claude Code configuration
claude mcp add --transport http nestingcalc-mcp https://mcp.nestingcalc.com/mcp

Codex

Run this once. Codex stores MCP servers in ~/.codex/config.toml (or .codex/config.toml in a trusted project).
Codex configuration
codex mcp add nestingcalc-mcp --url https://mcp.nestingcalc.com/mcp

Cursor

Merge this server into .cursor/mcp.json in your project, then enable nestingcalc-mcp in your MCP settings.
Cursor configuration
{
  "mcpServers": {
    "nestingcalc-mcp": {
      "url": "https://mcp.nestingcalc.com/mcp"
    }
  }
}

Cline

Merge this into cline_mcp_settings.json (Cline → MCP Servers → Configure).
Cline configuration
{
  "mcpServers": {
    "nestingcalc-mcp": {
      "type": "streamableHttp",
      "url": "https://mcp.nestingcalc.com/mcp",
      "disabled": false
    }
  }
}

VS Code

Merge this server into .vscode/mcp.json. Use MCP: List Servers to start nestingcalc-mcp and inspect its tools.
VS Code configuration
{
  "servers": {
    "nestingcalc-mcp": {
      "type": "http",
      "url": "https://mcp.nestingcalc.com/mcp"
    }
  }
}

Gemini CLI

Run this once. It writes .gemini/settings.json in the current project; pass --scope user for ~/.gemini/settings.json.
Gemini CLI configuration
gemini mcp add --transport http nestingcalc-mcp https://mcp.nestingcalc.com/mcp

Claude Desktop

Open Claude Settings > Connectors > Add custom connector, enter this server URL and enable it for the conversation. This is a manual remote-connector handoff, not a desktop JSON configuration.
Claude Desktop configuration
https://mcp.nestingcalc.com/mcp

Windsurf

Merge this into ~/.codeium/windsurf/mcp_config.json, then refresh MCP in Cascade. Windsurf remote servers use serverUrl, not url.
Windsurf configuration
{
  "mcpServers": {
    "nestingcalc-mcp": {
      "serverUrl": "https://mcp.nestingcalc.com/mcp"
    }
  }
}

Let your agent find its tools

Find servers like NestingCalc MCP from your agent. Add Koskamo once to search the index for endpoints, access requirements, and client setup. Public discovery needs no key.

Do you run NestingCalc MCP?

Prove ownership with a DNS record, a well-known file, or your Official MCP Registry entry, and your edits publish immediately. Proofs are re-checked weekly; admins can still hide or remove a listing.

Claim this listing