🐡

Code Index MCP 教育資料 (Create By LLM)

に公開1

Code Index MCP 教育資料

目次

  1. はじめに
    1. Code Index MCP とは
    2. この資料の目的と対象読者
  2. 主な機能
  3. 対応ファイル形式
  4. インストール方法
    1. 前提条件
    2. uvx を使用したインストール (推奨)
    3. pip を使用したインストール
  5. エディタ/IDEとの連携 (Claude Desktop の例)
  6. 提供ツール詳細
    1. コアツール
      1. set_project_path
      2. search_code
      3. find_files
      4. get_file_summary
      5. refresh_index
      6. get_settings_info
    2. ユーティリティツール
      1. create_temp_directory
      2. check_temp_directory
      3. clear_settings
  7. LLMとの連携・使用例
    1. ツール直接呼び出しの例
      1. プロジェクトパスの設定
      2. コードパターンの検索
      3. ファイルサマリーの取得
      4. 特定の種類の全ファイル検索
    2. プロンプト経由の対話例
      1. analyze_code プロンプト
      2. code_search プロンプト
      3. set_project プロンプト
  8. 開発者向け情報
    1. ソースからのビルド
    2. デバッグ方法
  9. まとめ
  10. 質疑応答

1. はじめに

1.1. Code Index MCP とは

Code Index MCP は、コードのインデックス作成、検索、分析機能を提供する Model Context Protocol (MCP) サーバーです。
大規模言語モデル (LLM) がコードリポジトリと対話し、複雑なコードベースのリアルタイムな洞察とナビゲーションを提供できるように設計されています。
このサーバーは、AIモデルが外部ツールやデータソースと対話するための標準化された方法である Model Context Protocol (MCP) と統合されています。

1.2. この資料の目的と対象読者

この資料は、Code Index MCP の概要、機能、インストール方法、そして具体的な利用方法について、開発者やLLMを利用するユーザーが理解を深めることを目的としています。
Code Index MCP を利用して、コーディング作業の効率化やコード理解の深化を目指す方を対象としています。

2. 主な機能

Code Index MCP は以下の主要な機能を提供します。

  • プロジェクトのインデックス作成: ディレクトリを再帰的にスキャンし、コードファイルの検索可能なインデックスを効率的に構築します。
  • 高度なコード検索: 正規表現や特定のパターン、関数定義、参照などをコードベース全体から高速に検索します。
  • 詳細なファイル分析: ファイル構造、インポート関係、コードの複雑性など、ファイルに関する詳細な洞察を提供します。
  • インテリジェントなフィルタリング: ビルドディレクトリ (node_modules, venvなど)、依存関係ファイル、非コードファイルを自動的に無視し、分析対象を最適化します。
  • 永続ストレージによるキャッシュ: 作成したインデックスや取得したファイル内容はキャッシュされ、次回以降のアクセス時のパフォーマンスを向上させます。

3. 対応ファイル形式

Code Index MCP は、現代的な開発で用いられる多種多様なプログラミング言語とファイル拡張子をサポートしています。

  • 主要プログラミング言語: Python (.py), JavaScript/TypeScript (.js, .ts, .jsx, .tsx, .mjs, .cjs), Java (.java), C/C++ (.c, .cpp, .h, .hpp), C# (.cs), Go (.go), Ruby (.rb), PHP (.php), Swift (.swift), Kotlin (.kt), Rust (.rs), Scala (.scala)
  • フロントエンド技術: Vue (.vue), Svelte (.svelte), Astro (.astro)
  • Web関連ファイル: HTML (.html), CSS (.css), SCSS/SASS (.scss, .sass), LESS (.less), Stylus (.stylus, .styl)
  • テンプレートエンジン: Handlebars (.hbs, .handlebars), EJS (.ejs), Pug (.pug)
  • データベースとSQL: SQL全般 (.sql, .ddl, .dml), 各種DB固有ファイル (.mysql, .postgresql, .psql, .sqlite, .mssql, .oracle, .ora, .db2), DBオブジェクト定義 (.proc, .procedure, .func, .function, .view, .trigger, .index), マイグレーションツール関連 (.migration, .seed, .fixture, .schema, .liquibase, .flyway), NoSQL/グラフDBクエリ (.cql, .cypher, .sparql, .gql)
  • ドキュメンテーションと設定ファイル: Markdown (.md, .mdx), JSON (.json), XML (.xml), YAML (.yml, .yaml)
  • シェルスクリプト: Bash (.sh, .bash)

