Files
editor/packages/mcp/test-reports/research/R10-ideas-and-edges.md
T
Adrian PerezandClaude Opus 4.7 42bd05db9c docs(mcp): add 10-agent research on scene-save workflow
10 parallel research agents (R1-R10) investigated whether MCP can save
scenes as saveable entities that the user later opens in the editor —
rather than injecting via a dev-only window.__pascalScene hook.

Key findings:
- Editor is already backend-agnostic via onLoad/onSave callbacks (R2,R7)
- Current persistence is localStorage-only, single key (R1)
- Zero dynamic routes and no backend code yet — env declared (R4,R5)
- File import exists as "Load Build" but lacks Zod validation (R6)
- MCP-written scenes load cleanly into the editor today (R6, Casa del
  Sol test already proved this)
- Best path: filesystem-handoff this week, Supabase in weeks 2-4,
  Supabase Realtime for live mode in Q2. Skip Yjs for now. (R8)
- 4-5 weeks to private beta, 10-14 to GA (R9)
- 10 high-value ideas ranked; "photo -> scene" is the unblocker (R10)

SYNTHESIS.md pulls all 10 reports together with the recommended
implementation plan.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-04-18 18:47:36 +02:00

20 KiB
Raw Blame History

R10 — Ideas, Edges, and Unlocks

Agent: Research Agent R10 Date: 2026-04-18 Scope: brainstorm, not specification

Grounded in the @pascal-app/mcp package. MCP today exposes 21 tools, 4 resources, 3 prompts, runs headless in Node, mutates a Zustand (+ Zundo) scene graph, and can round-trip JSON. The editor is Next.js + R3F + WebGPU, persists to IndexedDB, has three Zustand stores (useScene, useViewer, useEditor), and has no user-account backend today beyond a health API route. GLB export is stubbed; catalog resolves asset:// URLs only in the browser. That surface area is the substrate I brainstorm against.

Legend: S ≤ 2 dev-days, M 12 weeks, L 3+ weeks / cross-cutting.


1. Workflows unlocked

1.1 Prompt → Pascal one-shot studio Value: a landing page textarea ("design me a 90 m² south-facing apartment in Barcelona") that spawns a scene and drops the user into the editor with orbit camera pre-aimed. Lowest-friction wedge for consumer acquisition. Effort: M (needs hosted MCP + auth + an agent loop that calls from_brief). Risk: expectations calibration — generated scenes will look schematic without finishes.

1.2 Photo → Pascal via analyze_floorplan_image Value: the tool exists but currently only the MCP host calls it. Exposing a drag-and-drop upload in the editor (viewer-overlay) that posts to MCP and returns a ready-made scene turns Pascal into a floorplan digitiser. Realtors and renovators will pay for this alone. Effort: M (client upload, MCP host with sampling, progress UI). Risk: the vision model is approximate; users will expect dimensional exactness and blame Pascal for mis-reads.

1.3 Listing URL → Pascal (Zillow / Idealista / Rightmove) Value: paste a listing URL, a scraper extracts the floor plan image + listed area, analyze_floorplan_image produces the scene, then "remodel" prompts run on top. Enormous cold-start value — the user arrives with a house they already care about. Effort: L (scraping layer, anti-bot, per-site parsers, legal). Risk: ToS / legal on scraping; drives a category of "renovation-before-offer" anxiety that may alienate listings.

1.4 Multi-variant generation Value: "give me 5 kitchen variations" → 5 forked scenes saved as siblings, tiled in a comparison view. Pattern-matches Midjourney's grid. Encourages exploration, sells more generations. Effort: M (needs scene forking + a comparison UI; the forkSceneGraph helper exists already in core/clone-scene-graph). Risk: without a scored objective ("cheapest", "most storage"), users get lost choosing; need ranking.

1.5 Regulatory/accessibility lints Value: "ensure this scene complies with Spanish Código Técnico de la Edificación accessibility." MCP walks zones/doors/stairs, flags minimum door widths, corridor widths, ramp slopes, stair rise/run. Sells to architects and BIM shops. Effort: L (per-jurisdiction rule packs; check_collisions is a proof the traversal works). Risk: false confidence — a lint pass is not a stamped permit; liability exposure.

