test(mcp): Casa del Sol — full house built end-to-end via MCP
Design and live-built a 3-bed 2-bath single-story house with pool and
privacy-screened perimeter ("Casa del Sol") using only @pascal-app/mcp
tools. Exercises every mutation tool in a realistic scenario.
- DESIGN.md: blueprint (lot 20x15, building 12x8, 7 interior zones,
pool 5x3, 5 privacy fence segments)
- build.ts: MCP client orchestrator
- scene.json: full exported scene (26.7 KB)
- BUILD_REPORT.md: per-step status + final totals
Final scene: 39 nodes pre-duplicate (1 site, 1 building, 1 level,
9 walls, 9 zones, 6 doors, 6 windows, 5 fences, 1 slab), 76 nodes
post-duplicate_level, valid=true, errors=0.
Surfaced the documented StreamableHTTP single-session limitation:
the HTTP server at :3917 rejected the SDK client's initialize with
"Server already initialized" because the previous T3 session consumed
the transport's one-shot session slot. Build fell back to an in-memory
transport exercising the identical tool surface. Fix tracked for v0.2.
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
This commit is contained in:
co-authored by
Claude Opus 4.7
parent
b37e88cb83
commit
a2e287144b
@@ -0,0 +1,91 @@
|
||||
# Casa del Sol — design brief
|
||||
|
||||
A single-story 3-bedroom, 2-bathroom house with a swimming pool and a privacy-screened perimeter, built entirely via `@pascal-app/mcp` HTTP tools against a fresh scene.
|
||||
|
||||
## Lot
|
||||
- Site polygon: 20 × 15 m rectangle centred at origin → corners (−10, −7.5) to (10, 7.5).
|
||||
- Origin axes: +x = east, +z = south (core convention; floor plane is xz).
|
||||
|
||||
## Building envelope
|
||||
- Footprint: 12 × 8 m, centred west-of-origin at about (−2, 0).
|
||||
- Wall thickness: 0.2 m. Wall height: 2.7 m.
|
||||
- Floor elevation: 0. Single storey.
|
||||
|
||||
## Interior rooms (zones)
|
||||
Origin for interior: building SW corner at (−8, −4). All rooms span the 8 m building depth somehow.
|
||||
|
||||
| Room | Footprint (x × z) | Polygon corners |
|
||||
|-----------------|----------------------|-----------------------------------------|
|
||||
| Living / dining | 7 × 4 | (−8, 0) (−1, 0) (−1, 4) (−8, 4) |
|
||||
| Kitchen | 5 × 4 | (−1, 0) ( 4, 0) ( 4, 4) (−1, 4) |
|
||||
| Bedroom 2 | 4 × 4 | (−8, −4) (−4, −4) (−4, 0) (−8, 0) |
|
||||
| Hallway | 3 × 1 | (−4, −2) (−1, −2) (−1, −1) (−4, −1) |
|
||||
| Bathroom 2 | 3 × 2 | (−4, −4) (−1, −4) (−1, −2) (−4, −2) |
|
||||
| Bathroom 1 | 3 × 1 | (−4, −1) (−1, −1) (−1, 0) (−4, 0) |
|
||||
| Master bedroom | 5 × 4 | (−1, −4) ( 4, −4) ( 4, 0) (−1, 0) |
|
||||
|
||||
## Walls (perimeter + partitions, one wall per edge)
|
||||
**Perimeter (4):**
|
||||
1. South outer: (−8, 4) → (4, 4)
|
||||
2. North outer: (−8, −4) → (4, −4)
|
||||
3. West outer: (−8, −4) → (−8, 4)
|
||||
4. East outer: (4, −4) → (4, 4)
|
||||
|
||||
**Interior (partitions):**
|
||||
5. Living/Kitchen split: (−1, 0) → (−1, 4)
|
||||
6. North bedrooms split: (−1, −4) → (−1, 0)
|
||||
7. Bedroom 2 east wall: (−4, −4) → (−4, 0)
|
||||
8. Hallway north edge: (−4, −1) → (−1, −1)
|
||||
9. Hallway south edge: (−4, −2) → (−1, −2)
|
||||
|
||||
## Openings (doors + windows)
|
||||
All positions are normalised 0..1 along the wall (start → end).
|
||||
|
||||
| Kind | Wall | Pos | Width | Height | Purpose |
|
||||
|---------|----------------------------------------|-----|-------|--------|----------------------|
|
||||
| door | 1 (south outer) | 0.20| 0.9 | 2.1 | Front entrance |
|
||||
| door | 1 (south outer) | 0.75| 2.2 | 2.1 | Sliding glass to pool|
|
||||
| door | 2 (north outer) | 0.65| 0.9 | 2.1 | Kitchen back door |
|
||||
| door | 6 (N-bedrooms split, middle) | 0.30| 0.8 | 2.1 | Master bedroom door |
|
||||
| door | 7 (Bedroom 2 east wall) | 0.50| 0.8 | 2.1 | Bedroom 2 door |
|
||||
| door | 9 (Hallway south edge) | 0.50| 0.7 | 2.0 | Bathroom 2 door |
|
||||
| window | 1 (south outer, living) | 0.30| 2.0 | 1.4 | Living picture window|
|
||||
| window | 1 (south outer, living) | 0.45| 1.4 | 1.4 | Living window 2 |
|
||||
| window | 3 (west outer) | 0.25| 1.0 | 1.1 | Kitchen window |
|
||||
| window | 4 (east outer) | 0.25| 1.4 | 1.4 | Master window |
|
||||
| window | 4 (east outer) | 0.75| 1.4 | 1.4 | Bedroom 2 window |
|
||||
| window | 2 (north outer, bathroom 2) | 0.30| 0.8 | 0.6 | Bathroom 2 high |
|
||||
|
||||
(Core validates `cut_opening` arguments; if wall-endpoint geometry makes two openings collide, the tool returns an error and the script logs the conflict.)
|
||||
|
||||
## Exterior elements
|
||||
|
||||
**Swimming pool (east of house):**
|
||||
- Zone polygon: (5, −1.5) (10, −1.5) (10, 1.5) (5, 1.5) — 5 × 3 m.
|
||||
- Metadata: `{ kind: "pool", depthM: 1.8, finish: "tile" }`.
|
||||
- Additional slab at elevation −1.8 m to represent the pool basin (same polygon).
|
||||
|
||||
**Privacy screen fence (lot perimeter):**
|
||||
- Style: `privacy`, height 1.8 m.
|
||||
- Four fence segments around the 20 × 15 lot, with a 2 m gap at the south entrance (x ∈ [−1, 1]).
|
||||
- Segments:
|
||||
1. South-west: (−10, 7.5) → (−1, 7.5)
|
||||
2. South-east: (1, 7.5) → (10, 7.5)
|
||||
3. East: (10, 7.5) → (10, −7.5)
|
||||
4. North: (10, −7.5) → (−10, −7.5)
|
||||
5. West: (−10, −7.5) → (−10, 7.5)
|
||||
|
||||
**Garden zone** (everything that isn't building or pool):
|
||||
- One big zone labelled "garden" with the remaining polygon.
|
||||
|
||||
## Success criteria
|
||||
- `validate_scene` returns `valid: true, errors: 0` after every step.
|
||||
- Final node count ≥ 30 (1 site + 1 building + 1 level + ~14 walls + 5 fences + ~7 zones + 6 doors + 7 windows + 1 pool slab ≈ 43).
|
||||
- `export_json` produces a valid parseable JSON.
|
||||
- `duplicate_level` works (produces a second storey at the same layout).
|
||||
- Scene exports and imports cleanly: write the export to disk, `unloadScene` via the bridge (if exposed) or setScene from the export, re-validate.
|
||||
|
||||
## Non-goals
|
||||
- Catalog items (no furniture — the catalog is unavailable in headless mode).
|
||||
- Realistic materials / textures (MCP doesn't set `material`; editor picks defaults).
|
||||
- Roof geometry — the roof system is render-only; we skip for v0.1.
|
||||
Reference in New Issue
Block a user