4. インストール方法

4.1. 前提条件

  • Python 3.8 以上がインストールされていること。
  • uv パッケージマネージャーの利用を推奨します (必須ではありません)。

4.2. uvx を使用したインストール (推奨)

code-index-mcp をインストールして使用する最も簡単な方法は、uvx (uv eXecute) コマンドを利用することです。

uvx code-index-mcp

このコマンドは、code-index-mcp がまだインストールされていない場合は自動的にインストールし、サーバーを起動します。

4.3. pip を使用したインストール

pip を使用してインストールすることも可能です。

pip install code-index-mcp

インストール後、以下のコマンドでサーバーをモジュールとして実行できます。

python -m code_index_mcp

5. エディタ/IDEとの連携 (Claude Desktop の例)

Code Index MCP は、MCPをサポートするエディタやIDEと連携して利用できます。ここでは Claude Desktop との連携例を示します。
Claude Desktop の設定ファイル (通常は ~/Library/Application Support/Claude/claude_desktop_config.json%APPDATA%\Claude\claude_desktop_config.json など、OSによってパスが異なります) に以下のように追記します。

{
  "mcpServers": {
    "code-index": {
      "command": "uvx",
      "args": [
        "code-index-mcp"
      ]
    }
  }
}

上記設定後、Claude Desktop を再起動すると、Code Index MCP が提供するツールが利用可能になります。

6. 提供ツール詳細

Code Index MCP は、LLMがコードベースを理解し操作するための様々なツールを提供します。

6.1. コアツール

6.1.1. set_project_path

インデックス作成の対象となるプロジェクトのルートパスを設定します。

  • 引数:
    • path (str): プロジェクトのルートディレクトリへの絶対パスまたは相対パス。
  • 戻り値: (str)
    • 設定処理の結果を示すメッセージ。成功時にはインデックス化されたファイル数が含まれます。
  • 機能概要:
    指定されたパスをプロジェクトのベースパスとして認識させます。既存のインデックスやキャッシュがある場合はそれをロードし、なければ新規に作成します。また、プロジェクトの .gitignore ファイルに、Code Index MCPが生成するキャッシュディレクトリ (.code_indexer/) を追記しようと試みます。
  • 使用例 (LLMへの指示):
    プロジェクトパスを "/Users/username/my_project" に設定してください。
    ツール呼び出し (内部処理):
    set_project_path path="/Users/username/my_project"
  • 期待される応答 (例):
    Project path set to: /Users/username/my_project. Indexed 245 files.

6.1.2. search_code

インデックス化されたファイル群から、指定された文字列やパターンに一致するコード箇所を検索します。

  • 引数:
    • query (str): 検索したい文字列または正規表現パターン。
    • extensions (Optional[List[str]], 省略可能): 検索対象を特定の拡張子のファイルに限定します (例: [".py", ".java"])。省略した場合は、サポートされている全ての拡張子が対象となります。
    • case_sensitive (bool, 省略可能, デフォルト: False): 検索時に大文字・小文字を区別するかどうかを指定します。
  • 戻り値: (Dict[str, List[Tuple[int, str]]])
    • キーがファイルパス、バリューが (行番号, マッチした行の内容) のタプルのリストである辞書。
  • 機能概要:
    指定されたクエリに基づき、対象ファイルの内容を検索します。ファイル内容はまずキャッシュから読み込みを試み、なければディスクから読み込んでキャッシュに保存します。
  • 使用例 (LLMへの指示):
    Pythonファイルで "import requests" という記述がある箇所を全て検索してください。
    ツール呼び出し (内部処理):
    search_code query="import requests" extensions=[".py"]
  • 期待される応答 (例):
    {
      "src/api_client.py": [
        [3, "import requests"]
      ],
      "utils/downloader.py": [
        [1, "import requests"]
      ]
    }
    

6.1.3. find_files