1.6 Live co-design ("AI architect next to me") Value: editor sidebar chat pane; user edits walls, AI proposes adjustments ("you lost the light well — shall I add a skylight?") via MCP on a debounced scene diff. Screen-share-ready demo. Effort: L (streaming agent, scene-diff prompts, throttling). Risk: agents nagging mid-edit is the fastest route to churn; needs carefully tuned interventions.

1.7 Voice-driven redlines on a phone Value: open a scene on mobile (preview-button path exists), talk into the mic ("turn the office into a nursery, softer colours"), MCP applies patches, renderer reflows on reload. Wins the "showing mum the renovation" moment. Effort: M (Whisper → text → from_brief/iterate_on_feedback, mobile-friendly result). Risk: WebGPU on low-end Android will fail; need a fallback still renderer.

1.8 Cost + BOM synthesis Value: after scene generation, MCP walks catalog items and zones → exports a parts-list CSV with Spanish supplier SKUs and regional labour rates. Converts the toy into a quoteable artefact. Effort: M (catalog → pricing mapping, jurisdictional labour constants). Risk: pricing drifts; must be explicit about "indicative".

1.9 Time-lapse tours Value: MCP emits a keyframed camera flythrough script (camera node already exists in BaseNode.camera). One click → shareable MP4. Drives social acquisition. Effort: M (stitch recorder in the viewer; apply_patch can set cameras). Risk: WebGPU video capture is finicky across Safari.


2. Novel primitives

2.1 Scene branches & forks (Pascal-Git) Value: "save as branch" on every MCP mutation; user can compare, merge, or revert branches visually. The current temporal middleware gives us a linear undo stack; exposing a DAG unlocks nondestructive exploration and is a natural home for multi-variant results. Effort: L (schema for branches, UI, storage beyond IndexedDB). Risk: merge semantics for geometry are unsolved — walls and openings resist 3-way merge.

2.2 Scene templates catalog Value: a resource pascal://templates/* — studio apartment, ADU, Japanese machiya, Barcelona eixample flat. from_brief prompts seed from the nearest template, drastically improving first-shot quality. Effort: SM (author ~20 templates, register as MCP resources). Risk: templates can anchor the generator; need variety + randomisation.

2.3 Component library / "sub-scenes" Value: save a kitchen layout as a reusable component that carries its own sub-graph. MCP tool instantiate_component drops it onto a level with a transform. Mirrors Figma components. Effort: M (schema addition for component refs or instance-of nodes; invalidation when parent changes). Risk: local-vs-shared component propagation; ownership of community components.

2.4 Scene diff view Value: built on top of export_json + a structured differ — show "AI added 3 walls, removed 2 doors, reshaped zone X". Makes AI suggestions reviewable like a PR. Effort: M (diff algo, UI, inline accept/reject per patch). Risk: diff UIs require high polish to feel trustworthy.

2.5 explain_scene tool Value: a new MCP tool (or prompt) returning a natural-language summary: "A 92 m² duplex with the kitchen facing west; accessibility score 6/10; conspicuously no closet space." Turns scenes into legible artefacts for non-3D users. Effort: S (wrapping scene-summary resource with an LLM prompt). Risk: hallucinated detail; must be grounded strictly in find_nodes data.

2.6 Semantic scene search Value: "find every wall in the scene longer than 4 m that faces south" → find_nodes is spec'd narrowly (type/parent/zone/level); extend with predicates + embedding search over metadata. Effort: M (predicate DSL or JSON-logic filter, optional embeddings). Risk: query DSLs get complex fast; keep it constrained.

2.7 Real-world anchor nodes Value: a SiteOrigin node carrying lat/lon/heading/altitude so MCP can reason about sun path, climate, zoning. Enables solar analysis and jurisdictional rules. Effort: S schema, L downstream (solar calc, sun path widget). Risk: accidentally leaking address when scenes are shared.

2.8 Commentable scene nodes Value: add a comment or annotation edge to any node: "client wants this moved 20 cm". Makes Pascal a review surface for human + AI collaboration. Dovetails with 2.4. Effort: S (new schema node; UI pin). Risk: scope creep into full comments system.


