← WebMCP Directory

Tool tree

hearth.yadneshsalvi.com

CommerceTools verified
Website
hearth.yadneshsalvi.com exposes WebMCP tools to AI agents.
Explore capabilities
    apply_paletteAction

    Applies a palette preset to a room or the whole home: wall colour, floor material and the textile family used for re-tinted fabrics. Presets: warm-clay, sage-linen, dusk, nordic, terrazzo, ochre-sun.

    View tool JSON
    {
      "name": "apply_palette",
      "kind": "act",
      "impl": "imperative",
      "description": "Applies a palette preset to a room or the whole home: wall colour, floor material and the textile family used for re-tinted fabrics. Presets: warm-clay, sage-linen, dusk, nordic, terrazzo, ochre-sun.",
      "inputSchema": {
        "type": "object",
        "properties": {
          "palette": {
            "type": "string",
            "enum": [
              "warm-clay",
              "sage-linen",
              "dusk",
              "nordic",
              "terrazzo",
              "ochre-sun"
            ],
            "description": "Palette preset id."
          },
          "room": {
            "type": "string",
            "minLength": 1,
            "description": "Room id or name, e.g. living or Living Room. Defaults to the active room."
          },
          "scope": {
            "default": "room",
            "description": "Apply to one room or the whole home; default room.",
            "type": "string",
            "enum": [
              "room",
              "home"
            ]
          }
        },
        "required": [
          "palette"
        ],
        "additionalProperties": false
      }
    }
    arrange_roomAction

    Re-arranges all unlocked furniture in a room in one animated pass. Styles: conversation (seating faces each other around a focal point), media (seating faces the TV or media wall), open (maximum clear floor and walkways), work (desk by the window, storage on the walls). Keeps door swings and clearances free and reports what moved with the conflict count before and after.

    View tool JSON
    {
      "name": "arrange_room",
      "kind": "act",
      "impl": "imperative",
      "description": "Re-arranges all unlocked furniture in a room in one animated pass. Styles: conversation (seating faces each other around a focal point), media (seating faces the TV or media wall), open (maximum clear floor and walkways), work (desk by the window, storage on the walls). Keeps door swings and clearances free and reports what moved with the conflict count before and after.",
      "inputSchema": {
        "type": "object",
        "properties": {
          "room": {
            "type": "string",
            "minLength": 1,
            "description": "Room id or name, e.g. living or Living Room. Defaults to the active room."
          },
          "style": {
            "type": "string",
            "enum": [
              "conversation",
              "media",
              "open",
              "work"
            ],
            "description": "Arrangement style: conversation, media, open or work."
          },
          "keep_locked": {
            "default": true,
            "description": "Keep locked furniture in place; default true.",
            "type": "boolean"
          },
          "focus": {
            "description": "Optional focal point: an item id or name (e.g. the fireplace or TV) or window:<id>.",
            "type": "string",
            "minLength": 1
          }
        },
        "required": [
          "style"
        ],
        "additionalProperties": false
      }
    }
    clear_homeAction

    Removes every item from every room after the human confirms in a dialog on the page. The removed layout is kept so restore_furniture (or undo) can bring it back. Returns cancelled if the human declines.

    View tool JSON
    {
      "name": "clear_home",
      "kind": "act",
      "impl": "imperative",
      "description": "Removes every item from every room after the human confirms in a dialog on the page. The removed layout is kept so restore_furniture (or undo) can bring it back. Returns cancelled if the human declines.",
      "inputSchema": {
        "type": "object",
        "properties": {},
        "additionalProperties": false
      }
    }
    clear_roomAction

    Removes every item from a room after the human confirms in a dialog on the page. The removed layout is kept so restore_furniture (or undo) can bring it back. Returns cancelled if the human declines.

    View tool JSON
    {
      "name": "clear_room",
      "kind": "act",
      "impl": "imperative",
      "description": "Removes every item from a room after the human confirms in a dialog on the page. The removed layout is kept so restore_furniture (or undo) can bring it back. Returns cancelled if the human declines.",
      "inputSchema": {
        "type": "object",
        "properties": {
          "room": {
            "type": "string",
            "minLength": 1,
            "description": "Room id or name, e.g. living or Living Room. Defaults to the active room."
          }
        },
        "additionalProperties": false
      }
    }
    export_design_boardAction

    Creates a design board PNG for a room: dollhouse render, plan view, palette swatches and an itemised list with prices and the total, then starts the download in the page. Use it to present or share a finished layout.

    View tool JSON
    {
      "name": "export_design_board",
      "kind": "act",
      "impl": "imperative",
      "description": "Creates a design board PNG for a room: dollhouse render, plan view, palette swatches and an itemised list with prices and the total, then starts the download in the page. Use it to present or share a finished layout.",
      "inputSchema": {
        "type": "object",
        "properties": {
          "room": {
            "type": "string",
            "minLength": 1,
            "description": "Room id or name, e.g. living or Living Room. Defaults to the active room."
          },
          "title": {
            "description": "Board title (default the room name).",
            "type": "string",
            "maxLength": 100
          }
        },
        "additionalProperties": false
      }
    }
    get_cartAnswer

    The shopping cart: each line with product, colorway, quantity, unit and line price in USD, the subtotal, the design budget and how much of it remains, and whether checkout is available. Lines note which placed item they belong to.

    View tool JSON
    {
      "name": "get_cart",
      "kind": "answer",
      "impl": "imperative",
      "description": "The shopping cart: each line with product, colorway, quantity, unit and line price in USD, the subtotal, the design budget and how much of it remains, and whether checkout is available. Lines note which placed item they belong to.",
      "inputSchema": {
        "type": "object",
        "properties": {},
        "additionalProperties": false
      }
    }
    get_conflictsAnswer

    Lists layout problems in a room or the whole home: overlapping items, items outside the room, missing clearance in front of seating, beds and desks, blocked door swings, pinched traffic paths and, when accessibility mode is on, paths under 90 cm and missing 150 cm turning circles. Each conflict names the items involved and a concrete fix in cm.

    View tool JSON
    {
      "name": "get_conflicts",
      "kind": "answer",
      "impl": "imperative",
      "description": "Lists layout problems in a room or the whole home: overlapping items, items outside the room, missing clearance in front of seating, beds and desks, blocked door swings, pinched traffic paths and, when accessibility mode is on, paths under 90 cm and missing 150 cm turning circles. Each conflict names the items involved and a concrete fix in cm.",
      "inputSchema": {
        "type": "object",
        "properties": {
          "room": {
            "description": "Room id or name, or all for the whole home. Defaults to the active room.",
            "type": "string",
            "minLength": 1
          }
        },
        "additionalProperties": false
      }
    }
    get_design_reportAnswer

    Design critique of a room scored 0–10 on balance, focal point, conversation seating, lighting coverage, storage and traffic flow, with an overall score out of 100 and the top three improvements. Use it to review a layout or to explain why a room feels off.

    View tool JSON
    {
      "name": "get_design_report",
      "kind": "answer",
      "impl": "imperative",
      "description": "Design critique of a room scored 0–10 on balance, focal point, conversation seating, lighting coverage, storage and traffic flow, with an overall score out of 100 and the top three improvements. Use it to review a layout or to explain why a room feels off.",
      "inputSchema": {
        "type": "object",
        "properties": {
          "room": {
            "type": "string",
            "minLength": 1,
            "description": "Room id or name, e.g. living or Living Room. Defaults to the active room."
          }
        },
        "additionalProperties": false
      }
    }
    get_productAnswer

    Full details of one catalog product: dimensions in cm, price in USD, colorways, front clearance needed, seat count, style tags and which walls of a room it fits with the spare cm. Pass compare_to (a placed item) to learn whether the product matches that item's size exactly, closely or not. Use it to confirm a product before placing, previewing or adding it to the cart.

    View tool JSON
    {
      "name": "get_product",
      "kind": "answer",
      "impl": "imperative",
      "description": "Full details of one catalog product: dimensions in cm, price in USD, colorways, front clearance needed, seat count, style tags and which walls of a room it fits with the spare cm. Pass compare_to (a placed item) to learn whether the product matches that item's size exactly, closely or not. Use it to confirm a product before placing, previewing or adding it to the cart.",
      "inputSchema": {
        "type": "object",
        "properties": {
          "product": {
            "type": "string",
            "minLength": 1,
            "description": "Catalog product id (e.g. sofa-endre) or product name from search_catalog."
          },
          "room": {
            "type": "string",
            "minLength": 1,
            "description": "Room id or name, e.g. living or Living Room. Defaults to the active room."
          },
          "compare_to": {
            "description": "Placed item id or name (or selected) to compare sizes with; adds size_match with the cm difference per side.",
            "type": "string",
            "minLength": 1
          }
        },
        "required": [
          "product"
        ],
        "additionalProperties": false
      }
    }
    get_room_detailsAnswer

    Details of one room: walls (id, side, length in cm and the free spans where furniture can go), openings (doors, windows, arches with wall, offset, width and swing) and every placed item with id, name, position, rotation, footprint and colorway. Coordinates are room-local in cm: origin at the north-west corner, x east, y south. Use it before placing or moving furniture in that room.

    View tool JSON
    {
      "name": "get_room_details",
      "kind": "answer",
      "impl": "imperative",
      "description": "Details of one room: walls (id, side, length in cm and the free spans where furniture can go), openings (doors, windows, arches with wall, offset, width and swing) and every placed item with id, name, position, rotation, footprint and colorway. Coordinates are room-local in cm: origin at the north-west corner, x east, y south. Use it before placing or moving furniture in that room.",
      "inputSchema": {
        "type": "object",
        "properties": {
          "room": {
            "type": "string",
            "minLength": 1,
            "description": "Room id or name, e.g. living or Living Room. Defaults to the active room."
          }
        },
        "additionalProperties": false
      }
    }
    get_scene_summaryAnswer

    Overview of the whole home: every room with id, name, type, size in m², wall sides with lengths in cm, item count and conflict count; plus the current mode, view, time of day, accessibility flag, active room, the human's selection, cart subtotal and design budget in USD. Call it first to learn room and item ids before reading details or placing furniture.

    View tool JSON
    {
      "name": "get_scene_summary",
      "kind": "answer",
      "impl": "imperative",
      "description": "Overview of the whole home: every room with id, name, type, size in m², wall sides with lengths in cm, item count and conflict count; plus the current mode, view, time of day, accessibility flag, active room, the human's selection, cart subtotal and design budget in USD. Call it first to learn room and item ids before reading details or placing furniture.",
      "inputSchema": {
        "type": "object",
        "properties": {},
        "additionalProperties": false
      }
    }
    get_selectionAnswer

    What the human is pointing at right now: the selected item, hovered item, last moved item (and whether the human or the agent moved it), the selected room and the camera focus. Use it to resolve words like this, that, here or the one I clicked before acting.

    View tool JSON
    {
      "name": "get_selection",
      "kind": "answer",
      "impl": "imperative",
      "description": "What the human is pointing at right now: the selected item, hovered item, last moved item (and whether the human or the agent moved it), the selected room and the camera focus. Use it to resolve words like this, that, here or the one I clicked before acting.",
      "inputSchema": {
        "type": "object",
        "properties": {},
        "additionalProperties": false
      }
    }
    load_variantAction

    Restores a previously saved layout variant of a room by name, replacing the room's current furniture. Save the current layout first if you want to keep it.

    View tool JSON
    {
      "name": "load_variant",
      "kind": "act",
      "impl": "imperative",
      "description": "Restores a previously saved layout variant of a room by name, replacing the room's current furniture. Save the current layout first if you want to keep it.",
      "inputSchema": {
        "type": "object",
        "properties": {
          "variant": {
            "type": "string",
            "minLength": 1,
            "description": "Saved variant name (see save_variant)."
          },
          "room": {
            "type": "string",
            "minLength": 1,
            "description": "Room id or name, e.g. living or Living Room. Defaults to the active room."
          }
        },
        "required": [
          "variant"
        ],
        "additionalProperties": false
      }
    }
    measureAnswer

    Measures in cm: a wall's length and free spans, an item's footprint, the gap between two items, or the distance from an item to a wall or opening. Subjects are wall sides (north, east, south, west), wall ids (w0…), item ids or names, or opening ids. Use it to check fit before placing or moving.

    View tool JSON
    {
      "name": "measure",
      "kind": "answer",
      "impl": "imperative",
      "description": "Measures in cm: a wall's length and free spans, an item's footprint, the gap between two items, or the distance from an item to a wall or opening. Subjects are wall sides (north, east, south, west), wall ids (w0…), item ids or names, or opening ids. Use it to check fit before placing or moving.",
      "inputSchema": {
        "type": "object",
        "properties": {
          "subject": {
            "type": "string",
            "minLength": 1,
            "description": "What to measure: a wall side or id, an item id or name, or an opening id."
          },
          "to": {
            "description": "Optional second thing (wall, item or opening) to measure the gap or distance to.",
            "type": "string",
            "minLength": 1
          },
          "room": {
            "type": "string",
            "minLength": 1,
            "description": "Room id or name, e.g. living or Living Room. Defaults to the active room."
          }
        },
        "required": [
          "subject"
        ],
        "additionalProperties": false
      }
    }
    move_furnitureAction

    Moves and/or rotates a placed item. Give an anchor in words (wall + along, facing, next_to, centered, under), a raw pos in cm, a delta in cm, a rotation (0, 90, 180 or 270 clockwise; 0 faces south) or rotate_by, and optionally another room. Snaps and nudges like place_furniture and returns the resolved position and any conflicts.

    View tool JSON
    {
      "name": "move_furniture",
      "kind": "act",
      "impl": "imperative",
      "description": "Moves and/or rotates a placed item. Give an anchor in words (wall + along, facing, next_to, centered, under), a raw pos in cm, a delta in cm, a rotation (0, 90, 180 or 270 clockwise; 0 faces south) or rotate_by, and optionally another room. Snaps and nudges like place_furniture and returns the resolved position and any conflicts.",
      "inputSchema": {
        "type": "object",
        "properties": {
          "item": {
            "type": "string",
            "minLength": 1,
            "description": "Placed item id (e.g. sofa-1) or its name. Use selected for the human's current selection."
          },
          "anchor": {
            "type": "object",
            "properties": {
              "wall": {
                "description": "Wall the back goes against: north, east, south, west, or a wall id such as w2.",
                "type": "string",
                "minLength": 1
              },
              "along": {
                "description": "Position along that wall: start, center, end, or a number of cm from the wall's start (clockwise).",
                "anyOf": [
                  {
                    "type": "string",
                    "enum": [
                      "start",
                      "center",
                      "end"
                    ]
                  },
                  {
                    "type": "number"
                  }
                ]
              },
              "facing": {
                "description": "What the front faces: an item id or name, room_center, wall:<side>, or window:<id>.",
                "type": "string",
                "minLength": 1
              },
              "next_to": {
                "description": "Item id or name to sit beside.",
                "type": "string",
                "minLength": 1
              },
              "side": {
                "description": "Side of next_to to use: left, right, front or behind (from that item's point of view).",
                "type": "string",
                "enum": [
                  "left",
                  "right",
                  "front",
                  "behind"
                ]
              },
              "gap_cm": {
                "description": "Gap in cm between the two items (default 10).",
                "type": "number",
                "minimum": 0
              },
              "centered": {
                "description": "true to centre the item in the room.",
                "type": "boolean"
              },
              "under": {
                "description": "window:<id> to centre the item under that window with its back to the wall.",
                "type": "string",
                "minLength": 1
              }
            },
            "additionalProperties": false,
            "description": "Where to put it, in words: wall + along, facing, next_to + side + gap_cm, centered, or under a window. Preferred over pos."
          },
          "pos": {
            "type": "object",
            "properties": {
              "x": {
                "type": "number",
                "description": "Footprint centre x in cm; positive points east."
              },
              "y": {
                "type": "number",
                "description": "Footprint centre y in cm; positive points south."
              }
            },
            "required": [
              "x",
              "y"
            ],
            "additionalProperties": false,
            "description": "Raw footprint centre in cm, room-local (origin north-west corner, x east, y south). Use anchor when possible."
          },
          "delta_cm": {
            "description": "Shift by this many cm: x positive = east, y positive = south.",
            "type": "object",
            "properties": {
              "x": {
                "description": "East-west shift in cm; positive is east.",
                "type": "number"
              },
              "y": {
                "description": "North-south shift in cm; positive is south.",
                "type": "number"
              }
            },
            "additionalProperties": false
          },
          "rotation": {
            "type": "number",
            "enum": [
              0,
              90,
              180,
              270
            ],
            "description": "0, 90, 180 or 270 degrees clockwise; 0 = front faces south."
          },
          "rotate_by": {
            "description": "Turn by 90 (clockwise), -90 (counter-clockwise) or 180 degrees.",
            "type": "number",
            "enum": [
              90,
              -90,
              180
            ]
          },
          "room": {
            "description": "Move the item into this room (id or name). Defaults to its current room.",
            "type": "string",
            "minLength": 1
          }
        },
        "required": [
          "item"
        ],
        "additionalProperties": false
      }
    }
    place_furnitureAction

    Places a catalog product in a room as a new item. Position it with an anchor in words (back against a wall at start, center, end or N cm along it; facing an item or the room centre; next to an item with a gap; centred; or under a window) or with a raw pos in cm and a rotation. The engine snaps to the wall, nudges up to 60 cm to avoid collisions and reports conflicts. Returns the new item id.

    View tool JSON
    {
      "name": "place_furniture",
      "kind": "act",
      "impl": "imperative",
      "description": "Places a catalog product in a room as a new item. Position it with an anchor in words (back against a wall at start, center, end or N cm along it; facing an item or the room centre; next to an item with a gap; centred; or under a window) or with a raw pos in cm and a rotation. The engine snaps to the wall, nudges up to 60 cm to avoid collisions and reports conflicts. Returns the new item id.",
      "inputSchema": {
        "type": "object",
        "properties": {
          "product": {
            "type": "string",
            "minLength": 1,
            "description": "Catalog product id (e.g. sofa-endre) or product name from search_catalog."
          },
          "room": {
            "type": "string",
            "minLength": 1,
            "description": "Room id or name, e.g. living or Living Room. Defaults to the active room."
          },
          "anchor": {
            "type": "object",
            "properties": {
              "wall": {
                "description": "Wall the back goes against: north, east, south, west, or a wall id such as w2.",
                "type": "string",
                "minLength": 1
              },
              "along": {
                "description": "Position along that wall: start, center, end, or a number of cm from the wall's start (clockwise).",
                "anyOf": [
                  {
                    "type": "string",
                    "enum": [
                      "start",
                      "center",
                      "end"
                    ]
                  },
                  {
                    "type": "number"
                  }
                ]
              },
              "facing": {
                "description": "What the front faces: an item id or name, room_center, wall:<side>, or window:<id>.",
                "type": "string",
                "minLength": 1
              },
              "next_to": {
                "description": "Item id or name to sit beside.",
                "type": "string",
                "minLength": 1
              },
              "side": {
                "description": "Side of next_to to use: left, right, front or behind (from that item's point of view).",
                "type": "string",
                "enum": [
                  "left",
                  "right",
                  "front",
                  "behind"
                ]
              },
              "gap_cm": {
                "description": "Gap in cm between the two items (default 10).",
                "type": "number",
                "minimum": 0
              },
              "centered": {
                "description": "true to centre the item in the room.",
                "type": "boolean"
              },
              "under": {
                "description": "window:<id> to centre the item under that window with its back to the wall.",
                "type": "string",
                "minLength": 1
              }
            },
            "additionalProperties": false,
            "description": "Where to put it, in words: wall + along, facing, next_to + side + gap_cm, centered, or under a window. Preferred over pos."
          },
          "pos": {
            "type": "object",
            "properties": {
              "x": {
                "type": "number",
                "description": "Footprint centre x in cm; positive points east."
              },
              "y": {
                "type": "number",
                "description": "Footprint centre y in cm; positive points south."
              }
            },
            "required": [
              "x",
              "y"
            ],
            "additionalProperties": false,
            "description": "Raw footprint centre in cm, room-local (origin north-west corner, x east, y south). Use anchor when possible."
          },
          "rotation": {
            "type": "number",
            "enum": [
              0,
              90,
              180,
              270
            ],
            "description": "0, 90, 180 or 270 degrees clockwise; 0 = front faces south."
          },
          "colorway": {
            "type": "string",
            "minLength": 1,
            "description": "Colorway id or name, e.g. oak, sage, terracotta, dusty-blue."
          }
        },
        "required": [
          "product"
        ],
        "additionalProperties": false
      }
    }
    preview_in_roomAction

    Try before you buy: shows a translucent ghost of a catalog product at an anchor or position in a room with its price, fit and conflicts, without changing the layout or the cart. One preview at a time; confirm_preview keeps it and cancel_preview discards it.

    View tool JSON
    {
      "name": "preview_in_room",
      "kind": "act",
      "impl": "imperative",
      "description": "Try before you buy: shows a translucent ghost of a catalog product at an anchor or position in a room with its price, fit and conflicts, without changing the layout or the cart. One preview at a time; confirm_preview keeps it and cancel_preview discards it.",
      "inputSchema": {
        "type": "object",
        "properties": {
          "product": {
            "type": "string",
            "minLength": 1,
            "description": "Catalog product id (e.g. sofa-endre) or product name from search_catalog."
          },
          "room": {
            "type": "string",
            "minLength": 1,
            "description": "Room id or name, e.g. living or Living Room. Defaults to the active room."
          },
          "anchor": {
            "type": "object",
            "properties": {
              "wall": {
                "description": "Wall the back goes against: north, east, south, west, or a wall id such as w2.",
                "type": "string",
                "minLength": 1
              },
              "along": {
                "description": "Position along that wall: start, center, end, or a number of cm from the wall's start (clockwise).",
                "anyOf": [
                  {
                    "type": "string",
                    "enum": [
                      "start",
                      "center",
                      "end"
                    ]
                  },
                  {
                    "type": "number"
                  }
                ]
              },
              "facing": {
                "description": "What the front faces: an item id or name, room_center, wall:<side>, or window:<id>.",
                "type": "string",
                "minLength": 1
              },
              "next_to": {
                "description": "Item id or name to sit beside.",
                "type": "string",
                "minLength": 1
              },
              "side": {
                "description": "Side of next_to to use: left, right, front or behind (from that item's point of view).",
                "type": "string",
                "enum": [
                  "left",
                  "right",
                  "front",
                  "behind"
                ]
              },
              "gap_cm": {
                "description": "Gap in cm between the two items (default 10).",
                "type": "number",
                "minimum": 0
              },
              "centered": {
                "description": "true to centre the item in the room.",
                "type": "boolean"
              },
              "under": {
                "description": "window:<id> to centre the item under that window with its back to the wall.",
                "type": "string",
                "minLength": 1
              }
            },
            "additionalProperties": false,
            "description": "Where to put it, in words: wall + along, facing, next_to + side + gap_cm, centered, or under a window. Preferred over pos."
          },
          "pos": {
            "type": "object",
            "properties": {
              "x": {
                "type": "number",
                "description": "Footprint centre x in cm; positive points east."
              },
              "y": {
                "type": "number",
                "description": "Footprint centre y in cm; positive points south."
              }
            },
            "required": [
              "x",
              "y"
            ],
            "additionalProperties": false,
            "description": "Raw footprint centre in cm, room-local (origin north-west corner, x east, y south). Use anchor when possible."
          },
          "rotation": {
            "type": "number",
            "enum": [
              0,
              90,
              180,
              270
            ],
            "description": "0, 90, 180 or 270 degrees clockwise; 0 = front faces south."
          },
          "colorway": {
            "type": "string",
            "minLength": 1,
            "description": "Colorway id or name, e.g. oak, sage, terracotta, dusty-blue."
          }
        },
        "required": [
          "product"
        ],
        "additionalProperties": false
      }
    }
    remove_furnitureAction

    Removes one placed item from its room. If the item is linked to a cart line, that line is removed as well and the result says so. Use clear_room to empty a whole room.

    View tool JSON
    {
      "name": "remove_furniture",
      "kind": "act",
      "impl": "imperative",
      "description": "Removes one placed item from its room. If the item is linked to a cart line, that line is removed as well and the result says so. Use clear_room to empty a whole room.",
      "inputSchema": {
        "type": "object",
        "properties": {
          "item": {
            "type": "string",
            "minLength": 1,
            "description": "Placed item id (e.g. sofa-1) or its name. Use selected for the human's current selection."
          }
        },
        "required": [
          "item"
        ],
        "additionalProperties": false
      }
    }
    resize_furnitureAction

    Changes a placed item's size in cm: width, depth and height, or scale_percent of its catalog size; reset restores the catalog size. The 3D model stretches to the new size and every rule (overlap, clearance, walls) uses it. Nudges the item up to 60 cm to stay inside the room and reports conflicts. Returns the new and the catalog dimensions and the closest catalog product to the new size.

    View tool JSON
    {
      "name": "resize_furniture",
      "kind": "act",
      "impl": "imperative",
      "description": "Changes a placed item's size in cm: width, depth and height, or scale_percent of its catalog size; reset restores the catalog size. The 3D model stretches to the new size and every rule (overlap, clearance, walls) uses it. Nudges the item up to 60 cm to stay inside the room and reports conflicts. Returns the new and the catalog dimensions and the closest catalog product to the new size.",
      "inputSchema": {
        "type": "object",
        "properties": {
          "item": {
            "type": "string",
            "minLength": 1,
            "description": "Placed item id (e.g. sofa-1) or its name. Use selected for the human's current selection."
          },
          "width_cm": {
            "description": "New width in cm (10–1000), left–right facing the front. Sides not given keep their current size.",
            "type": "number",
            "exclusiveMinimum": 0
          },
          "depth_cm": {
            "description": "New depth in cm (10–1000), front–back.",
            "type": "number",
            "exclusiveMinimum": 0
          },
          "height_cm": {
            "description": "New height in cm (10–1000), floor to top.",
            "type": "number",
            "exclusiveMinimum": 0
          },
          "scale_percent": {
            "description": "Scale every side to this percentage of the catalog size, 25–400; 100 restores it.",
            "type": "number",
            "exclusiveMinimum": 0
          },
          "reset": {
            "description": "true restores the catalog size.",
            "type": "boolean"
          }
        },
        "required": [
          "item"
        ],
        "additionalProperties": false
      }
    }
    restore_furnitureAction

    Brings back the furniture removed by the last clear_home or clear_room, into the rooms it came from. Items whose room no longer exists are skipped and listed. Returns not_found when nothing has been cleared.

    View tool JSON
    {
      "name": "restore_furniture",
      "kind": "act",
      "impl": "imperative",
      "description": "Brings back the furniture removed by the last clear_home or clear_room, into the rooms it came from. Items whose room no longer exists are skipped and listed. Returns not_found when nothing has been cleared.",
      "inputSchema": {
        "type": "object",
        "properties": {},
        "additionalProperties": false
      }
    }
    save_variantAction

    Saves the current furniture layout of a room under a name (for example Cosy or Media wall) so it can be restored with load_variant or, once two or more exist, compared side by side with compare_variants.

    View tool JSON
    {
      "name": "save_variant",
      "kind": "act",
      "impl": "imperative",
      "description": "Saves the current furniture layout of a room under a name (for example Cosy or Media wall) so it can be restored with load_variant or, once two or more exist, compared side by side with compare_variants.",
      "inputSchema": {
        "type": "object",
        "properties": {
          "name": {
            "type": "string",
            "minLength": 1,
            "maxLength": 80,
            "description": "Short name for this saved room layout."
          },
          "room": {
            "type": "string",
            "minLength": 1,
            "description": "Room id or name, e.g. living or Living Room. Defaults to the active room."
          }
        },
        "required": [
          "name"
        ],
        "additionalProperties": false
      }
    }
    search_catalogAnswer

    Searches Hearth Studio's furniture catalog (Shopify). Filter by category, maximum price in USD, maximum width and depth in cm, style, colorway, or the wall it must fit (fits_wall) in a room. Give target dimensions (width_cm, depth_cm, height_cm) or like_item to rank by closest size: each result then says exact, close or off with the cm difference. Returns up to 6 products with id, price, dimensions, colorways and a fit note. Ids feed place_furniture, preview_in_room and update_cart.

    View tool JSON
    {
      "name": "search_catalog",
      "kind": "answer",
      "impl": "imperative",
      "description": "Searches Hearth Studio's furniture catalog (Shopify). Filter by category, maximum price in USD, maximum width and depth in cm, style, colorway, or the wall it must fit (fits_wall) in a room. Give target dimensions (width_cm, depth_cm, height_cm) or like_item to rank by closest size: each result then says exact, close or off with the cm difference. Returns up to 6 products with id, price, dimensions, colorways and a fit note. Ids feed place_furniture, preview_in_room and update_cart.",
      "inputSchema": {
        "type": "object",
        "properties": {
          "query": {
            "description": "Free-text search, e.g. small oak desk.",
            "type": "string"
          },
          "category": {
            "description": "Furniture category.",
            "type": "string",
            "enum": [
              "sofa",
              "armchair",
              "bed",
              "wardrobe",
              "table",
              "desk",
              "chair",
              "shelf",
              "tv-unit",
              "rug",
              "floor-lamp",
              "table-lamp",
              "plant",
              "decor"
            ]
          },
          "max_price_usd": {
            "description": "Maximum product price in USD.",
            "type": "number",
            "minimum": 0
          },
          "max_width_cm": {
            "description": "Maximum product width in cm.",
            "type": "number",
            "exclusiveMinimum": 0
          },
          "max_depth_cm": {
            "description": "Maximum product depth in cm.",
            "type": "number",
            "exclusiveMinimum": 0
          },
          "fits_wall": {
            "description": "Only products whose width fits a free span on this wall (north, east, south, west or wall id) of the room.",
            "type": "string",
            "minLength": 1
          },
          "room": {
            "type": "string",
            "minLength": 1,
            "description": "Room id or name, e.g. living or Living Room. Defaults to the active room."
          },
          "style": {
            "description": "Style tag such as scandinavian, japandi, mid-century, rustic, modern.",
            "type": "string",
            "minLength": 1
          },
          "colorway": {
            "type": "string",
            "minLength": 1,
            "description": "Colorway id or name, e.g. oak, sage, terracotta, dusty-blue."
          },
          "limit": {
            "default": 6,
            "description": "Maximum results, from 1 to 6; default 6.",
            "type": "integer",
            "minimum": 1,
            "maximum": 6
          },
          "width_cm": {
            "description": "Target width in cm; results are ranked by how close their size is (see dims_match).",
            "type": "number",
            "exclusiveMinimum": 0
          },
          "depth_cm": {
            "description": "Target depth in cm; results are ranked by how close their size is (see dims_match).",
            "type": "number",
            "exclusiveMinimum": 0
          },
          "height_cm": {
            "description": "Target height in cm; results are ranked by how close their size is (see dims_match).",
            "type": "number",
            "exclusiveMinimum": 0
          },
          "like_item": {
            "description": "Placed item id or name (or selected) whose current size is the target; its category is used unless category is given.",
            "type": "string",
            "minLength": 1
          },
          "tolerance_cm": {
            "description": "How many cm per side still count as close (default 10). exact = every side within 1 cm.",
            "type": "number",
            "minimum": 0,
            "maximum": 200
          }
        },
        "additionalProperties": false
      }
    }
    set_accessibility_modeAction

    Turns accessibility mode on or off. On: paths must be at least 90 cm wide, a 150 cm turning circle is required beside the bed, desk and sofa, reach zones are shown, and get_conflicts and the overlays report these rules. Off: standard 60 cm walkways.

    View tool JSON
    {
      "name": "set_accessibility_mode",
      "kind": "act",
      "impl": "imperative",
      "description": "Turns accessibility mode on or off. On: paths must be at least 90 cm wide, a 150 cm turning circle is required beside the bed, desk and sofa, reach zones are shown, and get_conflicts and the overlays report these rules. Off: standard 60 cm walkways.",
      "inputSchema": {
        "type": "object",
        "properties": {
          "enabled": {
            "type": "boolean",
            "description": "true enables accessibility layout rules; false restores standard rules."
          }
        },
        "required": [
          "enabled"
        ],
        "additionalProperties": false
      }
    }
    set_colorwayAction

    Changes a placed item's colorway (for example oak, sage, terracotta or dusty-blue). If the product is in the cart, the cart line switches to the matching variant. Lists the available colorways when the requested one is unknown.

    View tool JSON
    {
      "name": "set_colorway",
      "kind": "act",
      "impl": "imperative",
      "description": "Changes a placed item's colorway (for example oak, sage, terracotta or dusty-blue). If the product is in the cart, the cart line switches to the matching variant. Lists the available colorways when the requested one is unknown.",
      "inputSchema": {
        "type": "object",
        "properties": {
          "item": {
            "type": "string",
            "minLength": 1,
            "description": "Placed item id (e.g. sofa-1) or its name. Use selected for the human's current selection."
          },
          "colorway": {
            "type": "string",
            "minLength": 1,
            "description": "Colorway id or name, e.g. oak, sage, terracotta, dusty-blue."
          }
        },
        "required": [
          "item",
          "colorway"
        ],
        "additionalProperties": false
      }
    }
    set_modeAction

    Switches the studio mode. build: edit rooms and openings (enables apply_template, create_room, update_room, add_opening, move_opening and remove_opening). design: place and arrange furniture. shop: browse products and manage the cart with prices shown; enables get_checkout_link. Design and shop tools stay available in every mode.

    View tool JSON
    {
      "name": "set_mode",
      "kind": "act",
      "impl": "imperative",
      "description": "Switches the studio mode. build: edit rooms and openings (enables apply_template, create_room, update_room, add_opening, move_opening and remove_opening). design: place and arrange furniture. shop: browse products and manage the cart with prices shown; enables get_checkout_link. Design and shop tools stay available in every mode.",
      "inputSchema": {
        "type": "object",
        "properties": {
          "mode": {
            "type": "string",
            "enum": [
              "build",
              "design",
              "shop"
            ],
            "description": "Studio mode: build, design or shop."
          }
        },
        "required": [
          "mode"
        ],
        "additionalProperties": false
      }
    }
    set_time_of_dayAction

    Sets the lighting time of day: morning (cool soft light), noon (bright with short shadows), golden (warm low sun) or evening (dusk, every lamp glows). Changes the look only; the layout stays the same.

    View tool JSON
    {
      "name": "set_time_of_day",
      "kind": "act",
      "impl": "imperative",
      "description": "Sets the lighting time of day: morning (cool soft light), noon (bright with short shadows), golden (warm low sun) or evening (dusk, every lamp glows). Changes the look only; the layout stays the same.",
      "inputSchema": {
        "type": "object",
        "properties": {
          "time": {
            "type": "string",
            "enum": [
              "morning",
              "noon",
              "golden",
              "evening"
            ],
            "description": "Lighting time: morning, noon, golden or evening."
          }
        },
        "required": [
          "time"
        ],
        "additionalProperties": false
      }
    }
    set_viewAction

    Changes the camera: plan (top-down) or dollhouse (isometric), optionally focused on the whole home with focus: "home", a room, or an item, with the isometric yaw at nw, ne, se or sw. Use it to show the human what you are working on.

    View tool JSON
    {
      "name": "set_view",
      "kind": "act",
      "impl": "imperative",
      "description": "Changes the camera: plan (top-down) or dollhouse (isometric), optionally focused on the whole home with focus: \"home\", a room, or an item, with the isometric yaw at nw, ne, se or sw. Use it to show the human what you are working on.",
      "inputSchema": {
        "type": "object",
        "properties": {
          "view": {
            "description": "Camera view: plan or dollhouse.",
            "type": "string",
            "enum": [
              "plan",
              "dollhouse"
            ]
          },
          "focus": {
            "description": "Use home for the entire home, or give a room/item id or name. Defaults to the active room.",
            "type": "string",
            "minLength": 1
          },
          "yaw": {
            "description": "Dollhouse compass yaw: nw, ne, se or sw.",
            "type": "string",
            "enum": [
              "nw",
              "ne",
              "se",
              "sw"
            ]
          }
        },
        "additionalProperties": false
      }
    }
    undoAction

    Undoes the last change(s) to the scene, whether made by the agent or the human, 1 to 10 steps at a time. Returns what was undone.

    View tool JSON
    {
      "name": "undo",
      "kind": "act",
      "impl": "imperative",
      "description": "Undoes the last change(s) to the scene, whether made by the agent or the human, 1 to 10 steps at a time. Returns what was undone.",
      "inputSchema": {
        "type": "object",
        "properties": {
          "steps": {
            "default": 1,
            "description": "Number of scene changes to undo, from 1 to 10; default 1.",
            "type": "integer",
            "minimum": 1,
            "maximum": 10
          }
        },
        "additionalProperties": false
      }
    }
    update_cartAction

    Changes the Shopify cart. add: adds a product (by product id or a placed item) in a colorway with a quantity; remove: removes that product's line; set_quantity: sets the line's quantity. Returns the new subtotal in USD and the remaining budget. Purchases are completed by the human at checkout.

    View tool JSON
    {
      "name": "update_cart",
      "kind": "act",
      "impl": "imperative",
      "description": "Changes the Shopify cart. add: adds a product (by product id or a placed item) in a colorway with a quantity; remove: removes that product's line; set_quantity: sets the line's quantity. Returns the new subtotal in USD and the remaining budget. Purchases are completed by the human at checkout.",
      "inputSchema": {
        "type": "object",
        "properties": {
          "action": {
            "type": "string",
            "enum": [
              "add",
              "remove",
              "set_quantity"
            ],
            "description": "Cart action: add, remove or set_quantity."
          },
          "product": {
            "description": "Catalog product id or name. Give either product or item.",
            "type": "string",
            "minLength": 1
          },
          "item": {
            "description": "Placed item id or name; its product and colorway are used and the cart line is linked to it.",
            "type": "string",
            "minLength": 1
          },
          "colorway": {
            "type": "string",
            "minLength": 1,
            "description": "Colorway id or name, e.g. oak, sage, terracotta, dusty-blue."
          },
          "quantity": {
            "description": "Quantity for add (default 1) or set_quantity.",
            "type": "integer",
            "minimum": 0
          }
        },
        "required": [
          "action"
        ],
        "additionalProperties": false
      }
    }