Un assistant IA modifie le contenu de mon site, mais il n’a ni compte administrateur ni accès à la base de données. Dans LydiaCMS, c’est un utilisateur ordinaire aux permissions limitées, et tout ce qu’il fait est écrit dans le journal d’audit. Je peux donc lui confier les modifications courantes des textes, du SEO et des traductions tout en sachant ce qui a changé.
Ce qui peut mal tourner et ce que le système fait
L’assistant fait une erreur
Chaque modification est écrite dans le journal d’audit avec l’ancienne et la nouvelle valeur, et l’administration l’affiche sous forme de différence. Je vois qui a fait la modification et ce qui a changé exactement dans le texte, et j’annule une mauvaise modification en un clic.
Une modification ne peut être annulée que si l’enregistrement n’a pas changé depuis. Sinon, le système refuse l’annulation et indique quels champs ont changé entre-temps, afin de ne jamais écraser un travail plus récent. L’annulation concerne les pages et les autres enregistrements de contenu. Je ne la propose volontairement pas pour les utilisateurs et les rôles.
L’assistant veut plus que ce qui lui est permis
Le serveur MCP s’exécute sous un utilisateur précis et chaque opération passe par le même contrôle de permissions (ACL) que l’administration. L’assistant ne peut gérer ni les utilisateurs ni les rôles, et personne ne peut attribuer plus de droits qu’il n’en a lui-même. La manière dont les permissions s’héritent le long de l’arbre des contextes est décrite dans Architecture.
Du code malveillant se glisse dans le contenu
Le HTML est filtré à l’enregistrement d’après une liste de balises et d’attributs autorisés (HTMLPurifier). Les scripts et les attributs non autorisés sont retirés du contenu, quel que soit celui qui l’a envoyé.
Un tiers non autorisé appelle le serveur
Les outils soumis à des permissions exigent un jeton partagé. Si aucun jeton n’est défini, le serveur ne laisse entrer personne. Le jeton n’est lu depuis l’environnement qu’au moment de l’appel ; il ne se retrouve donc pas dans le conteneur DI compilé.
Comment je m’en sers
C’est ainsi que je modifie aussi le contenu de ce site : textes des pages, leurs propriétés SEO (slug, titre, description), téléversement d’images et traductions. Les outils sont générés à partir des points d’accès enregistrés de l’API d’administration et portent leur nom, par exemple core_pages_update ou core_translations_set. D’autres paquets ajoutent leurs propres outils, par exemple la gestion des villes et des pays dans le paquet location.
Sous le capot : une API, deux transports
- STDIO local dans
lydiacms/core. Un client MCP lancelydiacms:mcpvia Docker, la CLI ou SSH, si bien qu’aucun point d’accès HTTP public n’est nécessaire. - Streamable HTTP dans
lydiacms/api. Les mêmes capacités peuvent être exposées à distance via/api/mcpet authentifiées par un jeton Bearer de service web. L’accès à distance doit être activé explicitement.