Lokaler stdio-Transport
Neben dem HTTP-Endpoint gibt es einen zweiten Weg, einen Client anzubinden, nämlich den Konsolenbefehl ai-suite-mcp:server. Er stellt dieselben Tools bereit, spricht aber JSON-RPC über stdin und stdout statt über HTTP. Gedacht ist das für lokale, vertrauenswürdige Clients auf demselben Rechner, etwa Claude Desktop oder Claude Code, wenn du lieber einen Befehl startest als einen OAuth-Connector einzurichten.
Weder Token noch OAuth noch eine erreichbare URL sind dafür nötig. Der Client startet den Befehl selbst und redet über die Pipe mit ihm.
MCP-Server über stdio starten
vendor/bin/typo3 ai-suite-mcp:server --user=[uid-oder-benutzername]
Optionale Parameter
Der Befehl kennt drei Parameter, alle sind optional. Fehlt --user, gilt der Backend-Benutzer mit der UID 1. --scopes="mcp:read mcp:write" begrenzt die Scopes, standardmäßig gelten alle, zu denen der Backend-Benutzer berechtigt ist. --workspace=[uid] setzt den Ziel-Workspace, standardmäßig wird er aus mcpWriteMode aufgelöst.
Weil über stdio keine Anfrage vorliegt, nimmt der Server Backend-Links in Tool-Ergebnissen aus der Site-Konfiguration. Passt die nicht, setze mcpBackendBaseUrl (siehe Konfiguration).
Client-Konfiguration
Ein Wrapper-Skript brauchst du nicht, command und args erledigen alles direkt. Zu beachten ist, dass Oberflächen-Clients wie Claude Desktop den Befehl mit einem nicht festgelegten Arbeitsverzeichnis und nur einem Teil deiner Umgebungsvariablen starten, oft ohne deinen gewohnten PATH. Verwende deshalb absolute Pfade und wechsle im Befehl selbst in das Projektverzeichnis. Wo die Konfiguration im jeweiligen Client liegt, beschreibt die Anleitung zum Einbinden lokaler MCP-Server.
Composer-Installation, TYPO3 direkt erreichbar.
{
"mcpServers": {
"typo3-ai-suite": {
"command": "/bin/bash",
"args": ["-c", "cd '[projekt-wurzel]' && exec ./vendor/bin/typo3 ai-suite-mcp:server --user=1"]
}
}
}Die Projektwurzel ist das Verzeichnis mit der composer.json. Das Bin-Verzeichnis liegt standardmäßig unter vendor/bin/ und kann per config.bin-dir abweichen.
Installation ohne Composer. Statt ./vendor/bin/typo3 rufst du aus der TYPO3-Wurzel '[php-pfad]' typo3/sysext/core/bin/typo3 ai-suite-mcp:server --user=1 auf.
DDEV-Installation. Die typo3-Binary liegt im Web-Container, also muss der Aufruf über ddev exec laufen. Die Zeile löst zwei typische Probleme: Sie wechselt zuerst in das Projektverzeichnis, weil DDEV sein Projekt aus dem Arbeitsverzeichnis ermittelt, und sie ruft ddev mit absolutem Pfad auf (per which ddev ermitteln, etwa /opt/homebrew/bin/ddev).
{
"mcpServers": {
"typo3-ai-suite": {
"command": "/bin/bash",
"args": ["-c", "cd '[projekt-wurzel]' && exec '[ddev-pfad]' exec vendor/bin/typo3 ai-suite-mcp:server --user=1"]
}
}
}Das exec ersetzt die Shell durch ddev, damit die Pipe unverändert durchgereicht wird. Docker Desktop oder OrbStack muss laufen und ddev start einmal ausgeführt sein. Auch eine Variante mit docker exec -i ddev-[projekt]-web funktioniert. Der Schalter -i ist dabei Pflicht, -t darf niemals dabei sein, denn ein TTY zerstört die Rahmung der JSON-RPC-Nachrichten.
Claude Code. In Claude Code registrierst du denselben Befehl mit claude mcp add typo3-ai-suite -- /bin/bash -c "cd '[projekt-wurzel]' && exec ./vendor/bin/typo3 ai-suite-mcp:server --user=1" oder trägst einen der obigen Blöcke in die .mcp.json im Projektwurzelverzeichnis ein. Einzelheiten beschreibt die Anleitung von Anthropic zu MCP in Claude Code.
Startet der Server im Client nicht, sieh in die Protokolle des Clients. Claude Desktop schreibt die stderr-Ausgabe jedes Servers in eine eigene Logdatei. Wo die Protokolle liegen und wie du die Verbindung untersuchst, beschreibt die Anleitung zum Debuggen von MCP-Servern.
Sicherheitsmodell
Über stdio laufen die Tools als der angegebene Backend-Benutzer. Die Prüfung aus Scope und Feature-Recht greift wie über HTTP, das Hauptrecht enable_mcp_access wird dabei nicht geprüft. Da der Transport eine lokale Pipe ist, entfallen alle Schutzmechanismen der HTTP-Oberfläche, also OAuth, die HTTPS-Pflicht, das Rate-Limit pro Token, die Begrenzung der Anfragegröße und das Credit-Budget pro Token (mcpMaxCreditsPerSession).
Betreibe den Befehl deshalb ausschließlich als lokal gestarteten Prozess und hänge ihn niemals an einen Netzwerk-Socket. Wer den Befehl ausführen kann, handelt als der gewählte Benutzer. Zugriff auf diesen Befehl ist damit gleichwertig mit dessen Backend-Zugangsdaten. Für entfernten Zugriff oder mehrere Benutzer ist der OAuth-geschützte HTTP-Endpoint der richtige Weg.
Diagnoseausgaben gehen auf stderr, weil stdout dem JSON-RPC-Kanal gehört. Tool-Aufrufe landen wie gewohnt in var/log/aisuite_mcp.log, sofern mcpLogVerbose aktiv ist (Standard).