Back to Browse

Nestbolt MCP Server

Developer ToolsModerate6.2MCP RegistryLocal
Free

Server data from the Official MCP Registry

Local fixed-sheet nesting for laser and CNC cutting: SVG/DXF import, nest, validate, export.

About

Local fixed-sheet nesting for laser and CNC cutting: SVG/DXF import, nest, validate, export.

Security Report

6.2
Moderate6.2Moderate Risk

Nestbolt is a Rust nesting engine with an MCP stdio server that reads and writes only within its workspace, and the README states no uploads occur in the browser app. The reviewed code (geometry import, SVG/DXF parsing, validation) shows no exfiltration, shell execution, or hardcoded secrets, and its permissions (file I/O for import/export) match its stated purpose. Only minor observations remain, such as the truncated file content limiting full verification of the MCP server and file path handling. Supply chain analysis found 6 known vulnerabilities in dependencies (0 critical, 4 high severity).

6 files analyzed · 9 issues found

Security scores are indicators to help you make informed decisions, not guarantees. Always review permissions before connecting any MCP server.

Permissions Required

This plugin requests these system permissions. Most are normal for its category.

File System Read

Reads files on your machine. Normal for tools that analyze or process local data.

File System Write

Writes or modifies files on your machine. Check that this is expected for the tool.

How to Install

Add this to your MCP configuration file:

{
  "mcpServers": {
    "io-github-skulitom-nestbolt": {
      "args": [
        "-y",
        "nestbolt-web"
      ],
      "command": "npx"
    }
  }
}

Documentation

View on GitHub

From the project's GitHub README.

Nestbolt

8.5% less material at the median than the best of Deepnest, SVGnest and Sparrow at equal 60-second budgets, and 9.6% at 300 seconds, in the final benchmark run (fresh seeds, ten held-out jobs). Sparrow still wins 8 of the 56 jobs at 60 seconds (details, every number).

Free, open-source nesting for people who cut fixed sheets: laser cutters, CNC routers, plasma, waterjet, fabric and leather. Nestbolt arranges parts so they use the least material. It runs in your browser (nothing is uploaded), on the command line, and as an MCP server that AI agents can call.

451 letter outlines nested on one sheet, small letters inside the holes of large ones

451 parts on one 850 × 425 mm sheet in 120 seconds on one CPU core: DejaVu Sans Bold glyphs in four sizes with their exact Bézier outlines, 90° rotations and 1 mm spacing. 29 letters sit inside the holes of others, and the unused material stays as one clean offcut along the top. The layout passed the independent validator. Rebuild it with python scripts/make_showcase.py --nest 120.

How it compares

Final acceptance run (2026-10-13): 75 frozen sheet jobs (35 academic, 40 maker, ten of them held out from all tuning), equal time budgets, one CPU core per tool, five fresh seeds each, every layout checked by an independent validator. The comparison is against the best of Deepnest, SVGnest and Sparrow on each job, each with the better of its two settings.

BudgetValid Nestbolt layoutsLess material than the best competitor (median)Wins or ties
60 s375/3758.5%48 of 56
300 s (long subset)60/609.6%11 of 11

At 60 s Nestbolt uses less material than Deepnest on all 55 jobs where Deepnest produced a layout (median 9.9%) and than SVGnest on all 36 (14.4%). Sparrow, which Nestbolt builds on, wins 8 jobs. Seven are one-sheet jobs that Nestbolt hands to Sparrow itself after its own first layout, so Sparrow runs with slightly less time there; it is 0.03-2.4% better on them. The eighth (two sheets) is 0.34% better. That misses the project's own 60-second bar (wins or ties on 90% of jobs and never more than 1% worse); the 300-second, strip-parity and speed bars are met (status).

A benchmark job as nested: frames with inserts in their windows, gears and brackets, compressed to one end of the sheet

One benchmark job exactly as nested in a 60-second development run (m-mechanical-frame-inserts, seed 0, sheet turned to landscape): 138 parts, all 39 inserts placed inside frame windows, everything packed into 56% of a 2440 × 1220 mm sheet so the rest stays one offcut. The best competitor used 62% of the sheet on this job.

In 30 s Nestbolt matches the competitors' 300 s result on 10 of 11 jobs. The first final run (build 484ce8b) stopped with an error on one job; the fix is in 75cbb32 and both runs are published. Every run, including failures, is in BENCHMARKS.md; status lists the evidence per gate. The results page shows every per-job number, tool revision, seed and the hardware; python scripts/reproduce.py --phase final --final-acceptance rebuilds the datasets, reruns what is missing and regenerates it.

What works today

  • Import SVG and DXF: lines, arcs, ellipses, Béziers, B-splines, blocks, transforms and units, converted to millimetres. Each closed outline is a part; outlines inside it are its holes. Real maker files work: all 192 boxes.py example drawings import and nest, including their relief loops at slot corners.
  • Nest on fixed sheets: margins, part and edge spacing, several sheets, several stock sizes with limits, defects, remnant outlines, rotations (free, stepped or a list such as 0/180 for fabric grain) and mirroring. Small parts can sit inside the holes of larger parts. The last sheet is compressed towards one end so the offcut stays usable.
  • Export one SVG and one DXF per sheet from the original curves, transformed rather than re-polygonised: on 196 real drawings every exported contour is within 0.0005 mm of its source. LightBurn, Inkscape and LibreCAD open them at the exact size.
  • Check every result with an independent Clipper2 validator (overlap, spacing, containment, rotations, quantities). Invalid layouts are never returned.
  • Browser app (web/): the same engine compiled to WebAssembly in Web Workers, several seeds in parallel, a live view of the best layout, projects saved in the browser or as a ZIP, and five one-click examples. Files never leave the computer. On the 65 development jobs, one browser worker matches the native build within 0.1% at the median (Chrome and Firefox, 60 s).
  • MCP server with import_parts, nest, validate_layout, export_layout and estimate_sheets, tested with Claude Code. Its budgets are repeatable: same inputs, budget and seed, same layout. See the agent interface.

