FreeCAD-Plugin (freecad-bridge): CAD-Konstruktion per Chat — Funktion und Funktionsweise #127

Closed
opened 2026-10-19 07:46:33 +00:00 by alf · 1 comment
Owner

Feature-Issue: FreeCAD-Plugin (freecad-bridge) — CAD-Konstruktion per Chat

Funktion: Iris konstruiert, vermisst und exportiert 3D-Modelle auf Zuruf: Gehäuse um eine Platine, Halterungen und Schellen, Platten mit Ausschnitten, Teile aus einer importierten STEP-/STL-Datei, Vasen aus einem Netz. Das Ergebnis sind STEP-/STL-Dateien, Bilder und ein Bericht mit den Maßen — alles liegt direkt im Workspace des Chats. Das Plugin ist nur für den Iris-Linux-Server gedacht (auf dem Mac ist FreeCAD direkt installiert, dort ein anderes Konzept).

Stand: Plugin 1.8.1, Container-Image iris/freecad-mcp v0.10.1, Registry-Freigabe fehlt noch (– privat, kein .include).

Funktionsweise

Chat ──► Hermes ──► MCP ──► FreeCAD-Container (iris-freecad-mcp)
                              ├─ CadQuery   (Konstruktion per Skript, Standardweg)
                              ├─ FreeCAD    (Import, Messen, Bilder, Export)
                              └─ kit.*      (geprüfte Bausteine: Gehäuse, Ausschnitte, Schlitze)

Drei Teile: das Plugin in Iris (plugins/freecad-bridge: plugin.json, Skill iris-freecad, Settings-Panel, Viewer-Seite), der Container in einem eigenen Repo (iris/freecad-mcp, FreeCAD 1.1 headless unter Xvfb plus MCP-Server des Addons ghbalf/freecad-ai), und die Server-Seite (linux-server/iris-server/app/freecad_plugin_routes.py).

Install-Ablauf: Image aus der Forgejo-Registry ziehen → Token erzeugen (/data/freecad-mcp/token, 0600) → Container im Netz von iris-hermes anlegen (Binds workspaces/freecad und freecad-mcp/config, 8 GB RAM, 4 CPUs, unless-stopped) → Registrierungsdatei /data/plugin-mcp-servers/freecad.json schreiben → warten, bis ein echter Tool-Call (list_documents) antwortet → Hermes bei Idle neu starten. Container-Verwaltung läuft über die Docker Engine API auf docker.sock, nicht über SSH oder Compose — der Server-Container hat kein Docker-CLI. Der Containername ist <instanz>-freecad-mcp, damit mehrere Iris-Instanzen auf einem Host nicht kollidieren.

Dokument pro Chat: jedes Werkzeug bekommt den Pflichtparameter document (= Chat-ID). Pro Aufruf wird das Dokument gewählt (bei Bedarf angelegt oder aus /workspace/documents/<name>.FCStd geöffnet) und nach jedem schreibenden Tool gespeichert. Mehrere Chats arbeiten so parallel in getrennten Modellen; ein Neustart verliert nichts. Die Registry läuft seriell auf dem Qt-Thread, Wechsel und Ausführung sind damit atomar.

Ergebnisse im Chat-Workspace: Exporte, Bilder und Bericht.md (Maße und Volumen aller Objekte plus Dateiliste) werden immer im Dokumentordner abgelegt und unter /workspaces/<Chat-ID>/ sichtbar — unabhängig davon, was das Modell im Chat schreibt. Anhänge liegen unter /workspaces/<Chat-ID>/Anhänge/….

Werkzeugweg: run_cadquery ist der Standardweg für neue Teile; import_model für vorhandene Dateien; cad_help mit getesteten Rezepten; kit.enclosure baut ein Gehäuse aus einem Aufruf (Öffnungsachse aus der Geometrie, Anschlüsse als bündige Einzelteile erkannt) — Seitenwahl und Offsets werden nie dem Modell überlassen, weil es bei jeder neuen Platine anders rät. view_inside liefert den Blick in die Öffnung, damit ein Bild etwas beweist.

Oberfläche: die echte FreeCAD-Oberfläche lässt sich über den Plugins-Chevron in einem eigenen Fenster ansehen und bedienen (noVNC über WS /plugins/freecad-bridge/vnc, nur mit cfg_token dieses Plugins oder Bearer-Token).