3. Edge cases

3.1 Concurrent MCP writers Two agents holding the same SceneBridge both call apply_patch on the same node. Zundo coalesces at the store level; there is no lock. Result: lost updates, order-dependent chaos. Mitigation: per-bridge operation mutex, or optimistic version stamps inside UpdatePatch.

3.2 Invalid scene crashes editor MCP writes a DoorNode with parentId pointing to a slab. validate_scene catches it, but a misuse of apply_patch with a forged parent slips through. Editor hooks assume doors under walls and blow up. Mitigation: the editor should hydrate through the same Zod validator, not trust the JSON. Add an "editor-safe boot" path that falls back to a recovery scene.

3.3 10k-node performance cliff The Zustand store keeps a flat nodes dict; most tools iterate linearly. check_collisions is O(n²) on item bounds. Agents might produce hundreds of chairs in an office. Mitigation: budget + warn inside apply_patch, or cap nodes per type with a clear error.

3.4 Circular parent-child refs validate_scene covers Zod shape; a patch chain can still create a cycle (A.parent=B, B.parent=A). Traversal hangs. Mitigation: cycle detection pass in apply_patch dry-run before commit.

3.5 Camera points at nothing AI creates a 5 cm tall decorative bowl on the second floor and the last-placed-camera convention zooms there. First impression: black screen. Mitigation: always auto-frame to root bounding box on MCP-opened scenes; store a pascal://scene/current/recommendedCamera resource.

3.6 Broken external assets ItemNode can reference asset:// URLs; in Node, the core asset loaders are browser-only and return nothing. A scene saved in the browser with asset URIs, then opened headless, displays placeholders; a scene passed back to the browser still references dead IDs. Mitigation: MCP must round-trip asset URIs opaquely (never create new asset:// IDs), and the editor should show a "missing asset" fallback.

3.7 User edits after MCP — merge or clobber? The current bridge is stateful with a linear undo stack. If an agent re-runs from_brief on a user-modified scene, it rewrites from scratch. Either we implement 3-way merge (2.1) or we lock the scene and make MCP operate on a branch. Mitigation: default to fork-on-regenerate; never overwrite user edits.

3.8 PII in shared scenes A floor plan with lat/lon (2.7) or matching a real home is a privacy liability. Exporting export_json strips nothing. Agents uploading scenes to a shared LLM vendor leaks data. Mitigation: a strip_pii utility that blanks address/gps/photos; explicit consent dialog before MCP sends images to remote hosts.

3.9 Offline + cloud scenes If we add cloud persistence (§5), MCP runs against a server-only scene when user is offline. Writes queue; reconciliation becomes a merge problem (3.7). IndexedDB persistence covers local, not cross-device. Mitigation: conflict-free writes via CRDT-style patch log keyed by node ID.

3.10 Sampling unavailable analyze_floorplan_image gracefully errors when the host lacks sampling. Users who paid for this feature on a non-Claude host get a brick. Mitigation: publish a supported-host matrix; provide a first-party web host for users without one.

3.11 GLB export stub export_glb throws not_implemented. An AR-preview (§4.6) or a glTF-requiring downstream (Unity, Blender) falls off a cliff. This is the single largest productisation gap. Mitigation: stand up a headless renderer worker (puppeteer + WebGPU) or build a geometry exporter independent of three-mesh-bvh.

3.12 Prompt injection via scene metadata BaseNode.metadata is arbitrary JSON. A hostile scene file seeds strings into describe_node output, which an LLM later reads. Classic indirect prompt injection. Mitigation: sanitise/escape metadata when emitting into model-visible surfaces; strip control tokens.

3.13 Temporal stack explosion Zundo caps history but MCP could batch thousands of operations per "patch" — one undo reverts huge changes invisibly. Users panic when Cmd-Z throws away the whole room. Mitigation: each MCP mutation shows a visible "AI step" badge; undo granularity documented.

3.14 Units mismatch MCP tools say meters; catalog items may carry cm internally. Silent drift of 100x. Mitigation: enforce units at the schema boundary; add a unit-assertion test in CI.


4. Integrations

