Create 3D CAD models using vcad MCP tools. Use when the user asks to create 3D parts, mechanical components, plates with holes, brackets, or any parametric geometry. Supports primitives (cube, cylinder, sphere, cone), boolean operations, transforms, patterns, and export to STL/GLB.
Install
npx skillscat add ecto/vcad/vcad Install via the SkillsCat registry.
vcad - Parametric CAD for AI Agents
Create 3D CAD models programmatically using the vcad MCP tools.
Available Tools
create_cad_document
Build geometry from structured primitives and operations.
export_cad
Export to STL (3D printing) or GLB (visualization).
inspect_cad
Get volume, surface area, bounding box, and triangle count.
Primitive Origins
Understanding where primitives are positioned is critical for correct placement:
| Primitive | Origin | Extent |
|---|---|---|
| Cube | Corner at (0,0,0) | Extends to (size.x, size.y, size.z) |
| Cylinder | Base center at (0,0,0) | Height along +Z |
| Sphere | Center at (0,0,0) | Radius in all directions |
| Cone | Base center at (0,0,0) | Height along +Z |
Positioning Operations
The at parameter accepts three formats:
- Absolute:
{x: 25, y: 15, z: 0}- exact coordinates in mm - Named:
"center","top-center","bottom-center"- relative to base primitive - Percentage:
{x: "50%", y: "50%"}- percentage of base primitive bounds
Common Patterns
Plate with Centered Hole
{
"parts": [{
"name": "plate",
"primitive": {"type": "cube", "size": {"x": 50, "y": 50, "z": 5}},
"operations": [
{"type": "hole", "diameter": 6, "at": "center"}
]
}]
}Plate with Corner Holes
{
"parts": [{
"name": "mounting_plate",
"primitive": {"type": "cube", "size": {"x": 100, "y": 60, "z": 5}},
"operations": [
{"type": "hole", "diameter": 4, "at": {"x": 10, "y": 10}},
{"type": "hole", "diameter": 4, "at": {"x": 90, "y": 10}},
{"type": "hole", "diameter": 4, "at": {"x": 10, "y": 50}},
{"type": "hole", "diameter": 4, "at": {"x": 90, "y": 50}}
]
}]
}Cylinder with Blind Hole
{
"parts": [{
"name": "bushing",
"primitive": {"type": "cylinder", "radius": 15, "height": 20},
"operations": [
{"type": "hole", "diameter": 10, "depth": 15, "at": "center"}
]
}]
}L-Bracket
{
"parts": [{
"name": "bracket",
"primitive": {"type": "cube", "size": {"x": 40, "y": 40, "z": 5}},
"operations": [
{"type": "union", "primitive": {"type": "cube", "size": {"x": 5, "y": 40, "z": 30}}, "at": {"x": 0, "y": 0, "z": 5}},
{"type": "hole", "diameter": 5, "at": {"x": 20, "y": 20}},
{"type": "difference", "primitive": {"type": "cylinder", "radius": 2.5, "height": 40}, "at": {"x": 2.5, "y": 20, "z": 20}}
]
}]
}Linear Pattern of Holes
{
"parts": [{
"name": "rail",
"primitive": {"type": "cube", "size": {"x": 200, "y": 20, "z": 10}},
"operations": [
{
"type": "difference",
"primitive": {"type": "cylinder", "radius": 3, "height": 15},
"at": {"x": 20, "y": 10, "z": -2}
},
{
"type": "linear_pattern",
"direction": {"x": 1, "y": 0, "z": 0},
"count": 5,
"spacing": 40
}
]
}]
}Circular Pattern
{
"parts": [{
"name": "flange",
"primitive": {"type": "cylinder", "radius": 40, "height": 10},
"operations": [
{"type": "hole", "diameter": 20, "at": "center"},
{
"type": "difference",
"primitive": {"type": "cylinder", "radius": 4, "height": 15},
"at": {"x": 30, "y": 0, "z": -2}
},
{
"type": "circular_pattern",
"axis_origin": {"x": 0, "y": 0, "z": 0},
"axis_dir": {"x": 0, "y": 0, "z": 1},
"count": 6,
"angle_deg": 360
}
]
}]
}Workflow
- Create: Use
create_cad_documentto build geometry - Inspect: Use
inspect_cadto verify dimensions and volume - Export: Use
export_cadto save as.stlor.glb
Tips
- Holes default to through-holes; specify
depthfor blind holes - Use percentage positioning for parametric designs that scale
- Cube origin is at corner - add half-size to center operations
- Cylinder/cone origins are at base center - no X/Y offset needed for centered holes
- Always extend cutting cylinders past the part (the hole operation does this automatically)
Setup
Recommended: Install the vcad Claude Code plugin for zero-config setup (includes MCP server, skills, and slash commands):
claude plugin add vcadManual setup: Add the vcad MCP server to your Claude Code config:
{
"mcpServers": {
"vcad": {
"command": "npx",
"args": ["-y", "@vcad/mcp"]
}
}
}Or run from local checkout:
{
"mcpServers": {
"vcad": {
"command": "node",
"args": ["packages/mcp/dist/index.js"]
}
}
}