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.
- package/README.md +729 -0
- package/dist/build/error-parser.js +51 -0
- package/dist/build/fix-suggester.js +84 -0
- package/dist/build/ubt-runner.js +146 -0
- package/dist/cli.js +13 -0
- package/dist/config.js +8 -0
- package/dist/docs/data/ue57-api.js +228 -0
- package/dist/docs/doc-index.js +110 -0
- package/dist/docs/types.js +4 -0
- package/dist/generators/class-generator.js +363 -0
- package/dist/generators/file-modifier.js +276 -0
- package/dist/generators/uht-validator.js +177 -0
- package/dist/index.js +89 -0
- package/dist/parsers/cpp-class-index.js +230 -0
- package/dist/parsers/cpp-parser.js +369 -0
- package/dist/parsers/ini-parser.js +216 -0
- package/dist/parsers/uproject-parser.js +130 -0
- package/dist/plugin-bridge/client.js +217 -0
- package/dist/plugin-bridge/protocol.js +6 -0
- package/dist/plugin-bridge/retry.js +23 -0
- package/dist/setup.js +209 -0
- package/dist/tools/ai-systems/index.js +247 -0
- package/dist/tools/ai-systems/types.js +4 -0
- package/dist/tools/animation/index.js +241 -0
- package/dist/tools/animation/types.js +4 -0
- package/dist/tools/audio/index.js +204 -0
- package/dist/tools/audio/types.js +4 -0
- package/dist/tools/blueprint/index.js +495 -0
- package/dist/tools/blueprint/types.js +4 -0
- package/dist/tools/build/index.js +163 -0
- package/dist/tools/chaos/index.js +230 -0
- package/dist/tools/chaos/types.js +4 -0
- package/dist/tools/collision-physics/index.js +211 -0
- package/dist/tools/config/index.js +288 -0
- package/dist/tools/cpp/index.js +305 -0
- package/dist/tools/docs/index.js +251 -0
- package/dist/tools/editor/index.js +242 -0
- package/dist/tools/gas/index.js +222 -0
- package/dist/tools/gas/types.js +5 -0
- package/dist/tools/import-export/index.js +218 -0
- package/dist/tools/input/index.js +146 -0
- package/dist/tools/known-issues/index.js +88 -0
- package/dist/tools/known-issues/middleware.js +55 -0
- package/dist/tools/known-issues/store.js +125 -0
- package/dist/tools/livelink/index.js +203 -0
- package/dist/tools/livelink/types.js +4 -0
- package/dist/tools/material/index.js +190 -0
- package/dist/tools/motion-design/index.js +251 -0
- package/dist/tools/motion-design/types.js +6 -0
- package/dist/tools/movie-render/index.js +220 -0
- package/dist/tools/networking/index.js +149 -0
- package/dist/tools/pcg/index.js +164 -0
- package/dist/tools/selection/index.js +180 -0
- package/dist/tools/sequencer/index.js +218 -0
- package/dist/tools/validation/index.js +183 -0
- package/dist/tools/validation/types.js +4 -0
- package/dist/tools/viewport/index.js +310 -0
- package/dist/tools/worldpartition/index.js +226 -0
- package/dist/tools/worldpartition/types.js +4 -0
- package/dist/utils/execFileNoThrow.js +40 -0
- package/dist/utils/logger.js +27 -0
- package/dist/utils/path-guard.js +26 -0
- package/package.json +40 -0
- package/unreal-plugin/MCPBridge/MCPBridge.uplugin +29 -0
- package/unreal-plugin/MCPBridge/Source/MCPBridgeEditor/MCPBridgeEditor.Build.cs +68 -0
- package/unreal-plugin/MCPBridge/Source/MCPBridgeEditor/Private/MCPAICommands.cpp +919 -0
- package/unreal-plugin/MCPBridge/Source/MCPBridgeEditor/Private/MCPAICommands.h +23 -0
- package/unreal-plugin/MCPBridge/Source/MCPBridgeEditor/Private/MCPActorCommands.cpp +415 -0
- package/unreal-plugin/MCPBridge/Source/MCPBridgeEditor/Private/MCPActorCommands.h +16 -0
- package/unreal-plugin/MCPBridge/Source/MCPBridgeEditor/Private/MCPAnimationCommands.cpp +653 -0
- package/unreal-plugin/MCPBridge/Source/MCPBridgeEditor/Private/MCPAnimationCommands.h +24 -0
- package/unreal-plugin/MCPBridge/Source/MCPBridgeEditor/Private/MCPAssetCommands.cpp +290 -0
- package/unreal-plugin/MCPBridge/Source/MCPBridgeEditor/Private/MCPAssetCommands.h +17 -0
- package/unreal-plugin/MCPBridge/Source/MCPBridgeEditor/Private/MCPAudioCommands.cpp +624 -0
- package/unreal-plugin/MCPBridge/Source/MCPBridgeEditor/Private/MCPAudioCommands.h +22 -0
- package/unreal-plugin/MCPBridge/Source/MCPBridgeEditor/Private/MCPBlueprintHandlers.cpp +616 -0
- package/unreal-plugin/MCPBridge/Source/MCPBridgeEditor/Private/MCPBlueprintHandlers.h +25 -0
- package/unreal-plugin/MCPBridge/Source/MCPBridgeEditor/Private/MCPBlueprintWriteHandlers.cpp +744 -0
- package/unreal-plugin/MCPBridge/Source/MCPBridgeEditor/Private/MCPBlueprintWriteHandlers.h +24 -0
- package/unreal-plugin/MCPBridge/Source/MCPBridgeEditor/Private/MCPBridgeEditor.cpp +23 -0
- package/unreal-plugin/MCPBridge/Source/MCPBridgeEditor/Private/MCPBridgeSubsystem.cpp +149 -0
- package/unreal-plugin/MCPBridge/Source/MCPBridgeEditor/Private/MCPBridgeSubsystem.h +38 -0
- package/unreal-plugin/MCPBridge/Source/MCPBridgeEditor/Private/MCPChaosCommands.cpp +771 -0
- package/unreal-plugin/MCPBridge/Source/MCPBridgeEditor/Private/MCPChaosCommands.h +22 -0
- package/unreal-plugin/MCPBridge/Source/MCPBridgeEditor/Private/MCPCollisionPhysicsCommands.cpp +749 -0
- package/unreal-plugin/MCPBridge/Source/MCPBridgeEditor/Private/MCPCollisionPhysicsCommands.h +22 -0
- package/unreal-plugin/MCPBridge/Source/MCPBridgeEditor/Private/MCPEditorStateCommands.cpp +172 -0
- package/unreal-plugin/MCPBridge/Source/MCPBridgeEditor/Private/MCPEditorStateCommands.h +16 -0
- package/unreal-plugin/MCPBridge/Source/MCPBridgeEditor/Private/MCPGASCommands.cpp +715 -0
- package/unreal-plugin/MCPBridge/Source/MCPBridgeEditor/Private/MCPGASCommands.h +22 -0
- package/unreal-plugin/MCPBridge/Source/MCPBridgeEditor/Private/MCPImportExportCommands.cpp +679 -0
- package/unreal-plugin/MCPBridge/Source/MCPBridgeEditor/Private/MCPImportExportCommands.h +22 -0
- package/unreal-plugin/MCPBridge/Source/MCPBridgeEditor/Private/MCPInputHandlers.cpp +381 -0
- package/unreal-plugin/MCPBridge/Source/MCPBridgeEditor/Private/MCPInputHandlers.h +24 -0
- package/unreal-plugin/MCPBridge/Source/MCPBridgeEditor/Private/MCPLiveLinkCommands.cpp +504 -0
- package/unreal-plugin/MCPBridge/Source/MCPBridgeEditor/Private/MCPLiveLinkCommands.h +22 -0
- package/unreal-plugin/MCPBridge/Source/MCPBridgeEditor/Private/MCPMaterialCommands.cpp +511 -0
- package/unreal-plugin/MCPBridge/Source/MCPBridgeEditor/Private/MCPMaterialCommands.h +22 -0
- package/unreal-plugin/MCPBridge/Source/MCPBridgeEditor/Private/MCPMotionDesignCommands.cpp +1110 -0
- package/unreal-plugin/MCPBridge/Source/MCPBridgeEditor/Private/MCPMotionDesignCommands.h +28 -0
- package/unreal-plugin/MCPBridge/Source/MCPBridgeEditor/Private/MCPMovieRenderCommands.cpp +590 -0
- package/unreal-plugin/MCPBridge/Source/MCPBridgeEditor/Private/MCPMovieRenderCommands.h +16 -0
- package/unreal-plugin/MCPBridge/Source/MCPBridgeEditor/Private/MCPNetworkingCommands.cpp +482 -0
- package/unreal-plugin/MCPBridge/Source/MCPBridgeEditor/Private/MCPNetworkingCommands.h +16 -0
- package/unreal-plugin/MCPBridge/Source/MCPBridgeEditor/Private/MCPPieCommands.cpp +338 -0
- package/unreal-plugin/MCPBridge/Source/MCPBridgeEditor/Private/MCPPieCommands.h +16 -0
- package/unreal-plugin/MCPBridge/Source/MCPBridgeEditor/Private/MCPSelectionCommands.cpp +677 -0
- package/unreal-plugin/MCPBridge/Source/MCPBridgeEditor/Private/MCPSelectionCommands.h +22 -0
- package/unreal-plugin/MCPBridge/Source/MCPBridgeEditor/Private/MCPSequencerCommands.cpp +721 -0
- package/unreal-plugin/MCPBridge/Source/MCPBridgeEditor/Private/MCPSequencerCommands.h +16 -0
- package/unreal-plugin/MCPBridge/Source/MCPBridgeEditor/Private/MCPValidationCommands.cpp +368 -0
- package/unreal-plugin/MCPBridge/Source/MCPBridgeEditor/Private/MCPValidationCommands.h +22 -0
- package/unreal-plugin/MCPBridge/Source/MCPBridgeEditor/Private/MCPViewportCommands.cpp +1208 -0
- package/unreal-plugin/MCPBridge/Source/MCPBridgeEditor/Private/MCPViewportCommands.h +29 -0
- package/unreal-plugin/MCPBridge/Source/MCPBridgeEditor/Private/MCPWorldPartitionCommands.cpp +822 -0
- package/unreal-plugin/MCPBridge/Source/MCPBridgeEditor/Private/MCPWorldPartitionCommands.h +23 -0
- package/unreal-plugin/MCPBridge/Source/MCPBridgeEditor/Public/MCPBridgeEditor.h +14 -0
- package/unreal-plugin/MCPBridge/Source/MCPBridgeRuntime/MCPBridgeRuntime.Build.cs +28 -0
- package/unreal-plugin/MCPBridge/Source/MCPBridgeRuntime/Private/MCPBridgeRuntime.cpp +22 -0
- package/unreal-plugin/MCPBridge/Source/MCPBridgeRuntime/Private/MCPCommandRouter.cpp +118 -0
- package/unreal-plugin/MCPBridge/Source/MCPBridgeRuntime/Private/MCPTcpServer.cpp +196 -0
- package/unreal-plugin/MCPBridge/Source/MCPBridgeRuntime/Public/MCPBridgeRuntime.h +15 -0
- package/unreal-plugin/MCPBridge/Source/MCPBridgeRuntime/Public/MCPCommandRouter.h +55 -0
- 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)
|
|
6
|
+
[](https://nodejs.org/)
|
|
7
|
+
[](https://www.unrealengine.com/)
|
|
8
|
+
[](#development)
|
|
9
|
+
[](#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 & 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 & 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).
|