UE5 の 5.8 で追加された MCP Server はまだ実験機能扱いで、特に画面キャプチャ系の命令に問題がありました。画像を正しく認識できないだけでなく、使用するとコンテキストウィンドウが溢れてツールが停止してしまいます。
本来画像型として返すべきデータを文字列で返していることが原因です。文字列化した画像データは非常に大きくトークンも消費します。詳しくは先日の記事で解説しています。
そこで、クライアントソフトと UE5 の MCP サーバーとの間に入って、キャプチャデータを認識可能な画像型に変換する MCP サーバーを作ってみました。(Claude が作りました)
ClaudeCode等 --> UE5 mcp server間に挟んで以下のようにします
ClaudeCode等 --> mcp-filter-adapter --> UE5 mcp serverこれで下の画像のように、Claude Code から画面キャプチャ系の MCP ツールを使って UE5 の Viewport や Editor 全体を認識できるようになります。AI が画面を見ながら操作できるわけです。もちろんこのツールもただの MCP サーバーなので、他のクライアントでも利用できます。

使い方
以下、すでに UE5 の MCP サーバー自体のセットアップは完了しているものとします。セットアップ手順はこちら。
- Python 実行用に uv をインストールしておきます
- GitHub のリポジトリから git clone します
git clone https://github.com/hiroog/mcp-filter-adapter.git- 仮に C:\mcp で clone したものとします。フォルダは C:\mcp\mcp-filter-adapter です
- クライアントに合わせて mcp.json 等の設定をします
- 例えば Claude Code の場合は以下のようになります
{
"mcpServers": {
"unreal-mcp": {
"command": "uv",
"args": [
"run",
"--directory", "C:\\mcp\\mcp-filter-adapter",
"mcp-filter-adapter",
"--upstream", "http://127.0.0.1:8000/mcp"
]
}
}
}- 既存の UE5 mcp server の設定を置き換える形で上書きしてください。UE5 の mcp server には必ず mcp-filter-adapter 経由でアクセスするようにします。
--directory後ろのパラメータは mcp-filter-adapter を clone して出来た実際のパスに置き換えてください。--upstreamの後ろには UE5 mcp server の URL を指定します。デフォルトのまま利用している場合は書き換える必要ありません。
このあと Claude Code 等のクライアントを完全に終了して立ち上げ直すと、これまでと同じように UE5 の MCP サーバーの Tool が見えているはずです。さらに Tool を使って UE5 の画面のキャプチャを取得することが可能です。
UE5 5.8 MCPサーバーの EditorToolset.EditorAppToolset に含まれる画像系命令は以下のとおりです
| Tool名 | 機能 |
|---|---|
CaptureViewport | ビューポートのキャプチャ |
CaptureEditorImage | エディタ全体のキャプチャ |
CaptureAssetImage | アセットのサムネイル取得 |
mcp-filter-adapter がやっていること
UE5 MCP Server のツール呼び出しが返してくる text に、画像と思われるデータが含まれている場合は json をデコードして画像型に変換します。
UE5 MCP Server は画像データの場合でも以下のように json 構造が文字列化されて type=”text” で返ります。
{ "content": [ { "type": "text", "text": "{\"returnValue\":{\"image\":{\"mimeType\":\"image/png\",\"data\":\"iVBORw0KG...\"}}}" } ] }画像が含まれる場合のみこれを以下のように type = “image” の画像型に変換します。
{ "content": [
{ "type": "image", "mimeType": "image/png", "data": "iVBORw0KG..." },
{ "type": "text", "text": "{\"returnValue\": {\"image\": \"<image #0>\", \"cameraFOV\": 90, ...}}" } ] }画像が含まれていない場合は何も変換せずそのまま返します。