108 lines
9.0 KiB
Markdown
108 lines
9.0 KiB
Markdown
---
|
||
name: solidcraft-mcp
|
||
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. 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 ab. Fehlen sie, dem Nutzer sagen, dass der Server nicht verbunden ist (Einrichtung siehe README).
|
||
|
||
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. 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, 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 |
|
||
| `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 `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. 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.** 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`.
|
||
- **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:** 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 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:
|
||
|
||
- 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.
|
||
- 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.
|