← WebMCP Directory

Tool tree

dattheshshenoy.github.io

Productivity & BusinessTools verified
Website
Roomwright — furnish a room by talking to your AI agent. A WebMCP room planner.
Explore capabilities
    roomwright_get_roomAnswer

    Return the room's dimensions and openings plus every placed piece with its id, product, variant, position (metres, origin at the near-left corner), and rotation. Call this first to learn what is in the room and to get placement ids.

    View tool JSON
    {
      "name": "roomwright_get_room",
      "kind": "answer",
      "impl": "imperative",
      "description": "Return the room's dimensions and openings plus every placed piece with its id, product, variant, position (metres, origin at the near-left corner), and rotation. Call this first to learn what is in the room and to get placement ids.",
      "inputSchema": {
        "type": "object",
        "properties": {},
        "required": [],
        "additionalProperties": false
      },
      "page": "/roomwright/"
    }
    roomwright_list_catalogAction

    List the furniture catalogue. Optionally filter by category. Each entry has product_id, dimensions (metres), colour/finish variants, price (USD), and the free space the piece needs in front of it.

    View tool JSON
    {
      "name": "roomwright_list_catalog",
      "kind": "act",
      "impl": "imperative",
      "description": "List the furniture catalogue. Optionally filter by category. Each entry has product_id, dimensions (metres), colour/finish variants, price (USD), and the free space the piece needs in front of it.",
      "inputSchema": {
        "type": "object",
        "properties": {
          "category": {
            "type": "string",
            "description": "optional filter",
            "enum": [
              "seating",
              "tables",
              "sleeping",
              "storage",
              "lighting",
              "decor",
              "custom"
            ]
          }
        },
        "required": [],
        "additionalProperties": false
      },
      "page": "/roomwright/"
    }
    roomwright_add_itemAction

    Place a piece in the room. Give product_id (from list_catalog). Optional: variant_id, x and z in metres, rotation_degrees. With no position the piece is auto-placed — wall-hugging pieces against the emptiest wall, others near the centre clear of what is there. Returns the new placement_id and any clearance issues it introduces.

    View tool JSON
    {
      "name": "roomwright_add_item",
      "kind": "act",
      "impl": "imperative",
      "description": "Place a piece in the room. Give product_id (from list_catalog). Optional: variant_id, x and z in metres, rotation_degrees. With no position the piece is auto-placed — wall-hugging pieces against the emptiest wall, others near the centre clear of what is there. Returns the new placement_id and any clearance issues it introduces.",
      "inputSchema": {
        "type": "object",
        "properties": {
          "product_id": {
            "type": "string",
            "description": "a product_id from list_catalog, its exact name, or an unambiguous part of the name (e.g. \"milo\" or \"coffee table\")"
          },
          "variant_id": {
            "type": "string",
            "description": "optional variant id"
          },
          "x": {
            "type": "number",
            "description": "centre x, metres"
          },
          "z": {
            "type": "number",
            "description": "centre z, metres"
          },
          "rotation_degrees": {
            "type": "number",
            "description": "clockwise from facing +z"
          }
        },
        "required": [
          "product_id"
        ],
        "additionalProperties": false
      },
      "page": "/roomwright/"
    }
    roomwright_create_custom_itemAction

    Make a custom piece from a primitive and place it in the room. shape is box (cabinet, built-in, block), cylinder (column, round pouffe), panel (a thin room divider), or platform (a low step or podium). width/depth/height in metres (cylinder ignores depth). Optional name, hex colour, position and rotation. Returns the new product_id and placement_id.

    View tool JSON
    {
      "name": "roomwright_create_custom_item",
      "kind": "act",
      "impl": "imperative",
      "description": "Make a custom piece from a primitive and place it in the room. shape is box (cabinet, built-in, block), cylinder (column, round pouffe), panel (a thin room divider), or platform (a low step or podium). width/depth/height in metres (cylinder ignores depth). Optional name, hex colour, position and rotation. Returns the new product_id and placement_id.",
      "inputSchema": {
        "type": "object",
        "properties": {
          "shape": {
            "type": "string",
            "description": "primitive",
            "enum": [
              "box",
              "cylinder",
              "panel",
              "platform"
            ]
          },
          "width": {
            "type": "number",
            "description": "metres"
          },
          "depth": {
            "type": "number",
            "description": "metres (ignored for cylinder)"
          },
          "height": {
            "type": "number",
            "description": "metres"
          },
          "name": {
            "type": "string",
            "description": "optional label"
          },
          "color": {
            "type": "string",
            "description": "optional hex, e.g. #8a6a49"
          },
          "x": {
            "type": "number",
            "description": "centre x, metres"
          },
          "z": {
            "type": "number",
            "description": "centre z, metres"
          },
          "rotation_degrees": {
            "type": "number",
            "description": "clockwise from facing +z"
          }
        },
        "required": [
          "shape",
          "width",
          "height"
        ],
        "additionalProperties": false
      },
      "page": "/roomwright/"
    }
    roomwright_move_itemAction

    Move a placed piece to a new centre position in metres. The position is clamped so the piece stays fully inside the room. Returns whether it was clamped and any clearance issues at the new spot.

    View tool JSON
    {
      "name": "roomwright_move_item",
      "kind": "act",
      "impl": "imperative",
      "description": "Move a placed piece to a new centre position in metres. The position is clamped so the piece stays fully inside the room. Returns whether it was clamped and any clearance issues at the new spot.",
      "inputSchema": {
        "type": "object",
        "properties": {
          "placement_id": {
            "type": "string",
            "description": "from get_room"
          },
          "x": {
            "type": "number",
            "description": "centre x, metres"
          },
          "z": {
            "type": "number",
            "description": "centre z, metres"
          }
        },
        "required": [
          "placement_id",
          "x",
          "z"
        ],
        "additionalProperties": false
      },
      "page": "/roomwright/"
    }
    roomwright_rotate_itemAction

    Rotate a placed piece about the vertical axis. degrees is relative by default; set absolute true to set the heading directly. Angles snap to 15-degree steps.

    View tool JSON
    {
      "name": "roomwright_rotate_item",
      "kind": "act",
      "impl": "imperative",
      "description": "Rotate a placed piece about the vertical axis. degrees is relative by default; set absolute true to set the heading directly. Angles snap to 15-degree steps.",
      "inputSchema": {
        "type": "object",
        "properties": {
          "placement_id": {
            "type": "string",
            "description": "from get_room"
          },
          "degrees": {
            "type": "number",
            "description": "rotation, degrees"
          },
          "absolute": {
            "type": "boolean"
          }
        },
        "required": [
          "placement_id",
          "degrees"
        ],
        "additionalProperties": false
      },
      "page": "/roomwright/"
    }
    roomwright_resize_itemAction

    Override a placed piece's size — width (along its own left-right), depth (front-back), height, in metres. Give any subset; each is clamped to 0.15-8 m. The piece re-renders at the new size and its clearance is recomputed. Setting all three back to the catalogue size clears the override.

    View tool JSON
    {
      "name": "roomwright_resize_item",
      "kind": "act",
      "impl": "imperative",
      "description": "Override a placed piece's size — width (along its own left-right), depth (front-back), height, in metres. Give any subset; each is clamped to 0.15-8 m. The piece re-renders at the new size and its clearance is recomputed. Setting all three back to the catalogue size clears the override.",
      "inputSchema": {
        "type": "object",
        "properties": {
          "placement_id": {
            "type": "string",
            "description": "from get_room"
          },
          "width": {
            "type": "number",
            "description": "new width, metres"
          },
          "depth": {
            "type": "number",
            "description": "new depth, metres"
          },
          "height": {
            "type": "number",
            "description": "new height, metres"
          }
        },
        "required": [
          "placement_id"
        ],
        "additionalProperties": false
      },
      "page": "/roomwright/"
    }
    roomwright_set_variantAction

    Change a placed piece's colour or material. variant_id comes from list_catalog's variants list for that product.

    View tool JSON
    {
      "name": "roomwright_set_variant",
      "kind": "act",
      "impl": "imperative",
      "description": "Change a placed piece's colour or material. variant_id comes from list_catalog's variants list for that product.",
      "inputSchema": {
        "type": "object",
        "properties": {
          "placement_id": {
            "type": "string",
            "description": "from get_room"
          },
          "variant_id": {
            "type": "string",
            "description": "a variant id for the piece's product"
          }
        },
        "required": [
          "placement_id",
          "variant_id"
        ],
        "additionalProperties": false
      },
      "page": "/roomwright/"
    }
    roomwright_duplicate_itemAction

    Add another copy of a placed piece — same product and variant. By default the copy is nudged clear of the original. Pass mirror to place it as a mirror image across the room's centre line instead: "east-west" for a matching piece on the opposite left/right side (same distance from its wall, heading flipped), "north-south" for front/back. Use "east-west" for a chair on each side of a sofa.

    View tool JSON
    {
      "name": "roomwright_duplicate_item",
      "kind": "act",
      "impl": "imperative",
      "description": "Add another copy of a placed piece — same product and variant. By default the copy is nudged clear of the original. Pass mirror to place it as a mirror image across the room's centre line instead: \"east-west\" for a matching piece on the opposite left/right side (same distance from its wall, heading flipped), \"north-south\" for front/back. Use \"east-west\" for a chair on each side of a sofa.",
      "inputSchema": {
        "type": "object",
        "properties": {
          "placement_id": {
            "type": "string",
            "description": "from get_room"
          },
          "mirror": {
            "type": "string",
            "description": "optional — \"east-west\" or \"north-south\"",
            "enum": [
              "east-west",
              "north-south"
            ]
          }
        },
        "required": [
          "placement_id"
        ],
        "additionalProperties": false
      },
      "page": "/roomwright/"
    }
    roomwright_remove_itemAction

    Remove a placed piece from the room by its placement_id.

    View tool JSON
    {
      "name": "roomwright_remove_item",
      "kind": "act",
      "impl": "imperative",
      "description": "Remove a placed piece from the room by its placement_id.",
      "inputSchema": {
        "type": "object",
        "properties": {
          "placement_id": {
            "type": "string",
            "description": "from get_room"
          }
        },
        "required": [
          "placement_id"
        ],
        "additionalProperties": false
      },
      "page": "/roomwright/"
    }
    roomwright_set_room_dimensionsAction

    Resize the room. Any of width, length, height in metres (width 1.5-20, length 1.5-20, height 2.2-4.5). Pieces that fall outside the new bounds are pulled back inside and reported.

    View tool JSON
    {
      "name": "roomwright_set_room_dimensions",
      "kind": "act",
      "impl": "imperative",
      "description": "Resize the room. Any of width, length, height in metres (width 1.5-20, length 1.5-20, height 2.2-4.5). Pieces that fall outside the new bounds are pulled back inside and reported.",
      "inputSchema": {
        "type": "object",
        "properties": {
          "width": {
            "type": "number",
            "description": "interior width, metres"
          },
          "length": {
            "type": "number",
            "description": "interior length, metres"
          },
          "height": {
            "type": "number",
            "description": "ceiling height, metres"
          }
        },
        "required": [],
        "additionalProperties": false
      },
      "page": "/roomwright/"
    }
    roomwright_set_openingAction

    Add or change a door or window. Omit opening_id to ADD one — give kind (door or window) and wall (north, south, east, west); it starts centred, and you may also pass offset_m, width_m, sill_m or height_m to place it exactly. Pass opening_id (from get_room) to CHANGE that opening — any of wall, offset_m (from the wall's start corner), width_m, sill_m (windows), height_m, or kind. Values are clamped to fit the wall and ceiling.

    View tool JSON
    {
      "name": "roomwright_set_opening",
      "kind": "act",
      "impl": "imperative",
      "description": "Add or change a door or window. Omit opening_id to ADD one — give kind (door or window) and wall (north, south, east, west); it starts centred, and you may also pass offset_m, width_m, sill_m or height_m to place it exactly. Pass opening_id (from get_room) to CHANGE that opening — any of wall, offset_m (from the wall's start corner), width_m, sill_m (windows), height_m, or kind. Values are clamped to fit the wall and ceiling.",
      "inputSchema": {
        "type": "object",
        "properties": {
          "opening_id": {
            "type": "string",
            "description": "omit to add a new opening; give it to change an existing one"
          },
          "kind": {
            "type": "string",
            "description": "door or window",
            "enum": [
              "door",
              "window"
            ]
          },
          "wall": {
            "type": "string",
            "description": "which wall",
            "enum": [
              "north",
              "south",
              "east",
              "west"
            ]
          },
          "offset_m": {
            "type": "number",
            "description": "distance from the wall's start corner to the opening's near edge"
          },
          "width_m": {
            "type": "number",
            "description": "opening width"
          },
          "sill_m": {
            "type": "number",
            "description": "height of the sill above the floor (windows)"
          },
          "height_m": {
            "type": "number",
            "description": "opening height"
          }
        },
        "required": [],
        "additionalProperties": false
      },
      "page": "/roomwright/"
    }
    roomwright_remove_openingAction

    Remove a door or window by its opening_id.

    View tool JSON
    {
      "name": "roomwright_remove_opening",
      "kind": "act",
      "impl": "imperative",
      "description": "Remove a door or window by its opening_id.",
      "inputSchema": {
        "type": "object",
        "properties": {
          "opening_id": {
            "type": "string",
            "description": "from get_room"
          }
        },
        "required": [
          "opening_id"
        ],
        "additionalProperties": false
      },
      "page": "/roomwright/"
    }
    roomwright_suggest_spotAction

    Ask where a piece could go. Optionally pass product_id (so the spots actually fit that piece) and near (a wall, the centre, the window, or the door) to bias the result. Returns the total open floor, the longest clear run along each wall, and up to three candidate positions with x/z in metres, a rotation, whether each sits against a wall, and how much clear space surrounds it.

    View tool JSON
    {
      "name": "roomwright_suggest_spot",
      "kind": "act",
      "impl": "imperative",
      "description": "Ask where a piece could go. Optionally pass product_id (so the spots actually fit that piece) and near (a wall, the centre, the window, or the door) to bias the result. Returns the total open floor, the longest clear run along each wall, and up to three candidate positions with x/z in metres, a rotation, whether each sits against a wall, and how much clear space surrounds it.",
      "inputSchema": {
        "type": "object",
        "properties": {
          "product_id": {
            "type": "string",
            "description": "optional — a product_id, name, or name fragment, so candidates fit this piece"
          },
          "near": {
            "type": "string",
            "description": "optional bias",
            "enum": [
              "north",
              "south",
              "east",
              "west",
              "centre",
              "window",
              "door"
            ]
          }
        },
        "required": [],
        "additionalProperties": false
      },
      "page": "/roomwright/"
    }
    roomwright_check_layoutAction

    Evaluate the current arrangement: overlapping pieces, pieces that block a door or window, pieces that do not have their required free space, and walkways under 0.75 m. Returns an overall status (ok, warn, bad), each issue with the piece it concerns, and the narrowest gap in the room.

    View tool JSON
    {
      "name": "roomwright_check_layout",
      "kind": "act",
      "impl": "imperative",
      "description": "Evaluate the current arrangement: overlapping pieces, pieces that block a door or window, pieces that do not have their required free space, and walkways under 0.75 m. Returns an overall status (ok, warn, bad), each issue with the piece it concerns, and the narrowest gap in the room.",
      "inputSchema": {
        "type": "object",
        "properties": {},
        "required": [],
        "additionalProperties": false
      },
      "page": "/roomwright/"
    }
    roomwright_get_shopping_listAnswer

    The pieces currently in the room as a shopping list — each product with quantity, unit price, and line total, plus the grand total in USD.

    View tool JSON
    {
      "name": "roomwright_get_shopping_list",
      "kind": "answer",
      "impl": "imperative",
      "description": "The pieces currently in the room as a shopping list — each product with quantity, unit price, and line total, plus the grand total in USD.",
      "inputSchema": {
        "type": "object",
        "properties": {},
        "required": [],
        "additionalProperties": false
      },
      "page": "/roomwright/"
    }
    roomwright_select_itemAction

    Highlight a placed piece in the 3D view and open its Inspector panel, so the user can see which piece you are talking about or about to change. Pass no placement_id to clear the selection.

    View tool JSON
    {
      "name": "roomwright_select_item",
      "kind": "act",
      "impl": "imperative",
      "description": "Highlight a placed piece in the 3D view and open its Inspector panel, so the user can see which piece you are talking about or about to change. Pass no placement_id to clear the selection.",
      "inputSchema": {
        "type": "object",
        "properties": {
          "placement_id": {
            "type": "string",
            "description": "from get_room; omit to deselect"
          }
        },
        "required": [],
        "additionalProperties": false
      },
      "page": "/roomwright/"
    }
    roomwright_set_viewAction

    Switch the camera between 'orbit' (an angled 3D view of the room) and 'plan' (looking straight down at the floor plan). Use plan to let the user judge the layout, orbit to show the room.

    View tool JSON
    {
      "name": "roomwright_set_view",
      "kind": "act",
      "impl": "imperative",
      "description": "Switch the camera between 'orbit' (an angled 3D view of the room) and 'plan' (looking straight down at the floor plan). Use plan to let the user judge the layout, orbit to show the room.",
      "inputSchema": {
        "type": "object",
        "properties": {
          "view": {
            "type": "string",
            "description": "orbit or plan",
            "enum": [
              "orbit",
              "plan"
            ]
          }
        },
        "required": [
          "view"
        ],
        "additionalProperties": false
      },
      "page": "/roomwright/"
    }
    roomwright_reset_layoutAction

    Clear everything and start over: removes every placed piece, every custom piece, and every opening you added, and restores the default room size and its original door and window. Undoable in the app. Use this when the user asks to start fresh.

    View tool JSON
    {
      "name": "roomwright_reset_layout",
      "kind": "act",
      "impl": "imperative",
      "description": "Clear everything and start over: removes every placed piece, every custom piece, and every opening you added, and restores the default room size and its original door and window. Undoable in the app. Use this when the user asks to start fresh.",
      "inputSchema": {
        "type": "object",
        "properties": {},
        "required": [],
        "additionalProperties": false
      },
      "page": "/roomwright/"
    }