Vim MCP Server

Created By
breggles4 months ago
An MCP server for driving Vim. Connect your coding agent to show you changed files in Vim, or get it to advise you on the code in your open buffers. Can also set your quickfix/location list to direct you to multiple points in your code.
Overview

vim-mcp-server

An MCP (Model Context Protocol) server embedded in Vim. It exposes tools over HTTP that let MCP-compatible clients — such as AI coding agents — read and modify buffers, move the cursor, retrieve visual selections, manage quickfix and location lists, open side-by-side diffs, read message history, and run Ex commands.

Requirements

  • Vim compiled with +python3

Installation

Use your preferred plugin manager.

vim-plug

Plug 'breggles/vim-mcp-server'

Vundle

Plugin 'breggles/vim-mcp-server'

Manual

Clone the repository into your Vim packages directory:

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

Usage

Start the server

In Vim, run:

:McpServerStart

Auto-start the server on Vim launch by adding this to your vimrc:

let g:mcp_server_autostart = 1

MCP Client Configuration

Point your MCP client at http://127.0.0.1:8765/mcp (or whichever port you chose).

For example, for opencode add the server to your opencode.jsonc:

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

Commands

CommandDescription
:McpServerStart [port]Start the server (default port 8765)
:McpServerStopStop the server
:McpServerStatusPrint server status and URL

Options

VariableDefaultDescription
g:mcp_server_port8765Port the server listens on
g:mcp_server_autostart0Start the server automatically on VimEnter
g:mcp_server_allow_execute0Enable the execute_command tool
g:mcp_server_allow_save0Enable the save_buffer tool
g:mcp_server_allow_edit0Enable the edit_buffer tool

Tools

The server exposes the following tools to MCP clients:

ToolDescription
list_buffersList all open buffers
get_bufferRead buffer contents (optionally a line range)
edit_bufferReplace, insert, or delete lines in a buffer
open_fileOpen a file via :edit
save_bufferSave a buffer via :write (opt-in, see above)
close_bufferClose a buffer via :bdelete
get_cursorGet current cursor position
set_cursorMove cursor to a line and column
get_visual_selectionGet the current visual selection, if any
execute_commandRun an arbitrary Ex command (opt-in, see above)
get_quickfix_listGet the current quickfix list entries
set_quickfix_listSet the quickfix list
get_location_listGet the location list for the current window
set_location_listSet the location list for the current window
get_messagesGet Vim's message history (:messages output)
show_diffOpen a side-by-side diff view in a new tab (files or content)

When a tool accepts a buffer argument it can be specified by number (buffer_id) or by file path (buffer_path). When both are omitted, the current buffer is used.

OpenCode Plan Mode

By default, OpenCode's plan mode disables all MCP tools. To allow read-only vim tools in plan mode, add the following to your 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
      }
    }
  }
}

This disables all vim_* tools first, then re-enables specific ones. Adjust the list to suit your workflow.

Development

To work on the plugin without installing it, clone the repository and add it to Vim's runtime path:

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

Add this to your vimrc or run it manually. Changes take effect the next time Vim is started.

Generate the help tags with:

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

License

MIT

Server Config

{
  "mcpServers": {
    "vim": {
      "type": "remote",
      "url": "http://localhost:8765/mcp",
      "enabled": true
    }
  }
}
Project Info
Created At
4 months ago
Updated At
3 months ago
Author Name
breggles
Star
-
Language
-
License
-
Category
Tags

Recommend Servers

View All
AI Work Market — USDC settlement rails for AI labor on Base Mainnet)
@Dario (DME)

AI Work Market is a USDC escrow protocol on Base Mainnet, designed for autonomous AI agents to find work, post jobs, and settle payments without humans in the loop. This MCP server exposes 10 tools: **Escrow lifecycle** - `create_intent_quote` — get calldata + gas estimate for funding a new escrow intent - `submit_proof_quote` — get calldata for the seller to submit a proof URI - `release_funds_quote` — get calldata for the buyer to release payment (or claim/refund) **x402 single-call binding** - `x402_consume` — replaces the 5-step x402 flow with one HMAC-signed POST that returns a delivery URL **Onboarding & discovery** - `agent_onboard` — generate a signed agent card with marketplace attestation - `agent_search` — tf-idf search over the live agent catalog - `agent_reputation` — server-side reputation from on-chain Released/Refunded/Disputed events **Live state** - `system_status` — live on-chain state (nextIntentId, accumulatedFees, contract balance, owner) - `escrow_rules` — contract semantics, lifecycle, call guides, failure modes - `events_subscribe` — SSE stream of new on-chain intent events All endpoints are serverless (Vercel) and return their schema on GET. No browser, no wallet UI required for an agent to integrate. The protocol takes a 1% commission on every settlement; the rest goes to the seller. The full AgentCard is at `/.well-known/agent-card.json` (A2A-compatible). The OpenAPI 3.0.3 spec is at `/.well-known/openapi.json` with `components.securitySchemes` (none, hmacX402). `robots.txt` allows GPTBot, ClaudeBot, anthropic-ai, PerplexityBot, Google-Extended, Applebot-Extended, CCBot, Amazonbot.

8 hours ago