Verfügbare Tools
Der MCP-Server der AI Suite stellt derzeit 46 Tools bereit. Jedes Tool gehört zu genau einem OAuth-Scope, und ein Scope mit Feature-Bindung wird nur gewährt, wenn die Backend-Gruppe des Benutzers das passende AI-Suite-Feature-Recht besitzt (mcp:read und mcp:write haben keine, siehe Berechtigungen & Scopes). Die Tool-Liste, die ein Modell zu sehen bekommt, ist deshalb pro Benutzer unterschiedlich. Fehlt ein Recht, taucht das betroffene Tool gar nicht auf. Auf einer Installation mit nur einer Sprache blendet der Server zudem die Übersetzungs-Tools aus.
Die folgende Übersicht ist nach Scopes gruppiert und nennt zu jedem Tool kurz seinen Zweck. Die vollständigen Parameter liefert jeder Client selbst, weil sie als JSON-Schema Teil der Tool-Definition sind. Welche Tools eine konkrete Installation tatsächlich ausliefert, verrät readServerInfo.
Breaking Changes in 0.9.0
Mit Version 0.9.0 wurden Tools zusammengeführt und entfernt. Passe die Tool-Namen in eigenen Prompts, Skills und Integrationen an:
auditQuestions,auditContentGap,auditTopicClusterundauditCompetitorssind inauditContentaufgegangen. Die Analyseart wählst du dort mittype(questions,gap,cluster,competitors).batchGenerateFolderMetadataundbatchTranslateFolderMetadataentfallen. Ordner übergibst du jetzt mitfolderIdentifiersanbatchGenerateFileMetadatabzw.batchTranslateFileMetadata.replaceTextentfällt. Einzelkorrekturen laufen überpatchTextmit einem einzigen Eintrag inreplacements.- Die Einstellungen
mcpSearchAdditionalTablesundmcpExcludeAdditionalTablesFromSearchentfallen, bestehende Werte werden ignoriert. Welche TabellensearchContentdurchsucht, ergibt sich jetzt aus der TCA, siehe Sicherheit & Betrieb.
Leere nach dem Update alle Caches.
Backend-Links in den Tool-Ergebnissen
Seit Version 0.7.0 liefert jeder Aufruf, der Datensätze berührt hat, die betroffenen Datensätze zusätzlich als Backend-Links zurück. Sie kommen über zwei Wege: als structuredContent.links für Clients, die Links selbst darstellen, und als Textblock „🔗 Open in TYPO3“ am Ende des Ergebnisses, wodurch sie im Chat anklickbar werden. Als Beschriftung dient der Titel des Datensatzes, sofern er einen hat.
Die Links sind nach Tabelle gruppiert, weil eine Seite und die Inhaltselemente darauf unterschiedliche Ziele sind. pages steht vorn, danach folgen die übrigen Tabellen in der Reihenfolge, in der sie berührt wurden. Die Obergrenze von sechs Links gilt pro Gruppe, damit eine geschriebene Seite nicht von den Inhaltselementen verdrängt wird, die auf ihr angelegt wurden. Das Feld omitted nennt je Gruppe, wie viele Links die Obergrenze weggelassen hat, sodass eine gekürzte Gruppe nicht mit einer vollständigen verwechselt werden kann.
Die Adressen sind absolut und enthalten bewusst kein Route-Token. Ein Token gehört zu der Sitzung, die es erzeugt hat, also zur MCP-Sitzung und nicht zum Browser der Redaktion. In einem Link, der den Prozess verlässt, wäre es wertlos. TYPO3 beantwortet eine Backend-Adresse ohne Token mit einer Weiterleitung über den Login, die das ursprüngliche Ziel mitführt. Wer im Backend angemeldet ist, landet also direkt auf dem Datensatz.
Seit Version 0.9.0 zeigen die Links auf eine Zwischenseite unter /aisuite-mcp/open auf dem Backend-Host, die von dort aus ins Backend weiterleitet. Ohne diesen Umweg erreicht ein Link, der in einem externen Chat wie Claude.ai oder ChatGPT angeklickt wird, das Backend ohne das Sitzungs-Cookie der Redaktion und endet auf dem Login. Die Einstellung mcpBackendLinkBounce (Standard: an) steuert die Zwischenseite. Steht sie auf 0, zeigen die Links direkt ins Backend. Bereits ausgegebene Links funktionieren in beiden Fällen weiter.
Woher Schema und Host stammen, entscheidet sich in dieser Reihenfolge: zuerst die Einstellung mcpBackendBaseUrl, dann die aktuelle Anfrage, zuletzt die Site-Konfiguration. Ergibt keine davon eine vollständige Adresse, etwa beim stdio-Transport ohne konfigurierte Site, lässt AI Suite MCP den Link weg, statt ihn defekt auszugeben, und vermerkt das in aisuite_mcp_warnings.log.
Kontext und Recherche (mcp:read)
Diese Tools lesen nur. Sie kosten keine Credits und rufen kein KI-Modell auf.
| Tool | Zweck |
|---|---|
readServerInfo | Status des Servers mit der MCP-Version, dem aktiven Workspace und den erreichbaren Sites. Admins sehen zusätzlich die Versionen von TYPO3, PHP und AI Suite, die aktive Konfiguration und eine Diagnose |
readPageTree | Seitenbaum durchlaufen, begrenzt auf die Mounts des Benutzers |
readPageContent | Inhaltselemente einer Seite lesen, optional mit Container-Verschachtelung. Seit Version 0.9.0 listet das Tool auch die Datensätze einer Seite, die zu keinem Inhaltselement gehören, mit Namen statt nur als Anzahl |
readContentTree | Inhalte aller Seiten eines Teilbaums auf einmal, seitenweise paginiert |
readRenderedPage | Die Seite wie ein Besucher sie sieht, inklusive Plugin-Ausgabe. Benötigt zusätzlich enable_mcp_rendered_page_read |
readEditorialGuidelines | Die von der Redaktion hinterlegten Vorgaben zu Tonalität, Zielgruppe und Stil für einen Seitenbereich |
readChildren | Container- und IRRE-Kinder eines Datensatzes auflisten, nach Relation gruppiert |
searchContent | Volltextsuche über Seiten und Inhaltselemente. Seit Version 0.6.0 werden IRRE-Kindtabellen wie Akkordeon- oder Card-Elemente automatisch anhand der TCA mitdurchsucht, der Treffer nennt das passende Feld und alle durchsuchten Tabellen, und gesucht wird im Stand des aktuellen Workspace statt im Live-Datensatz. Seit Version 0.7.0 trägt jeder Treffer languageUid und, sofern die Seite zu einer Site gehört, deren ISO-Sprachkürzel. Bleibt die Suche ohne Treffer, nennt die Antwort die durchsuchten Tabellen, damit „nichts gefunden“ nicht mit „existiert nicht“ verwechselt wird. Seit Version 0.9.0 durchsucht das Tool jede Tabelle mit Textfeldern, die ein Redakteur über den Seitenbaum erreichen kann. Die Tabellen werden aus der TCA ermittelt statt aus einer konfigurierten Liste, ausgenommen sind nur die gesperrten Tabellen (siehe Sicherheit & Betrieb) |
listFiles | Dateien eines FAL-Storage oder -Ordners auflisten, mit includeFolders auch die Unterordner, etwa um ein Ziel für uploadMedia zu wählen |
readFileInfo | Metadaten einer einzelnen Datei |
listStaleContent | Seiten und Inhalte finden, die seit N Tagen nicht mehr bearbeitet wurden |
readTaskStatus | Fortschritt eines Hintergrund-Tasks |
readTaskResults | Ergebnisse eines abgeschlossenen Tasks abrufen, rein lesend |
Datensätze: Schema und Bearbeitung (mcp:read / mcp:write)
Die erkundenden Tools dieser Gruppe gehören zu mcp:read, die schreibenden zu mcp:write. Alle Schreibvorgänge laufen über den DataHandler und damit über die üblichen TYPO3-Prüfungen, und sie folgen dem eingestellten Schreibmodus.
| Tool | Scope | Zweck |
|---|---|---|
listTables | mcp:read | Tabellen auflisten, die der Benutzer lesen darf, abzüglich mcpExcludedTables |
readRecordSchema | mcp:read | TCA-Schema einer Tabelle mit Feldern, Typen, Validierung, Relationen und Schreibbarkeit. Seit Version 0.6.0 nennt es bei Rich-Text-Feldern zusätzlich die HTML-Tags, die das Feld beim Speichern behalten darf |
readFlexFormSchema | mcp:read | Inneres Schema eines FlexForm-Feldes mit Sheets und Feldern |
listPageTypes | mcp:read | Verfügbare Seitentypen (Doktypes) |
listContentTypes | mcp:read | Verfügbare CTypes und gültige Spalten einer Seite |
readRecords | mcp:read | Datensätze lesen, per UID, per Seite oder per Feldfilter. Mit fields liefert der Aufruf seit Version 0.6.0 nur die angeforderten Spalten statt aller Felder. Seit Version 0.7.0 liest rootPageId eine Seite samt allem darunter in einem Aufruf, und fullText gibt lange Textfelder ungekürzt zurück. Seit Version 0.9.0 löst ein Einzelaufruf die Dateien hinter einem FAL-Feld auf und liefert deren UIDs statt nur der Anzahl |
compareWithLive | mcp:read | Feldweiser Vergleich eines Workspace-Entwurfs mit dem Live-Stand |
previewRecords | mcp:write | Vorschau einer Schreiboperation als alt-neu-Diff, ohne zu speichern |
writeRecords | mcp:write | Datensätze anlegen oder ändern, optional als atomarer Batch. Seit Version 0.6.0 versteht die Positionsangabe auch before:UID. Seit Version 0.7.0 kann ein Eintrag über translations seine Übersetzungen gleich mitbringen |
copyRecords | mcp:write | Datensätze kopieren, einzeln oder als Batch |
moveRecords | mcp:write | Datensätze verschieben |
deleteRecords | mcp:write | Datensätze löschen (Soft-Delete). Als destruktiv markiert, der Client fragt daher nach |
localizeRecord | mcp:write | Übersetzung eines Datensatzes ohne KI und ohne Credits anlegen. Mit mode „localize“ (Standard) entsteht eine leere, verknüpfte Hülle, mit „copyToLanguage“ eine unabhängige Kopie. hidden steuert, ob sie versteckt angelegt wird |
savePageTree | mcp:write | Einen erzeugten Seitenbaum speichern. Neue Seiten landen seit Version 0.6.0 standardmäßig am Ende, alternativ steuerbar mit start, after:UID und before:UID |
patchText | mcp:write | Eine oder mehrere wörtliche Ersetzungen in einem Feld, atomar angewendet, ohne das ganze Feld neu zu senden. Seit Version 0.9.0 deckt es auch die Einzelkorrektur ab, die früher replaceText übernommen hat |
bulkReplaceText | mcp:write | Dieselbe Ersetzung über alle Kind-Datensätze eines Elternteils. Seit Version 0.6.0 auch seitenweise über pageIds für bis zu 50 Seiten, mit mehreren Regeln in einem Durchlauf und einem dryRun zur Vorabprüfung |
copyMediaReference | mcp:write | Dateireferenz von einem Feld auf ein anderes kopieren |
replaceMediaReference | mcp:write | Die Datei hinter einer bestehenden Referenz austauschen |
Übersetzungen direkt mitschreiben
Seit Version 0.7.0 kann ein Eintrag in writeRecords neben fields ein Objekt translations tragen, dessen Schlüssel die ISO-Sprachkürzel sind. Damit entstehen der Datensatz und seine Übersetzungen in einem Aufruf.
{
"records": [{
"table": "tt_content",
"pid": 354,
"fields": { "CType": "text", "header": "Einstellungen" },
"translations": { "en": { "header": "Settings" } }
}]
}Die Übersetzungshülle entsteht über TYPO3s eigenen localize-Befehl, also denselben Weg, den auch das Backend nimmt. Sprachfeld, Übersetzungs-Elternteil, l10n_source, l10n_state, ausgeschlossene Felder und vorhandene Inline-Kinder übernimmt damit der TYPO3-Kern. Anschließend werden die angegebenen Felder in diese Hülle geschrieben. Angelegt wird sie versteckt, genau wie TYPO3 es tut.
Derselbe Aufruf ein zweites Mal abgesetzt aktualisiert die vorhandene Übersetzung, statt eine zweite anzulegen. Ein Batch nach einem Teilfehler erneut zu senden ist also unbedenklich. translations funktioniert auch bei einem Eintrag mit uid, dann gilt dieser Datensatz als Ausgangspunkt. Verschachtelte Inline-Kinder lassen sich im selben Aufruf nicht übersetzen. Schreibe sie zuerst und übersetze sie danach über ihre UID.
Feldnamen bei Übersetzungen
Bei Übersetzungen kollidieren zwei Schreibweisen aus der TYPO3-Geschichte. tt_content hat das alte l18n_parent behalten, während pages und die meisten selbst geschriebenen Kindtabellen l10n_parent verwenden. Seit Version 0.7.0 akzeptiert AI Suite MCP beim Lesen und beim Schreiben beide Varianten und bildet sie auf den Namen ab, den die Tabelle tatsächlich führt. Dasselbe gilt für l10n_source und l18n_source. Das Ergebnis vermerkt, wenn eine solche Umbenennung stattgefunden hat. Ein Feldname, den die Tabelle wirklich besitzt, wird nie umgeschrieben.
KI-Funktionen (Generierung, Übersetzung, Bilder)
Diese Tools rufen die Anbieter und Modelle der AI Suite auf und verbrauchen dann Credits. Welche Modelle zur Verfügung stehen, ergibt sich aus der AI-Suite-Konfiguration und den Modellrechten der Backend-Gruppe. In AI Suite MCP ist dafür keine zusätzliche Einstellung nötig.
Zusammen mit den Batch-Tools und den drei prüfenden Audit-Tools sind sie die Tools, die einen gültigen API-Key der AI Suite voraussetzen. Fehlt er oder deckt das Lizenzpaket die Funktion nicht ab, bleiben die Tools in der Tool-Liste stehen und werden vom Modell auch aufgerufen. Der Aufruf endet dann mit einem Lizenzfehler. Das unterscheidet sie von den Feature-Rechten der Backend-Gruppe, die ein Tool bereits aus der Liste entfernen.
Seit Version 0.7.0 gilt das für translateRecord und translatePage nur noch dann, wenn du den optionalen Parameter model angibst. Lässt du ihn weg, legt das Tool den Übersetzungs-Datensatz an und gibt dir dessen Felder zurück, zusammen mit dem Glossar der Site und den globalen Anweisungen. Übersetzt wird dann vom Modell deines Clients, es geht nichts an den AI-Suite-Server und es kostet keine Credits. Die Antwort nennt außerdem die Modelle, die dir zur Verfügung stehen, falls du doch serverseitig übersetzen willst. Kommen Felder unverändert zurück, weist das Ergebnis darauf hin, damit eine ausgebliebene Übersetzung nicht unbemerkt bleibt.
Zu unterscheiden ist das von localizeRecord unter mcp:write. Jenes legt nur die leere Übersetzungshülle an. translateRecord ohne model legt die Hülle an und reicht dir zusätzlich die zu übersetzenden Feldinhalte heraus.
Bei translateFileMetadata und den Batch-Tools gibt es diesen Weg nicht. Ohne model liefern sie lediglich die Liste der verfügbaren Modelle zurück, die eigentliche Übersetzung läuft dort immer über den Server und kostet Credits.
| Tool | Scope | Zweck |
|---|---|---|
generateFileMetadata | mcp:generate | Alternativtext, Titel und Beschreibung für eine Datei erzeugen, auf Basis der Datei selbst |
translateRecord | mcp:translate | Einen einzelnen Datensatz übersetzen, mit model serverseitig, ohne model kostenlos durch das Modell deines Clients |
translatePage | mcp:translate | Eine ganze Seite übersetzen, mit translationScope wahlweise alles, nur Metadaten oder nur Inhaltselemente samt Inline-Kindern, ebenfalls wahlweise serverseitig oder kostenlos durch das Modell deines Clients |
translateFileMetadata | mcp:translate | Datei-Metadaten in eine Zielsprache übersetzen, immer serverseitig |
generateImage | mcp:image | Ein Bild aus einer Textbeschreibung erzeugen und in FAL ablegen |
Das DeepL-Glossar der Site ist kein eigenes Tool, sondern Bestandteil der Übersetzungs-Tools, und wird automatisch angewendet. Einfache Sprache steht über MCP nicht zur Verfügung.
Medien einbinden
Dieses Tool bringt vorhandene Dateien in die Dateiverwaltung, ohne ein KI-Modell zu bemühen. Es kostet keine Credits und funktioniert auch ohne gültigen API-Key der AI Suite. Es hängt an einem eigenen Scope und einem eigenen Feature-Recht, beide standardmäßig aus, weil es als einziges Tool neben generateImage eine physische Datei anlegt und deshalb nicht über einen Workspace zurückgenommen werden kann.
| Tool | Scope | Zweck |
|---|---|---|
uploadMedia | mcp:media | Vorhandene Bilder oder Videos in FAL übernehmen, per URL, als Base64 oder als YouTube- bzw. Vimeo-Link |
Mit onConflict legst du fest, was bei einem vorhandenen Dateinamen passiert: rename (Standard) speichert unter einem neuen Namen, replace überschreibt den Inhalt der vorhandenen Datei, sodass alle Referenzen sofort die neue Datei zeigen. Auch das lässt sich nicht über einen Workspace zurücknehmen. createFolder legt einen fehlenden Zielordner an.
Nicht zu verwechseln mit copyMediaReference und replaceMediaReference. Die beiden hängen keine neue Datei ein, sondern setzen bestehende Dateireferenzen um, gehören deshalb zu mcp:write und stehen in der Datensatz-Gruppe. Zu Zielordner, Größengrenze, erlaubten Dateiendungen und der Absicherung entfernter Downloads siehe Sicherheit & Betrieb.
Hintergrund-Tasks (mcp:workflow)
Batch-Tools laufen asynchron. Sie liefern sofort eine Task-ID zurück, der Fortschritt wird mit readTaskStatus abgefragt und die Ergebnisse mit readTaskResults gelesen. Geschrieben wird nichts davon automatisch. Ein Batch-Prozess erzeugt Vorschläge. Übersetzungen schreibt erst applyTaskResults in die Lokalisierungs-Datensätze, Metadaten-Vorschläge übernimmst du mit writeRecords.
| Tool | Zweck |
|---|---|
batchGenerateMetadata | Seiten-Metadaten in großer Zahl, entweder für eine UID-Liste oder für einen ganzen Seiten-Teilbaum |
batchGenerateFileMetadata | Datei-Metadaten für eine Liste von Dateien oder, über folderIdentifiers, für alle Dateien eines oder mehrerer Ordner |
batchTranslatePage | Mehrere Seiten übersetzen, entweder für eine UID-Liste oder für einen ganzen Seiten-Teilbaum |
batchTranslateFileMetadata | Datei-Metadaten einer Dateiliste oder, über folderIdentifiers, aller Dateien eines oder mehrerer Ordner übersetzen |
applyTaskResults | Die Übersetzungen eines fertigen Batch-Prozesses in die Lokalisierungs-Datensätze schreiben (Scope mcp:write) |
batchGenerateMetadata und seit Version 0.9.0 auch batchTranslatePage nehmen ihre Ziele auf genau einem von zwei Wegen: entweder über pageIds als ausdrückliche UID-Liste oder über rootPageId als Seite samt allem darunter. Beides zusammen ist ein Fehler, nichts davon ebenfalls. recursive entscheidet, ob ein rootPageId den ganzen Teilbaum durchläuft oder bei den direkten Kindern stehen bleibt. Die Wurzelseite ist immer dabei.
Audits (mcp:read)
Seit Version 0.8.0 stellt der Server Tools rund um Audits bereit, seit Version 0.9.0 sind es vier. Gegenüber TYPO3 lesen sie nur, sie geben aber die Seiten-URL und damit den Seiteninhalt an die AutoDudes-Audit-Infrastruktur weiter. Deshalb hängen die drei prüfenden Tools zusätzlich an der eigenen Berechtigung enable_audit (siehe Berechtigungen & Scopes). readAuditResults braucht nur das Leserecht auf die Seite.
| Tool | Kosten | Zweck |
|---|---|---|
auditSeo | 3 Credits | Vollständiges SEO-Audit einer öffentlich erreichbaren Seite: technische On-Page-Checks, Lighthouse-Werte inklusive Core Web Vitals echter Nutzer und Signale zur KI-Sichtbarkeit. Mit keyword kommen SERP-Position, Top-10-Wettbewerb und Suchvolumen hinzu. Die Funde sind nach Schwere und Behebbarkeit sortiert |
auditAccessibility | 3 Credits | Barrierefreiheits-Audit nach WCAG 2.1 AA, geprüft mit axe-core und HTML_CodeSniffer über pa11y. Liefert die Anzahl von Fehlern, Warnungen und Hinweisen, die größten Problemgruppen mit Auswirkung und Beispiel-Selektoren sowie die Einzelfunde mit Behebbarkeit |
auditContent | 2 oder 3 Credits | Analysiert, was eine Seite inhaltlich noch nicht abdeckt, und bewertet jeden Punkt gegen den Seiteninhalt als beantwortet, teilweise beantwortet oder offen. Die Perspektive wählst du mit type:questions (2 Credits): echte „Nutzer fragen auch“-Fragen aus den Suchergebnissen, dazu KI-abgeleitete Fragen. Mit keyword kommen die Live-Fragen zum Keyword hinzu.gap (3 Credits): Keywords, für die die Seite bereits rankt, aber zu schwach für Traffic.cluster (3 Credits): Themencluster rund um ein Fokus-Keyword, keyword ist hier Pflicht.competitors (3 Credits): Wettbewerber der Domain und der Keyword-Gap gegen den stärksten.Ersetzt seit Version 0.9.0 die Tools auditQuestions, auditContentGap, auditTopicCluster und auditCompetitors |
readAuditResults | kostenfrei | Liest die zu einer TYPO3-Seite bereits gespeicherten Audit-Ergebnisse aller sechs Arten. Startet kein neues Audit. Ohne auditType kommt eine Übersicht, mit auditType das vollständige gespeicherte Ergebnis einer Art. Benötigt Leserecht auf die Seite |
Parameter der Audit-Tools
Seit Version 0.9.0 nehmen die drei prüfenden Tools auditSeo, auditAccessibility und auditContent die Seite auf einem von zwei Wegen. Für eine Seite dieser Installation genügt pageId, ihre öffentliche URL wird aus der Site-Konfiguration aufgelöst. Für eine Seite außerhalb der Installation steht url mit einer absoluten, öffentlich erreichbaren http(s)-Adresse zur Verfügung. Ein keyword ist auf 200 Zeichen begrenzt.
auditContent nimmt drei weitere Parameter:
| Parameter | Bedeutung |
|---|---|
model | Textmodell für die KI-Bewertung der Abdeckung, zum Beispiel ChatGPT. Ohne Angabe wird das Audit-Standardmodell aus den Einstellungen der AI Suite verwendet, sonst das erste Modell, das dem Benutzer zur Verfügung steht |
market | Suchmarkt als ISO-Locale, etwa de-DE oder de-AT. Ohne Angabe wird die Standardsprache der Site verwendet, zu der die Seite gehört. Für URLs außerhalb dieser Instanz ist der Parameter Pflicht |
language | Zweibuchstabige Sprache der Analysetexte, Standard de |
readAuditResults arbeitet stattdessen über pageId, optional eingegrenzt mit auditType und language. Gespeicherte Ergebnisse liegen je Sprache getrennt.
Kostengrenze bei Batch-Tools für Seiten
Bei batchGenerateMetadata und batchTranslatePage wird ein rootPageId auf 50 Seiten begrenzt. Wird es mehr, lehnt der Aufruf ab, bevor irgendetwas abgerechnet wird, und nennt die gefundene Seitenzahl. Der Grund ist eine Asymmetrie. Beide Tools kosten Credits pro Seite, und ein Teilbaum ist eine Menge, die niemand vorher gezählt hat. „Alles unterhalb der Startseite“ ist einen kurzen Satz von einer sehr großen Rechnung entfernt. Eine ausdrückliche pageIds-Liste ist dagegen eine Menge, die bewusst genannt wurde, und bleibt unbegrenzt. Wer innerhalb der Grenze bleiben will, wählt eine tiefere Wurzelseite, setzt recursive auf false oder übergibt die UIDs einzeln.