Von 90 auf 5 Minuten: unser Strapi-Blog, ein MCP Server und der Fehler, den das Tempo versteckt hat

Von 90 auf 5 Minuten: unser Strapi-Blog, ein MCP Server und der Fehler, den das Tempo versteckt hat

Die schnelle Version hat drei Artikel produziert, die in Wahrheit ein Artikel in drei Verkleidungen waren. Gemerkt habe ich es erst Tage später.

Kurz zum Aufbau: Jeder Beitrag in dieser Reihe erscheint in drei Sprachen, Englisch, Deutsch und Serbisch. Zwischen dem fertigen Text und der veröffentlichten Seite lagen früher ein bis zwei Stunden. Heute sind es rund 5 Minuten. Fast nichts von der alten Zeit war Schreibarbeit.

Dahinter stecken zwei Bausteine, sehr ungleich verteilt. Der MCP Server von Strapi hat die mechanische Hälfte übernommen, ein Claude Skill die redaktionelle. Der Skill war der schwierigere Teil, und zwar mit deutlichem Abstand.

Das eigentliche Problem war nie das Schreiben

Das Datenmodell von Strapi v5 ist an dieser Stelle richtig gebaut. Ein Dokument, drei Locales, saubere Trennung. Daran lag es nicht.

Es lag am Formatbruch. Im Kopf entsteht Markdown, in der Datenbank liegt ein Blocks-Array, also ein JSON-Baum aus Knoten. Diese Umwandlung macht kein Compiler, sondern ein Mensch, von Hand, im Browser, zum dritten Mal an diesem Tag. Für die Maschine ist das trivial. Für den Menschen ist es zäh.

Dazu kommt rund ein Dutzend langweiliger Felder pro Sprache: Slug, Excerpt, Lesezeit, Meta-Title, Meta-Description, Keywords, Open Graph, strukturierte Daten, FAQ-Einträge, Kategorie, Tags, Autor. Mal drei. In Summe ungefähr eine Stunde reine Sachbearbeitung, für die niemand jemals qualifiziert werden musste.

Die Folge war schlimmer als der Zeitverlust, und das ist der Grund, warum ich überhaupt darüber schreibe. Uns haben nie die Themen gefehlt. Was gefehlt hat, war die Bereitschaft, diese letzte, unerfreuliche Stunde noch am selben Abend zu erledigen. Also wurde verschoben, und irgendwann war der Text nicht mehr aktuell genug, um ihn noch zu veröffentlichen. Der Aufwand war kein Kostenpunkt. Er war ein Filter darauf, was überhaupt erschienen ist.

Drei Wege hinein

Erstens: alles so lassen. Weiter im Admin-Panel, kein Setup, kein Risiko, dafür die Stunde für immer bezahlen. Die meisten Teams sind hier, ohne sich je bewusst dafür entschieden zu haben.

Zweitens: ein eigenes Skript gegen die REST-API. Das funktioniert, kostet einen Tag Arbeit, und danach gehört es Ihnen, inklusive Wartung. Schemaänderungen brechen so ein Skript stillschweigend, und Sie merken es Wochen später, wenn ein Feld auf einmal leer bleibt. Vor allem aber löst es den Teil nicht, der Urteilsvermögen verlangt. Sie hätten das Tippen automatisiert und das Denken behalten, und das Tippen war nie das Teure.

Drittens: ein Agent über den MCP Server. Strapi liefert seit Version 5.47 einen mit. Aktiviert wird er mit mcp: { enabled: true } in config/server.js, danach Neustart, der Endpunkt liegt unter /mcp. Authentifiziert wird über ein Admin-Token. Der interessante Teil daran: Die Rechte dieses Tokens entscheiden, welche Tools der Agent überhaupt zu sehen bekommt. Kein Löschrecht bedeutet kein Lösch-Tool. Nicht gesperrt, sondern schlicht nicht vorhanden.

Die vierte Variante wäre gewesen, direkt in die Datenbank zu schreiben. Nein. Damit verlieren Sie Validierung, Lifecycle-Hooks und das Draft-System und gewinnen nichts.

Wir haben uns für den Agenten entschieden. Der MCP Server allein holt allerdings nur etwa ein Drittel der Stunde zurück.

Was der MCP Server löst und was nicht

Ein MCP Server ist keine Integration. Er ist eine API mit einer freundlicheren Eingangstür.

Praktisch bedeutet das: Das CMS ist im selben Gespräch erreichbar, in dem der Text entsteht. Damit hört die Formatumwandlung auf, eine Aufgabe zu sein, und wird zu einem Nebeneffekt. Niemand konvertiert mehr Markdown nach Blocks. Der Inhalt kommt als Blocks an.

Was der Server dagegen nicht weiß: wie ein guter Artikel auf unserem Blog aussieht. Dass jeder Beitrag ein echtes Zugeständnis enthalten muss und nicht nur ein kokettes. Dass die deutsche Fassung komponiert und nicht übersetzt wird. Dass eine Meta-Description zwischen 50 und 160 Zeichen liegt und sich nicht wie ein Werbespruch lesen soll.

