Warning
Experimental. This extension is experimental and not yet ready for production use. It is built on top of WebMCP, which is itself an experimental, early-stage proposal. Both the underlying specification and this extension's API may change or break at any time without notice. Use at your own risk.
Troubleshooting
Everything in the extension degrades silently on purpose — a missing manifest,
an absent Model or a malformed config simply registers nothing. That
is good for visitors but means failures are quiet. Expand the symptom that
matches and work through the checks in order.
Check, from the outside in:
-
Is the JSON block on the page? View source and look for
<script type="application/. In the console:json" id="webmcp- config"> Console — read the config blockdocument.getElementById('webmcp-config')?.textContentCopied!Empty or missing → the manifest was not rendered. Verify the Fluid snippet (Step 2 in Quickstart) is in your template and that the variable name matches the data processor's
as(defaultwebmcp).Config Json -
Does the block contain your tool?
Console — list the registered toolsJSON.parse(document.getElementById('webmcp-config').textContent).toolsCopied!Empty array → no provider yielded a manifest. Either the provider is not registered (see the next item) or its
manifestreturned() nullfor this request. - Is the runtime loaded? Confirm
webmcp.is included in the page footer (thejs includeTypoScript).JSFooter -
Is there a ModelContext to register against?
Console — check for an agent surfacedocument.modelContext || navigator.modelContextCopied!undefinedin both → the browser has no agent surface. This is expected in a normal browser; the runtime intentionally does nothing. See "The WebMCP API is not available in Chrome" below. Onlynavigator.set and legacyNavigatorFallback off → nothing is registered by design.model Context - Is the page inside an iframe? Tools are only registered in the top-level document.
The runtime registers each tool on its own. If one registration fails, only that tool is skipped and the console shows one warning naming it, for example:
[webmcp] Tool "search_articles" was not registered: InvalidStateError: …
Common causes:
- Another script already registered the same name. The
specification rejects a duplicate name. Check other WebMCP scripts
on the page (a second copy of
webmcp., a chatbot or consent widget, a polyfill demo) and rename one of the tools.js - Invalid name or description. Names must be 1–128 characters
from
A-and the description must not be empty. The TYPO3 log contains a warning from the manifest validator when a name does not match.Z a- z 0- 9 _ - . - The entry could not be built (e.g.
optionsof anavigatetool is not a list). Fix the provider'sdata.
Duplicates within the manifest are dropped silently: the first entry with a given name wins.
According to OpenAI's documentation, site tools are only used by the built-in browser of the ChatGPT desktop app, only for tools of the top-level document (not iframes), and only with specific plans and models. Check OpenAI's WebMCP documentation for the current requirements. Each call additionally goes through a safety review on OpenAI's side, which may block it.
The text output exceeded outputLimit (default 1,500 characters). Return less
text — e.g. lower a search limit or shorten the line
template — or raise the limit.
The provider is a service tagged webmcp.. If it is not picked up:
- Confirm your extension enables autoconfiguration in
Configuration/Services.yaml(_defaultswithautoconfigure: true). The tag is inherited from the interface's#only when autoconfiguration is on.[Autoconfigure Tag ('webmcp. tool')] - Otherwise tag the service manually (see the note in Quickstart).
- Clear the TYPO3 caches after adding a new service.
Providers receive $processed from data processors that ran
before the
\Neoblack\ in the same
content object. If your provider builds on, say, a Menu
output, that processor must have a lower key so it runs first (see the
ordered example in Configuration).
- Is analytics enabled? Check
analyticsin the extension configuration. When off,Enabled /webmcp-is passed through and nothing is stored.event - Is the tool name whitelisted? Only names returned by a registered
provider's
nameare logged, and() namemust equal the() Manifestname. A mismatch silently drops the event. - Getting 429s? You are hitting the rate limit
(
analyticscalls per IP per minute). Raise it or setRate Limit 0to disable — see Analytics. - Getting 204 but no row? A
204is also returned for cross-site posts rejected by theSec-guard and for the normal success path. Confirm the beacon is a genuine same-originFetch- Site POSTto/webmcp-.event
Tool values are embedded verbatim inside a
<script>
block. The
processor escapes < > & ' " as \u (JSON_), so a
</ inside an editor-controlled value cannot break out.
Warning
If you see raw HTML entities where you expected characters, do not disable those flags — decode on read instead.
See also
- Quickstart – the intended end-to-end setup.
- Configuration – the exact TypoScript and settings.
- Architecture – how the pieces connect.