Furniture Designer
Professional furniture design: specs, validation, cut optimization, BOM, and 3D reports.
Versions
0.1.3latestTools 25
get_standards Get ergonomic standards for a furniture type. Args: furniture_type: One of: kitchen_base, kitchen_wall, closet, bookshelf, desk, vanity, general brief: If true, return a compact summary instead of full JSON (saves tokens). Returns: Ergonomic standards (heights, depths, clearances) for the given type.
get_material_specs Get technical specifications for a material. Args: material: One of: mdf_15, mdf_18, melamine_16, melamine_18, plywood_18, solid_pine_20 brief: If true, return a compact summary instead of full JSON (saves tokens). Returns: Material properties: max unsupported span, available thicknesses, standard sheet sizes, edge banding options.
get_structural_rules Get all structural rules for furniture design. Args: brief: If true, return a compact summary instead of full JSON (saves tokens). Returns: List of rules covering reinforcement, back panels, kick plates, shelf supports, vertical dividers, and load-bearing requirements.
get_hardware_catalog Get hardware catalog with selection rules. Args: category: Optional filter — one of: hinges, slides, connectors, shelf_pins. If omitted, returns the full catalog. brief: If true, return a compact summary instead of full JSON (saves tokens). Returns: Hardware specifications with placement rules and quantities.
get_assembly_specs Get detailed assembly specifications for furniture construction. Covers joint methods, fastener patterns, adhesive usage, pre-drilling depths, hinge mounting, drawer slide installation, and shelf pin systems. Args: topic: Optional filter — one of: panel_to_panel, back_panel, hinge_mounting, drawer_slide_mounting, shelf_pins, adhesive_guide, pre_drilling. If omitted, returns all topics. brief: If true, return a compact summary instead of full JSON (saves tokens). Returns: Assembly specifications with step-by-step processes, fastener types, and material-specific parameters.
design_furniture Design a complete furniture piece with standards applied. Generates a full specification including all panels, reinforcements, hardware, and assembly order based on ergonomic standards and structural rules. Args: furniture_type: One of: kitchen_base, kitchen_wall, closet, bookshelf, desk, vanity width: Total width in cm height: Total height in cm depth: Total depth in cm material: Material key (default: melamine_16) options: Optional overrides — e.g. {"num_shelves": 3, "has_drawers": true, "door_type": "double", "kickplate_height": 10, "back_type": "full"|"rails"|"none", "sections": [{"content": "hanging"}, {"content": "drawers+hanging", "num_drawers": 3}, {"content": "shelves", "num_shelves": 6}]} Section content types: "shelves", "drawers", "hanging", "drawers+hanging", "drawers+shelves", "empty" compact: If true (default), return a compact summary + full JSON. If false, return only the full pretty-printed JSON. Returns: Complete furniture spec (JSON) with parts list, positions, hardware, and structural notes.
validate_structure Validate a furniture spec against structural rules. Checks unsupported spans, required reinforcements, hardware quantities, back panel presence, and stability. Args: spec: A furniture spec as returned by design_furniture. Returns: Validation report with errors (must fix) and warnings (recommended).
optimize_cuts Optimize panel cuts on standard sheets using guillotine algorithm. Args: parts: List of parts — each: {"id": "side_left", "width": 580, "height": 750, "qty": 1, "can_rotate": true, "grain": "length"} Dimensions in mm. Grain options per piece: "length" (grain along width — no rotation), "width" (grain along height — auto-rotates to match sheet), "none" (free rotation). sheet_width: Sheet width in mm (default: 2440 — standard 8ft). Grain runs along this axis on the sheet. sheet_height: Sheet height in mm (default: 1220 — standard 4ft) blade_kerf: Saw blade width in mm (default: 3) grain_direction: Global default grain for pieces without explicit grain. "auto" (default) = use each piece's grain/can_rotate fields. "length" = all pieces have grain along their width. "none" = ignore grain, free rotation. compact: If true (default), return a compact summary + full JSON. If false, return only the full pretty-printed JSON. Returns: Optimization result: sheets used, piece positions, waste percentage, grain arrows, and a text diagram.
generate_bom Generate a Bill of Materials from a furniture spec. Args: spec: A furniture spec as returned by design_furniture. compact: If true (default), return a compact summary + full JSON. If false, return only the full pretty-printed JSON. Returns: BOM with: panels (name, dimensions, material, edge banding), hardware (type, qty, reference), and summary.
get_assembly_steps Generate step-by-step assembly instructions for a furniture spec. Args: spec: A furniture spec as returned by design_furniture. compact: If true (default), return a compact summary + full JSON. If false, return only the full pretty-printed JSON. Returns: Ordered list of assembly steps with part references, hardware needed per step, and tips.
build_3d_model Build the furniture as a 3D model in FreeCAD. Creates Part::Box objects for each panel, positioned and color-coded by role, directly in the running FreeCAD instance via XML-RPC. Args: spec: A furniture spec as returned by design_furniture. doc_name: Name for the FreeCAD document (default: "Furniture"). Returns: Summary of what was built.
build_exploded_view Build an exploded assembly view in FreeCAD. Panels are separated along their assembly axis to visualize how the furniture comes together. Executed directly in FreeCAD via XML-RPC. Args: spec: A furniture spec as returned by design_furniture. gap_mm: Gap between exploded parts in mm (default: 50). doc_name: Name for the FreeCAD document (default: "Exploded"). Returns: Summary of what was built.
build_cut_diagram Build a cut layout diagram in FreeCAD. Creates a top-down view of each sheet with pieces placed according to the cut optimizer output. Executed directly in FreeCAD via XML-RPC. Args: cut_result: Result from optimize_cuts tool. doc_name: Name for the FreeCAD document (default: "CutLayout"). Returns: Summary of what was built.
build_spec Build a complete furniture spec from a high-level layout description. This is a convenience tool that eliminates the need to manually calculate mm positions, slide clearances, kickplate offsets, etc. Just describe the furniture in columns and rows. Args: layout: High-level description with columns and rows. Example: { "furniture_type": "closet", "width_cm": 240, "height_cm": 240, "depth_cm": 60, "material": "melamine_16", "kickplate_height_cm": 10, "back_type": "full", "columns": [ { "width_cm": 80, "rows": [ {"type": "hanging_bar", "height_cm": 160}, ] }, { "width_cm": "auto", "rows": [ {"type": "drawers", "count": 3, "drawer_height_mm": 140}, {"type": "hanging_bar", "height_cm": 160}, ] }, { "width_cm": "auto", "rows": [ {"type": "shelves", "count": 6}, ] } ] } Column width_cm can be a number or "auto" (distributes remaining space). Row types: "shelf", "shelves", "drawers", "hanging_bar", "empty". compact: If true (default), return compact summary + full JSON. Returns: Complete furniture spec ready for validate_structure, generate_bom, optimize_cuts, build_3d_model, etc.
build_techdraw Build a TechDraw technical drawing in FreeCAD. Produces an A3 landscape sheet with three orthographic views (front, top, right side) of the furniture, auto-scaled to fit. Useful for fabrication documentation and client presentations. The script is self-contained — it rebuilds the geometry as a compound, so it does NOT require the 3D model to already exist in FreeCAD. Executed directly in FreeCAD via XML-RPC. Args: spec: A furniture spec as returned by design_furniture. doc_name: Name for the FreeCAD document (default: "TechDraw"). export_svg: If true (default), export the TechDraw page to SVG. export_dir: Directory for SVG export (default: "/tmp"). Returns: Summary of what was built, including SVG path if exported.
build_import_script Generate a FreeCAD Python script that reads all panels from a document. The script extracts every App::Part (with custom properties) and standalone Part::Box from the specified document, then prints a JSON representation to stdout. Execute the script via freecad-mcp's execute_code, then pass the output to parse_freecad_import to get a usable furniture spec. Workflow: 1. Call build_import_script(doc_name) → get Python script 2. Call mcp__freecad__execute_code(script) → get raw output with JSON 3. Call parse_freecad_import(raw_output) → get furniture spec 4. Use the spec with validate_structure, generate_bom, optimize_cuts, etc. Args: doc_name: Name of the FreeCAD document to read (default: "Furniture"). Returns: Python code to execute in FreeCAD.
parse_freecad_import Parse the output of the import script into a furniture spec. Takes the raw stdout from executing the import script in FreeCAD and reconstructs a furniture spec with parts, positions, materials, and roles. For panels created by this system (App::Part with custom properties), the reconstruction is exact. For manually created Part::Box objects, roles are inferred from names and geometry. Args: raw_output: The stdout text from executing the import script via freecad-mcp's execute_code tool. Returns: A furniture spec (JSON) compatible with validate_structure, generate_bom, optimize_cuts, build_exploded_view, etc. May include "import_warnings" if any panels needed inference.
create_design Create a new design project. Sets up a directory with metadata for a new furniture design. Use this before calling update_design_report with a design_id. Args: name: Human-readable name (e.g., "Closet Dormitorio Principal"). furniture_type: One of: kitchen_base, kitchen_wall, closet, bookshelf, desk, vanity. Returns: Design ID, path, and URL (if server is running).
list_designs List all active furniture designs with metadata. Returns: List of designs with name, type, iteration count, and timestamps.
get_design_context Retrieve the full context of a design for resuming work. Returns the latest spec, metadata, and iteration history so the agent can continue from where the user left off. Args: design_id: The design identifier (slug). Returns: Spec JSON + metadata + iteration summary.
start_design_server Start the local HTTP server for serving design reports with live reload. The server provides: - Index page listing all designs at http://localhost:{port}/ - Individual design reports at http://localhost:{port}/{design_id} - WebSocket for live reload at ws://localhost:{port}/ws/{design_id} - JSON spec API at http://localhost:{port}/api/{design_id}/spec Args: port: HTTP port (default: 8432). Falls back to random port if busy. designs_dir: Directory for design files (default: ./designs). Returns: Server URL and status.
update_design_report Generate or update an interactive HTML design report. Creates a self-contained HTML file with 3D visualization (Three.js), iteration comparison slider, and clickable panels with dimensions. If design_id is provided, uses the DesignStore (recommended for multi-design workflows with live reload). Otherwise falls back to output_path for backward compatibility. Args: spec: A furniture spec as returned by design_furniture. comment: Description of this iteration's changes (e.g. "Added drawer"). iteration_name: Label for this version (e.g. "v2"). Auto-generated if omitted. design_id: Design identifier from create_design. If set, uses DesignStore. output_path: Path for the HTML file. Only used if design_id is not set. Defaults to ./design_report.html. cut_data: Optional cut optimization result from optimize_cuts. Returns: Path to the generated HTML report file and URL if server is running.
generate_full_report Design furniture and generate a complete report in one step. Runs the full pipeline: design → validate → BOM → cut optimization → assembly instructions → interactive HTML report with all tabs populated. Args: furniture_type: One of: kitchen_base, kitchen_wall, closet, bookshelf, desk, vanity width: Total width in cm height: Total height in cm depth: Total depth in cm material: Material key (default: melamine_16) options: Optional overrides (same as design_furniture options) comment: Description for this iteration iteration_name: Label for this version (auto-generated if omitted) output_path: Path for the HTML file. Defaults to ./design_report.html. Returns: Summary of the full pipeline results and path to the HTML report.
get_section_map Get or resolve section labels from a furniture spec. Analyzes dividers in a spec to identify sections (S1, S2, …) with human-readable labels and aliases for natural language resolution. Args: design_id: Load spec from a saved design (alternative to passing spec). spec: JSON string of a furniture spec (alternative to design_id). resolve: Optional natural language text to resolve to a section ID (e.g. "izquierda", "centro", "S2"). Returns: Section map with labels, aliases, boundaries, and parts per section. If resolve is provided, also includes the matched section ID.
reload_engine Reload all engine modules to pick up code changes during development. Use after modifying engine files (designer.py, cut_optimizer.py, etc.) without restarting the MCP server. Returns: List of reloaded modules.
Permissions 2
network medium filesystem low