指定されたglobパターンに一致するファイルをプロジェクト内から検索します。

  • 引数:
    • pattern (str): ファイルを検索するためのglobパターン (例: *.txt, src/**/*.js, **/models/*.py)。
  • 戻り値: (List[str])
    • パターンに一致したファイルパス (プロジェクトルートからの相対パス) のリスト。
  • 機能概要:
    プロジェクトのファイルインデックスに対してglobパターンマッチングを行い、該当するファイルの一覧を返します。
  • 使用例 (LLMへの指示):
    "test" という単語が名前に含まれる全てのPythonファイルを検索してください。
    ツール呼び出し (内部処理):
    find_files pattern="*test*.py"
  • 期待される応答 (例):
    [
      "tests/test_main.py",
      "src/core/testing_utils.py"
    ]
    

6.1.4. get_file_summary

指定されたファイルに関する概要情報(行数、定義されている関数やクラス、インポート文など)を取得します。

  • 引数:
    • file_path (str): 概要を取得したいファイルの、プロジェクトルートからの相対パス。
  • 戻り値: (Dict[str, Any])
    • ファイルの概要情報を含む辞書。基本的な情報 (行数、ファイルサイズ、拡張子) に加え、言語に応じた構造情報 (インポート文、クラス定義、関数定義のリストなど) が含まれます。
  • 機能概要:
    指定されたファイルを解析し、その構造や内容に関するサマリーを生成します。PythonやJavaScript/TypeScriptなどの主要言語については、より詳細な情報抽出を試みます。
  • 使用例 (LLMへの指示):
    "src/app.py" ファイルの概要を教えてください。
    ツール呼び出し (内部処理):
    get_file_summary file_path="src/app.py"
  • 期待される応答 (例):
    {
      "file_path": "src/app.py",
      "line_count": 210,
      "size_bytes": 5120,
      "extension": ".py",
      "imports": ["import flask", "from models import User"],
      "classes": [{"line": 15, "name": "AppConfig"}],
      "functions": [{"line": 30, "name": "create_app"}, {"line": 85, "name": "register_blueprints"}],
      "import_count": 2,
      "class_count": 1,
      "function_count": 2
    }
    

6.1.5. refresh_index

プロジェクトのファイルインデックスを強制的に再構築します。

  • 引数: なし
  • 戻り値: (str)
    • インデックス更新処理の結果を示すメッセージ。新たに見つかったファイル数が含まれます。
  • 機能概要:
    メモリ上および永続ストレージ上の既存のファイルインデックスをクリアし、プロジェクトディレクトリを再度スキャンして最新の状態でインデックスを構築し直します。ファイルが追加・削除・変更された際に有効です。
  • 使用例 (LLMへの指示):
    プロジェクトのインデックスを最新の状態に更新してください。
    ツール呼び出し (内部処理):
    refresh_index
  • 期待される応答 (例):
    Project re-indexed. Found 250 files.

6.1.6. get_settings_info

Code Index MCP の現在の設定情報や統計情報を取得します。

  • 引数: なし
  • 戻り値: (Dict[str, Any])
    • 設定ディレクトリのパス、一時ディレクトリのパス、設定ファイル (config.json) の内容、各種キャッシュファイルの統計情報などを含む辞書。
  • 機能概要:
    Code Index MCP の動作設定や、キャッシュされているデータの状況などを確認できます。プロジェクトパスが未設定の場合でも、一時ディレクトリに関する基本情報は表示されます。
  • 使用例 (LLMへの指示):
    Code Indexer の設定情報を表示してください。
    ツール呼び出し (内部処理):
    get_settings_info
  • 期待される応答 (例):
    {
      "settings_directory": "/Users/username/my_project/.code_indexer",
      "temp_directory": "/var/folders/xyz/T/code_indexer",
      "temp_directory_exists": true,
      "config": {
        "base_path": "/Users/username/my_project",
        "supported_extensions": [".py", ".js", /* ... */],
        "last_indexed": "2024-06-05T14:30:00Z"
      },
      "stats": {
        "config_file_size": 150,
        "index_file_size": 6200,
        "cache_file_size": 15300
      },
      "exists": true
    }
    

6.2. ユーティリティツール

6.2.1. create_temp_directory

