Parts
Parametric plugins
A plugin is a declarative recipe in a signed manifest — no plugin code ever runs. Start from the template, upload it for yourself, or install it for a whole organisation.
Product
ModelingAssemblies & motionDrawingsSimulationCAMMaterials & renderingAI agentsDevelopersModules
TimberTimber frameCLTStructural steelLight-gauge steelStairsRoofingUse cases
Mechanical designMakers & 3D printingWoodworking & furnitureArchitecture & housingKozorosa
HelpPricingDownloadFoundryDevelopers
The interface is one client of a catalogue of actions — 240+ in the core, more with each module — each with a JSON schema. Your scripts, your CI and your agents call exactly the same ones, held to the same scopes, revisions and undo.
REST
List the catalogue with its schemas, then call any action on the revision you hold. Optimistic concurrency on every mutation: if someone edited in between, you are told, not overwritten.
$KOZOROSA is your Foundry address, or the local address Kozorosa for Mac gives under Help → Connect an AI Agent.
# Everything the modeler can do, with its schema curl -H "Authorization: Bearer $TOKEN" \ $KOZOROSA/api/studio/actions # One edit, on the revision you hold curl -X POST $KOZOROSA/api/studio/actions/push_pull \ -H "Authorization: Bearer $TOKEN" \ -H "Content-Type: application/json" \ -d '{"model_id":"…","expected_revision":12, "args":{"target":"body1","face_id":"f7","distance":40}}' # A hundred commands as one revision and one undo step curl -X POST $KOZOROSA/api/studio/actions/batch …
MCP
The MCP endpoint serves the catalogue as tools. Settings → API → Connect an AI agent gives the ready-made configuration for Claude Code, Claude Desktop, Codex, Cursor, VS Code, Gemini and Windsurf.
propose_changes shows the change as a ghost in the viewport, applied only when a person approves.describe_body, mass_properties, measure and the module lists.POST /mcp X-API-Key: ign_… # scope: ai {"jsonrpc": "2.0", "id": 1, "method": "tools/call", "params": { "name": "propose_changes", "arguments": { "model_id": "…", "title": "Lighten the web by 18%", "commands": [ {"action": "shell", "args": {"target": "web", "thickness": 2.4}} ] }}}
Python
The Python console binds the whole catalogue to one name, cad. A script runs in an isolated process of its own; it is one edit and one undo step, and a script that fails changes nothing.
n = params["cells"]
pitch = params["pitch"]
strut = params["strut"]
for i in range(n + 1):
for j in range(n + 1):
cad.create_box(width=strut, depth=strut,
height=n * pitch,
position=[i * pitch, j * pitch, 0])
print("struts:", len(cad.features))
result = {"struts": len(cad.features),
"extent_mm": n * pitch}
Extend it
Parts
A plugin is a declarative recipe in a signed manifest — no plugin code ever runs. Start from the template, upload it for yourself, or install it for a whole organisation.
Library
Spur and bevel gears, ISO threads, hex bolts and nuts, washers, coil springs, pipe flanges and knurls, each pinned by a SHA-256 of its manifest.
Modules
Modules add kernel actions, reads, export formats, tools and pages — the construction modules are built this way.
Import a STEP file, push a face, put a dimension on it. 5 days, every tool, nothing to pay until you decide.