vim-mcp-server
Servidor MCP para controlar Vim
Documentación
vim-mcp-server
Un servidor MCP (Model Context Protocol) integrado en Vim. Expone herramientas a través de HTTP que permiten a clientes compatibles con MCP — como agentes de codificación con IA — leer y modificar buffers, mover el cursor, recuperar selecciones visuales, gestionar listas de quickfix y location, abrir diffs lado a lado (incluidos diffs de git calculados dentro de Vim), leer el historial de mensajes y ejecutar comandos Ex.
Por ahora, lo uso principalmente para que el agente me muestre archivos/líneas en Vim. A veces, lo uso para mostrar regiones seleccionadas al agente.
Requisitos
- Vim compilado con
+python3
Instalación
Usa tu gestor de plugins preferido.
vim-plug
Plug 'breggles/vim-mcp-server'
Vundle
Plugin 'breggles/vim-mcp-server'
Manual
Clona el repositorio en tu directorio de paquetes de Vim:
git clone https://github.com/breggles/vim-mcp-server.git \
~/.vim/pack/plugins/start/vim-mcp-server
Uso
Iniciar el servidor
En Vim, ejecuta:
:McpServerStart
Inicia automáticamente el servidor al lanzar Vim añadiendo esto a tu vimrc:
let g:mcp_server_autostart = 1
Configuración del cliente MCP
Apunta tu cliente MCP a http://127.0.0.1:8765/mcp (o al puerto que elijas).
Por ejemplo, para opencode añade el servidor a tu opencode.jsonc:
"mcp": {
"vim": {
"type": "remote",
"url": "http://localhost:8765/mcp",
"enabled": true
}
}
Comandos
| Comando | Descripción |
|---|---|
:McpServerStart [port] | Iniciar el servidor (puerto predeterminado 8765) |
:McpServerStop | Detener el servidor |
:McpServerStatus | Mostrar el estado del servidor y la URL |
Opciones
| Variable | Predeterminado | Descripción |
|---|---|---|
g:mcp_server_port | 8765 | Puerto en el que escucha el servidor |
g:mcp_server_autostart | 0 | Iniciar el servidor automáticamente en VimEnter |
g:mcp_server_allow_execute | 0 | Habilitar la herramienta execute_command |
g:mcp_server_allow_save | 0 | Habilitar la herramienta save_buffer |
g:mcp_server_allow_edit | 0 | Habilitar la herramienta edit_buffer |
Herramientas
El servidor expone las siguientes herramientas a los clientes MCP:
| Herramienta | Descripción |
|---|---|
list_buffers | Listar todos los buffers abiertos |
get_buffer | Leer el contenido del buffer (opcionalmente un rango de líneas) |
edit_buffer | Reemplazar, insertar o eliminar líneas en un buffer |
open_file | Abrir un archivo mediante :edit |
save_buffer | Guardar un buffer mediante :write (opt-in, ver arriba) |
close_buffer | Cerrar un buffer mediante :bdelete |
get_cursor | Obtener la posición actual del cursor |
set_cursor | Mover el cursor a una línea y columna |
get_visual_selection | Obtener la selección visual actual, si existe |
execute_command | Ejecutar un comando Ex arbitrario (opt-in, ver arriba) |
get_quickfix_list | Obtener las entradas actuales de la lista quickfix |
set_quickfix_list | Establecer la lista quickfix |
get_location_list | Obtener la lista de location para la ventana actual |
set_location_list | Establecer la lista de location para la ventana actual |
get_messages | Obtener el historial de mensajes de Vim (salida de :messages) |
show_diff | Abrir una vista de diff lado a lado en una nueva pestaña (archivos o contenido) |
show_git_diff | Abrir un diff de git lado a lado en una nueva pestaña; git calcula ambos lados dentro de Vim |
Cuando una herramienta acepta un argumento de buffer, este puede especificarse por número
(buffer_id) o por ruta de archivo (buffer_path). Cuando ambos se omiten, se
usa el buffer actual.
Modo Plan de OpenCode
Por defecto, el modo plan de OpenCode desactiva todas las herramientas MCP. Para permitir
herramientas de vim de solo lectura en el modo plan, añade lo siguiente a tu opencode.jsonc:
{
"agent": {
"plan": {
"tools": {
"vim_*": false,
"vim_list_buffers": true,
"vim_get_buffer": true,
"vim_get_cursor": true,
"vim_get_visual_selection": true,
"vim_open_file": true,
"vim_set_cursor": true,
"vim_get_quickfix_list": true,
"vim_set_quickfix_list": true,
"vim_get_location_list": true,
"vim_set_location_list": true,
"vim_get_messages": true,
"vim_show_diff": true,
"vim_show_git_diff": true
}
}
}
}
Esto desactiva primero todas las herramientas vim_*, y luego rehabilita las específicas. Ajusta
la lista según tu flujo de trabajo.
Desarrollo
Para trabajar en el plugin sin instalarlo, clona el repositorio y añádelo a la ruta de runtime de Vim:
set rtp+=~/path/to/vim-mcp-server
Añade esto a tu vimrc o ejecútalo manualmente. Los cambios surten efecto la próxima vez
que se inicie Vim.
Genera las etiquetas de ayuda con:
:helptags ~/path/to/vim-mcp-server/doc
Licencia
MIT