AIアシスタントの活用が進む中、社内ドキュメントや技術資料を効率的に検索し、AIの回答に活用したいというニーズが高まっています。Anthropic社が提唱するMCP(Model Context Protocol)を利用することで、AIアシスタントと外部ツールを連携させることができます。

本稿では、Fessをfess-webapp-mcpプラグインでMCPサーバとして構成し、Claude DesktopやClaude Codeから社内ドキュメントを検索できるようにする方法を解説します。今回の動作確認は、Fess 15.5.1およびOpenSearch 3.4.0で行っています。

MCPとは

MCP(Model Context Protocol)は、AIアシスタントと外部ツールやデータソースを接続するためのオープンプロトコルです。MCPを利用することで、AIアシスタントは検索エンジンやデータベース、APIなどの外部リソースにアクセスし、より正確で文脈に沿った回答を生成できるようになります。

Fessでは、fess-webapp-mcpプラグインを導入することで、FessをMCPサーバとして動作させることができます。 これにより、Claude DesktopやClaude CodeなどのMCPクライアントから、Fessに登録されたドキュメントを直接検索できるようになります。

環境構築

Fessの起動

Docker Composeを使用して、FessとOpenSearchを起動します。 以下のコマンドで、起動に必要なファイルをダウンロードします。

$ curl -o compose.yaml https://raw.githubusercontent.com/codelibs/docker-fess/v15.5.1/compose/compose.yaml
$ curl -o compose-opensearch3.yaml https://raw.githubusercontent.com/codelibs/docker-fess/v15.5.1/compose/compose-opensearch3.yaml

ダウンロードしたcompose.yamlのFESS_PLUGINSの行で、fess-webapp-mcpプラグインをインストールするように編集します。

    environment:
      - "SEARCH_ENGINE_HTTP_URL=http://search01:9200"
      - "FESS_DICTIONARY_PATH=${FESS_DICTIONARY_PATH:-/usr/share/opensearch/config/dictionary/}"
      - "FESS_PLUGINS=fess-webapp-mcp:15.5.0"

以下のコマンドを実行して、FessとOpenSearchを起動します。

$ docker compose -f compose.yaml -f compose-opensearch3.yaml up -d

起動後、ブラウザで http://localhost:8080/ にアクセスして、Fessの検索画面が表示されることを確認します。

プラグインの確認

管理画面にログインし、左メニューの「システム」>「プラグイン」をクリックして、fess-webapp-mcpプラグインがインストールされていることを確認します。

プラグインの画面

検索対象データの準備

MCPサーバの動作を確認するために、検索対象のデータを準備します。 ここでは、Fess公式サイトをクロールして検索対象とします。

管理画面の左メニュー「クローラー」>「ウェブ」>「新規作成」をクリックして、以下を入力します。

項目名 設定値
名前 Fess Site
URL https://fess.codelibs.org/ja/
クロール対象とするURL https://fess.codelibs.org/ja/.*
深さ 2

入力後、「作成」ボタンをクリックして設定を保存します。

クロールの実行

「システム」>「スケジューラ」>「Default Crawler」から「今すぐ開始」をクリックしてクロールを開始します。 クロールが完了したら、検索画面で「Fess」と検索して、検索結果が表示されることを確認します。

MCPサーバの動作確認

Fessが起動したら、MCPサーバのAPIをcurlで確認します。

initializeの確認

MCPセッションを初期化して、サーバの機能を確認します。

$ curl -X POST http://localhost:8080/mcp \
  -H "Content-Type: application/json" \
  -d '{
    "jsonrpc": "2.0",
    "id": 1,
    "method": "initialize",
    "params": {
      "protocolVersion": "2024-11-05",
      "capabilities": {},
      "clientInfo": {
        "name": "curl-test",
        "version": "1.0.0"
      }
    }
  }'

以下のようなレスポンスが返ってきます。

{
  "jsonrpc": "2.0",
  "id": 1,
  "result": {
    "protocolVersion": "2024-11-05",
    "capabilities": {
      "tools": {},
      "resources": {},
      "prompts": {}
    },
    "serverInfo": {
      "name": "fess-mcp-server",
      "version": "1.0.0"
    }
  }
}

