Chtěl jsem používat AI pro správu skutečného obsahu, aniž bych jí otevřel databázi nebo předal neomezený administrátorský účet. V LydiaCMS jsem proto AI zapojil jako samostatného uživatele: k systému přistupuje přes MCP, smí provádět jen povolené operace a každá změna prochází stejnou autorizací a auditem jako zásah člověka.
Proč AI nepřistupuje přímo k databázi
Přímý přístup k databázi by byl jednoduchý, ale obcházel by validace, oprávnění a audit v aplikační vrstvě. AI by mohla zapsat technicky platná data, která porušují pravidla systému, nebo změnit záznam bez dostatečné informace o tom, kdo a proč změnu provedl.
Neomezený administrátorský účet by sice zachoval aplikační vrstvu, ale poskytl by zbytečně široká oprávnění. Zvolil jsem proto samostatného servisního uživatele, kterému mohu pro každý způsob použití povolit jen potřebné operace.
Jak MCP používám
Tímto způsobem upravuji také tento web: měním texty a SEO vlastnosti stránek, nahrávám obrázky nebo připravuji překlady. Místo ručního procházení formulářů mohu zadat úkol v konverzaci a před uložením nebo po něm zkontrolovat konkrétní výsledek.
MCP nástroje vznikají z registrovaných endpointů administračního API. Jmenují se podle operace, například core_pages_update nebo core_translations_set. Další balíčky mohou stejným způsobem přidat vlastní nástroje.
Zdrojový kód HTTP rozhraní je v repozitáři lydiacms-api.
MCP není bezpečnostní hranice
MCP je způsob, jak AI zpřístupnit konkrétní operace, nikoli bezpečnostní hranice. Tu v LydiaCMS tvoří identita uživatele, jeho oprávnění, kontrola ACL, validace v aplikační vrstvě a audit změn.
Stejný nástroj proto může mít pro dva uživatele odlišný výsledek: operace se provede pouze tehdy, pokud ji konkrétní uživatel smí použít nad daným záznamem.
Co se stane při jednom volání
- ChatGPT, Codex nebo jiný MCP klient vybere nástroj a připraví jeho vstupní data.
- MCP server určí uživatele, pod kterým se požadavek provede. U vzdáleného HTTP přístupu ho identifikuje Bearer token.
- Token omezuje dostupná oprávnění a každá operace navíc prochází stejnou kontrolou ACL jako administrace.
- Úspěšná změna se uloží běžnou aplikační vrstvou a zapíše do auditního logu se svou původní a novou hodnotou.
Omezení oprávnění
Pro AI používám samostatného uživatele, kterému přiděluji pouze oprávnění potřebná pro konkrétní úkol. Nemá oprávnění ke správě uživatelů ani rolí. Současně platí systémové pravidlo, že uživatel nemůže přidělit více práv, než má sám. Strom kontextů a dědění pravidel popisuji v části Architektura.
Při vzdáleném přístupu přes HTTP je Bearer token navázaný na konkrétního uživatele a sadu povolených oprávnění. Bez platného tokenu server požadavek odmítne. Vzdálený MCP endpoint je navíc nutné výslovně zapnout.
Audit a vracení změn
U obsahových záznamů audit ukládá původní a novou hodnotu. V administraci proto vidím, kdo změnu provedl a která pole upravil. Vybranou změnu mohu vrátit; samotné vrácení se zapíše jako další auditní událost.
Vrácení je možné jen tehdy, pokud se dotčená pole od původní změny znovu nezměnila. Při konfliktu systém operaci odmítne, aby nepřepsal novější práci. Tato funkce je určená pro podporované obsahové záznamy; nenabízím ji pro uživatele a role.
Filtrování HTML obsahu
Text přijatý přes MCP prochází stejným zpracováním jako obsah uložený z administrace. HTMLPurifier ponechá jen povolené značky a atributy a odstraní skripty nebo nepovolené atributy. Nejde o obecnou ochranu před každým typem útoku, ale o další vrstvu pro obsahová pole s HTML.
Jeden protokol, dva transporty
- Lokální STDIO v
lydiacms/core. MCP klient spustí příkazlydiacms:mcppřes Docker, CLI nebo SSH. Není k tomu potřeba veřejný HTTP endpoint. - Streamable HTTP v
lydiacms/api. Stejné nástroje lze zpřístupnit na adrese/api/mcpa požadavky ověřovat Bearer tokenem.
Cena zvoleného řešení
Řízený přístup přes MCP je bezpečnější než přímý zápis do databáze, ale vyžaduje další práci a průběžnou kontrolu.
- Každou novou operaci musím bezpečně navrhnout, přiřadit jí oprávnění a udržovat její implementaci.
- Kompromitovaný token umožňuje používat přidělená oprávnění až do jeho zneplatnění.
- Audit a vracení změn pokrývají podporované obsahové záznamy, ne všechny typy dat a operací.
- Výsledek práce AI stále kontroluji; automatizace nenahrazuje odpovědnost za uloženou změnu.
Výsledkem není zvláštní bezpečnostní režim pro AI. AI používá stejnou aplikační vrstvu jako člověk a audit s možností vrácení zůstává pojistkou, nikoli náhradou autorizace.