4.1 Figma → Pascal Value: a Figma plugin lets designers hand a 2D mood board to an MCP scene. The palette, materials, and key dimensions flow in. Wins the handoff from 2D to 3D. Effort: M. Risk: Figma plugin review; limited 3D fidelity.

4.2 Revit / SketchUp / IFC import Value: architects live in these tools; Pascal becomes the "redline + present" layer. IFC in particular is the lingua franca of BIM. Effort: L (IFC parser; map to Pascal nodes). Risk: schema mismatch; Pascal is lighter-weight than full BIM.

4.3 USD / glTF / IFC export Value: outward compatibility = easier adoption. USD for Pixar/Nvidia Omniverse pipelines, glTF for web, IFC for construction. Unlocks 4.2 reciprocally. Effort: ML per format. Risk: 3.11 — geometry derivation still lives in the browser renderer; export-by-transpile is needed.

4.4 MCP tool marketplace Value: third parties publish style MCPs ("Japandi kitchen", "Brutalist staircase", "Zaha-Hadid-ish"). They compose as sub-tools callable from from_brief. Pascal becomes a platform. Effort: L (registry, sandboxing, review). Risk: quality dilution; security (3.12).

4.5 Planning-permission APIs (UK Planning Portal, Spain Sede Electrónica) Value: generated scene → pre-filled planning application PDF. Brutal time-saver. Differentiator vs Canva-for-architecture competitors. Effort: L. Risk: compliance; rules differ per council.

4.6 AR preview — Apple RoomPlan / ARKit / ARCore Value: phone scans the room with RoomPlan → MCP ingests the plist → user redesigns in Pascal → AR overlays result onto the real room. Tactile "buy this sofa here" moment. Effort: L (iOS/Android apps; glTF export 3.11 prerequisite). Risk: needs native apps Pascal doesn't have.

4.7 E-commerce catalog bridges (IKEA, Wayfair, Kave Home) Value: map ItemNode.catalogItemId to retailer SKUs. "Checkout this room" button. Affiliate revenue. Effort: M (catalog mapping, retailer API quirks). Risk: SKU churn; regional availability.

4.8 Google Earth / OSM site context Value: lat/lon (2.7) + MapBox → Pascal renders the adjacent buildings, street, sun path. Scene gains real-world context. Critical for facade design. Effort: L. Risk: licensing maps data.


5. Monetization

5.1 Pay per generation Value: $0.50$2 per from_brief call. Low commitment, matches OpenAI/Midjourney consumer norms. Effort: S (Stripe + credits; MCP host tracks). Risk: commoditised unless paired with templates (2.2) or regulatory value (1.5).

5.2 Pro subscription (unlimited AI + cloud saves) Value: $15/mo predictable ARR. Effort: M. Risk: balance cost; fair-use caps for heavy users.

5.3 Template / component marketplace Value: creators sell templates (2.2) and components (2.3). Pascal takes 20%. Effort: M (payments, tax, takedowns). Risk: content moderation; cold-start supply.

5.4 Enterprise BIM seat Value: firms pay per seat; access to IFC import, compliance packs, branded export. $50200/seat/mo. Effort: L. Risk: SOC2, procurement cycles.

5.5 Lead-gen for contractors Value: after a scene is generated, Pascal matches to local contractors with quote requests. Contractors pay per lead. Effort: M. Risk: lemons-market; must vet contractors.

5.6 Branded MCP for retailers Value: IKEA white-labels Pascal's MCP under "IKEA Studio". Licensing fee. Pascal stays the engine, retailer owns the UI. Effort: M (API + licensing). Risk: channel conflict; retailers might eat Pascal.


6. Ecosystem beyond current scope

6.1 Pascal MCP becomes a standard for spatial editors Value: the tool verbs (create_wall, place_item, cut_opening) generalise. Onshape, SketchUp, Rhino could adopt a "spatial MCP" profile. Pascal authors the spec. Effort: L (ecosystem work, not code). Risk: platforms resist standards that commoditise their moats.

6.2 Open-source Pascal Scene Format Value: USD is overkill for interior/architectural scenes; glTF lacks building semantics. A Pascal-flavoured JSON schema (already Zod-native) becomes the "Markdown of interiors". Could ship as @pascal-app/scene-format. Effort: M to carve out; L to evangelise. Risk: yet-another-format fatigue; ties ecosystem to Pascal's semantic choices.

