Update config, docs and add box model
- server.py: Output-Verzeichnis default auf models/ relativ zu server.py - README.md: Claude Code statt Desktop, models/-Ordner, korrekte settings.json - models/box.py: Offene Box 30x30x20mm, alle Maße als Variablen Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
This commit is contained in:
@@ -10,7 +10,7 @@ Zusätzlich ist CQ-editor als GUI-Vorschau-Tool integriert.
|
|||||||
|
|
||||||
1. [Voraussetzungen](#1-voraussetzungen)
|
1. [Voraussetzungen](#1-voraussetzungen)
|
||||||
2. [Installation](#2-installation)
|
2. [Installation](#2-installation)
|
||||||
3. [Claude Desktop einbinden](#3-claude-desktop-einbinden)
|
3. [Claude Code einbinden](#3-claude-code-einbinden)
|
||||||
4. [CQ-editor starten](#4-cq-editor-starten)
|
4. [CQ-editor starten](#4-cq-editor-starten)
|
||||||
5. [Verwendung in Claude](#5-verwendung-in-claude)
|
5. [Verwendung in Claude](#5-verwendung-in-claude)
|
||||||
6. [Projektstruktur](#6-projektstruktur)
|
6. [Projektstruktur](#6-projektstruktur)
|
||||||
@@ -24,7 +24,7 @@ Zusätzlich ist CQ-editor als GUI-Vorschau-Tool integriert.
|
|||||||
|---|---|---|
|
|---|---|---|
|
||||||
| Windows 10/11 | 64-Bit | Getestet auf Windows 11 |
|
| Windows 10/11 | 64-Bit | Getestet auf Windows 11 |
|
||||||
| Python | ≥ 3.10 | [python.org](https://www.python.org/downloads/) – „Add to PATH" aktivieren |
|
| Python | ≥ 3.10 | [python.org](https://www.python.org/downloads/) – „Add to PATH" aktivieren |
|
||||||
| Claude Desktop | aktuell | [claude.ai/download](https://claude.ai/download) |
|
| Claude Code | aktuell | CLI-Tool von Anthropic |
|
||||||
| Git | optional | Für Versionsverwaltung |
|
| Git | optional | Für Versionsverwaltung |
|
||||||
|
|
||||||
> **Hinweis:** Python 3.13 wird vollständig unterstützt (CadQuery 2.7.0 liefert fertige Wheels).
|
> **Hinweis:** Python 3.13 wird vollständig unterstützt (CadQuery 2.7.0 liefert fertige Wheels).
|
||||||
@@ -76,57 +76,52 @@ Installierte Pakete (Auswahl):
|
|||||||
# Ausgabe: cq-editor OK
|
# Ausgabe: cq-editor OK
|
||||||
```
|
```
|
||||||
|
|
||||||
### 2.5 Test-STL erzeugen
|
### 2.5 Output-Verzeichnis anlegen
|
||||||
|
|
||||||
```powershell
|
```powershell
|
||||||
.venv\Scripts\python -c "
|
mkdir models
|
||||||
import cadquery as cq
|
|
||||||
from cadquery import exporters
|
|
||||||
from pathlib import Path
|
|
||||||
|
|
||||||
output = Path.home() / '3d-models'
|
|
||||||
output.mkdir(exist_ok=True)
|
|
||||||
result = cq.Workplane('XY').box(20, 20, 10)
|
|
||||||
exporters.export(result, str(output / 'test_box.stl'))
|
|
||||||
print('OK:', output / 'test_box.stl')
|
|
||||||
"
|
|
||||||
```
|
```
|
||||||
|
|
||||||
Die STL-Datei wird in `C:\Users\<Benutzername>\3d-models\` gespeichert.
|
STL-Dateien und Vorschauen werden in `cadquery\models\` gespeichert.
|
||||||
|
|
||||||
---
|
---
|
||||||
|
|
||||||
## 3. Claude Code einbinden
|
## 3. Claude Code einbinden
|
||||||
|
|
||||||
**Claude Code** (CLI) nutzt `settings.json`, nicht `claude_desktop_config.json`.
|
**Claude Code** (CLI) nutzt `settings.json` — **nicht** `claude_desktop_config.json`.
|
||||||
|
|
||||||
### 3.1 Konfigurationsdatei
|
### 3.1 Konfigurationsdatei
|
||||||
|
|
||||||
```
|
```
|
||||||
C:\Users\thors\.claude\settings.json
|
C:\Users\<Benutzername>\.claude\settings.json
|
||||||
```
|
```
|
||||||
|
|
||||||
### 3.2 CadQuery-Server eintragen
|
### 3.2 CadQuery-Server eintragen
|
||||||
|
|
||||||
Der CadQuery-Server ist bereits eingetragen (Auszug):
|
Den folgenden Block in `"mcpServers"` einfügen:
|
||||||
|
|
||||||
```json
|
```json
|
||||||
{
|
{
|
||||||
"mcpServers": {
|
"mcpServers": {
|
||||||
"cadquery": {
|
"cadquery": {
|
||||||
"type": "stdio",
|
"type": "stdio",
|
||||||
"command": "C:/Users/thors/Documents/Claude/cadquery/.venv/Scripts/python.exe",
|
"command": "C:/Users/<Benutzername>/Documents/Claude/cadquery/.venv/Scripts/python.exe",
|
||||||
"args": ["C:/Users/thors/Documents/Claude/cadquery/server.py"]
|
"args": ["C:/Users/<Benutzername>/Documents/Claude/cadquery/server.py"],
|
||||||
|
"env": {
|
||||||
|
"CADQUERY_OUTPUT_DIR": "C:/Users/<Benutzername>/Documents/Claude/cadquery/models"
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
```
|
```
|
||||||
|
|
||||||
> **Hinweis:** In `settings.json` werden Pfade mit Forward-Slashes (`/`) geschrieben.
|
> **Wichtig:** `<Benutzername>` durch den tatsächlichen Windows-Benutzernamen ersetzen.
|
||||||
|
> Pfade in `settings.json` werden mit Forward-Slashes (`/`) geschrieben.
|
||||||
|
|
||||||
### 3.3 Claude Code neu starten
|
### 3.3 Claude Code neu starten
|
||||||
|
|
||||||
Nach Änderungen an `settings.json` muss Claude Code neu gestartet werden.
|
Nach Änderungen an `settings.json` muss Claude Code **vollständig** neu gestartet werden
|
||||||
|
(nicht nur eine neue Konversation öffnen — die App selbst beenden und neu starten).
|
||||||
Die MCP-Tools erscheinen dann automatisch in der Werkzeugliste.
|
Die MCP-Tools erscheinen dann automatisch in der Werkzeugliste.
|
||||||
|
|
||||||
---
|
---
|
||||||
@@ -139,26 +134,16 @@ CQ-editor ist ein Qt-basierter GUI-Editor mit Live-3D-Vorschau.
|
|||||||
|
|
||||||
```powershell
|
```powershell
|
||||||
# Direkt über die installierte Executable:
|
# Direkt über die installierte Executable:
|
||||||
C:\Users\<Benutzername>\Documents\Claude\cadquery\.venv\Scripts\cq-editor.exe
|
.venv\Scripts\cq-editor.exe
|
||||||
|
|
||||||
# Alternativ über Python:
|
# Alternativ über Python:
|
||||||
.venv\Scripts\python -m cq_editor
|
.venv\Scripts\python -m cq_editor
|
||||||
```
|
```
|
||||||
|
|
||||||
### Startskript (optional)
|
|
||||||
|
|
||||||
Für einfacheres Starten kann eine Datei `start-cq-editor.bat` im Projektverzeichnis
|
|
||||||
angelegt werden:
|
|
||||||
|
|
||||||
```batch
|
|
||||||
@echo off
|
|
||||||
C:\Users\<Benutzername>\Documents\Claude\cadquery\.venv\Scripts\cq-editor.exe
|
|
||||||
```
|
|
||||||
|
|
||||||
### Workflow mit CQ-editor
|
### Workflow mit CQ-editor
|
||||||
|
|
||||||
1. CQ-editor starten
|
1. CQ-editor starten
|
||||||
2. CadQuery-Code im Editor schreiben
|
2. Datei aus `models\` öffnen (z.B. `box.py`)
|
||||||
3. **F5** drücken → Live-Vorschau rechts aktualisiert sich
|
3. **F5** drücken → Live-Vorschau rechts aktualisiert sich
|
||||||
4. Datei → Export → STL zum Speichern
|
4. Datei → Export → STL zum Speichern
|
||||||
|
|
||||||
@@ -168,10 +153,10 @@ C:\Users\<Benutzername>\Documents\Claude\cadquery\.venv\Scripts\cq-editor.exe
|
|||||||
|
|
||||||
### 5.1 Verfügbare MCP-Tools
|
### 5.1 Verfügbare MCP-Tools
|
||||||
|
|
||||||
Nach dem Neustart von Claude Desktop stehen drei Tools zur Verfügung:
|
Nach dem Neustart von Claude Code stehen drei Tools zur Verfügung:
|
||||||
|
|
||||||
#### `mcp__cadquery__render_stl`
|
#### `mcp__cadquery__render_stl`
|
||||||
Führt CadQuery-Python-Code aus und exportiert eine STL-Datei.
|
Führt CadQuery-Python-Code aus und exportiert eine STL-Datei nach `models\`.
|
||||||
|
|
||||||
```
|
```
|
||||||
Parameter:
|
Parameter:
|
||||||
@@ -180,7 +165,7 @@ Parameter:
|
|||||||
```
|
```
|
||||||
|
|
||||||
#### `mcp__cadquery__preview_png`
|
#### `mcp__cadquery__preview_png`
|
||||||
Exportiert eine SVG-Vorschau des Modells.
|
Exportiert eine SVG-Vorschau des Modells nach `models\`.
|
||||||
|
|
||||||
```
|
```
|
||||||
Parameter:
|
Parameter:
|
||||||
@@ -189,7 +174,7 @@ Parameter:
|
|||||||
```
|
```
|
||||||
|
|
||||||
#### `mcp__cadquery__list_models`
|
#### `mcp__cadquery__list_models`
|
||||||
Listet alle STL-Dateien im Output-Verzeichnis auf.
|
Listet alle STL-Dateien in `models\` auf.
|
||||||
|
|
||||||
### 5.2 Code-Konventionen
|
### 5.2 Code-Konventionen
|
||||||
|
|
||||||
@@ -213,11 +198,23 @@ result = cq.Workplane("XY").box(20, 20, 10)
|
|||||||
|
|
||||||
### 5.3 Beispiele
|
### 5.3 Beispiele
|
||||||
|
|
||||||
**Einfacher Quader:**
|
**Offene Box mit parametrischen Maßen (siehe `models/box.py`):**
|
||||||
```python
|
```python
|
||||||
import cadquery as cq
|
import cadquery as cq
|
||||||
|
|
||||||
result = cq.Workplane("XY").box(30, 20, 10)
|
# Maße
|
||||||
|
breite = 30 # mm (X)
|
||||||
|
tiefe = 30 # mm (Y)
|
||||||
|
hoehe = 20 # mm (Z)
|
||||||
|
wandstaerke = 2 # mm
|
||||||
|
|
||||||
|
result = (
|
||||||
|
cq.Workplane("XY")
|
||||||
|
.box(breite, tiefe, hoehe)
|
||||||
|
.faces(">Z")
|
||||||
|
.shell(-wandstaerke)
|
||||||
|
)
|
||||||
|
|
||||||
show_object(result)
|
show_object(result)
|
||||||
```
|
```
|
||||||
|
|
||||||
@@ -234,13 +231,13 @@ result = (
|
|||||||
show_object(result)
|
show_object(result)
|
||||||
```
|
```
|
||||||
|
|
||||||
**Parametrisches Modell:**
|
**Quader mit abgerundeten Kanten:**
|
||||||
```python
|
```python
|
||||||
import cadquery as cq
|
import cadquery as cq
|
||||||
|
|
||||||
breite = 40
|
breite = 40
|
||||||
hoehe = 20
|
tiefe = 20
|
||||||
tiefe = 10
|
hoehe = 10
|
||||||
radius = 3
|
radius = 3
|
||||||
|
|
||||||
result = (
|
result = (
|
||||||
@@ -252,29 +249,15 @@ result = (
|
|||||||
show_object(result)
|
show_object(result)
|
||||||
```
|
```
|
||||||
|
|
||||||
**Assembly (Baugruppe):**
|
|
||||||
```python
|
|
||||||
import cadquery as cq
|
|
||||||
|
|
||||||
box = cq.Workplane("XY").box(20, 20, 10)
|
|
||||||
zylinder = cq.Workplane("XY").cylinder(15, 5)
|
|
||||||
|
|
||||||
asm = (
|
|
||||||
cq.Assembly()
|
|
||||||
.add(box, name="basis", loc=cq.Location((0, 0, 0)))
|
|
||||||
.add(zylinder, name="zapfen", loc=cq.Location((0, 0, 10)))
|
|
||||||
)
|
|
||||||
show_object(asm)
|
|
||||||
```
|
|
||||||
|
|
||||||
### 5.4 Output-Verzeichnis
|
### 5.4 Output-Verzeichnis
|
||||||
|
|
||||||
STL-Dateien werden gespeichert in:
|
STL-Dateien und SVG-Vorschauen werden gespeichert in:
|
||||||
```
|
```
|
||||||
C:\Users\<Benutzername>\3d-models\
|
cadquery\models\
|
||||||
```
|
```
|
||||||
|
|
||||||
Diesen Pfad kann man über die Umgebungsvariable `CADQUERY_OUTPUT_DIR` überschreiben.
|
Der Pfad wird über `CADQUERY_OUTPUT_DIR` in `settings.json` gesetzt.
|
||||||
|
Fallback (wenn nicht gesetzt): `cadquery\models\` relativ zu `server.py`.
|
||||||
|
|
||||||
---
|
---
|
||||||
|
|
||||||
@@ -283,6 +266,8 @@ Diesen Pfad kann man über die Umgebungsvariable `CADQUERY_OUTPUT_DIR` überschr
|
|||||||
```
|
```
|
||||||
cadquery/
|
cadquery/
|
||||||
├── .venv/ # Python Virtual Environment (nicht ins Git)
|
├── .venv/ # Python Virtual Environment (nicht ins Git)
|
||||||
|
├── models/ # Generierte STL- und SVG-Dateien + Python-Modelle
|
||||||
|
│ └── box.py # Beispiel: offene Box mit parametrischen Maßen
|
||||||
├── server.py # MCP-Server (FastMCP)
|
├── server.py # MCP-Server (FastMCP)
|
||||||
└── README.md # Diese Datei
|
└── README.md # Diese Datei
|
||||||
```
|
```
|
||||||
@@ -309,14 +294,15 @@ in eine Variable namens `result` speichern.
|
|||||||
|
|
||||||
### STL-Datei wird nicht erstellt
|
### STL-Datei wird nicht erstellt
|
||||||
|
|
||||||
- Output-Verzeichnis prüfen: `C:\Users\<Benutzername>\3d-models\`
|
- Output-Verzeichnis prüfen: `cadquery\models\` muss existieren
|
||||||
- Schreibrechte auf das Verzeichnis prüfen
|
- Schreibrechte auf das Verzeichnis prüfen
|
||||||
|
|
||||||
### Claude Desktop zeigt keine MCP-Tools
|
### Claude Code zeigt keine MCP-Tools
|
||||||
|
|
||||||
1. `claude_desktop_config.json` auf korrekte Pfade und JSON-Syntax prüfen
|
1. `settings.json` auf korrekte Pfade und JSON-Syntax prüfen
|
||||||
2. Claude Desktop vollständig beenden (Taskleiste → Rechtsklick → Beenden)
|
2. Claude Code **vollständig** beenden (nicht nur Konversation schließen)
|
||||||
3. Claude Desktop neu starten
|
3. Claude Code neu starten
|
||||||
|
4. MCP-Server-Log prüfen: `%APPDATA%\Claude\logs\mcp-server-cadquery.log`
|
||||||
|
|
||||||
### Download bricht ab (cadquery-ocp / PyQt5-Qt5)
|
### Download bricht ab (cadquery-ocp / PyQt5-Qt5)
|
||||||
|
|
||||||
|
|||||||
+8
-15
@@ -1,23 +1,16 @@
|
|||||||
"""
|
|
||||||
Offene Box: 40 x 60 x 50 mm, Wand- und Bodenstärke 2 mm
|
|
||||||
"""
|
|
||||||
import cadquery as cq
|
import cadquery as cq
|
||||||
from cadquery import exporters
|
|
||||||
from pathlib import Path
|
|
||||||
|
|
||||||
OUTPUT = Path.home() / "3d-models"
|
# Maße
|
||||||
OUTPUT.mkdir(exist_ok=True)
|
breite = 30 # mm (X)
|
||||||
|
tiefe = 30 # mm (Y)
|
||||||
wall = 2
|
hoehe = 20 # mm (Z)
|
||||||
|
wandstaerke = 2 # mm
|
||||||
|
|
||||||
result = (
|
result = (
|
||||||
cq.Workplane("XY")
|
cq.Workplane("XY")
|
||||||
.box(40, 60, 50)
|
.box(breite, tiefe, hoehe)
|
||||||
.faces(">Z")
|
.faces(">Z")
|
||||||
.shell(-wall)
|
.shell(-wandstaerke)
|
||||||
)
|
)
|
||||||
|
|
||||||
out = OUTPUT / "box_40x60x50.stl"
|
show_object(result)
|
||||||
exporters.export(result, str(out))
|
|
||||||
print(f"STL gespeichert: {out}")
|
|
||||||
print(f"Größe: {out.stat().st_size // 1024} KB")
|
|
||||||
|
|||||||
@@ -13,7 +13,8 @@ from mcp.server.fastmcp import FastMCP
|
|||||||
import cadquery as cq
|
import cadquery as cq
|
||||||
from cadquery import exporters
|
from cadquery import exporters
|
||||||
|
|
||||||
OUTPUT_DIR = Path(os.environ.get("CADQUERY_OUTPUT_DIR", Path.home() / "3d-models"))
|
_default_output = Path(__file__).parent / "models"
|
||||||
|
OUTPUT_DIR = Path(os.environ.get("CADQUERY_OUTPUT_DIR", _default_output))
|
||||||
OUTPUT_DIR.mkdir(parents=True, exist_ok=True)
|
OUTPUT_DIR.mkdir(parents=True, exist_ok=True)
|
||||||
|
|
||||||
mcp = FastMCP("cadquery")
|
mcp = FastMCP("cadquery")
|
||||||
|
|||||||
Reference in New Issue
Block a user