{"ok":true,"site":{"host":"webmcphousedesign.netlify.app","url":"https://webmcphousedesign.netlify.app/","type":"live","desc":"Design a house together with an AI agent: a 3D floorplan editor exposing its live design through WebMCP, with one constraint engine refereeing human and agent alike.","tools":[{"name":"get_layout","kind":"answer","impl":"imperative","description":"Read the current floorplan. Defaults to a compact summary of rooms, areas and adjacency.","annotations":{"readOnlyHint":true},"inputSchema":{"type":"object","properties":{"detail":{"type":"string","enum":["summary","full"],"default":"summary","description":"summary returns rooms, areas and adjacency only; full returns every wall, opening and furniture item."}},"additionalProperties":false,"$schema":"http://json-schema.org/draft-07/schema#"},"hasHandler":true,"hasExecute":true,"__source":"spec","executable":true,"handlerField":"execute"},{"name":"get_selection","kind":"answer","impl":"imperative","description":"Read what the human currently has selected in the 3D scene.","annotations":{"readOnlyHint":true},"inputSchema":{"type":"object","properties":{},"additionalProperties":false,"$schema":"http://json-schema.org/draft-07/schema#"},"hasHandler":true,"hasExecute":true,"__source":"spec","executable":true,"handlerField":"execute"},{"name":"compute_areas","kind":"act","impl":"imperative","description":"Area per room, the total conditioned area, and each room's margin above its minimum.","annotations":{"readOnlyHint":true},"inputSchema":{"type":"object","properties":{"roomIds":{"type":"array","items":{"type":"string"},"description":"Omit to measure every room."}},"additionalProperties":false,"$schema":"http://json-schema.org/draft-07/schema#"},"hasHandler":true,"hasExecute":true,"__source":"spec","executable":true,"handlerField":"execute"},{"name":"validate_layout","kind":"act","impl":"imperative","description":"Check the plan against the simplified residential constraints and explain what breaks.","annotations":{"readOnlyHint":true},"inputSchema":{"type":"object","properties":{},"additionalProperties":false,"$schema":"http://json-schema.org/draft-07/schema#"},"hasHandler":true,"hasExecute":true,"__source":"spec","executable":true,"handlerField":"execute"},{"name":"get_camera","kind":"answer","impl":"imperative","description":"Where the camera is and what it is looking at, in plain language.","annotations":{"readOnlyHint":true},"inputSchema":{"type":"object","properties":{},"additionalProperties":false,"$schema":"http://json-schema.org/draft-07/schema#"},"hasHandler":true,"hasExecute":true,"__source":"spec","executable":true,"handlerField":"execute"},{"name":"list_templates","kind":"answer","impl":"imperative","description":"The starting templates a design can begin from, with which one is loaded now.","annotations":{"readOnlyHint":true},"inputSchema":{"type":"object","properties":{},"additionalProperties":false,"$schema":"http://json-schema.org/draft-07/schema#"},"hasHandler":true,"hasExecute":true,"__source":"spec","executable":true,"handlerField":"execute"},{"name":"start_from_template","kind":"act","impl":"imperative","description":"Start a design from a template. With floorCount, the first call sizes the house and each call fills the next floor.","annotations":{"readOnlyHint":false},"inputSchema":{"type":"object","properties":{"templateId":{"type":"string","description":"One of the ids from list_templates."},"floorCount":{"type":"integer","minimum":1,"maximum":3,"description":"Total floors for a brand-new design. Give it on the first call, then call once per floor: each call sets the next floor's template."}},"required":["templateId"],"additionalProperties":false,"$schema":"http://json-schema.org/draft-07/schema#"},"hasHandler":true,"hasExecute":true,"__source":"spec","executable":true,"handlerField":"execute"},{"name":"set_active_floor","kind":"act","impl":"imperative","description":"Switch which floor of a multi-floor design is being edited, for every tool and the human alike.","annotations":{"readOnlyHint":false},"inputSchema":{"type":"object","properties":{"floor":{"type":"integer","minimum":1,"description":"1-based floor number to edit; every tool then reads and writes that floor."}},"required":["floor"],"additionalProperties":false,"$schema":"http://json-schema.org/draft-07/schema#"},"hasHandler":true,"hasExecute":true,"__source":"spec","executable":true,"handlerField":"execute"},{"name":"add_room","kind":"act","impl":"imperative","description":"Add a room, optionally attached to an existing one so they share a wall.","annotations":{"readOnlyHint":false},"inputSchema":{"type":"object","properties":{"name":{"type":"string","description":"Human-facing name, e.g. \"Guest Bedroom\"."},"type":{"type":"string","enum":["bedroom","bathroom","kitchen","living","dining","hallway","closet","utility","garage"]},"widthIn":{"type":"number","description":"East-west size in inches; snapped to 6in."},"depthIn":{"type":"number","description":"North-south size in inches; snapped to 6in."},"attachTo":{"type":"object","properties":{"roomId":{"type":"string"},"side":{"type":"string","enum":["north","south","east","west"]}},"required":["roomId","side"],"additionalProperties":false,"description":"Place the room against an existing one, sharing the wall where they line up."}},"required":["name","type","widthIn","depthIn"],"additionalProperties":false,"$schema":"http://json-schema.org/draft-07/schema#"},"hasHandler":true,"hasExecute":true,"__source":"spec","executable":true,"handlerField":"execute"},{"name":"move_wall","kind":"act","impl":"imperative","description":"Move a wall perpendicular to itself, resizing every room that shares it.","annotations":{"readOnlyHint":false},"inputSchema":{"type":"object","properties":{"wallId":{"type":"string"},"distanceIn":{"type":"number","description":"Inches to move, snapped to the 6in grid."},"direction":{"type":"string","enum":["north","south","east","west"],"description":"Must be perpendicular to the wall."}},"required":["wallId","distanceIn","direction"],"additionalProperties":false,"$schema":"http://json-schema.org/draft-07/schema#"},"hasHandler":true,"hasExecute":true,"__source":"spec","executable":true,"handlerField":"execute"},{"name":"resize_room","kind":"act","impl":"imperative","description":"Set a room's width and/or depth. Convenience wrapper over move_wall.","annotations":{"readOnlyHint":false},"inputSchema":{"type":"object","properties":{"roomId":{"type":"string"},"widthIn":{"type":"number"},"depthIn":{"type":"number"}},"required":["roomId"],"additionalProperties":false,"$schema":"http://json-schema.org/draft-07/schema#"},"hasHandler":true,"hasExecute":true,"__source":"spec","executable":true,"handlerField":"execute"},{"name":"add_opening","kind":"act","impl":"imperative","description":"Cut a door, window or archway into a wall.","annotations":{"readOnlyHint":false},"inputSchema":{"type":"object","properties":{"wallId":{"type":"string"},"kind":{"type":"string","enum":["door","window","archway"]},"offsetIn":{"type":"number","description":"Inches along the wall from its start point."},"widthIn":{"type":"number"},"swing":{"type":"string","enum":["in-left","in-right","out-left","out-right","sliding","none"]}},"required":["wallId","kind","offsetIn","widthIn"],"additionalProperties":false,"$schema":"http://json-schema.org/draft-07/schema#"},"hasHandler":true,"hasExecute":true,"__source":"spec","executable":true,"handlerField":"execute"},{"name":"place_furniture","kind":"act","impl":"imperative","description":"Place a catalog item in a room; omit position to auto-place against a wall.","annotations":{"readOnlyHint":false},"inputSchema":{"type":"object","properties":{"roomId":{"type":"string"},"catalogId":{"type":"string","description":"Catalog key: queen-bed, sofa, tv-stand, table, bookshelf, chair, nightstand, dresser, wardrobe, desk, kitchen-island, counter, range, fridge, toilet, sink, tub, shower, washer, tv-wall (a wall-mounted screen: place just off a wall, rotated to face the room). Other ids render as a plain block."},"footprint":{"type":"object","properties":{"w":{"type":"number"},"d":{"type":"number"}},"required":["w","d"],"additionalProperties":false,"description":"Plan footprint in inches."},"position":{"type":"object","properties":{"x":{"type":"number"},"y":{"type":"number"}},"required":["x","y"],"additionalProperties":false,"description":"Omit to auto-place against the most sensible wall."},"rotation":{"type":"number","description":"Degrees a piece's front faces: 0 = south (plan bottom), 90 = west, 180 = north, 270 = east. Face it away from the wall it backs onto. Omitted on placement, it auto-faces into the room from the nearest wall."},"clearanceFrontIn":{"type":"number","description":"Approach space required in front of the piece."},"color":{"type":"string","description":"Finish for the primary surfaces, any CSS colour; omit for the default look."}},"required":["roomId","catalogId","footprint"],"additionalProperties":false,"$schema":"http://json-schema.org/draft-07/schema#"},"hasHandler":true,"hasExecute":true,"__source":"spec","executable":true,"handlerField":"execute"},{"name":"move_furniture","kind":"act","impl":"imperative","description":"Move or turn a piece already in the plan; dropping it in another room re-homes it.","annotations":{"readOnlyHint":false},"inputSchema":{"type":"object","properties":{"furnitureId":{"type":"string"},"position":{"type":"object","properties":{"x":{"type":"number"},"y":{"type":"number"}},"required":["x","y"],"additionalProperties":false,"description":"New centre in plan inches; the room it lands in is inferred."},"rotation":{"type":"number","description":"Degrees a piece's front faces: 0 = south (plan bottom), 90 = west, 180 = north, 270 = east. Face it away from the wall it backs onto. Omitted on placement, it auto-faces into the room from the nearest wall."}},"required":["furnitureId"],"additionalProperties":false,"$schema":"http://json-schema.org/draft-07/schema#"},"hasHandler":true,"hasExecute":true,"__source":"spec","executable":true,"handlerField":"execute"},{"name":"resize_furniture","kind":"act","impl":"imperative","description":"Change a placed piece's footprint where it stands; position and rotation stay put.","annotations":{"readOnlyHint":false},"inputSchema":{"type":"object","properties":{"furnitureId":{"type":"string"},"widthIn":{"type":"number","description":"New footprint width in inches; omit to keep the current width."},"depthIn":{"type":"number","description":"New footprint depth in inches; omit to keep the current depth."}},"required":["furnitureId"],"additionalProperties":false,"$schema":"http://json-schema.org/draft-07/schema#"},"hasHandler":true,"hasExecute":true,"__source":"spec","executable":true,"handlerField":"execute"},{"name":"update_opening","kind":"act","impl":"imperative","description":"Change a door, window or archway in place: widen it, convert it, or flip its swing.","annotations":{"readOnlyHint":false},"inputSchema":{"type":"object","properties":{"openingId":{"type":"string"},"widthIn":{"type":"number","description":"New clear width; rounds up to the 6in grid, grows about the centre."},"kind":{"type":"string","enum":["door","window","archway"]},"swing":{"type":"string","enum":["in-left","in-right","out-left","out-right","sliding","none"]}},"required":["openingId"],"additionalProperties":false,"$schema":"http://json-schema.org/draft-07/schema#"},"hasHandler":true,"hasExecute":true,"__source":"spec","executable":true,"handlerField":"execute"},{"name":"apply_edits","kind":"act","impl":"imperative","description":"Run several edits in one call -- furnish a whole room in a single round trip.","annotations":{"readOnlyHint":false},"inputSchema":{"type":"object","properties":{"edits":{"type":"array","items":{"type":"object","properties":{"action":{"type":"string"}},"required":["action"],"additionalProperties":true},"minItems":1,"maxItems":20,"description":"Each edit is {action, ...params}: the action names another write tool (place_furniture, move_furniture, resize_furniture, update_opening, add_opening, remove_element, move_wall, resize_room, add_room) and the params are that tool's. Runs in order; a failed edit reports its error and the rest continue."}},"required":["edits"],"additionalProperties":false,"$schema":"http://json-schema.org/draft-07/schema#"},"hasHandler":true,"hasExecute":true,"__source":"spec","executable":true,"handlerField":"execute"},{"name":"remove_element","kind":"act","impl":"imperative","description":"Remove a wall, room, opening or furniture item, cascading to what depends on it.","annotations":{"readOnlyHint":false},"inputSchema":{"type":"object","properties":{"elementId":{"type":"string","description":"A wall, room, opening or furniture id."}},"required":["elementId"],"additionalProperties":false,"$schema":"http://json-schema.org/draft-07/schema#"},"hasHandler":true,"hasExecute":true,"__source":"spec","executable":true,"handlerField":"execute"},{"name":"set_camera","kind":"act","impl":"imperative","description":"Move the camera. firstPerson with a target room walks the human through that space.","annotations":{"readOnlyHint":false},"inputSchema":{"type":"object","properties":{"mode":{"type":"string","enum":["top","iso","firstPerson"]},"targetRoomId":{"type":"string"},"description":{"type":"string"}},"required":["mode"],"additionalProperties":false,"$schema":"http://json-schema.org/draft-07/schema#"},"hasHandler":true,"hasExecute":true,"__source":"spec","executable":true,"handlerField":"execute"},{"name":"undo","kind":"act","impl":"imperative","description":"Step the plan back through the edit history.","annotations":{"readOnlyHint":false},"inputSchema":{"type":"object","properties":{"steps":{"type":"integer","exclusiveMinimum":0,"default":1}},"additionalProperties":false,"$schema":"http://json-schema.org/draft-07/schema#"},"hasHandler":true,"hasExecute":true,"__source":"spec","executable":true,"handlerField":"execute"},{"name":"propose_variants","kind":"act","impl":"imperative","description":"Offer 2-3 alternative layouts as ghosted overlays for the human to choose between.","annotations":{"readOnlyHint":false},"inputSchema":{"type":"object","properties":{"goal":{"type":"string","description":"What the alternatives should optimise for."},"variants":{"type":"array","items":{"type":"object","properties":{"summary":{"type":"string","description":"One line the human will read on the overlay."},"edits":{"type":"array","items":{"type":"object","properties":{"wallId":{"type":"string"},"distanceIn":{"type":"number"},"direction":{"type":"string","enum":["north","south","east","west"]}},"required":["wallId","distanceIn","direction"],"additionalProperties":false},"description":"Wall moves that define this alternative."}},"required":["summary","edits"],"additionalProperties":false},"minItems":1,"maxItems":3}},"required":["goal","variants"],"additionalProperties":false,"$schema":"http://json-schema.org/draft-07/schema#"},"hasHandler":true,"hasExecute":true,"__source":"spec","executable":true,"handlerField":"execute"}],"favicon":"/favicons/webmcphousedesign.netlify.app.svg","apiSurface":"spec","category":"Productivity & Business","toolCount":21}}