Code Index MCP がインデックスデータなどを一時的に保存するための一時ディレクトリを作成します。

  • 引数: なし
  • 戻り値: (Dict[str, Any])
    • 一時ディレクトリのパス、作成前の存在状況、実際の作成成否、READMEファイルの作成成否などを含む辞書。
  • 機能概要:
    システム標準の一時領域内に code_indexer という名前のディレクトリを作成します (まだ存在しない場合)。このディレクトリは、プロジェクトごとの設定やキャッシュデータを保存するベースとなります。
  • 使用例 (LLMへの指示):
    Code Indexer の一時ディレクトリを作成してください。
    ツール呼び出し (内部処理):
    create_temp_directory
  • 期待される応答 (例):
    {
      "temp_directory": "/var/folders/xyz/T/code_indexer",
      "existed_before": false,
      "created": true,
      "readme_created": true,
      "exists_now": true,
      "is_directory": true
    }
    

6.2.2. check_temp_directory

Code Index MCP が使用する一時ディレクトリの状態を確認します。

  • 引数: なし
  • 戻り値: (Dict[str, Any])
    • 一時ディレクトリのパス、存在有無、ディレクトリであるか否か、ルート一時ディレクトリのパス、および存在する場合はその内容 (プロジェクトごとのサブディレクトリ情報を含む) を含む辞書。
  • 機能概要:
    code_indexer の一時ディレクトリの現在の状態を詳細に報告します。存在する場合は、その中に格納されているプロジェクトごとのキャッシュディレクトリなどの情報もリストアップします。
  • 使用例 (LLMへの指示):
    Code Indexer の一時ディレクトリの状態を確認してください。
    ツール呼び出し (内部処理):
    check_temp_directory
  • 期待される応答 (例):
    {
      "temp_directory": "/var/folders/xyz/T/code_indexer",
      "exists": true,
      "is_directory": true,
      "temp_root": "/var/folders/xyz/T",
      "contents": ["project_A_hash", "project_B_hash", "README.md"],
      "subdirectories": [
        {
          "name": "project_A_hash",
          "path": "/var/folders/xyz/T/code_indexer/project_A_hash",
          "contents": ["config.json", "index.json", "cache.json"]
        }
      ]
    }
    

6.2.3. clear_settings

現在のプロジェクトに関連する全ての設定情報とキャッシュデータをクリアします。

  • 引数: なし
  • 戻り値: (str)
    • 設定とキャッシュが正常にクリアされたことを示すメッセージと、対象となった設定ディレクトリのパス。
  • 機能概要:
    現在アクティブなプロジェクトに関して、ディスク上に保存されている全ての設定ファイル (設定情報、ファイルインデックス、コンテンツキャッシュ) を削除します。同時に、メモリ上にロードされているインデックスとキャッシュもクリアされます。
  • 使用例 (LLMへの指示):
    現在のプロジェクトのCode Indexer設定とキャッシュを全てクリアしてください。
    ツール呼び出し (内部処理):
    clear_settings
  • 期待される応答 (例):
    All settings and cache cleared from /Users/username/my_project/.code_indexer

7. LLMとの連携・使用例

Code Index MCP は、LLM (例: Claude) との連携を前提として設計されています。LLMはユーザーの指示を解釈し、適切なツールを呼び出したり、提供されたプロンプトを利用して対話を進めたりします。

7.1. ツール直接呼び出しの例

LLMは、ユーザーの具体的な指示に応じて、上記で説明した各ツールを直接呼び出すことができます。

7.1.1. プロジェクトパスの設定

ユーザー: 作業対象のプロジェクトを "/path/to/my_project" に変更して。
LLM (内部処理): set_project_path path="/path/to/my_project"

7.1.2. コードパターンの検索

ユーザー: プロジェクト全体で "TODO:" というコメントが含まれる箇所を探して。
LLM (内部処理): search_code query="TODO:"

7.1.3. ファイルサマリーの取得

ユーザー: メインの処理が書かれている "main.py" の概要を教えて。
LLM (内部処理): get_file_summary file_path="main.py" (プロジェクトルートに main.py があると仮定)

7.1.4. 特定の種類の全ファイル検索

