From 212e5a78447c908b7054673c37883c77dde9da3a Mon Sep 17 00:00:00 2001 From: architeur Date: Mon, 29 Dec 2025 22:54:03 +0100 Subject: [PATCH] Restructure documentation for context compacting MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - CLAUDE.md: Only essential work instructions - ARCHITECTURE.md: Technical details and tool list - HANDOVER.md: Session state and next tasks πŸ€– Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude Opus 4.5 --- ARCHITECTURE.md | 103 +++++++++++++++++++++++++++++++ CLAUDE.md | 160 +++++++++--------------------------------------- HANDOVER.md | 33 ++++++++++ 3 files changed, 165 insertions(+), 131 deletions(-) create mode 100644 ARCHITECTURE.md create mode 100644 HANDOVER.md diff --git a/ARCHITECTURE.md b/ARCHITECTURE.md new file mode 100644 index 0000000..fc02d39 --- /dev/null +++ b/ARCHITECTURE.md @@ -0,0 +1,103 @@ +# RhinoMCP - Architektur + +## Übersicht + +```text +β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β” +β”‚ Claude.ai / Claude Code β”‚ +β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”¬β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜ + β”‚ MCP Protocol (stdio) +β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β–Όβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β” +β”‚ MCP-Server (Python) β”‚ +β”‚ src/mcp-server/server.py β”‚ +β”‚ - Tool-Definitionen β”‚ +β”‚ - Request/Response Handling β”‚ +β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”¬β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜ + β”‚ HTTP (localhost:9000) +β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β–Όβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β” +β”‚ Rhino-Plugin (C# .rhp) β”‚ +β”‚ src/rhino-plugin/RhinoMCP/ β”‚ +β”‚ β”œβ”€ RhinoMcpPlugin.cs (Plugin-Einstieg) β”‚ +β”‚ β”œβ”€ HttpServer.cs (HTTP-Endpoint) β”‚ +β”‚ β”œβ”€ CommandHandler.cs (Rhino-Befehle) β”‚ +β”‚ β”œβ”€ GrasshopperHandler.cs(GH-Befehle) β”‚ +β”‚ └─ MeshTerrainHandler.cs(Mesh/GIS-Tools) β”‚ +β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜ +``` + +## Technische Details + +- **Rhino-Version**: Rhino 9 WIP +- **Framework**: .NET 7.0 +- **RhinoCommon/Grasshopper SDK**: 8.0.23304.9001 +- **HTTP-Server**: EmbedIO auf Port 9000 +- **MCP-Transport**: stdio + +## VerfΓΌgbare Tools + +### Rhino-Geometrie + +- `rhino_create_point`, `rhino_create_line`, `rhino_create_polyline` +- `rhino_create_circle`, `rhino_create_sphere`, `rhino_create_box` +- `rhino_create_surface`, `rhino_create_curve` +- `rhino_move`, `rhino_rotate`, `rhino_scale`, `rhino_copy` +- `rhino_boolean_union`, `rhino_boolean_difference`, `rhino_boolean_intersection` +- `rhino_export`, `rhino_run_command` + +### Grasshopper + +- `grasshopper_open_definition`, `grasshopper_get_definition_info` +- `grasshopper_add_component`, `grasshopper_connect_components` +- `grasshopper_add_slider`, `grasshopper_set_slider_value` +- `grasshopper_set_toggle_value`, `grasshopper_set_panel_text` +- `grasshopper_bake`, `grasshopper_save_definition`, `grasshopper_recompute` +- `grasshopper_delete_component`, `grasshopper_add_group` +- `grasshopper_add_scribble`, `grasshopper_rename_component` + +### Mesh/Terrain/GIS + +- `rhino_mesh_from_points`, `rhino_import_mesh`, `rhino_mesh_boolean` +- `rhino_terrain_contours`, `rhino_terrain_slope_analysis` +- `rhino_terrain_watershed`, `rhino_terrain_low_points` +- `rhino_create_drainage_line`, `rhino_create_road_surface` +- `rhino_import_geotiff`, `rhino_import_shapefile`, `rhino_import_xyz` +- `rhino_transform_coordinates`, `rhino_get_bounding_box` +- `rhino_create_grid`, `rhino_create_site_section`, `rhino_calculate_area_volume` + +## Projektstruktur + +```text +Rhino-MCP/ +β”œβ”€β”€ CLAUDE.md # Arbeitsanweisungen (kurz!) +β”œβ”€β”€ ARCHITECTURE.md # Diese Datei +β”œβ”€β”€ HANDOVER.md # Session-Übergabe +β”œβ”€β”€ README.md # Γ–ffentliche Dokumentation +β”œβ”€β”€ LICENSE # MIT Lizenz +β”œβ”€β”€ install.bat # Windows-Installer +β”œβ”€β”€ src/ +β”‚ β”œβ”€β”€ mcp-server/ +β”‚ β”‚ β”œβ”€β”€ server.py +β”‚ β”‚ └── requirements.txt +β”‚ └── rhino-plugin/ +β”‚ └── RhinoMCP/ +β”‚ β”œβ”€β”€ RhinoMCP.csproj +β”‚ β”œβ”€β”€ RhinoMcpPlugin.cs +β”‚ β”œβ”€β”€ HttpServer.cs +β”‚ β”œβ”€β”€ CommandHandler.cs +β”‚ β”œβ”€β”€ GrasshopperHandler.cs +β”‚ └── MeshTerrainHandler.cs +└── docs/ +``` + +## HTTP-Request Format + +```json +{ + "action": "grasshopper_delete_component", + "params": { + "component_id": "guid-here" + } +} +``` + +**Wichtig**: Parameter mΓΌssen unter `"params"` sein, nicht im Root-Objekt! diff --git a/CLAUDE.md b/CLAUDE.md index 6e3aba0..81e950e 100644 --- a/CLAUDE.md +++ b/CLAUDE.md @@ -1,139 +1,37 @@ -# RhinoMCP - Claude Code Projektdokumentation +# RhinoMCP - Arbeitsanweisungen -## ProjektΓΌbersicht +**Nach Context-Komprimierung diese Datei lesen!** -RhinoMCP ist ein MCP (Model Context Protocol) Plugin, das Claude AI direkten Zugriff auf Rhino 3D und Grasshopper ermΓΆglicht. Es wurde fΓΌr Landschaftsarchitektur, Straßeninfrastruktur und Regenwassermanagement entwickelt. +## Kritische Regeln + +1. **85%-Regel**: Ab 85% Chat-KapazitΓ€t sofort dokumentieren und committen +2. **300-Zeilen-Regel**: Maximale Dateigrâße pro Datei, bei Überschreitung aufteilen +3. **Params-Format**: HTTP-Requests an Rhino nutzen `"params": {...}` nicht Root-Level ## Architektur -```text -β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β” -β”‚ Claude.ai / Claude Code β”‚ -β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”¬β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜ - β”‚ MCP Protocol (stdio) -β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β–Όβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β” -β”‚ MCP-Server (Python) β”‚ -β”‚ src/mcp-server/server.py β”‚ -β”‚ - Tool-Definitionen β”‚ -β”‚ - Request/Response Handling β”‚ -β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”¬β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜ - β”‚ HTTP (localhost:9000) -β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β–Όβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β” -β”‚ Rhino-Plugin (C# .rhp) β”‚ -β”‚ src/rhino-plugin/RhinoMCP/ β”‚ -β”‚ β”œβ”€ RhinoMcpPlugin.cs (Plugin-Einstieg) β”‚ -β”‚ β”œβ”€ HttpServer.cs (HTTP-Endpoint) β”‚ -β”‚ β”œβ”€ CommandHandler.cs (Rhino-Befehle) β”‚ -β”‚ β”œβ”€ GrasshopperHandler.cs(GH-Befehle) β”‚ -β”‚ └─ MeshTerrainHandler.cs(Mesh/GIS-Tools) β”‚ -β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜ -``` - -## Technische Details - -- **Rhino-Version**: Rhino 9 WIP -- **Framework**: .NET 7.0 -- **RhinoCommon/Grasshopper SDK**: 8.0.23304.9001 -- **HTTP-Server**: EmbedIO auf Port 9000 -- **MCP-Transport**: stdio - -## VerfΓΌgbare Tools - -### Rhino-Geometrie - -- `rhino_create_point`, `rhino_create_line`, `rhino_create_polyline` -- `rhino_create_circle`, `rhino_create_sphere`, `rhino_create_box` -- `rhino_create_surface`, `rhino_create_curve` -- `rhino_move`, `rhino_rotate`, `rhino_scale`, `rhino_copy` -- `rhino_boolean_union`, `rhino_boolean_difference`, `rhino_boolean_intersection` -- `rhino_export`, `rhino_run_command` - -### Grasshopper - -- `grasshopper_open_definition`, `grasshopper_get_definition_info` -- `grasshopper_add_component`, `grasshopper_connect_components` -- `grasshopper_add_slider`, `grasshopper_set_slider_value` -- `grasshopper_set_toggle_value`, `grasshopper_set_panel_text` -- `grasshopper_bake`, `grasshopper_save_definition`, `grasshopper_recompute` -- `grasshopper_delete_component`, `grasshopper_add_group` -- `grasshopper_add_scribble`, `grasshopper_rename_component` - -### Mesh/Terrain/GIS - -- `rhino_mesh_from_points`, `rhino_import_mesh`, `rhino_mesh_boolean` -- `rhino_terrain_contours`, `rhino_terrain_slope_analysis` -- `rhino_terrain_watershed`, `rhino_terrain_low_points` -- `rhino_create_drainage_line`, `rhino_create_road_surface` -- `rhino_import_geotiff`, `rhino_import_shapefile`, `rhino_import_xyz` -- `rhino_transform_coordinates`, `rhino_get_bounding_box` -- `rhino_create_grid`, `rhino_create_site_section`, `rhino_calculate_area_volume` - -## Installation - -1. Plugin bauen: `dotnet build --configuration Release` -2. `install.bat` ausfΓΌhren oder manuell nach `%APPDATA%\McNeel\Rhinoceros\9.0\Plug-ins\RhinoMCP (1.0.0)\` kopieren -3. MCP-Server in Claude Code konfigurieren - -## Entwicklungsrichtlinien - -### Automatisches Commit bei KapazitΓ€tswarnung - -**WICHTIG**: Ab 85% Chat-KapazitΓ€t muss automatisch: - -1. Aktueller Stand dokumentiert werden -2. Alle Γ„nderungen committet werden -3. Zusammenfassung der offenen Aufgaben erstellt werden - -### Code-Struktur - -- **Maximale Dateigrâße: 300 Zeilen pro Datei** -- Bei Überschreitung: Logisch aufteilen in separate Handler-Klassen - -### Aktuelle Aufteilungsempfehlungen - -| Datei | Zeilen | Status | Empfehlung | -| ---------------------- | ------ | -------- | --------------------------------------------------------- | -| CommandHandler.cs | ~683 | Zu groß | Aufteilen in GeometryHandler, TransformHandler | -| MeshTerrainHandler.cs | ~1509 | Zu groß | Aufteilen in MeshHandler, TerrainHandler, GISHandler, RoadHandler | -| GrasshopperHandler.cs | ~671 | Zu groß | Aufteilen in GH_ComponentHandler, GH_DocumentHandler | -| server.py | ~1185 | Zu groß | Tool-Definitionen in separate Module | - -## Changelog - -### 2025-12-29 - -- Initiale Entwicklung des RhinoMCP Plugins -- Implementiert: Rhino-Geometrie, Grasshopper-Integration, Mesh/Terrain-Tools -- Neue GH-Tools: `delete_component`, `add_group`, `add_scribble`, `rename_component` -- GIS-Tools: GeoTIFF, Shapefile, XYZ Import -- Terrain-Analyse: Konturlinien, GefΓ€lle, Wasserscheiden - -## Offene Aufgaben - -- [ ] Code-Refactoring: Große Dateien aufteilen (max. 300 Zeilen) -- [ ] Unit-Tests implementieren -- [ ] Fehlerbehandlung verbessern -- [ ] Dokumentation erweitern - -## Projektstruktur +Siehe [ARCHITECTURE.md](ARCHITECTURE.md) fΓΌr Details. ```text -Rhino-MCP/ -β”œβ”€β”€ CLAUDE.md # Diese Dokumentation -β”œβ”€β”€ README.md # Γ–ffentliche Dokumentation -β”œβ”€β”€ LICENSE # MIT Lizenz -β”œβ”€β”€ install.bat # Windows-Installer -β”œβ”€β”€ src/ -β”‚ β”œβ”€β”€ mcp-server/ -β”‚ β”‚ β”œβ”€β”€ server.py # MCP-Server (TODO: aufteilen) -β”‚ β”‚ └── requirements.txt -β”‚ └── rhino-plugin/ -β”‚ └── RhinoMCP/ -β”‚ β”œβ”€β”€ RhinoMCP.csproj -β”‚ β”œβ”€β”€ RhinoMcpPlugin.cs -β”‚ β”œβ”€β”€ HttpServer.cs -β”‚ β”œβ”€β”€ CommandHandler.cs # TODO: aufteilen -β”‚ β”œβ”€β”€ GrasshopperHandler.cs # TODO: aufteilen -β”‚ └── MeshTerrainHandler.cs # TODO: aufteilen -└── docs/ # ZusΓ€tzliche Dokumentation +Claude <--MCP--> Python Server (server.py) <--HTTP:9000--> Rhino Plugin (C#) ``` + +## Offene Refactoring-Aufgaben + +| Datei | Zeilen | Aktion | +|-------|--------|--------| +| MeshTerrainHandler.cs | ~1509 | Aufteilen | +| server.py | ~1185 | Aufteilen | +| CommandHandler.cs | ~683 | Aufteilen | +| GrasshopperHandler.cs | ~671 | Aufteilen | + +## Build & Deploy + +```bash +cd src/rhino-plugin/RhinoMCP && dotnet build --configuration Release +# Dann install.bat ausfΓΌhren oder manuell kopieren +``` + +## Handover + +Bei Session-Ende: Siehe [HANDOVER.md](HANDOVER.md) fΓΌr aktuellen Stand. diff --git a/HANDOVER.md b/HANDOVER.md new file mode 100644 index 0000000..cbaf26a --- /dev/null +++ b/HANDOVER.md @@ -0,0 +1,33 @@ +# RhinoMCP - Session Handover + +## Letztes Update: 2025-12-29 + +## Aktueller Stand + +- Plugin funktioniert mit Rhino 9 WIP +- Alle GH-Tools (delete, group, scribble, rename) implementiert und getestet +- GIS-Tools (GeoTIFF, Shapefile, XYZ) implementiert +- Commit `873fba3` gepusht nach `git.artetui.de/admin/Rhino-MCP.git` + +## NΓ€chste Aufgaben + +1. **Code-Refactoring** (PrioritΓ€t hoch): + - MeshTerrainHandler.cs (~1509 Zeilen) aufteilen + - server.py (~1185 Zeilen) aufteilen + - CommandHandler.cs (~683 Zeilen) aufteilen + - GrasshopperHandler.cs (~671 Zeilen) aufteilen + +2. **Geplante Aufteilung**: + - MeshTerrainHandler β†’ MeshHandler, TerrainHandler, GISHandler, RoadHandler + - server.py β†’ tools_rhino.py, tools_grasshopper.py, tools_terrain.py + - CommandHandler β†’ GeometryHandler, TransformHandler + - GrasshopperHandler β†’ GH_ComponentHandler, GH_DocumentHandler + +## Bekannte Probleme + +- GeoTIFF-Import ΓΌber Heightfield-Command funktioniert nicht immer automatisch +- Rhino muss geschlossen sein fΓΌr Plugin-Rebuild (DLL-Lock) + +## Testdateien + +- `C:\Users\LarsMunkes\Downloads\MeshTerrainWorkflow.gh` - Terrain-Workflow mit Gruppen