pascalorg/editor
Open-source 3D architectural editor with a local CLI, MCP tools, and practical workflows for humans and AI agents.
Pascal Editor – A Local‑First 3D Building Editor with AI‑Agent Hooks
What it is – Pascal is an open‑source, browser‑or‑desktop 3D building editor built on React Three Fiber and the WebGPU‑enabled Three.js renderer. It runs locally (no cloud required) and can be started from a simple CLI command. The editor exposes a Model Context Protocol (MCP) server that lets external AI agents (e.g., Claude, Codex) talk to the scene, run tools, and query geometry.
Core pieces
| Package | Role |
|---|---|
@pascal-app/core |
Schemas, scene state (Zustand), registry contracts, spatial queries |
@pascal-app/viewer |
3D rendering, camera/controls, post‑processing |
@pascal-app/editor |
UI panels, selection manager, editing tools (walls, slabs, items, zones) |
@pascal-app/cli |
Installer, process manager, persistent local data (~/.pascal/data/pascal.db) |
@pascal-app/mcp |
HTTP server that exposes scene operations to AI agents via a typed protocol |
@pascal-app/nodes |
Built‑in node definitions (walls, floors, items, etc.) |
@pascal-app/capture‑* |
Optional capture‑session formats for importing/exporting scenes |
apps/editor |
Next.js host that bundles the above packages into a runnable app |
How it works
- CLI launch –
npx @pascal-app/cli editorstarts the Next.js editor and a background MCP service on a free loopback port. - Scene model – Nodes are flat objects (
id,type,parentId, …) stored in a Zustand store (useScene). Changes are persisted to IndexedDB and can be undone/redone via Zundo. - Rendering – React‑Three‑Fiber components (
NodeRenderer,WallRenderer, etc.) create Three.js objects and register them in a fast lookup registry (sceneRegistry). - Systems – React components run each frame (
useFrame) and only recompute geometry for nodes marked dirty in the store, keeping updates cheap. - AI integration – The MCP server implements a JSON‑based protocol that AI agents can call (
pascal mcp connect,pascal mcp setup claude). Skills such aspascal-3dandfurniture-fitare distributed via theskills.shmarketplace and let agents invoke scene‑editing actions without needing an API key.
Key features
- Local‑first: No external services required; all data lives on the user’s machine.
- WebGPU‑accelerated 3D: Real‑time rendering with React Three Fiber + Drei.
- Plugin system – Developers can ship new node types, tools, or side‑panels as npm packages that the editor loads at runtime.
- AI‑ready MCP – A standard HTTP endpoint that describes scene state, accepts tool commands, and returns validation results, enabling “AI‑assisted design” workflows.
- Versioned monorepo – Turborepo manages core, viewer, editor, CLI, and MCP packages; each can be published independently to npm.
- Undo/redo & persistence – Zundo provides a 50‑step history; IndexedDB stores the scene across sessions.
Getting started
# Quick install (Node ≥22.13)
npx @pascal-app/cli editor # launches editor + MCP
For development you need Bun (or pnpm) at the repo root:
bun install # install all workspaces
bun dev # watch + start Next.js dev server (http://localhost:3002)
To build and publish:
turbo build # build every package
npm publish --workspace=@pascal-app/core # repeat for other packages
Typical use‑cases
- Architects or interior designers building a quick 3‑D layout without cloud dependencies.
- Researchers prototyping AI agents that need to manipulate a 3‑D scene (e.g., “place a chair against the wall”).
- Plugin authors extending the editor with domain‑specific nodes (trees, HVAC, lighting).
- Teams that want a deterministic, version‑controlled environment for collaborative design (run multiple MCP instances with separate
PASCAL_HOMEdirectories).
AI‑agent workflow example
- Install the skill package:
npx skills add pascalorg/editor --skill pascal-3d. - Start the local MCP server (
pascal mcp setup claude). - In Claude Code, run
/mcp connect– the plugin automatically points the agent at the local MCP endpoint. - The agent can now issue commands like
createNode({type:"wall", …})orrunTool("ItemTool", {item:"chair", position:[1,0,2]})and receive immediate visual feedback.
Where to learn more
- Docs – https://editor.pascal.app/docs/developers/local-editor
- Plugin guide – https://editor.pascal.app/docs/developers/plugins
- Example plugin – https://github.com/pascalorg/plugin-trees
- Discord community – https://discord.gg/XRKsDcpqgS
All information above is taken directly from the repository’s README; no additional features have been inferred.
Related
- Project
- Project
- Project
- Project