Neovim 的 Model Context Protocol (MCP) 服务器的 Ruby 实现。此服务器允许大型语言模型(LLMs)通过 Model Context Protocol 与 Neovim 进行交互,提供查询缓冲区并在编辑器中执行操作的能力。
Model Context Protocol (MCP) 是一种标准化的方式,使 AI 模型能够与其环境进行交互。它定义了一种结构化的方法,让模型请求并使用工具,访问资源,并在交互过程中维护上下文。
这个 Neovim MCP 服务器实现了 MCP 规范,为 AI 模型提供了访问 Neovim 的能力,用于缓冲区分析、文件探索和编辑辅助。
安装 gem:
gem install nvim-mcp-server
安装后,nvim-mcp-server 可执行文件将在你的 PATH 中可用。
Neovim MCP 服务器遵循 XDG 基础目录规范来配置文件:
$XDG_CONFIG_HOME/nvim-mcp 或如果未设置 XDG_CONFIG_HOME,则为 ~/.config/nvim-mcp$XDG_CONFIG_HOME/nvim-mcp 或如果未设置 XDG_CONFIG_HOME,则为 ~/.config/nvim-mcp%APPDATA%\nvim-mcp服务器首次运行时会自动创建这些目录和日志文件。
Neovim MCP 服务器可以以两种模式运行:
# 以默认的 STDIO 模式启动
nvim-mcp-server
# 在默认端口(6030)上以 HTTP 模式启动
nvim-mcp-server --mode http
# 在自定义端口上以 HTTP 模式启动
nvim-mcp-server --mode http -p 8080
当以 HTTP 模式运行时,服务器提供两个端点:
http://localhost:<port>/mcp/messageshttp://localhost:<port>/mcp/sse服务器默认将日志记录到配置目录中的文件。你可以通过以下选项自定义日志:
# 设置日志级别(debug, info, error)
nvim-mcp-server --log-level debug
Neovim MCP 服务器可以通过手动配置集成到 Claude Desktop。
创建适合你平台的配置目录:
$XDG_CONFIG_HOME/nvim-mcp 或如果未设置 XDG_CONFIG_HOME,则为 ~/.config/nvim-mcp$XDG_CONFIG_HOME/nvim-mcp 或如果未设置 XDG_CONFIG_HOME,则为 ~/.config/nvim-mcp%APPDATA%\nvim-mcp查找或创建 Claude Desktop 配置文件:
~/Library/Application Support/Claude/claude_desktop_config.json~/.config/Claude/claude_desktop_config.json%APPDATA%\Claude\claude_desktop_config.json添加或更新 MCP 服务器配置:
{
"mcpServers": {
"nvimMcpServer": {
"command": "ruby",
"args": ["/full/path/to/nvim-mcp-server/exe/nvim-mcp-server"]
}
}
}
Claude Desktop 使用系统默认的 Ruby 环境启动 MCP 服务器,绕过了版本管理器初始化(如 rbenv, RVM)。MCP 服务器需要使用安装时的相同 Ruby 版本,因为使用不兼容的 Ruby 版本可能会导致 MCP 服务器启动失败。
如果你使用的是如 rbenv 这样的 Ruby 版本管理器,你可以创建一个指向 Ruby shim 的符号链接,以确保使用正确的版本:
sudo ln -s /home/your_user/.rbenv/shims/ruby /usr/local/bin/ruby
请将 "/home/your_user/.rbenv/shims/ruby" 替换为你实际的 Ruby shim 路径。
Claude Desktop 和许多其他 LLM 客户端仅支持 STDIO 模式通信,但你可能希望使用服务器的 HTTP/SSE 功能。一个 MCP 代理可以弥合这一差距:
nvim-mcp-server --mode http
# 安装基于 Node.js 的 MCP 代理
npm install -g mcp-remote
# 运行代理,指向正在运行的 Neovim MCP 服务器
npx mcp-remote http://localhost:6030/mcp/sse
{
"mcpServers": {
"nvimMcpServer": {
"command": "npx",
"args": ["mcp--remote", "http://localhost:6030/mcp/sse"]
}
}
}
这种设置允许仅支持 STDIO 的客户端通过代理与 Neovim MCP 服务器通信,从而利用 HTTP/SSE 功能同时保持客户端兼容性。
为了让 MCP 服务器正常工作,你的 Neovim 实例需要使用命名套接字启动:
nvim --listen /tmp/nvim-project_name.sock
你可以通过添加以下内容到你的 Neovim 配置中来自动化这一点:
-- 在你的 init.lua 中
local project_name = vim.fn.fnamemodify(vim.fn.getcwd(), ':t')
vim.fn.serverstart('/tmp/nvim-' .. project_name .. '.sock')
Neovim MCP 服务器通过以下方式实现 Model Context Protocol:
服务器通过位于 /tmp/nvim-{project_name}.sock 的 Unix 套接字与 Neovim 实例通信。这使得服务器能够与运行不同项目的多个 Neovim 实例进行交互。
服务器提供了以下工具用于与 Neovim 交互:
get_project_buffers描述:检索当前在 Neovim 中打开且属于特定项目的文件列表。此工具通过其套接字文件 /tmp/nvim-{project_name}.sock 连接到正在运行的 Neovim 实例,并查询所有打开的缓冲区。然后过滤缓冲区,仅包括路径中含有项目名称的文件。这对于确定用户当前在特定项目中编辑哪些文件,识别活跃开发区域或跨多个文件跟踪工作上下文非常有用。该工具优雅地处理连接失败,并返回完整的绝对文件路径。
参数:
project_name:(字符串,必需) 用于筛选缓冲区的项目目录名称。这应该匹配你想要检索的缓冲区文件路径中的目录名称。例如,如果项目位于 '/home/user/projects/my-app',则应使用 'my-app' 作为 project_name。该工具还将使用此名称来定位 Neovim 套接字 /tmp/nvim-{project_name}.sock。你能显示我在 "my-project" Neovim 实例中打开了哪些文件吗?
我想知道我现在在 "blog" 项目中正在编辑哪些文件。
列出 "nvim-mcp-server" 项目的所有缓冲区。
测试和调试 Neovim MCP 服务器最简单的方法是使用 MCP Inspector,这是一个专门为测试和调试 MCP 服务器设计的开发者工具。
要使用 MCP Inspector 与 Neovim MCP 服务器一起:
# 安装并运行 MCP Inspector 与你的 Neovim MCP 服务器
npm -g install @modelcontextprotocol/inspector
npx @modelcontextprotocol/inspector /path/to/nvim-mcp-server
这将:
在 MCP Inspector UI 中,你可以:
此 Neovim MCP 服务器发布在 MIT 许可证下,这是一种宽松的开源许可证,允许自由使用、修改、分发和私人使用。
版权所有 (c) 2025 Mario Alberto Chávez Cárdenas
特此授予任何人获得此软件及其相关文档文件副本的人(以下简称“软件”),在不受限制的情况下使用、复制、修改、合并、出版、分发、再许可和/或出售软件副本的权利,并允许向其提供软件的人这样做,但需遵守以下条件:
上述版权声明和本许可通知应包含在软件的所有副本或实质部分中。
软件按“原样”提供,不附带任何形式的保证,无论是明示的还是默示的,包括但不限于对适销性、特定用途适用性和非侵权性的保证。在任何情况下,作者或版权持有人都不对因软件或其使用或其它交易而产生的任何索赔、损害或其他责任承担任何责任,无论是在合同行为、侵权行为或其他行为中。
欢迎在 GitHub 上提交错误报告和拉取请求:https://github.com/maquina-app/nvim-mcp-server。