6.3 Educational channel — "Design school in Pascal" Value: a publisher (or Pascal) ships a curriculum — "design a studio flat", "analyse daylight". Classrooms teach design thinking with an MCP agent as tutor. Effort: M (curriculum; content). Risk: sales-motion mismatch with a B2C/B2B tool.

6.4 Scene replay / provenance logs Value: every MCP patch is signed, stored, and replayable. A regulator or client can audit the design history. Opens procurement doors. Effort: M (append-only log; signing keys). Risk: GDPR implications of retention.

6.5 Physical fabrication downstream Value: furniture/cabinet generation → CAM-ready DXF → CNC shop. Unlocks "AI designed and built my kitchen" as a narrative. Effort: L. Risk: tolerances; liability.

6.6 Agent-to-agent Pascal Value: a procurement agent talks to a designer agent talks to a contractor agent — Pascal scenes are the shared artefact. Pushes Pascal as infrastructure for the agent web. Effort: L (policy, auth between agents). Risk: sounds crazy today; will be obvious by 2027.


7. Crazy-but-maybe ideas

7.1 "Sceneprint" — give Pascal a photo of you standing in your room; it infers which room, auto-positions the camera, and starts redesign from there. Sells to TikTok.

7.2 "Phantom move-in" — MCP grafts your furniture (measured from another Pascal scene) into a listing. Realtors hand buyers a pre-staged version of the home they're considering.

7.3 Insurance-linked scenes — an insurance app ingests your Pascal scene to price contents cover faster and more accurately. Scene = digital twin = underwriting data.

7.4 Agent-on-call — you email pascal@your.domain with a photo; MCP replies with a scene URL. No app, no login, pure asynchronous co-design. Drives discovery far beyond the editor.

7.5 "Haunted" scenes — designer publishes a scene; buyers walk through in AR; on replacement of an item, MCP whispers "the designer disagrees — here's why". Opinionated design, monetised.

7.6 Voice-coded CAD for blind users — purely spoken design, Pascal describes the scene back via explain_scene (2.5). Genuine accessibility win and possibly grant-fundable.

7.7 Multi-player Pascal — Yjs/CRDT layer on the scene graph, MCP agents as first-class collaborators alongside humans. Google Docs for interiors.


Top 10 ideas ranked by (value × feasibility)

  1. 1.2 Photo → Pascal (floor plan upload) — MCP already has analyze_floorplan_image; only the UI entry point and host plumbing are missing. Highest value-for-effort unlock in the repo right now.
  2. 2.2 Scene templates catalog — SM effort, dramatically improves from_brief output quality, and doubles as marketplace seed inventory (5.3).
  3. 3.5 Auto-framing camera on MCP-opened scenes — a tiny fix for the single most embarrassing failure mode ("black screen"). S effort, huge UX.
  4. 1.1 Prompt → Pascal one-shot studio — the canonical "MCP creates scene" workflow. Build it as the hosted front door, not a side feature.
  5. 1.4 Multi-variant generationforkSceneGraph already exists; a comparison grid lights up exploration and creates upsell moments (pay-per-variant).
  6. 2.4 Scene diff view — makes every AI action reviewable and is a prerequisite for 1.6 and 3.7 merge flows.
  7. 1.8 Cost + BOM synthesis — converts toy scenes into quoteable artefacts; directly monetisable via retailer affiliates (4.7).
  8. 2.1 Scene branches & forks — larger, but it dissolves the "overwrite vs merge" edge (3.7) and is the structural foundation for multi-variant and AI co-design.
  9. 3.11 GLB / glTF export via headless renderer — unlocks AR (4.6), USD/IFC bridges (4.3), and removes the most cited "limitation" in the README.
  10. 1.5 Regulatory/accessibility lints (pilot: one jurisdiction) — pick Spain or the UK, ship one rule pack; opens the B2B architect segment where budgets live.

Honourable mention: 1.6 Live co-design — the single most defensible long-term product vision, but it depends on 2.1, 2.4, and a streaming agent layer the repo doesn't have yet. Build the pieces, then assemble.