Skip to main content

🔧 Atomic CAD, mesh, SDF, cadquery, neural & print tools for Strands agents — prompt-to-print pipeline

Project description

🔧 strands-cad

PyPI version Python 3.10+ License: MIT

Atomic CAD, mesh, SDF, cadquery, neural & print tools for Strands agents.

Four independent paths to a printable 3D asset:

Path Tool Best For
Parametric SCAD scad_render_stl Mechanical, brackets, parametric families
B-rep CAD (NURBS) cq_render_stl / cq_render_step Fillets, chamfers, engineering-grade parts
SDF / implicit math sdf_render_stl Organic, twisted, TPMS, blended surfaces
Neural (text/image → 3D) neural_text_to_stl AI generation from prompt or reference photo

All roads lead to STL → 3MF → Bambu Lab.

Install

pip install strands-cad

Core includes: trimesh, cadquery, torch, scipy, scikit-image, mujoco, paho-mqtt, fast-simplification, meshio, numpy.

Optional git-only extras

PyPI disallows direct git URLs, so two libraries install separately:

python -m strands_cad.install_extras            # both
# OR selective:
python -m strands_cad.install_extras sdf        # fogleman/sdf → sdf_render_stl
python -m strands_cad.install_extras neural     # openai/shap-e → neural_text_to_stl

External system tools

  • openscad for scad_* tools — brew install openscad
  • bambu-studio for slice_bambu — download from bambulab.com

The 51 Atomic Tools

Layer Tools
SCAD (parametric) scad_probe, scad_render_stl, scad_render_png, scad_validate
CadQuery (B-rep, NURBS) cq_render_stl, cq_render_step, cq_import_step, cq_render_svg
SDF (implicit math) sdf_render_stl, sdf_list_primitives, sdf_gyroid_infill, sdf_from_function, sdf_lattice_infill_stl
Neural (AI generation) neural_text_to_stl, neural_image_to_stl
Point Cloud pointcloud_from_stl, pointcloud_to_stl, pointcloud_downsample
STL / Mesh stl_parse, stl_volume, stl_bbox, stl_weight, stl_repair, stl_transform, stl_convert, mesh_decimate, mesh_normalize, mesh_boolean, mesh_combine, mesh_hollow
3MF mf3_pack, mf3_unpack, mf3_read_metadata
Slice slice_bambu, slice_profile_get, slice_estimate
Bambu Printer bambu_connect, bambu_send, bambu_status, bambu_control, bambu_camera, bambu_ams
Sim sim_build_mjcf, sim_run_headless, sim_view_live, sim_inertia_from_stl
Preview preview_serve, preview_stop
Meta bom_parse, bom_total, journal_append

MCP Server (Claude Code, Claude Desktop, Cursor, Kiro)

All 51 tools are exposable over the Model Context Protocol via the strands-cad-mcp entrypoint (built on strands-mcp-server).

Claude Code

claude mcp add strands-cad -- strands-cad-mcp
# or skip heavy groups for faster startup:
claude mcp add strands-cad -- strands-cad-mcp --skip neural,sim

Claude Desktop

{
  "mcpServers": {
    "strands-cad": {
      "command": "strands-cad-mcp",
      "args": ["--skip", "neural"]
    }
  }
}

HTTP mode (multi-client / remote)

strands-cad-mcp --http --port 8000            # → http://localhost:8000/mcp
strands-cad-mcp --http --port 8000 --stateless  # multi-node scalable

Options

Flag Effect
(default) stdio transport, all available tool groups
--http --port N StreamableHTTP transport instead of stdio
--stateless Fresh transport per request (horizontal scaling)
--tools a,b,c Expose only named tools
--skip neural,sim,... Skip tool groups (scad,stl,mf3,slice,bambu,sim,preview,meta,sdf,cadquery,neural)
--agent-invocation Also expose invoke_agent for full conversations
--debug Verbose logging (stderr)

Missing optional deps (torch, mujoco, cadquery, sdf) auto-disable their group — the server always boots with whatever is installed.

Quick Examples

Parametric CAD (CadQuery)

from strands_cad import cq_render_stl

cq_render_stl(script='''
result = (
    cq.Workplane("XY").box(60, 40, 5)
    .edges().fillet(2)
    .faces(">Z").hole(20)
)
''', output_stl="bracket.stl")

Implicit Math (SDF)

from strands_cad import sdf_render_stl

sdf_render_stl(
    expression="torus(30, 8).twist(radians(180)/60)",
    output_stl="twisted_torus.stl",
    resolution=0.4,
)

AI Text → 3D (Shap-E)

from strands_cad import neural_text_to_stl

neural_text_to_stl(
    prompt="a stylized rocket ship",
    output_stl="rocket.stl",
    steps=64,
)

Full agent

from strands import Agent
from strands_cad import ALL_TOOLS

agent = Agent(tools=ALL_TOOLS)
agent("Generate a mechanical bracket with M4 mounting holes, "
      "verify weight in PLA, and pack it for my Bambu P1S.")

Design Principles

  • Atomic — one tool = one verb = one input shape = one output shape
  • No orchestration inside tools; the agent composes
  • No hidden state except the Bambu MQTT connection handle
  • Standard response: {status, content: [{text}], ...extras}

License

MIT

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

strands_cad-0.3.1.tar.gz (44.6 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

strands_cad-0.3.1-py3-none-any.whl (54.3 kB view details)

Uploaded Python 3

File details

Details for the file strands_cad-0.3.1.tar.gz.

File metadata

  • Download URL: strands_cad-0.3.1.tar.gz
  • Upload date:
  • Size: 44.6 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.2.0 CPython/3.14.5

File hashes

Hashes for strands_cad-0.3.1.tar.gz
Algorithm Hash digest
SHA256 f6c18a3cf91628e7470af627dc6c7634404e8494d7e65b21444de0af3925a769
MD5 db4f1d5629b4a3f59bfc0e406d4fc708
BLAKE2b-256 c196b644c3416fafee1f53e3725fc5a940baf8e350871b0a570bb76898c4c945

See more details on using hashes here.

File details

Details for the file strands_cad-0.3.1-py3-none-any.whl.

File metadata

  • Download URL: strands_cad-0.3.1-py3-none-any.whl
  • Upload date:
  • Size: 54.3 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.2.0 CPython/3.14.5

File hashes

Hashes for strands_cad-0.3.1-py3-none-any.whl
Algorithm Hash digest
SHA256 5fdd0dd86aa2b57d9133cd3b0be274e64fca4029512937926d2a3b7d8ffe6f5d
MD5 d4db526ce65fa469be1f074a416bfeaa
BLAKE2b-256 5cfcb2802726eab11316d417402b2ea587cadb2c3d60cd419184fad25a2a9ce5

See more details on using hashes here.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page