UE5 5.8 では実験機能として MCP サーバー機能が追加されました。Plugin として組み込まれており、設定で有効化することができます。MCP を使うとさまざまな AI 用クライアントと接続することが可能で、AI エージェントが直接 Unreal Engine を操作できるようになります。
UE5 5.8 Preview 版との違い
5.8 Preview 版エンジンでも MCP 機能はあったのですが、いくつか問題がありました。5.8 Release 版ではそのあたりが改善されているようです。なお UE5 5.8 Release 版付属であっても MCP 機能自体は実験機能扱いです。今後仕様が変わる可能性があります。
Preview 付属版では load_toolset 命令を使って必要な Tool だけ有効化していく仕組みでした。ただし load すると各 Tool が直接 Function Calling 用のテーブルに組み込まれるため、仮に全部ロードしてしまうと 700 以上もの関数がアクティブになります。そんな使い方はしないと思いますが、この場合 Tool の定義だけで Context Window のおよそ 150K ほどを占有する計算です。またクライアントアプリ次第ですが、ロードした Tool はそのセッションでは有効にならない可能性があります。
他にも関数名に本来使えないはずのドット ‘.’ が含まれていたり、関数名だけで 64 文字を超えるなど Tool の仕様に沿っていないので、使用する LLM の API によってはエラーになっていました。
Release 付属版では直接 Tool として関数を公開せずに、call_tool 命令を使って間接的に呼び出す仕組みに変更されています。LLM に直接公開される関数は 3つだけです。
list_toolsets
describe_toolset
call_tool
list_toolsets, describe_toolset を使って存在する命令の使い方を調べつつ、call_tool に独自の “命令名” とパラメータを渡して実際の呼び出しを行うわけです。間接的にはなりますが、API 側の Tool とは別のネームスペースなるので関数名の制約を受けなくなります。また Tool 定義だけで Context Window を大量に消費することもなくなり効率化されます。
ちなみに Release 付属版でも Editor Preferences → “Model Context Protocol” の “Enable Tool Search” を false にすると Tool として全部ロードされるので注意してください。
他にも Preview だと Python script で例外などのエラーが呼び出し元に返っておらず、何が原因でエラーになったのか AI 側で判断できずにはまってしまうことがありました。Release 付属版ではそういった問題も解消されているようです。
MCP 機能を有効化する
以下何らかのサンプルプロジェクトを作成して Editor が開いてる状態を想定しています。
(1) Editor の言語を英語にします (重要)
メニューの「編集」→「エディタの環境設定」→左側一般の中にある「地域&言語」
「エディタの言語」を “日本語” から “英語” に変更
Unreal Editor を一旦閉じて起動し直す
日本語設定のままだと、Blueprint (BP) のノード名やピン名が日本語のまま AI に渡されます。この場合 AI が混乱してしまうようで、うまく BP ノードの編集ができないことがあります。英語に切り替えておくことをお勧めします。
(2) プラグインを有効化します
メニューの「Edit」→「Plugins」
一番上の検索欄に「mcp」を入力
候補に出てきた「Unreal MCP」にチェックを入れる
“MCP Client Toolset” の方は不要です
同じように検索欄で「toolset」を入力
ここに出てきた候補が MCP 用の命令郡になります
候補に出てきた「Editor Toolset」にチェックを入れる
他にも必要なものがあればチェックを入れます
ちなみに “All Toolset” にチェックを入れると、大半のツールが自動的に有効になります
Unreal Editor を起動し直す
あまり多くのツールを有効化してしまうと効率が悪くなるので、最初は最小限にしておくことをお勧めします。
(3) MCP サーバーを起動します
メニューの「Edit」→「Editor Preferences…」→ 左側 General の中にある「Model Context Protocol」
「Auto Start Server」にチェックを入れておく
注意: “Enable Tool Search” には必ずチェックを入れた状態にしてください
Unreal Editor を起動し直す
Editor を起動し直す代わりにコンソールコマンド「ModelContextProtocol.StartServer」を実行しても構いません。
クライアント (AI エージェント) から接続する
Claude Code や Codex 等、各種ツールに合わせて設定します。設定方法はクライアントアプリごとに異なるのでそちらに従ってください。
設定ファイルの自動生成を使う場合
メジャーなツールに関しては自動的に設定ファイルを生成する機能があるようです。コンソールコマンドで「ModelContextProtocol.GenerateClientConfig All」を実行すると、プロジェクトフォルダに “.mcp.json” 等の設定ファイルが作られます。詳しくはドキュメントを参照してください。
手動で設定する場合
mcp.json 等への設定例は以下のとおりです。
{
"mcpServers" : {
"ue5" : {
"type" : "http" ,
"url" : "http://127.0.0.1:8000/mcp"
}
}
}
Streamable HTTP に対応していないクライアントの場合は以下のような設定が必要かもしれません。
{
"mcpServers" : {
"ue5" : {
"command" : "cmd" ,
"args" : [
"/c" ,
"npx" ,
"-y" ,
"mcp-remote" ,
"http://127.0.0.1:8000/mcp"
]
}
}
}
接続確認
先に UE5 Unreal Editor を起動した状態にしてから、コーディング AI エージェント (MCP クライアント) を立ち上げます。「UE5の現在のレベル名は?」など簡単な質問をしてみてください。
使ってみる
MCP で UE5 に接続した AI エージェントから指示を出すと人間の代わりに操作してくれます。Actor の作成や BP の編集もできますが結構時間がかかります。学習による事前知識ゼロなので、説明を見てひとつひとつ確認しながらノードやピンを繋いで構築していく感じです。DSL を使ってまとめて BP コードを編集することもできますが、エラーを出しながら AI もだいぶ試行錯誤しているようです。
UE5 5.8 で ThirdPersonTemplate (C++) のサンプルプロジェクトを作成し、簡単な BP 処理を実装してもらいました。
「Pキーでキャラクタから前方に球を発射するようにして。球は物理で転がるようにしたい」
マテリアルを割り当てたり調整もしてもらいました。
使用したコーディングエージェントは自作のもので、ローカル LLM を使っています。使ったモデルは Qwen3.6 27b (MTP) です。Context Window の消費量は 90~100K になりました。GPU は Radeon AI PRO R9700 32GB で、10分ほどかかっています。
CPU Ryzen 7 9700X RAM DDR5-5600 128GB GPU Radeon AI PRO R9700 32GB Model Qwen3.6 27b MTP (UD-Q4_K_XL) AI Agent 自作
他のモデルでも試してみました。
Qwen3.5 系 (Qwen3.5 27b / 122b-a10b) は一発で実装できず何度かやり取りが必要で、かつ手動での作業を求めてきました。
ローカルではなく Cloud のオープンモデルですが、DeepSeek-V4 Flash や GLM-5.2 はきちんと動作するものができました。
逆に Cloud の Gemma 4 31b (gemma4:31b-cloud) は途中で停止し、何度か継続したもののうまく実装できませんでした。ローカルでの Gemma 4 は未確認です。
Python とサンドボックス
各 Tool は直接呼び出すだけでなく、python スクリプトを使うことができます。繰り返し処理などは python を使ってくれるので効率が上がります。ただし使用できる命令は基本的に Toolset で有効にしたものと同じです。直接 UE5 の Python API (unreal module) を使うことはできず、また多くの外部モジュールは使用禁止となっています。これはサンドボックス化のためです。
クライアントの AI エージェント側をサンドボックス化したり情報へのアクセスを制限したとしても、mcp 経由で任意の python code を実行できると制限の意味がなくなってしまいます。python の標準の機能を使えばほぼ制限無くなんでもできるからです。よって安全のために Python の実行は多くの機能が制限されており、サンドボックス化されています。
BP の DSL 編集機能
BP の編集は Tool を使ってノードのピンをつなぎ、直接グラフを構築していくことができます。ただし大きなグラフの構築だと効率が悪いので、BP 自体をまとめてテキストで編集する機能があります。
read_graph_dsl
write_graph_dsl
試しに ThirdPersonTemplate (BP) の BP_ThirdPersonCharacter から EventGraph を取得してみるとこんな感じになりました。Lisp 風の表現となっています。
(event EnhancedInputActionIA_Move (ActionValue_X ActionValue_Y ElapsedSeconds TriggeredSeconds InputAction))
(event EnhancedInputActionIA_Look (ActionValue_X ActionValue_Y ElapsedSeconds TriggeredSeconds InputAction))
(event Touch|EventPrimaryThumbstick (Axis_X Axis_Y)
(CallFunction|Move Axis_X Axis_Y))
(event Touch|EventSecondaryThumbstick (Axis_X Axis_Y)
(CallFunction|Aim Axis_X Axis_Y))
(event EnhancedInputActionIA_MouseLook (ActionValue_X ActionValue_Y ElapsedSeconds TriggeredSeconds InputAction))
(event EnhancedInputActionIA_Jump (ActionValue ElapsedSeconds TriggeredSeconds InputAction))
(event Touch|EventTouchJumpStart
(Character|Jump))
(event Touch|EventTouchJumpEnd
(Character|StopJumping))
Move 関数はこのように定義されています。
(fn Move (X Axis Y Axis)
(Pawn|Input|AddMovementInput
(Math|Vector|GetRightVector (Pawn|GetControlRotation) 0.0 (Pawn|GetControlRotation)) X Axis)
(Pawn|Input|AddMovementInput
(Math|Vector|GetForwardVector 0.0 0.0 (Pawn|GetControlRotation)) Y Axis))
複雑な BP の構築でも、大量の Tool Call を使って力技で作っているわけではないことがわかります。
使ってみて
BP 編集は使い方を確認したり、試行錯誤がある分だけ時間がかかってトークンも消費します。知識にある汎用言語を使ってコード生成するのと比べると、どうしても効率は落ちていると思います。できるだけ性能が高いモデルを使った方が良いのかもしれません。BP ではなく C++ と Live Coding Toolset を使う方法もありますが、コードに問題があるとすぐ Editor が落ちますので今のところはどちらが良いとも言えません。UE6 でテキスト言語に回帰する理由もわかる気がします。もちろんまだ登場したばかりの新機能なので、今後改良が進んで使いやすくなっていくものと思われます。
関連ページ