利用可能なツールの確認

MCPサーバが提供するツールの一覧を取得します。

$ curl -X POST http://localhost:8080/mcp \
  -H "Content-Type: application/json" \
  -d '{
    "jsonrpc": "2.0",
    "id": 2,
    "method": "tools/list",
    "params": {}
  }'

Fessでは、以下のツールが提供されています。

ツール名 説明
search ドキュメントの全文検索を実行
get_index_stats インデックスの統計情報を取得

検索の実行

searchツールを使用して、ドキュメントを検索します。

$ curl -X POST http://localhost:8080/mcp \
  -H "Content-Type: application/json" \
  -d '{
    "jsonrpc": "2.0",
    "id": 3,
    "method": "tools/call",
    "params": {
      "name": "search",
      "arguments": {
        "q": "インストール",
        "num": 5
      }
    }
  }'

検索結果がJSON形式で返ってきます。 searchツールでは、以下のパラメータを指定できます。

パラメータ 必須 説明
q string 検索クエリ
num integer - 取得件数(デフォルト: 10)
start integer - 開始位置(デフォルト: 0)
sort string - ソート順(例: "score.desc")

Claude Desktopの設定

Claude DesktopからFessのMCPサーバに接続するには、mcp-remoteを使用します。 mcp-remoteは、HTTPベースのMCPサーバをClaude Desktopで利用可能にするためのブリッジツールです。

前提条件

Node.js(v18以上)がインストールされている必要があります。

設定ファイルの編集

Claude Desktopの設定ファイルを編集します。 設定ファイルの場所は、OSによって異なります。

  • macOS: ~/Library/Application Support/Claude/claude_desktop_config.json
  • Windows: %APPDATA%\Claude\claude_desktop_config.json

設定ファイルに以下の内容を追加します。

{
  "mcpServers": {
    "fess": {
      "command": "npx",
      "args": ["-y", "mcp-remote", "http://localhost:8080/mcp"]
    }
  }
}

設定ファイルを保存後、Claude Desktopを再起動します。

接続の確認

Claude Desktopを起動して「fess」サーバが接続されていることを確認します。 「+」>「コネクタ」をクリックして「fess」が表示されることを確認してください。

Claude DesktopのMCP接続画面

Claude Codeの設定

Claude Code(CLIツール)からFessのMCPサーバに接続することもできます。

設定ファイルの作成

Claude Codeの設定ファイルは、以下の場所に配置します。

  • グローバル設定: ~/.claude/mcp.json
  • プロジェクト設定: プロジェクトルートの .mcp.json

設定ファイルに以下の内容を記述します。

{
  "mcpServers": {
    "fess": {
      "command": "npx",
      "args": ["-y", "mcp-remote", "http://localhost:8080/mcp"]
    }
  }
}

接続の確認

Claude Codeを起動すると、MCPサーバへの接続が自動的に行われます。 /mcp コマンドを実行して、Fessサーバが接続されていることを確認できます。

Claudeからの検索実行

Claude Desktopでの検索

Claude Desktopで、Fessに登録されたドキュメントを検索するには、以下のように質問します。

Fessのインストール方法について、社内ドキュメントを検索して教えてください。

Claudeは、FessのMCPサーバを使用してドキュメントを検索し、検索結果を基に回答を生成します。

Claude Desktopでの検索例

Claude Codeでの検索

Claude Codeでも同様に、自然言語で質問することで、Fessに登録されたドキュメントを検索できます。

Fessのクロール設定について、ドキュメントを検索して説明してください。

Claude Codeでの検索例

* * *

本稿では、fess-webapp-mcpプラグインを使用して、FessをMCPサーバとして構成し、Claude DesktopやClaude Codeから社内ドキュメントを検索する方法を紹介しました。

MCPを活用することで、AIアシスタントが社内の検索システムと連携し、より正確で文脈に沿った回答を得られるようになります。 社内ドキュメントの検索効率を向上させたい場合は、ぜひFessとMCPの連携をお試しください。