↑ ↓ to navigate
↵ to select
esc to close
v0.13.10 Security Breaking Change

v0.13.10 - OAuth scopes enforced and atomic blueprint writes

OAuth tokens now only see and call the MCP tools their scopes allow, and blueprint field writes are validated in full before anything is changed.

Breaking Changes

This release contains breaking changes. Please review the migration guide below before upgrading.

Security

  • MCP tools are filtered by the OAuth token's scopes. A token holding only entries:read can no longer list or call entries_delete, domains_delete, subscriptions_checkout and so on; a tool the token may not use is absent from tools/list and answers Tool not found. Tokens with the broad mcp scope (the default) and non-OAuth API tokens are unaffected.
  • New optional scopes: domains:read/write, events:read/write, contexts:read/write, subscriptions:read/write, support:read/write. Search, preview and theme tools require the scopes of what they read.

Changes

  • blueprints_save, globals_save and the REST blueprint endpoints validate the entire fields list before writing. An unparseable fields value is an error (it previously deleted every field), an unknown type is an error (previously dropped silently), duplicate handles are rejected, and dry_run: true writes nothing (it previously replaced fields, and for globals created a permanent blueprint). fields: [] still means "remove all fields"; omitting fields leaves them alone.
  • REST: a blueprint update whose root fails validation no longer loses its fields; creating a collection with an inline blueprint on a taken handle no longer returns 201 with no schema; a failed global create no longer leaves a stray blueprint.

Migration Guide

OAuth clients that requested granular scopes must hold the scope for every tool they call (for example domains:write for domains_save). Re-authorize with the additional scopes, or request the broad mcp scope. Clients using the default mcp scope need no change.