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.
Changelog
This extension is experimental. Until a 1.0.0 release, the API described in
this documentation may change or break between versions without notice.
Note
The canonical, commit-level history lives in the Git repository. This page records notable, user-facing changes per release.
Unreleased
- Added: each manifest now also carries the WebMCP
annotations.untrustedContentHintflag, warning the agent that a tool's output may contain untrusted third-party data. It is derived from the primitive (onlysearchis flagged) and overridable via the newuntrustedContentargument onManifest. - Added:
Manifestgained an optionaltitleargument — a human-readable label for UI display, distinct from the machine-stablename. It is emitted into the manifest and forwarded to the tool descriptor only when set. - Changed: the runtime now registers its tools atomically via
provideContext({ tools })(the WebMCP spec's primary entry point), falling back to per-toolregisterToolonly whereprovideContextis absent. Manifest entries that reuse a name already taken are dropped, so a duplicate tool name no longer aborts registration. - Added: the
navigateandmailtoprimitives accept an optionalconfirmmessage that triggers a human-in-the-loop confirmation before the side effect runs, via the WebMCP client'srequestUserInteraction()(with aconfirm()fallback). Escape-hatch modules now receive the client asctx.client. Without aconfirmmessage the behaviour is unchanged. - Changed: the built-in primitives now flag genuine failure paths
(
navigatewith an unknown option,mailtowith no configured contact) with the WebMCPisErrorresult flag, so agents can tell a failed call from a successful one. An empty but valid search result stays a success. - Added: each tool manifest now carries a WebMCP
annotations.readOnlyHintflag, derived from the primitive (searchandstaticare read-only;navigateandmailtoare not) and overridable via the newreadOnlyargument onManifest. The generic runtime forwards it toregisterToolso agents can tell read-only tools from state-changing ones.
0.2.0 - 2026-07-19
- Breaking: the backend module moved from the Web group to
System, and its route identifier changed from
web_webmcptosystem_webmcp. The module no longer carries a page tree — its statistics are site-wide. Update any backend user/group access rights and hardcoded module links accordingly. - Changed: the backend module icon was redrawn in the three-colour TYPO3 v14 icon style.
- Added: an
ext_so the extension can be published to and installed from the TER.emconf. php - Documentation: added a Quickstart, an Architecture overview, a dedicated Analytics chapter (data model, retention, endpoint hardening), a Troubleshooting guide and this changelog.
0.1.0
Initial experimental release.
- Declarative tool framework: define agent tools as server-side PHP providers
(
Tool) collected into a per-page manifest.Provider Interface - Four behaviour primitives interpreted by a single generic runtime
(
webmcp.):js navigate,search,mailto,static. - Escape hatch: a tool may point at its own ES module for behaviour no primitive covers.
- Optional, privacy-preserving first-party analytics: anonymous per-call
logging via
/webmcp-event, rate limiting, and a System > WebMCP backend module. - Requires TYPO3 v14.3+ and PHP 8.2+.