Deshalb im Klartext: Ein Agent mit Schreibzugriff auf ein CMS, aber ohne redaktionelle Regeln, ist ein sehr schneller Weg zu mittelmäßigen Inhalten. Das Tempo ist echt. Die Mittelmäßigkeit auch.

Die Regeln stecken bei uns in einem Claude Skill. Das ist im Kern ein Ordner mit einer Datei SKILL.md, dazu Referenzdateien und ein paar Skripte, und der Agent lädt ihn nur, wenn die Aufgabe dazu passt. Bei uns steht darin: die fünf Artikelformate, die Sprachregeln, eine Liste verbotener Formulierungen, sämtliche Feldgrenzen, die exakte Reihenfolge der MCP-Aufrufe und die Regeln für die deutsche und die serbische Fassung. Ein kleiner Styleguide, der zufällig ausführbar ist.

So verteilt sich die Arbeit: Der MCP Server hat das Veröffentlichen mechanisch gemacht. Der Skill hat es auf ein Niveau gehoben, unter das man seinen Namen setzen kann. Wer nur eines von beiden bauen will, baut den Skill. Seit der Umstellung ist kein Beitrag mehr von Hand im Admin-Panel entstanden, in keiner der drei Sprachen.

Was es gekostet hat und was trotzdem kaputtging

Das MCP-Setup war ein Nachmittag. Der Skill hat Wochen gedauert und ist bis heute nicht fertig. Dieses Verhältnis hat mich überrascht, obwohl es im Rückblick offensichtlich hätte sein müssen.

Vier Dinge sind uns dabei um die Ohren geflogen. Drei davon sind es wert, aufgeschrieben zu werden.

Das erste betrifft Relationen, und es ist das unangenehmste. Die Dokumentation sagt, eine to-one-Relation akzeptiert entweder eine reine Dokument-ID als String oder ein Objekt mit einem documentId-Schlüssel. Die Objektform wurde sauber validiert, meldete Erfolg und hängte nichts an. Der Artikel existierte, die Antwort sah korrekt aus, die Live-Seite hatte keinen Autor, keine Kategorie und keine Tags.

Schlimmer ist der Umkehrschluss. Create- und Update-Antworten melden Relationen auch dann als null, wenn sie tatsächlich gesetzt wurden. Die Antwort ist also in beide Richtungen wertlos. Verlässlich ist nur ein get-Aufruf nach dem Schreiben. Gekostet hat uns das eine Debugging-Sitzung am 25. Juli 2026, den größeren Teil davon mit einem Verdacht gegen das Frontend, das vollkommen unschuldig war.

Das zweite ist kleiner. Ein Update weigert sich, partiell zu sein. Wer nur eine einzige Relation ändern will, muss title und slug trotzdem mitschicken. Harmlos, sobald man es weiß. Eine Stunde Verwirrung, wenn nicht.

Das dritte ist eine dokumentierte Einschränkung und kein Fehler: Medien lassen sich über MCP nicht hochladen. Medienfelder verweisen auf ein Asset, das bereits in der Bibliothek liegt, und der Server legt keine neue Datei an. Coverbilder bleiben deshalb Handarbeit. Karte erzeugen, in die Medienbibliothek hochladen, Asset-ID zurückgeben, der Agent referenziert sie. Das sind rund 90 Sekunden der 5 Minuten.

Und dann das vierte, das eigentlich wichtige. Der QA-Artikel vom 25. Juli 2026 kam in allen drei Sprachfassungen auf genau 47 Blöcke. Absatz für Absatz deckungsgleich zwischen Englisch, Deutsch und Serbisch, eins zu eins.

So sieht unabhängige Komposition nicht aus. So sieht eine Übersetzung aus, die so lange poliert wurde, bis sie sich muttersprachlich las. Das Deutsch war korrekt. Es war trotzdem der englische Artikel mit deutschen Wörtern darin, und ein deutscher Leser spürt so etwas, auch wenn er es nicht benennen kann.

Kein Werkzeug hat dabei versagt. Die Pipeline hat exakt das getan, was man ihr gesagt hatte, und sie hat es schnell getan. Genau das Tempo hat den Fehler verdeckt. Bei 90 Minuten wäre mir das aufgefallen. Bei 5 Minuten habe ich veröffentlicht.

Wer Reibung entfernt, entfernt damit auch die Pause, in der er etwas bemerkt hätte. Nach jeder Automatisierung muss deshalb absichtlich eine Kontrolle wieder eingebaut werden, weil die kostenlose weg ist.

Was wir heute anders machen würden

Den Vergleich zwischen den Sprachfassungen vor dem zweiten Artikel bauen, nicht danach. Ein Skript prüft, ob die Zahlen in allen Fassungen identisch sind, ob Namen auftauchen, die es nur in einer Sprache gibt, und wie die Absatzstruktur aussieht. Es sagt Ihnen ungeschminkt, dass Ihr Deutsch eine Übersetzung ist. Zwanzig Zeilen Python hätten das Problem mit den 47 Blöcken noch am selben Tag gefunden.

