Available Tools
The MCP server of the AI Suite currently provides 46 tools. Each tool belongs to exactly one OAuth scope, and a scope with a feature binding is only granted if the user's backend group has the matching AI Suite feature permission (mcp:read and mcp:write have none, see Permissions & Scopes). The tool list a model gets to see therefore differs from user to user. If a permission is missing, the affected tool does not appear at all. On an installation with only one language, the server also hides the translation tools.
The following overview is grouped by scope and briefly states the purpose of each tool. Every client provides the complete parameters itself, because they are part of the tool definition as a JSON schema. Which tools a specific installation actually delivers is revealed by readServerInfo.
Breaking changes in 0.9.0
Version 0.9.0 merges and removes tools. Update the tool names in your own prompts, skills and integrations:
auditQuestions,auditContentGap,auditTopicClusterandauditCompetitorsare merged intoauditContent. You choose the type of analysis there withtype(questions,gap,cluster,competitors).batchGenerateFolderMetadataandbatchTranslateFolderMetadataare removed. You now pass folders withfolderIdentifierstobatchGenerateFileMetadataorbatchTranslateFileMetadata.replaceTextis removed. Single corrections run throughpatchTextwith a single entry inreplacements.- The settings
mcpSearchAdditionalTablesandmcpExcludeAdditionalTablesFromSearchare removed, existing values are ignored. Which tablessearchContentsearches is now resolved from the TCA, see Security & Operation.
Clear all caches after the update.
Backend links in tool results
Since version 0.7.0, every call that touched records also returns the affected records as backend links. They arrive in two ways: as structuredContent.links for clients that render links themselves, and as a “🔗 Open in TYPO3” text block at the end of the result, which makes them clickable in the chat. The record's title serves as the label, if it has one.
The links are grouped by table, because a page and the content elements on it are different targets. pages comes first, followed by the remaining tables in the order in which they were touched. The cap of six links applies per group, so a written page is not pushed out by the content elements created on it. The omitted field states per group how many links the cap left out, so a truncated group cannot be mistaken for a complete one.
The addresses are absolute and deliberately contain no route token. A token belongs to the session that generated it, that is the MCP session and not the editor's browser. In a link that leaves the process, it would be worthless. TYPO3 answers a backend address without a token with a redirect through the login that carries the original target along. Anyone logged in to the backend therefore lands directly on the record.
Since version 0.9.0, the links point to an intermediate page under /aisuite-mcp/open on the backend host, which forwards to the backend from there. Without this detour, a link clicked in an external chat such as Claude.ai or ChatGPT reaches the backend without the editor's session cookie and ends up on the login. The setting mcpBackendLinkBounce (default: on) controls the intermediate page. If it is set to 0, the links point directly to the backend. Links already handed out keep working in both cases.
Where scheme and host come from is decided in this order: first the setting mcpBackendBaseUrl, then the current request, finally the site configuration. If none of them yields a complete address, for example with the stdio transport without a configured site, AI Suite MCP omits the link instead of emitting a broken one, and notes this in aisuite_mcp_warnings.log.
Context and research (mcp:read)
These tools only read. They cost no credits and do not call an AI model.
| Tool | Purpose |
|---|---|
readServerInfo | Status of the server with the MCP version, the active workspace and the reachable sites. Admins additionally see the versions of TYPO3, PHP and AI Suite, the active configuration and a diagnosis |
readPageTree | Traverse the page tree, limited to the user's mounts |
readPageContent | Read the content elements of a page, optionally with container nesting. Since version 0.9.0, the tool also lists the records of a page that belong to no content element, by name instead of only as a count |
readContentTree | Content of all pages of a subtree at once, paginated by page |
readRenderedPage | The page as a visitor sees it, including plugin output. Additionally requires enable_mcp_rendered_page_read |
readEditorialGuidelines | The guidelines on tone, target audience and style stored by the editorial team for a page area |
readChildren | List the container and IRRE children of a record, grouped by relation |
searchContent | Full-text search across pages and content elements. Since version 0.6.0, IRRE child tables such as accordion or card elements are searched automatically based on the TCA, a hit names the matching field and all searched tables, and the search runs on the state of the current workspace instead of the live record. Since version 0.7.0, every hit carries languageUid and, if the page belongs to a site, its ISO language code. If the search finds nothing, the answer names the searched tables, so that “nothing found” is not mistaken for “does not exist”. Since version 0.9.0, the tool searches every table with text fields that an editor can reach through the page tree. The tables are determined from the TCA instead of a configured list, only the blocked tables are excluded (see Security & Operation) |
listFiles | List the files of a FAL storage or folder, with includeFolders also the subfolders, for example to choose a target for uploadMedia |
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 the results of a completed task, read-only |
Records: schema and editing (mcp:read / mcp:write)
The exploring tools of this group belong to mcp:read, the writing ones to mcp:write. All write operations run through the DataHandler and thus through the usual TYPO3 checks, and they follow the configured write mode.
| Tool | Scope | Purpose |
|---|---|---|
listTables | mcp:read | List the tables the user is allowed to read, minus mcpExcludedTables |
readRecordSchema | mcp:read | TCA schema of a table with fields, types, validation, relations and writability. Since version 0.6.0, for rich text fields it also names the HTML tags the field may 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 the call returns only the requested columns instead of all fields. Since version 0.7.0, rootPageId reads a page including everything below it in one call, and fullText returns long text fields untruncated. Since version 0.9.0, a single read resolves the files behind a FAL field and returns their UIDs instead of only the count |
compareWithLive | mcp:read | Field-by-field comparison of a workspace draft with the live state |
previewRecords | mcp:write | Preview a write operation as an old/new diff, without saving |
writeRecords | mcp:write | Create or change 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, so the client asks for confirmation |
localizeRecord | mcp:write | Create a translation of a record without AI and without credits. With mode “localize” (default), an empty, connected shell is created, with “copyToLanguage” an independent copy. hidden controls whether it is created hidden |
savePageTree | mcp:write | Save a generated page tree. Since version 0.6.0, new pages are placed at the end by default, alternatively controllable with start, after:UID and before:UID |
patchText | mcp:write | One or more literal replacements in a field, applied atomically, without resending the whole field. Since version 0.9.0, it also covers the single correction that replaceText used to handle |
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 in advance |
copyMediaReference | mcp:write | Copy a 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
With translations, two spellings from TYPO3 history collide. tt_content has kept the old l18n_parent, while pages and most custom child tables use l10n_parent. Since version 0.7.0, AI Suite MCP accepts both variants on read and on write and maps them to the name the table actually uses. The same applies to l10n_source and l18n_source. The result notes when such a rename has taken place. A field name the table really 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 results from the AI Suite configuration and the model permissions of the backend group. No additional setting is needed in AI Suite MCP for this.
Together with the batch tools and the three checking audit tools, they are the tools that require a valid AI Suite API key. 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 permissions of the backend group, which already remove a tool from the list.
Since version 0.7.0, this applies to translateRecord and translatePage only if you pass the optional parameter model. If you leave it out, the tool creates the translation record and returns its fields to you, together with the site glossary and the global instructions. The translation is then done by your client's model, nothing goes to the AI Suite server and it costs no credits. The answer also names the models available to you, in case you want to translate on the server after all. If fields come back unchanged, the result points this out, so that a missing translation does not go unnoticed.
This is to be distinguished from localizeRecord under mcp:write. That tool only creates the empty translation shell. translateRecord without model creates the shell and additionally hands you the field contents to be translated.
translateFileMetadata and the batch tools do not offer this path. Without model, they only return the list of available models, the actual translation 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, with model on the server, without model free of charge by your client's model |
translatePage | mcp:translate | Translate an entire page, with translationScope either everything, only metadata or only content elements including inline children, likewise either on the server or free of charge by your client's model |
translateFileMetadata | mcp:translate | Translate file metadata into a target language, always on the server |
generateImage | mcp:image | Generate an image from a text description and store it in FAL |
The DeepL glossary of the site is not a separate tool but part of the translation tools, and it is applied automatically. Easy language is not available via MCP.
Embed media
This tool brings existing files into the file management without involving an AI model. It costs no credits and also works without a valid AI Suite API key. It is tied to its own scope and its own feature permission, both 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 | Bring existing images or videos into FAL, via URL, as Base64 or as a YouTube or Vimeo link |
With onConflict you define what happens with an existing file name: rename (default) saves under a new name, replace overwrites the content of the existing file, so that all references immediately show the new file. This cannot be reverted through a workspace either. createFolder creates a missing target folder.
Not to be confused with copyMediaReference and replaceMediaReference. These two do not insert a new file but change existing file references, therefore belong to mcp:write and are listed in the records group. For the target folder, size limit, allowed file extensions and the safeguarding of 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. None of this is written automatically. A batch process generates suggestions. Translations are only written into the localization records by applyTaskResults, metadata suggestions you apply with writeRecords.
| 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 or, via folderIdentifiers, for all files of one or more folders |
batchTranslatePage | Translate several pages, either for a UID list or for an entire page subtree |
batchTranslateFileMetadata | Translate the file metadata of a file list or, via folderIdentifiers, of all files of one or more folders |
applyTaskResults | Write the translations of a completed batch process into the localization records (scope mcp:write) |
batchGenerateMetadata and, since version 0.9.0, also batchTranslatePage take their targets in exactly one of two ways: either via pageIds as an explicit UID list or via rootPageId as a page including everything below it. Both together is an error, and so is neither. recursive decides whether a rootPageId traverses the entire subtree or stops at the direct children. The root page is always included.
Audits (mcp:read)
Since version 0.8.0, the server provides tools around audits, since version 0.9.0 there are four. Towards TYPO3 they only read, but they pass the page URL and thus the page content on to the AutoDudes audit infrastructure. That is why the three checking tools additionally depend on their own permission enable_audit (see Permissions & Scopes). readAuditResults only needs read permission on the page.
| Tool | Cost | Purpose |
|---|---|---|
auditSeo | 3 credits | Complete SEO audit of a publicly reachable page: technical on-page checks, Lighthouse scores including Core Web Vitals of real users, and signals for AI visibility. With keyword, the SERP position, the top 10 competition and the search volume are added. The findings are sorted by severity and fixability |
auditAccessibility | 3 credits | Accessibility audit according to WCAG 2.1 AA, checked with axe-core and HTML_CodeSniffer via pa11y. Returns the number of errors, warnings and notices, the largest problem groups with impact and example selectors, as well as the individual findings with fixability |
auditContent | 2 or 3 credits | Analyzes what a page does not yet cover in terms of content and rates each point against the page content as answered, partially answered or open. You choose the perspective with type:questions (2 credits): real “People also ask” questions from the search results, plus AI-derived questions. With keyword, the live questions for the keyword are added.gap (3 credits): keywords for which the page already ranks, but too weakly for traffic.cluster (3 credits): topic clusters around a focus keyword, keyword is mandatory here.competitors (3 credits): competitors of the domain and the keyword gap against the strongest one.Since version 0.9.0, it replaces the tools auditQuestions, auditContentGap, auditTopicCluster and auditCompetitors |
readAuditResults | free of charge | Reads the audit results of all six types already stored for a TYPO3 page. Does not start a new audit. Without auditType, you get an overview, with auditType the complete stored result of one type. Requires read permission on the page |
Parameters of the audit tools
Since version 0.9.0, the three checking tools auditSeo, auditAccessibility and auditContent take the page in one of two ways. For a page of this installation, pageId is enough, its public URL is resolved from the site configuration. For a page outside the installation, url takes an absolute, publicly reachable http(s) address. A keyword is limited to 200 characters.
auditContent takes three further parameters:
| Parameter | Meaning |
|---|---|
model | Text model for the AI coverage rating, for example ChatGPT. Without a value the audit default model from the AI Suite settings is used, otherwise the first model available to the user |
market | Search market as an ISO locale, such as de-DE or de-AT. Without a value the default language of the site the page 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 page batch tools
With batchGenerateMetadata and batchTranslatePage, a rootPageId is limited to 50 pages. If there are more, the call is rejected before anything is billed, and it states the number of pages found. The reason is an asymmetry. Both tools cost credits per page, and a subtree is a quantity nobody has counted beforehand. “Everything below the start page” is one short sentence away from a very large bill. An explicit pageIds list, by contrast, is a quantity that was named deliberately, and it remains unlimited. If you want to stay within the limit, choose a deeper root page, set recursive to false or pass the UIDs individually.