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.
Configuration
Extension configuration
Set these in the TYPO3 backend under Admin Tools > Settings >
Extension Configuration > neoblack_webmcp (the defaults live in
ext_conf_template.txt).
-
- Type
- boolean
- Default
- 1
Log each WebMCP tool call (tool name + coarse client hint, no PII) to
tx_and expose the backend module. Turn off to disable the ingest endpoint (neoblackwebmcp_ event /webmcp-is then passed through).event
-
- Type
- integer
- Default
- 60
Maximum accepted ingest calls per client IP per minute (0 = unlimited). Protects the public endpoint against flooding and statistics pollution; excess calls are answered with
429 Too Many Requests. The limiter uses the extension's own cache and only stores a hashed, short-lived counter — no plaintext IP.
Wiring the manifest into your site
Three pieces connect the tools to the page. All of them live in your site package / TypoScript, so you stay in control of where the tools are exposed.
1. Emit the manifest
Add the data processor to the page's FLUIDTEMPLATE (or PAGEVIEW).
page.10.dataProcessing {
# optional: a menu a navigate tool can build on
35 = menu
35 {
entryLevel = 0
levels = 1
as = webmcpTopics
}
40 = Neoblack\Webmcp\DataProcessing\ToolManifestProcessor
40 {
endpoint = /webmcp-event
# optional, shown with their defaults
legacyNavigatorFallback = 1
outputLimit = 1500
as = webmcpConfigJson
}
}
Important
If a tool provider relies on an earlier data processor (e.g. a
Menu), make sure that processor has a lower key so it runs
before the
\Neoblack\.
-
- Type
- string
- Default
- /webmcp-event
Analytics beacon target written into the manifest.
-
- Type
- integer
- Default
- 1500
Maximum number of characters of text a single tool call returns to the agent. Longer text is cut and ends with a visible
[Output truncated to … characters.]marker (the marker counts towards the limit).0disables the cap. The default follows Chrome's Secure tools recommendation.structuredis never cut, because truncated JSON would be invalid; keep it small via the primitive's own options (e.g. the searchContent limit).Default
-
- Type
- string
- Default
- webmcpConfigJson
Variable the JSON manifest is assigned to.
2. Render the JSON block
Output the manifest once per page inside a
<script>
tag with the id
webmcp- (the id the runtime looks for):
<f:if condition="{webmcpConfigJson}">
<script type="application/json" id="webmcp-config"></script>
</f:if>
3. Include the runtime
page.includeJSFooter {
webmcp = EXT:neoblack_webmcp/Resources/Public/JavaScript/webmcp.js
webmcp.defer = 1
}
Where tools are registered
The runtime registers tools only in the top-level document. When a page is shown inside an iframe — same-origin or cross-origin — nothing is registered. This is not configurable: agents such as ChatGPT's built-in browser do not discover tools in iframes anyway, and a third-party page embedding yours must not receive its tools.
The extension never sets the specification's exposed registration option,
so tools are not exposed to other origins.
Backend module
When analytics is enabled, the System > WebMCP module visualises tool usage.
See also
Analytics describes the module's data model, retention and the hardening of the public ingest endpoint.