{"ok":true,"site":{"host":"invitedpeak.github.io","url":"https://invitedpeak.github.io/flevAgenticCAD/","type":"live","desc":"A browser 3D modeling studio that AI agents drive through WebMCP tools. Watch the model take shape in the viewport.","tools":[{"name":"get_guide","kind":"answer","impl":"imperative","description":"Read this first. Returns the studio workflow, coordinate conventions, and modeling tips for building good-looking assets with these tools.","annotations":{"readOnlyHint":true,"untrustedContentHint":false},"inputSchema":{"type":"object","properties":{}},"hasHandler":true,"hasExecute":true,"__source":"spec","executable":true,"handlerField":"execute","page":"/flevAgenticCAD/"},{"name":"list_presets","kind":"answer","impl":"imperative","description":"List object types with their default parameters, material presets, lighting rigs, and camera view names.","annotations":{"readOnlyHint":true,"untrustedContentHint":false},"inputSchema":{"type":"object","properties":{}},"hasHandler":true,"hasExecute":true,"__source":"spec","executable":true,"handlerField":"execute","page":"/flevAgenticCAD/"},{"name":"describe_scene","kind":"answer","impl":"imperative","description":"Inspect the whole scene: objects with world-space size and center, materials, lights, camera, and environment. Use detail \"full\" to include geometry parameters and hierarchy.","annotations":{"readOnlyHint":true,"untrustedContentHint":false},"inputSchema":{"type":"object","properties":{"detail":{"type":"string","enum":["summary","full"],"description":"Default \"summary\"."}}},"hasHandler":true,"hasExecute":true,"__source":"spec","executable":true,"handlerField":"execute","page":"/flevAgenticCAD/"},{"name":"get_object","kind":"answer","impl":"imperative","description":"Full details for one object: parameters, transform, material, world bounds, children.","annotations":{"readOnlyHint":true,"untrustedContentHint":false},"inputSchema":{"type":"object","properties":{"id":{"type":"string","description":"Object id or name."}},"required":["id"]},"hasHandler":true,"hasExecute":true,"__source":"spec","executable":true,"handlerField":"execute","page":"/flevAgenticCAD/"},{"name":"get_bounds","kind":"answer","impl":"imperative","description":"World-space bounding box (min, max, size, center) of the given objects, or of the whole scene when ids is omitted.","annotations":{"readOnlyHint":true,"untrustedContentHint":false},"inputSchema":{"type":"object","properties":{"ids":{"type":"array","items":{"type":"string"},"description":"Object ids or names. Omit for the whole scene."}}},"hasHandler":true,"hasExecute":true,"__source":"spec","executable":true,"handlerField":"execute","page":"/flevAgenticCAD/"},{"name":"capture_view","kind":"act","impl":"imperative","description":"Quick snapshot of the live viewport exactly as the user sees it, including grid and selection. For a polished image use render.","annotations":{"readOnlyHint":true,"untrustedContentHint":false},"inputSchema":{"type":"object","properties":{"width":{"type":"integer","description":"Output width in pixels. Default 800."}}},"hasHandler":true,"hasExecute":true,"__source":"spec","executable":true,"handlerField":"execute","page":"/flevAgenticCAD/"},{"name":"create_primitive","kind":"act","impl":"imperative","description":"Add a primitive solid. Types: box, rounded_box, sphere, cylinder, cone, torus, torus_knot, plane, capsule, icosahedron, dodecahedron, octahedron, tetrahedron, ring, prism. Each type has its own params (see list_presets); omitted params use defaults. Primitives are centered on their origin, so a box of height 1 spans y -0.5 to 0.5 before on_ground lifts it.","inputSchema":{"type":"object","properties":{"type":{"type":"string","enum":["box","rounded_box","sphere","cylinder","cone","torus","torus_knot","plane","capsule","icosahedron","dodecahedron","octahedron","tetrahedron","ring","prism"],"description":"Primitive type."},"params":{"type":"object","properties":{},"description":"Type-specific dimensions, e.g. {\"width\":1,\"height\":2,\"depth\":0.5} for box or {\"radius\":0.4} for sphere."},"name":{"type":"string","description":"Display name. Names are unique; a numeric suffix is added on collision."},"position":{"type":"array","items":{"type":"number"},"minItems":3,"maxItems":3,"description":"[x, y, z] in parent space. Y is up. Default [0, 0, 0]."},"rotation":{"type":"array","items":{"type":"number"},"minItems":3,"maxItems":3,"description":"Euler rotation in degrees [x, y, z]. Default [0, 0, 0]."},"scale":{"description":"Uniform number or [x, y, z]. Default 1.","anyOf":[{"type":"number"},{"type":"array","items":{"type":"number"},"minItems":3,"maxItems":3}]},"material":{"type":"string","description":"Material id or name, or a preset name such as plastic, metal, gold, chrome, glass, wood, clay. See list_presets."},"color":{"type":"string","description":"Hex color like \"#D9A441\". Combined with a preset it makes a tinted copy; alone it makes a plastic of that color."},"parent":{"type":"string","description":"Id or name of a parent object (usually a group). Position and rotation are then relative to it."},"on_ground":{"type":"boolean","description":"Lift the object so its lowest point sits on the ground plane. Defaults to true when position is omitted (except for tube and mesh, whose coordinates are absolute), false otherwise."},"visible":{"type":"boolean","description":"Default true."},"cast_shadow":{"type":"boolean","description":"Default true."},"receive_shadow":{"type":"boolean","description":"Default true."}},"required":["type"]},"hasHandler":true,"hasExecute":true,"__source":"spec","executable":true,"handlerField":"execute","page":"/flevAgenticCAD/"},{"name":"create_lathe","kind":"act","impl":"imperative","description":"Revolve a 2D profile around the Y axis. points are [radius, height] pairs from bottom to top; radius must be >= 0. Ideal for vases, bottles, bowls, chess pieces, knobs, and anything round. Use phi_length < 360 for a partial sweep (set the material double_sided).","inputSchema":{"type":"object","properties":{"points":{"type":"array","items":{"type":"array","items":{"type":"number"},"minItems":2,"maxItems":2},"description":"Profile as [[radius, y], ...], at least 2 points, ordered bottom to top. Start and end at radius 0 for a closed solid."},"segments":{"type":"integer","description":"Radial segments around the axis. Default 64."},"phi_start":{"type":"number","description":"Start angle in degrees. Default 0."},"phi_length":{"type":"number","description":"Sweep angle in degrees. Default 360."},"name":{"type":"string","description":"Display name. Names are unique; a numeric suffix is added on collision."},"position":{"type":"array","items":{"type":"number"},"minItems":3,"maxItems":3,"description":"[x, y, z] in parent space. Y is up. Default [0, 0, 0]."},"rotation":{"type":"array","items":{"type":"number"},"minItems":3,"maxItems":3,"description":"Euler rotation in degrees [x, y, z]. Default [0, 0, 0]."},"scale":{"description":"Uniform number or [x, y, z]. Default 1.","anyOf":[{"type":"number"},{"type":"array","items":{"type":"number"},"minItems":3,"maxItems":3}]},"material":{"type":"string","description":"Material id or name, or a preset name such as plastic, metal, gold, chrome, glass, wood, clay. See list_presets."},"color":{"type":"string","description":"Hex color like \"#D9A441\". Combined with a preset it makes a tinted copy; alone it makes a plastic of that color."},"parent":{"type":"string","description":"Id or name of a parent object (usually a group). Position and rotation are then relative to it."},"on_ground":{"type":"boolean","description":"Lift the object so its lowest point sits on the ground plane. Defaults to true when position is omitted (except for tube and mesh, whose coordinates are absolute), false otherwise."},"visible":{"type":"boolean","description":"Default true."},"cast_shadow":{"type":"boolean","description":"Default true."},"receive_shadow":{"type":"boolean","description":"Default true."}},"required":["points"]},"hasHandler":true,"hasExecute":true,"__source":"spec","executable":true,"handlerField":"execute","page":"/flevAgenticCAD/"},{"name":"create_extrude","kind":"act","impl":"imperative","description":"Extrude a 2D polygon (with optional holes) into a solid. The shape is drawn in a plane and pushed along axis (default \"y\", so the polygon lies flat on the ground like a floor plan; use \"z\" for a shape that stands upright facing the camera). Optional rounded bevels. Good for brackets, plates, letters, gears, profiles, and building footprints.","inputSchema":{"type":"object","properties":{"shape":{"type":"array","items":{"type":"array","items":{"type":"number"},"minItems":2,"maxItems":2},"description":"Outline polygon as [[x, y], ...] in counter-clockwise order, at least 3 points."},"holes":{"type":"array","items":{"type":"array","items":{"type":"array","items":{"type":"number"},"minItems":2,"maxItems":2},"description":"One hole polygon."},"description":"Optional list of hole polygons, each [[x, y], ...]."},"depth":{"type":"number","description":"Extrusion length. Default 0.2."},"axis":{"type":"string","enum":["x","y","z"],"description":"Extrusion direction. Default \"y\"."},"bevel":{"type":"boolean","description":"Round the edges. Default false."},"bevel_size":{"type":"number","description":"Bevel inset. Default 0.02."},"bevel_thickness":{"type":"number","description":"Bevel height. Default 0.02."},"bevel_segments":{"type":"integer","description":"Default 3."},"curve_segments":{"type":"integer","description":"Segments for curved outline sections. Default 12."},"name":{"type":"string","description":"Display name. Names are unique; a numeric suffix is added on collision."},"position":{"type":"array","items":{"type":"number"},"minItems":3,"maxItems":3,"description":"[x, y, z] in parent space. Y is up. Default [0, 0, 0]."},"rotation":{"type":"array","items":{"type":"number"},"minItems":3,"maxItems":3,"description":"Euler rotation in degrees [x, y, z]. Default [0, 0, 0]."},"scale":{"description":"Uniform number or [x, y, z]. Default 1.","anyOf":[{"type":"number"},{"type":"array","items":{"type":"number"},"minItems":3,"maxItems":3}]},"material":{"type":"string","description":"Material id or name, or a preset name such as plastic, metal, gold, chrome, glass, wood, clay. See list_presets."},"color":{"type":"string","description":"Hex color like \"#D9A441\". Combined with a preset it makes a tinted copy; alone it makes a plastic of that color."},"parent":{"type":"string","description":"Id or name of a parent object (usually a group). Position and rotation are then relative to it."},"on_ground":{"type":"boolean","description":"Lift the object so its lowest point sits on the ground plane. Defaults to true when position is omitted (except for tube and mesh, whose coordinates are absolute), false otherwise."},"visible":{"type":"boolean","description":"Default true."},"cast_shadow":{"type":"boolean","description":"Default true."},"receive_shadow":{"type":"boolean","description":"Default true."}},"required":["shape"]},"hasHandler":true,"hasExecute":true,"__source":"spec","executable":true,"handlerField":"execute","page":"/flevAgenticCAD/"},{"name":"create_tube","kind":"act","impl":"imperative","description":"Sweep a circle along a 3D path: pipes, cables, handles, rails, wire frames. The path is smoothed with a Catmull-Rom spline unless curve is \"linear\".","inputSchema":{"type":"object","properties":{"path":{"type":"array","items":{"type":"array","items":{"type":"number"},"minItems":3,"maxItems":3},"description":"[[x, y, z], ...] with at least 2 points."},"radius":{"type":"number","description":"Tube radius. Default 0.05."},"closed":{"type":"boolean","description":"Join the end back to the start. Default false."},"curve":{"type":"string","enum":["catmullrom","linear"],"description":"Default \"catmullrom\"."},"tubular_segments":{"type":"integer","description":"Default 64."},"radial_segments":{"type":"integer","description":"Default 12."},"name":{"type":"string","description":"Display name. Names are unique; a numeric suffix is added on collision."},"position":{"type":"array","items":{"type":"number"},"minItems":3,"maxItems":3,"description":"[x, y, z] in parent space. Y is up. Default [0, 0, 0]."},"rotation":{"type":"array","items":{"type":"number"},"minItems":3,"maxItems":3,"description":"Euler rotation in degrees [x, y, z]. Default [0, 0, 0]."},"scale":{"description":"Uniform number or [x, y, z]. Default 1.","anyOf":[{"type":"number"},{"type":"array","items":{"type":"number"},"minItems":3,"maxItems":3}]},"material":{"type":"string","description":"Material id or name, or a preset name such as plastic, metal, gold, chrome, glass, wood, clay. See list_presets."},"color":{"type":"string","description":"Hex color like \"#D9A441\". Combined with a preset it makes a tinted copy; alone it makes a plastic of that color."},"parent":{"type":"string","description":"Id or name of a parent object (usually a group). Position and rotation are then relative to it."},"on_ground":{"type":"boolean","description":"Lift the object so its lowest point sits on the ground plane. Defaults to true when position is omitted (except for tube and mesh, whose coordinates are absolute), false otherwise."},"visible":{"type":"boolean","description":"Default true."},"cast_shadow":{"type":"boolean","description":"Default true."},"receive_shadow":{"type":"boolean","description":"Default true."}},"required":["path"]},"hasHandler":true,"hasExecute":true,"__source":"spec","executable":true,"handlerField":"execute","page":"/flevAgenticCAD/"},{"name":"create_gear","kind":"act","impl":"imperative","description":"A spur gear with trapezoidal teeth and an optional center hole. Lies flat (axis \"y\") by default; use axis \"z\" for a gear facing the camera.","inputSchema":{"type":"object","properties":{"teeth":{"type":"integer","description":"Number of teeth. Default 12."},"outer_radius":{"type":"number","description":"Radius to the tooth tips. Default 0.5."},"thickness":{"type":"number","description":"Default 0.2."},"hole_radius":{"type":"number","description":"Center bore radius, 0 for none. Default 0.1."},"tooth_depth":{"type":"number","description":"Radial tooth height. Default is proportional to the pitch."},"axis":{"type":"string","enum":["x","y","z"],"description":"Axis of rotation. Default \"y\"."},"name":{"type":"string","description":"Display name. Names are unique; a numeric suffix is added on collision."},"position":{"type":"array","items":{"type":"number"},"minItems":3,"maxItems":3,"description":"[x, y, z] in parent space. Y is up. Default [0, 0, 0]."},"rotation":{"type":"array","items":{"type":"number"},"minItems":3,"maxItems":3,"description":"Euler rotation in degrees [x, y, z]. Default [0, 0, 0]."},"scale":{"description":"Uniform number or [x, y, z]. Default 1.","anyOf":[{"type":"number"},{"type":"array","items":{"type":"number"},"minItems":3,"maxItems":3}]},"material":{"type":"string","description":"Material id or name, or a preset name such as plastic, metal, gold, chrome, glass, wood, clay. See list_presets."},"color":{"type":"string","description":"Hex color like \"#D9A441\". Combined with a preset it makes a tinted copy; alone it makes a plastic of that color."},"parent":{"type":"string","description":"Id or name of a parent object (usually a group). Position and rotation are then relative to it."},"on_ground":{"type":"boolean","description":"Lift the object so its lowest point sits on the ground plane. Defaults to true when position is omitted (except for tube and mesh, whose coordinates are absolute), false otherwise."},"visible":{"type":"boolean","description":"Default true."},"cast_shadow":{"type":"boolean","description":"Default true."},"receive_shadow":{"type":"boolean","description":"Default true."}}},"hasHandler":true,"hasExecute":true,"__source":"spec","executable":true,"handlerField":"execute","page":"/flevAgenticCAD/"},{"name":"create_mesh","kind":"act","impl":"imperative","description":"Add raw triangle geometry: a flat positions array [x,y,z, x,y,z, ...] and optional indices (triples of vertex indices, counter-clockwise when seen from outside). Use this for shapes the other tools cannot make. Keep it under about 20k vertices.","inputSchema":{"type":"object","properties":{"positions":{"type":"array","items":{"type":"number"},"description":"Flat vertex list, length a multiple of 3."},"indices":{"type":"array","items":{"type":"integer"},"description":"Optional triangle index list, length a multiple of 3. Omit for unindexed triangles taken three vertices at a time."},"smooth":{"type":"boolean","description":"Merge shared vertices and smooth normals. Default true. Set false for hard-edged shapes."},"name":{"type":"string","description":"Display name. Names are unique; a numeric suffix is added on collision."},"position":{"type":"array","items":{"type":"number"},"minItems":3,"maxItems":3,"description":"[x, y, z] in parent space. Y is up. Default [0, 0, 0]."},"rotation":{"type":"array","items":{"type":"number"},"minItems":3,"maxItems":3,"description":"Euler rotation in degrees [x, y, z]. Default [0, 0, 0]."},"scale":{"description":"Uniform number or [x, y, z]. Default 1.","anyOf":[{"type":"number"},{"type":"array","items":{"type":"number"},"minItems":3,"maxItems":3}]},"material":{"type":"string","description":"Material id or name, or a preset name such as plastic, metal, gold, chrome, glass, wood, clay. See list_presets."},"color":{"type":"string","description":"Hex color like \"#D9A441\". Combined with a preset it makes a tinted copy; alone it makes a plastic of that color."},"parent":{"type":"string","description":"Id or name of a parent object (usually a group). Position and rotation are then relative to it."},"on_ground":{"type":"boolean","description":"Lift the object so its lowest point sits on the ground plane. Defaults to true when position is omitted (except for tube and mesh, whose coordinates are absolute), false otherwise."},"visible":{"type":"boolean","description":"Default true."},"cast_shadow":{"type":"boolean","description":"Default true."},"receive_shadow":{"type":"boolean","description":"Default true."}},"required":["positions"]},"hasHandler":true,"hasExecute":true,"__source":"spec","executable":true,"handlerField":"execute","page":"/flevAgenticCAD/"},{"name":"create_group","kind":"act","impl":"imperative","description":"Create an empty group, optionally moving existing objects into it (their world placement is preserved). Groups can be moved, rotated, scaled, and duplicated as one unit.","inputSchema":{"type":"object","properties":{"name":{"type":"string","description":"Group name."},"children":{"type":"array","items":{"type":"string"},"description":"Objects to move into the group."},"position":{"type":"array","items":{"type":"number"},"minItems":3,"maxItems":3,"description":"Group origin. Default [0, 0, 0]."},"rotation":{"type":"array","items":{"type":"number"},"minItems":3,"maxItems":3,"description":"Degrees."},"scale":{"description":"Uniform number or [x, y, z]. Default 1.","anyOf":[{"type":"number"},{"type":"array","items":{"type":"number"},"minItems":3,"maxItems":3}]},"parent":{"type":"string","description":"Parent object for the group."}}},"hasHandler":true,"hasExecute":true,"__source":"spec","executable":true,"handlerField":"execute","page":"/flevAgenticCAD/"},{"name":"update_object","kind":"act","impl":"imperative","description":"Set properties of an object: name, absolute transform, geometry params (merged into the existing ones), material, visibility, shadows. For relative moves use transform_object.","inputSchema":{"type":"object","properties":{"id":{"type":"string","description":"Object id or name."},"name":{"type":"string"},"params":{"type":"object","properties":{},"description":"Geometry parameters to change, merged with the current ones, e.g. {\"radius\": 0.8}."},"position":{"type":"array","items":{"type":"number"},"minItems":3,"maxItems":3},"rotation":{"type":"array","items":{"type":"number"},"minItems":3,"maxItems":3,"description":"Degrees."},"scale":{"description":"Uniform number or [x, y, z]. Default 1.","anyOf":[{"type":"number"},{"type":"array","items":{"type":"number"},"minItems":3,"maxItems":3}]},"material":{"type":"string","description":"Material id or name, or a preset name such as plastic, metal, gold, chrome, glass, wood, clay. See list_presets."},"color":{"type":"string","description":"Hex color like \"#D9A441\". Combined with a preset it makes a tinted copy; alone it makes a plastic of that color."},"visible":{"type":"boolean"},"cast_shadow":{"type":"boolean"},"receive_shadow":{"type":"boolean"},"on_ground":{"type":"boolean","description":"After other changes, drop the object onto the ground plane."}},"required":["id"]},"hasHandler":true,"hasExecute":true,"__source":"spec","executable":true,"handlerField":"execute","page":"/flevAgenticCAD/"},{"name":"transform_object","kind":"act","impl":"imperative","description":"Move, rotate, or scale an object relative to its current state (in parent space).","inputSchema":{"type":"object","properties":{"id":{"type":"string","description":"Object id or name."},"translate":{"type":"array","items":{"type":"number"},"minItems":3,"maxItems":3,"description":"Offset to add to position."},"rotate":{"type":"array","items":{"type":"number"},"minItems":3,"maxItems":3,"description":"Degrees to add to rotation."},"scale":{"description":"Multiplier: number or [x, y, z].","anyOf":[{"type":"number"},{"type":"array","items":{"type":"number"},"minItems":3,"maxItems":3}]}},"required":["id"]},"hasHandler":true,"hasExecute":true,"__source":"spec","executable":true,"handlerField":"execute","page":"/flevAgenticCAD/"},{"name":"duplicate_object","kind":"act","impl":"imperative","description":"Copy an object (with its children) one or more times, offsetting and rotating each successive copy. Makes linear arrays: count 5 with offset [1.2, 0, 0] gives a row.","inputSchema":{"type":"object","properties":{"id":{"type":"string","description":"Object id or name."},"count":{"type":"integer","description":"Number of copies. Default 1."},"offset":{"type":"array","items":{"type":"number"},"minItems":3,"maxItems":3,"description":"Added to the position for each successive copy. Default [0, 0, 0]."},"rotate_step":{"type":"array","items":{"type":"number"},"minItems":3,"maxItems":3,"description":"Degrees added for each successive copy."},"name":{"type":"string","description":"Base name for the copies."}},"required":["id"]},"hasHandler":true,"hasExecute":true,"__source":"spec","executable":true,"handlerField":"execute","page":"/flevAgenticCAD/"},{"name":"array_radial","kind":"act","impl":"imperative","description":"Arrange copies of an object evenly around an axis (bolt circles, spokes, petals, chair legs). The original stays; count minus one copies are added.","inputSchema":{"type":"object","properties":{"id":{"type":"string","description":"Object id or name."},"count":{"type":"integer","description":"Total instances including the original."},"axis":{"type":"string","enum":["x","y","z"],"description":"Rotation axis. Default \"y\"."},"center":{"type":"array","items":{"type":"number"},"minItems":3,"maxItems":3,"description":"Center of the circle in parent space. Default [0, 0, 0]."},"rotate_copies":{"type":"boolean","description":"Also rotate each copy to face outward. Default true."}},"required":["id","count"]},"hasHandler":true,"hasExecute":true,"__source":"spec","executable":true,"handlerField":"execute","page":"/flevAgenticCAD/"},{"name":"mirror_object","kind":"act","impl":"imperative","description":"Mirror an object across a plane through the given coordinate (default the origin) perpendicular to axis. Keeps the original unless keep_original is false.","inputSchema":{"type":"object","properties":{"id":{"type":"string","description":"Object id or name."},"axis":{"type":"string","enum":["x","y","z"],"description":"Axis perpendicular to the mirror plane."},"at":{"type":"number","description":"Coordinate of the mirror plane along axis. Default 0."},"keep_original":{"type":"boolean","description":"Default true."}},"required":["id","axis"]},"hasHandler":true,"hasExecute":true,"__source":"spec","executable":true,"handlerField":"execute","page":"/flevAgenticCAD/"},{"name":"drop_to_ground","kind":"act","impl":"imperative","description":"Move objects straight down (or up) so their lowest point touches the ground plane. Omit ids to drop every top-level object.","inputSchema":{"type":"object","properties":{"ids":{"type":"array","items":{"type":"string"},"description":"Object ids or names."}}},"hasHandler":true,"hasExecute":true,"__source":"spec","executable":true,"handlerField":"execute","page":"/flevAgenticCAD/"},{"name":"place_on","kind":"act","impl":"imperative","description":"Stack one object on top of another: its bottom lands on the target's top, centered over the target (plus an optional x/z offset).","inputSchema":{"type":"object","properties":{"id":{"type":"string","description":"Object to move."},"target":{"type":"string","description":"Object to rest on."},"offset":{"type":"array","items":{"type":"number"},"minItems":2,"maxItems":2,"description":"[dx, dz] offset from the target center. Default [0, 0]."},"gap":{"type":"number","description":"Vertical gap. Default 0."}},"required":["id","target"]},"hasHandler":true,"hasExecute":true,"__source":"spec","executable":true,"handlerField":"execute","page":"/flevAgenticCAD/"},{"name":"align_objects","kind":"act","impl":"imperative","description":"Line objects up along one axis by their bounding boxes: align their min, center, or max to a world coordinate, or to the first object when \"to\" is omitted.","inputSchema":{"type":"object","properties":{"ids":{"type":"array","items":{"type":"string"},"description":"Two or more objects (or one object with an explicit \"to\")."},"axis":{"type":"string","enum":["x","y","z"]},"mode":{"type":"string","enum":["min","center","max"],"description":"Which edge of each box to align. Default \"center\"."},"to":{"type":"number","description":"World coordinate to align to. Default: the first object's value."}},"required":["ids","axis"]},"hasHandler":true,"hasExecute":true,"__source":"spec","executable":true,"handlerField":"execute","page":"/flevAgenticCAD/"},{"name":"set_parent","kind":"act","impl":"imperative","description":"Move an object under another object (or to the top level with parent null). World placement is preserved.","inputSchema":{"type":"object","properties":{"id":{"type":"string","description":"Object id or name."},"parent":{"description":"Parent id/name, or null for top level.","anyOf":[{"type":"string"},{"type":"null"}]}},"required":["id"]},"hasHandler":true,"hasExecute":true,"__source":"spec","executable":true,"handlerField":"execute","page":"/flevAgenticCAD/"},{"name":"delete_objects","kind":"transact","impl":"imperative","description":"Delete objects and their children.","annotations":{"readOnlyHint":false,"untrustedContentHint":false},"inputSchema":{"type":"object","properties":{"ids":{"type":"array","items":{"type":"string"},"description":"Object ids or names."}},"required":["ids"]},"hasHandler":true,"hasExecute":true,"__source":"spec","executable":true,"handlerField":"execute","page":"/flevAgenticCAD/"},{"name":"boolean","kind":"act","impl":"imperative","description":"Combine solids: union merges the target with the tools, subtract cuts the tools out of the target (holes, slots, pockets), intersect keeps only the overlap. The target becomes a baked mesh; the tool objects are removed unless keep_tools is true. Overlap the shapes slightly to avoid coplanar faces.","inputSchema":{"type":"object","properties":{"operation":{"type":"string","enum":["union","subtract","intersect"]},"target":{"type":"string","description":"Object that receives the result."},"tools":{"type":"array","items":{"type":"string"},"description":"One or more objects used as cutters or additions."},"keep_tools":{"type":"boolean","description":"Keep the tool objects (hidden) instead of deleting them. Default false."},"name":{"type":"string","description":"Rename the result."}},"required":["operation","target","tools"]},"hasHandler":true,"hasExecute":true,"__source":"spec","executable":true,"handlerField":"execute","page":"/flevAgenticCAD/"},{"name":"select_objects","kind":"act","impl":"imperative","description":"Highlight objects in the user's viewport and inspector. Purely visual; use it to point at something you are discussing.","annotations":{"readOnlyHint":true,"untrustedContentHint":false},"inputSchema":{"type":"object","properties":{"ids":{"type":"array","items":{"type":"string"},"description":"Object ids or names. Empty to clear the selection."}}},"hasHandler":true,"hasExecute":true,"__source":"spec","executable":true,"handlerField":"execute","page":"/flevAgenticCAD/"},{"name":"create_material","kind":"act","impl":"imperative","description":"Create a physically based material. Start from a preset (plastic, glossy_plastic, matte, clay, rubber, ceramic, metal, brushed_metal, chrome, steel, gold, copper, brass, glass, tinted_glass, frosted_glass, wood, velvet, emissive, wireframe) and override any property.","inputSchema":{"type":"object","properties":{"name":{"type":"string","description":"Material name."},"preset":{"type":"string","enum":["plastic","glossy_plastic","matte","clay","rubber","ceramic","metal","brushed_metal","chrome","steel","gold","copper","brass","glass","tinted_glass","frosted_glass","wood","velvet","emissive","wireframe"],"description":"Starting point."},"color":{"type":"string","description":"Base color, hex."},"roughness":{"type":"number","description":"0 mirror-smooth to 1 fully matte.","minimum":0,"maximum":1},"metalness":{"type":"number","description":"0 dielectric to 1 metal.","minimum":0,"maximum":1},"opacity":{"type":"number","description":"0 to 1. Below 1 turns on alpha blending.","minimum":0,"maximum":1},"transmission":{"type":"number","description":"0 to 1. Physically based glass; keep opacity at 1 and set roughness low.","minimum":0,"maximum":1},"ior":{"type":"number","description":"Index of refraction, 1 to 2.333. Glass is 1.5."},"thickness":{"type":"number","description":"Volume thickness for transmission refraction, in scene units."},"clearcoat":{"type":"number","description":"0 to 1. Lacquer layer on top of the base.","minimum":0,"maximum":1},"clearcoat_roughness":{"type":"number","description":"0 to 1.","minimum":0,"maximum":1},"emissive":{"type":"string","description":"Emissive color, hex. \"#000000\" for none."},"emissive_intensity":{"type":"number","description":"Multiplier for emissive."},"sheen":{"type":"number","description":"0 to 1. Velvet-like edge highlight.","minimum":0,"maximum":1},"sheen_roughness":{"type":"number","description":"0 to 1.","minimum":0,"maximum":1},"sheen_color":{"type":"string","description":"Hex."},"iridescence":{"type":"number","description":"0 to 1. Thin-film color shift.","minimum":0,"maximum":1},"flat_shading":{"type":"boolean","description":"Faceted look; shows polygon faces."},"wireframe":{"type":"boolean","description":"Draw edges only."},"double_sided":{"type":"boolean","description":"Render back faces too (needed for open shapes like planes and lathes with partial sweep)."}},"required":["name"]},"hasHandler":true,"hasExecute":true,"__source":"spec","executable":true,"handlerField":"execute","page":"/flevAgenticCAD/"},{"name":"update_material","kind":"act","impl":"imperative","description":"Change properties of an existing material. Every object using it updates.","inputSchema":{"type":"object","properties":{"id":{"type":"string","description":"Material id or name."},"name":{"type":"string","description":"Rename."},"color":{"type":"string","description":"Base color, hex."},"roughness":{"type":"number","description":"0 mirror-smooth to 1 fully matte.","minimum":0,"maximum":1},"metalness":{"type":"number","description":"0 dielectric to 1 metal.","minimum":0,"maximum":1},"opacity":{"type":"number","description":"0 to 1. Below 1 turns on alpha blending.","minimum":0,"maximum":1},"transmission":{"type":"number","description":"0 to 1. Physically based glass; keep opacity at 1 and set roughness low.","minimum":0,"maximum":1},"ior":{"type":"number","description":"Index of refraction, 1 to 2.333. Glass is 1.5."},"thickness":{"type":"number","description":"Volume thickness for transmission refraction, in scene units."},"clearcoat":{"type":"number","description":"0 to 1. Lacquer layer on top of the base.","minimum":0,"maximum":1},"clearcoat_roughness":{"type":"number","description":"0 to 1.","minimum":0,"maximum":1},"emissive":{"type":"string","description":"Emissive color, hex. \"#000000\" for none."},"emissive_intensity":{"type":"number","description":"Multiplier for emissive."},"sheen":{"type":"number","description":"0 to 1. Velvet-like edge highlight.","minimum":0,"maximum":1},"sheen_roughness":{"type":"number","description":"0 to 1.","minimum":0,"maximum":1},"sheen_color":{"type":"string","description":"Hex."},"iridescence":{"type":"number","description":"0 to 1. Thin-film color shift.","minimum":0,"maximum":1},"flat_shading":{"type":"boolean","description":"Faceted look; shows polygon faces."},"wireframe":{"type":"boolean","description":"Draw edges only."},"double_sided":{"type":"boolean","description":"Render back faces too (needed for open shapes like planes and lathes with partial sweep)."}},"required":["id"]},"hasHandler":true,"hasExecute":true,"__source":"spec","executable":true,"handlerField":"execute","page":"/flevAgenticCAD/"},{"name":"assign_material","kind":"act","impl":"imperative","description":"Apply a material (existing id/name, or a preset optionally tinted with color) to one or more objects. Applies to every solid inside a group.","inputSchema":{"type":"object","properties":{"ids":{"type":"array","items":{"type":"string"},"description":"Object ids or names."},"material":{"type":"string","description":"Material id or name, or a preset name such as plastic, metal, gold, chrome, glass, wood, clay. See list_presets."},"color":{"type":"string","description":"Hex color like \"#D9A441\". Combined with a preset it makes a tinted copy; alone it makes a plastic of that color."}},"required":["ids"]},"hasHandler":true,"hasExecute":true,"__source":"spec","executable":true,"handlerField":"execute","page":"/flevAgenticCAD/"},{"name":"list_materials","kind":"answer","impl":"imperative","description":"List materials in the scene with their properties and which objects use them.","annotations":{"readOnlyHint":true,"untrustedContentHint":false},"inputSchema":{"type":"object","properties":{}},"hasHandler":true,"hasExecute":true,"__source":"spec","executable":true,"handlerField":"execute","page":"/flevAgenticCAD/"},{"name":"delete_material","kind":"transact","impl":"imperative","description":"Delete a material. Objects using it fall back to the default material.","annotations":{"readOnlyHint":false,"untrustedContentHint":false},"inputSchema":{"type":"object","properties":{"id":{"type":"string","description":"Material id or name."}},"required":["id"]},"hasHandler":true,"hasExecute":true,"__source":"spec","executable":true,"handlerField":"execute","page":"/flevAgenticCAD/"},{"name":"set_lighting","kind":"act","impl":"imperative","description":"Replace all lights with a preset rig: studio (three-point studio rig with soft shadows. good default for product renders); soft (environment light only, with one faint shadow-casting sun. flat and forgiving); sun (hard warm sunlight with a cool sky fill. outdoor look); dramatic (one strong key from the side, deep shadows, little fill); none (no lights. only the environment map lights the scene). Tweak individual lights afterwards with update_light.","inputSchema":{"type":"object","properties":{"preset":{"type":"string","enum":["studio","soft","sun","dramatic","none"]},"env_intensity":{"type":"number","description":"Override the environment (image based) light strength, 0 to 3."}},"required":["preset"]},"hasHandler":true,"hasExecute":true,"__source":"spec","executable":true,"handlerField":"execute","page":"/flevAgenticCAD/"},{"name":"add_light","kind":"act","impl":"imperative","description":"Add a light. directional: parallel sunlight (intensity 1 to 5). point: bulb (intensity 20 to 300). spot: cone (intensity 50 to 400, angle in degrees). ambient and hemisphere: flat fill (0.2 to 2).","inputSchema":{"type":"object","properties":{"type":{"type":"string","enum":["directional","point","spot","ambient","hemisphere"]},"name":{"type":"string","description":"Display name."},"color":{"type":"string","description":"Hex."},"intensity":{"type":"number","description":"Directional lights: 1 to 5. Point and spot lights use candela-like values: 50 to 300 is typical at a few units away."},"position":{"type":"array","items":{"type":"number"},"minItems":3,"maxItems":3,"description":"[x, y, z]."},"target":{"type":"array","items":{"type":"number"},"minItems":3,"maxItems":3,"description":"Point the light aims at (directional and spot)."},"cast_shadow":{"type":"boolean","description":"Shadows cost performance; keep to one or two lights."},"angle":{"type":"number","description":"Spot cone half-angle in degrees."},"penumbra":{"type":"number","description":"Spot edge softness 0 to 1."},"distance":{"type":"number","description":"Point/spot falloff range; 0 for unlimited."},"ground_color":{"type":"string","description":"Hemisphere light color from below, hex."},"visible":{"type":"boolean"}},"required":["type"]},"hasHandler":true,"hasExecute":true,"__source":"spec","executable":true,"handlerField":"execute","page":"/flevAgenticCAD/"},{"name":"update_light","kind":"act","impl":"imperative","description":"Change a light's color, intensity, position, target, shadows, or spot cone.","inputSchema":{"type":"object","properties":{"id":{"type":"string","description":"Light id or name."},"name":{"type":"string","description":"Display name."},"color":{"type":"string","description":"Hex."},"intensity":{"type":"number","description":"Directional lights: 1 to 5. Point and spot lights use candela-like values: 50 to 300 is typical at a few units away."},"position":{"type":"array","items":{"type":"number"},"minItems":3,"maxItems":3,"description":"[x, y, z]."},"target":{"type":"array","items":{"type":"number"},"minItems":3,"maxItems":3,"description":"Point the light aims at (directional and spot)."},"cast_shadow":{"type":"boolean","description":"Shadows cost performance; keep to one or two lights."},"angle":{"type":"number","description":"Spot cone half-angle in degrees."},"penumbra":{"type":"number","description":"Spot edge softness 0 to 1."},"distance":{"type":"number","description":"Point/spot falloff range; 0 for unlimited."},"ground_color":{"type":"string","description":"Hemisphere light color from below, hex."},"visible":{"type":"boolean"}},"required":["id"]},"hasHandler":true,"hasExecute":true,"__source":"spec","executable":true,"handlerField":"execute","page":"/flevAgenticCAD/"},{"name":"delete_light","kind":"transact","impl":"imperative","description":"Remove a light.","annotations":{"readOnlyHint":false,"untrustedContentHint":false},"inputSchema":{"type":"object","properties":{"id":{"type":"string","description":"Light id or name."}},"required":["id"]},"hasHandler":true,"hasExecute":true,"__source":"spec","executable":true,"handlerField":"execute","page":"/flevAgenticCAD/"},{"name":"set_environment","kind":"act","impl":"imperative","description":"Set the backdrop and ground for renders: background (gradient, solid color, or transparent), ground plane (invisible shadow catcher, solid plane, or a curved cyclorama backdrop), exposure, environment light strength, and shadows.","inputSchema":{"type":"object","properties":{"background":{"type":"object","properties":{"type":{"type":"string","enum":["gradient","color","transparent"]},"color":{"type":"string","description":"Hex, for type \"color\"."},"top":{"type":"string","description":"Hex, gradient center/top."},"bottom":{"type":"string","description":"Hex, gradient edge/bottom."}}},"ground":{"type":"object","properties":{"type":{"type":"string","enum":["none","shadow","solid","cyclorama"],"description":"\"shadow\" shows only shadows on an invisible plane; \"cyclorama\" is a seamless studio sweep."},"color":{"type":"string","description":"Hex, for solid and cyclorama."},"size":{"type":"number","description":"Plane size. Default 30."},"y":{"type":"number","description":"Ground height. Default 0."},"opacity":{"type":"number","description":"Shadow darkness for type \"shadow\", 0 to 1. Default 0.35."}}},"exposure":{"type":"number","description":"Tone mapping exposure. Default 1; 0.7 darker, 1.4 brighter."},"env_intensity":{"type":"number","description":"Image based light strength, 0 to 3."},"shadows":{"type":"boolean","description":"Enable shadows. Default true."}}},"hasHandler":true,"hasExecute":true,"__source":"spec","executable":true,"handlerField":"execute","page":"/flevAgenticCAD/"},{"name":"set_camera","kind":"act","impl":"imperative","description":"Move the camera. Use view (perspective, front, back, left, right, top, bottom, iso, three_quarter, low, high) and frame to fit the whole scene or specific objects, or set position/target/fov directly. Frame is applied first, then explicit values override.","inputSchema":{"type":"object","properties":{"view":{"type":"string","enum":["perspective","front","back","left","right","top","bottom","iso","three_quarter","low","high"],"description":"Named viewing direction."},"frame":{"description":"\"all\", an object id/name, or a list of them: fit these in view.","anyOf":[{"type":"string"},{"type":"array","items":{"type":"string"}}]},"padding":{"type":"number","description":"Framing margin multiplier. Default 1.2; smaller is tighter."},"position":{"type":"array","items":{"type":"number"},"minItems":3,"maxItems":3,"description":"Camera position."},"target":{"type":"array","items":{"type":"number"},"minItems":3,"maxItems":3,"description":"Point the camera looks at."},"fov":{"type":"number","description":"Vertical field of view in degrees. Default 38; 20 to 30 looks like a product shot."}}},"hasHandler":true,"hasExecute":true,"__source":"spec","executable":true,"handlerField":"execute","page":"/flevAgenticCAD/"},{"name":"render","kind":"act","impl":"imperative","description":"Render a polished image of the scene with shadows, environment lighting, and antialiasing. Optionally frame objects and pick a view first. Returns the image. The camera stays where the render was taken unless restore_camera is true. Keep width at or below 1600 for quick turnaround.","inputSchema":{"type":"object","properties":{"width":{"type":"integer","description":"Pixels. Default 1024."},"height":{"type":"integer","description":"Pixels. Default 3:4 of width."},"view":{"type":"string","enum":["perspective","front","back","left","right","top","bottom","iso","three_quarter","low","high"],"description":"Viewing direction for this render."},"frame":{"description":"\"all\", an object id/name, or a list: fit these before rendering.","anyOf":[{"type":"string"},{"type":"array","items":{"type":"string"}}]},"padding":{"type":"number","description":"Framing margin. Default 1.2."},"transparent":{"type":"boolean","description":"Transparent background (PNG). Default false."},"format":{"type":"string","enum":["png","jpeg"],"description":"Default png. jpeg is smaller."},"quality":{"type":"number","description":"JPEG quality 0.3 to 1. Default 0.92."},"supersample":{"type":"integer","description":"1 or 2. Default 2 (renders at double size and downsamples)."},"restore_camera":{"type":"boolean","description":"Put the camera back afterwards. Default false."}}},"hasHandler":true,"hasExecute":true,"__source":"spec","executable":true,"handlerField":"execute","page":"/flevAgenticCAD/"},{"name":"render_turntable","kind":"act","impl":"imperative","description":"Render several views evenly spaced around the scene or given objects, at one elevation. Good for checking a model from all sides. Restores the camera afterwards.","inputSchema":{"type":"object","properties":{"count":{"type":"integer","description":"Number of views. Default 4, max 12."},"elevation":{"type":"number","description":"Camera elevation in degrees above the horizon. Default 22."},"width":{"type":"integer","description":"Pixels per image. Default 640."},"height":{"type":"integer","description":"Default 3:4 of width."},"frame":{"description":"\"all\" or object ids/names.","anyOf":[{"type":"string"},{"type":"array","items":{"type":"string"}}]},"padding":{"type":"number","description":"Default 1.2."},"format":{"type":"string","enum":["png","jpeg"],"description":"Default jpeg."}}},"hasHandler":true,"hasExecute":true,"__source":"spec","executable":true,"handlerField":"execute","page":"/flevAgenticCAD/"},{"name":"export_model","kind":"act","impl":"imperative","description":"Export the scene (or selected objects) as a file the user downloads: glb (with materials, best for sharing), stl (for 3D printing), obj, or json (this studio's own format, reloadable with load_scene). Set download false to just get the size, or include_content true for json text.","inputSchema":{"type":"object","properties":{"format":{"type":"string","enum":["glb","stl","obj","json"],"description":"Default glb."},"ids":{"type":"array","items":{"type":"string"},"description":"Only these objects (world placement baked in). Omit for everything visible."},"filename":{"type":"string","description":"Without extension. Default is the scene name."},"download":{"type":"boolean","description":"Trigger a browser download for the user. Default true."},"include_content":{"type":"boolean","description":"For json: return the document text in the result. Default false."}}},"hasHandler":true,"hasExecute":true,"__source":"spec","executable":true,"handlerField":"execute","page":"/flevAgenticCAD/"},{"name":"load_scene","kind":"act","impl":"imperative","description":"Replace the current scene with a studio JSON document (from export_model format json). The previous scene stays in undo history.","inputSchema":{"type":"object","properties":{"scene":{"description":"The document as a JSON object or string.","anyOf":[{"type":"object"},{"type":"string"}]}},"required":["scene"]},"hasHandler":true,"hasExecute":true,"__source":"spec","executable":true,"handlerField":"execute","page":"/flevAgenticCAD/"},{"name":"new_scene","kind":"act","impl":"imperative","description":"Clear everything and start a fresh scene with the default studio lighting. The old scene stays in undo history.","inputSchema":{"type":"object","properties":{"name":{"type":"string","description":"Scene name."}}},"hasHandler":true,"hasExecute":true,"__source":"spec","executable":true,"handlerField":"execute","page":"/flevAgenticCAD/"},{"name":"set_scene_name","kind":"act","impl":"imperative","description":"Rename the scene (used for export filenames).","inputSchema":{"type":"object","properties":{"name":{"type":"string"}},"required":["name"]},"hasHandler":true,"hasExecute":true,"__source":"spec","executable":true,"handlerField":"execute","page":"/flevAgenticCAD/"},{"name":"undo","kind":"act","impl":"imperative","description":"Undo the last change(s).","inputSchema":{"type":"object","properties":{"steps":{"type":"integer","description":"Default 1."}}},"hasHandler":true,"hasExecute":true,"__source":"spec","executable":true,"handlerField":"execute","page":"/flevAgenticCAD/"},{"name":"redo","kind":"act","impl":"imperative","description":"Redo the last undone change(s).","inputSchema":{"type":"object","properties":{"steps":{"type":"integer","description":"Default 1."}}},"hasHandler":true,"hasExecute":true,"__source":"spec","executable":true,"handlerField":"execute","page":"/flevAgenticCAD/"},{"name":"get_history","kind":"answer","impl":"imperative","description":"List recent changes, newest last.","annotations":{"readOnlyHint":true,"untrustedContentHint":false},"inputSchema":{"type":"object","properties":{"limit":{"type":"integer","description":"Default 30."}}},"hasHandler":true,"hasExecute":true,"__source":"spec","executable":true,"handlerField":"execute","page":"/flevAgenticCAD/"}],"category":"Developer Tools","favicon":"/favicons/invitedpeak.github.io.svg","apiSurface":"spec","toolCount":45}}