add_door
Add a door on a wall. t is the position of the door CENTER along the wall (0..1). Default width 0.9 m, height 2.1 m; a door wider than 1.2 m is built as a double door with two leaves. The vano is clamped so it always…
wallId: string, t: number, width: number?, height: number?, hinge: string?, side: string?
add_room
Add a room: a metric rectangle (x, y = top-left corner, w, h in meters) with a label and floor finish (oak | tile | carpet | concrete).
x: number, y: number, w: number, h: number, label: string, floor: string?
add_wall
Add a wall segment from (ax,ay) to (bx,by) in meters. Coordinates snap to a 5 cm grid. Default thickness 0.15 m (use 0.1 for interior), height 2.7 m.
ax: number, ay: number, bx: number, by: number, thickness: number?, height: number?
add_window
Add a window on a wall. t is the position of the window CENTER along the wall (0..1). Default width 1.2 m, sill 0.9 m, height 1.2 m. The vano is clamped to fit.
wallId: string, t: number, width: number?, sill: number?, height: number?
build_3d
Raise the plan into 3D: extrudes walls with real openings, resolves corner joints, builds furniture, and switches the human's view to the 3D scene. Call after drawing so the user sees the result.
calibrate_underlay
Scale the loaded blueprint image to real-world meters. Give two points on the image as fractions (u, v in 0..1; u = right, v = down) and the REAL distance between them in meters (e.g. a dimension printed on the plan).…
u1: number, v1: number, u2: number, v2: number, meters: number, opacity: number?
clear_model
Clear the whole plan (walls, openings, rooms, furniture, notes). Use when the user asks to start over.
define_item_kind
Create a piece of furniture that is NOT in the catalogue, then place it with place_item. Use this whenever the plan draws something the catalogue does not have, or draws it at a different size — a corner bath, an…
kind: string, label: string, w: number, d: number, h: number, color: string?, category: string?, parts: array?
edit_wall
Move endpoints or change thickness/height of an existing wall (by id). Endpoints snap to 5 cm.
id: string, ax: number?, ay: number?, bx: number?, by: number?, thickness: number?, height: number?
get_editor_stateread-only
Read what the human is doing right now: 2D/3D view, camera mode, selected wall/item/room, current draw mode.
get_issuesread-only
Run the constraint checker over the plan. Detects: too-short walls, loose ends, collinear overlaps, mid-span crossings, openings overflowing their wall or overlapping each other, walls ending inside an opening…
get_item_catalogread-only
List the furniture catalog: kind, label, footprint (width × depth in meters) and height.
get_modelread-only
Read the full floor plan: walls (endpoints, thickness, height), openings (doors/windows with position along their wall), rooms (metric rects with labels), furniture, and plan name. All units are meters.
get_notesread-only
Read all notes left on the plan by the human and by agents.
get_supplier_catalogread-onlyuntrusted content
Read the furniture catalogue published by the PARTNER ORIGIN (Nordika) as its own WebMCP tools — sku, name, category, real footprint in metres, price and stock. Alza discovers those tools with getTools({fromOrigins})…
category: string?, maxPrice: number?, maxWidth: number?, inStock: boolean?
get_underlayread-only
Read the blueprint underlay: whether a reference plan image is loaded, the world rectangle it covers (metres), the mapping from image fractions to world coordinates — and the PROTOCOL for tracing it. Call this FIRST…
leave_note
Leave a note on the plan for the human (or read theirs): design rationale, questions, measurements to verify. Notes are visible in the Notes panel.
text: string
measureread-only
Measure a distance: between two points (x1,y1)-(x2,y2), or the length of a wall by id. Returns meters.
x1: number?, y1: number?, x2: number?, y2: number?, wallId: string?
move_item
Move or rotate a furniture item by id or kind (e.g. "sofa"). Same rotation convention as place_item: 0 faces +y, 90 faces +x, 180 faces -y, 270 faces -x.
id: string, x: number?, y: number?, rotation: number?
move_opening
Move a door or window along its wall to a new center position t (0..1). Clamped to fit.
id: string, t: number
place_item
Place furniture from the catalog at (x, y) = center in meters. rotation (degrees, counterclockwise) sets which way the piece FACES: 0 = faces +y (down/south on the plan), 90 = faces +x (right/east), 180 = faces -y…
kind: string, x: number, y: number, rotation: number?
place_supplier_product
Buy-in-place: fetch one product from the partner origin by sku, add it to this plan's catalogue at the supplier's REAL dimensions, and place it at (x, y) = centre in metres with the usual rotation convention. The…
sku: string, x: number, y: number, rotation: number?
remove_item
Remove a furniture item by id or kind.
id: string
remove_opening
Remove a door or window by id.
id: string
remove_room
Remove a room by id or label.
id: string
remove_wall
Remove a wall by id. Its doors and windows are removed too.
id: string
set_camera
Move the 3D camera: "orbit" (default 3/4 view), "top" (plan view from above), "walk" (first-person at 1.6 m — the user walks with WASD). Implies switching to 3D.
mode: string
set_door_swing
Change how an existing door opens: hinge ("a" | "b" — which jamb carries the hinges) and/or side ("left" | "right" — which way the leaf swings, walking the wall from its A endpoint to its B endpoint). Re-run build_3d…
id: string, hinge: string?, side: string?
set_doors
Swing the door leaves in the 3D scene open or shut (build_3d must have run). state: "open", "closed" or "toggle". Pass an opening id to act on one door, or omit it to act on every door in the plan. The human can do…
state: string, id: string?
set_plan_name
Rename the plan.
name: string
update_room
Update a room by id or label (e.g. "bedroom"): move, resize, relabel, or change floor finish.
id: string, x: number?, y: number?, w: number?, h: number?, label: string?, floor: string?