Agentic hardware-design landscape (verified 2026-10-24)
Refreshed 2026-10-31 (issue #96): agent toolkits since 10-24 (text-to-cad 0.8 break, OrcaSlicer 2.5's Design tab, build123d sheet metal, snap-fit skills), compliant mechanisms (snap fits, flexures, allowable strains, FDM anisotropy from datasheets) and FEA and process tools (large-deflection contact solvers, orientation optimisers, sheet metal, 37 candidate deterministic checks).
Scope: public tools that let frontier-model agents (Claude Code first; Codex, Cursor, Gemini) design 3D-printed,
sheet-metal, laser-cut, CNC and molded parts, enclosures around real PCBs, and KiCad boards.
Method: stars, SPDX licence and last push come from gh api repos/OWNER/REPO on this date; capabilities come from each
repo's README, manifests or source as read. (u) = unverified (README claim or third-party page not checked in source).
Machine-readable copy: landscape.json.
1. Capability matrix
Drawn from the matrix below by tools/research_figures.py. Stars measure attention, not fitness: the matrix decides.
Clients: CC = Claude Code plugin/skill, MCP = MCP server, Cx = Codex, Cu = Cursor, Ge = Gemini, App = standalone app.
Table 26 rows: Project, Licence, Stars, Push, …
| Project | Licence | Stars | Push | Clients | Kernel / tool | Processes | DFM rules cited | Materials / cost | Render loop | Drawings | Vendor / slicer | Evals |
|---|---|---|---|---|---|---|---|---|---|---|---|---|
| earthtojake/text-to-cad | MIT | 22,951 | 10-25 | CC, Cx, Cu, Ge, Grok, MCP, skills.sh | build123d 0.11 / OCP 7.9 | FDM, SLA, SLS, MJF, metal PBF (mesh); sheet, CNC, molding (review); laser (DXF); URDF/SDF | Yes: Hubs, Protolabs, ISO/ASTM 52910 | No (SendCutSend specs fetched live) | Yes (headless snapshots + viewer) | Yes, PDF | OrcaSlicer, Bambu Connect/Studio, SendCutSend, step.parts | None in repo |
| amagine-ai/Amagine3D | Apache-2.0 | 6,259 | 10-22 | App (OpenAI-compatible key, Codex SDK) | build123d, OCP, Manifold | FDM enclosures, multi-part | (u) | (u) | Yes (5-view) | (u) | none seen | none |
| Adam-CAD/CADAM | GPL-3.0 | 5,328 | 10-15 | App (web) | OpenSCAD | general | No | No | Yes | No | none | Showcase prompts only |
| KittyCAD/modeling-app + KittyCAD/mcp | MIT / MIT | 1,321 / 10 | 10-25 | App; MCP (needs ZOO_API_TOKEN) |
KCL on Zoo's closed cloud engine | general | (u) | (u) | Yes | (u) | none | none |
| Pan-Chera/Multi-Agent-CAD (MAC) | MIT | 1,048 | 10-17 | App + web UI | build123d | FDM parts, assemblies, URDF | No | No | Yes + judge agent | No | none | Own 10-prompt / 141-feature set |
| OzAILabs/Claude-To-Print | MIT | 4 | 08-15 | CC skills (from MAC) | build123d | FDM, multicolour 3MF | No | No | Yes | No | Bambu | none |
| jdilla1277/agentcad | Apache-2.0 | 173 | 10-23 | CLI, MCP, skill | build123d (CadQuery mode) | general | No | No | Yes, diffing | No | none | CADGenBench runs |
| pzfreo/build123d-mcp | Apache-2.0 | 130 | 10-15 | MCP | build123d | general | No | No | Yes | SVG/DXF export | none | CADGenBench (pipeline) |
| flowful-ai/cad-skill | PolyForm-Noncommercial-1.0.0 | 692 | 07-14 | CC skill | CadQuery | FDM | No | No | Yes | No | Prusa/Bambu mentions | none |
| Svetlana-DAO-LLC/cad-agent (was clawd-maf) | Custom "CAD Agent License" | 53 | 02-17 | MCP | build123d | FDM | No | No | Yes | No | none | none |
| MikeSuiter/claude-build123d-starter | MIT | 1 | 06-08 | CC template | build123d | FDM, CNC, laser (u) | No | No | Live preview | No | none | none |
| neka-nat/freecad-mcp | MIT | 3,040 | 10-25 | MCP | FreeCAD (LGPL, external) | general, FEM (u) | No | No | Screenshots | (u) | none | none |
| jhacksman/OpenSCAD-MCP-Server | MIT | 208 | 09-07 | MCP | OpenSCAD | FDM | No | No | Preview images | No | none | none |
| altendky/onshape-mcp | Apache-2.0 | 20 | 10-24 | MCP | Onshape (closed SaaS) | general | No | No | (u) | (u) | none | none |
| faust-machines/fusion360-mcp-server | MIT | 131 | 10-06 | MCP (CC, Cu, Cx docs) | Fusion (closed) | general | No | No | (u) | (u) | none | none |
| ahujasid/mcp-for-blender | MIT | 32,261 | 10-24 | MCP, Cx plugin | Blender (mesh, not B-rep) | visual only | No | No | Yes | No | Poly Haven, Sketchfab, paid generators | none |
| mixelpixx/KiCAD-MCP-Server | MIT | 2,933 | 10-26 | MCP | KiCad 9+ (kicad-python + SWIG pcbnew) |
PCB | KiCad DRC | JLCPCB parts + prices | Snapshots | No | JLCPCB, DigiKey, Freerouting | none |
| mixelpixx/Konnect (archived 2026-10-26, unarchived again by 2026-11-01; obhox/kicad-mcp is a fork) | AGPL-3.0 | 1,399 | 10-26 | KiCad plugin + MCP, CC skills | KiCad 10 IPC (Rust) | PCB | design-review audits (u) | (u) | (u) | No | Freerouting | none |
| oaslananka/kicad-mcp-pro | MIT | 149 | 10-25 | MCP, CC plugin skills, Cx/VS Code config | KiCad 10.0.x (kicad-cli/IPC; no SWIG) | PCB | 8 fab profiles with source URLs | Fab pricing coefficients | 3D render PNG | No | JLCPCB; Nexar/DigiKey/Mouser with keys | evals/, benchmarks/ dirs |
| Seeed-Studio/kicad-mcp-server | No LICENSE file (MIT only in pyproject) | 168 | 10-22 | MCP | KiCad 8-10 (pcbnew) |
PCB analysis, device tree | KiCad ERC/DRC | PartReel registry | No | No | PartReel | none |
| lamaalrajih/kicad-mcp | MIT | 529 | 2025-10-17 | MCP | KiCad 9 | PCB | DRC | BOM | (u) | No | none | none; stale |
| aklofas/kicad-happy | MIT | 1,499 | 10-25 | CC plugin, Cx, Copilot, Gemini/Antigravity, GitHub Action | KiCad file parsing, SPICE | PCB review, EMC, Gerber | EMC rules ref | BOM, distributors | No | No | JLCPCB, PCBWay, DigiKey, Mouser, LCSC, element14 | none |
| BackplaneWorks/kistack (moved from American-Embedded) | MIT text (GitHub: NOASSERTION) | 411 | 10-24 | skills.sh | KiCad | schematic, layout, Gerber review | prose | No | No | No | none | none |
| BackplaneWorks/Backplane (moved from i2cjak) | MIT (ships a KiCad fork) | 731 | 10-25 | App; multi-harness agents | KiCad fork + FreeCAD viewers | PCB + case | No | No | Yes | No | none | none |
| copperheadhq/copperhead | Apache-2.0 | 627 | 10-24 | CLI, agent-install prompt | KiCad s-expr + kicad-cli | PCB | ERC/DRC | parts (u) | (u) | No | none | none |
| punkfab/circuit-skills | No licence | 10 | 10-06 | CC skills, Cx plugin | kipy, build123d, ngspice | PCB + pcb-enclosure-fit |
No | No | Blender renders | No | Freerouting | PCBWorld harness |
Building blocks: gumyr/build123d (Apache-2.0, 3,519), CadQuery (Apache-2.0 in LICENSE file; GitHub shows NOASSERTION, 5,990), gumyr/bd_warehouse (Apache-2.0, ISO fasteners and threads), partcad/partcad (Apache-2.0, 509), sargo-devel/Cables (LGPL-3.0 FreeCAD cable-routing workbench), wireviz/WireViz (GPL-3.0, 2D harness documents). rjwalters/kicad-tools (MIT) keeps a long, licence-annotated survey of KiCad and agent tools in its README.
2. Deep dive: earthtojake/text-to-cad (v0.7.26, 2026-10-20)
What it is. A plugin monorepo. skills/ holds the product. packages/cadgen is the PyPI runtime, MIT, with
build123d, OCP, a build daemon, STEP/GLB/3MF/DXF output, a viewer backend and an MCP server. apps/ holds the
viewer, the MCP app, the docs site and api.texttocad.dev. It is mostly one maintainer: earthtojake has 1,136
commits, then bots and a few contributors.
Skills (each is MIT and carries its own LICENSE):
| Skill | What it does | Code it runs |
|---|---|---|
| cad | build123d models with @step/@stl/@threemf/@glb decorators; read_step/read_scene; face/edge refs; snapshots; viewer |
cadgen via pinned uvx |
| step-parts | Search and download catalog STEP files (screws, bearings, standoffs, boards), with sha256 check | download_step_part.py → api.step.parts |
| engineering-drawing | Third-angle views, hidden lines, measured dimensions, hole callouts, ISO title block → PDF | cadgen.eng_drawing |
| dxf | 2D profiles, flat pattern of already flat plates, kerf offset | cadgen.flatten |
| dfam-check | Mesh wall thickness (ray-cast), overhang, support volume, 6 axis orientations; limits table per FDM/SLS/SLA/PBF/MJF | dfam_tool.py (trimesh) |
| dfm | Guided sheet/CNC/molding review with a cited rule per finding; only molding is measured (draft, undercuts, projected area) | mold_tool.py |
| sendcutsend | Preflight of DXF/STEP against SendCutSend's live catalog and specs JSON | fetches cdn.sendcutsend.com |
| gcode | Writes complete OrcaSlicer presets and slices headless | orca_presets.py (stdlib) |
| bambu-labs | Hands off to Bambu Connect (bambu-connect:// link) or Bambu Studio; never controls the printer |
none |
| urdf / srdf / sdf | Robot and simulator descriptions, with validation | cadgen |
How upstream installs it: from the Claude Code plugin marketplace, tracking the repository's latest branch,
which holds only the plugin (one commit per release) and moves with every release. We do not install it that way:
cad-agent vendors a pinned, scanned commit in vendor/text-to-cad (vendor/manifest.json), and agents never install
skills or plugins from registries.
Security review.
.claude-plugin/plugin.jsondeclares onlyskillsandmcpServers. It has no hooks, commands or agents..githooks/pre-commitis for development only.- Claude Code starts the MCP server with
uvx --no-config --managed-python --python 3.13 --from cadgen==0.7.26 cadgen mcp. The first start downloads a managed CPython and cadgen. cadgen is pinned exactly, but its dependencies are ranges with no hash lock: build123d <0.12, cadquery-ocp-novtk 7.9, ezdxf, matplotlib, pillow, shapely, playwright==1.64.0. The wheel bundles Node/browser JS and a native file tracer (filetrace.c). The first snapshot downloads a Playwright browser. - Telemetry is on by default. It sends counts, a random install ID, the OS and agent app, and crash types to
api.texttocad.dev, which stores them in PostHog; the server derives country from IP. The README says names, paths, contents and prompts are never sent; I did not audit the payload code line by line. Turn it off withuvx --from cadgen==0.7.26 cadgen telemetry off(the version the MCP server pins),DO_NOT_TRACK=1orCADGEN_TELEMETRY=0. - Daily update check to
api.texttocad.dev/v1/versions. Turn it off withCADGEN_UPDATE_CHECK=0. - The viewer binds 127.0.0.1 with no authentication (per its SECURITY.md). Any local process can read files under the opened folder and trigger builds.
- The dfam-check and dfm skills
pip installunpinnedrequirements.txtfiles into the active project environment. - Model scripts are arbitrary Python run by the daemon, which is normal for code-CAD.
Coverage of our J501 workflow:
| J501 capability | text-to-cad today |
|---|---|
| Vendor STEP ingestion | Yes (read_step, read_scene, refs). Viewer fails on large PCB STEP: open #626, "exceeds viewer memory envelope" |
| Clearance vs 5000+ carrier solids | Primitives only: cadgen.geometry.closest_points and overlap_volume. The interference module was retired; the caller writes pair selection. No broad-phase or report |
| Schematic ingestion | No. PCB support is open PR #518 (KiCad 11 nightly, vendored kipy) |
| Enclosure around a real board | Generic examples only (electronics_enclosure_base.py) |
| Connector windows from board STEP | No |
| Standoffs / fastener stack length | Catalog parts via step-parts. Stack-length checks exist only as model-specific scripts in models/tendon_hand, not as a skill |
| Cable routing, bend radius | No |
| Renders | Yes |
| PDF check sheet | Drawings yes; no check-sheet or evidence PDF |
| Review / evidence site, STL/3MF/Bambu links | Local unauthenticated viewer; 3MF export and Bambu handoff yes; no publishable evidence page |
| DfAM | Walls and overhangs measured; hole size, min feature and bridge are "not checked" (per process-limits.md) |
| Sheet-metal unfold | No; proposal #614 |
Kernel note: text-to-cad uses build123d. Our J501 code is CadQuery. Both use OCP, so shapes interoperate through .wrapped.
What it does not compute (checked 2026-10-31 in the vendored copy, vendor/text-to-cad at v0.7.26: its packages/,
skills/ and apps/ code). No stress, fatigue, FEA or safety-factor code: no file mentions von Mises, fatigue, stress
or a safety factor. Bearings and bolts appear only as catalogue parts to download (step-parts), and gears only as
kinematic couplings and URDF/SDF joints (cadgen.kinematics, sdf_validation), never sized. It is a modelling,
export and print-handoff engine; cad-agent's checks, simulation and calculations sit around models like its output.
3. KiCad MCP servers: install and security, then a recommendation
| kicad-mcp-pro | mixelpixx KiCAD-MCP-Server | Seeed kicad-mcp-server | kicad-happy (skills) | |
|---|---|---|---|---|
| Install | upstream runs it through uvx with no version: the shipped .mcp.json is unpinned, so each launch runs the latest PyPI release. Pin it: uvx [email protected] |
git clone; npm install runs prepare → npm run build; pip requirements |
pip install -e . into KiCad's Python |
CC marketplace plugin |
| KiCad | 10.0.x primary (10.0.7 verified), 8.x deprecated, 9 dropped, 11 preview; SWIG forbidden by test | 9.0+; mixes kicad-python IPC and SWIG pcbnew |
8-10, pcbnew |
file parsing |
| Tools | 387 public; default profile = 24 read-only; writes need a profile | 244 registered | analysis, ERC/DRC, device-tree code | review scripts |
| Network | JLCPCB public catalog by default; other distributors only with keys; telemetry off by default (opt-in OpenTelemetry) | JLCPCB, DigiKey; README advertises paid "Nimrod" service | PartReel downloads (host allowlist) | datasheets, distributors |
| Hygiene | CodeQL, OpenSSF Scorecard, gitleaks, SECURITY.md; one maintainer (1,029 commits), repo created 2026-05-31 | active; still maintained under MIT (Konnect, its successor, was archived 2026-10-26) | no LICENSE file | plugin.json declares no hooks |
| Deps of note | — | pymupdf (AGPL) at runtime | fastmcp | — |
Recommendation: use kicad-happy for review and kicad-mcp-pro for edits and exports. Both are MIT.
kicad-mcp-pro targets KiCad 10 with no SWIG, is read-only by default, ships cited fab profiles, and is the most
active. Pin its version (kicad-mcp-pro==4.4.0) and keep the default profile until edits are needed. Use mixelpixx
only if KiCad 9 is required. Treat Seeed as all-rights-reserved until it commits a LICENSE file. obhox/kicad-mcp is
AGPL: run it only as an external program.
(Updated 2026-10-31: Konnect was archived on 2026-10-26 and continues as a commercial, closed-source product, so it is no longer a candidate; KiCAD-MCP-Server is still maintained under MIT.)
4. Mechanical + PCB co-design (ECAD to MCAD)
- KiCad itself:
kicad-cli pcb export steptakes--board-only,--no-components,--component-filterand--no-dnp. There are alsobrep,glb,stl,xao,dxf(use Edge.Cuts for the outline) andipc2581. KiCad 10's CLI has no IDF export. The KiCad 9/10 IPC API needs the GUI and cannot plot or export; KiCad 11 adds headless operation (KiCad dev docs, CLI docs). kicad-python on PyPI is MIT, version 0.8.0, KiCad 9+. - text-to-cad: PR #518 (open) adds
@pcbboards-as-code with DRC on every build. #616 (pcb-dfmskill) merged into a feature branch stacked on #518. PR #345 (closed, not merged) was a KiCad 10 fixture in which a USB-C connector is blocked by an enclosure wall and then fixed by a source-level cutout. That is exactly our pattern. - punkfab/circuit-skills: a
pcb-enclosure-fitskill co-registers the board STEP with a build123d shell and gates placement on connectors, cutouts and holes. It has no licence, so ideas only. - Backplane: KiCad and FreeCAD viewers that show a case assembly beside the agent. MIT. Its installer is a script piped from the network straight into a shell, which runs whatever the server sends at that moment, unpinned and unchecked: a risk. Read the script first, or build from a pinned commit.
- Amagine3D: designs the enclosure around internal components from requirements. It does not read KiCad files.
- kicadStepUp (AGPL per its README): FreeCAD workbench that syncs board outlines and models both ways. External only.
- Gap: no project closes the loop from KiCad outline, connectors and holes, to enclosure, to clearance report, and back-annotation onto the board.
5. Knowledge sources
| Domain | Source | Licence / terms | Already embedded in |
|---|---|---|---|
| DfAM | ISO/ASTM 52910 / 52911-1 | paid standard: cite, don't copy | text-to-cad process-limits.md (MIT summary citing Hubs, Formlabs, HP MJF, EOS) |
| Sheet / laser | SendCutSend specs JSON + catalog: 178 materials, k-factor, bend radius, bend deduction, minimum hole and bridge (inches) | vendor data, no licence stated: fetch live and cite | text-to-cad sendcutsend |
| Sheet / CNC / molding | Hubs and Protolabs guides | copyrighted pages: cite | text-to-cad dfm references |
| PCB fab | JLCPCB, PCBWay, Eurocircuits, OSH Park, NextPCB capability pages | vendor terms | kicad-mcp-pro dfm_profiles/*.json (MIT, with source URLs and pricing coefficients); kicad-happy jlcpcb/pcbway skills |
| PCB design | IPC-2221/2222, IPC-7351 | paid: cite only | text-to-cad PR #518 skill cites IPC-2221 widths |
| Materials | FreeCAD .FCMat cards |
CC-BY-3.0 (some older cards LGPL) | FreeCAD |
| Polymers | OpenPoly | CC BY 4.0 (research data) | none |
| Fasteners | bd_warehouse | Apache-2.0 | none |
| Cost | kicad-mcp-pro dfm_calculate_manufacturing_cost (area, layers, vias); slicer time and grams from OrcaSlicer G-code |
MIT; OrcaSlicer AGPL (external) | kicad-mcp-pro |
No open, cited cost model for FDM, sheet metal or CNC turned up in any agent tool (gap). MatWeb has no bulk export; MakeItFrom's terms are (u).
6. Benchmarks and evals
| Benchmark | What it measures | Licence / access |
|---|---|---|
| CADGenBench (Hugging Face, 2026) | Drawing → STEP generation, plus STEP editing; validity gate, shape, interface and topology scores; 81 fixtures (per pzfreo submission); ground truth private | Apache-2.0 code; HF leaderboard. Best fit for measuring our agent |
| Text2CAD (NeurIPS'24) | Text → sequential CAD | CC BY-NC-SA 4.0 |
| CADPrompt / CADCodeVerify (ICLR'25) | 200 prompts → CadQuery; point-cloud distance, compile rate | repo has no licence |
| CAD-Recode (ICCV'25) | point cloud → CadQuery | CC BY-NC 4.0 |
| cadrille | multimodal reconstruction | Apache-2.0 |
| Text2CAD-Bench | 600 examples, 4 levels, novice and expert prompts | paper CC BY 4.0; data licence (u) |
| P3D-Bench (arXiv 2606.11152), CADBench (2605.10873), BenchCAD (2605.10865), RealCADBench (2609.03773), CAD Arena | various | (u) |
| PCBWorld (arXiv 2607.05915) | KiCad-grounded routing for agents and RL; 679 real boards; 8 engine-checked metrics | BSD-3-Clause |
| PCB-Bench (ICLR'26), OmniRouting (2608.04434) | LLM placement and routing | (u) |
No benchmark covers enclosure fit around a real board, DFM correctness or fastener/cable checks. Our J501 session could seed one: the vendor STEP is fetched by URL and hash, never committed.
7. Recommendation
Adopt now
- text-to-cad plugin pinned to a release, with
CADGEN_TELEMETRY=0,DO_NOT_TRACK=1andCADGEN_UPDATE_CHECK=0in the environment. It provides the CAD runtime, drawings, DfAM, slicing, Bambu and SendCutSend. - kicad-happy (review) plus kicad-mcp-pro pinned (edits and exports), and
kicad-cli pcb export stepfor the board model. - build123d-mcp or agentcad as an optional inspection loop; both are Apache-2.0 and have CADGenBench evidence.
- CADGenBench as the regression eval for generic CAD skill.
Thin add-on repo (cad-agent, MIT)
enclosure-around-boardskill: board STEP/KiCad → keep-outs, connector windows, standoffs.- Scalable vendor-assembly clearance report: bounding-box/BVH broad phase, then
closest_points. - Fastener stack length (bd_warehouse) and cable route with bend-radius check.
- Evidence site and PDF check sheet.
knowledge/with cited rules, materials and cost. Upstream does not cover any of these. Their contract favours caller-written checks, and their roadmap is PCB, FEA and CAM.
Contribute upstream to text-to-cad
- DfAM hole, min-feature and bridge measurement (documented as unmeasured).
- Help with sheet-metal unfold (#614).
- Large-PCB-STEP viewer memory fix (#626); our J501 carrier is a reproducer.
- A PCB-to-enclosure fit fixture and recipe once #518 lands (successor to #345).
- An
inspection-and-validation.mdrecipe for many-body clearance with a broad phase.
Licence constraints
- Incorporate code only from MIT, BSD or Apache-2.0 projects, with attribution: text-to-cad, build123d, CadQuery, bd_warehouse, agentcad, build123d-mcp, MAC, kicad-mcp-pro, kicad-happy, KiStack, kicad-python, PCBWorld, CADGenBench.
- Never copy code from: flowful-ai/cad-skill (PolyForm Noncommercial), Svetlana cad-agent (custom licence), circuit-skills and Seeed (no LICENSE file), or Text2CAD and CAD-Recode data (NC).
- External programs only: CADAM (GPL-3.0); Konnect (archived) and obhox/kicad-mcp (AGPL-3.0); kicadStepUp, OrcaSlicer and pymupdf (AGPL); FreeCAD and Cables (LGPL); WireViz and freerouting (GPL); KiCad (GPL).
- Vendor data (SendCutSend JSON, fab capability pages) is fetched and cited at run time, not redistributed.