v0.6.0: drop MetaMCP from the neovim path

MetaMCP never re-dials a restarted upstream — proven for both STDIO
and STREAMABLE_HTTP upstreams — so it cannot front an ephemeral,
editor-bound MCP. The pool now fronts the nvim-mcp-bridge directly:

  Claude Code -> mcp-session-pool /p/neovim -> nvim-mcp-bridge -> nvim

The pool re-establishes on its own (_ensure_pinned re-runs initialize),
so an event-driven /repin (fired by the socket-appearance systemd.path
oneshot) actually heals the chain.

- tool names revert to two-segment mcp__neovim__vim_* (no MetaMCP
  aggregation prefix)
- agents/companion.md + skills + README: surface description and
  troubleshooting runbook rewritten for the pool->bridge->nvim chain
This commit is contained in:
oleks
2026-05-21 13:24:01 +03:00
parent 3c5851e95e
commit 214c640f75
6 changed files with 53 additions and 49 deletions
+4 -4
View File
@@ -12,7 +12,7 @@ description: |
buffer", "have Claude edit my file", "send this to Claude in nvim",
"let Claude in the editor handle it".
disable-model-invocation: false
allowed-tools: Bash, Read, Skill, AskUserQuestion, mcp__neovim__neovim__*
allowed-tools: Bash, Read, Skill, AskUserQuestion, mcp__neovim__*
---
# claude-code-handoff — let the in-editor Claude do the editing
@@ -60,7 +60,7 @@ These are defined under `<leader>a*` in
## The full `:ClaudeCode*` command surface
When driving the editor via `mcp__neovim__neovim__vim_command` you have more
When driving the editor via `mcp__neovim__vim_command` you have more
than the keymaps above. The complete set:
- `:ClaudeCode` — toggle the terminal split.
@@ -88,7 +88,7 @@ quoting them.
1. **Confirm the split is open.** Either ask `editor-introspect` to
check for a Claude Code buffer/window, or just run
`:ClaudeCode` via `mcp__neovim__neovim__vim_command` — the command is
`:ClaudeCode` via `mcp__neovim__vim_command` — the command is
idempotent (toggles, but if already visible the user sees no
surprise).
@@ -104,7 +104,7 @@ quoting them.
neovim.nix add a keymap for ...", say "add a `<leader>tw` keymap
that toggles wrap, next to the existing wrap-toggle block."
Send via `:ClaudeCodeSend` (after selection) or by typing the
prompt into the Claude Code buffer (`mcp__neovim__neovim__vim_command`
prompt into the Claude Code buffer (`mcp__neovim__vim_command`
plus an explicit feedkeys is overkill — usually the user can type
it themselves once focus is in the split).
+3 -3
View File
@@ -3,7 +3,7 @@ name: editor-act
description: |
Drive the user's running Neovim instance — open files, run user
commands, trigger keymaps, jump to LSP locations, toggle UI,
evaluate small lua snippets. Uses the `mcp__neovim__neovim__*` tools
evaluate small lua snippets. Uses the `mcp__neovim__*` tools
(`vim_command`, `vim_file_open`, `vim_window`, …) against the live
instance. Prefers the user's own commands and keymaps over teaching
new vim syntax. Will *not* edit buffer contents — that work is
@@ -13,7 +13,7 @@ description: |
neo-tree", "run this command in my nvim", "go to next diagnostic",
"save my buffer".
disable-model-invocation: false
allowed-tools: Bash, Read, Skill, AskUserQuestion, mcp__neovim__neovim__*
allowed-tools: Bash, Read, Skill, AskUserQuestion, mcp__neovim__*
---
# editor-act — do things in the user's nvim
@@ -24,7 +24,7 @@ For buffer edits, invoke `claude-code-handoff` instead.
## Preconditions
`mcp__neovim__neovim__*` tools must be present. If they aren't, stop and tell
`mcp__neovim__*` tools must be present. If they aren't, stop and tell
the user to restart nvim + Claude Code (see `editor-introspect` for
the recovery message).
+8 -8
View File
@@ -2,7 +2,7 @@
name: editor-introspect
description: |
Read-only inspection of the user's running Neovim instance via
`mcp__neovim__neovim__*` tools. Use whenever a question depends on the live
`mcp__neovim__*` tools. Use whenever a question depends on the live
editor state: what is mapped to a key, which buffers are open, what
the cursor is on, what diagnostics exist, which plugins are loaded,
what the messages buffer says. Returns concrete facts grounded in
@@ -12,7 +12,7 @@ description: |
"current selection", "what's the cursor on", "any diagnostics",
"lualine theme actually applied".
disable-model-invocation: false
allowed-tools: Bash, Read, Glob, Grep, mcp__neovim__neovim__*
allowed-tools: Bash, Read, Glob, Grep, mcp__neovim__*
---
# editor-introspect — read the live nvim instance
@@ -24,7 +24,7 @@ for that.
## Preconditions
The user's nvim must be running with an RPC socket reachable by the
`mcp-neovim-server` MCP server. If `mcp__neovim__neovim__*` tools are not
`mcp-neovim-server` MCP server. If `mcp__neovim__*` tools are not
present in this session, **stop and tell the user**:
> The neovim MCP server isn't connected to this Claude Code session.
@@ -38,13 +38,13 @@ Do not try to fake introspection from the config alone.
`mcp-neovim-server` exposes these (note the `vim_` prefix, *not*
`nvim_`):
- `mcp__neovim__neovim__vim_command` — run any `:` command, including `:lua`.
- `mcp__neovim__vim_command` — run any `:` command, including `:lua`.
Returns the rendered command output. This is the workhorse for
introspection: pass `:verbose nmap ...`, `:lua print(...)`, etc.
- `mcp__neovim__neovim__vim_status` — cursor, mode, marks, registers in one
- `mcp__neovim__vim_status` — cursor, mode, marks, registers in one
call. Use instead of three separate `:lua` calls.
- `mcp__neovim__neovim__vim_buffer` — buffer contents with line numbers.
- `mcp__neovim__neovim__vim_health` — check the nvim↔server connection; run
- `mcp__neovim__vim_buffer` — buffer contents with line numbers.
- `mcp__neovim__vim_health` — check the nvim↔server connection; run
this first if anything seems disconnected.
There is **no eval tool**. To get a lua value, call `vim_command`
@@ -53,7 +53,7 @@ with `:lua print(vim.inspect(<expr>))` and parse the printed output.
## The introspection vocabulary
Queries to reach for first. Unless noted, run each as the `command`
argument to `mcp__neovim__neovim__vim_command`.
argument to `mcp__neovim__vim_command`.
### Keymaps