Use the NexyFab design pipeline (text→2D→3D LOD→per-part edits) via HTTP API, MCP (Claude and other AI clients), and CLI. AI only interprets; geometry and verification (vocabulary, interference, support, structural gates) run on a deterministic engine. All outputs are non-statutory.
Create a key, view your keys, and revoke instantly below. The server stores only a sha256 hash + a short display prefix; the plaintext key is shown exactly once at creation — save it in a password manager or CI secret. If lost, issue a new key and revoke the old one.
Core endpoints (POST · JSON). Pass the returned assembly into the next call to chain edits; a REV history accumulates automatically.
| Endpoint | What it does |
|---|---|
| /api/nexyfab/drawing/assemble | Text → multi-part assembly (+LOD draft) |
| /api/nexyfab/drawing/compose | Text → single part |
| /api/nexyfab/drawing/edit-part | AI-edit one part only |
| /api/nexyfab/drawing/face-drag | Face push-pull / set dimension (deterministic) |
| /api/nexyfab/drawing/part-op | duplicate · delete · translate · fillet |
| /api/nexyfab/drawing/export-step | B-rep STEP export |
| /api/nexyfab/drawing/package | Deliverable package |
# Common: send the nf_live_ key as a Bearer token. Responses use {"ok":true, "assembly":{…}, …}.
KEY=nf_live_XXXX ; BASE=https://nexyfab.com/api/nexyfab/drawing
# 1) Create { description } -> { ok, assembly, openscad?, parts?, interferences?, gateErrors? }
curl -s "$BASE/assemble/" \
-H "Authorization: Bearer $KEY" -H "Content-Type: application/json" \
-d '{"description":"two cylindrical columns, diameter 200 and height 400, on a 1000x800x20 base plate"}' > r1.json
# 2) AI-edit one part { assembly, partId, instruction } -> { ok, assembly, patch, note, interferences, massKg }
curl -s "$BASE/edit-part/" \
-H "Authorization: Bearer $KEY" -H "Content-Type: application/json" \
-d "{\"assembly\": $(jq .assembly r1.json), \"partId\":\"column_1\", \"instruction\":\"set height to 600\"}"
# 3) Set face dimensions directly (deterministic · no AI) face: x±/y±/z± (box) · axis±/radial (revolved)
curl -s "$BASE/face-drag/" \
-H "Authorization: Bearer $KEY" -H "Content-Type: application/json" \
-d '{"assembly": {…}, "partId":"column_1", "face":"axis+", "targetMm":600}'
# 4) Batch part operations (deterministic) op: delete|duplicate|translate|fillet · partIds[] · opts
curl -s "$BASE/part-op/" \
-H "Authorization: Bearer $KEY" -H "Content-Type: application/json" \
-d '{"assembly": {…}, "op":"duplicate", "partIds":["column_1"], "opts":{"offset":[300,0,0]}}'
# 5) Deliverable document set { assembly, options? } -> { ok, files, structural, interferences, welds }
curl -s "$BASE/package/" \
-H "Authorization: Bearer $KEY" -H "Content-Type: application/json" \
-d '{"assembly": {…}, "options":{"title":"column assembly","withStep":true}}'The engineering-calc API (beams, welds, bolts, …) is separately gated and returns formulas/intermediate values; it uses the same Bearer key as the geometry API.
The zero-dependency single-file remote MCP server runs on Node 18+ and exposes exactly 15 tools in tools/list: design_assembly · compose_part · edit_part · face_drag · part_op · domain_design · analyze_fea · reconstruct_verify · reconstruct_fleet · code_check · verify_domain · interior_check · landscape_check · bridge_check · load_path. Some verification tools are keyless; generation/editing, FEA, and reverse-engineering tools require a Pro API key. The repository local MCP (scripts/drawing-to-3d/mcp-server.mjs) is a separate product surface exposing 92 tools, with a mix of local-only and remote-only operations; use each server's tools/list as the authority for names and schemas.
# 1) Download the MCP server
curl -sL https://nexyfab.com/downloads/nexyfab-mcp.mjs -o ~/nexyfab-mcp.mjs
# 2) Register with Claude Code (issue the API key in panel 0 above; absolute path required)
claude mcp add nexyfab -e NEXYFAB_API_KEY=nf_live_XXXX -- node /absolute/path/nexyfab-mcp.mjs
# 3) Verify registration
claude mcp list
# 4) Then ask Claude in natural language:
# "Build an assembly with two columns on a 1000x800 base using nexyfab, then set column_1 height to 600"⚠ The -e form is convenient but leaves the key in your shell history. On shared machines, clear the history after registering or rotate the key (revoke and re-issue instantly in panel 0 above). If registration fails, suspect the path first — ~ is not expanded in some environments.
For Claude Desktop, add the same under mcpServers in claude_desktop_config.json: {"command":"node","args":["/absolute/path/nexyfab-mcp.mjs"],"env":{"NEXYFAB_API_KEY":"nf_live_XXXX"}}.
Four new hard capabilities (parity with the web): analyze_fea (quick FEA — structural/linear-static only from scad+material+load; thermal/modal/thermo-elastic are NOT available through this tool) · reconstruct_verify (verified reverse-engineering — STL/STEP/DWG/SAT vs a reconstruction gate on bbox/genus/watertight) · reconstruct_fleet (AI reconstruction fleet — multi-model parametric SCAD, Pro + budget) · code_check (code-check/audit citing PASS/FAIL/NA against public statutes). The first three are REMOTE-only (need NEXYFAB_API_KEY — hosted OpenSCAD/gmsh/OCCT/LLM; explicit refusal without a key); code_check runs LOCALLY offline (pure deterministic ruleset). All non-statutory (engineering-grade screening / deterministic review aid — detailed analysis and statutory review remain a licensed professional duty).
Five discipline-verification chains (parity with the web · public routes — work without an API key): verify_domain (engineering calculators across 5 disciplines — section/span derived from geometry + user loads/materials, with cited clauses) · interior_check (egress travel BFS + occupancy + finishes) · landscape_check (timber members + wind overturning) · bridge_check (girder/arch/truss/cable-stayed/suspension/stair auto-dispatch) · load_path (slab->beam->column->footing). All deterministic — never fabricate loads (needInputs when missing). Non-statutory (a licensed engineer/architect remains responsible).
scripts/drawing-to-3d/cli.mjs offers the same tool surface on the command line (local engine when you have the repo). With NEXYFAB_API_KEY set, the 5 generation/edit tools call the hosted API (remote mode). Piped = pure JSON; TTY adds a summary line.
cd scripts/drawing-to-3d # local engine when the repository is available
export NEXYFAB_API_KEY=nf_live_XXXX # with a key, five create/edit commands use hosted API; unset = local
node cli.mjs assemble "two columns on a 1000x800x20 base plate" --out asm.json # text → assembly
node cli.mjs build asm.json # deterministic rebuild and gate summary
node cli.mjs edit-part asm.json column_1 "set height to 600" --out asm.json # AI part edit
node cli.mjs face-drag asm.json column_1 --face axis+ --target 600 --out asm.json # face dimension (deterministic)
node cli.mjs part-op asm.json --op duplicate --ids column_1 --offset 300,0,0 --out asm.json
node cli.mjs step asm.json --out model.step # B-rep STEP export
node cli.mjs preview asm.json --out ./png --views iso,side,top # headless render → PNG
node cli.mjs package asm.json --out ./docs --step # GA · parts · BOQ · spec · DXF · STEP
node cli.mjs domain civil "retaining wall H=3m length 200m" --out pkg.json # multi-domain (remote only — key required)
node cli.mjs templates bridge # list domain templates
node cli.mjs fea asm.json --load 500 --material steel # quick FEA (remote — hosted OpenSCAD/gmsh)
node cli.mjs reconstruct part.stl # verified reverse engineering (remote — reconstruction gate)
node cli.mjs fleet part.stl # AI reconstruction fleet (remote + Pro/budget)
node cli.mjs codecheck features.json # code-check/audit 41 rules (local/offline/keyless)
node cli.mjs interior asm.json # interior egress/finishes chain (local)
node cli.mjs landscape asm.json # landscape timber/wind-load (local)
node cli.mjs bridge asm.json # bridge review (meta auto-dispatch/local)
node cli.mjs loadpath asm.json # building load-path chain (local) | --list use table
node cli.mjs list # list all tools and commandsPiped output is pure JSON (machine-parseable); a TTY adds a pass/reject summary line (force pure with --raw). Extra commands (loft, constraints, dossier, domain) are documented in the cli.mjs header and list output.
AI-generation calls follow plan slots and daily cost budgets (deterministic face-drag/part-op consume no slots). When a gate rejects, we return 422 with the reason instead of silently altering geometry.