v0.5.0 — Protocol alignment
Highlights
- MCP tool schemas now match the VS Code / Neovim
PROTOCOL.mdspec verbatim — Claude Code CLI sends exactly what our bridge expects. - Two missing tools added:
close_tabandexecuteCode. - Tool-result wire format now follows the spec: plain strings flow through verbatim (
TAB_CLOSED,FILE_SAVED,DIFF_REJECTED,Opened file: …); error results surface via MCPisError.
Changed
Four schema divergences fixed:
| Tool | Before | After (spec) |
|---|---|---|
openFile |
{filePath, lineNumber, selectText} |
{filePath, preview, startText, endText, selectToEndOfLine, makeFrontmost} |
openDiff |
{filePath, oldContent, newContent, tabName} |
{old_file_path, new_file_path, new_file_contents, tab_name} |
getDiagnostics |
{filePath} |
{uri} |
closeAllDiffTabs return |
{success, rejected} object |
"CLOSED_${N}_DIFF_TABS" plain string |
openFileoutput shape follows the spec: plain"Opened file: <path>"string whenmakeFrontmost=true(default), JSON{success, filePath, languageId, lineCount}whenmakeFrontmost=false.previewis accepted but ignored (Nova has no preview mode).openFilepattern-based selection viastartText/endText, optionally extended to end of line viaselectToEndOfLine. Replaces the ad-hoclineNumberparameter.openDiffdiff stats computed againstold_file_path(original on disk); applied tonew_file_pathon Accept (best-effort handling of rename-style diffs where the two paths differ).getDiagnosticsreturns spec-shaped[{uri, diagnostics: []}]. Always empty — Nova has no LSP/diagnostics public API — but the shape matches what Claude expects to deserialize.
Added
close_tabtool ({tab_name}→"TAB_CLOSED") — Nova has no public close-tab API, so this is an honest no-op that still honors the protocol contract.executeCodetool ({code}→ MCP error"executeCode is not supported in Nova (no Jupyter kernel)") — clearisErrorresponse so Claude doesn't retry.
Notes
- Breaking change for any non-Claude consumer of the bridge's
tools/list. The only known consumer is Claude Code CLI itself (which sends the spec names), so this should be net positive in practice. Scripts/call-bridge.jsexamples updated to reflect the new param names.- No changes to the lock-file format, auth header (
x-claude-code-ide-authorization), or notification methods (selection_changed/at_mentioned) — those were already spec-conforming after v0.4.0.
Verification
Smoke + functional tests all passing:
tools/listannonces 12 tools with spec-compliant schemasclose_tab,executeCode,closeAllDiffTabs,getDiagnosticswithuriall return spec wire formatsopenDiffend-to-end workflow with{old_file_path, new_file_path, new_file_contents, tab_name}→ user Accept → plain"FILE_SAVED"string + file written to disk
Full changelog: v0.4.1...v0.5.0