Unreal Engine Code Analyzer MCP Server について
Unreal Engine Code Analyzer は、Unreal Engine 5 のソースコードおよびカスタム C++ コードベースを解析する MCP サーバーです。Claude や Cline などの AI アシスタントにエンジンコードを読解させたい開発者に向けており、C++ の解析には Tree-sitter を使用します。
主な機能
- 01C++ クラスのプロパティ、メソッド、継承情報の解析
- 02クラス階層と実装インターフェースの参照
- 03コンテキスト付きのコード検索とリファレンス検索
- 04サブシステム解析と共通パターンの検出
- 05カスタム C++ プロジェクトの解析
活用シーン
- 01AI アシスタントによる Unreal のクラス構造と継承関係の説明
- 02エンジンソース内の関数や変数の全リファレンスの検索
- 03カスタム C++ プロジェクトのコード構造の解析
MCP 対応
本サーバーは analyze_class、find_class_hierarchy、search_code、find_references などの解析ツールを、Claude Desktop や Cline などの MCP クライアントに公開します。利用前に set_unreal_path または set_custom_codebase でコードパスを設定する必要があります。
設定
ローカルサーバーの設定はどのクライアントでも共通です。コピーしてクライアントの MCP 設定ファイルに貼り付けてください。
このサーバーのパッケージやリモートエンドポイントはまだ取得できていません。プロジェクトの README の手順に従ってください。
ツール
ローカルサーバーのツールはマシン上で起動して初めて取得できます。メンテナーはまだツール一覧を提供していません。
詳細
Unreal Engine Code Analyzer MCP Server
Unreal Engine のコードベースに強力なソースコード分析機能を提供する Model Context Protocol(MCP)サーバーです。このツールを使うと、Claude や Cline などの AI アシスタントが Unreal Engine のソースコードを深く理解し、分析できます。
機能
- クラス分析:メソッド、プロパティ、継承など、C++ クラスの詳細情報を取得します
- 階層マッピング:クラスの継承階層を可視化し、把握します
- コード検索:コンテキストを考慮した検索結果でコードを検索します
- 参照の検索:クラス、関数、変数へのすべての参照箇所を特定します
- サブシステム分析:レンダリング、物理など、Unreal Engine の主要なサブシステムを分析します
- ゲームジャンルの知識:ゲームジャンル、機能、実装パターンに関するナレッジベースを内蔵しています
- パターンの検出と学習:一般的な Unreal Engine のパターンを特定し、学習リソースを提供します
- カスタムコードベースのサポート:独自の Unreal Engine プロジェクトのコードベースを分析します
クイックスタート
インストール
- このリポジトリをクローンします:
git clone https://github.com/ayeletstudioindia/unreal-analyzer-mcp
cd unreal-analyzer-mcp
- 依存関係をインストールします:
npm install
- プロジェクトをビルドします:
npm run build
設定
Claude Desktop アプリの場合
Claude のデスクトップ設定ファイル(Windows の場合は %APPDATA%\Claude\claude_desktop_config.json)に以下を追加します:
{
"mcpServers": {
"unreal-analyzer": {
"command": "node",
"args": ["path/to/unreal-analyzer/build/index.js"],
"env": {}
}
}
}
Cline の場合
Cline の MCP 設定ファイル(Windows の場合は %APPDATA%\Code\User\globalStorage\saoudrizwan.claude-dev\settings\cline_mcp_settings.json)に以下を追加します:
{
"mcpServers": {
"unreal-analyzer": {
"command": "node",
"args": ["path/to/unreal-analyzer/build/index.js"],
"env": {}
}
}
}
技術詳細
このアナライザーは以下を使用して構築されています:
- 型安全なコードを実現する TypeScript
- 堅牢な C++ 解析を実現する Tree-sitter
- AI アシスタントとの統合を実現する Model Context Protocol SDK
- ファイルパターンの照合に使う Glob
主な依存関係:
- @modelcontextprotocol/create-server: ^0.1.0
- tree-sitter: ^0.20.1
- tree-sitter-cpp: ^0.20.0
- glob: ^8.1.0
使用方法
分析ツールを使用する前に、Unreal Engine のソースパスまたはカスタムコードベースのパスを設定する必要があります:
分析の設定
Unreal Engine ソースコードの場合
{
"name": "set_unreal_path",
"arguments": {
"path": "/path/to/UnrealEngine/Source"
}
}
カスタム C++ コードベースの場合
{
"name": "set_custom_codebase",
"arguments": {
"path": "/path/to/your/codebase"
}
}
カスタムコードベース機能を使うと、あらゆる C++ プロジェクトを分析できます。例:
- ゲームエンジン(Unity、Godot、カスタムエンジン)
- グラフィックスライブラリ(OpenGL、Vulkan、DirectX)
- フレームワーク(Qt、Boost、SFML)
- あらゆる C++ アプリケーションやライブラリ
カスタムゲームエンジンを分析する例:
// Initialize with custom codebase
{
"name": "set_custom_codebase",
"arguments": {
"path": "/path/to/game-engine"
}
}
// Analyze engine's renderer class
{
"name": "analyze_class",
"arguments": {
"className": "Renderer"
}
}
// Find all shader-related code
{
"name": "search_code",
"arguments": {
"query": "shader|glsl|hlsl",
"filePattern": "*.{h,cpp,hpp}"
}
}
// Get render system class hierarchy
{
"name": "find_class_hierarchy",
"arguments": {
"className": "RenderSystem",
"includeImplementedInterfaces": true
}
}
Qt アプリケーションを分析する例:
// Initialize with Qt project
{
"name": "set_custom_codebase",
"arguments": {
"path": "/path/to/qt-app"
}
}
// Find widget class definitions
{
"name": "search_code",
"arguments": {
"query": "class.*:.*public.*QWidget",
"filePattern": "*.h"
}
}
// Analyze main window class
{
"name": "analyze_class",
"arguments": {
"className": "MainWindow"
}
}
// Find signal/slot connections
{
"name": "find_references",
"arguments": {
"identifier": "connect",
"type": "function"
}
}
利用可能なツール
1. クラス分析
// Get detailed information about the AActor class
{
"name": "analyze_class",
"arguments": {
"className": "AActor"
}
}
出力例:
{
"name": "AActor",
"properties": [
{
"name": "RootComponent",
"type": "USceneComponent*",
"access": "protected"
}
// ... other properties
],
"methods": [
{
"name": "BeginPlay",
"returnType": "void",
"access": "protected",
"virtual": true
}
// ... other methods
]
}
2. クラス階層分析
// Get the inheritance hierarchy for ACharacter
{
"name": "find_class_hierarchy",
"arguments": {
"className": "ACharacter",
"includeImplementedInterfaces": true
}
}
出力例:
{
"class": "ACharacter",
"inheritsFrom": "APawn",
"interfaces": ["IMovementModeInterface"],
"hierarchy": [
"ACharacter",
"APawn",
"AActor",
"UObject"
]
}
3. 参照の検索
// Find all references to the BeginPlay function
{
"name": "find_references",
"arguments": {
"identifier": "BeginPlay",
"type": "function"
}
}
出力例:
{
"references": [
{
"file": "Actor.cpp",
"line": 245,
"context": "void AActor::BeginPlay() { ... }"
},
{
"file": "Character.cpp",
"line": 178,
"context": "Super::BeginPlay();"
}
]
}
4. コード検索
// Search for physics-related code
{
"name": "search_code",
"arguments": {
"query": "PhysicsHandle",
"filePattern": "*.h",
"includeComments": true
}
}
出力例:
{
"matches": [
{
"file": "PhysicsEngine/PhysicsHandleComponent.h",
"line": 15,
"context": "class UPhysicsHandleComponent : public UActorComponent",
"snippet": "// Component used for grabbing and moving physics objects"
}
]
}
5. パターン検出とベストプラクティス
このアナライザーには、Unreal Engine のベストプラクティスを理解して実践するための強力なツールが2つ用意されています:
パターン検出
// Detect patterns in a file
{
"name": "detect_patterns",
"arguments": {
"filePath": "Source/MyGame/MyActor.h"
}
}
出力例:
{
"patterns": [
{
"pattern": "UPROPERTY Macro",
"description": "Property declaration for Unreal reflection system",
"location": "Source/MyGame/MyActor.h:15",
"context": "UPROPERTY(EditAnywhere, BlueprintReadWrite)\nfloat Health;",
"improvements": "Consider adding a Category specifier for better organization\nConsider adding Meta tags for validation",
"documentation": "https://docs.unrealengine.com/5.0/en-US/unreal-engine-uproperty-specifier-reference/",
"bestPractices": "Use appropriate specifiers (EditAnywhere, BlueprintReadWrite)\nConsider replication needs (Replicated, ReplicatedUsing)\nGroup related properties with categories",
"examples": "UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = \"Combat\")\nfloat Health;\nUPROPERTY(Replicated, Meta = (ClampMin = \"0.0\"))\nfloat Speed;"
}
]
}
ベストプラクティスガイド
// Get best practices for specific Unreal concepts
{
"name": "get_best_practices",
"arguments": {
"concept": "UPROPERTY" // or UFUNCTION, Components, Events, Replication, Blueprints
}
}
出力例:
{
"description": "Property declaration for Unreal reflection system",
"bestPractices": [
"Use appropriate specifiers (EditAnywhere, BlueprintReadWrite)",
"Consider replication needs (Replicated, ReplicatedUsing)",
"Group related properties with categories",
"Use Meta tags for validation and UI customization"
],
"examples": [
"UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = \"Combat\")\nfloat Health;",
"UPROPERTY(Replicated, Meta = (ClampMin = \"0.0\"))\nfloat Speed;"
],
"documentation": "https://docs.unrealengine.com/5.0/en-US/unreal-engine-uproperty-specifier-reference/"
}
ベストプラクティスガイドでは、Unreal Engine の以下の重要な概念を扱います:
- UPROPERTY:プロパティのリフレクションと公開
- UFUNCTION:関数のリフレクションと Blueprint との統合
- コンポーネント:コンポーネントの作成と管理
- イベント:イベント処理とデリゲート
- レプリケーション:ネットワークレプリケーションの設定
- ブループリント:Blueprint と C++ の連携パターン
6. API ドキュメントの検索
// Search the API documentation
{
"name": "query_api",
"arguments": {
"query": "Actor",
"category": "Object",
"module": "Core",
"includeExamples": true,
"maxResults": 10
}
}
出力例:
{
"results": [
{
"class": "AActor",
"description": "Base class for all actors in the game",
"module": "Core",
"category": "Object",
"syntax": "class AActor : public UObject",
"examples": [
"// Create a new actor\nAActor* MyActor = GetWorld()->SpawnActor<AActor>();"
],
"remarks": [
"Actors are the base building blocks of the game",
"Can be placed in levels or spawned dynamically"
],
"documentation": "https://dev.epicgames.com/documentation/en-us/unreal-engine/API/Core/AActor",
"relevance": 100
}
]
}
API ドキュメント検索ツールでは、以下のことができます:
- クラスのドキュメント全体を対象とした全文検索
- カテゴリーとモジュールによるフィルタリング
- コード例と使用パターンの確認
- 関連度に基づく検索結果の並べ替え
- 公式ドキュメントへのリンク
7. サブシステム分析
// Analyze the Physics subsystem
{
"name": "analyze_subsystem",
"arguments": {
"subsystem": "Physics"
}
}
出力例:
{
"name": "Physics",
"coreClasses": [
"UPhysicsEngine",
"FPhysScene",
"UBodySetup"
],
"keyFeatures": [
"PhysX integration",
"Collision detection",
"Physical materials"
],
"commonUseCases": [
"Character movement",
"Vehicle simulation",
"Destructible environments"
]
}
API ドキュメント
アナライザーには、包括的な API ドキュメント作成機能が追加されました。
-
ドキュメントの自動生成
- ソースコードのコメントからドキュメントを抽出します
- クラスの構造と関係を分析します
- クラスを種類やモジュールごとに分類します
- 構文例と使用パターンを生成します
-
スマート検索
- すべてのドキュメントを対象とした全文検索
- 関連度に基づく検索結果の順位付け
- カテゴリとモジュールによる絞り込み
- コード例の掲載
-
ドキュメントのカテゴリ
- オブジェクト:ベースオブジェクトクラス(UObject の派生クラス)
- アクター:アクタークラス(AActor の派生クラス)
- 構造体:データ構造と型
- コンポーネント:コンポーネントクラス
- その他:その他のクラスとユーティリティ
-
モジュールの構成
- Core:エンジンの中核機能
- RenderCore:レンダリングシステム
- PhysicsCore:物理エンジン
- その他のエンジンモジュール
-
既存ツールとの連携
- 詳細情報を得るためにクラス分析と連携します
- ベストプラクティスを得るためにパターン検出と連携します
- Unreal Engine の公式ドキュメントを参照します
- 学習リソースと例を提供します
ベストプラクティス
- 分析ツールを使用する前に、Unreal Engine のパスまたはカスタムコードベースのパスを必ず設定してください
- 分析時には、具体的なクラス名を使用してください(例:「Class」だけでなく「MyClass」)
search_codeのファイルパターンパラメーターを活用して、検索結果を絞り込んでください- クラス階層を分析する際は、全体像を把握できるよう、実装されているインターフェースも含めてください
- 特定のクラスを詳しく調べる前に、サブシステム分析ツールを使用して概要を把握してください(Unreal Engine のみ)
エラー処理
アナライザーは、次の場合に明確なエラーメッセージを出力します。
- コードベースのパス(Unreal Engine またはカスタム)が設定されていない
- 指定されたパスが存在しない、またはアクセスできない
- コードベース内でクラスまたはシンボルが見つからない
- 無効なファイルパターンが指定されている
- 検索クエリまたは C++ コードに構文エラーがある
- ソースファイルへのアクセスが制限されている
- C++ ファイルの Tree-sitter による解析に失敗する
パフォーマンスに関する考慮事項
- 大規模なコードベースは、分析に時間がかかる場合があります
- 複雑なクラス階層の処理には、より多くの時間がかかる場合があります
- 範囲の広い検索パターンでは、多数の一致が見つかる可能性があります
- より速く結果を得るには、より具体的なクエリを使用してください
テスト
このプロジェクトでは、主要なすべてのコンポーネントを対象に、包括的なテストカバレッジを用意しています。
テストカバレッジ
-
アナライザーテスト:UnrealCodeAnalyzer クラスの中核機能テスト
- 初期化とパスの検証
- クラスの分析と解析
- 参照の検索
- コード検索
- サブシステム分析
- キャッシュ管理
-
ゲームジャンルテスト:ゲームジャンルのナレッジベースの検証
- データ構造の検証
- ジャンル固有の機能の検証
- コンポーネントの命名規則
- データの完全性チェック
-
MCP サーバーテスト:MCP サーバー実装のテスト
- サーバーの初期化
- ツールの登録と処理
- リクエストとレスポンスの検証
- エラー処理
- ツール固有の機能テスト
テストの実行
すべてのテストを実行します。
npm test
ウォッチモードでテストを実行します(開発中に便利です)。
npm run test:watch
テストの作成
新機能を追加する際は、以下を確認してください。
- 新たに追加した機能に対応するテストカバレッジを用意する
- テストを
src/__tests__ディレクトリに整理する - 外部依存関係を適切にモックする
- 一貫性を保つため、既存のテストパターンに従う
貢献
貢献を歓迎します。以下の改善に向けたプルリクエストをぜひお送りください。
- ソースコード解析機能
- 新しい分析機能
- パフォーマンスの最適化
- ドキュメントの改善
- テストカバレッジ
PR を提出する前に、以下を確認してください。
- すべてのテストに合格すること(
npm test) - 新機能のテストを追加すること
- 必要に応じてドキュメントを更新すること
コメント
AI アプリケーションが外部のツールやデータソースに統一的な方法で接続するためのオープンなプロトコルです。クライアントはモデルとの対話を担い、MCP サーバーはツール・リソース・プロンプトテンプレートを提供します。標準メッセージでやり取りするため、1 つのサーバーを複数のクライアントで再利用できます。
