ultimate-unreal-engine-mcp 0.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (124) hide show
  1. package/README.md +729 -0
  2. package/dist/build/error-parser.js +51 -0
  3. package/dist/build/fix-suggester.js +84 -0
  4. package/dist/build/ubt-runner.js +146 -0
  5. package/dist/cli.js +13 -0
  6. package/dist/config.js +8 -0
  7. package/dist/docs/data/ue57-api.js +228 -0
  8. package/dist/docs/doc-index.js +110 -0
  9. package/dist/docs/types.js +4 -0
  10. package/dist/generators/class-generator.js +363 -0
  11. package/dist/generators/file-modifier.js +276 -0
  12. package/dist/generators/uht-validator.js +177 -0
  13. package/dist/index.js +89 -0
  14. package/dist/parsers/cpp-class-index.js +230 -0
  15. package/dist/parsers/cpp-parser.js +369 -0
  16. package/dist/parsers/ini-parser.js +216 -0
  17. package/dist/parsers/uproject-parser.js +130 -0
  18. package/dist/plugin-bridge/client.js +217 -0
  19. package/dist/plugin-bridge/protocol.js +6 -0
  20. package/dist/plugin-bridge/retry.js +23 -0
  21. package/dist/setup.js +209 -0
  22. package/dist/tools/ai-systems/index.js +247 -0
  23. package/dist/tools/ai-systems/types.js +4 -0
  24. package/dist/tools/animation/index.js +241 -0
  25. package/dist/tools/animation/types.js +4 -0
  26. package/dist/tools/audio/index.js +204 -0
  27. package/dist/tools/audio/types.js +4 -0
  28. package/dist/tools/blueprint/index.js +495 -0
  29. package/dist/tools/blueprint/types.js +4 -0
  30. package/dist/tools/build/index.js +163 -0
  31. package/dist/tools/chaos/index.js +230 -0
  32. package/dist/tools/chaos/types.js +4 -0
  33. package/dist/tools/collision-physics/index.js +211 -0
  34. package/dist/tools/config/index.js +288 -0
  35. package/dist/tools/cpp/index.js +305 -0
  36. package/dist/tools/docs/index.js +251 -0
  37. package/dist/tools/editor/index.js +242 -0
  38. package/dist/tools/gas/index.js +222 -0
  39. package/dist/tools/gas/types.js +5 -0
  40. package/dist/tools/import-export/index.js +218 -0
  41. package/dist/tools/input/index.js +146 -0
  42. package/dist/tools/known-issues/index.js +88 -0
  43. package/dist/tools/known-issues/middleware.js +55 -0
  44. package/dist/tools/known-issues/store.js +125 -0
  45. package/dist/tools/livelink/index.js +203 -0
  46. package/dist/tools/livelink/types.js +4 -0
  47. package/dist/tools/material/index.js +190 -0
  48. package/dist/tools/motion-design/index.js +251 -0
  49. package/dist/tools/motion-design/types.js +6 -0
  50. package/dist/tools/movie-render/index.js +220 -0
  51. package/dist/tools/networking/index.js +149 -0
  52. package/dist/tools/pcg/index.js +164 -0
  53. package/dist/tools/selection/index.js +180 -0
  54. package/dist/tools/sequencer/index.js +218 -0
  55. package/dist/tools/validation/index.js +183 -0
  56. package/dist/tools/validation/types.js +4 -0
  57. package/dist/tools/viewport/index.js +310 -0
  58. package/dist/tools/worldpartition/index.js +226 -0
  59. package/dist/tools/worldpartition/types.js +4 -0
  60. package/dist/utils/execFileNoThrow.js +40 -0
  61. package/dist/utils/logger.js +27 -0
  62. package/dist/utils/path-guard.js +26 -0
  63. package/package.json +40 -0
  64. package/unreal-plugin/MCPBridge/MCPBridge.uplugin +29 -0
  65. package/unreal-plugin/MCPBridge/Source/MCPBridgeEditor/MCPBridgeEditor.Build.cs +68 -0
  66. package/unreal-plugin/MCPBridge/Source/MCPBridgeEditor/Private/MCPAICommands.cpp +919 -0
  67. package/unreal-plugin/MCPBridge/Source/MCPBridgeEditor/Private/MCPAICommands.h +23 -0
  68. package/unreal-plugin/MCPBridge/Source/MCPBridgeEditor/Private/MCPActorCommands.cpp +415 -0
  69. package/unreal-plugin/MCPBridge/Source/MCPBridgeEditor/Private/MCPActorCommands.h +16 -0
  70. package/unreal-plugin/MCPBridge/Source/MCPBridgeEditor/Private/MCPAnimationCommands.cpp +653 -0
  71. package/unreal-plugin/MCPBridge/Source/MCPBridgeEditor/Private/MCPAnimationCommands.h +24 -0
  72. package/unreal-plugin/MCPBridge/Source/MCPBridgeEditor/Private/MCPAssetCommands.cpp +290 -0
  73. package/unreal-plugin/MCPBridge/Source/MCPBridgeEditor/Private/MCPAssetCommands.h +17 -0
  74. package/unreal-plugin/MCPBridge/Source/MCPBridgeEditor/Private/MCPAudioCommands.cpp +624 -0
  75. package/unreal-plugin/MCPBridge/Source/MCPBridgeEditor/Private/MCPAudioCommands.h +22 -0
  76. package/unreal-plugin/MCPBridge/Source/MCPBridgeEditor/Private/MCPBlueprintHandlers.cpp +616 -0
  77. package/unreal-plugin/MCPBridge/Source/MCPBridgeEditor/Private/MCPBlueprintHandlers.h +25 -0
  78. package/unreal-plugin/MCPBridge/Source/MCPBridgeEditor/Private/MCPBlueprintWriteHandlers.cpp +744 -0
  79. package/unreal-plugin/MCPBridge/Source/MCPBridgeEditor/Private/MCPBlueprintWriteHandlers.h +24 -0
  80. package/unreal-plugin/MCPBridge/Source/MCPBridgeEditor/Private/MCPBridgeEditor.cpp +23 -0
  81. package/unreal-plugin/MCPBridge/Source/MCPBridgeEditor/Private/MCPBridgeSubsystem.cpp +149 -0
  82. package/unreal-plugin/MCPBridge/Source/MCPBridgeEditor/Private/MCPBridgeSubsystem.h +38 -0
  83. package/unreal-plugin/MCPBridge/Source/MCPBridgeEditor/Private/MCPChaosCommands.cpp +771 -0
  84. package/unreal-plugin/MCPBridge/Source/MCPBridgeEditor/Private/MCPChaosCommands.h +22 -0
  85. package/unreal-plugin/MCPBridge/Source/MCPBridgeEditor/Private/MCPCollisionPhysicsCommands.cpp +749 -0
  86. package/unreal-plugin/MCPBridge/Source/MCPBridgeEditor/Private/MCPCollisionPhysicsCommands.h +22 -0
  87. package/unreal-plugin/MCPBridge/Source/MCPBridgeEditor/Private/MCPEditorStateCommands.cpp +172 -0
  88. package/unreal-plugin/MCPBridge/Source/MCPBridgeEditor/Private/MCPEditorStateCommands.h +16 -0
  89. package/unreal-plugin/MCPBridge/Source/MCPBridgeEditor/Private/MCPGASCommands.cpp +715 -0
  90. package/unreal-plugin/MCPBridge/Source/MCPBridgeEditor/Private/MCPGASCommands.h +22 -0
  91. package/unreal-plugin/MCPBridge/Source/MCPBridgeEditor/Private/MCPImportExportCommands.cpp +679 -0
  92. package/unreal-plugin/MCPBridge/Source/MCPBridgeEditor/Private/MCPImportExportCommands.h +22 -0
  93. package/unreal-plugin/MCPBridge/Source/MCPBridgeEditor/Private/MCPInputHandlers.cpp +381 -0
  94. package/unreal-plugin/MCPBridge/Source/MCPBridgeEditor/Private/MCPInputHandlers.h +24 -0
  95. package/unreal-plugin/MCPBridge/Source/MCPBridgeEditor/Private/MCPLiveLinkCommands.cpp +504 -0
  96. package/unreal-plugin/MCPBridge/Source/MCPBridgeEditor/Private/MCPLiveLinkCommands.h +22 -0
  97. package/unreal-plugin/MCPBridge/Source/MCPBridgeEditor/Private/MCPMaterialCommands.cpp +511 -0
  98. package/unreal-plugin/MCPBridge/Source/MCPBridgeEditor/Private/MCPMaterialCommands.h +22 -0
  99. package/unreal-plugin/MCPBridge/Source/MCPBridgeEditor/Private/MCPMotionDesignCommands.cpp +1110 -0
  100. package/unreal-plugin/MCPBridge/Source/MCPBridgeEditor/Private/MCPMotionDesignCommands.h +28 -0
  101. package/unreal-plugin/MCPBridge/Source/MCPBridgeEditor/Private/MCPMovieRenderCommands.cpp +590 -0
  102. package/unreal-plugin/MCPBridge/Source/MCPBridgeEditor/Private/MCPMovieRenderCommands.h +16 -0
  103. package/unreal-plugin/MCPBridge/Source/MCPBridgeEditor/Private/MCPNetworkingCommands.cpp +482 -0
  104. package/unreal-plugin/MCPBridge/Source/MCPBridgeEditor/Private/MCPNetworkingCommands.h +16 -0
  105. package/unreal-plugin/MCPBridge/Source/MCPBridgeEditor/Private/MCPPieCommands.cpp +338 -0
  106. package/unreal-plugin/MCPBridge/Source/MCPBridgeEditor/Private/MCPPieCommands.h +16 -0
  107. package/unreal-plugin/MCPBridge/Source/MCPBridgeEditor/Private/MCPSelectionCommands.cpp +677 -0
  108. package/unreal-plugin/MCPBridge/Source/MCPBridgeEditor/Private/MCPSelectionCommands.h +22 -0
  109. package/unreal-plugin/MCPBridge/Source/MCPBridgeEditor/Private/MCPSequencerCommands.cpp +721 -0
  110. package/unreal-plugin/MCPBridge/Source/MCPBridgeEditor/Private/MCPSequencerCommands.h +16 -0
  111. package/unreal-plugin/MCPBridge/Source/MCPBridgeEditor/Private/MCPValidationCommands.cpp +368 -0
  112. package/unreal-plugin/MCPBridge/Source/MCPBridgeEditor/Private/MCPValidationCommands.h +22 -0
  113. package/unreal-plugin/MCPBridge/Source/MCPBridgeEditor/Private/MCPViewportCommands.cpp +1208 -0
  114. package/unreal-plugin/MCPBridge/Source/MCPBridgeEditor/Private/MCPViewportCommands.h +29 -0
  115. package/unreal-plugin/MCPBridge/Source/MCPBridgeEditor/Private/MCPWorldPartitionCommands.cpp +822 -0
  116. package/unreal-plugin/MCPBridge/Source/MCPBridgeEditor/Private/MCPWorldPartitionCommands.h +23 -0
  117. package/unreal-plugin/MCPBridge/Source/MCPBridgeEditor/Public/MCPBridgeEditor.h +14 -0
  118. package/unreal-plugin/MCPBridge/Source/MCPBridgeRuntime/MCPBridgeRuntime.Build.cs +28 -0
  119. package/unreal-plugin/MCPBridge/Source/MCPBridgeRuntime/Private/MCPBridgeRuntime.cpp +22 -0
  120. package/unreal-plugin/MCPBridge/Source/MCPBridgeRuntime/Private/MCPCommandRouter.cpp +118 -0
  121. package/unreal-plugin/MCPBridge/Source/MCPBridgeRuntime/Private/MCPTcpServer.cpp +196 -0
  122. package/unreal-plugin/MCPBridge/Source/MCPBridgeRuntime/Public/MCPBridgeRuntime.h +15 -0
  123. package/unreal-plugin/MCPBridge/Source/MCPBridgeRuntime/Public/MCPCommandRouter.h +55 -0
  124. package/unreal-plugin/MCPBridge/Source/MCPBridgeRuntime/Public/MCPTcpServer.h +59 -0
