feat: lokaler MCP-Server, Phase 3 (kleinteilige Unit/Lesson-Tools)
Statt eines "update_lesson", das die ganze Stunde inkl. Verlaufsplan als ein großes JSON-Objekt tauscht, gezielte kleine Tools je Teiloperation (Nutzervorschlag): create/update_unit, create/update_lesson (Metadaten ohne Phasen), add/update/remove_lesson_phase (je eine Phase), download_lesson_attachment (Base64, auf 3 MB gedeckelt). Verkürzt das Lesen-Schreiben-Zeitfenster je Operation und liefert lesbare Diffs für den Bestätigungsdialog statt eines Objekt-Dumps. ILessonRepository um GetById ergänzt (fehlte bisher, war aber Voraussetzung für jedes der neuen Tools). get_lesson_plans liefert jetzt zusätzlich Phase-IDs und Attachment-Metadaten, damit ein Client sie gezielt referenzieren kann. Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
This commit is contained in:
@@ -2557,6 +2557,38 @@ folgenden Punkte gehören direkt in `LehrerApp.Desktop`:
|
||||
MCP-Client, der auf `build/LehrerApp.app/Contents/MacOS/LehrerApp.McpBridge` zeigt, gegen
|
||||
die laufende App testen.
|
||||
|
||||
- [x] **4.5.28** Lokaler MCP-Server, Phase 3 (kleinteilige Unit/Lesson-Tools), 2026-09-11: statt
|
||||
eines einzelnen `update_lesson`, das die komplette Stunde inkl. Verlaufsplan als ein großes
|
||||
JSON-Objekt tauscht, gezielt kleine Tools je Teil-Operation — auf Nutzervorschlag: `Lesson`
|
||||
ist zwar technisch ein eingebettetes LiteDB-Dokument ohne Zeilen-Locking auf DB-Ebene, aber
|
||||
kleinteilige Tools verkürzen das Lesen-Schreiben-Zeitfenster je Operation drastisch und
|
||||
liefern einen für den Bestätigungsdialog tatsächlich lesbaren Diff statt eines
|
||||
Objekt-Dumps. Ein Tool, das die ganze Stunde überschreibt, wurde bewusst NICHT gebaut.
|
||||
- **Neue Tools:** `create_unit`/`update_unit` (Einheiten-Metadaten), `create_lesson` (ohne
|
||||
Phasen; übernimmt `GroupId` automatisch von der übergeordneten `Unit`, kein eigener
|
||||
`groupId`-Parameter — verhindert Inkonsistenz zwischen Lesson und Unit),
|
||||
`update_lesson` (Metadaten, Phasen bleiben unangetastet), `add_lesson_phase`/
|
||||
`update_lesson_phase`/`remove_lesson_phase` (je eine `LessonPhaseStep`), sowie
|
||||
`download_lesson_attachment` (Read-Tool, Base64, gedeckelt auf
|
||||
`LessonPlanTools.MaxInlineAttachmentBytes` = 3 MB — größere Anhänge liefern einen klaren
|
||||
Fehler statt einer aufgeblähten Antwort; echtes MCP-Resource-Streaming für große Dateien
|
||||
bleibt ein offener Punkt, siehe Planungsdokument).
|
||||
- **`ILessonRepository` um `GetById(Guid id)` ergänzt** (fehlte bisher komplett -
|
||||
`GetByUnit`/`GetByGroupAndDate`/`GetByGroupAndRange` decken keinen Einzelabruf per ID ab).
|
||||
Ohne diese Methode wäre kein einziges der neuen Lesson-Tools möglich gewesen, da sie alle
|
||||
eine bestehende Stunde gezielt nachladen müssen. `LessonRepository.GetById` delegiert auf
|
||||
das bereits intern (in `Delete`) genutzte `db.Lessons.FindById(id)`.
|
||||
- `get_lesson_plans` liefert jetzt zusätzlich `Attachments` (Speicher-ID + Dateiname +
|
||||
Größe) je Stunde und `Phases` inklusive `Id` je Phase — beides war vorher nicht
|
||||
exponiert und ist Voraussetzung dafür, dass ein KI-Client eine Phase oder einen Anhang
|
||||
gezielt referenzieren kann.
|
||||
- `McpToolScope`/`McpServerHostedService` entsprechend erweitert (7 Read-, 10 Write-Tools
|
||||
insgesamt), 14 neue Unit-Tests in
|
||||
[McpToolsTests.cs](LehrerApp.Desktop.Tests/McpToolsTests.cs) (jetzt 28), decken u.a. ab:
|
||||
dass `create_lesson` die Gruppe von der Einheit übernimmt statt einen eigenen Parameter zu
|
||||
vertrauen, dass `update_lesson`/`update_lesson_phase` wirklich nur die angegebenen Felder
|
||||
ändern, und dass ein zu großer Anhang beim Download einen Fehler statt einer Antwort liefert.
|
||||
|
||||
**Wichtige Abweichung von der ursprünglichen Planung (5.2):** Vor der Umsetzung zeigte sich,
|
||||
dass 5.2 wie ursprünglich beschrieben eine zweite, parallele Fehlzeiten-Erfassung neben dem
|
||||
bereits bestehenden Anwesenheits-Tracking aus Kapitel 3 (`ParticipationEntry.Attendance`,
|
||||
|
||||
Reference in New Issue
Block a user