Skip to content

0.3.0

Latest

Choose a tag to compare

@nickkvasov nickkvasov released this 09 Sep 18:01
· 23 commits to develop since this release

[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 from tools/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.
  • onRegistration carries every refused declaration, with the code that 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#prefix is 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.prefix must now handle undefined
    — the one source change this release asks of you.
  • onUnexpectedState still 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.