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 ModelContext 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(defaultwebmcpConfigJson). -
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 includeJSFooterTypoScript). -
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. Test with an agent-capable client or Chrome with the WebMCP origin trial enabled.
The provider is a service tagged webmcp.tool. 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#[AutoconfigureTag('webmcp.tool')]only when autoconfiguration is on. - Otherwise tag the service manually (see the note in Quickstart).
- Clear the TYPO3 caches after adding a new service.
Providers receive $processedData from data processors that ran
before the
\Neoblack\ in the same
content object. If your provider builds on, say, a MenuProcessor
output, that processor must have a lower key so it runs first (see the
ordered example in Configuration).
- Is analytics enabled? Check
analyticsEnabledin the extension configuration. When off,/webmcp-eventis passed through and nothing is stored. - 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
(
analyticsRateLimitcalls per IP per minute). Raise it or set0to disable — see Analytics. - Getting 204 but no row? A
204is also returned for cross-site posts rejected by theSec-Fetch-Siteguard and for the normal success path. Confirm the beacon is a genuine same-originPOSTto/webmcp-event.
Tool values are embedded verbatim inside a
<script> block. The
processor escapes < > & ' " as \uXXXX (JSON_HEX_*), so a
</script> 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.