Available Tools
The TYPO3 AI Suite MCP server currently provides 45 tools. Each tool belongs to exactly one OAuth scope, and a scope is only granted if the user's backend group has the appropriate AI Suite feature rights (see Permissions & Scopes). The tool list that a model sees is therefore different for each user. If a right is missing, the affected tool does not appear at all.
The following overview is grouped by scopes and briefly states the purpose of each tool. The complete parameters are provided by each client itself, as they are part of the tool definition in JSON schema. Which tools a specific installation actually delivers is revealed by readServerInfo.
Backend links in tool results
Since version 0.7.0, every call that touched records also returns those records as backend links. They arrive through two channels: as structuredContent.links for clients that render links themselves, and as a “⚙ Open in TYPO3” text block at the end of the result, which is what makes them clickable in a chat. The label is the record's own title where it has one.
Links are grouped by table, because a page and the content elements on it are different destinations. pages comes first, the remaining tables follow in the order they were touched. The cap of six links applies per group, so a written page is never pushed out by the content elements written onto it. The omitted field reports per group how many links the cap dropped, so a truncated group cannot be mistaken for a complete one.
The addresses are absolute and deliberately carry no route token. A token belongs to the session that generated it, which is the MCP session and not the editor's browser, so it would be worthless in a link that leaves the process. TYPO3 answers a tokenless backend address with a redirect through the login that carries the original target, so anyone with a live backend session lands directly on the record.
Where scheme and host come from is decided in this order: first the mcpBackendBaseUrl setting, then the current request, finally the site configuration. If none of them yields a complete address, for example with the stdio transport and no configured site, the AI Suite MCP drops the link rather than emitting a broken one, and notes it in aisuite_mcp_warnings.log.
Context and Research (mcp:read)
These tools only read. They do not cost any credits and do not call an AI model.
| Tool | Purpose |
|---|---|
readServerInfo | Status of the server with the versions of TYPO3, AI Suite, and MCP, the active configuration, and a diagnosis |
readPageTree | Traverse the page tree, limited to the user's mounts |
readPageContent | Read content elements of a page, optionally with container nesting |
readContentTree | Contents of all pages of a subtree at once, paginated by page |
readRenderedPage | The page as a visitor sees it, including plugin output. Requires additionally enable_mcp_rendered_page_read |
readEditorialGuidelines | The guidelines set by the editorial team regarding tone, target audience, and style for a page area |
readChildren | List container and IRRE children of a record, grouped by relation |
searchContent | Full-text search over pages and content elements. Since version 0.6.0, IRRE child tables such as accordion or card elements are swept automatically based on the TCA, a hit names the matching field and every table that was searched, and the search matches the text of the current workspace instead of the live record. Since version 0.7.0 every hit carries languageUid and, where the page belongs to a site, its ISO language code. When nothing matches, the answer names the tables that were searched, so “nothing found” is not mistaken for “does not exist” |
listFiles | List files of a FAL storage or folder |
readFileInfo | Metadata of a single file |
listStaleContent | Find pages and content that have not been edited for N days |
readTaskStatus | Progress of a background task |
readTaskResults | Retrieve results of a completed task, read-only |
Records: Schema and Editing (mcp:read / mcp:write)
The exploratory tools of this group belong to mcp:read, the writing ones to mcp:write. All write operations go through the DataHandler and thus through the usual TYPO3 checks, and they follow the set write mode.
| Tool | Scope | Purpose |
|---|---|---|
listTables | mcp:read | List tables that the user is allowed to read, minus mcpExcludedTables |
readRecordSchema | mcp:read | TCA schema of a table with fields, types, validation, relations, and writeability. Since version 0.6.0 it also names, for rich-text fields, the HTML tags the field is allowed to keep on save |
readFlexFormSchema | mcp:read | Inner schema of a FlexForm field with sheets and fields |
listPageTypes | mcp:read | Available page types (Doktypes) |
listContentTypes | mcp:read | Available CTypes and valid columns of a page |
readRecords | mcp:read | Read records, by UID, by page, or by field filter. With fields, since version 0.6.0, a read returns only the requested columns instead of every field. Since version 0.7.0, rootPageId reads a page and everything below it in one call, and fullText returns long text fields untruncated |
compareWithLive | mcp:read | Field-wise comparison of a workspace draft with the live state |
previewRecords | mcp:write | Preview a write operation as old-new diff, without saving |
writeRecords | mcp:write | Create or modify records, optionally as an atomic batch. Since version 0.6.0 the position also understands before:UID. Since version 0.7.0 an entry can bring its translations along via translations |
copyRecords | mcp:write | Copy records, individually or as a batch |
moveRecords | mcp:write | Move records |
deleteRecords | mcp:write | Delete records (soft delete). Marked as destructive, the client will ask for confirmation |
localizeRecord | mcp:write | Create a translation wrapper for a record, without AI and without credits. Creates only the empty shell, you write the field values yourself |
savePageTree | mcp:write | Save a generated page tree. Since version 0.6.0 new pages are appended at the end by default, alternatively controlled with start, after:UID and before:UID |
replaceText | mcp:write | A literal replacement in a field, without resending the entire field |
patchText | mcp:write | Multiple replacements in a field, applied atomically |
bulkReplaceText | mcp:write | The same replacement across all child records of a parent. Since version 0.6.0 also page by page via pageIds for up to 50 pages, with several rules in one run and a dryRun for checking beforehand |
copyMediaReference | mcp:write | Copy file reference from one field to another |
replaceMediaReference | mcp:write | Replace the file behind an existing reference |
Writing translations along with the record
Since version 0.7.0, an entry in writeRecords may carry a translations object next to fields, keyed by ISO language code. Record and translations are then created in a single call.
{
"records": [{
"table": "tt_content",
"pid": 354,
"fields": { "CType": "text", "header": "Einstellungen" },
"translations": { "en": { "header": "Settings" } }
}]
}The translation shell is created with TYPO3's own localize command, the same path the backend takes. The language field, the translation parent, l10n_source, l10n_state, excluded fields and existing inline children are therefore handled by the TYPO3 core. The given fields are then written into that shell. It is created hidden, exactly as TYPO3 does it.
Sending the same call a second time updates the existing translation instead of creating a second one, so re-sending a batch after a partial failure is safe. translations also works on an entry carrying a uid, in which case that record is the origin. Nested inline children cannot be translated in the same call. Write them first, then translate them by their UID.
Field names for translations
Two spellings collide here for historical TYPO3 reasons. tt_content kept the legacy l18n_parent, while pages and most hand-written child tables use l10n_parent. Since version 0.7.0 the AI Suite MCP accepts both spellings on read and on write and maps them onto whatever the table really calls the field. The same goes for l10n_source and l18n_source. The result notes when such a rename happened. A field name the table genuinely has is never rewritten.
AI Functions (Generation, Translation, Images)
These tools call the providers and models of the AI Suite and then consume credits. Which models are available is determined by the AI Suite configuration and the model rights of the backend group. No additional settings are required in the MCP for this.
They are therefore the only tools that require a valid API key from the AI Suite. If it is missing or the license package does not cover the function, the tools remain in the tool list and are also called by the model. The call then ends with a license error. This distinguishes them from the feature rights of the backend group, which can already remove a tool from the list.
Since version 0.7.0 this applies to translateRecord and translatePage only when you pass the optional model parameter. Leave it out and the tool creates the translation record and hands you its fields, together with the site glossary and the global instructions. Your client's model then does the translating, nothing goes to the AI Suite Server and no credits are spent. The answer also names the models available to you, in case you do want the server to translate after all. If fields come back unchanged, the result says so, to keep a missing translation from going unnoticed.
This is different from localizeRecord under mcp:write. That one only creates the empty translation shell. translateRecord without model creates the shell and additionally hands you the field values to translate.
translateFileMetadata and the batch tools have no such path. Without model they only return the list of available models; the translation itself always runs on the server there and costs credits.
| Tool | Scope | Purpose |
|---|---|---|
generateFileMetadata | mcp:generate | Generate alternative text, title, and description for a file, based on the file itself |
translateRecord | mcp:translate | Translate a single record, server-side with model, free of charge through your client's model without it |
translatePage | mcp:translate | Translate an entire page, metadata, and all content elements, likewise either server-side or free of charge through your client's model |
translateFileMetadata | mcp:translate | Translate file metadata into a target language, always server-side |
generateImage | mcp:image | Generate an image from a text description and store it in FAL |
Plain language and the DeepL glossary of the site are not a separate tool, but part of the translation tools. The glossary is applied automatically.
Embed Media
This tool brings existing files into the file management without involving an AI model. It does not cost any credits and works even without a valid API key from the AI Suite. It is tied to its own scope and its own feature right, both turned off by default, because it is the only tool besides generateImage that creates a physical file and therefore cannot be reverted through a workspace.
| Tool | Scope | Purpose |
|---|---|---|
uploadMedia | mcp:media | Take existing images or videos into FAL, via URL, as Base64, or as a YouTube or Vimeo link |
Not to be confused with copyMediaReference and replaceMediaReference. The two do not insert a new file but transform existing file references, thus belonging to mcp:write and being part of the record group. For target folder, size limit, allowed file extensions, and securing remote downloads, see Security & Operation.
Background Tasks (mcp:workflow)
Batch tools run asynchronously. They immediately return a task ID, the progress is queried with readTaskStatus, and the results are read with readTaskResults. Nothing is written automatically. A batch generates suggestions, and only applyTaskResults writes them into the records.
| Tool | Purpose |
|---|---|
batchGenerateMetadata | Page metadata in large numbers, either for a UID list or for an entire page subtree |
batchGenerateFileMetadata | File metadata for a list of files |
batchGenerateFolderMetadata | File metadata for all files in a folder |
batchTranslatePage | Translate multiple pages |
batchTranslateFileMetadata | Translate file metadata of a list of files |
batchTranslateFolderMetadata | Translate file metadata of all files in a folder |
applyTaskResults | Write the translations of a completed batch into the localization records (Scope mcp:write) |
batchGenerateMetadata takes its targets in exactly one of two ways. Either pageIds as an explicit UID list or rootPageId as a page along with everything underneath. Both together is an error, and neither of them alone is. recursive decides whether a rootPageId traverses the entire subtree or stays with the direct children. The root page is always included.
Audits (mcp:read)
Since version 0.8.0 the server provides seven tools for audits. Towards TYPO3 they only read, but they pass the page URL and thereby the page content on to the AutoDudes audit infrastructure. All seven therefore additionally depend on their own permission enable_audit, see Permissions & Scopes.
| Tool | Cost | Purpose |
|---|---|---|
auditSeo | 3 credits | Full SEO audit of a publicly reachable URL: technical on-page checks, Lighthouse scores including real-user Core Web Vitals, and signals for AI visibility. With keyword the SERP position, top-10 competition and search volume are added. The findings are sorted by severity and fixability |
auditAccessibility | 3 credits | Accessibility audit against WCAG 2.1 AA, checked with axe-core and HTML_CodeSniffer via pa11y. Returns the number of errors, warnings and notices, the largest issue groups with impact and sample selectors, plus the individual findings with fixability |
auditQuestions | 2 credits | Question coverage of the page. With keyword, the real People-also-ask questions from the search results are added, alongside AI-derived questions. Each question is rated against the page content as answered, partially answered or open |
auditContentGap | 3 credits | Keywords the page already ranks for, but too weakly for traffic. With public ranking data on search volume, position and difficulty, each keyword rated against the page content |
auditTopicCluster | 3 credits | Topic clusters around a focus keyword, meaning the fan-out of the topic into subtopics and search queries, each subtopic rated against the page content. keyword is mandatory here |
auditCompetitors | 3 credits | Competitors of the domain with shared keywords and estimated traffic, plus the keyword gap against the strongest competitor, meaning keywords they rank for and this domain does not |
readAuditResults | free | Reads the audit results already stored for a TYPO3 page across all six types. Starts no new audit. Without auditType you get an overview, with auditType the full stored result of one type. Requires read permission on the page |
Parameters of the audit tools
The six auditing tools expect an absolute, publicly reachable http(s) address in url. TYPO3-internal links such as t3://page?uid=1 cannot be audited, the public URL has to be resolved beforehand. A keyword is limited to 200 characters.
The four analysis tools auditQuestions, auditContentGap, auditTopicCluster and auditCompetitors take three further parameters in common:
| Parameter | Meaning |
|---|---|
model | Text model for the AI coverage rating, for example ChatGPT. Without a value the first model available to the user is used |
market | Search market as an ISO locale, such as de-DE or de-AT. Without a value the default language of the site the URL belongs to is used. For URLs outside this instance the parameter is mandatory |
language | Two-letter language of the analysis texts, default de |
readAuditResults works via pageId instead, optionally narrowed down with auditType and language. Stored results are kept separately per language.
Cost Limit for Batch Metadata
A rootPageId is limited to 50 pages. If there are more, the call is rejected before anything is billed, and the found page count is stated. The reason is an asymmetry. This tool costs credits per page, and a subtree is a quantity that no one has counted beforehand. "Everything below the starting page" is a short sentence away from a very large bill. An explicit pageIds list, on the other hand, is a quantity that has been consciously named and remains unlimited. Those who want to stay within the limit choose a deeper root page, set recursive to false, or pass the UIDs individually.