Offene Punkte

  • Registry-Freigabe: freecad-bridge hat kein .include und keine store/-Medien — veröffentlicht wird nur auf Alfs Wort.
  • Primitive-Werkzeuge fehlen noch im Image. docs/integration-custom-tools.md beschreibt sieben Module (primitives, sketch, boolean, transformations, loft), gebaut ist davon nichts. Grund für die Idee: freecad-ai hat keine primitiven Erzeuger, das Modell geht für einfache Körper aufwändige Sketch+Pad-Umwege.
  • Doppelte Doku: docs/integration-create-box.md ist der frühere Entwurf zu genau diesem Thema und liegt noch unversioniert im Repo — er ist in docs/integration-custom-tools.md enthalten. Nach der Regel „eine Information steht an genau einer Stelle" gehört er entfernt oder auf die wenigen Stücke gekürzt, die dort fehlen (Fehlerbehandlung, Testfälle).
  • Netz-Erkennung (Stufe 2b): Ebenen/Zylinder/Bohrungen im Netz erkennen und parametrisch nachbauen; vase_from_mesh deckt nur rotationssymmetrische Teile ab.
  • Dokumente bleiben für immer liegen (documents/<JOB_ID>.FCStd) — ein Löschen oder Archivieren fehlt.
  • Hermes-Neustart bei Idle: läuft ein Chat, kommen die Tools für ihn erst nach dessen Ende. hermes-scheduled bekommt den MCP-Eintrag erst beim nächsten Server-Start.
