Skills auf die installierten Craft-Versionen vom 26. Oktober 2026 heben, damit sie zu den aktuell installierten CLIs passen.
CADCraft, EffectCraft und FilmCraft ergänzen.
This commit is contained in:
1 parent
d374ee7fff
commit
93cac0947b
69 files changed
+1787
-151
No files matched your search
@@ -1,96 +1,107 @@
|
||||
---
|
||||
name: solidcraft-mcp
|
||||
description: parametrische 3D-Teile über den SolidCraft-MCP-Server bauen, ändern, messen und als .solidcraft, STEP, STL oder 3MF ausgeben. Verwenden, wenn SolidCraft-Werkzeuge verbunden sind oder der Nutzer SolidCraft nennt; typisch für Laschen, Platten, Gehäuse, Bohrbilder. Nicht für 2D-DXF (VectorCraft) und nicht für native SOLIDWORKS-Dateien.
|
||||
description: parametrische 3D-Teile über den SolidCraft-MCP-Server bauen, ändern, messen und als .solidcraft, STEP, STL, OBJ oder 3MF ausgeben. Verwenden, wenn SolidCraft-Werkzeuge verbunden sind oder der Nutzer SolidCraft nennt; typisch für Laschen, Platten, Gehäuse, Bohrbilder, Baugruppen. Nicht für Laser-DXF (VectorCraft), nicht für DXF/DWG-Zeichnungen (CADCraft) und nicht für native SOLIDWORKS-Dateien.
|
||||
---
|
||||
|
||||
# Parametrische Teile mit SolidCraft (MCP)
|
||||
|
||||
SolidCraft ist ein Open-Source-CAD (Rust) für parametrische Volumenkörper. Getestet mit Version 0.16.2.
|
||||
SolidCraft ist ein Open-Source-CAD (Rust) für parametrische Volumenkörper. CLI 0.23.0. Die mitgelieferten Skills (`skill_reference`) sind die Befehlsreferenz; dieser Text hält nur die Regeln fest, die davon abweichen oder die der Agent sonst falsch macht. Nur `solidcraft-cli.exe` starten. `solvecraft-cli.exe` ist ein Alias und fällt weg.
|
||||
|
||||
## Voraussetzung
|
||||
|
||||
Die Werkzeuge `list_commands`, `execute`, `batch`, `inspect_design`, `measure`, `screenshot`, `export`, `open`, `save` … müssen verbunden sein. Ihr Präfix hängt vom Client und vom Namen der Erweiterung bzw. des Servers ab. Fehlen sie, dem Nutzer sagen, dass der Server nicht verbunden ist (Einrichtung siehe README).
|
||||
Die Werkzeuge `list_commands`, `execute`, `batch`, `inspect_design`, `measure`, `screenshot`, `export`, `open`, `save` … müssen verbunden sein. Ihr Präfix hängt vom Client ab. Fehlen sie, dem Nutzer sagen, dass der Server nicht verbunden ist (Einrichtung siehe README).
|
||||
|
||||
Dateizugriff nur in den erlaubten Ordnern (Lese- und Schreib-Ordner). Der Server läuft ohne Fenster.
|
||||
Zwei Starts, beides ist `solidcraft-cli mcp`:
|
||||
|
||||
- **Kopflos**, ohne `--connect` (optional `--headless`). Der Server rechnet im eigenen Prozess. `--allow-path` (mehrfach) begrenzt Lesen und Schreiben. Das ist der Start der Erweiterung.
|
||||
- **An der App:** `--connect 127.0.0.1:PORT` (optional `--token`). Die App muss mit `solidcraft --control PORT` lauschen. Tut sie das nicht, antworten Entwurfswerkzeuge mit `no SolidCraft app is listening at 127.0.0.1:7878`. `skill_reference` liest trotzdem, die Skills stecken in der CLI. `--connect` ist nötig, wenn der Nutzer die offene Datei in der App sehen und anfassen soll. Für einen neuen Teil im Hintergrund reicht kopflos.
|
||||
|
||||
Lauscht die App nicht, nicht im Kreis wiederholen. Dem Nutzer sagen, dass `solidcraft --control 7878` fehlt, oder kopflos neu starten.
|
||||
|
||||
## Mitgelieferte Skills
|
||||
|
||||
Vor dem Bauen `skill_reference` lesen, nicht den Befehlskatalog auswendig lernen. `file` ist `SKILL.md` oder `reference.md` (Standard `reference.md`).
|
||||
|
||||
| Skill | Wann |
|
||||
|---|---|
|
||||
| `solidcraft-modeling` | neues Teil |
|
||||
| `solidcraft-mechanisms` | Baugruppe, Gelenk, Zahnrad, Kurve, Kontakt, Bewegungsstudie |
|
||||
| `solidcraft-editing` | bestehende Datei ändern, Checkpoint, Absturz |
|
||||
| `solidcraft-checking` | Parameterbereiche, jeder zulässige Wert, STEP-Vergleich, Portierung aus build123d, CadQuery oder OpenSCAD. Der Text in der CLI nennt die Prüfung gegen 0.21.0 |
|
||||
|
||||
## Werkzeuge
|
||||
|
||||
| Tool | Zweck |
|
||||
|---|---|
|
||||
| `list_commands {filter}` | Befehlskatalog (id, Bezeichnung, Parameter). Nur mit Filter |
|
||||
| `list_commands {filter}` | Befehlskatalog. Nur mit Filter; ohne Filter über 100 KB |
|
||||
| `describe_command {id}` | Parameter eines Befehls; für `solid.box`, `solid.extrude` und `engine.describe` auch JSON Schema |
|
||||
| `execute {command, params, verbose}` | ein Befehl; ein Fehler lässt den Entwurf unverändert |
|
||||
| `batch {commands, verbose}` | Schritte der Reihe nach; beim ersten Fehler wird der Stapel zurückgenommen |
|
||||
| `inspect_design` | Parameter, Zeitachse (Fehler, Warnung), Körper, Skizzen |
|
||||
| `measure` | Volumen (mm³), Fläche, Schwerpunkt, Hüllbox, Zählungen |
|
||||
| `body_topology {body}` | Kanten (Mittelpunkt) und Flächen (Name, Punkt) eines Körpers |
|
||||
| `set_parameter {name, value}` | Parameter anlegen oder ändern und neu rechnen |
|
||||
| `screenshot` | PNG; immer `source: "model"` |
|
||||
| `export {path, format}` | step, 3mf, stl, urdf |
|
||||
| `open {path}` / `save {path}` | .solidcraft, STEP; STL und 3MF als Netz |
|
||||
| `inspect_design` | Parameter, Zeitachse, Körper, Skizzen, Gelenke |
|
||||
| `measure` | Volumen (mm³), Fläche, Schwerpunkt, Hüllbox |
|
||||
| `body_topology {body}` | Kanten (Mittelpunkt) und Flächen |
|
||||
| `set_parameter {name, value}` | Parameter anlegen oder ändern |
|
||||
| `screenshot` | PNG. Immer `source: "model"`, wenn die App verbunden ist |
|
||||
| `export {path, format}` | step, 3mf, 3mf-tagged, stl, stla, obj, urdf |
|
||||
| `open {path}` / `save {path}` | .solidcraft, STEP, Netz (.3mf, .stl, .obj, .glb, .gltf). `save` nach `.json` ist Klartext |
|
||||
| `new_design` | leerer Entwurf |
|
||||
| `undo` / `redo` | ein Schritt zurück oder wieder vor |
|
||||
| `undo` / `redo` | ein Schritt |
|
||||
| `crash_reports` | Absturzberichte auf diesem Rechner. Den auslösenden Befehl nicht unverändert wiederholen |
|
||||
| `running` | was die App gerade rechnet. Fragen, wenn ein Aufruf hängt, bevor derselbe Befehl noch einmal geht |
|
||||
| `pending` | Ergebnis eines Aufrufs, der mit `still running:` zurückkam. Nicht noch einmal senden |
|
||||
| `skill_reference` | mitgelieferte Skills, siehe oben |
|
||||
|
||||
## Arbeitsweise
|
||||
|
||||
1. **Zuerst rechnen:** Parameter, Lage (Teil um den Ursprung legen, damit Muster und Spiegel an den Ebenen hängen), für jede Kante oder Fläche den Weltpunkt, erwartetes Volumen und die Hüllbox.
|
||||
2. **Wenige große `batch`-Aufrufe:** (1) Parameter und erster Körper, (2) Verrundung und Schale, (3) Bohrungen und Schnitte. Ein Stapel ist alles oder nichts (`failed.index`, `failed.error`). Einen riskanten Schritt allein schicken.
|
||||
1. **Zuerst `skill_reference`**, dann rechnen: Parameter, Lage (Teil um den Ursprung), für jede Kante oder Fläche den Weltpunkt, erwartetes Volumen und die Hüllbox.
|
||||
2. **Wenige große `batch`-Aufrufe.** Ein Stapel ist alles oder nichts (`failed.index`, `failed.error`). Einen riskanten Schritt allein schicken.
|
||||
3. **Danach `measure`** gegen die eigene Rechnung. Volumen, Hüllbox und Flächenzahl (`faces`, nicht `kernel.faces`). Eine Lücke von etwa 0,001–0,01 % gilt als Treffer; lange flache Bögen etwa 0,1 %.
|
||||
4. **Kanten** über den exakten Mittelpunkt wählen, als nackte Zahlen. Die senkrechte Eckkante eines zentrierten Quaders liegt bei `[w/2, d/2, h/2]`.
|
||||
5. **`list_commands` nur mit `filter`.** Ohne Filter ist die Liste über 100 KB.
|
||||
6. In großen Entwürfen `"verbose": false` an `batch` und `execute`.
|
||||
5. In großen Entwürfen `"verbose": false`.
|
||||
|
||||
Längen sind mm. Winkel in Ausdrücken brauchen eine Einheit, z. B. `"30 deg"`.
|
||||
|
||||
## Fallen
|
||||
|
||||
- **Ein Schnitt kann Erfolg melden und das Volumen unverändert lassen.** Im Test mit 0.16.2 bestätigt: `solid.box` mit `length` 40, `width` 30, `height` 20 ergab 24000 mm³ (Hüllbox 0–40 × 0–30 × 0–20, 6 Flächen). Ein `solid.cylinder` mit `operation: "cut"` außerhalb des Quaders meldete keinen Fehler und ließ das Volumen bei 24000 mm³. Nur ein `measure`, das zur Rechnung passt, zählt. Die Doku beschreibt dasselbe für eine Bohrung, deren Skizze unter dem Teil in der Luft liegt: die Skizze auf die Deckfläche legen (`offset` der Höhe).
|
||||
- **Die Kantenwahl schnappt ohne Fehler an die nächste Kante.** Keine Abstandsschranke. Den Mittelpunkt aus der Geometrie rechnen und danach prüfen, ob sich die Flächenzahl geändert hat. Eine Wahl ist eine nackte Zahl, wird einmal aufgelöst und folgt danach ihrer Kante.
|
||||
- **Außen verrunden, bevor geschält wird,** damit die Schale den Rundungen folgt. Ausnahme: eine Kante der Fläche, die die Schale entfernt (der Rand eines offenen Kastens). Diese Kante erst nach der Schale runden, sonst kann die Schale scheitern.
|
||||
- **Eine nackte Zahl folgt keinem Parameter.** Was mitziehen soll, steht in einer Skizzenbemaßung oder einem Ausdruck (`"w/2 - wall"`). `solid.cylinder` nimmt Ausdrücke in `base`; `solid.hole` mit `position` ebenfalls.
|
||||
- **`new_design` und `open` verwerfen ungespeicherte Arbeit.** Hat der Entwurf schon Features auf der Zeitachse, vorher fragen. Sonst in den offenen Entwurf weiterbauen.
|
||||
- **Screenshot mit `source: "model"`.** `width` und `height` gelten nur für Modellbilder. Ohne `source` liefert ein mit der App verbundener Server das Fenster, und `view` dreht dessen Kamera. Für Features in Wänden `"view": "top"`.
|
||||
- **Nut vor dem Einstieg, gleiche Startebene und gleicher Außenradius:** der zweite `solid.revolve` mit `cut` meldet `boolean Cut: the operation failed: no result`, obwohl jeder Schnitt allein geht. Einstieg zuerst; die Nut danach ein Stück in den Einstieg hinein und etwas flacher.
|
||||
- **`sketch.circle.center` nimmt im Feld `diameter` keinen Ausdruck.** Meldung: `needs radius or diameter`. Der Kreis bekommt eine Zahl, der Ausdruck steht in `sketch.dimension` mit `type: diameter`. `solid.cylinder` nimmt Ausdrücke in `diameter`, `height` und `base`.
|
||||
- **`solid.revolve` mit `angle` dreht von der Skizzierebene in die negative Winkelrichtung** (von +X nach −Y). Ein Prüfkörper bei −20° lag im Schnitt, der bei +20° im Material. `direction: symmetric` legt den Winkel um die Ebene.
|
||||
- **Ein Kreismuster solcher Schnitte kann `Boolean retry: tool displacement` um etwa `4e-4` mm warnen.** `error` bleibt leer. Das Volumen blieb in der Toleranz; die Warnung nennen, nicht als Fehler behandeln.
|
||||
- **Ein Schnitt kann Erfolg melden und das Volumen unverändert lassen.** An 0.16.2 gemessen, an 0.23.0 nicht wiederholt: `solid.box` 40×30×20 mm ergab 24000 mm³. Ein `solid.cylinder` mit `operation: "cut"` daneben ließ das Volumen stehen. Nur ein `measure`, das zur Rechnung passt, zählt. Die mitgelieferte Anleitung sagt dasselbe für eine Bohrung, deren Skizze in der Luft liegt.
|
||||
- **Kantenwahl:** weiter als 5 % der Körpergröße von jeder Kante entfernt wird abgelehnt (`the nearest edge is 15.000 mm away`). Es gibt keine stille Schnappwahl mehr ohne Schranke. Den Mittelpunkt aus der Geometrie rechnen. Eine Wahl ist eine nackte Zahl, wird einmal aufgelöst und folgt danach ihrer Kante.
|
||||
- **Außen verrunden, bevor geschält wird,** damit die Schale den Rundungen folgt. Ausnahme: eine Kante der Fläche, die die Schale entfernt. Die mitgelieferte Anleitung nennt eine zweite Ausnahme: eine Verrundung zwischen zwei gekrümmten Flächen vor der Schale scheitert (`offset: only bodies with planes, cylinders, cones, spheres and tori`).
|
||||
- **Eine nackte Zahl folgt keinem Parameter.** Was mitziehen soll, steht in einer Skizzenbemaßung oder einem Ausdruck.
|
||||
- **`new_design` und `open` verwerfen ungespeicherte Arbeit.** Hat der Entwurf Features auf der Zeitachse, vorher fragen.
|
||||
- **Screenshot mit `source: "model"`.** Ohne `source` liefert ein mit der App verbundener Server das Fenster, und `view` dreht dessen Kamera.
|
||||
- **Nut vor dem Einstieg, gleiche Startebene und gleicher Außenradius** (0.16.2): der zweite `solid.revolve` mit `cut` meldet `boolean Cut: the operation failed: no result`. Einstieg zuerst.
|
||||
- **`sketch.circle.center` nimmt im Feld `diameter` keinen Ausdruck** (`needs radius or diameter`). Zahl plus `sketch.dimension` mit `type: diameter`.
|
||||
- **`solid.revolve` mit `angle` dreht von der Skizzierebene in die negative Winkelrichtung** (von +X nach −Y). `direction: symmetric` legt den Winkel um die Ebene.
|
||||
- **Ein Kreismuster solcher Schnitte kann `Boolean retry: tool displacement` um etwa `4e-4` mm warnen.** Das Volumen an 0.16.2 blieb in der Toleranz. Die Checking-Anleitung sagt, eine Boolean-Warnung kann die Geometrie trotzdem falsch lassen: Volumen prüfen.
|
||||
- **Überdeckung:** `solid.combine` mit `intersect` auf leerer Überdeckung löscht den Zielkörper und meldet trotzdem Erfolg. Zum Prüfen `inspect.interference`.
|
||||
- **Eine Zylinderschale trifft πr²h nicht bis auf 0,001 %.** Ob ein Schnitt getroffen hat, zeigt die Volumendifferenz.
|
||||
- **Absturz:** `crash_reports`, dann `doc.recovery_list` und `doc.recover`. Den abstürzenden Befehl nicht unverändert wiederholen. Vor riskanten Änderungen an einer bestehenden Datei `edit.checkpoint`.
|
||||
|
||||
## Rezepte
|
||||
|
||||
1. **Grundplatte mit Bohrbild und Parameteränderung:**
|
||||
1. Parameter für Länge, Breite, Dicke und Randabstand.
|
||||
2. Ein `batch`: Skizze auf `XY`, Rechteck über den Ursprung, Extrusion, Verrundung der Außenecken über ihre Mittelpunkte, Bohrung auf der Deckfläche, rechteckiges Muster mit Abständen als Ausdrücke.
|
||||
3. `measure` gegen das gerechnete Volumen.
|
||||
4. `set_parameter` der Länge, erneut `measure`: die Bohrungen bleiben in den Ecken, Schwerpunkt und Hüllbox verschieben sich um den gerechneten Betrag.
|
||||
5. `save` als `.solidcraft`, `export` als STEP.
|
||||
2. **Kleines Gehäuse (Deckel offen):**
|
||||
1. Kasten (`solid.box` oder Extrusion).
|
||||
2. Außenkanten verrunden.
|
||||
3. Schale: die Deckfläche entfernen (`solid.shell`, Punkt oder Flächenname), Wandstärke als Parameter.
|
||||
4. Den Rand der Öffnung danach runden.
|
||||
5. `measure` nach Verrundung und nach der Schale. Speichern, STEP für die Weitergabe.
|
||||
3. **Vorhandenes STEP öffnen, messen, Iso-Bild:** `open` nur mit Zustimmung (siehe Datenschutz). `measure` (Volumen, Hüllbox, Körperszahl). Ein Bild mit `screenshot {source: "model", view: "iso"}`. Nichts ändern, solange der Nutzer nur messen und ansehen will.
|
||||
1. **Grundplatte mit Bohrbild:** Parameter, ein `batch` (Skizze auf `XY`, Extrusion, Verrundung über Mittelpunkte innerhalb der 5-%-Schranke, Bohrung, Muster mit Ausdrücken), `measure`, `set_parameter`, erneut `measure`, `save` als `.solidcraft`, `export` als STEP.
|
||||
2. **Kleines Gehäuse:** Kasten, Außenkanten verrunden, Schale, Rand der Öffnung danach runden, `measure` nach jedem Schritt.
|
||||
3. **Baugruppe:** nicht hier nachbauen. `skill_reference {"skill":"solidcraft-mechanisms","file":"SKILL.md"}`, dann erst Gelenke. URDF lässt Gelenke weg, die eine Schleife schließen.
|
||||
4. **Vorhandenes STEP nur ansehen:** `open` nur mit Zustimmung. `measure`, ein Bild `screenshot {source: "model", view: "iso"}`. Nichts ändern, solange der Nutzer nur messen will.
|
||||
|
||||
## Abschlussprüfung
|
||||
|
||||
- `measure` passt zum selbst gerechneten Volumen, zur Hüllbox und zur Flächenzahl.
|
||||
- `inspect_design` mit `measure: false` und `sketches: false`: kein `error` in der Zeitachse. Eine Boolean-Warnung ist harmlos, wenn das Volumen trotzdem stimmt; stimmt es nicht, kann die Geometrie falsch sein, ohne dass ein Fehler gemeldet wurde.
|
||||
- `inspect_design` mit `measure: false` und `sketches: false`: kein `error` in der Zeitachse. Eine Boolean-Warnung nennen; stimmt das Volumen nicht, ist die Geometrie falsch, auch ohne Fehlerzeile.
|
||||
- Ein `screenshot` mit `source: "model"` angesehen.
|
||||
- Pfade von `.solidcraft` und Export dem Nutzer genannt.
|
||||
|
||||
## Datenschutz
|
||||
|
||||
Ampel:
|
||||
- 🟢 Allgemeine und technische Inhalte ohne Kundenbezug.
|
||||
- 🟡 Projekt- und Geschäftsinfos: nur nach Abwägung oder anonymisiert.
|
||||
- 🔴 Personenbezogene Daten und NDA-Inhalte gehören nicht in die Cloud-KI.
|
||||
|
||||
Ein Kunden-STEP mit Kundenname oder NDA-Vermerk ist 🔴: nur mit Zustimmung des Nutzers öffnen.
|
||||
- Grün: allgemeine und technische Inhalte ohne Kundenbezug.
|
||||
- Gelb: Projekt- und Geschäftsinfos, nur nach Abwägung oder anonymisiert.
|
||||
- Rot: personenbezogene Daten und NDA-Inhalte gehören nicht in die Cloud-KI.
|
||||
|
||||
Ein Kunden-STEP mit Kundenname oder NDA-Vermerk ist rot: nur mit Zustimmung des Nutzers öffnen.
|
||||
|
||||
## Grenzen
|
||||
|
||||
- Kein SLDPRT und kein SLDASM. Native SOLIDWORKS-Dateien werden nicht geöffnet.
|
||||
- Kein Ersatz für eine freigegebene Fertigungszeichnung. STEP und STL sind Geometrie, keine Zeichnung mit Toleranzen.
|
||||
- Baugruppen mit Gelenken nur am Rand. `export` kann URDF schreiben; Gelenke, Kontakte und Bewegungsstudien gehören nicht in diesen Ablauf.
|
||||
- 2D-DXF für Laser bleibt bei VectorCraft.
|
||||
- Kein SLDPRT und kein SLDASM.
|
||||
- Kein Ersatz für eine freigegebene Fertigungszeichnung.
|
||||
- 2D-DXF für Laser bleibt bei VectorCraft. Die SolidCraft-Hilfe nennt CADCraft nicht; DXF/DWG als Zeichnung mit AutoCAD-Befehlen ist CADCraft, nicht dieser Skill.
|
||||
Reference in new issue
Block a user