Neovim控制服务

一个可生成并控制Neovim实例的服务器,允许AI代理测试Neovim配置,包括打开文件、运行命令、执行Lua代码、发送按键、检查缓冲区及捕获PNG截图。

  • by InfJoker
  • Python
  • 本地部署
  • 3 星标
  • 更新于
在 GitHub 查看 InfJoker/nvim-mcp

使用说明

nvim-mcp

生成和控制Neovim实例的MCP服务器。它允许你的AI代理测试你的Neovim配置——打开文件、运行命令、执行Lua、发送击键、检查缓冲区和捕获PNG屏幕截图。

三种模式满足不同的需求。 PTY模式 在伪终端中运行Neovim,通过终端模拟提供完整的屏幕截图支持。 无头模式 嵌入Neovim而不显示,用于轻量级脚本编写。 终端模式 在真实的GUI终端中启动Neovim,并捕获其窗口进行截图。

终端模式支持macOS上的Kitty、Ghostty和iTerm2。每个终端都通过自己的策略处理窗口发现、焦点管理和清理。截图使用macOS screencapture 并且需要屏幕录制权限。

需求

  • Python 3.11+
  • 新 0.10+
  • uv (推荐)或 pip

安装

克隆仓库并注册 ~/.claude/.mcp.json:

{
  "mcpServers": {
    "neovim": {
      "command": "uv",
      "args": [
        "run", "--project", "/path/to/nvim-mcp",
        "python", "/path/to/nvim-mcp/nvim_mcp_server.py"
      ]
    }
  }
}

依赖关系由自动管理 uv run --project.

测试

uv run python tests/test_smoke.py                        # PTY mode with full config
uv run python tests/test_smoke.py --clean                # PTY mode, no config
uv run python tests/test_smoke.py --headless --clean     # Headless mode
uv run python tests/test_smoke.py --terminal kitty       # Terminal mode (Kitty)
uv run python tests/test_smoke.py --terminal ghostty     # Terminal mode (Ghostty)
uv run python tests/test_smoke.py --terminal iterm2      # Terminal mode (iTerm2, macOS)

添加 --clean 转到任何终端模式测试,跳过加载nvim配置。

运作原理

三种操作模式:

  • PTY模式 (默认):在伪终端中生成nvim --listen <socket>.通过msgpack-rpc连接。背景 pyte 虚拟终端捕获TUI输出以获取PNG屏幕截图。
  • 无头模式:用途 pynvim.attach("child", argv=["nvim", "--embed", "--headless"])。没有截图。重量更轻。
  • 终端模式 (仅限macOS):在真实的终端模拟器(Kitty、Ghostty、iTerm2)中启动nvim。通过macOS的屏幕截图 screencapture终端在后台启动,不会转移焦点。Linux支持尚未实现。