はじめに
最近よく聞くMCPですが、Neovimでも使えるようです。
今回はmcphubというプラグインを使用します。
前提
-
Neovimと生成AIを統合するプラグインで主流なものとしてavanteとcodecompanionの2つがありますが、今回はavanteを使った手順を紹介します
-
プラグインマネージャはlazyを使用しますが、他のプラグインを使っている方は適宜置き換えてください
MCPサーバを利用する場合、AIが意図しないリソースへアクセスする場合があります。
ツール利用の自動承認をOFFにする(今回紹介するプラグインではデフォルトでOFFになっています)などして、業務コードなどの秘匿情報は各自の責任で保護してください。
インストール手順
1. avanteのインストール
mcphubはチャットツールがないと使えないので、まずはavanteをインストールします。
公式のインストール手順をコピペします。
{
"yetone/avante.nvim",
event = "VeryLazy",
version = false, -- Never set this value to "*"! Never!
opts = {
-- add any opts here
-- for example
provider = "openai",
openai = {
endpoint = "https://api.openai.com/v1",
model = "gpt-4o", -- your desired model (or use gpt-4o, etc.)
timeout = 30000, -- Timeout in milliseconds, increase this for reasoning models
temperature = 0,
max_completion_tokens = 8192, -- Increase this to include reasoning tokens (for reasoning models)
--reasoning_effort = "medium", -- low|medium|high, only used for reasoning models
},
},
-- if you want to build from source then do `make BUILD_FROM_SOURCE=true`
build = "make",
-- build = "powershell -ExecutionPolicy Bypass -File Build.ps1 -BuildFromSource false" -- for windows
dependencies = {
"nvim-treesitter/nvim-treesitter",
"stevearc/dressing.nvim",
"nvim-lua/plenary.nvim",
"MunifTanjim/nui.nvim",
--- The below dependencies are optional,
"echasnovski/mini.pick", -- for file_selector provider mini.pick
"nvim-telescope/telescope.nvim", -- for file_selector provider telescope
"hrsh7th/nvim-cmp", -- autocompletion for avante commands and mentions
"ibhagwan/fzf-lua", -- for file_selector provider fzf
"nvim-tree/nvim-web-devicons", -- or echasnovski/mini.icons
"zbirenbaum/copilot.lua", -- for providers='copilot'
{
-- support for image pasting
"HakonHarnes/img-clip.nvim",
event = "VeryLazy",
opts = {
-- recommended settings
default = {
embed_image_as_base64 = false,
prompt_for_file_name = false,
drag_and_drop = {
insert_mode = true,
},
-- required for Windows users
use_absolute_path = true,
},
},
},
{
-- Make sure to set this up properly if you have lazy=true
'MeanderingProgrammer/render-markdown.nvim',
opts = {
file_types = { "markdown", "Avante" },
},
ft = { "markdown", "Avante" },
},
},
}
その後、接続するプロバイダによってシェルに環境変数を設定します。
↓公式から引用
For Claude:
export ANTHROPIC_API_KEY=your-api-key
For OpenAI:
export OPENAI_API_KEY=your-api-key
For Azure OpenAI:
export AZURE_OPENAI_API_KEY=your-api-key
For Amazon Bedrock:
export BEDROCK_KEYS=aws_access_key_id,aws_secret_access_key,aws_region[,aws_session_token]
Note: The aws_session_token is optional and only needed when using temporary AWS credentials
自分は.zshrc
で自動的に設定するようにしています。
if [ -f "$HOME/openai_api_key" ]; then
export OPENAI_API_KEY=$(cat "$HOME/openai_api_key")
fi
環境変数の設定が済んだら、Neovimからavanteを起動します。
デフォルトのキーバインドは<leader>aa
です。
avante単体でも触ってて面白いと思うので、mcphubのインストールに進む前に色々触ってみてください。
2. mcphubのインストール
avanteを使えるようになったので、次にmcphubをインストールします。
mcphubをインストールする前に、以下をターミナルで実行しておいてください。
mcphubが参照するファイルが存在しない場合、Neovim実行時エラーになるので事前に手動で作成します。
mkdir -p ~/.config/mcphub
echo '{ "mcpServers": {} }' > ~/.config/mcphub/servers.json
ではプラグインのインストールです。
公式のインストール手順をコピペします。
{
"ravitemer/mcphub.nvim",
dependencies = {
"nvim-lua/plenary.nvim", -- Required for Job and HTTP requests
},
-- uncomment the following line to load hub lazily
--cmd = "MCPHub", -- lazy load
build = "npm install -g mcp-hub@latest", -- Installs required mcp-hub npm module
-- uncomment this if you don't want mcp-hub to be available globally or can't use -g
-- build = "bundled_build.lua", -- Use this and set use_bundled_binary = true in opts (see Advanced configuration)
config = function()
require("mcphub").setup()
end,
keys = {
{ "<leader>m", "<cmd>MCPHub<cr>", desc = "Open MCPHub" },
},
}
追加で自分は<leader>m
でmcphubのUIを起動するキーバインドを組んでいます。
お好みに変更してください。
次に、avanteとmcphubを統合するためにavante側の設定を書き換えます。
以下をコピペします。
{
"yetone/avante.nvim",
event = "VeryLazy",
version = false, -- Never set this value to "*"! Never!
opts = {
-- add any opts here
-- for example
provider = "openai",
openai = {
endpoint = "https://api.openai.com/v1",
model = "gpt-4o", -- your desired model (or use gpt-4o, etc.)
timeout = 30000, -- Timeout in milliseconds, increase this for reasoning models
temperature = 0,
max_completion_tokens = 8192, -- Increase this to include reasoning tokens (for reasoning models)
--reasoning_effort = "medium", -- low|medium|high, only used for reasoning models
},
-- system_prompt as function ensures LLM always has latest MCP server state
-- This is evaluated for every message, even in existing chats
system_prompt = function()
local hub = require("mcphub").get_hub_instance()
return hub:get_active_servers_prompt()
end,
-- Using function prevents requiring mcphub before it's loaded
custom_tools = function()
return {
require("mcphub.extensions.avante").mcp_tool(),
}
end,
disabled_tools = {
"list_files",
"search_files",
"read_file",
"create_file",
"rename_file",
"delete_file",
"create_dir",
"rename_dir",
"delete_dir",
"bash",
},
},
-- if you want to build from source then do `make BUILD_FROM_SOURCE=true`
build = "make",
-- build = "powershell -ExecutionPolicy Bypass -File Build.ps1 -BuildFromSource false" -- for windows
dependencies = {
"ravitemer/mcphub.nvim",
"nvim-treesitter/nvim-treesitter",
"stevearc/dressing.nvim",
"nvim-lua/plenary.nvim",
"MunifTanjim/nui.nvim",
--- The below dependencies are optional,
"echasnovski/mini.pick", -- for file_selector provider mini.pick
"nvim-telescope/telescope.nvim", -- for file_selector provider telescope
"hrsh7th/nvim-cmp", -- autocompletion for avante commands and mentions
"ibhagwan/fzf-lua", -- for file_selector provider fzf
"nvim-tree/nvim-web-devicons", -- or echasnovski/mini.icons
"zbirenbaum/copilot.lua", -- for providers='copilot'
{
-- support for image pasting
"HakonHarnes/img-clip.nvim",
event = "VeryLazy",
opts = {
-- recommended settings
default = {
embed_image_as_base64 = false,
prompt_for_file_name = false,
drag_and_drop = {
insert_mode = true,
},
-- required for Windows users
use_absolute_path = true,
},
},
},
{
-- Make sure to set this up properly if you have lazy=true
'MeanderingProgrammer/render-markdown.nvim',
opts = {
file_types = { "markdown", "Avante" },
},
ft = { "markdown", "Avante" },
},
},
}
mcphubのインストールが完了したら、:MCPHub
を実行します。
keys
でキーバインドを設定している方はキーバインドで実行しても問題ないです。
使ってみる
サーバのインストール
早速mcphub経由でmcpサーバをインストールしてみます。
今回はfile-system
とGit Tools
のサーバをインストールしてみます。
mcphubのUIでC
を押して設定ファイルを開いた後、e
を押して編集に入ります。
以下をコピペします。フォルダ指定のところだけ書き換えてください。
{
"mcpServers": {
"file-system": {
"command": "npx",
"args": [
"-y",
"@modelcontextprotocol/server-filesystem",
"/path/to/allowed/dir"
]
},
"git-tools": {
"command": "uvx",
"displayed": false,
"args": ["mcp-server-git"]
}
}
}
各サーバのインストール過程でnpx
とuvx
を使うので、用意してください。
その後、mcphubのUIでH
を押してホームに戻りR
で再起動します。
インストールできるサーバ一覧はmcphubのUIでM
を押すとみれます。
チャットで指示する
適当なプロジェクトをNeovimで開いて、avanteのプロンプトで修正指示やコミットの指示を投げてみてください。
AIがツールを使ってファイル修正やコミットをしてくれると思います。
最後に
Neovimがまだまだ現役で活躍してくれそうで嬉しいです!