The engine builds on jagua-rs and sparrow by Jeroen Gardeyn and collaborators (arXiv 2509.13329). Fixed-sheet search lays the last sheets end to end as one walled strip and shrinks the last sheet with a port of Sparrow's separator; parts move between sheets and an emptied sheet disappears. Near-rectangular parts such as box panels also get a bounding- rectangle packing start. One sheet of hole-free parts without defects is exactly Sparrow's own strip-packing problem, where it is the state of the art, so there Nestbolt runs unmodified Sparrow for the rest of the budget.

Quick start

Install Rust through rustup (the repository selects Rust 1.98.1) and build:

cargo build --release -p nestbolt-cli -p nestbolt-mcp

Import parts, nest them for 30 seconds, and get per-sheet SVG/DXF files (examples/box-99x63x45.svg is the browser app's example box):

target/release/nestbolt import examples/parts.svg --output library.json
target/release/nestbolt nest --library library.json --request examples/nest-request.json --out-dir run --seconds 30

For drawings with larger gaps, import --close-gaps 0.05 explicitly repairs up to 0.05 mm and reports every repair's position and size. It is off by default; the silent join limit remains 0.005 mm. The UI and MCP expose the same option. See import options and reports.

A request names library parts with quantities and the sheets in millimetres:

{
  "parts": [{"id": "parts-1", "quantity": 4}, {"id": "parts-2", "quantity": 12, "rotations": {"kind": "free"}}],
  "sheets": [{"width_mm": 600, "height_mm": 400, "margins_mm": {"left": 5, "right": 5, "bottom": 5, "top": 5}}],
  "spacing_mm": 1.0,
  "edge_spacing_mm": 1.0
}

run/ then holds layout.json, report.json and sheet-0.svg/sheet-0.dxf and so on. Existing files are never overwritten. nestbolt export re-exports a layout; nestbolt validate checks a polygon job and layout. Add --repeatable to nestbolt nest or nestbolt sheets for a deterministic work budget instead of wall-clock time: the same inputs, budget and seed then give the same layout. On a machine much slower than the reference PC, --time-limit <seconds> allows more real time for the same work (the default is --seconds). File formats are described by the JSON Schemas.

Browser app

Open it and pick an example (finger-jointed boxes, letters inside letters, a 138-part mechanical kit, a FreeSewing T-shirt pattern on a fabric roll, interlocking gears), or drop your own SVG and DXF files. The best layout so far is drawn while the search runs, and each sheet shows the box around its parts and the clear offcut left above them.

The mechanical-kit example in the browser app: 138 parts on one plywood sheet in 30 seconds, inserts inside the frames, the clear offcut shaded above the dashed box around the parts

To build it locally you need the wasm32-unknown-unknown target, wasm-bindgen-cli 0.2.129 and Node.js 24; then open the printed address:

cd web && npm ci && cd ..
python scripts/build_web.py
npm --prefix web run preview

python scripts/build_web.py --test also runs the Playwright tests in Chromium and Firefox.

Use from agents

Register the MCP server with an absolute path, for example in Claude Code:

claude mcp add --transport stdio --scope local nestbolt -- /path/to/target/release/nestbolt-mcp

The server reads and writes only inside its working directory (or NESTBOLT_WORKSPACE). docs/AGENT_INTERFACE.md covers Claude Code, Codex and Claude Desktop, the request format and the rules.

Development

python scripts/check.py
python scripts/sheets_batch.py --cpu 0 --cpu 2 --seconds 60

The first runs format, lint, all Rust and Python tests, WebAssembly builds, notice and dataset checks; add --web for the browser build and tests. The second runs the development benchmark (held-out jobs excluded) and writes an audited report under benchmarks/results/.

PathPurpose
crates/coreGeometry import/export, sheet search, separator, part-in-part
crates/cliCommand-line interface
crates/mcpNative stdio MCP server
crates/validatorIndependent Clipper2 checker and material scoring
crates/wasmWebAssembly boundary for the browser app
webBrowser app (Preact, Vite) and its Playwright tests
benchmarksFrozen datasets, competitor runners and all results
docs/PLAN.mdThe full plan and its acceptance gates
docs/STATUS.mdMilestone evidence and next steps

Every benchmark run, including failures, is logged in BENCHMARKS.md.

Progress and licence

Progress counts finished milestones only; see docs/STATUS.md. Nestbolt is MIT. jagua-rs is an unmodified MPL-2.0 dependency; the separator in crates/core/src/separate.rs is adapted from Sparrow (MIT). THIRD_PARTY_NOTICES records every dependency and licence.

Reviews

No reviews yet

Be the first to review this server!