Install it
One command writes the client entry and publishes the skills, into the two locations a client finds without being configured for it.
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.
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.
One command writes the client entry and publishes the skills, into the two locations a client finds without being configured for it.
One command writes the client entry and publishes the skills, into the two locations a client finds without being configured for it.
Compare the task-specific workflows, then open one page containing its complete Markdown instructions and every reference it uses.
Compare the task-specific workflows, then open one page containing its complete Markdown instructions and every reference it uses.
What it can be asked, what each tool takes, and what one call to it came back with.
What it can be asked, what each tool takes, and what one call to it came back with.
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 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.
One command writes the client entry and publishes the skills, into the two locations a client finds without being configured for it.
One command writes the client entry and publishes the skills, into the two locations a client finds without being configured for it.
Compare the task-specific workflows, then open one page containing its complete Markdown instructions and every reference it uses.
Compare the task-specific workflows, then open one page containing its complete Markdown instructions and every reference it uses.
What it can be asked, what each tool takes, and what one call to it came back with.
What it can be asked, what each tool takes, and what one call to it came back with.
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 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 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.
The rules that apply to the file being changed, bound to the TYPO3 versions they hold for.
The rules that apply to the file being changed, bound to the TYPO3 versions they hold for.
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.
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.
The project's own packages, and the registries no bundled answer could be right about.
The project's own packages, and the registries no bundled answer could be right about.
What the core changed between two versions, and what an upgrade has to follow.
What the core changed between two versions, and what an upgrade has to follow.
The suite that covers the changed path, and the command that runs it where this project runs it.
The suite that covers the changed path, and the command that runs it where this project runs it.
The subject, the widths and the keywords the receiving workflow expects.
The subject, the widths and the keywords the receiving workflow expects.
The rules that apply to the file being changed, bound to the TYPO3 versions they hold for.
The rules that apply to the file being changed, bound to the TYPO3 versions they hold for.
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.
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.
The project's own packages, and the registries no bundled answer could be right about.
The project's own packages, and the registries no bundled answer could be right about.
What the core changed between two versions, and what an upgrade has to follow.
What the core changed between two versions, and what an upgrade has to follow.
The suite that covers the changed path, and the command that runs it where this project runs it.
The suite that covers the changed path, and the command that runs it where this project runs it.
The subject, the widths and the keywords the receiving workflow expects.
The subject, the widths and the keywords the receiving workflow expects.
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.
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.
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.
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.
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.
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.
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.
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.
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.
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.
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.
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.
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.
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.
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.
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.
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.
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/.
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.
Having this server answering in your own project: what the install writes into a client, and what you are agreeing to when it does.
Having this server answering in your own project: what the install writes into a client, and what you are agreeing to when it does.
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.
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.
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.
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.
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.
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.
Having this server answering in your own project: what the install writes into a client, and what you are agreeing to when it does.
Having this server answering in your own project: what the install writes into a client, and what you are agreeing to when it does.
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.
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.
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.
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.
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.
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.