ユーザー: このプロジェクトに含まれる全てのマークダウンファイルをリストアップして。
LLM (内部処理): find_files pattern="*.md"

7.2. プロンプト経由の対話例

Code Index MCP は、特定のシナリオにおけるLLMとの対話を円滑にするための「プロンプト」も定義しています。これらは、LLMがユーザーとより自然に対話を進めるためのテンプレートや開始点として機能します。

7.2.1. analyze_code プロンプト

プロジェクト内の特定のコードについて分析を依頼する際の対話を開始します。

  • 機能: ユーザーが特定のファイルやコード片について質問や分析依頼をした際に、LLMがプロジェクト全体の文脈を考慮しつつ分析を進めるための対話フローを促します。
  • 対話例:
    ユーザー: src/payment_processor.py の process_payment 関数のロジックが複雑なので、分かりやすく説明してほしい。
    LLM (プロンプト利用): 承知しました。src/payment_processor.py の process_payment 関数についてですね。まずプロジェクト全体の構造を把握し、関連する他のファイルやモジュールとの関係性を確認した上で、関数のロジックを詳細に分析し、ご説明します。少々お時間をください。

7.2.2. code_search プロンプト

コードベース全体から特定の情報を検索する際の対話を開始します。

  • 機能: ユーザーが曖昧な表現で検索を依頼した場合でも、LLMが検索クエリを具体化し、検索結果を分かりやすく提示するための対話フローを促します。
  • 対話例:
    ユーザー: データベースへの接続設定がどこに書かれているか探して。
    LLM (プロンプト利用): データベース接続設定ですね。関連しそうなキーワード (例: "database_url", "db_config", "connect_db") でコード全体を検索し、設定が記述されていそうな箇所を特定します。見つかった箇所とその周辺コードを提示し、どの部分が設定に該当するかをご説明します。

7.2.3. set_project プロンプト

Code Index MCP を利用する上で最初に必要となるプロジェクトパスの設定をユーザーに促す対話を開始します。

  • 機能: ユーザーがプロジェクトパスを指定せずにCode Index MCPの機能を利用しようとした場合に、LLMが親切に設定手順を案内するための対話フローを促します。
  • 対話例:
    ユーザー: このコードのバグを見つけて。 (プロジェクトパス未設定状態)
    LLM (プロンプト利用): コードの分析やバグ発見のお手伝いをするためには、まず対象となるプロジェクトの場所を教えていただく必要があります。お手数ですが、プロジェクトのルートフォルダのパスをフルパスでご指定いただけますでしょうか? (例: Windows: "C:/Users/username/dev/my_app", macOS/Linux: "/home/username/dev/my_app") パスを指定していただければ、set_project_path ツールを使ってプロジェクトを認識させます。

8. 開発者向け情報

8.1. ソースからのビルド

開発やカスタマイズのために、ソースコードから直接ビルドして実行することも可能です。

  1. リポジトリのクローン:
    git clone https://github.com/johnhuang316/code-index-mcp.git
    cd code-index-mcp
    
  2. 依存関係のインストール (uv を使用する場合):
    uv sync
    
    (pip を使用する場合は pip install -r requirements.txt など)
  3. サーバーのローカル実行 (uv を使用する場合):
    uv run code_index_mcp
    
    (直接実行する場合は python -m src.code_index_mcp など)

8.2. デバッグ方法

MCPサーバーの動作をデバッグする際には、MCP Inspector のようなツールが役立ちます。

npx @modelcontextprotocol/inspector uvx code-index-mcp

これにより、MCPサーバーとの間のリクエストやレスポンスを詳細に確認できます。

9. まとめ

Code Index MCP は、大規模言語モデル (LLM) が開発者のコードリポジトリを深く理解し、より高度なサポートを提供するための強力なバックエンドシステムです。
本資料で解説した各種機能やツールを活用することで、コード検索、ファイル分析、プロジェクト全体の把握といった作業を効率化し、開発プロセス全体の生産性向上に貢献します。
LLMとの連携を通じて、これまでにないインテリジェントなコーディング支援体験を実現します。

10. 質疑応答

ご不明な点、より詳細な情報が必要な場合、または特定のユースケースに関するご相談がありましたら、お気軽にお尋ねください。

Discussion