Pascal Editor — ein Gebäude-Editor, den ein Agent headless bedienen kann
Ein quelloffener 3D-Gebäude-Editor mit einer Besonderheit: Neben der Browser-Oberfläche liegt ein vollwertiger MCP-Server, der dieselbe Szene ohne Browser, ohne Konto und ohne fremden Server steuert. Wir haben ihn nicht am Rechteck-Haus geprüft, sondern am Wabenraster unseres eigenen Vereinsgebäudes.
Der Bau-Teil ist echt und lokal: 37 MCP-Werkzeuge bauen und prüfen ein Gebäude in Millisekunden ohne Browser — auch unser sechseckiges Wabenraster, das im Quervergleich mit unserer eigenen Rechnung bis auf die 18 Außenfacetten übereinstimmt. Der Ausgabe-Teil ist es nicht: der GLB-Export ist headless ausdrücklich nicht implementiert und bleibt an den Browser gebunden.
- Autor
- Pascal Group Inc.
- Venue
- GitHub — pascalorg/editor (2026)
- Lizenz
- MIT (Code) — Lizenz der 145 mitgelieferten 3D-Möbel ist nirgends ausgewiesen
Es gibt viele quelloffene 3D-Editoren. Was Pascal Editor aus der Menge hebt, ist nicht der Editor, sondern das, was daneben liegt: ein vollwertiger MCP-Server, der dieselbe Szene ohne Browser bedient. Damit ist die Frage nicht mehr „kann ein Mensch damit ein Haus zeichnen“, sondern „kann eine Maschine es“. Wir haben genau das geprüft.
Das Projekt kommt von Pascal Group Inc., steht seit Oktober 2025 unter MIT-Lizenz und hat in neun Monaten über 20.000 Sterne gesammelt — ein Tempo, das erst einmal nichts über Qualität sagt. Der Unterbau ist allerdings ernsthaft: React 19 und Next 16 im Browser, Three.js mit WebGPU für die Darstellung, 47 Zod-geprüfte Knotentypen von der Wand über die Treppe bis zum Lüftungskanal, alles flach gespeichert und über Elternverweise verknüpft. Der Plugin-Vertrag für eigene Bauteile ist öffentlich dokumentiert, nicht nur intern vorhanden.
Was wir gemessen haben
Wir haben das Repo geklont, gebaut und einen eigenen Agenten-Spike gefahren: zwei Räume im Erdgeschoss — Werkstatt mit 48 m², Aufenthaltsraum mit 30 m² —, Tür und Fenster wandlokal gesetzt, ein Obergeschoss angelegt, die Szene geprüft und exportiert. Alles über die MCP-Schnittstelle, kein Browser im Spiel.
Es funktioniert, und zwar schnell. Der Server ist nach 37 ms bereit, das komplette zweigeschossige Gebäude steht nach 57 ms — 27 Knoten, Szene gültig, keine Kollisionen. Die 297 mitgelieferten Tests laufen in 0,7 Sekunden durch. Türen und Fenster werden in wandlokalen Metern zurückgemeldet, mit ausdrücklicher Angabe des Bezugssystems; wer sie falsch interpretiert, kann sich nicht auf schlechte Dokumentation berufen.
Und was nicht funktioniert
Zwei Befunde gehören genauso in diesen Bericht.
Erstens: Der GLB-Export trägt headless nicht. Ruft man ihn ohne Browser auf, antwortet er ehrlich mit „nicht implementiert“ und der Begründung, dazu brauche es den Three.js-Renderer. Das ist genau die Stelle, an der wir ihn gebraucht hätten — die Kette vom Agenten über ein 3D-Modell nach Blender und weiter in den Druck schließt sich damit nicht von allein. Was headless herauskommt, ist das Szenenmodell als JSON. Für Flächen, Maße und Auswertung reicht das; zum Rendern nicht.
Zweitens haben wir beim Prüfen einen Fehler gefunden. Das Werkzeug
get_level_summary liefert ein Feld, das sein eigenes Ausgabe-Schema nicht
kennt. Weil das Schema zusätzliche Felder ausdrücklich verbietet, bricht der
Aufruf mit einem harten Protokollfehler ab — bei jedem Programm, das
vorher die Werkzeugliste abruft, und das tun alle. Die eigene Testsuite
übersieht es, weil sie diesen Schritt auslässt. Wir haben alle Werkzeuge
durchgemessen: eines von 37 ist betroffen, der Rest hält sein Schema ein.
Das ist ein gutes Verhältnis — und ein präzises Upstream-Issue, das wir
zurückgegeben haben: #566,
mit Reproduktion, Ursache und Ein-Zeilen-Korrektur.
Der ehrliche Prüffall: unsere eigene Wabe
Ein Rechteck-Haus zu bauen beweist wenig. Unser Vereinsgebäude ist kein Rechteck-Haus, sondern ein Wabenraster — sieben Sechseck-Zellen um eine zweigeschossige Mitte, Facette 3,75 Meter. Genau daran haben wir Pascal gemessen, mit der Geometrie direkt aus der Modellquelle unserer HQ-Seite, nicht mit nachgezeichneten Zahlen.
Das Ergebnis war besser als erwartet. Pascal nimmt Sechsecke ohne Murren entgegen und meldet jede Zelle mit 36,54 m² — dem exakten Wert von 36,5354 m², soweit das Werkzeug ihn überhaupt ausgibt, denn es rundet Flächen auf zwei Stellen. Die Facettenlänge kommt mit 3,75 m zurück, wie es sich für ein reguläres Sechseck gehört. Sieben Zellen, 42 Wände, 68 Knoten, Szene gültig, keine Kollisionen, 49 ms. Ein Werkzeug, dessen Oberfläche stark nach rechten Winkeln aussieht, verträgt unser Raster also klaglos.
Der zweite Fund verlangt Sorgfalt. Wo zwei Zellen eine Facette teilen, legt Pascal je Zelle einen eigenen Wandkörper an: 42 Körper auf nur 30 Grundrisslagen, 12 Lagen also doppelt besetzt. Die Kollisionsprüfung meldet dazu null. Verlockend wäre jetzt, einfach eine der beiden Wände zu streichen — und das wäre falsch. Die beiden sind nämlich nicht deckungsgleich: die Halle steht 5,30 m hoch, ihre Nachbarzellen 3,20 beziehungsweise 2,95 m. Das gemeinsame Stück ist Innenwand, der Überstand der höheren Zelle ist echte Außenwand. Wer die Flächen naiv summiert, zählt das gemeinsame Stück doppelt; wer eine Wand löscht, verliert den Überstand. Richtig ist der Höhen-Überlapp. In einem Rechteck-Grundriss wäre das ein Randfall — im Wabengrundriss ist jede Innenwand eine geteilte Wand, also die Regel.
Der Gegencheck, der den Test erst wertvoll macht
Unsere HQ-Seite rechnet ihren Mengen-Auszug längst selbst aus derselben Geometrie — und behandelt dieses Wand-Problem bereits korrekt über den Höhen-Überlapp, samt Warnung im Quelltext, dass ein naiver Schwerpunkt- Vergleich hier 38 statt 18 Außenfacetten findet. Damit hatten wir etwas Seltenes: zwei völlig getrennt gebaute Rechenwege für dasselbe Haus.
Wir haben sie gegeneinander gehalten. 36,5 m² je Zelle hier wie dort, 255,7 m² Grundfläche, und beide kommen unabhängig auf genau 18 Außenfacetten — Pascal über 42 Wandstücke auf 30 Grundrisslagen minus 12 geteilte, unser eigener Auszug über den Höhen-Überlapp. Zwei Wege, dieselbe Antwort.
Das ist der eigentliche Ertrag des Nachmittags. Nicht, dass ein weiteres Werkzeug Sechsecke kann, sondern dass unsere eigene Geometrie eine unabhängige Gegenrechnung überstanden hat. Damit das so bleibt, ist der Vergleich jetzt als Selbsttest in der HQ-Seite festgeschrieben: ein zweiter, unabhängig gerechneter Weg neben dem Mengen-Auszug, der Alarm schlägt, sobald die Paarbildung der geteilten Facetten kippt. Wir haben ihn mit absichtlich zerstörter Paarbildung gegengeprüft — er meldet den Fehler, statt ihn durchzulassen.
Dazu kommt die Falle, vor der die Projektdoku selbst warnt: Pascal legt X und Z auf die Bodenebene und Y nach oben. Eine nordgerichtete Vermessung, wie sie aus Schweizer Geodaten kommt, landet verdreht, wenn man sie ungeprüft einspeist. Das misst man aus, statt es zu vermuten.
Wo es sonst andocken könnte
Interessant ist Pascal darüber hinaus als Bauweise-Vorbild. Der Editor verlangt keine einzige Umgebungsvariable, kein Konto, keine Cloud; die Daten liegen in der Browser-Datenbank oder in einer lokalen SQLite-Datei. Im Quellcode haben wir kein Telemetrie-Paket gefunden — kein Sentry, kein PostHog, keine Analytik-Bibliothek.
Ein Wort zur Vertrauensfrage, denn einen fremden MCP-Server installiert man nicht leichtfertig. Unser Lieferketten-Scanner findet in 152 Dateien kein Injektions-Muster, und im gesamten Paket steht kein einziger fest verdrahteter Ausgangs-Host. Der einzige Netzzugriff sind Bild-Adressen, die man selbst übergibt — und die laufen durch eine eigens gebaute Schutzschicht, die Loopback, private Netze und die Metadaten-Adresse von Cloud-Anbietern sperrt. Im Quellcode steht offen, warum es sie gibt: eine eigene Prüfung fand genau dort eine Lücke. Ein Projekt, das seine gefundenen Fehler im Kommentar stehen lässt, statt sie zu glätten, verdient Vertrauensvorschuss.
Der gehostete Dienst ist eine andere Geschichte, und die gehört dazu. Dort stellt ein Cookie-Banner Anmeldung und Analytik in einen Satz, neue Projekte sind auf „öffentlich“ voreingestellt, und die KI-Renderings laufen über ein Guthaben-Modell mit einem US-Bildmodell. Nichts davon steckt im MIT-Teil — der offene Code ist der Editor, nicht das Geschäft darum herum. Für uns heißt das schlicht: selbst hosten oder gar nicht.
Bleibt eine offene Frage, die man benennen muss. Im Repo liegen 145 Möbelmodelle, dazu Materialien und Klänge, zusammen rund 75 MB — und nirgends eine Lizenz- oder Herkunftsangabe. Die MIT-Lizenz deckt Code; für Modelle sagt sie nichts. Für eigene Entwürfe arbeiten wir mit dem Bestand; bevor eines dieser Modelle in einem veröffentlichten Vereinsprodukt landet, gehört die Frage dem Projekt gestellt. Der Beleg fehlt an der Quelle, nicht nur in unserer Kenntnis.
Unterm Strich: ein Werkzeug, dessen Bau-Seite überzeugend und messbar funktioniert, dessen Ausgabe-Seite ohne Browser aufhört, und dessen offene Teile man von seinem Geschäftsmodell trennen muss. Beobachten lohnt — und der Spike liegt lauffähig bereit.
Was das für uns bedeutet
- Für die HQ-Planung ist das die Werkzeug-Ebene, die uns bisher fehlt: Wände, Geschosse, Zonen, Öffnungen und Treppen als geprüfte Daten in Metern — nicht als Bild, sondern als Modell, das man abfragen, vermessen und weiterverarbeiten kann.
- Der MCP-Server ist der eigentliche Fund. Er läuft headless in Bun, speichert in einer lokalen SQLite-Datei, und wenn der Editor dieselbe Datei liest, wandern die Änderungen des Agenten per Server-Sent-Events live in den offenen Browser-Tab. Kein Konto, kein Cloud-Zwang, keine Telemetrie im Quellcode — das ist die Bauweise, die wir selbst verlangen.
- Das Datenmodell ist offen und streng: 47 Zod-geprüfte Knotentypen von der Wand bis zum Lüftungskanal, flach gespeichert, mit dokumentiertem Plugin-Vertrag. Eigene Bauteile ergänzen wir, ohne den Editor zu forken.
- Der Lieferketten-Blick fällt gut aus: kein fest verdrahteter Ausgangs-Host im ganzen MCP-Paket, unser Scanner findet kein Injektions-Muster in 152 Dateien. Der einzige Netzzugriff sind Bild-Adressen, die man selbst übergibt — und die laufen durch eine eigens gebaute Schutzschicht gegen Server-Side-Request-Forgery, samt Sperre für Cloud-Metadaten. Diese Schicht ist die Antwort auf eine selbst gefundene Lücke, dokumentiert im Quellcode. Ein Projekt, das eigene Fehler benennt statt sie zu glätten, verdient Vertrauensvorschuss.
- Wichtig für Schweizer Geodaten: Pascal legt X und Z auf den Boden, Y nach oben. Wer Parzellen aus einer nordgerichteten Vermessung programmatisch einspeist, bekommt sie verdreht — die Projektdoku warnt selbst davor. Für uns ist das keine Randnotiz, sondern die erste Falle jeder Verbindung mit unseren Geodaten.
- Zwischen dem freien Code und dem gehosteten Dienst liegt ein Spalt, den man sehen muss: Die gehostete Fassung setzt neue Projekte auf „öffentlich“ vor, verwendet Cookies für Anmeldung und Analytik und rechnet KI-Renderings über ein Guthaben mit einem US-Bildmodell ab. Nichts davon steckt im MIT-Teil. Wer die Werte will, muss selbst hosten.
Wie wir es nutzen könnten
- 1Spike: zweigeschossiges Gebäude headlessgebautEin Agent baut über die MCP-Schnittstelle Werkstatt und Aufenthaltsraum (48 m² und 30 m²), setzt Tür und Fenster wandlokal, legt ein Obergeschoss an, prüft die Szene und exportiert sie. Ergebnis: 27 Knoten, Szene gültig, keine Kollisionen, 57 ms von Anfang bis Ende. Der Bau-Weg trägt.
- 2Befund: der GLB-Export trägt headless nichtErgebnisDas Werkzeug `export_glb` gibt ohne Browser `not_implemented` zurück, mit der Begründung, der Export brauche den Three.js-Renderer. Die Kette Agent → GLB → Blender → Druck schließt sich also nicht von allein. Was headless herauskommt, ist das JSON-Szenenmodell — für Auswertung und Maße genug, für Rendern nicht.
- 3Fehler gefunden: ein Werkzeug bricht bei jedem echten HostErgebnis`get_level_summary` liefert das Feld `floorIndex`, das sein eigenes Ausgabe-Schema nicht kennt — bei `additionalProperties: false` ist das ein harter Protokollfehler. Betroffen ist jeder MCP-Host, der die Werkzeugliste abruft, also alle. Die eigene Testsuite übersieht es, weil sie die Liste nie abruft. Eins von 37 Werkzeugen; als Upstream-Issue mit Reproduktion aufzugeben.
- 4HQ-Prüffall: die Wabe trägtgebautNicht am Spielzeug-Rechteck geprüft, sondern an unserer echten Geometrie: die sieben Sechseck-Zellen des HQ, Facette 3,75 m, direkt aus der Modellquelle der HQ-Seite. Pascal nimmt Sechsecke ohne Murren an und meldet jede Zelle mit 36,54 m² — dem exakten Wert 36,5354 m², soweit Pascal ihn überhaupt ausgibt, denn es rundet auf zwei Stellen. 42 Wände, 68 Knoten, Szene gültig, 49 ms. Ein Editor, der auf rechte Winkel ausgelegt wirkt, verträgt unser Raster also.
- 5Quervergleich: zwei unabhängige Modelle, dieselben ZahlengebautUnsere HQ-Seite rechnet ihren Mengen-Auszug seit Langem selbst aus derselben Geometrie. Gegeneinander gehalten: 36,5 m² je Zelle hier wie dort, 255,7 m² Grundfläche, und beide kommen unabhängig auf **18 Außenfacetten** — bei 42 Wandstücken auf 30 Grundrisslagen. Zwei getrennt gebaute Rechenwege, dieselbe Antwort. Der Vergleich ist seither als Selbsttest der HQ-Seite festgeschrieben, gegen absichtlich zerstörte Paarbildung gegengeprüft.
- 6Fund aus dem Wabentest: geteilte Facetten liegen doppelt im GrundrissErgebnisWo zwei Zellen eine Facette teilen, legt Pascal je Zelle einen eigenen Wandkörper an — 42 Körper auf 30 Grundrisslagen. Deckungsgleich sind sie aber nicht: die Halle steht 5,30 m, ihre Nachbarn 3,20 bzw. 2,95 m. Wer die Flächen naiv summiert, zählt das gemeinsame Stück doppelt; wer einfach eine Wand löscht, verliert den Überstand der höheren Zelle, der echte Außenwand ist. Richtig ist der Höhen-Überlapp — genau das, was unser eigener Auszug schon macht.
- 7Selbst hosten, bevor irgendetwas produktiv wirdoffenDie Editor-App braucht keine Umgebungsvariable und kein Konto; ein eigener Container ist der einzige Weg, der die Voreinstellungen des gehosteten Dienstes umgeht. Versionen strikt pinnen — die Pakete stehen auf Beta.
- 8Herkunft der Möbelmodelle upstream klärenoffenFür eigene Entwürfe nutzen wir den mitgelieferten Bestand. Die Herkunftsangabe fehlt aber an der Quelle, nicht nur in unserer Kenntnis — die Frage gehört dem Projekt gestellt, bevor eines dieser Modelle in einem veröffentlichten Vereinsprodukt landet.
Offene Punkte
- Geteilte Facetten bekommen je Zelle einen eigenen Wandkörper, und die Kollisionsprüfung bemerkt das nicht. Im Wabengrundriss ist das die Regel, nicht der Randfall: 42 Körper auf 30 Grundrisslagen. Auflösen lässt sich das nur über den Höhen-Überlapp, weil die beiden Wände verschieden hoch sind — Löschen wäre falsch.
- Der GLB-Export fehlt genau dort, wo wir ihn bräuchten — headless. Wer die Kette zum Rendern und Drucken schließen will, muss entweder den Browser im Weg behalten oder den Export selbst bauen. Das ist echte Arbeit, kein Konfigurationsschalter.
- Alle vier Pakete stehen auf `1.0.0-beta.1`. Bei diesem Zulauf — über 20.000 Sterne in neun Monaten — wird sich die Schnittstelle bewegen; der Plugin-Vertrag wirft bei Versions-Unterschied absichtlich hart.
- 145 Möbelmodelle, 18 MB, dazu 17 MB Materialien und 40 MB Audio liegen im Repo — ohne eine einzige Lizenz- oder Herkunftsangabe. Die MIT-Lizenz deckt den Code; für die Modelle ist das ungeklärt. Für einen Verein, der veröffentlicht, ist das ein Risiko, kein Detail.
- Der Viewer ist an React und React-Three-Fiber gebunden. Unsere Web-Apps sind Svelte — Einbetten hieße eine React-Insel samt Three-Stapel mitzuschleppen. Ehrlicher ist die eigenständige App neben unseren Diensten.
- Der Renderer setzt auf WebGPU samt aufwendiger Nachbearbeitung. Einen dokumentierten Rückfallweg auf WebGL haben wir nicht gefunden — auf älteren Geräten ist das offen.
- Der gehostete Dienst ist nicht das Projekt: dort gibt es Analytik-Cookies, öffentliche Voreinstellung für neue Projekte und ein Guthaben-Modell für KI-Renderings über ein US-Bildmodell. Der offene Teil ist der Editor, nicht das Geschäftsmodell darum herum.
- Der 3D-Referenz-Knoten nimmt nur verlinkte Modelldateien entgegen. Punktwolken oder Gaussian Splats aus unseren eigenen Aufnahmen kann er nicht direkt tragen.
Quellen
Paper, Code, Modell und Erklärung — mit eigenem Namen daneben. Datum dort, wo es belegbar ist.
- Quellcode — GitHub pascalorg/editor (MIT)2026-07-31
- @pascal-app/mcp — MCP-Server, Werkzeuge und Koordinaten-Konventionen
- Architektur-Wiki — Plugin-Vertrag, Knoten-Definitionen, Systeme
- Von uns gemeldet — Issue #566 zum Schema-Bruch in get_level_summary2026-07-31
- @pascal-app/core auf npm
- Gehosteter Dienst — editor.pascal.app
Weitere Steckbriefe
- SystemeZwei Köpfe und ein Prüfblick — Lehren aus einem Bewerbungs-Werkzeug
- SystemeZweiundzwanzig Anleitungen, keine länger als eine Seite
- SystemeEhrliche Quellen-Diagnose — die Lehre aus dem last30days-Skill
- SystemeFrische als Vertrag — vier Lehren aus einem offenen Lagebild-Werkzeug
- Grafik & 3DTerrain Diffusion — unendliches, lernbares Gelände als Perlin-Noise-Nachfolger
- Grafik & 3DVom kahlen Kopf zum Erzähler — zehn Schritte im Browser
- DatenSchweizer Geodaten — das halbe Meter genaue Gelände, gratis und ohne Konto
- DatenAlphaEarth — Googles Erd-Embeddings, frei lizenziert und offline nutzbar
- Grafik & 3DGNM — Googles parametrisches Kopfmodell, erstmals unter freier Lizenz
- Grafik & 3DBox3D — deterministische 3D-Physik vom Box2D-Autor, schon als Godot-Extension
- KIOffene Bildmodelle rendern lesbaren Kartentext — lokal statt in der Cloud
Der Forschungsradar sammelt fremde Methoden, die zu dem passen, was wir bauen. Externe Entwicklungen (Regulierung, Markt) stehen in den Recherchen; die KI-Modelle selbst im Modell-Katalog.