Benchmark · 2026-10-24

Text to CAD, scored on 86 prompts

Every prompt below is a sentence someone could type — “model a 120x120x4mm VESA adapter plate…”, “model a 2mm mild-steel L-bracket…”. 86 of them, across 25 sectors, each paired with the tool calls a good agent would make and an acceptance block the finished solid has to satisfy: watertight, a volume band, a bounding box, a face-type census and a DFM verdict.

94.2%accepted (81/86)
98.8%built a solid
3.8mean tool calls / part
5637 msmedian time / part
25sectors
What is being measured. This is the replay run: the recipe is executed against the real MCP tool surface with no model in the loop, so it scores the kernel and the knowledge — “given the right plan, does the geometry come out right?”. A miss here is ours, never a model's. The live agent run, which asks a real model to write the plan, is a separate runner.

Pass rate by sector

SectorPromptsAccepted RateMean calls
aerospace43
75.0%2.75
appliances33
100.0%7.33
automotive33
100.0%4.67
bikes33
100.0%3.33
consumer32
66.7%7.33
desk-everyday44
100.0%3.25
desktop-robots33
100.0%5.67
electronics44
100.0%6
furniture44
100.0%3
garden-outdoor33
100.0%3.67
hardware22
100.0%2
jewellery-wearables44
100.0%1.5
kitchen-tableware33
100.0%3.67
maker-enclosures44
100.0%6.5
marine33
100.0%4
medical42
50.0%3.5
mounts-brackets66
100.0%3.83
peripherals43
75.0%4
piping44
100.0%3.5
power-transmission33
100.0%1
robotics44
100.0%3
sheet-metal44
100.0%1
tooling33
100.0%3.67
toys-games44
100.0%3.75
vehicles00
0.0%0

Refusal codes hit

Which coded refusals real prompts run into, and the tool that emitted each. A coded refusal with a hint is a good outcome for the server and a bad one for the part: the prompt did not produce geometry.

CodePromptsToolsWhere
E_LIMIT1cad_fillet_edgesaerospace-lightened-aluminium-bracket

Acceptance checks that failed

For parts that DID build: which half of the acceptance block they missed.

CheckPromptsWhere
dfm4consumer-remote-control-shell, medical-handheld-device-shell, medical-sbs-microplate-nest, peripherals-mouse-shell

Design loops

Real redesign requests, one turn at a time: "keep it under 115 g", "clear the injection-moulding gate", "open the bore until it clears the fit". Each loop is scored on the part it ends with, against the same acceptance blocks as the single-shot bank.

3/4loops met every target
3mean iterations to pass
1refusals during redesign
Loop promptLoopUser turnsReplayIterations to passRefusals during redesignLiveTurns to passLive refusals
peripherals-mouse-shell-mass-loopmass_target3 pass30 not runnot runnot run
consumer-clamshell-moldability-loopmoldability2 miss—1 not runnot runnot run
mechanical-shaft-bore-fit-loopfit_target2 pass30 not runnot runnot run
machining-tray-floor-wall-loopdfm_wall2 pass30 not runnot runnot run

Live agent run

Not included in this build. node benchmarks/text-to-nativecad/run_live.js with ANTHROPIC_API_KEY set scores a real agent against the same acceptance blocks and this section fills in.

A/B matrix

Not included in this build. node benchmarks/text-to-nativecad/ab/run_ab.js --config <ab/configs/a1-refusal-recovery.json> --out out/ab/a1 followed by node benchmarks/text-to-nativecad/score.js --ab out/ab/a1/ab-a1-refusal-recovery.json inlines a cell here once it has run.

Every prompt

