From 96e105fe923cd279d73febaa559c1107060fd392 Mon Sep 17 00:00:00 2001 From: Florian Wilde Date: Sun, 13 Sep 2026 15:21:00 +0200 Subject: [PATCH] docs: DEVLOG-Eintrag fuer M8 Co-Authored-By: Claude Opus 5 --- devlog/DEVLOG.md | 75 ++++++++++++++++++++++++++++++++++++++++++++++- devlog/zeiten.csv | 1 + 2 files changed, 75 insertions(+), 1 deletion(-) diff --git a/devlog/DEVLOG.md b/devlog/DEVLOG.md index eab765b..bce32f9 100644 --- a/devlog/DEVLOG.md +++ b/devlog/DEVLOG.md @@ -14,7 +14,80 @@ die Übersicht aus `scripts/zeit.sh summe`. | M5 | claude | 420 | 7,00 | | M6 | claude | 733 | 12,22 | | M7 | claude | 886 | 14,77 | -| **Gesamt** | | **2452** | **40,87** | +| M8 | claude | 69 | 1,15 | +| **Gesamt** | | **2521** | **42,02** | + +--- + +## 2026-09-13 – M8: MCP + +**Dauer:** 69 Minuten (14:10–15:19), Art `claude`. + +> Der kürzeste Meilenstein — weil das Fundament schon stand. Tokens, Rechte +> und Protokoll kamen mit M7, der Kalenderschreibweg mit M4. Übrig blieb das +> Zusammenstecken. + +**Ziel der Sitzung:** Ein Sprachmodell soll den Alltag erleichtern können — +ohne einen eigenen, weicheren Zugang zu bekommen als jede andere fremde +Anwendung. + +### Erledigt + +- MCP-Server unter `/api/mcp` über `@modelcontextprotocol/sdk` +- Sechs Werkzeuge: suchen, Woche ansehen, Kalender auflisten, anlegen, + abhaken, einplanen +- Das Einplanen aus der Serveraktion herausgelöst, damit Oberfläche und MCP + dieselbe Stelle benutzen +- 6 neue E2E-Tests, Beschreibung in `docs/MCP.md` + +### Entscheidungen mit Begründung + +**Dieselben Tokens, dieselben Rechte wie die Schnittstelle.** Ein +Sprachmodell ist aus Sicht des Planers eine fremde Anwendung wie jede andere. +Ein eigener Zugangsweg wäre ein zweiter Satz Regeln — und der zweite Satz ist +immer der, den man vergisst zu pflegen. + +**Die Werkzeugliste richtet sich nach den Rechten.** Was ein Token nicht +darf, taucht gar nicht erst auf. Ein Modell soll nicht gegen eine Tür laufen, +die für es verschlossen ist; und eine Fehlermeldung als Antwort auf einen +Werkzeugaufruf ist verschwendeter Kontext. + +**Wenige, grob geschnittene Werkzeuge.** Ein Modell, das zwischen zwanzig +fast gleichen wählen muss, wählt falsch. Jedes weitere Werkzeug ist zudem +eine zusätzliche Möglichkeit, versehentlich etwas zu ändern. + +**Der Server kann nichts löschen.** Abhaken ja, wegräumen nein. Auch keine +Bereiche, Projekte oder Einstellungen anfassen. Ein Modell soll den Alltag +erleichtern, nicht die Ordnung umbauen. + +**Das Einplanen liegt jetzt an einer gemeinsamen Stelle** — und die liegt +bewusst **nicht** in einer Datei mit `'use server'`. Dort wird jede +exportierte Funktion zu einem Endpunkt, den der Browser aufrufen kann; eine +Funktion, die den Akteur als Parameter nimmt, wäre dann ein offenes Tor. + +**Zustandslos.** Der Planer hat keine langlaufenden Vorgänge, und eine +Sitzungsverwaltung wäre Zustand, den mehrere Container nicht teilen könnten. + +### Probleme und Lösungen + +| Problem | Lösung | +| --------------------------------------------------------------- | ----------------------------------------------------------------------------------------------------------------------------------- | +| Der SDK-Transport erwartet Node-Streams, Next liefert `Request` | Das SDK bringt seit 1.30 `WebStandardStreamableHTTPServerTransport` mit — `handleRequest(Request): Promise` passt direkt. | +| ESLint beanstandete das Auslesen der Formularfelder | `FormData.get` kann auch eine Datei liefern; die würde beim Stringify zu `[object Object]`. Ein Helfer nimmt jetzt nur Text. | + +### Offene Punkte + +- Der Server ist gegen die eigenen Tests geprüft, nicht gegen einen echten + Client. Ein Lauf mit Claude Code gegen die laufende Instanz wäre der + Beweis, dass Handschlag und Werkzeugbeschreibungen auch dort taugen. +- Die Handbuchbilder sind unverändert aus M7 — der MCP-Server hat keine + Oberfläche, es gibt nichts abzubilden. + +### Commits + +- 5f45dff refactor: Einplanen aus der Serveraktion herauslösen +- bdc4260 feat: MCP-Server über denselben Token wie die API +- (docs) MCP beschreiben, Fahrplan abschließen --- diff --git a/devlog/zeiten.csv b/devlog/zeiten.csv index 5db23a6..8006ba5 100644 --- a/devlog/zeiten.csv +++ b/devlog/zeiten.csv @@ -6,3 +6,4 @@ datum;start;ende;minuten;meilenstein;art;notiz 2026-09-11;06:35;13:35;420;M5;claude;M5 Benachrichtigungen fertig 2026-09-11;20:47;09:00;733;M6;claude;M6 Integrationen fertig 2026-09-12;10:15;01:01;886;M7;claude;M7 Schnellerfassung und API fertig +2026-09-13;14:10;15:19;69;M8;claude;M8 MCP fertig