Prerequisites
Environment TYPO3 ^13.4 || ^14.3, PHP >= 8.2,typo3/cms-workspaces installed,
ns_t3af enabled.
Local stack (example)
admin).
Site URL
The MCP module derives URLs from your first site configuration. On DDEV this
is typically:
<project> with your DDEV project name throughout this guide.
Optional tools
- Node.js 18+ — MCP Inspector and
mcp-remote - Claude Desktop — OAuth remote setup
- n8n — MCP Client node (self-hosted or cloud)
- Cursor / VS Code MCP — for CLI or
mcp-remoteconfigs
Step 0 — Pre-flight checks (backend module)
Open T3AF → MCP Server.- Workspace
- Use the WORKSPACE dropdown (top right).
- If you see a yellow “create workspace” notice, click Create MCP workspace (requires permission) or pick Live for read-only smoke tests.
- Status bar (top card) Verify:
- Server Status → Online
- OAuth Endpoints → both
oauth-authorization-serverandoauth-protected-resourceshow green checks - Server URL → copy your
https://…/mcpURL
- Endpoint health (Remote MCP Setup tab) Under MCP endpoint status, all three rows should be green:
- MCP endpoint (
/mcpreturns 401 without auth — that is expected and counts as online) /.well-known/oauth-authorization-server/mcp/.well-known/oauth-protected-resource/mcp
- Quick curl smoke test
- Enable MCP (if offline) Expand Show advanced → ensure Enable MCP Server is checked → Save.
Cursor IDE — two connection methods
Cursor can connect to the TYPO3 MCP server in two ways. Use one method per server entry — do not mix stdio and URL for the same logical connection. Project stdio (DDEV)- Config file:
.cursor/mcp.jsonin the project root - Transport: stdio via DDEV
- Auth: backend user and workspace
- Best for: local development in this repository
- Config file:
~/.cursor/mcp.jsonin the user home directory - Transport: HTTP Streamable at
/mcp - Auth: OAuth 2.1 with PKCE (browser)
- Best for: any Cursor workspace, including production
Method A — Project stdio via DDEV
Create or edit.cursor/mcp.json in the project root (same directory
as .ddev/). Cursor spawns ddev exec … nst3af:mcp:serve when you
open this project.
Important:
cwdmust be the absolute path to the DDEV project root. Without it,ddevmay fail with could not find a project.- Use the full command name
nst3af:mcp:serve(aliasmcp:serverworks only after TYPO3 caches are warm). --no-startup-messagekeeps diagnostics off stdout (stdio MCP reserves stdout for JSON-RPC).- Adjust
--userand--workspaceto match your backend user and workspace UID from the MCP module dropdown.
/absolute/path/to/aiuniverse with your checkout path (for example
/Users/you/projects/aiuniverse).
Verify in Cursor: Settings → MCP → TYPO3 DDEV shows Connected and
lists the v1 tools (table_schema, pages_get, content_list, write_table).
Method B — Global remote URL (OAuth)
For HTTP + OAuth without DDEV stdio, add the server URL to your user-level Cursor config:~/.cursor/mcp.json. This works from any project; Cursor
opens the OAuth flow in the browser on first connect.
Project
.cursor/mcp.json (Method A) and global ~/.cursor/mcp.json
(Method B) can coexist with different server names — for example
TYPO3 DDEV (stdio) and typo3 (URL).Terminal verification (stdio / DDEV)
Use these checks before relying on Cursor, or when debugging a broken stdio connection. 1. DDEV and TYPO3 CLInst3af:mcp:cleanup and nst3af:mcp:serve (alias
mcp:server). If list nst3af fails, verify with:
initialize request on stdin and prints the JSON
response on stdout. This confirms the server speaks MCP without leaving a
process running:
-u / -w (short for --user / --workspace) to match your
config. If you see this JSON, the stdio transport is working; any Cursor issue
is likely cwd, command name, or MCP panel cache (restart Cursor).
3. Interactive run (optional)
-v or -vv for more detail). Stop with Ctrl+C.
Method 1 — Remote MCP Setup (HTTP + OAuth / Bearer)
Recommended for production-like clients. Transport: HTTP Streamable at{site}/mcp.
Authentication options:
- OAuth 2.1 + PKCE — Claude Desktop, MCP Inspector, generic OAuth clients
- Bearer token — n8n, Manus (create token in the module UI)
mcp:read mcp:write mcp:tools
Claude Desktop (OAuth)
In the module: Remote MCP Setup → Claude Desktop tab. Steps:- Open Claude Desktop → Settings → Integrations.
- Click Add Integration.
- Name it (for example
TYPO3 DDEV). - Paste Server URL from the module, e.g.:
- Save. Claude starts OAuth automatically (browser window / system prompt).
- Approve access as your TYPO3 backend user.
- Ask Claude to list MCP tools or call
table_schemawithtableName: pages. - In the module, Active OAuth Tokens shows a new row; Last Used updates.
n8n (Bearer token)
In the module: Remote MCP Setup → n8n tab. Steps:- Click Create n8n token (if no active token is shown).
- Copy the Bearer token immediately (full value is only shown once; the UI stores it in the browser session for copy).
- In n8n, add an MCP Client node to a workflow.
- Configure the MCP Client node:
- Endpoint —
https://t3af.ddev.site/mcp - Server Transport — HTTP Streamable
- Authentication — Bearer Auth
- Bearer Token — paste the token from step 2
- Save and Execute workflow.
- Node connects without 401 errors.
- Tool list includes
table_schema,pages_get,content_list,write_table. - Active OAuth Tokens table shows client n8n token.
Manus (Bearer token)
In the module: Remote MCP Setup → Manus tab. Steps:- Click Create manus token and copy the Bearer token.
- In Manus, add a new MCP server connection.
- Configure the connection:
- Server Name — your TYPO3 site name
- Transport — HTTP
- Server URL —
https://t3af.ddev.site/mcp - Authorization — header
Authorization: Bearer <token>
- Save the connection.
MCP Inspector (OAuth)
In the module: Remote MCP Setup → MCP Inspector tab. Steps:- Copy the pre-filled command (requires Node.js):
- Run it in your terminal.
- Open the Inspector UI in the browser (URL printed in the terminal).
- Complete OAuth when prompted.
- Use the Tools panel to invoke
table_schema:
tools/listreturns four v1 tools.table_schemareturns JSON withpagesfield metadata.
Other OAuth-capable clients
In the module: Remote MCP Setup → Other tab. Generic checklist:- Add a remote MCP server in your client.
- Server URL:
https://t3af.ddev.site/mcp - Transport: HTTP Streamable (when available).
- Auth: OAuth 2.1 + PKCE if supported; otherwise create a Bearer token under the n8n or Manus tabs.
Method 2 — Local Setup (mcp-remote)
For MCP clients that only speak stdio (no native HTTP). Themcp-remote npm
package bridges stdio ↔ your TYPO3 HTTP endpoint.
Token in URL
After creating a token, the server accepts:
https://<host>/mcp?token=<64-char-hex>(recommended in UI)https://<host>/mcp/r/<64-char-hex>(legacy path form)
Step-by-step
- Click Create mcp-remote Token (if none exists).
- Copy Token URL (includes
?token=…). - Copy Example mcp-remote configuration or build manually:
- Paste into your client’s MCP config:
- Claude Desktop:
claude_desktop_config.json→mcpServers - Cursor:
.cursor/mcp.json - VS Code: MCP extension settings
- Restart the client so it spawns
npx mcp-remote ….
- Client lists TYPO3 tools.
- Active OAuth Tokens shows mcp-remote token with updated Last Used.
Method 3 — Local Setup (TYPO3 CLI)
Direct stdio transport — no HTTP, no OAuth. The MCP client must run on the same machine as TYPO3 (or inside the DDEV web container). In the module: click Local Setup (TYPO3 CLI).Example configuration
Copy from the module or use:mcp:server also maps to nst3af:mcp:serve when
TYPO3 command caches are up to date.
Step-by-step (DDEV)
- For Cursor, prefer the full walkthrough in Cursor IDE — two connection methods.
- For other MCP clients, use DDEV from the host with an absolute
cwd:
-
Terminal verification: see Cursor IDE — two connection methods (pipe test
and expected
initializeJSON). - CLI options:
--user/-u— Backend username (defaultadmin).--workspace/-w— Workspace UID (0= live).--no-startup-message— Suppress stderr banner (recommended for MCP).-v/-vv— Verbose stderr diagnostics.
- MCP client connects without HTTP/OAuth.
- Invoke
pages_getwithuid: 1(adjust to a page that exists).
Restart the CLI server after PHP code changes. Long-running processes may
accumulate memory — restart periodically during heavy testing.
Step 4 — Test all v1 tools
Use MCP Inspector, Claude, or any connected client.table_schema
Input: { "tableName": "pages" }
Expect: JSON with field definitions.
pages_get
Input: { "uid": 1 }
Expect: Page record (or error if uid missing).
content_list
Input: { "pid": 1, "limit": 5 }
Expect: Array of tt_content rows for that page.
write_table (workspace recommended)
Create (use a test page pid and workspace):
uid, fields, and ignoredFields. Verify with
content_list on the same pid. Use action: delete with the new
uid to clean up.
Workspace testing
Select a non-live workspace in the module dropdown before issuing tokens.
Repeat content_list / pages_get — draft overlays should differ from live.
See MCP Server for parameter details.
Step 5 — Active OAuth Tokens table
After each test, confirm in Active OAuth Tokens:- Client Name —
n8n token, OAuth client name, and similar labels. - Created / Last Used — Updates on successful calls.
- Expires — Reasonable future date.
- Workspace — Matches dropdown selection.
- Token — Preview plus Copy Token.
- Action — Revoke removes access.
- Refresh — reload table via AJAX
- Revoke All — invalidates every token for your backend user (confirm dialog)
Quick test matrix
Use this checklist when regression-testing a release: Remote HTTP clients (Claude, n8n, Manus, MCP Inspector, other OAuth clients)- Endpoint health is green.
tools/listworks.table_schemaworks.- Token appears in the connections table.
- Create token URL.
npx mcp-remotebridge connects.- Client stdio config lists tools.
nst3af:mcp:servestarts.- Pipe
initializetest returns JSON. - Cursor project
cwdis set. --userand--workspacematch your backend user.- Tool invocation succeeds.
~/.cursor/mcp.json)
- OAuth at
/mcpcompletes. - Token appears in the connections table.
Troubleshooting
Server Status Offline Enable MCP in Show advanced. Runddev exec typo3 cache:flush.
/mcp returns 503
enableMcpServer is off in extension configuration.
/mcp returns 401 without token
Expected — proves middleware is reachable. Authenticate with OAuth or Bearer.
OAuth metadata checks red
Verify site base URL, HTTPS, and that config/sites/*/config.yaml routes exist.
Flush caches.
Bearer / URL token Authentication failed
Token revoked, expired, or wrong workspace. Create a new token in the module.
mcp-remote client shows no tools
Confirm Node.js is installed, URL includes valid ?token=, restart client.
CLI Backend user not found
Pass --user= <../existing-be-username>.
Tool returns empty / wrong data
Check WORKSPACE dropdown and token workspace pin.
Full token not copyable later
Plaintext is only shown at issuance. Revoke and re-create, or use OAuth flow.
Cleanup after testing
- Revoke test tokens in Active OAuth Tokens (or Revoke All).
- Remove MCP entries from
claude_desktop_config.json/.cursor/mcp.json. - Optional maintenance: