Neovim × 生成AI × MCP：mcphub.nvimでNeovimをツール連携型エージェントにする方法


## はじめに

[前回の記事](https://qiita.com/TKfumi/items/1913a342373c4b9619d9)では、`avante.nvim` を用いたプロンプト制御についてご紹介しました。
今回はさらに一歩進め、**NeovimをMCP（Model Context Protocol）クライアント化**し、AIエージェントや外部ツールとの連携を強化するプラグイン「[mcphub.nvim](https://github.com/ravitemer/mcphub.nvim)」の活用方法を分かりやすく解説します。

## mcphub.nvimとは？

`mcphub.nvim`は、NeovimからMCPサーバーと連携し、AIツールやリソースを統合的に管理するためのプラグインです。
これにより、Neovimが強力なAI連携ハブとして機能します。

#### 主な特徴

  - NeovimをMCPクライアントとして動作させることが可能
  - `avante.nvim`など、人気のNeovimチャットプラグインとの連携に対応
  - MCPサーバーの追加・起動・停止・切り替え・テストをNeovim上の直感的なUIから制御
  - UIと設定ファイルの両方からサーバー管理を実現

## 動作環境

以下の環境で動作確認済みです。

  - OS: Ubuntu 24.04.2 LTS
  - npm: 9.2.0
  - Neovim: v0.10.2
  - lazy.nvim: v11.17.1
  - avante.nvim: v0.0.23
  - mcphub.nvim: v5.2.0

## インストール方法

パッケージマネージャー `lazy.nvim` を使用したインストール例です。

```lua
{
  "ravitemer/mcphub.nvim",
  dependencies = {
    "nvim-lua/plenary.nvim",
  },
  build = "npm install -g mcp-hub@latest",
  config= function()
    require("mcphub").setup()
  end,
}
```

## 基本的な使い方

MCPHubのUIを開いてサーバーを管理するには、以下のコマンドを実行します。

```vim
:MCPHub
```

このコマンドを実行すると、次のような管理パネルが立ち上がります。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2591762/fa35667e-e2d0-4c84-96b8-48577185678c.png)

パネル上部には、以下のメニューが横に並んでいます。各メニューの頭文字キーでアクセスできます。

  - **H**: Hub
  - **M**: Marketplace
  - **C**: Config
  - **L**: Logs
  - **H**: Help

「MCP Servers」の隣にあるカッコ内の数字は、MCPサーバー設定のシステムスクリプトのトークン数を示しています。これは、サーバーやツールの有効/無効を切り替えることで増減し、`gd`キーでスクリプト内容を確認できます。

その下には、利用可能なMCPサーバーが一覧表示されます。筆者の環境では、すでに`arxiv-mcp-server`と`Tavily`が追加されています。
`Native Servers`はデフォルトで含まれており、`MCPHub`と`Neovim`の2つのMCPサーバーは追加設定なしで使用可能です。

パネルを閉じるには`q`キーを使用します。

本記事では、この「Hubメニュー」を使ったMCPサーバーの管理方法を中心に解説します。

### Hubメニュー

最初にUIを開くと、通常は「Hubメニュー」が表示されています。表示されていない場合は、`H`キーを押して開いてください。
Hubメニューには、現在登録されているMCPサーバーの一覧と、問題が発生している場合はエラーメッセージが表示されます。

Hubメニューからは、以下の設定やテストが可能です。

  - MCPサーバーの追加
  - MCPサーバーの有効/無効の切り替え
  - 各MCPサーバーが提供するツールの有効/無効の切り替え
  - ツール、リソース、プロンプトのテスト

#### ① MCPサーバーの追加

今回は例として、MCP公式の[Reference Servers](https://www.google.com/search?q=https://github.com/modelcontextprotocol/servers%3Ftab%3Dreadme-ov-file%23-reference-servers)の中から、[everything](https://github.com/modelcontextprotocol/servers/tree/main/src/everything)サーバーを追加してみましょう。これは実用的なものではありませんが、プロンプト、ツール、リソースを含むテスト用サーバーとして紹介されています。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2591762/c6d8d348-2520-476d-af5c-b4e373d7229c.png)

新しいMCPサーバーを追加するには、「Add Server」の項目までカーソルを移動し`l`キーを押すか、任意のカーソル位置で`A`キーを押します。
すると、「paste server's json config」というテキストエリアが表示されるので、そこにMCPサーバーの[READMEに記載されているサーバー設定](https://www.google.com/search?q=https://github.com/modelcontextprotocol/servers/tree/main/src/everything%23usage-with-claude-desktop-uses-stdio-transport)をコピー＆ペーストします。JSON形式で、`mcpServers`キー以下の内容すべてを貼り付けます。
Vimのノーマルモードに戻り、エンターキーを押すと、`everything`サーバーが追加され、「connecting」という表示が出ます。この表示が消え、エラーが表示されなければ、MCPサーバーは正常に追加されています。

#### ② MCPサーバーの有効/無効の切り替え

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2591762/1ff0f939-5282-4af3-82b1-5a0cad537f62.png)

対象のMCPサーバー（上の画像では`everything`）にカーソルを合わせると、状況に応じたコマンドが表示されます。

|コマンド|説明|
|---|---|
|Expand (`l`)|項目を展開します|
|Toggle (`t`)|有効/無効を切り替えます|
|Edit (`e`)|サーバー設定を入力・修正します|
|Delete (`d`)|サーバーを削除します。|

`t`キーを押すと、MCPサーバーの有効/無効が切り替わります。**▶マーク**は有効状態、**○マーク**は無効状態を示します。

#### ③ 各MCPサーバーのツールの有効/無効の切り替え

サーバーを有効にすると、「Expand」コマンド（`l`キー）が使用可能になります。
`l`キーを押すと、そのMCPサーバーが提供するツールの一覧が表示されます。
以下では、`Native Servers` - `Neovim`サーバーを例に説明します。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2591762/b003606c-0736-4971-b309-bfefe119ae1b.png)

Neovimサーバーは、**プロンプト**としてparrot（オウム返しさせるためのプロンプト）、**ツール**としてファイル操作やコマンド実行、**リソース**としてバッファ情報やLSPの診断情報などを提供します。
利用したいツール、リソース、プロンプトにカーソルを移動し`t`キーを押すことで、個別に有効/無効を切り替えることができます。

#### ④ ツール、リソース、プロンプトのテスト

ツールを有効にすると、「open tool」コマンドが使用可能になります。
`l`キーを押すと、テスト画面に遷移します（今回は`execute_command`ツールを例とします）。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2591762/6f8eb4cc-a505-4e84-afed-1ef1d17a6bba.png)

各パラメータの項目にカーソルを移動し、`l`キーを押すと入力画面に移りますので、適切な値を入力します。
その後、「Submit」に移動し、`l`キーを押すと結果（Result）が出力されます。この結果を基に、LLMは次の処理ステップへと進みます。

ツールのテスト方法は以上ですが、プロンプトやリソースも同様の手順でテストできます。ぜひご自身で試してみてください。

## avante.nvimとの連携

ここまでは、`mcphub.nvim` を用いたMCPサーバーの管理方法について解説してきました。しかし、MCPサーバーが真価を発揮するのは、LLMから呼び出される際です。そこで最後に、`avante.nvim` と組み合わせた実践例をご紹介します。

`lazy.nvim` の設定は、[公式README](https://www.google.com/search?q=https://github.com/ravitemer/mcphub.nvim%3Ftab%3Dreadme-ov-file%23avantenvim)を参考に、以下のように記述しました。

`mcphub.nvim` 側の設定:

```lua
  {
    'ravitemer/mcphub.nvim',
    dependencies = {
      'nvim-lua/plenary.nvim',
    },
    build = 'npm install -g mcp-hub@latest',
    config = function()
      require('mcphub').setup({
        extensions = {
          avante = {
            make_slash_commands = true, -- スラッシュコマンドを生成する
          }
        }
      })
    end,
  }
```

`avante.nvim` 側の設定:

```lua
  {
    "yetone/avante.nvim",
    opts = {
      system_prompt = function()
        local hub = require("mcphub").get_hub_instance()
        return hub:get_active_servers_prompt() -- 有効なMCPサーバーのプロンプトを取得
      end,
      custom_tools = function()
        return {
          require("mcphub.extensions.avante").mcp_tool(), -- mcphub.nvimのツールを登録
        }
      end,
      -- その他のavante.nvim設定
    },
    -- その他の設定
  }
```

次に、MCPHubのUIから、使用するMCPサーバーを有効化します。
今回は以下のサーバーを有効にしました。

  * `arxiv-mcp-server`
  * `Tavily`
  * `sequential-thinking`

そして、`avante.nvim` のチャットパネルから、次のような質問を投げかけてみました。

```
Neovimから生成AIを使うための、2025年最もホットな方法を教えて。よく調べて、よく考えて答えて
```

<details><summary>AIからの回答例</summary>

  - Datetime: 2025-05-13 23:21:14
  - Model: copilot/claude-3.5-sonnet

> Neovimから生成AIを使うための、2025年最もホットな方法を教えて。よく調べて、よく考えて答えて

このトピックについて、最新の情報を収集し、体系的に分析していきたいと思います。

まず、Tavily検索を使って最新の情報を集めましょう。

╭─ use\_mcp\_tool succeeded
│  running tool
╰─ tool finished

このデータを基に、より深く分析するために、sequential-thinkingツールを使って体系的に考えていきましょう。

╭─ use\_mcp\_tool succeeded
│  running tool
╰─ tool finished

...(中略、同様のtool finishedが数回続く)...

╭─ use\_mcp\_tool succeeded
│  running tool
╰─ tool finished

分析に基づいて、2025年のNeovimでの生成AI活用について、以下にまとめます：

## 2025年のNeovimでの最新の生成AI活用方法

### 1\. 推奨される基本セットアップ

#### スタンダードアプローチ

1.  **GitHub Copilot + avante.nvim**
      * GitHub Copilotによる高精度なコード補完・生成
      * `avante.nvim`によるRAG（検索強化生成）とツール統合
      * `mcphub.nvim`で必要なツールを柔軟に追加

#### プライバシー重視アプローチ

1.  **codecompanion.nvim + Ollama**
      * ローカルLLMを活用したセキュアな環境
      * 必要に応じて外部サービスを選択的に追加

### 2\. 2025年の主要トレンド

1.  **RAGの重要性の増大**
      * プロジェクトのコンテキストを考慮したコード生成
      * コードベースに基づく的確な提案
2.  **マルチモデル対応**
      * 複数のLLMを状況に応じて使い分け
      * ローカルLLMと外部APIの組み合わせ
3.  **ツール統合の深化**
      * MCPによる柔軟なツール連携
      * プロジェクト管理ツールやCI/CDとの連携

### 3\. ツールの選び方

以下の要素を考慮して選択することをお勧めします：

1.  **セキュリティ要件**
      * 社内ポリシーや取り扱うデータの機密性
      * コードの外部送信の可否
2.  **コスト効果**
      * 予算に応じたサービスの選択
      * 無料/有料プランの機能比較
3.  **チームの開発フロー**
      * 既存のワークフローとの親和性
      * チームメンバーの技術スタック

この構成により、2025年の最新トレンドを取り入れながら、柔軟で効率的な開発環境を構築することができます。特にRAGとツール統合の強化は、より文脈を理解した知的なコーディング支援を実現します。

</details>

-----

上記のように、複数のMCPサーバー（この例ではTavilyとsequential-thinking）を活用して、包括的な回答が得られました。
現時点では、`use_mcp_tool` で具体的にどのツールが使用されたかの詳細表示はまだ対応されていませんが、関連する[Issue](https://github.com/yetone/avante.nvim/issues/1919)が報告されており、今後のアップデートに期待が持てます。

### まとめ

  - `mcphub.nvim` を活用することで、NeovimがAIエージェントや外部ツールと直接連携し、強力な開発ハブとして機能します。
  - `avante.nvim` と組み合わせることで、ツール駆動型のエージェントによる、より高度で文脈に応じた回答や提案を引き出すことが可能になります。

CursorやVS Codeといった高機能なエディタも素晴らしいですが、Neovimもまた、コーディングエージェントとしての大きな可能性を秘めていると言えるでしょう。

NeovimをAI時代の最先端開発環境へと進化させたい方は、ぜひ`mcphub.nvim`の導入を検討してみてください！

#### 参考リンク

  - [mcphub.nvim GitHubリポジトリ](https://github.com/ravitemer/mcphub.nvim)