Das Admin-Token von Anfang an eng zuschneiden. Unseres war breiter als nötig, aus reiner Ungeduld beim Aufsetzen. Da die Sichtbarkeit der Tools den Rechten folgt, ist ein schmales Token nicht nur eine Sicherheitsfrage. Es ist auch eine kleinere und klarere Oberfläche, über die der Agent nachdenken muss.

Und keine Veröffentlichungsrechte für den Agenten. Der Draft landet im System, ein Mensch liest ihn, ein Mensch drückt auf Veröffentlichen. Das Gegenargument kenne ich, das letzte Stück Theater in einer ansonsten automatisierten Kette. Ich weise es zurück, und nach dem Artikel mit den 47 Blöcken deutlich entschiedener als vorher. Diese letzte Lesung ist die einzige Stelle im Prozess, an der überhaupt noch Urteilsvermögen sitzt.

Wenn Ihr Strapi-Blog die langsame Stelle ist

Conimex IT baut Blog- und Content-Frontends auf Strapi. Konkret heißt das: das Frontend in React oder Next.js, ein Blocks-Renderer, der echte Inhalte verkraftet und nicht nur den Happy Path, lokalisiertes Routing, das keine URLs zerschießt, sowie SEO- und Open-Graph-Felder, die auf Tags verdrahtet sind, die Google und die KI-Antwortmaschinen tatsächlich lesen können.

Auf Wunsch bauen wir auch die Publishing-Pipeline dahinter, damit Ihre Redaktion nicht länger im Admin-Panel wohnt.

Wenn Ihr CMS in Ordnung ist, aber das Veröffentlichen die Aufgabe ist, um die im Team alle einen Bogen machen, dann ist das lösbar und meistens kleiner, als es aussieht. Schreiben Sie mir an [email protected].

#Strapi#MCP#Headless CMS#Automatisierung#KI

Häufig gestellte Fragen

Was ist der Strapi MCP Server?

Es ist ein MCP Server, der seit Version 5.47 in Strapi eingebaut ist. Er erlaubt einem KI-Client wie Claude Code, Claude Desktop oder Cursor, Inhalte über den Content Manager anzulegen, zu lesen, zu aktualisieren, zu veröffentlichen und wieder zurückzuziehen. Aktiviert wird er in config/server.js, authentifiziert über ein Admin-Token. Alles, was der Agent tun kann, ist durch die Rechte dieses Tokens begrenzt.

Ist es sicher, einen KI-Agenten in ein produktives CMS schreiben zu lassen?

So sicher wie das Token, das Sie ihm geben. Die Berechtigungen werden auf Schema-Ebene und noch einmal zur Laufzeit geprüft. Ein Token mit reinem Lesezugriff zeigt dem Agenten ausschließlich Tools zum Auflisten und Lesen, ein Token, das auf einen Content-Type beschränkt ist, kommt an die übrigen nicht heran. Unsere Empfehlung: ein eigenes, schmales Token pro Anwendungsfall, keine Veröffentlichungsrechte, und jeder Draft wird von einem Menschen freigegeben.

Braucht man Claude Skills, um den MCP Server zu nutzen?

Nein. MCP funktioniert allein und legt Inhalte auch auf einen einfachen Prompt hin an. Skills sind für die Konstanz zuständig: dieselbe Struktur, dieselbe Sprache, dieselben SEO-Felder, jedes Mal gleich befüllt. Ohne diese Ebene bekommen Sie schnelle Inhalte statt guter Inhalte.

Funktioniert das auch mit mehrsprachigen Inhalten und mit Bildern?

Mehrsprachig ja. Die Tools nehmen bei aktivierter i18n einen locale-Parameter entgegen, ein Dokument trägt mehrere Sprachfassungen. Bei Bildern nur teilweise: Medienfelder verweisen auf Assets, die bereits in der Bibliothek liegen, denn der MCP Server kann keine neue Datei hochladen. Die Bilderstellung bleibt damit ein manueller Schritt.

Kann Conimex IT das für uns bauen?

Ja, und in aller Regel ist das Frontend die größere Hälfte. Wir bauen Blog- und Content-Frontends auf Strapi mit React und Next.js: Blocks-Renderer, mehrsprachiges Routing, strukturierte Daten, SEO-Felder. Die MCP-Anbindung und die Publishing-Pipeline hängen wir auf Wunsch dahinter, damit Ihre Redaktion aufhört, Inhalte per Copy-and-paste zu übertragen. Kontakt: [email protected].

Haben Sie ein Projekt im Sinn?

Lassen Sie uns darüber sprechen, wie Conimex IT Ihnen helfen kann, Ihr nächstes Produkt zu gestalten, zu entwickeln und zu veröffentlichen.

Kontakt aufnehmen