← WebMCP Directory

Tool tree

open-architect.vercel.app

Productivity & BusinessTools verified
Website
OpenArchitect — describe a home. An agent asks follow-ups, then draws a schematic floor plan on a live canvas. The same tools are exposed to browser agents via WebMCP.
Explore capabilities
    get_briefAnswer

    Read the current project brief: description, plot size, bedroom/bathroom counts, notes, and answers already collected.

    View tool JSON
    {
      "name": "get_brief",
      "kind": "answer",
      "impl": "imperative",
      "description": "Read the current project brief: description, plot size, bedroom/bathroom counts, notes, and answers already collected.",
      "inputSchema": {
        "type": "object",
        "properties": {},
        "additionalProperties": false
      }
    }
    get_design_rulesAnswer

    Return the house-making standards this studio enforces: NBC-aligned room sizes, doors, windows, and adjacency rules for living, dining, bedrooms, kitchen, bathrooms, and hallways.

    View tool JSON
    {
      "name": "get_design_rules",
      "kind": "answer",
      "impl": "imperative",
      "description": "Return the house-making standards this studio enforces: NBC-aligned room sizes, doors, windows, and adjacency rules for living, dining, bedrooms, kitchen, bathrooms, and hallways.",
      "inputSchema": {
        "type": "object",
        "properties": {},
        "additionalProperties": false
      }
    }
    get_standards_checkAnswer

    Return only the current standards-check issues (errors and warnings): room size minima, overlaps, openings, adjacency, missing porch/stairs/street, etc. Prefer this over get_floor_plan when you only need to know what is failing.

    View tool JSON
    {
      "name": "get_standards_check",
      "kind": "answer",
      "impl": "imperative",
      "description": "Return only the current standards-check issues (errors and warnings): room size minima, overlaps, openings, adjacency, missing porch/stairs/street, etc. Prefer this over get_floor_plan when you only need to know what is failing.",
      "inputSchema": {
        "type": "object",
        "properties": {},
        "additionalProperties": false
      }
    }
    update_briefAction

    Patch the project brief. Use this to store requirements from the conversation. If plotWidthM and plotHeightM are set, the canvas plot is resized to match.

    View tool JSON
    {
      "name": "update_brief",
      "kind": "act",
      "impl": "imperative",
      "description": "Patch the project brief. Use this to store requirements from the conversation. If plotWidthM and plotHeightM are set, the canvas plot is resized to match.",
      "inputSchema": {
        "type": "object",
        "properties": {
          "description": {
            "type": "string"
          },
          "plotWidthM": {
            "type": "number",
            "exclusiveMinimum": 0
          },
          "plotHeightM": {
            "type": "number",
            "exclusiveMinimum": 0
          },
          "bedroomCount": {
            "type": "integer",
            "minimum": 0,
            "maximum": 9007199254740991
          },
          "bathroomCount": {
            "type": "integer",
            "minimum": 0,
            "maximum": 9007199254740991
          },
          "notes": {
            "type": "array",
            "items": {
              "type": "string"
            }
          },
          "answers": {
            "type": "object",
            "propertyNames": {
              "type": "string"
            },
            "additionalProperties": {
              "type": "string"
            }
          }
        },
        "additionalProperties": false
      }
    }
    ask_userAction

    Ask the human one to six structured follow-up questions before drawing. Opens a modal on the OpenArchitect page and WAITS until they click Send answers. The questions are also in this tool's arguments for ChatGPT to display. When it returns, answers are already saved in the brief — continue with set_plot / apply_layout. Do not call apply_layout before this tool returns.

    View tool JSON
    {
      "name": "ask_user",
      "kind": "act",
      "impl": "imperative",
      "description": "Ask the human one to six structured follow-up questions before drawing. Opens a modal on the OpenArchitect page and WAITS until they click Send answers. The questions are also in this tool's arguments for ChatGPT to display. When it returns, answers are already saved in the brief — continue with set_plot / apply_layout. Do not call apply_layout before this tool returns.",
      "inputSchema": {
        "type": "object",
        "properties": {
          "questions": {
            "minItems": 1,
            "maxItems": 6,
            "type": "array",
            "items": {
              "type": "object",
              "properties": {
                "id": {
                  "type": "string",
                  "minLength": 1
                },
                "prompt": {
                  "type": "string",
                  "minLength": 1
                },
                "type": {
                  "type": "string",
                  "enum": [
                    "text",
                    "choice",
                    "number"
                  ]
                },
                "options": {
                  "type": "array",
                  "items": {
                    "type": "string"
                  }
                }
              },
              "required": [
                "id",
                "prompt",
                "type"
              ],
              "additionalProperties": false
            }
          }
        },
        "required": [
          "questions"
        ],
        "additionalProperties": false
      }
    }
    get_floor_planAnswer

    Return the full floor plan JSON plus validation issues (overlaps, NBC size minima, missing exterior windows, awkward adjacencies).

    View tool JSON
    {
      "name": "get_floor_plan",
      "kind": "answer",
      "impl": "imperative",
      "description": "Return the full floor plan JSON plus validation issues (overlaps, NBC size minima, missing exterior windows, awkward adjacencies).",
      "inputSchema": {
        "type": "object",
        "properties": {},
        "additionalProperties": false
      }
    }
    set_plotAction

    Set the overall rectangular plot size in meters. Origin is the top-left (northwest) corner. x increases east, y increases south.

    View tool JSON
    {
      "name": "set_plot",
      "kind": "act",
      "impl": "imperative",
      "description": "Set the overall rectangular plot size in meters. Origin is the top-left (northwest) corner. x increases east, y increases south.",
      "inputSchema": {
        "type": "object",
        "properties": {
          "width": {
            "type": "number",
            "exclusiveMinimum": 0,
            "description": "Plot width in meters"
          },
          "height": {
            "type": "number",
            "exclusiveMinimum": 0,
            "description": "Plot height in meters"
          }
        },
        "required": [
          "width",
          "height"
        ],
        "additionalProperties": false
      }
    }
    apply_layoutAction

    Replace rooms, openings, furniture, and the frontage street in one shot. Prefer this for the first draft. Include an entrance porch, a stairs area, and street.edge on the same side as the main door unless the user declined them. Room ids must be stable slugs (kitchen, bed-1, porch, stairs). Coordinates are meters on a 0.5 m grid.

    View tool JSON
    {
      "name": "apply_layout",
      "kind": "act",
      "impl": "imperative",
      "description": "Replace rooms, openings, furniture, and the frontage street in one shot. Prefer this for the first draft. Include an entrance porch, a stairs area, and street.edge on the same side as the main door unless the user declined them. Room ids must be stable slugs (kitchen, bed-1, porch, stairs). Coordinates are meters on a 0.5 m grid.",
      "inputSchema": {
        "type": "object",
        "properties": {
          "plot": {
            "type": "object",
            "properties": {
              "width": {
                "type": "number",
                "exclusiveMinimum": 0
              },
              "height": {
                "type": "number",
                "exclusiveMinimum": 0
              }
            },
            "required": [
              "width",
              "height"
            ],
            "additionalProperties": false
          },
          "street": {
            "anyOf": [
              {
                "type": "object",
                "properties": {
                  "edge": {
                    "type": "string",
                    "enum": [
                      "north",
                      "south",
                      "east",
                      "west"
                    ],
                    "description": "Plot edge the street runs along — the same side as the main entrance"
                  },
                  "width": {
                    "description": "Street carriageway width in meters",
                    "type": "number",
                    "exclusiveMinimum": 0
                  }
                },
                "required": [
                  "edge"
                ],
                "additionalProperties": false
              },
              {
                "type": "null"
              }
            ]
          },
          "rooms": {
            "minItems": 1,
            "type": "array",
            "items": {
              "type": "object",
              "properties": {
                "id": {
                  "description": "Stable id, e.g. kitchen or bed-1",
                  "type": "string",
                  "minLength": 1,
                  "maxLength": 48,
                  "pattern": "^[a-z][a-z0-9_-]*$"
                },
                "name": {
                  "type": "string",
                  "minLength": 1,
                  "description": "Human label shown on the canvas"
                },
                "type": {
                  "type": "string",
                  "enum": [
                    "bedroom",
                    "bathroom",
                    "kitchen",
                    "living",
                    "dining",
                    "hallway",
                    "closet",
                    "balcony",
                    "office",
                    "laundry",
                    "stairs",
                    "porch",
                    "other"
                  ]
                },
                "x": {
                  "type": "number",
                  "description": "Meters from the plot's left (west) edge"
                },
                "y": {
                  "type": "number",
                  "description": "Meters from the plot's top (north) edge"
                },
                "width": {
                  "type": "number",
                  "exclusiveMinimum": 0,
                  "description": "Room width in meters"
                },
                "height": {
                  "type": "number",
                  "exclusiveMinimum": 0,
                  "description": "Room height in meters"
                }
              },
              "required": [
                "name",
                "type",
                "x",
                "y",
                "width",
                "height"
              ],
              "additionalProperties": false
            }
          },
          "openings": {
            "type": "array",
            "items": {
              "type": "object",
              "properties": {
                "id": {
                  "type": "string",
                  "minLength": 1,
                  "maxLength": 48,
                  "pattern": "^[a-z][a-z0-9_-]*$"
                },
                "kind": {
                  "type": "string",
                  "enum": [
                    "door",
                    "window"
                  ]
                },
                "roomId": {
                  "type": "string",
                  "description": "Id of the room this opening belongs to"
                },
                "edge": {
                  "type": "string",
                  "enum": [
                    "north",
                    "south",
                    "east",
                    "west"
                  ],
                  "description": "Wall: north is top of the canvas"
                },
                "offset": {
                  "type": "number",
                  "minimum": 0,
                  "description": "Meters along the edge from its start (west for N/S, north for E/W)"
                },
                "width": {
                  "type": "number",
                  "exclusiveMinimum": 0,
                  "description": "Opening width in meters"
                }
              },
              "required": [
                "kind",
                "roomId",
                "edge",
                "offset",
                "width"
              ],
              "additionalProperties": false
            }
          },
          "furniture": {
            "type": "array",
            "items": {
              "type": "object",
              "properties": {
                "id": {
                  "type": "string",
                  "minLength": 1,
                  "maxLength": 48,
                  "pattern": "^[a-z][a-z0-9_-]*$"
                },
                "roomId": {
                  "type": "string"
                },
                "name": {
                  "type": "string",
                  "minLength": 1
                },
                "kind": {
                  "type": "string",
                  "minLength": 1,
                  "description": "bed, sofa, table, counter, toilet, sink, stove, wardrobe, desk, other"
                },
                "x": {
                  "type": "number",
                  "description": "Meters from the room's left edge"
                },
                "y": {
                  "type": "number",
                  "description": "Meters from the room's top edge"
                },
                "width": {
                  "type": "number",
                  "exclusiveMinimum": 0
                },
                "height": {
                  "type": "number",
                  "exclusiveMinimum": 0
                }
              },
              "required": [
                "roomId",
                "name",
                "kind",
                "x",
                "y",
                "width",
                "height"
              ],
              "additionalProperties": false
            }
          }
        },
        "required": [
          "rooms"
        ],
        "additionalProperties": false
      }
    }
    add_roomAction

    Add a single axis-aligned room rectangle. Coordinates are meters from the plot origin (top-left).

    View tool JSON
    {
      "name": "add_room",
      "kind": "act",
      "impl": "imperative",
      "description": "Add a single axis-aligned room rectangle. Coordinates are meters from the plot origin (top-left).",
      "inputSchema": {
        "type": "object",
        "properties": {
          "id": {
            "description": "Stable id, e.g. kitchen or bed-1",
            "type": "string",
            "minLength": 1,
            "maxLength": 48,
            "pattern": "^[a-z][a-z0-9_-]*$"
          },
          "name": {
            "type": "string",
            "minLength": 1,
            "description": "Human label shown on the canvas"
          },
          "type": {
            "type": "string",
            "enum": [
              "bedroom",
              "bathroom",
              "kitchen",
              "living",
              "dining",
              "hallway",
              "closet",
              "balcony",
              "office",
              "laundry",
              "stairs",
              "porch",
              "other"
            ]
          },
          "x": {
            "type": "number",
            "description": "Meters from the plot's left (west) edge"
          },
          "y": {
            "type": "number",
            "description": "Meters from the plot's top (north) edge"
          },
          "width": {
            "type": "number",
            "exclusiveMinimum": 0,
            "description": "Room width in meters"
          },
          "height": {
            "type": "number",
            "exclusiveMinimum": 0,
            "description": "Room height in meters"
          }
        },
        "required": [
          "name",
          "type",
          "x",
          "y",
          "width",
          "height"
        ],
        "additionalProperties": false
      }
    }
    update_roomAction

    Move or resize one room by id. Does not push shared walls into neighbors — use resize_wall for that.

    View tool JSON
    {
      "name": "update_room",
      "kind": "act",
      "impl": "imperative",
      "description": "Move or resize one room by id. Does not push shared walls into neighbors — use resize_wall for that.",
      "inputSchema": {
        "type": "object",
        "properties": {
          "id": {
            "type": "string"
          },
          "name": {
            "type": "string"
          },
          "type": {
            "type": "string",
            "enum": [
              "bedroom",
              "bathroom",
              "kitchen",
              "living",
              "dining",
              "hallway",
              "closet",
              "balcony",
              "office",
              "laundry",
              "stairs",
              "porch",
              "other"
            ]
          },
          "x": {
            "type": "number"
          },
          "y": {
            "type": "number"
          },
          "width": {
            "type": "number",
            "exclusiveMinimum": 0
          },
          "height": {
            "type": "number",
            "exclusiveMinimum": 0
          }
        },
        "required": [
          "id"
        ],
        "additionalProperties": false
      }
    }
    remove_roomAction

    Remove a room and any openings or furniture attached to it.

    View tool JSON
    {
      "name": "remove_room",
      "kind": "act",
      "impl": "imperative",
      "description": "Remove a room and any openings or furniture attached to it.",
      "inputSchema": {
        "type": "object",
        "properties": {
          "id": {
            "type": "string"
          }
        },
        "required": [
          "id"
        ],
        "additionalProperties": false
      }
    }
    add_openingAction

    Add a door or window on a room edge. offset is meters from the start of that edge (west end for north/south, north end for east/west).

    View tool JSON
    {
      "name": "add_opening",
      "kind": "act",
      "impl": "imperative",
      "description": "Add a door or window on a room edge. offset is meters from the start of that edge (west end for north/south, north end for east/west).",
      "inputSchema": {
        "type": "object",
        "properties": {
          "id": {
            "type": "string",
            "minLength": 1,
            "maxLength": 48,
            "pattern": "^[a-z][a-z0-9_-]*$"
          },
          "kind": {
            "type": "string",
            "enum": [
              "door",
              "window"
            ]
          },
          "roomId": {
            "type": "string",
            "description": "Id of the room this opening belongs to"
          },
          "edge": {
            "type": "string",
            "enum": [
              "north",
              "south",
              "east",
              "west"
            ],
            "description": "Wall: north is top of the canvas"
          },
          "offset": {
            "type": "number",
            "minimum": 0,
            "description": "Meters along the edge from its start (west for N/S, north for E/W)"
          },
          "width": {
            "type": "number",
            "exclusiveMinimum": 0,
            "description": "Opening width in meters"
          }
        },
        "required": [
          "kind",
          "roomId",
          "edge",
          "offset",
          "width"
        ],
        "additionalProperties": false
      }
    }
    remove_openingAction

    Remove a door or window by id.

    View tool JSON
    {
      "name": "remove_opening",
      "kind": "act",
      "impl": "imperative",
      "description": "Remove a door or window by id.",
      "inputSchema": {
        "type": "object",
        "properties": {
          "id": {
            "type": "string"
          }
        },
        "required": [
          "id"
        ],
        "additionalProperties": false
      }
    }
    add_furnitureAction

    Add a labeled furniture block inside a room. x/y are relative to the room origin, not the plot.

    View tool JSON
    {
      "name": "add_furniture",
      "kind": "act",
      "impl": "imperative",
      "description": "Add a labeled furniture block inside a room. x/y are relative to the room origin, not the plot.",
      "inputSchema": {
        "type": "object",
        "properties": {
          "id": {
            "type": "string",
            "minLength": 1,
            "maxLength": 48,
            "pattern": "^[a-z][a-z0-9_-]*$"
          },
          "roomId": {
            "type": "string"
          },
          "name": {
            "type": "string",
            "minLength": 1
          },
          "kind": {
            "type": "string",
            "minLength": 1,
            "description": "bed, sofa, table, counter, toilet, sink, stove, wardrobe, desk, other"
          },
          "x": {
            "type": "number",
            "description": "Meters from the room's left edge"
          },
          "y": {
            "type": "number",
            "description": "Meters from the room's top edge"
          },
          "width": {
            "type": "number",
            "exclusiveMinimum": 0
          },
          "height": {
            "type": "number",
            "exclusiveMinimum": 0
          }
        },
        "required": [
          "roomId",
          "name",
          "kind",
          "x",
          "y",
          "width",
          "height"
        ],
        "additionalProperties": false
      }
    }
    remove_furnitureAction

    Remove a furniture item by id.

    View tool JSON
    {
      "name": "remove_furniture",
      "kind": "act",
      "impl": "imperative",
      "description": "Remove a furniture item by id.",
      "inputSchema": {
        "type": "object",
        "properties": {
          "id": {
            "type": "string"
          }
        },
        "required": [
          "id"
        ],
        "additionalProperties": false
      }
    }
    resize_wallAction

    Move one wall of a room. Neighbors that share that wall move with it. Prefer this over update_room when stretching a room against another. Provide position (plot meters) or delta (positive = east/south).

    View tool JSON
    {
      "name": "resize_wall",
      "kind": "act",
      "impl": "imperative",
      "description": "Move one wall of a room. Neighbors that share that wall move with it. Prefer this over update_room when stretching a room against another. Provide position (plot meters) or delta (positive = east/south).",
      "inputSchema": {
        "type": "object",
        "properties": {
          "roomId": {
            "type": "string",
            "description": "Room whose wall to move"
          },
          "edge": {
            "type": "string",
            "enum": [
              "north",
              "south",
              "east",
              "west"
            ],
            "description": "Which wall: north is the top of the canvas, east is the right"
          },
          "position": {
            "description": "New plot coordinate of that wall in meters (x for east/west, y for north/south)",
            "type": "number"
          },
          "delta": {
            "description": "Meters to shift the wall from where it is now. Positive moves east or south.",
            "type": "number"
          }
        },
        "required": [
          "roomId",
          "edge"
        ],
        "additionalProperties": false
      }
    }
    replace_furnitureAction

    Swap an existing furniture piece for a catalog object (bed, sofa, table, desk, wardrobe, counter, stove, sink, fridge, toilet, chair). Keeps the same id and recenters in place.

    View tool JSON
    {
      "name": "replace_furniture",
      "kind": "act",
      "impl": "imperative",
      "description": "Swap an existing furniture piece for a catalog object (bed, sofa, table, desk, wardrobe, counter, stove, sink, fridge, toilet, chair). Keeps the same id and recenters in place.",
      "inputSchema": {
        "type": "object",
        "properties": {
          "id": {
            "type": "string",
            "description": "Furniture id from get_floor_plan"
          },
          "kind": {
            "type": "string",
            "minLength": 1,
            "description": "Catalog kind: bed, sofa, table, desk, wardrobe, counter, stove, sink, fridge, toilet, chair"
          }
        },
        "required": [
          "id",
          "kind"
        ],
        "additionalProperties": false
      }
    }
    move_furnitureAction

    Move furniture inside its room. x/y are meters from the room's top-left, not the plot.

    View tool JSON
    {
      "name": "move_furniture",
      "kind": "act",
      "impl": "imperative",
      "description": "Move furniture inside its room. x/y are meters from the room's top-left, not the plot.",
      "inputSchema": {
        "type": "object",
        "properties": {
          "id": {
            "type": "string"
          },
          "x": {
            "type": "number",
            "description": "Meters from the room's left (west) edge"
          },
          "y": {
            "type": "number",
            "description": "Meters from the room's top (north) edge"
          }
        },
        "required": [
          "id",
          "x",
          "y"
        ],
        "additionalProperties": false
      }
    }
    resize_furnitureAction

    Change a furniture block's width and height in meters.

    View tool JSON
    {
      "name": "resize_furniture",
      "kind": "act",
      "impl": "imperative",
      "description": "Change a furniture block's width and height in meters.",
      "inputSchema": {
        "type": "object",
        "properties": {
          "id": {
            "type": "string"
          },
          "width": {
            "type": "number",
            "exclusiveMinimum": 0,
            "description": "New width in meters"
          },
          "height": {
            "type": "number",
            "exclusiveMinimum": 0,
            "description": "New height in meters"
          }
        },
        "required": [
          "id",
          "width",
          "height"
        ],
        "additionalProperties": false
      }
    }
    replace_openingAction

    Change an existing opening between door and window without moving it.

    View tool JSON
    {
      "name": "replace_opening",
      "kind": "act",
      "impl": "imperative",
      "description": "Change an existing opening between door and window without moving it.",
      "inputSchema": {
        "type": "object",
        "properties": {
          "id": {
            "type": "string",
            "description": "Door or window id from get_floor_plan"
          },
          "kind": {
            "type": "string",
            "enum": [
              "door",
              "window"
            ],
            "description": "door or window"
          }
        },
        "required": [
          "id",
          "kind"
        ],
        "additionalProperties": false
      }
    }
    move_openingAction

    Slide a door or window along its wall, or onto another wall of the same room. offset is meters from the start of that edge (west for N/S, north for E/W).

    View tool JSON
    {
      "name": "move_opening",
      "kind": "act",
      "impl": "imperative",
      "description": "Slide a door or window along its wall, or onto another wall of the same room. offset is meters from the start of that edge (west for N/S, north for E/W).",
      "inputSchema": {
        "type": "object",
        "properties": {
          "id": {
            "type": "string",
            "description": "Door or window id from get_floor_plan"
          },
          "offset": {
            "type": "number",
            "minimum": 0,
            "description": "Meters along the edge from its start (west for N/S, north for E/W)"
          },
          "edge": {
            "description": "Move onto another wall of the same room. Omit to stay on the current wall.",
            "type": "string",
            "enum": [
              "north",
              "south",
              "east",
              "west"
            ]
          }
        },
        "required": [
          "id",
          "offset"
        ],
        "additionalProperties": false
      }
    }
    resize_openingAction

    Change a door or window width in meters along the wall.

    View tool JSON
    {
      "name": "resize_opening",
      "kind": "act",
      "impl": "imperative",
      "description": "Change a door or window width in meters along the wall.",
      "inputSchema": {
        "type": "object",
        "properties": {
          "id": {
            "type": "string",
            "description": "Door or window id from get_floor_plan"
          },
          "width": {
            "type": "number",
            "exclusiveMinimum": 0,
            "description": "New opening width in meters along the wall"
          }
        },
        "required": [
          "id",
          "width"
        ],
        "additionalProperties": false
      }
    }
    export_pngAction

    Download the current floor plan as a PNG image in the user's browser. Optional filename (extension added automatically).

    View tool JSON
    {
      "name": "export_png",
      "kind": "act",
      "impl": "imperative",
      "description": "Download the current floor plan as a PNG image in the user's browser. Optional filename (extension added automatically).",
      "inputSchema": {
        "type": "object",
        "properties": {
          "filename": {
            "description": "Download name without path, e.g. 3bhk-ground-floor. Extension is added.",
            "type": "string"
          }
        },
        "additionalProperties": false
      }
    }
    export_pdfAction

    Download the current floor plan as a PDF in the user's browser. Optional filename (extension added automatically).

    View tool JSON
    {
      "name": "export_pdf",
      "kind": "act",
      "impl": "imperative",
      "description": "Download the current floor plan as a PDF in the user's browser. Optional filename (extension added automatically).",
      "inputSchema": {
        "type": "object",
        "properties": {
          "filename": {
            "description": "Download name without path, e.g. 3bhk-ground-floor. Extension is added.",
            "type": "string"
          }
        },
        "additionalProperties": false
      }
    }
    export_projectAction

    Download the current brief + floor plan as an OpenArchitect JSON project file the user can re-import later. Optional filename.

    View tool JSON
    {
      "name": "export_project",
      "kind": "act",
      "impl": "imperative",
      "description": "Download the current brief + floor plan as an OpenArchitect JSON project file the user can re-import later. Optional filename.",
      "inputSchema": {
        "type": "object",
        "properties": {
          "filename": {
            "description": "Download name without path, e.g. 3bhk-ground-floor. Extension is added.",
            "type": "string"
          }
        },
        "additionalProperties": false
      }
    }
    import_projectAction

    Replace the canvas with a project JSON payload (plan required; brief optional). Accepts OpenArchitect exports or a bare plan object.

    View tool JSON
    {
      "name": "import_project",
      "kind": "act",
      "impl": "imperative",
      "description": "Replace the canvas with a project JSON payload (plan required; brief optional). Accepts OpenArchitect exports or a bare plan object.",
      "inputSchema": {
        "type": "object",
        "properties": {
          "version": {
            "type": "number",
            "const": 1
          },
          "kind": {
            "type": "string",
            "const": "openarchitect"
          },
          "brief": {
            "type": "object",
            "properties": {
              "description": {
                "type": "string"
              },
              "plotWidthM": {
                "type": "number"
              },
              "plotHeightM": {
                "type": "number"
              },
              "bedroomCount": {
                "type": "number"
              },
              "bathroomCount": {
                "type": "number"
              },
              "notes": {
                "type": "array",
                "items": {
                  "type": "string"
                }
              },
              "answers": {
                "type": "object",
                "propertyNames": {
                  "type": "string"
                },
                "additionalProperties": {
                  "type": "string"
                }
              }
            },
            "required": [
              "description",
              "notes",
              "answers"
            ],
            "additionalProperties": false
          },
          "plan": {
            "type": "object",
            "properties": {
              "units": {
                "type": "string",
                "const": "m"
              },
              "gridSize": {
                "type": "number",
                "exclusiveMinimum": 0
              },
              "plot": {
                "type": "object",
                "properties": {
                  "width": {
                    "type": "number",
                    "exclusiveMinimum": 0
                  },
                  "height": {
                    "type": "number",
                    "exclusiveMinimum": 0
                  }
                },
                "required": [
                  "width",
                  "height"
                ],
                "additionalProperties": false
              },
              "street": {
                "anyOf": [
                  {
                    "type": "object",
                    "properties": {
                      "edge": {
                        "type": "string",
                        "enum": [
                          "north",
                          "south",
                          "east",
                          "west"
                        ]
                      },
                      "width": {
                        "type": "number",
                        "exclusiveMinimum": 0
                      }
                    },
                    "required": [
                      "edge",
                      "width"
                    ],
                    "additionalProperties": false
                  },
                  {
                    "type": "null"
                  }
                ]
              },
              "rooms": {
                "type": "array",
                "items": {
                  "type": "object",
                  "properties": {
                    "id": {
                      "type": "string",
                      "minLength": 1
                    },
                    "name": {
                      "type": "string",
                      "minLength": 1,
                      "description": "Human label shown on the canvas"
                    },
                    "type": {
                      "type": "string",
                      "enum": [
                        "bedroom",
                        "bathroom",
                        "kitchen",
                        "living",
                        "dining",
                        "hallway",
                        "closet",
                        "balcony",
                        "office",
                        "laundry",
                        "stairs",
                        "porch",
                        "other"
                      ]
                    },
                    "x": {
                      "type": "number",
                      "description": "Meters from the plot's left (west) edge"
                    },
                    "y": {
                      "type": "number",
                      "description": "Meters from the plot's top (north) edge"
                    },
                    "width": {
                      "type": "number",
                      "exclusiveMinimum": 0,
                      "description": "Room width in meters"
                    },
                    "height": {
                      "type": "number",
                      "exclusiveMinimum": 0,
                      "description": "Room height in meters"
                    }
                  },
                  "required": [
                    "id",
                    "name",
                    "type",
                    "x",
                    "y",
                    "width",
                    "height"
                  ],
                  "additionalProperties": false
                }
              },
              "openings": {
                "type": "array",
                "items": {
                  "type": "object",
                  "properties": {
                    "id": {
                      "type": "string",
                      "minLength": 1
                    },
                    "kind": {
                      "type": "string",
                      "enum": [
                        "door",
                        "window"
                      ]
                    },
                    "roomId": {
                      "type": "string",
                      "description": "Id of the room this opening belongs to"
                    },
                    "edge": {
                      "type": "string",
                      "enum": [
                        "north",
                        "south",
                        "east",
                        "west"
                      ],
                      "description": "Wall: north is top of the canvas"
                    },
                    "offset": {
                      "type": "number",
                      "minimum": 0,
                      "description": "Meters along the edge from its start (west for N/S, north for E/W)"
                    },
                    "width": {
                      "type": "number",
                      "exclusiveMinimum": 0,
                      "description": "Opening width in meters"
                    }
                  },
                  "required": [
                    "id",
                    "kind",
                    "roomId",
                    "edge",
                    "offset",
                    "width"
                  ],
                  "additionalProperties": false
                }
              },
              "furniture": {
                "type": "array",
                "items": {
                  "type": "object",
                  "properties": {
                    "id": {
                      "type": "string",
                      "minLength": 1
                    },
                    "roomId": {
                      "type": "string"
                    },
                    "name": {
                      "type": "string",
                      "minLength": 1
                    },
                    "kind": {
                      "type": "string",
                      "minLength": 1,
                      "description": "bed, sofa, table, counter, toilet, sink, stove, wardrobe, desk, other"
                    },
                    "x": {
                      "type": "number",
                      "description": "Meters from the room's left edge"
                    },
                    "y": {
                      "type": "number",
                      "description": "Meters from the room's top edge"
                    },
                    "width": {
                      "type": "number",
                      "exclusiveMinimum": 0
                    },
                    "height": {
                      "type": "number",
                      "exclusiveMinimum": 0
                    }
                  },
                  "required": [
                    "id",
                    "roomId",
                    "name",
                    "kind",
                    "x",
                    "y",
                    "width",
                    "height"
                  ],
                  "additionalProperties": false
                }
              }
            },
            "required": [
              "units",
              "gridSize",
              "plot",
              "rooms",
              "openings",
              "furniture"
            ],
            "additionalProperties": false
          }
        },
        "required": [
          "plan"
        ],
        "additionalProperties": false
      }
    }
    set_display_layersAction

    Toggle canvas display layers: roomColors (fill colors), doors (door openings), and objects (furniture/fixtures). Pass only the layers you want to change. Does not modify the floor plan data.

    View tool JSON
    {
      "name": "set_display_layers",
      "kind": "act",
      "impl": "imperative",
      "description": "Toggle canvas display layers: roomColors (fill colors), doors (door openings), and objects (furniture/fixtures). Pass only the layers you want to change. Does not modify the floor plan data.",
      "inputSchema": {
        "type": "object",
        "properties": {
          "roomColors": {
            "description": "Show or hide room fill colors on the 2D/3D canvas.",
            "type": "boolean"
          },
          "doors": {
            "description": "Show or hide doors on walls (windows stay visible).",
            "type": "boolean"
          },
          "objects": {
            "description": "Show or hide furniture and fixture blocks.",
            "type": "boolean"
          }
        },
        "additionalProperties": false
      }
    }
    generate_3dAction

    Build an interactive 3D dollhouse from the current floor plan (extruded rooms, walls, doors, windows, furniture). Opens the 3D viewer so the user can orbit it and download a GLB. Optional filename for the GLB. Call this when the user asks to see the house in 3D, generate 3D, or export a 3D model.

    View tool JSON
    {
      "name": "generate_3d",
      "kind": "act",
      "impl": "imperative",
      "description": "Build an interactive 3D dollhouse from the current floor plan (extruded rooms, walls, doors, windows, furniture). Opens the 3D viewer so the user can orbit it and download a GLB. Optional filename for the GLB. Call this when the user asks to see the house in 3D, generate 3D, or export a 3D model.",
      "inputSchema": {
        "type": "object",
        "properties": {
          "filename": {
            "description": "Download name without path, e.g. 3bhk-ground-floor. Extension is added.",
            "type": "string"
          }
        },
        "additionalProperties": false
      }
    }