## Feature-Issue: FreeCAD-Plugin (`freecad-bridge`) — CAD-Konstruktion per Chat **Funktion:** Iris konstruiert, vermisst und exportiert 3D-Modelle auf Zuruf: Gehäuse um eine Platine, Halterungen und Schellen, Platten mit Ausschnitten, Teile aus einer importierten STEP-/STL-Datei, Vasen aus einem Netz. Das Ergebnis sind STEP-/STL-Dateien, Bilder und ein Bericht mit den Maßen — alles liegt direkt im Workspace des Chats. Das Plugin ist nur für den Iris-Linux-Server gedacht (auf dem Mac ist FreeCAD direkt installiert, dort ein anderes Konzept). Stand: Plugin 1.8.1, Container-Image `iris/freecad-mcp` v0.10.1, Registry-Freigabe fehlt noch (`– privat`, kein `.include`). ## Funktionsweise ``` Chat ──► Hermes ──► MCP ──► FreeCAD-Container (iris-freecad-mcp) ├─ CadQuery (Konstruktion per Skript, Standardweg) ├─ FreeCAD (Import, Messen, Bilder, Export) └─ kit.* (geprüfte Bausteine: Gehäuse, Ausschnitte, Schlitze) ``` **Drei Teile:** das Plugin in Iris (`plugins/freecad-bridge`: `plugin.json`, Skill `iris-freecad`, Settings-Panel, Viewer-Seite), der Container in einem eigenen Repo (`iris/freecad-mcp`, FreeCAD 1.1 headless unter Xvfb plus MCP-Server des Addons `ghbalf/freecad-ai`), und die Server-Seite (`linux-server/iris-server/app/freecad_plugin_routes.py`). **Install-Ablauf:** Image aus der Forgejo-Registry ziehen → Token erzeugen (`/data/freecad-mcp/token`, 0600) → Container im Netz von `iris-hermes` anlegen (Binds `workspaces/freecad` und `freecad-mcp/config`, 8 GB RAM, 4 CPUs, `unless-stopped`) → Registrierungsdatei `/data/plugin-mcp-servers/freecad.json` schreiben → warten, bis ein echter Tool-Call (`list_documents`) antwortet → Hermes bei Idle neu starten. Container-Verwaltung läuft über die Docker Engine API auf `docker.sock`, nicht über SSH oder Compose — der Server-Container hat kein Docker-CLI. Der Containername ist `<instanz>-freecad-mcp`, damit mehrere Iris-Instanzen auf einem Host nicht kollidieren. **Dokument pro Chat:** jedes Werkzeug bekommt den Pflichtparameter `document` (= Chat-ID). Pro Aufruf wird das Dokument gewählt (bei Bedarf angelegt oder aus `/workspace/documents/<name>.FCStd` geöffnet) und nach jedem schreibenden Tool gespeichert. Mehrere Chats arbeiten so parallel in getrennten Modellen; ein Neustart verliert nichts. Die Registry läuft seriell auf dem Qt-Thread, Wechsel und Ausführung sind damit atomar. **Ergebnisse im Chat-Workspace:** Exporte, Bilder und `Bericht.md` (Maße und Volumen aller Objekte plus Dateiliste) werden immer im Dokumentordner abgelegt und unter `/workspaces/<Chat-ID>/` sichtbar — unabhängig davon, was das Modell im Chat schreibt. Anhänge liegen unter `/workspaces/<Chat-ID>/Anhänge/…`. **Werkzeugweg:** `run_cadquery` ist der Standardweg für neue Teile; `import_model` für vorhandene Dateien; `cad_help` mit getesteten Rezepten; `kit.enclosure` baut ein Gehäuse aus einem Aufruf (Öffnungsachse aus der Geometrie, Anschlüsse als bündige Einzelteile erkannt) — Seitenwahl und Offsets werden nie dem Modell überlassen, weil es bei jeder neuen Platine anders rät. `view_inside` liefert den Blick in die Öffnung, damit ein Bild etwas beweist. **Oberfläche:** die echte FreeCAD-Oberfläche lässt sich über den Plugins-Chevron in einem eigenen Fenster ansehen und bedienen (noVNC über `WS /plugins/freecad-bridge/vnc`, nur mit cfg_token dieses Plugins oder Bearer-Token). ## Offene Punkte - **Registry-Freigabe:** `freecad-bridge` hat kein `.include` und keine `store/`-Medien — veröffentlicht wird nur auf Alfs Wort. - **Primitive-Werkzeuge fehlen noch im Image.** `docs/integration-custom-tools.md` beschreibt sieben Module (primitives, sketch, boolean, transformations, loft), gebaut ist davon nichts. Grund für die Idee: `freecad-ai` hat keine primitiven Erzeuger, das Modell geht für einfache Körper aufwändige Sketch+Pad-Umwege. - **Doppelte Doku:** `docs/integration-create-box.md` ist der frühere Entwurf zu genau diesem Thema und liegt noch unversioniert im Repo — er ist in `docs/integration-custom-tools.md` enthalten. Nach der Regel „eine Information steht an genau einer Stelle" gehört er entfernt oder auf die wenigen Stücke gekürzt, die dort fehlen (Fehlerbehandlung, Testfälle). - **Netz-Erkennung (Stufe 2b):** Ebenen/Zylinder/Bohrungen im Netz erkennen und parametrisch nachbauen; `vase_from_mesh` deckt nur rotationssymmetrische Teile ab. - **Dokumente bleiben für immer liegen** (`documents/<JOB_ID>.FCStd`) — ein Löschen oder Archivieren fehlt. - **Hermes-Neustart bei Idle:** läuft ein Chat, kommen die Tools für ihn erst nach dessen Ende. `hermes-scheduled` bekommt den MCP-Eintrag erst beim nächsten Server-Start.
Author
Owner

PR #3 gemergt: docs(primitives): Entwurf der Primitive-Werkzeuge, Fehlerbehandlung und Testfälle (iris/iris-plugins#127)
iris/freecad-mcp#3

Commits:

  • docs(primitives): Entwurf der Primitive-Werkzeuge, Fehlerbehandlung und Testfälle (iris/iris-plugins#127)
PR #3 gemergt: docs(primitives): Entwurf der Primitive-Werkzeuge, Fehlerbehandlung und Testfälle (iris/iris-plugins#127) https://forgejo.lewerken.duckdns.org/iris/freecad-mcp/pulls/3 Commits: - docs(primitives): Entwurf der Primitive-Werkzeuge, Fehlerbehandlung und Testfälle (iris/iris-plugins#127)
alf closed this issue 2026-10-27 10:42:42 +00:00
Sign in to join this conversation.
No milestone
No project
No assignees
1 participant
Notifications
Due date
The due date is invalid or out of range. Please use the format "yyyy-mm-dd".

No due date set.

Dependencies

No dependencies set.

Reference
iris/iris-plugins#127
No description provided.