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.
Architecture
The extension has two independent flows: emitting tools at page render time and ingesting usage events at call time. They share only the tool registry.
Emitting tools (frontend render)
| Class | Responsibility |
|---|---|
\Neoblack\ | The contract each tool implements. Tagged webmcp.tool
(autoconfigured). |
\Neoblack\ /
\Neoblack\ | The serialisable tool description and its behaviour selector. |
\Neoblack\ | Collects manifests for the current request and exposes
tool for the analytics whitelist. |
\Neoblack\ | Serialises the manifests into the page's JSON block. |
Resources/ | The generic runtime holding all four primitive interpreters and the escape-hatch loader. |
Ingesting usage events (call time)
| Class | Responsibility |
|---|---|
\Neoblack\ | The public ingest endpoint. Inert when analytics is disabled; passes unknown tools down the stack so it can coexist with other handlers. |
\Neoblack\ | Fixed-window limiter keyed on a hashed IP + window number (no plaintext IP stored). |
\Neoblack\ | The only class that writes/reads the event table. |
\Neoblack\ | Aggregates rows into the DTOs the backend module renders. |
\Neoblack\ | Thin backend controller; reads the filter, delegates, renders. |
Why the two flows are decoupled
The middleware runs early, before the frontend page is resolved, so it cannot
rely on a rendered manifest. It therefore validates incoming events against
\Neoblack\ — the context-free
provider names — rather than against the per-page manifest.
Important
This is why
\Neoblack\ must be
stable and must equal the
Manifest name. A mismatch means valid tool
calls are dropped by the ingest middleware.
See also
- Writing tools – the provider interface and manifest in detail.
- Analytics – the event table and how the endpoint is hardened.