Local stdio transport
In addition to the HTTP endpoint, there is a second way to connect a client, namely the console command ai-suite-mcp:server. It provides the same tools but communicates via JSON-RPC over stdin and stdout instead of HTTP. This is intended for local, trusted CLI clients on the same machine, such as Claude Desktop or Claude Code, if you prefer to start a command rather than set up an OAuth connector.
Neither a token nor OAuth nor an accessible URL is required for this. The client starts the command itself and communicates with it through the pipe.
Start MCP server via stdio
vendor/bin/typo3 ai-suite-mcp:server --user=[uid-or-username]
Client configuration
You do not need a wrapper script; command and args handle everything directly. Note that GUI clients like Claude Desktop start the command from their own working directory and with a minimal PATH. Therefore, use absolute paths.
Composer installation, directly accessible TYPO3.
{ "mcpServers": { "typo3-ai-suite": { "command": "/bin/bash", "args": ["-c", "cd '[project-root]' && exec ./vendor/bin/typo3 ai-suite-mcp:server --user=1"] } }}The project root is the directory containing the composer.json. The bin directory is by default located at vendor/bin/ and may differ via config.bin-dir.
DDEV installation. The typo3 binary is located in the web container, so the call must run via ddev exec. Two things can cause a simple call to fail, both of which are resolved by the line itself. First, change to the project directory because DDEV determines its project from the working directory, and use the absolute path to ddev (determine via which ddev, e.g., /opt/homebrew/bin/ddev).
{ "mcpServers": { "typo3-ai-suite": { "command": "/bin/bash", "args": ["-c", "cd '[project-root]' && exec '[ddev-path]' exec ./Build/bin/typo3 ai-suite-mcp:server --user=1"] } }}The exec replaces the shell with ddev, so the pipe is passed through unchanged. Docker Desktop or OrbStack must be running, and ddev start must have been executed once. A variant with docker exec -i ddev-[project]-web also works. The -i switch is mandatory; -t must never be included, as a TTY destroys the framing of the JSON-RPC messages.
Security model
Through stdio, the tools run as the specified backend user, and the double-check from scope and backend group rights applies just like over HTTP. However, since the transport is a local pipe, all protection mechanisms of the HTTP interface are eliminated, such as OAuth, the HTTPS requirement, the rate limit per token, and the request size limitation.
Therefore, run the command exclusively as a locally started process and never attach it to a network socket. Whoever can execute the command acts as the chosen user. Access to this command is therefore equivalent to its backend access credentials. For remote access or multiple users, the OAuth-protected HTTP endpoint is the right way.
Diagnostic outputs go to stderr because stdout belongs to the JSON-RPC channel. Tool calls land as usual in var/log/aisuite_mcp.log.