bulc_place_furniture
Place furniture items in building designs using catalog IDs and precise centimeter coordinates, with options for custom dimensions, rotation, and floor level placement.
Instructions
Place a furniture item at the specified position. Get catalog IDs from bulc_list_furniture_catalog first. All coordinates are in centimeters.
Input Schema
TableJSON Schema
| Name | Required | Description | Default |
|---|---|---|---|
| catalogId | Yes | Catalog ID from bulc_list_furniture_catalog | |
| x | Yes | X coordinate in centimeters | |
| y | Yes | Y coordinate in centimeters | |
| elevation | No | Height from floor in centimeters. Default: 0 | |
| angle | No | Rotation angle in degrees (0-360). Default: 0 | |
| width | No | Custom width in centimeters (optional, overrides catalog) | |
| depth | No | Custom depth in centimeters (optional, overrides catalog) | |
| height | No | Custom height in centimeters (optional, overrides catalog) | |
| name | No | Custom name for display | |
| level | No | Floor level index. Default: current level |
Implementation Reference
- src/tools/furniture.ts:262-269 (handler)Handler logic for 'bulc_place_furniture': parses arguments using PlaceFurnitureSchema and sends a 'place_furniture' command to the BULC client.case "bulc_place_furniture": { const validated = PlaceFurnitureSchema.parse(args); result = await client.sendCommand({ action: "place_furniture", params: validated, }); break; }
- src/tools/furniture.ts:38-94 (schema)Tool schema definition for 'bulc_place_furniture' including name, description, inputSchema, and annotations, exported as part of furnitureTools array.{ name: "bulc_place_furniture", description: "Place a furniture item at the specified position. " + "Get catalog IDs from bulc_list_furniture_catalog first. " + "All coordinates are in centimeters.", inputSchema: { type: "object" as const, properties: { catalogId: { type: "string", description: "Catalog ID from bulc_list_furniture_catalog", }, x: { type: "number", description: "X coordinate in centimeters", }, y: { type: "number", description: "Y coordinate in centimeters", }, elevation: { type: "number", description: "Height from floor in centimeters. Default: 0", }, angle: { type: "number", description: "Rotation angle in degrees (0-360). Default: 0", }, width: { type: "number", description: "Custom width in centimeters (optional, overrides catalog)", }, depth: { type: "number", description: "Custom depth in centimeters (optional, overrides catalog)", }, height: { type: "number", description: "Custom height in centimeters (optional, overrides catalog)", }, name: { type: "string", description: "Custom name for display", }, level: { type: "integer", description: "Floor level index. Default: current level", }, }, required: ["catalogId", "x", "y"], }, annotations: { readOnlyHint: false, destructiveHint: true, }, },
- src/tools/furniture.ts:206-217 (schema)Zod validation schema (PlaceFurnitureSchema) for inputs to the bulc_place_furniture tool.const PlaceFurnitureSchema = z.object({ catalogId: z.string(), x: z.number(), y: z.number(), elevation: z.number().optional(), angle: z.number().optional(), width: z.number().positive().optional(), depth: z.number().positive().optional(), height: z.number().positive().optional(), name: z.string().optional(), level: z.number().int().optional(), });
- src/index.ts:40-51 (registration)Registration of tool schemas: spreads furnitureTools (including bulc_place_furniture) into the allTools array provided to MCP ListToolsRequest.const allTools = [ ...contextTools, // 8 tools: spatial context, home info, levels, undo/redo, save ...roomTools, // 5 tools: create, create_polygon, list, modify, delete ...wallTools, // 5 tools: create, create_rectangle, list, modify, delete ...furnitureTools, // 5 tools: catalog, place, list, modify, delete ...fdsDataTools, // 7 tools: get, fire_source, detector, sprinkler, hvac, thermocouple, clear ...meshTools, // 5 tools: list, create, auto, modify, delete ...simulationTools, // 4 tools: get_settings, time, output, ambient ...fdsRunTools, // 6 tools: preview, validate, export, run, status, stop ...resultTools, // 5 tools: open_viewer, list_datasets, point_data, aset, report ...evacTools, // 25 tools: setup, stairs, agents, run, results, advanced features ];
- src/index.ts:79-81 (registration)Handler routing registration: dispatches calls to 'bulc_place_furniture' (and other furniture tools) to handleFurnitureTool.if (name.startsWith("bulc_") && name.includes("furniture")) { return await handleFurnitureTool(name, safeArgs); }