vim-mcp-server

Servidor MCP para controlar o Vim

Documentação

vim-mcp-server

Um servidor MCP (Model Context Protocol) embutido no Vim. Ele expõe ferramentas via HTTP que permitem que clientes compatíveis com MCP — como agentes de codificação de IA — leiam e modifiquem buffers, movam o cursor, recuperem seleções visuais, gerenciem listas de quickfix e de localização, abram diffs lado a lado (incluindo diffs de git calculados dentro do Vim), leiam o histórico de mensagens e executem comandos Ex.

Atualmente, uso isso principalmente para fazer o agente me mostrar arquivos/linhas no Vim. Às vezes, uso para mostrar regiões selecionadas ao agente.

Requisitos

  • Vim compilado com +python3

Instalação

Use seu gerenciador de plugins preferido.

vim-plug

Plug 'breggles/vim-mcp-server'

Vundle

Plugin 'breggles/vim-mcp-server'

Manual

Clone o repositório no diretório de pacotes do seu Vim:

git clone https://github.com/breggles/vim-mcp-server.git \
    ~/.vim/pack/plugins/start/vim-mcp-server

Uso

Iniciar o servidor

No Vim, execute:

:McpServerStart

Inicie o servidor automaticamente ao abrir o Vim adicionando isto ao seu vimrc:

let g:mcp_server_autostart = 1

Configuração do Cliente MCP

Aponte seu cliente MCP para http://127.0.0.1:8765/mcp (ou qualquer porta que você escolher).

Por exemplo, para opencode, adicione o servidor ao seu opencode.jsonc:

"mcp": {
  "vim": {
    "type": "remote",
    "url": "http://localhost:8765/mcp",
    "enabled": true
  }
}

Comandos

ComandoDescrição
:McpServerStart [port]Iniciar o servidor (porta padrão 8765)
:McpServerStopParar o servidor
:McpServerStatusExibir o status do servidor e a URL

Opções

VariávelPadrãoDescrição
g:mcp_server_port8765Porta em que o servidor escuta
g:mcp_server_autostart0Iniciar o servidor automaticamente no VimEnter
g:mcp_server_allow_execute0Habilitar a ferramenta execute_command
g:mcp_server_allow_save0Habilitar a ferramenta save_buffer
g:mcp_server_allow_edit0Habilitar a ferramenta edit_buffer

Ferramentas

O servidor expõe as seguintes ferramentas aos clientes MCP:

FerramentaDescrição
list_buffersListar todos os buffers abertos
get_bufferLer o conteúdo do buffer (opcionalmente um intervalo de linhas)
edit_bufferSubstituir, inserir ou excluir linhas em um buffer
open_fileAbrir um arquivo via :edit
save_bufferSalvar um buffer via :write (opt-in, veja acima)
close_bufferFechar um buffer via :bdelete
get_cursorObter a posição atual do cursor
set_cursorMover o cursor para uma linha e coluna
get_visual_selectionObter a seleção visual atual, se houver
execute_commandExecutar um comando Ex arbitrário (opt-in, veja acima)
get_quickfix_listObter as entradas atuais da lista de quickfix
set_quickfix_listDefinir a lista de quickfix
get_location_listObter a lista de localização da janela atual
set_location_listDefinir a lista de localização da janela atual
get_messagesObter o histórico de mensagens do Vim (saída de :messages)
show_diffAbrir uma visualização de diff lado a lado em uma nova aba (arquivos ou conteúdo)
show_git_diffAbrir um diff de git lado a lado em uma nova aba; o git calcula ambos os lados dentro do Vim

Quando uma ferramenta aceita um argumento de buffer, ele pode ser especificado por número (buffer_id) ou por caminho de arquivo (buffer_path). Quando ambos são omitidos, o buffer atual é usado.

Modo de Plano do OpenCode

Por padrão, o modo de plano do OpenCode desativa todas as ferramentas MCP. Para permitir ferramentas vim somente leitura no modo de plano, adicione o seguinte ao seu 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
      }
    }
  }
}

Isso desativa todas as ferramentas vim_* primeiro e depois reativa as específicas. Ajuste a lista conforme seu fluxo de trabalho.

Desenvolvimento

Para trabalhar no plugin sem instalá-lo, clone o repositório e adicione-o ao caminho de runtime do Vim:

set rtp+=~/path/to/vim-mcp-server

Adicione isto ao seu vimrc ou execute manualmente. As alterações entram em vigor na próxima vez que o Vim for iniciado.

Gere as tags de ajuda com:

:helptags ~/path/to/vim-mcp-server/doc

Licença

MIT