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

ComandoDescripción
:McpServerStart [port]Iniciar el servidor (puerto predeterminado 8765)
:McpServerStopDetener el servidor
:McpServerStatusMostrar el estado del servidor y la URL

Opciones

VariablePredeterminadoDescripción
g:mcp_server_port8765Puerto en el que escucha el servidor
g:mcp_server_autostart0Iniciar el servidor automáticamente en VimEnter
g:mcp_server_allow_execute0Habilitar la herramienta execute_command
g:mcp_server_allow_save0Habilitar la herramienta save_buffer
g:mcp_server_allow_edit0Habilitar la herramienta edit_buffer

Herramientas

El servidor expone las siguientes herramientas a los clientes MCP:

HerramientaDescripción
list_buffersListar todos los buffers abiertos
get_bufferLeer el contenido del buffer (opcionalmente un rango de líneas)
edit_bufferReemplazar, insertar o eliminar líneas en un buffer
open_fileAbrir un archivo mediante :edit
save_bufferGuardar un buffer mediante :write (opt-in, ver arriba)
close_bufferCerrar un buffer mediante :bdelete
get_cursorObtener la posición actual del cursor
set_cursorMover el cursor a una línea y columna
get_visual_selectionObtener la selección visual actual, si existe
execute_commandEjecutar un comando Ex arbitrario (opt-in, ver arriba)
get_quickfix_listObtener las entradas actuales de la lista quickfix
set_quickfix_listEstablecer la lista quickfix
get_location_listObtener la lista de location para la ventana actual
set_location_listEstablecer la lista de location para la ventana actual
get_messagesObtener el historial de mensajes de Vim (salida de :messages)
show_diffAbrir una vista de diff lado a lado en una nueva pestaña (archivos o contenido)
show_git_diffAbrir 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