Ein KI-Assistent bearbeitet mir den Inhalt der Website, hat aber weder ein Administratorkonto noch Zugriff auf die Datenbank. In LydiaCMS ist er ein gewöhnlicher Benutzer mit eingeschränkten Berechtigungen, und alles, was er tut, wird im Audit-Log festgehalten. Routinemäßige Änderungen an Texten, SEO und Übersetzungen kann ich ihm deshalb anvertrauen und weiß trotzdem, was sich geändert hat.
Was schiefgehen kann und was das System dagegen tut
Der Assistent macht einen Fehler
Jede Änderung wird mit altem und neuem Wert im Audit-Log festgehalten, und die Administration zeigt sie als Differenz. So sehe ich, wer die Änderung vorgenommen hat und was sich im Text genau geändert hat, und eine schlechte Änderung mache ich mit einem Klick rückgängig.
Eine Änderung lässt sich nur dann rückgängig machen, wenn sich der Datensatz seither nicht geändert hat. Andernfalls lehnt das System das Rückgängigmachen ab und listet auf, welche Felder sich inzwischen geändert haben, damit neuere Arbeit nicht überschrieben wird. Das Rückgängigmachen betrifft Seiten und weitere Inhaltsdatensätze. Bei Benutzern und Rollen biete ich es bewusst nicht an.
Der Assistent will mehr, als er darf
Der MCP-Server läuft unter einem konkreten Benutzer, und jede Operation durchläuft dieselbe Berechtigungsprüfung (ACL) wie die Administration. Der Assistent kann keine Benutzer oder Rollen verwalten, und niemand kann mehr Rechte vergeben, als er selbst hat. Wie Berechtigungen über den Baum der Kontexte vererbt werden, beschreibt Architektur.
Schädlicher Code gelangt in den Inhalt
HTML wird beim Speichern anhand einer Liste erlaubter Tags und Attribute gefiltert (HTMLPurifier). Skripte und nicht erlaubte Attribute werden aus dem Inhalt entfernt, unabhängig davon, wer ihn gesendet hat.
Ein Unbefugter ruft den Server auf
Werkzeuge mit Berechtigungen verlangen ein gemeinsames Token. Ist kein Token gesetzt, lässt der Server niemanden durch. Das Token wird erst beim Aufruf aus der Umgebung gelesen und landet deshalb nicht im kompilierten DI-Container.
Wie ich es nutze
Auf diese Weise bearbeite ich auch den Inhalt dieser Website: Seitentexte, ihre SEO-Eigenschaften (Slug, Titel, Beschreibung), das Hochladen von Bildern und Übersetzungen. Die Werkzeuge entstehen aus den registrierten Endpunkten der Administrations-API und sind nach ihnen benannt, zum Beispiel core_pages_update oder core_translations_set. Weitere Pakete bringen eigene Werkzeuge mit, etwa die Verwaltung von Städten und Ländern im Paket location.
Unter der Haube: eine API, zwei Transporte
- Lokales STDIO in
lydiacms/core. Ein MCP-Client startetlydiacms:mcpüber Docker, CLI oder SSH, sodass kein öffentlicher HTTP-Endpunkt nötig ist. - Streamable HTTP in
lydiacms/api. Dieselben Fähigkeiten lassen sich über/api/mcpremote bereitstellen und mit einem Webservice-Bearer-Token authentifizieren. Der Fernzugriff muss ausdrücklich aktiviert werden.