API & MCP
Everything a person can do on Finger-Joint Box Generator (laser & CNC), a program or AI agent can do with the same inputs and get the identical result.
HTTP API
POST https://kerfwisefingerjointbox.usefulweb.app/api/v1/calculate– run Finger-Joint Box Generator (laser & CNC)GET https://kerfwisefingerjointbox.usefulweb.app/api/v1/tool– inputs, output schema, examples- OpenAPI 3.1: /openapi.json · /openapi.yaml
- Errors:
application/problem+json;422includes per-fielderrors.
Finger-Joint Box Generator (laser & CNC)
Generate a finger-joint (box-joint) box from inside or outside dimensions and the material thickness: closed lid, open tray or sliding lid, a grid of cross-halved dividers, kerf compensation for lasers and dog-bone reliefs for CNC routers. Every joint gets an odd number of equal fingers; the parts are nested onto your laser bed or stock sheet and exported as layered SVG, DXF R12, a 1:1 PDF with a scale bar and, for routers, G-code.
| Field | Type | Default | Description |
|---|---|---|---|
width | number | 160 | Width (mm) |
depth | number | 100 | Depth (mm) |
height | number | 60 | Height (mm) |
dims | select (inner, outer) | "inner" | Dimensions are |
thickness | number | 3 | Material thickness (mm). Measure your sheet with calipers: 3 mm plywood is often 2.8–3.2 mm. |
finger | number | 10 | Finger width (target, mm). Each joint is divided into an odd number of equal fingers close to this width. |
kerf | number | 0.15 | Kerf compensation (mm, 0 = off). The width of material the laser burns away. Find it with the kerf test coupon. |
fit | number | 0.2 | Fit clearance for slots and sliding lid (mm) |
lid | select (closed, open, sliding) | "closed" | Lid |
columns | integer | 1 | Compartments across the width |
rows | integer | 1 | Compartments across the depth |
dogbone | number | 0 | Dog-bone reliefs for a router bit of diameter (mm, 0 = off) |
sheetWidth | number | 0 | Sheet or laser bed width (mm, 0 = no sheet). With a sheet size the parts are nested onto as many sheets as needed; 0 lays every part out in one drawing. |
sheetHeight | number | 0 | Sheet or laser bed height (mm, 0 = no sheet) |
spacing | number | 4 | Gap between parts (mm). For CNC routing use at least the cutter diameter. |
labels | boolean | true | Part names on a separate label layer |
paper | select (fit, a3, a4, a5, a6, b5, letter, legal, tabloid, halfletter) | "fit" | PDF pages |
cnc | select (none, grbl, linuxcnc, fanuc) | "none" | CNC G-code |
toolDiameter | number | 3.175 | Cutter diameter (mm) |
feed | number | 1200 | Feed (mm/min) |
plunge | number | 300 | Plunge (mm/min) |
stepdown | number | 1.5 | Depth per pass (mm) |
Example request
Box with lid, 160 × 100 × 60 mm inside, 3 mm plywood
curl -X POST https://kerfwisefingerjointbox.usefulweb.app/api/v1/calculate -H 'content-type: application/json' -d '{"width":160,"depth":100,"height":60,"thickness":3,"finger":10,"kerf":0.15,"lid":"closed"}'
Every result contains
inputs (normalised, defaults applied), summary, result (validated against the published schema), units, assumptions, sources, warnings, computedAt and links.
MCP (Model Context Protocol)
- Streamable HTTP endpoint:
https://kerfwisefingerjointbox.usefulweb.app/mcp– protocol revisions 2026-07-28 (stateless) and 2025-11-25 / 2025-06-18 / 2025-03-26 (initialize handshake). - Tools:
kerfwise_finger_joint_box - Local stdio connector:
node src/mcp-stdio.ts --tool=kerfwise-finger-joint-box
{
"mcpServers": {
"kerfwise-finger-joint-box": { "type": "http", "url": "https://kerfwisefingerjointbox.usefulweb.app/mcp" }
}
}