Prompt idSectorResultCallsmsMiss
aerospace-lightened-aluminium-bracketaerospaceE_LIMIT 55325build: refused at step 4 (cad_fillet_edges)
aerospace-lightening-hole-webaerospacepass 13759
aerospace-payload-rail-tapaerospacepass 212675
aerospace-quad-arm-motor-mountaerospacepass 34491
appliances-control-knob-dshaftappliancespass 852821
appliances-lampshade-e27-collarappliancespass 423772
appliances-led-heatsink-puckappliancespass 1016396
automotive-alternator-bracketautomotivepass 632820
automotive-heat-shield-sheet-metalautomotivepass 333290
automotive-trim-clip-bossautomotivepass 54066
bikes-bottle-cage-mount-blockbikespass 21593
bikes-seatpost-clamp-collarbikespass 535992
bikes-thru-axle-dropout-platebikespass 34320
consumer-battery-doorconsumerpass 51742
consumer-clamshell-baseconsumerpass 62465
consumer-remote-control-shellconsumermiss 1110740dfm: fail
desk-everyday-coasterdesk-everydaypass 519945
desk-everyday-pen-holderdesk-everydaypass 217055
desk-everyday-phone-standdesk-everydaypass 53734
desk-everyday-riser-angled-slotdesk-everydaypass 11050
desktop-robots-round-robot-head-eye-cutoutdesktop-robotspass 672848
desktop-robots-servo-bracket-sts3215desktop-robotspass 517206
desktop-robots-two-wheel-rover-chassisdesktop-robotspass 634867
electronics-din-rail-clip-profileelectronicspass 19240
electronics-finned-heatsinkelectronicspass 48065
electronics-pcb-standoff-railelectronicspass 15323
electronics-raspberry-pi-4-enclosure-baseelectronicspass 1838250
furniture-desk-top-leg-framefurniturepass 616493
furniture-shelf-32mm-systemfurniturepass 252136
furniture-shelf-cable-slotfurniturepass 119040
furniture-task-chair-seat-panfurniturepass 37478
garden-outdoor-birdhouse-boxgarden-outdoorpass 55422
garden-outdoor-post-cap-4x4garden-outdoorpass 34794
garden-outdoor-tapered-nursery-plantergarden-outdoorpass 39090
hardware-m6-spacer-platehardwarepass 13894
hardware-shaft-bore-running-fithardwarepass 33699
jewellery-wearables-pendant-tag-bailjewellery-wearablespass 333201
jewellery-wearables-plain-band-ringjewellery-wearablespass 12970
jewellery-wearables-round-wire-bandjewellery-wearablespass 1725
jewellery-wearables-watch-bezel-ringjewellery-wearablespass 1275
kitchen-tableware-coffee-mugkitchen-tablewarepass 993458
kitchen-tableware-cookie-cutterkitchen-tablewarepass 14029
kitchen-tableware-mixing-bowlkitchen-tablewarepass 1971
maker-enclosures-fan-grill-platemaker-enclosurespass 325763
maker-enclosures-lid-display-windowmaker-enclosurespass 17868
maker-enclosures-pi4-case-basemaker-enclosurespass 144398
maker-enclosures-pico-casemaker-enclosurespass 82747
marine-316-horn-cleatmarinepass 735259
marine-through-hull-flangemarinepass 321523
marine-transom-bracketmarinepass 24873
medical-handheld-device-shellmedicalmiss 32533dfm: fail
medical-manifold-disc-portsmedicalpass 11229
medical-sbs-microplate-nestmedicalmiss 89544dfm: fail
medical-tube-rack-gridmedicalpass 245924
mounts-brackets-gopro-3-finger-mountmounts-bracketspass 1014155
mounts-brackets-l-bracket-gussetmounts-bracketspass 56501
mounts-brackets-l-bracket-sheet-fold-scsmounts-bracketspass 12408
mounts-brackets-round-boss-tappedmounts-bracketspass 47188
mounts-brackets-slotted-adjust-platemounts-bracketspass 13005
mounts-brackets-vesa-100-adapter-platemounts-bracketspass 26486
peripherals-60-keyboard-plateperipheralspass 1031490
peripherals-cable-puckperipheralspass 12909
peripherals-controller-gripperipheralspass 2741
peripherals-mouse-shellperipheralsmiss 31110dfm: fail
piping-blind-flange-blankpipingpass 1831
piping-flange-nps2-class150pipingpass 558642
piping-manifold-block-4portpipingpass 423922
piping-oring-faceseal-groove-flangepipingpass 431956
power-transmission-rack-segment-module2power-transmissionpass 13858
power-transmission-sprocket-15t-25-chainpower-transmissionpass 1873
power-transmission-spur-gear-20t-module2power-transmissionpass 12663
robotics-bearing-housing-608roboticspass 425964
robotics-nema17-mount-plateroboticspass 36772
robotics-servo-horn-discroboticspass 11284
robotics-shaft-keyway-shoulder-circliproboticspass 42749
sheet-metal-1u-rack-earsheet-metalpass 1796
sheet-metal-folded-enclosure-basesheet-metalpass 12455
sheet-metal-switch-connector-panelsheet-metalpass 11225
sheet-metal-u-bracket-two-bendssheet-metalpass 11071
tooling-drill-jigtoolingpass 44477
tooling-fixture-plate-dowel-tap-gridtoolingpass 313176
tooling-soft-jawstoolingpass 435091
toys-games-brick-2x4toys-gamespass 107095
toys-games-chess-pawn-revolvetoys-gamespass 11231
toys-games-die-16mm-pipstoys-gamespass 35852
toys-games-fidget-spinner-bodytoys-gamespass 12873

How to reproduce it

The bank, the runners and this page's input are all in the repository:

node benchmarks/text-to-nativecad/run_replay.js --out benchmarks/text-to-nativecad/baseline.json
node benchmarks/text-to-nativecad/score.js

Prompt bank version 2026-10-08, Node v24.13.0. Recipes marked pack:… are copied from the manufacturing knowledge packs under data/dfm/packs; the rest are hand-authored, and every round feature in those uses the native circle/slot/rect profile primitives rather than a sampled polygon.

More demos

All demos →

Build your own part with NativeCAD

Free for education and makers with a registered key · $200 per seat per year · Kernel SDK for products.