Skip to content
TYPO3Dev Companion

TYPO3 Dev Companion

A local MCP server (plain PHP) that helps coding agents implement, review and verify TYPO3 work for the three audiences that do it: the core contributor, the extension author and the site developer. It establishes the project and installation the agent is working in, supplies current, version-bound TYPO3 knowledge, and hands task-specific workflows to the skills that own them.

It answers for TYPO3 12.4, 13.4, 14.3 and main. A statement that does not hold on all of them names the ones it does, so an LTS is never handed a convention that only the development line has.

The server, the knowledge it answers from, and the skills it publishes into a client ship together from one repository.

Experimental. This is a 0.x package and its surface is not settled. The package name, the binary, the namespace and the environment variables all changed in one cut on 2026-08-06. The tool names and the shapes they answer in can move the same way. Pin a commit where you depend on it.

Usage

Install it

One command writes the client entry and publishes the skills, into the two locations a client finds without being configured for it.

What the install writes
Skills

Choose a workflow

Compare the task-specific workflows, then open one page containing its complete Markdown instructions and every reference it uses.

Every published skill
Server

Ask it something

What it can be asked, what each tool takes, and what one call to it came back with.

Every tool, one page each
Contributing

Work on it

The commands this repository is kept in order by, what has to be true of a session doing the work, and the rules a task skill is written under.

The rules a session works under

What a session stops searching for

The coding agent keeps the checkout: which files changed, which branch it is on and which tests cover them are read there. What the work needs around that reading is what this server supplies, and it says which repository each answer is for — worked out from structure rather than from wording, so a project is never handed a rule only the core has.

Catalog

What the component is called

The backend UI a change has to be written in: the markup, the icon identifier and the label resource that have to be literally right.

Where an answer comes from

It answers from three sources. Almost everything comes from the bundled knowledge/ files, which are bound to versions. Broad API, reference and tutorial questions are searched in the official live TYPO3 documentation instead, with the requested release and canonical source on every result. And some questions have no bundled answer that could be right — which labels exist, which icons are registered, what a configuration value is after every extension has had its say. Those are properties of an installation, so the server finds the one you are working in and asks it, through its own console or by booting it in a subprocess of its own.

It answers before the installation does. The bundled knowledge needs nothing running, and that is the state much of it is asked in: a project that does not exist yet, an upgrade that left the site unbootable, a core checkout with no database. Where the installation itself is the question it is booted through its own interpreter, in its own container where it runs in one. Where it comes up without its essential configuration, every registry in it answers with a subset that looks like the whole — so that state is named rather than passed on as an answer. Where it does not come up at all, the packages are read instead, and every answer carries which of the two it came from and what that leaves out.

The five sources an answer can come from, and what each one needs running before it can answer, are the server's source table.

Everything that answers a question already sits on the developer's machine: an MCP client starts the server as a local subprocess, which reads bundled knowledge and the project's own packages and installation. Exactly one read-only path crosses the boundary, to official documentation and core services.
Everything that answers a question already sits on the developer's machine: an MCP client starts the server as a local subprocess, which reads bundled knowledge and the project's own packages and installation. Exactly one read-only path crosses the boundary, to official documentation and core services.
Everything that answers a question already sits on the developer's machine: an MCP client starts the server as a local subprocess, which reads bundled knowledge and the project's own packages and installation. Exactly one read-only path crosses the boundary, to official documentation and core services.

What it will not do

It reads

Nothing is written into the TYPO3 installation it is pointed at. The one exception is the feedback channel, which writes into this server's own checkout and is offered from a standalone checkout alone.

It starts nothing

Nothing on your machine is started as a side effect of a lookup. A stopped DDEV project is reported with the command that would fix it.

It stays where you started it

The client launches it as a subprocess over stdio, so there is no server to host, no network exposure and no auth to configure — the process boundary is the trust boundary.

It is queried in English

The knowledge is written in English and the matching is lexical, so the agent translates the subject before calling and the answer back afterwards. The server states this at initialize.

Scope answers describe what is present without treating it as correct. The knowledge and skills supply the conventions that apply, so code found in one installation is not repeated as a pattern merely because it runs.

Trained by being used

An agent gets a real task in a real checkout and works under one rule: whatever it would otherwise search for, it asks this server first. Where the server answers, that answer is what the task is done from. Where it does not, the agent solves the task on its own — and that is the half worth something, because the agent now holds an answer the knowledge base did not have. So the session ends by handing it back, and a gap found that way arrives with its answer attached.

Handing it back is one call. typo3_feedback_record writes one markdown file per subject into this server's own checkout, never into the project the session ran in, and it carries the query that exposed the gap, so a later version can be asked the same question rather than read about it. What that becomes is judged against everything else that arrived: one report is a report, and thirty of them out of one kind of checkout is a domain that has been asking for something since the first.

What outlives the session is written down. A requirement states what must be true from now on and names the test that holds it there, a decision states what the change rested on and what would show it wrong, and the queue carries the order of the work. The change is then met again by a session that was never told about it, which is what a forward review is, and the commit that closed a feedback is what the agent who filed it reads back.

That is also what decides what gets built next. What this server does not answer yet is mostly what no session has handed back yet, and a boundary is the other thing and is stated as one in typo3_server_scope. Every step above is a page in records/.

A real task exposes a gap, records one feedback, moves it through the queue into a guarded improvement and verifies it in another real task.
A real task exposes a gap, records one feedback, moves it through the queue into a guarded improvement and verifies it in another real task.
A real task exposes a gap, records one feedback, moves it through the queue into a guarded improvement and verifies it in another real task.

The manual

Which section a page belongs to is decided by who reads it. One page per procedure that is long enough to get wrong from memory.

Usage

Having this server answering in your own project: what the install writes into a client, and what you are agreeing to when it does.

Server

What it can be asked and where each answer comes from: every tool one page each, the resources beside them, the five sources, the bundled knowledge, the version binding, and what an installation is asked directly.

Contributing

Working on the server itself: the commands this repository is kept in order by, what has to be true of a session doing the work, and the rules a task skill is written under.

Records

What is written down and where: how a feedback becomes a todo, what a requirement and a decision each hold, and how a forward run is measured.

Parts that repeat a declaration are generated from it. server/tools/ is rendered from the classes that declare each tool by bin/cli tools:index; bin/cli documentation:prepare adds the published workflows in The installed task skills from the skills the installer selects. records/ describes working directories whose entries are the things themselves.

What does not belong here are those entries: what must hold is requirements/, what a change assumed is decisions/, and the order of the work is todo/, which is also where this machine's checkouts are named. The conventions every session works under stay in AGENTS.md, because they are read before anything else is.