2026.09.46 — 2026-09-27
Breaking
Check each plugin assistant tool's declared permission before it runs (6661dfc5)
A plugin's MCP tools now declare what they need, and Studio enforces it. Each mcpTools entry in plugin.json requires
scope(clusterorglobal) andpermission(one of the plugin's own permissions), andpostureisreadorwrite. Optionalparamslist the values, shapes and notes the tool's schema leaves out.Before a plugin tool runs, Studio checks the caller's permission: on the cluster named by the tool's
clusterIdargument, where a denial is hidden exactly as Studio's own tools hide it, or globally, where it names the permission. The plugin's code never runs when the check fails.studio_helpandstudio://toolsnow show each plugin tool's permission, scope and parameters.Activation is refused when a plugin registers a tool it does not declare (or the reverse), when a cluster-scoped tool has no required
clusterIdargument, or whenreadOnlyHintcontradicts the declared posture. A tool declaredwriteno longer fails activation.
Added
Add a YAML and JSON code editor for plugin screens (0efcf8db)
The plugin SDK exports
CodeEditor, the console's own editor for YAML and JSON documents: line numbers, a lint gutter, and diagnostics passed in by line and column (the server stays the validator), summarised in a live region so a screen reader hears that the document has problems. Without a change handler it is read-only. Its colours are shared with the SQL console.Check each plugin assistant tool's declared permission before it runs (6661dfc5)
A plugin's MCP tools now declare what they need, and Studio enforces it. Each mcpTools entry in plugin.json requires
scope(clusterorglobal) andpermission(one of the plugin's own permissions), andpostureisreadorwrite. Optionalparamslist the values, shapes and notes the tool's schema leaves out.Before a plugin tool runs, Studio checks the caller's permission: on the cluster named by the tool's
clusterIdargument, where a denial is hidden exactly as Studio's own tools hide it, or globally, where it names the permission. The plugin's code never runs when the check fails.studio_helpandstudio://toolsnow show each plugin tool's permission, scope and parameters.Activation is refused when a plugin registers a tool it does not declare (or the reverse), when a cluster-scoped tool has no required
clusterIdargument, or whenreadOnlyHintcontradicts the declared posture. A tool declaredwriteno longer fails activation.
Fixed
Pass a plugin assistant tool's malformed-call refusal through as is (c94c4f6b)
A plugin tool that refused a malformed call with the protocol's own error (-32602) reached the caller as "That call failed inside plugin", so a model could not see what it got wrong. The refusal now arrives unchanged, as it does from Studio's own tools.