package/README.md ADDED
@@ -0,0 +1,729 @@
1
+ # Ultimate Unreal Engine MCP
2
+
3
+ **129 tools. 26 domains. Full read/write access to Unreal Engine 5.7 — including live editor APIs, Blueprint graphs, and viewport screenshots.**
4
+
5
+ [![License: MIT](https://img.shields.io/badge/License-MIT-blue.svg)](LICENSE)
6
+ [![Node 22+](https://img.shields.io/badge/Node.js-22%2B-brightgreen.svg)](https://nodejs.org/)
7
+ [![UE 5.7](https://img.shields.io/badge/Unreal%20Engine-5.7-orange.svg)](https://www.unrealengine.com/)
8
+ [![Tests](https://img.shields.io/badge/tests-1021%20passing-success.svg)](#development)
9
+ [![Tools](https://img.shields.io/badge/tools-129-informational.svg)](#tool-catalog)
10
+
11
+ MCP (Model Context Protocol) is a standard that lets AI assistants call tools on external systems — this server exposes Unreal Engine as those tools.
12
+
13
+ ```bash
14
+ npx ultimate-unreal-engine-mcp setup
15
+ ```
16
+
17
+ ---
18
+
19
+ ## Table of Contents
20
+
21
+ - [Quick Start](#quick-start)
22
+ - [What You Can Do](#what-you-can-do)
23
+ - [Architecture](#architecture)
24
+ - [Tool Catalog](#tool-catalog)
25
+ - [Visual Review Loop](#visual-review-loop)
26
+ - [Headless vs Live](#headless-vs-live)
27
+ - [Installation](#installation)
28
+ - [C++ Plugin Setup](#c-plugin-setup)
29
+ - [Configuration](#configuration)
30
+ - [Development](#development)
31
+ - [Requirements](#requirements)
32
+ - [License](#license)
33
+
34
+ ---
35
+
36
+ ## Quick Start
37
+
38
+ ```bash
39
+ npx ultimate-unreal-engine-mcp setup
40
+ ```
41
+
42
+ This command installs the server and writes the correct config block for your MCP client (Claude Desktop, Cursor, or VS Code). The C++ plugin is optional — file system and code generation tools work without it.
43
+
44
+ ---
45
+
46
+ ## What You Can Do
47
+
48
+ The following walkthrough shows AI autonomously setting up a point light, doing a visual review loop, and correcting an intensity problem — all without leaving the conversation.
49
+
50
+ ---
51
+
52
+ **Prompt:** "Spawn a point light named MainLight at the center of the level, set its intensity to 5000, then take a screenshot so I can review it."
53
+
54
+ **Step 1 — Spawn the actor**
55
+
56
+ ```
57
+ ue_spawn_actor(class="PointLight", label="MainLight", location={x:0, y:0, z:300})
58
+ ```
59
+
60
+ > **Claude:** Actor `MainLight` spawned at (0, 0, 300). UE returned `actor_id: "PointLight_0"`.
61
+
62
+ ---
63
+
64
+ **Step 2 — Navigate camera to the actor**
65
+
66
+ ```
67
+ ue_look_at(target="MainLight", angle="45deg", screenshot=true)
68
+ ```
69
+
70
+ > **Claude:** Camera positioned. [Screenshot returned inline — shows a bright white sphere flooding the scene with overexposed light.]
71
+
72
+ ---
73
+
74
+ **Step 3 — Visual review — something is wrong**
75
+
76
+ ```
77
+ ue_visual_review(focus="check if the lighting looks blown out")
78
+ ```
79
+
80
+ > **Claude:** The scene is severely overexposed. The intensity of 5000 lm is too high for this room scale. Reducing to 800 lm.
81
+
82
+ ---
83
+
84
+ **Step 4 — Adjust the property**
85
+
86
+ ```
87
+ ue_transform_actor(label="MainLight", properties={"Intensity": 800})
88
+ ```
89
+
90
+ > **Claude:** Property `Intensity` updated to 800 on `MainLight`.
91
+
92
+ ---
93
+
94
+ **Step 5 — Verify the fix**
95
+
96
+ ```
97
+ ue_orbit_review(target="MainLight", angles=[0, 90, 180, 270])
98
+ ```
99
+
100
+ > **Claude:** [Four screenshots returned — front, right, back, left.] Lighting is balanced. No blown-out surfaces visible from any angle. The area is well-lit without overexposure.
101
+
102
+ ---
103
+
104
+ **Step 6 — Cleanup**
105
+
106
+ ```
107
+ ue_cleanup_screenshots(confirm=true)
108
+ ```
109
+
110
+ > **Claude:** 5 MCP-generated screenshots removed from disk.
111
+
112
+ ---
113
+
114
+ This loop — spawn, navigate, inspect, adjust, verify — runs entirely from the AI conversation. No manual editor interaction required.
115
+
116
+ ---
117
+
118
+ ## Architecture
119
+
120
+ ```mermaid
121
+ graph TD
122
+ A["AI Client\n(Claude / Cursor / VS Code)"]
123
+ B["MCP Protocol\n(stdio JSON-RPC)"]
124
+ C["TypeScript Server\nNode.js 22+"]
125
+ D["TCP Port 55557"]
126
+ E["C++ Plugin\nMCPBridge"]
127
+ F["UE 5.7 Editor APIs"]
128
+
129
+ A -->|tool calls| B
130
+ B --> C
131
+ C -->|file system ops\nC++ parsing\nconfig r/w\ndocs lookup\nbuild trigger| C
132
+ C -->|actor CRUD\nBlueprint graphs\nviewport screenshots\nPIE control\nasset registry| D
133
+ D --> E
134
+ E --> F
135
+
136
+ classDef ts fill:#3178c6,color:#fff,stroke:#2563eb
137
+ classDef cpp fill:#f97316,color:#fff,stroke:#ea580c
138
+ classDef ue fill:#76b900,color:#fff,stroke:#65a000
139
+ classDef proto fill:#6b7280,color:#fff,stroke:#4b5563
140
+
141
+ class C ts
142
+ class E cpp
143
+ class F ue
144
+ class B,D proto
145
+ ```
146
+
147
+ **TypeScript layer** handles all file system operations without requiring the editor to be open: C++ header parsing (tree-sitter-unreal-cpp), INI config read/write, code generation, documentation lookup, and build triggering via UnrealBuildTool.
148
+
149
+ **C++ plugin layer** (MCPBridge) provides live editor access: actor CRUD, Blueprint graph read/write, viewport screenshots with inline base64 images, PIE session control, asset registry queries, and all other operations that require the UE Editor process.
150
+
151
+ ---
152
+
153
+ ## Tool Catalog
154
+
155
+ <details>
156
+ <summary><strong>AI Systems</strong> — 5 tools</summary>
157
+
158
+ | Tool | Description |
159
+ |------|-------------|
160
+ | `ue_inspect_behavior_tree` | Inspect a Behavior Tree asset — tasks, decorators, services, and composite nodes |
161
+ | `ue_inspect_state_tree` | Inspect a State Tree asset — states, transitions, and evaluators |
162
+ | `ue_inspect_blackboard` | Read Blackboard asset key definitions and their types |
163
+ | `ue_inspect_eqs` | Inspect an Environment Query System asset — tests and generators |
164
+ | `ue_query_navmesh` | Query NavMesh coverage for a location or actor |
165
+
166
+ </details>
167
+
168
+ <details>
169
+ <summary><strong>Animation</strong> — 5 tools</summary>
170
+
171
+ | Tool | Description |
172
+ |------|-------------|
173
+ | `ue_list_animation_assets` | List animation assets in the project, optionally filtered by type |
174
+ | `ue_inspect_anim_blueprint` | Inspect AnimBP state machines, states, and transitions |
175
+ | `ue_inspect_montage` | Read montage sections, notifies, and slot assignments |
176
+ | `ue_inspect_blend_space` | Inspect blend space axes, samples, and grid configuration |
177
+ | `ue_read_retarget_mappings` | Read IK Retargeter source/target rig and chain mappings |
178
+
179
+ </details>
180
+
181
+ <details>
182
+ <summary><strong>Audio</strong> — 4 tools</summary>
183
+
184
+ | Tool | Description |
185
+ |------|-------------|
186
+ | `ue_list_sound_assets` | List all sound assets in the project |
187
+ | `ue_inspect_metasound` | Inspect a MetaSound asset — nodes, inputs, outputs, and patches |
188
+ | `ue_inspect_sound_cue` | Inspect a Sound Cue asset — nodes and audio connections |
189
+ | `ue_query_audio_insights` | Query Audio Insights data for active sounds and buses |
190
+
191
+ </details>
192
+
193
+ <details>
194
+ <summary><strong>Blueprint</strong> — 11 tools</summary>
195
+
196
+ | Tool | Description |
197
+ |------|-------------|
198
+ | `ue_read_blueprint` | Read a Blueprint asset — class defaults, components, and interfaces |
199
+ | `ue_list_blueprints` | List Blueprint assets matching a class filter |
200
+ | `ue_read_blueprint_graph` | Read Blueprint graph nodes, pins, and connections |
201
+ | `ue_create_blueprint` | Create a new Blueprint class with a specified parent |
202
+ | `ue_add_blueprint_node` | Add a function call or event node to a Blueprint graph |
203
+ | `ue_connect_blueprint_pins` | Connect two pins in a Blueprint graph |
204
+ | `ue_add_blueprint_variable` | Add a new variable to a Blueprint class |
205
+ | `ue_set_blueprint_default` | Set a Blueprint class default property value |
206
+ | `ue_cpp_exposed_members` | List C++ properties and functions exposed to Blueprint in a class |
207
+ | `ue_find_blueprint_subclasses` | Find all Blueprints that subclass a given C++ or Blueprint class |
208
+ | `ue_trace_cpp_in_blueprints` | Find all Blueprints referencing a specific C++ class |
209
+
210
+ </details>
211
+
212
+ <details>
213
+ <summary><strong>Build</strong> — 2 tools</summary>
214
+
215
+ | Tool | Description |
216
+ |------|-------------|
217
+ | `ue_build` | Trigger a UnrealBuildTool build for a target and configuration |
218
+ | `ue_get_build_errors` | Read the latest build output and parse compiler errors |
219
+
220
+ </details>
221
+
222
+ <details>
223
+ <summary><strong>Chaos Physics</strong> — 4 tools</summary>
224
+
225
+ | Tool | Description |
226
+ |------|-------------|
227
+ | `ue_inspect_geometry_collection` | Inspect a Geometry Collection asset — fracture levels and clusters |
228
+ | `ue_reset_destruction` | Reset a destructible actor to its initial un-fractured state |
229
+ | `ue_read_cloth_params` | Read Chaos Cloth asset simulation parameters |
230
+ | `ue_manage_physics_cache` | Manage Chaos physics cache recording and playback |
231
+
232
+ </details>
233
+
234
+ <details>
235
+ <summary><strong>Collision &amp; Physics</strong> — 4 tools</summary>
236
+
237
+ | Tool | Description |
238
+ |------|-------------|
239
+ | `ue_read_collision` | Read collision profile, channels, and response matrix for an actor or component |
240
+ | `ue_set_collision` | Set collision preset or individual channel responses |
241
+ | `ue_manage_physical_material` | Read or update Physical Material properties |
242
+ | `ue_inspect_physics_asset` | Inspect a Physics Asset — bodies, constraints, and welded bones |
243
+
244
+ </details>
245
+
246
+ <details>
247
+ <summary><strong>Config</strong> — 4 tools</summary>
248
+
249
+ | Tool | Description |
250
+ |------|-------------|
251
+ | `ue_read_config` | Read a UE INI config file section or key |
252
+ | `ue_write_config` | Write or update a key in a UE INI config file |
253
+ | `ue_read_uproject` | Read .uproject metadata — engine version, plugins, target platforms |
254
+ | `ue_list_plugins` | List all plugins enabled in the project with their versions |
255
+
256
+ </details>
257
+
258
+ <details>
259
+ <summary><strong>C++</strong> — 8 tools</summary>
260
+
261
+ | Tool | Description |
262
+ |------|-------------|
263
+ | `ue_read_cpp_class` | Parse a C++ header and return UCLASS, UPROPERTY, and UFUNCTION metadata |
264
+ | `ue_get_class_hierarchy` | Walk the class hierarchy from a UClass up to UObject |
265
+ | `ue_trace_includes` | List all #include dependencies for a header file |
266
+ | `ue_find_class_file` | Locate the header file for a UClass by name |
267
+ | `ue_generate_class` | Generate a new C++ class scaffold with UClass boilerplate |
268
+ | `ue_add_property` | Add a UPROPERTY declaration to an existing C++ class |
269
+ | `ue_add_function` | Add a UFUNCTION declaration to an existing C++ class |
270
+ | `ue_add_include` | Add an #include to a C++ source or header file |
271
+
272
+ </details>
273
+
274
+ <details>
275
+ <summary><strong>Docs</strong> — 4 tools</summary>
276
+
277
+ | Tool | Description |
278
+ |------|-------------|
279
+ | `ue_search_api` | Full-text search over the local UE API documentation index |
280
+ | `ue_lookup_class` | Look up a UClass reference page — methods, properties, hierarchy |
281
+ | `ue_get_include_path` | Get the correct #include path for a UE class |
282
+ | `ue_check_deprecation` | Check if a class, function, or macro is deprecated in UE 5.7 |
283
+
284
+ </details>
285
+
286
+ <details>
287
+ <summary><strong>Editor</strong> — 7 tools</summary>
288
+
289
+ | Tool | Description |
290
+ |------|-------------|
291
+ | `ue_list_actors` | List actors in the current level with transforms and class info |
292
+ | `ue_spawn_actor` | Spawn an actor by class into the current level |
293
+ | `ue_transform_actor` | Move, rotate, scale, or set properties on an actor |
294
+ | `ue_delete_actor` | Delete an actor from the current level |
295
+ | `ue_query_assets` | Query the asset registry — search by class, path, or name |
296
+ | `ue_trace_references` | Trace all assets that reference or are referenced by an asset |
297
+ | `ue_read_level_layout` | Read the current level's actor graph and spatial layout |
298
+
299
+ </details>
300
+
301
+ <details>
302
+ <summary><strong>GAS (Gameplay Ability System)</strong> — 4 tools</summary>
303
+
304
+ | Tool | Description |
305
+ |------|-------------|
306
+ | `ue_list_abilities` | List all Gameplay Ability assets in the project |
307
+ | `ue_inspect_gameplay_effect` | Inspect a Gameplay Effect — modifiers, duration policy, and tags |
308
+ | `ue_read_attribute_set` | Read an Attribute Set class — attribute names and base values |
309
+ | `ue_query_gameplay_tags` | Query the Gameplay Tag hierarchy and registered tags |
310
+
311
+ </details>
312
+
313
+ <details>
314
+ <summary><strong>Import/Export</strong> — 4 tools</summary>
315
+
316
+ | Tool | Description |
317
+ |------|-------------|
318
+ | `ue_import_fbx` | Import an FBX file as a Static Mesh or Skeletal Mesh asset |
319
+ | `ue_import_usd` | Import a USD file into the project |
320
+ | `ue_export_mesh` | Export a Static Mesh or Skeletal Mesh asset to FBX |
321
+ | `ue_batch_import` | Import multiple assets from a directory in a single operation |
322
+
323
+ </details>
324
+
325
+ <details>
326
+ <summary><strong>Input</strong> — 4 tools</summary>
327
+
328
+ | Tool | Description |
329
+ |------|-------------|
330
+ | `ue_list_input_actions` | List all Input Action assets in the project |
331
+ | `ue_create_input_action` | Create a new Input Action asset with a specified value type |
332
+ | `ue_list_input_contexts` | List all Input Mapping Context assets in the project |
333
+ | `ue_add_input_binding` | Add a key binding to an Input Mapping Context |
334
+
335
+ </details>
336
+
337
+ <details>
338
+ <summary><strong>Known Issues</strong> — 2 tools</summary>
339
+
340
+ | Tool | Description |
341
+ |------|-------------|
342
+ | `ue_list_known_issues` | List all logged known issues for the current project session |
343
+ | `ue_add_known_issue` | Log a new known issue with severity and context for later resolution |
344
+
345
+ </details>
346
+
347
+ <details>
348
+ <summary><strong>Live Link</strong> — 4 tools</summary>
349
+
350
+ | Tool | Description |
351
+ |------|-------------|
352
+ | `ue_list_livelink_sources` | List all active Live Link sources and their connection status |
353
+ | `ue_list_livelink_subjects` | List all Live Link subjects from active sources |
354
+ | `ue_control_livelink_subject` | Enable, disable, or configure a Live Link subject |
355
+ | `ue_preview_livelink_data` | Preview current frame data for a Live Link subject |
356
+
357
+ </details>
358
+
359
+ <details>
360
+ <summary><strong>Material</strong> — 4 tools</summary>
361
+
362
+ | Tool | Description |
363
+ |------|-------------|
364
+ | `ue_material_params` | Read all scalar, vector, and texture parameters from a material |
365
+ | `ue_create_material_instance` | Create a Material Instance from a parent material |
366
+ | `ue_set_material_param` | Set a scalar, vector, or texture parameter on a Material Instance |
367
+ | `ue_actor_materials` | List all materials assigned to components on an actor |
368
+
369
+ </details>
370
+
371
+ <details>
372
+ <summary><strong>Motion Design</strong> — 4 tools</summary>
373
+
374
+ | Tool | Description |
375
+ |------|-------------|
376
+ | `ue_list_scene_states` | List all Motion Design scene states |
377
+ | `ue_trigger_scene_transition` | Trigger a scene state transition |
378
+ | `ue_inspect_transition_logic` | Inspect the logic for a Motion Design scene transition |
379
+ | `ue_manage_remote_control` | Manage Motion Design remote control presets and bindings |
380
+
381
+ </details>
382
+
383
+ <details>
384
+ <summary><strong>Movie Render Pipeline</strong> — 4 tools</summary>
385
+
386
+ | Tool | Description |
387
+ |------|-------------|
388
+ | `ue_list_render_queue` | List all jobs in the Movie Render Queue |
389
+ | `ue_add_render_job` | Add a render job to the Movie Render Queue |
390
+ | `ue_control_render_queue` | Start, pause, or cancel the render queue |
391
+ | `ue_configure_render_output` | Configure output format, resolution, and path for a render job |
392
+
393
+ </details>
394
+
395
+ <details>
396
+ <summary><strong>Networking</strong> — 4 tools</summary>
397
+
398
+ | Tool | Description |
399
+ |------|-------------|
400
+ | `ue_inspect_replication` | Inspect replication settings for an actor or component |
401
+ | `ue_list_replicated_properties` | List all UPROPERTY members with replication conditions |
402
+ | `ue_read_net_driver` | Read Net Driver configuration — tick rate, max clients, bandwidth |
403
+ | `ue_inspect_session` | Inspect the current network session state during PIE |
404
+
405
+ </details>
406
+
407
+ <details>
408
+ <summary><strong>PCG (Procedural Content Generation)</strong> — 4 tools</summary>
409
+
410
+ | Tool | Description |
411
+ |------|-------------|
412
+ | `ue_list_pcg_graphs` | List all PCG Graph assets in the project |
413
+ | `ue_inspect_pcg_graph` | Inspect a PCG Graph — nodes, connections, and parameters |
414
+ | `ue_execute_pcg_graph` | Execute a PCG Graph on a target actor |
415
+ | `ue_query_pcg_results` | Query the output data from the last PCG Graph execution |
416
+
417
+ </details>
418
+
419
+ <details>
420
+ <summary><strong>Selection</strong> — 4 tools</summary>
421
+
422
+ | Tool | Description |
423
+ |------|-------------|
424
+ | `ue_select_actors` | Select actors in the editor by label, class, or spatial query |
425
+ | `ue_get_selection` | Get the current editor selection — actor labels and transforms |
426
+ | `ue_duplicate_actors` | Duplicate selected actors with optional offset |
427
+ | `ue_convert_actor` | Convert an actor to a different class in place |
428
+
429
+ </details>
430
+
431
+ <details>
432
+ <summary><strong>Sequencer</strong> — 5 tools</summary>
433
+
434
+ | Tool | Description |
435
+ |------|-------------|
436
+ | `ue_create_sequence` | Create a new Level Sequence asset |
437
+ | `ue_list_sequence_tracks` | List all tracks in a Level Sequence |
438
+ | `ue_add_sequence_track` | Add a track (Transform, Property, Event, etc.) to a Level Sequence |
439
+ | `ue_add_keyframe` | Add a keyframe to a Sequencer track at a specific time |
440
+ | `ue_sequence_playback` | Control Sequencer playback — play, pause, stop, set time |
441
+
442
+ </details>
443
+
444
+ <details>
445
+ <summary><strong>Validation</strong> — 4 tools</summary>
446
+
447
+ | Tool | Description |
448
+ |------|-------------|
449
+ | `ue_validate_asset` | Run Editor Validation on a single asset and return issues |
450
+ | `ue_validate_folder` | Validate all assets in a content folder |
451
+ | `ue_validate_project` | Run full project validation and return a summary report |
452
+ | `ue_check_blueprint` | Check a Blueprint for compilation errors without compiling |
453
+
454
+ </details>
455
+
456
+ <details>
457
+ <summary><strong>Viewport &amp; Visual Review</strong> — 16 tools</summary>
458
+
459
+ | Tool | Description |
460
+ |------|-------------|
461
+ | `ue_editor_state` | Query selected actors, open assets, and viewport camera position |
462
+ | `ue_pie_start` | Start a Play In Editor (PIE) session |
463
+ | `ue_pie_stop` | Stop the active PIE session |
464
+ | `ue_pie_logs` | Read PIE output log lines since session start |
465
+ | `ue_pie_game_state` | Query runtime game state — actor positions, active GameMode |
466
+ | `ue_viewport_screenshot` | Capture the active viewport as an inline base64 image |
467
+ | `ue_viewport_camera` | Set camera position, rotation, FOV, or look-at target |
468
+ | `ue_viewport_render_mode` | Switch render mode: lit, unlit, wireframe, collision, detail_lighting |
469
+ | `ue_viewport_hires_screenshot` | High-resolution screenshot with configurable resolution multiplier |
470
+ | `ue_visual_review` | Quick screenshot for iterative visual review loops |
471
+ | `ue_look_at` | Navigate camera to an actor or world position with optional screenshot |
472
+ | `ue_orbit_review` | Multi-angle screenshots orbiting a target |
473
+ | `ue_iterate_scene` | Screenshot + nearby actor data in a single call |
474
+ | `ue_fly_through` | Camera waypoint walkthrough with a screenshot at each stop |
475
+ | `ue_focus_actor` | Auto-frame an actor by label with bounds-aware distance |
476
+ | `ue_cleanup_screenshots` | Delete MCP-generated screenshots to free disk space |
477
+
478
+ </details>
479
+
480
+ <details>
481
+ <summary><strong>World Partition</strong> — 4 tools</summary>
482
+
483
+ | Tool | Description |
484
+ |------|-------------|
485
+ | `ue_read_world_partition` | Read World Partition grid configuration and cell layout |
486
+ | `ue_manage_data_layers` | List, enable, or disable World Partition Data Layers |
487
+ | `ue_inspect_streaming_sources` | Inspect streaming source locations and activation radii |
488
+ | `ue_trigger_hlod_generation` | Trigger HLOD generation for a World Partition level |
489
+
490
+ </details>
491
+
492
+ ---
493
+
494
+ ## Visual Review Loop
495
+
496
+ The Viewport & Visual Review domain enables an AI to navigate, see, judge, and act — autonomously.
497
+
498
+ ```
499
+ navigate → screenshot → inspect → adjust → verify → cleanup
500
+ ```
501
+
502
+ **Core tools:**
503
+
504
+ | Tool | Role in the loop |
505
+ |------|-----------------|
506
+ | `ue_look_at` | Navigate camera to any actor or world position, auto-frame, screenshot |
507
+ | `ue_visual_review` | Quick screenshot with optional focus hint ("check the shadows on the left wall") |
508
+ | `ue_orbit_review` | Capture 2–12 angles around a target in one call |
509
+ | `ue_iterate_scene` | Screenshot + actor data together — orient yourself in one round trip |
510
+ | `ue_fly_through` | Waypoint walkthrough — systematic spatial survey of a level section |
511
+ | `ue_focus_actor` | Auto-frame a specific actor using its bounding box |
512
+ | `ue_cleanup_screenshots` | Delete all MCP screenshots when the session is done |
513
+
514
+ **What makes this different:** Screenshots are returned as inline base64 images in the MCP response. The AI receives and interprets the image in the same tool call — no file paths to resolve, no secondary reads. The AI can see the scene, evaluate it, and call the next tool in the same turn.
515
+
516
+ **Typical loop:**
517
+
518
+ ```
519
+ ue_look_at("TargetActor", angle="45deg")
520
+ → [image inline] AI sees overexposed area
521
+ ue_transform_actor("TargetActor", {"Intensity": 500})
522
+ → property updated
523
+ ue_orbit_review("TargetActor", angles=[0, 90, 180, 270])
524
+ → [4 images inline] all clear from every angle
525
+ ue_cleanup_screenshots(confirm=true)
526
+ → disk cleaned
527
+ ```
528
+
529
+ ---
530
+
531
+ ## Headless vs Live
532
+
533
+ Some tools work without the UE Editor running. Others require the MCPBridge plugin connected to a live editor instance.
534
+
535
+ | Headless (no plugin required) | Live Editor Required |
536
+ |-------------------------------|----------------------|
537
+ | Read and write C++ headers | Actor spawn, move, delete |
538
+ | Parse UCLASS/UPROPERTY/UFUNCTION macros | Blueprint graph read/write |
539
+ | Generate C++ class scaffolds | Viewport screenshots |
540
+ | Read and write INI config files | PIE start/stop/logs |
541
+ | Read .uproject and plugin list | Asset registry queries |
542
+ | Trigger UnrealBuildTool builds | Animation Blueprint inspection |
543
+ | Parse build errors | Material parameter get/set |
544
+ | Search and browse API documentation | Level Sequencer control |
545
+ | Look up class include paths | World Partition management |
546
+ | Check deprecation status | GAS, PCG, Physics, Networking |
547
+
548
+ The TypeScript server starts in headless mode by default. Tools that require the plugin return a structured `plugin_not_connected` error with a clear message — they never silently fail.
549
+
550
+ ---
551
+
552
+ ## Installation
553
+
554
+ ### Option 1: npx (quickest)
555
+
556
+ ```bash
557
+ npx ultimate-unreal-engine-mcp setup
558
+ ```
559
+
560
+ Detects your MCP client and writes the config automatically.
561
+
562
+ ### Option 2: Global install
563
+
564
+ ```bash
565
+ npm install -g ultimate-unreal-engine-mcp
566
+ ultimate-unreal-engine-mcp setup
567
+ ```
568
+
569
+ ### Option 3: Clone for development
570
+
571
+ ```bash
572
+ git clone https://github.com/your-org/ultimateunrealenginemcp
573
+ cd ultimateunrealenginemcp
574
+ npm install
575
+ npm run build
576
+ ```
577
+
578
+ ### Client configuration
579
+
580
+ **Claude Desktop** (`~/Library/Application Support/Claude/claude_desktop_config.json` on macOS, `%APPDATA%\Claude\claude_desktop_config.json` on Windows):
581
+
582
+ ```json
583
+ {
584
+ "mcpServers": {
585
+ "unreal": {
586
+ "command": "npx",
587
+ "args": ["ultimate-unreal-engine-mcp"],
588
+ "env": {
589
+ "UE_PROJECT_ROOT": "/path/to/your/UEProject",
590
+ "UE_PLUGIN_PORT": "55557"
591
+ }
592
+ }
593
+ }
594
+ }
595
+ ```
596
+
597
+ **Cursor** (`.cursor/mcp.json` in your project):
598
+
599
+ ```json
600
+ {
601
+ "mcpServers": {
602
+ "unreal": {
603
+ "command": "npx",
604
+ "args": ["ultimate-unreal-engine-mcp"],
605
+ "env": {
606
+ "UE_PROJECT_ROOT": "${workspaceFolder}",
607
+ "UE_PLUGIN_PORT": "55557"
608
+ }
609
+ }
610
+ }
611
+ }
612
+ ```
613
+
614
+ **VS Code** (`.vscode/settings.json`):
615
+
616
+ ```json
617
+ {
618
+ "mcp.servers": {
619
+ "unreal": {
620
+ "command": "npx",
621
+ "args": ["ultimate-unreal-engine-mcp"],
622
+ "env": {
623
+ "UE_PROJECT_ROOT": "${workspaceFolder}",
624
+ "UE_PLUGIN_PORT": "55557"
625
+ }
626
+ }
627
+ }
628
+ }
629
+ ```
630
+
631
+ ---
632
+
633
+ ## C++ Plugin Setup
634
+
635
+ The MCPBridge plugin provides the live editor connection. Without it, all file system and code generation tools still work.
636
+
637
+ **Install:**
638
+
639
+ 1. Copy `unreal-plugin/MCPBridge` into your project's `Plugins/` directory:
640
+
641
+ ```
642
+ YourProject/
643
+ Plugins/
644
+ MCPBridge/
645
+ MCPBridge.uplugin
646
+ Source/
647
+ MCPBridgeRuntime/
648
+ MCPBridgeEditor/
649
+ ```
650
+
651
+ 2. Open your `.uproject` in a text editor and add the plugin:
652
+
653
+ ```json
654
+ {
655
+ "Plugins": [
656
+ {
657
+ "Name": "MCPBridge",
658
+ "Enabled": true
659
+ }
660
+ ]
661
+ }
662
+ ```
663
+
664
+ 3. Right-click the `.uproject` file and select "Generate Visual Studio project files" (or run UnrealBuildTool). Build the project from your IDE.
665
+
666
+ 4. Open the project in the UE Editor. The MCPBridge plugin initializes automatically and listens on port 55557.
667
+
668
+ **Verify the connection:**
669
+
670
+ ```bash
671
+ curl http://localhost:55557/health
672
+ # → {"status":"ok","version":"1.0"}
673
+ ```
674
+
675
+ **Change the port:**
676
+
677
+ Set `UE_PLUGIN_PORT` in your MCP client config and restart the editor. The plugin reads the port from a config ini on startup.
678
+
679
+ ---
680
+
681
+ ## Configuration
682
+
683
+ | Variable | Default | Description |
684
+ |----------|---------|-------------|
685
+ | `UE_PROJECT_ROOT` | Current working directory | Absolute path to the root of your Unreal project (the folder containing the `.uproject` file) |
686
+ | `UE_PLUGIN_PORT` | `55557` | TCP port the MCPBridge plugin listens on inside the editor |
687
+
688
+ Both variables are optional. `UE_PROJECT_ROOT` defaults to `process.cwd()`, which works correctly when the MCP server is started from inside the project directory.
689
+
690
+ ---
691
+
692
+ ## Development
693
+
694
+ ```bash
695
+ # Start dev server with hot reload
696
+ npm run dev
697
+
698
+ # Run all tests
699
+ npm test
700
+
701
+ # Run tests in watch mode
702
+ npm run test:watch
703
+
704
+ # Build production output
705
+ npm run build
706
+
707
+ # Lint
708
+ npm run lint
709
+ ```
710
+
711
+ **Test coverage:** 1021 tests across 43 files.
712
+
713
+ The test suite covers all 26 tool domains, plugin bridge connection/disconnection behavior, INI config parsing edge cases, C++ header parsing with tree-sitter-unreal-cpp, and known-issues middleware.
714
+
715
+ **Tech stack:** TypeScript 5.x, Node.js 22+, `@modelcontextprotocol/sdk` 1.29.0, Zod 3.25+, Vitest 2.x, tree-sitter-unreal-cpp (WASM), MiniSearch, fast-glob, chokidar.
716
+
717
+ ---
718
+
719
+ ## Requirements
720
+
721
+ - **Node.js 22+** — the MCP server runtime
722
+ - **MCP-compatible client** — Claude Desktop, Cursor, VS Code with MCP extension, or any client implementing the MCP protocol
723
+ - **Unreal Engine 5.7** — required only for tools marked `[requires_plugin]`; file system tools work with any UE version
724
+
725
+ ---
726
+
727
+ ## License
728
+
729
+ MIT — see [LICENSE](LICENSE).