diff --git a/README.md b/README.md index 0b06d06..07e4271 100644 --- a/README.md +++ b/README.md @@ -10,7 +10,7 @@ Zusätzlich ist CQ-editor als GUI-Vorschau-Tool integriert. 1. [Voraussetzungen](#1-voraussetzungen) 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) 5. [Verwendung in Claude](#5-verwendung-in-claude) 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 | | 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 | > **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 ``` -### 2.5 Test-STL erzeugen +### 2.5 Output-Verzeichnis anlegen ```powershell -.venv\Scripts\python -c " -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') -" +mkdir models ``` -Die STL-Datei wird in `C:\Users\\3d-models\` gespeichert. +STL-Dateien und Vorschauen werden in `cadquery\models\` gespeichert. --- ## 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 ``` -C:\Users\thors\.claude\settings.json +C:\Users\\.claude\settings.json ``` ### 3.2 CadQuery-Server eintragen -Der CadQuery-Server ist bereits eingetragen (Auszug): +Den folgenden Block in `"mcpServers"` einfügen: ```json { "mcpServers": { "cadquery": { "type": "stdio", - "command": "C:/Users/thors/Documents/Claude/cadquery/.venv/Scripts/python.exe", - "args": ["C:/Users/thors/Documents/Claude/cadquery/server.py"] + "command": "C:/Users//Documents/Claude/cadquery/.venv/Scripts/python.exe", + "args": ["C:/Users//Documents/Claude/cadquery/server.py"], + "env": { + "CADQUERY_OUTPUT_DIR": "C:/Users//Documents/Claude/cadquery/models" + } } } } ``` -> **Hinweis:** In `settings.json` werden Pfade mit Forward-Slashes (`/`) geschrieben. +> **Wichtig:** `` durch den tatsächlichen Windows-Benutzernamen ersetzen. +> Pfade in `settings.json` werden mit Forward-Slashes (`/`) geschrieben. ### 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. --- @@ -139,26 +134,16 @@ CQ-editor ist ein Qt-basierter GUI-Editor mit Live-3D-Vorschau. ```powershell # Direkt über die installierte Executable: -C:\Users\\Documents\Claude\cadquery\.venv\Scripts\cq-editor.exe +.venv\Scripts\cq-editor.exe # Alternativ über Python: .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\\Documents\Claude\cadquery\.venv\Scripts\cq-editor.exe -``` - ### Workflow mit CQ-editor 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 4. Datei → Export → STL zum Speichern @@ -168,10 +153,10 @@ C:\Users\\Documents\Claude\cadquery\.venv\Scripts\cq-editor.exe ### 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` -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: @@ -180,7 +165,7 @@ Parameter: ``` #### `mcp__cadquery__preview_png` -Exportiert eine SVG-Vorschau des Modells. +Exportiert eine SVG-Vorschau des Modells nach `models\`. ``` Parameter: @@ -189,7 +174,7 @@ Parameter: ``` #### `mcp__cadquery__list_models` -Listet alle STL-Dateien im Output-Verzeichnis auf. +Listet alle STL-Dateien in `models\` auf. ### 5.2 Code-Konventionen @@ -213,11 +198,23 @@ result = cq.Workplane("XY").box(20, 20, 10) ### 5.3 Beispiele -**Einfacher Quader:** +**Offene Box mit parametrischen Maßen (siehe `models/box.py`):** ```python 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) ``` @@ -234,14 +231,14 @@ result = ( show_object(result) ``` -**Parametrisches Modell:** +**Quader mit abgerundeten Kanten:** ```python import cadquery as cq -breite = 40 -hoehe = 20 -tiefe = 10 -radius = 3 +breite = 40 +tiefe = 20 +hoehe = 10 +radius = 3 result = ( cq.Workplane("XY") @@ -252,29 +249,15 @@ 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 -STL-Dateien werden gespeichert in: +STL-Dateien und SVG-Vorschauen werden gespeichert in: ``` -C:\Users\\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/ ├── .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) └── README.md # Diese Datei ``` @@ -309,14 +294,15 @@ in eine Variable namens `result` speichern. ### STL-Datei wird nicht erstellt -- Output-Verzeichnis prüfen: `C:\Users\\3d-models\` +- Output-Verzeichnis prüfen: `cadquery\models\` muss existieren - 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 -2. Claude Desktop vollständig beenden (Taskleiste → Rechtsklick → Beenden) -3. Claude Desktop neu starten +1. `settings.json` auf korrekte Pfade und JSON-Syntax prüfen +2. Claude Code **vollständig** beenden (nicht nur Konversation schließen) +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) diff --git a/models/box.py b/models/box.py index cbc51ae..9b2df53 100644 --- a/models/box.py +++ b/models/box.py @@ -1,23 +1,16 @@ -""" -Offene Box: 40 x 60 x 50 mm, Wand- und Bodenstärke 2 mm -""" import cadquery as cq -from cadquery import exporters -from pathlib import Path -OUTPUT = Path.home() / "3d-models" -OUTPUT.mkdir(exist_ok=True) - -wall = 2 +# Maße +breite = 30 # mm (X) +tiefe = 30 # mm (Y) +hoehe = 20 # mm (Z) +wandstaerke = 2 # mm result = ( cq.Workplane("XY") - .box(40, 60, 50) + .box(breite, tiefe, hoehe) .faces(">Z") - .shell(-wall) + .shell(-wandstaerke) ) -out = OUTPUT / "box_40x60x50.stl" -exporters.export(result, str(out)) -print(f"STL gespeichert: {out}") -print(f"Größe: {out.stat().st_size // 1024} KB") +show_object(result) diff --git a/server.py b/server.py index d929af4..918cac5 100644 --- a/server.py +++ b/server.py @@ -13,7 +13,8 @@ from mcp.server.fastmcp import FastMCP import cadquery as cq 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) mcp = FastMCP("cadquery")