Repository navigation
[0.3.0] — 2026-09-09
A behaviour change and one public type change, both in the same area. Notes:
docs/releases/0.3.0.md.
Changed
- A refused declaration no longer unmounts your application. It was re-thrown from the provider's
render, so an author who forgot to install a validator got a blank page — with the console message
naming the exact import sitting underneath a tree that no longer rendered. MCP is a second control
interface onto one application, and a misconfigured second interface must not take down the first.
What has not changed is that the declaration is refused: the tool is absent fromtools/list
and callable by nobody. The refusal is now scoped to the declaration that earned it, so the other
tools on the page survive it — previously one unvalidated tool cost you every tool. onRegistrationcarries every refused declaration, with thecodethat says which: a missing
validator, a duplicate name, a foreign name, a reserved prefix. It previously carried only the
reserved prefix. A development build also writes the refusal to the console with the declaration
site, for an author who wired no observer.McpRegistrationEvent#prefixis optional. It is meaningless for three of the four causes, and a
required field a consumer has to ignore is worse than an absent one. A TypeScript consumer reading
event.prefixmust now handleundefined— the one source change this release asks of you.onUnexpectedStatestill receives what it received before. Its documentation no longer says setup
failures throw, because they do not.
Fixed
- The documentation pages that described the old behaviour — the design page, the API reference, the
troubleshooting page, the state and dependency pages — say what happens now.