unreal-engine-mcp-server 0.2.1

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 (155) hide show
  1. package/.dockerignore +57 -0
  2. package/.env.production +25 -0
  3. package/.eslintrc.json +54 -0
  4. package/.github/workflows/publish-mcp.yml +75 -0
  5. package/Dockerfile +54 -0
  6. package/LICENSE +21 -0
  7. package/Public/icon.png +0 -0
  8. package/README.md +209 -0
  9. package/claude_desktop_config_example.json +13 -0
  10. package/dist/cli.d.ts +3 -0
  11. package/dist/cli.js +7 -0
  12. package/dist/index.d.ts +31 -0
  13. package/dist/index.js +484 -0
  14. package/dist/prompts/index.d.ts +14 -0
  15. package/dist/prompts/index.js +38 -0
  16. package/dist/python-utils.d.ts +29 -0
  17. package/dist/python-utils.js +54 -0
  18. package/dist/resources/actors.d.ts +13 -0
  19. package/dist/resources/actors.js +83 -0
  20. package/dist/resources/assets.d.ts +23 -0
  21. package/dist/resources/assets.js +245 -0
  22. package/dist/resources/levels.d.ts +17 -0
  23. package/dist/resources/levels.js +94 -0
  24. package/dist/tools/actors.d.ts +51 -0
  25. package/dist/tools/actors.js +459 -0
  26. package/dist/tools/animation.d.ts +196 -0
  27. package/dist/tools/animation.js +579 -0
  28. package/dist/tools/assets.d.ts +21 -0
  29. package/dist/tools/assets.js +304 -0
  30. package/dist/tools/audio.d.ts +170 -0
  31. package/dist/tools/audio.js +416 -0
  32. package/dist/tools/blueprint.d.ts +144 -0
  33. package/dist/tools/blueprint.js +652 -0
  34. package/dist/tools/build_environment_advanced.d.ts +66 -0
  35. package/dist/tools/build_environment_advanced.js +484 -0
  36. package/dist/tools/consolidated-tool-definitions.d.ts +2598 -0
  37. package/dist/tools/consolidated-tool-definitions.js +607 -0
  38. package/dist/tools/consolidated-tool-handlers.d.ts +2 -0
  39. package/dist/tools/consolidated-tool-handlers.js +1050 -0
  40. package/dist/tools/debug.d.ts +185 -0
  41. package/dist/tools/debug.js +265 -0
  42. package/dist/tools/editor.d.ts +88 -0
  43. package/dist/tools/editor.js +365 -0
  44. package/dist/tools/engine.d.ts +30 -0
  45. package/dist/tools/engine.js +36 -0
  46. package/dist/tools/foliage.d.ts +155 -0
  47. package/dist/tools/foliage.js +525 -0
  48. package/dist/tools/introspection.d.ts +98 -0
  49. package/dist/tools/introspection.js +683 -0
  50. package/dist/tools/landscape.d.ts +158 -0
  51. package/dist/tools/landscape.js +375 -0
  52. package/dist/tools/level.d.ts +110 -0
  53. package/dist/tools/level.js +362 -0
  54. package/dist/tools/lighting.d.ts +159 -0
  55. package/dist/tools/lighting.js +1179 -0
  56. package/dist/tools/materials.d.ts +34 -0
  57. package/dist/tools/materials.js +146 -0
  58. package/dist/tools/niagara.d.ts +145 -0
  59. package/dist/tools/niagara.js +289 -0
  60. package/dist/tools/performance.d.ts +163 -0
  61. package/dist/tools/performance.js +412 -0
  62. package/dist/tools/physics.d.ts +189 -0
  63. package/dist/tools/physics.js +784 -0
  64. package/dist/tools/rc.d.ts +110 -0
  65. package/dist/tools/rc.js +363 -0
  66. package/dist/tools/sequence.d.ts +112 -0
  67. package/dist/tools/sequence.js +675 -0
  68. package/dist/tools/tool-definitions.d.ts +4919 -0
  69. package/dist/tools/tool-definitions.js +891 -0
  70. package/dist/tools/tool-handlers.d.ts +47 -0
  71. package/dist/tools/tool-handlers.js +830 -0
  72. package/dist/tools/ui.d.ts +171 -0
  73. package/dist/tools/ui.js +337 -0
  74. package/dist/tools/visual.d.ts +29 -0
  75. package/dist/tools/visual.js +67 -0
  76. package/dist/types/env.d.ts +10 -0
  77. package/dist/types/env.js +18 -0
  78. package/dist/types/index.d.ts +323 -0
  79. package/dist/types/index.js +28 -0
  80. package/dist/types/tool-types.d.ts +274 -0
  81. package/dist/types/tool-types.js +13 -0
  82. package/dist/unreal-bridge.d.ts +126 -0
  83. package/dist/unreal-bridge.js +992 -0
  84. package/dist/utils/cache-manager.d.ts +64 -0
  85. package/dist/utils/cache-manager.js +176 -0
  86. package/dist/utils/error-handler.d.ts +66 -0
  87. package/dist/utils/error-handler.js +243 -0
  88. package/dist/utils/errors.d.ts +133 -0
  89. package/dist/utils/errors.js +256 -0
  90. package/dist/utils/http.d.ts +26 -0
  91. package/dist/utils/http.js +135 -0
  92. package/dist/utils/logger.d.ts +12 -0
  93. package/dist/utils/logger.js +32 -0
  94. package/dist/utils/normalize.d.ts +17 -0
  95. package/dist/utils/normalize.js +49 -0
  96. package/dist/utils/response-validator.d.ts +34 -0
  97. package/dist/utils/response-validator.js +121 -0
  98. package/dist/utils/safe-json.d.ts +4 -0
  99. package/dist/utils/safe-json.js +97 -0
  100. package/dist/utils/stdio-redirect.d.ts +2 -0
  101. package/dist/utils/stdio-redirect.js +20 -0
  102. package/dist/utils/validation.d.ts +50 -0
  103. package/dist/utils/validation.js +173 -0
  104. package/mcp-config-example.json +14 -0
  105. package/package.json +63 -0
  106. package/server.json +60 -0
  107. package/src/cli.ts +7 -0
  108. package/src/index.ts +543 -0
  109. package/src/prompts/index.ts +51 -0
  110. package/src/python/editor_compat.py +181 -0
  111. package/src/python-utils.ts +57 -0
  112. package/src/resources/actors.ts +92 -0
  113. package/src/resources/assets.ts +251 -0
  114. package/src/resources/levels.ts +83 -0
  115. package/src/tools/actors.ts +480 -0
  116. package/src/tools/animation.ts +713 -0
  117. package/src/tools/assets.ts +305 -0
  118. package/src/tools/audio.ts +548 -0
  119. package/src/tools/blueprint.ts +736 -0
  120. package/src/tools/build_environment_advanced.ts +526 -0
  121. package/src/tools/consolidated-tool-definitions.ts +619 -0
  122. package/src/tools/consolidated-tool-handlers.ts +1093 -0
  123. package/src/tools/debug.ts +368 -0
  124. package/src/tools/editor.ts +360 -0
  125. package/src/tools/engine.ts +32 -0
  126. package/src/tools/foliage.ts +652 -0
  127. package/src/tools/introspection.ts +778 -0
  128. package/src/tools/landscape.ts +523 -0
  129. package/src/tools/level.ts +410 -0
  130. package/src/tools/lighting.ts +1316 -0
  131. package/src/tools/materials.ts +148 -0
  132. package/src/tools/niagara.ts +312 -0
  133. package/src/tools/performance.ts +549 -0
  134. package/src/tools/physics.ts +924 -0
  135. package/src/tools/rc.ts +437 -0
  136. package/src/tools/sequence.ts +791 -0
  137. package/src/tools/tool-definitions.ts +907 -0
  138. package/src/tools/tool-handlers.ts +941 -0
  139. package/src/tools/ui.ts +499 -0
  140. package/src/tools/visual.ts +60 -0
  141. package/src/types/env.ts +27 -0
  142. package/src/types/index.ts +414 -0
  143. package/src/types/tool-types.ts +343 -0
  144. package/src/unreal-bridge.ts +1118 -0
  145. package/src/utils/cache-manager.ts +213 -0
  146. package/src/utils/error-handler.ts +320 -0
  147. package/src/utils/errors.ts +312 -0
  148. package/src/utils/http.ts +184 -0
  149. package/src/utils/logger.ts +30 -0
  150. package/src/utils/normalize.ts +54 -0
  151. package/src/utils/response-validator.ts +145 -0
  152. package/src/utils/safe-json.ts +112 -0
  153. package/src/utils/stdio-redirect.ts +18 -0
  154. package/src/utils/validation.ts +212 -0
  155. package/tsconfig.json +33 -0
@@ -0,0 +1,619 @@
1
+ // Consolidated tool definitions - reduced from 36 to 10 multi-purpose tools
2
+
3
+ export const consolidatedToolDefinitions = [
4
+ // 1. ASSET MANAGER - Combines asset operations
5
+ {
6
+ name: 'manage_asset',
7
+ description: 'Manage assets - list, import, create materials',
8
+ inputSchema: {
9
+ type: 'object',
10
+ properties: {
11
+ action: {
12
+ type: 'string',
13
+ enum: ['list', 'import', 'create_material'],
14
+ description: 'Action to perform'
15
+ },
16
+ // For list
17
+ directory: { type: 'string', description: 'Directory path to list (shows immediate children only)' },
18
+ // For import
19
+ sourcePath: { type: 'string', description: 'Source file path' },
20
+ destinationPath: { type: 'string', description: 'Destination path' },
21
+ // For create_material
22
+ name: { type: 'string', description: 'Asset name' },
23
+ path: { type: 'string', description: 'Save path' }
24
+ },
25
+ required: ['action']
26
+ },
27
+ outputSchema: {
28
+ type: 'object',
29
+ properties: {
30
+ success: { type: 'boolean', description: 'Whether the operation succeeded' },
31
+ assets: {
32
+ type: 'array',
33
+ description: 'List of assets (for list action)',
34
+ items: {
35
+ type: 'object',
36
+ properties: {
37
+ Name: { type: 'string' },
38
+ Path: { type: 'string' },
39
+ Class: { type: 'string' },
40
+ PackagePath: { type: 'string' }
41
+ }
42
+ }
43
+ },
44
+ paths: { type: 'array', items: { type: 'string' }, description: 'Imported asset paths (for import)' },
45
+ materialPath: { type: 'string', description: 'Created material path (for create_material)' },
46
+ message: { type: 'string', description: 'Status message' },
47
+ error: { type: 'string', description: 'Error message if failed' }
48
+ }
49
+ }
50
+ },
51
+
52
+ // 2. ACTOR CONTROL - Combines actor operations
53
+ {
54
+ name: 'control_actor',
55
+ description: 'Control actors - spawn, delete, apply physics. For spawning, supports both actor classes (e.g., StaticMeshActor, CameraActor) and asset paths (e.g., /Engine/BasicShapes/Cube) which will auto-spawn as StaticMeshActor',
56
+ inputSchema: {
57
+ type: 'object',
58
+ properties: {
59
+ action: {
60
+ type: 'string',
61
+ enum: ['spawn', 'delete', 'apply_force'],
62
+ description: 'Action to perform'
63
+ },
64
+ // Common
65
+ actorName: { type: 'string', description: 'Actor name (optional for spawn, auto-generated if not provided)' },
66
+ classPath: {
67
+ type: 'string',
68
+ description: 'Actor class (e.g., "StaticMeshActor", "CameraActor") OR asset path (e.g., "/Engine/BasicShapes/Cube", "/Game/MyMesh"). Asset paths will automatically spawn as StaticMeshActor with the mesh applied'
69
+ },
70
+ // Transform
71
+ location: {
72
+ type: 'object',
73
+ properties: {
74
+ x: { type: 'number' },
75
+ y: { type: 'number' },
76
+ z: { type: 'number' }
77
+ }
78
+ },
79
+ rotation: {
80
+ type: 'object',
81
+ properties: {
82
+ pitch: { type: 'number' },
83
+ yaw: { type: 'number' },
84
+ roll: { type: 'number' }
85
+ }
86
+ },
87
+ // Physics
88
+ force: {
89
+ type: 'object',
90
+ properties: {
91
+ x: { type: 'number' },
92
+ y: { type: 'number' },
93
+ z: { type: 'number' }
94
+ }
95
+ }
96
+ },
97
+ required: ['action']
98
+ },
99
+ outputSchema: {
100
+ type: 'object',
101
+ properties: {
102
+ success: { type: 'boolean', description: 'Whether the operation succeeded' },
103
+ actor: { type: 'string', description: 'Spawned actor name (for spawn)' },
104
+ deleted: { type: 'string', description: 'Deleted actor name (for delete)' },
105
+ physicsEnabled: { type: 'boolean', description: 'Physics state (for apply_force)' },
106
+ message: { type: 'string', description: 'Status message' },
107
+ error: { type: 'string', description: 'Error message if failed' }
108
+ }
109
+ }
110
+ },
111
+
112
+ // 3. EDITOR CONTROL - Combines editor operations
113
+ {
114
+ name: 'control_editor',
115
+ description: 'Control editor - PIE mode, camera, viewport',
116
+ inputSchema: {
117
+ type: 'object',
118
+ properties: {
119
+ action: {
120
+ type: 'string',
121
+ enum: ['play', 'stop', 'set_camera', 'set_view_mode'],
122
+ description: 'Editor action'
123
+ },
124
+ // Camera
125
+ location: {
126
+ type: 'object',
127
+ properties: {
128
+ x: { type: 'number' },
129
+ y: { type: 'number' },
130
+ z: { type: 'number' }
131
+ }
132
+ },
133
+ rotation: {
134
+ type: 'object',
135
+ properties: {
136
+ pitch: { type: 'number' },
137
+ yaw: { type: 'number' },
138
+ roll: { type: 'number' }
139
+ }
140
+ },
141
+ // View mode
142
+ viewMode: {
143
+ type: 'string',
144
+ description: 'View mode (Lit, Unlit, Wireframe, etc.)'
145
+ }
146
+ },
147
+ required: ['action']
148
+ },
149
+ outputSchema: {
150
+ type: 'object',
151
+ properties: {
152
+ success: { type: 'boolean', description: 'Whether the operation succeeded' },
153
+ playing: { type: 'boolean', description: 'PIE play state' },
154
+ location: {
155
+ type: 'array',
156
+ items: { type: 'number' },
157
+ description: 'Camera location [x, y, z]'
158
+ },
159
+ rotation: {
160
+ type: 'array',
161
+ items: { type: 'number' },
162
+ description: 'Camera rotation [pitch, yaw, roll]'
163
+ },
164
+ viewMode: { type: 'string', description: 'Current view mode' },
165
+ message: { type: 'string', description: 'Status message' }
166
+ }
167
+ }
168
+ },
169
+
170
+ // 4. LEVEL MANAGER - Combines level and lighting operations
171
+ {
172
+ name: 'manage_level',
173
+ description: 'Manage levels and lighting',
174
+ inputSchema: {
175
+ type: 'object',
176
+ properties: {
177
+ action: {
178
+ type: 'string',
179
+ enum: ['load', 'save', 'stream', 'create_light', 'build_lighting'],
180
+ description: 'Level action'
181
+ },
182
+ // Level
183
+ levelPath: { type: 'string', description: 'Level path' },
184
+ levelName: { type: 'string', description: 'Level name' },
185
+ streaming: { type: 'boolean', description: 'Use streaming' },
186
+ shouldBeLoaded: { type: 'boolean', description: 'Load or unload' },
187
+ shouldBeVisible: { type: 'boolean', description: 'Visibility' },
188
+ // Lighting
189
+ lightType: {
190
+ type: 'string',
191
+ enum: ['Directional', 'Point', 'Spot', 'Rect'],
192
+ description: 'Light type'
193
+ },
194
+ name: { type: 'string', description: 'Object name' },
195
+ location: {
196
+ type: 'object',
197
+ properties: {
198
+ x: { type: 'number' },
199
+ y: { type: 'number' },
200
+ z: { type: 'number' }
201
+ }
202
+ },
203
+ intensity: { type: 'number', description: 'Light intensity' },
204
+ quality: {
205
+ type: 'string',
206
+ enum: ['Preview', 'Medium', 'High', 'Production'],
207
+ description: 'Build quality'
208
+ }
209
+ },
210
+ required: ['action']
211
+ },
212
+ outputSchema: {
213
+ type: 'object',
214
+ properties: {
215
+ success: { type: 'boolean', description: 'Whether the operation succeeded' },
216
+ levelName: { type: 'string', description: 'Level name' },
217
+ loaded: { type: 'boolean', description: 'Level loaded state' },
218
+ visible: { type: 'boolean', description: 'Level visibility' },
219
+ lightName: { type: 'string', description: 'Created light name' },
220
+ buildQuality: { type: 'string', description: 'Lighting build quality used' },
221
+ message: { type: 'string', description: 'Status message' }
222
+ }
223
+ }
224
+ },
225
+
226
+ // 5. ANIMATION SYSTEM - Combines animation and physics setup
227
+ {
228
+ name: 'animation_physics',
229
+ description: 'Animation and physics systems',
230
+ inputSchema: {
231
+ type: 'object',
232
+ properties: {
233
+ action: {
234
+ type: 'string',
235
+ enum: ['create_animation_bp', 'play_montage', 'setup_ragdoll'],
236
+ description: 'Action type'
237
+ },
238
+ // Common
239
+ name: { type: 'string', description: 'Asset name' },
240
+ actorName: { type: 'string', description: 'Actor name' },
241
+ // Animation
242
+ skeletonPath: { type: 'string', description: 'Skeleton path' },
243
+ montagePath: { type: 'string', description: 'Montage path' },
244
+ animationPath: { type: 'string', description: 'Animation path' },
245
+ playRate: { type: 'number', description: 'Play rate' },
246
+ // Physics
247
+ physicsAssetName: { type: 'string', description: 'Physics asset' },
248
+ blendWeight: { type: 'number', description: 'Blend weight' },
249
+ savePath: { type: 'string', description: 'Save location' }
250
+ },
251
+ required: ['action']
252
+ },
253
+ outputSchema: {
254
+ type: 'object',
255
+ properties: {
256
+ success: { type: 'boolean', description: 'Whether the operation succeeded' },
257
+ blueprintPath: { type: 'string', description: 'Created animation blueprint path' },
258
+ playing: { type: 'boolean', description: 'Montage playing state' },
259
+ playRate: { type: 'number', description: 'Current play rate' },
260
+ ragdollActive: { type: 'boolean', description: 'Ragdoll activation state' },
261
+ message: { type: 'string', description: 'Status message' }
262
+ }
263
+ }
264
+ },
265
+
266
+ // 6. EFFECTS SYSTEM - Combines particles and visual effects
267
+ {
268
+ name: 'create_effect',
269
+ description: 'Create visual effects - particles, Niagara',
270
+ inputSchema: {
271
+ type: 'object',
272
+ properties: {
273
+ action: {
274
+ type: 'string',
275
+ enum: ['particle', 'niagara', 'debug_shape'],
276
+ description: 'Effect type'
277
+ },
278
+ // Common
279
+ name: { type: 'string', description: 'Effect name' },
280
+ location: {
281
+ type: 'object',
282
+ properties: {
283
+ x: { type: 'number' },
284
+ y: { type: 'number' },
285
+ z: { type: 'number' }
286
+ }
287
+ },
288
+ // Particles
289
+ effectType: {
290
+ type: 'string',
291
+ description: 'Effect type (Fire, Smoke, Water, etc.)'
292
+ },
293
+ systemPath: { type: 'string', description: 'Niagara system path' },
294
+ scale: { type: 'number', description: 'Scale factor' },
295
+ // Debug
296
+ shape: {
297
+ type: 'string',
298
+ description: 'Debug shape (Line, Box, Sphere, etc.)'
299
+ },
300
+ size: { type: 'number', description: 'Size/radius' },
301
+ color: {
302
+ type: 'array',
303
+ items: { type: 'number' },
304
+ description: 'RGBA color'
305
+ },
306
+ duration: { type: 'number', description: 'Duration' }
307
+ },
308
+ required: ['action']
309
+ },
310
+ outputSchema: {
311
+ type: 'object',
312
+ properties: {
313
+ success: { type: 'boolean', description: 'Whether the operation succeeded' },
314
+ effectName: { type: 'string', description: 'Created effect name' },
315
+ effectPath: { type: 'string', description: 'Effect asset path' },
316
+ spawned: { type: 'boolean', description: 'Whether effect was spawned in level' },
317
+ location: {
318
+ type: 'array',
319
+ items: { type: 'number' },
320
+ description: 'Effect location [x, y, z]'
321
+ },
322
+ message: { type: 'string', description: 'Status message' }
323
+ }
324
+ }
325
+ },
326
+
327
+ // 7. BLUEPRINT MANAGER - Blueprint operations
328
+ {
329
+ name: 'manage_blueprint',
330
+ description: 'Create and modify blueprints',
331
+ inputSchema: {
332
+ type: 'object',
333
+ properties: {
334
+ action: {
335
+ type: 'string',
336
+ enum: ['create', 'add_component'],
337
+ description: 'Blueprint action'
338
+ },
339
+ name: { type: 'string', description: 'Blueprint name' },
340
+ blueprintType: {
341
+ type: 'string',
342
+ description: 'Type (Actor, Pawn, Character, etc.)'
343
+ },
344
+ componentType: { type: 'string', description: 'Component type' },
345
+ componentName: { type: 'string', description: 'Component name' },
346
+ savePath: { type: 'string', description: 'Save location' }
347
+ },
348
+ required: ['action', 'name']
349
+ },
350
+ outputSchema: {
351
+ type: 'object',
352
+ properties: {
353
+ success: { type: 'boolean', description: 'Whether the operation succeeded' },
354
+ blueprintPath: { type: 'string', description: 'Blueprint asset path' },
355
+ componentAdded: { type: 'string', description: 'Added component name' },
356
+ message: { type: 'string', description: 'Status message' },
357
+ warning: { type: 'string', description: 'Warning if manual steps needed' }
358
+ }
359
+ }
360
+ },
361
+
362
+ // 8. ENVIRONMENT BUILDER - Landscape and foliage
363
+ {
364
+ name: 'build_environment',
365
+ description: 'Build environment - landscape, foliage',
366
+ inputSchema: {
367
+ type: 'object',
368
+ properties: {
369
+ action: {
370
+ type: 'string',
371
+ enum: ['create_landscape', 'sculpt', 'add_foliage', 'paint_foliage'],
372
+ description: 'Environment action'
373
+ },
374
+ // Common
375
+ name: { type: 'string', description: 'Object name' },
376
+ // Landscape
377
+ sizeX: { type: 'number', description: 'Landscape size X' },
378
+ sizeY: { type: 'number', description: 'Landscape size Y' },
379
+ tool: {
380
+ type: 'string',
381
+ description: 'Sculpt tool (Sculpt, Smooth, Flatten, etc.)'
382
+ },
383
+ // Foliage
384
+ meshPath: { type: 'string', description: 'Mesh path' },
385
+ foliageType: { type: 'string', description: 'Foliage type' },
386
+ density: { type: 'number', description: 'Density' },
387
+ // Painting
388
+ position: {
389
+ type: 'object',
390
+ properties: {
391
+ x: { type: 'number' },
392
+ y: { type: 'number' },
393
+ z: { type: 'number' }
394
+ }
395
+ },
396
+ brushSize: { type: 'number', description: 'Brush size' },
397
+ strength: { type: 'number', description: 'Tool strength' }
398
+ },
399
+ required: ['action']
400
+ },
401
+ outputSchema: {
402
+ type: 'object',
403
+ properties: {
404
+ success: { type: 'boolean', description: 'Whether the operation succeeded' },
405
+ landscapeName: { type: 'string', description: 'Landscape actor name' },
406
+ foliageTypeName: { type: 'string', description: 'Foliage type name' },
407
+ instancesPlaced: { type: 'number', description: 'Number of foliage instances placed' },
408
+ message: { type: 'string', description: 'Status message' }
409
+ }
410
+ }
411
+ },
412
+
413
+ // 9. PERFORMANCE & AUDIO - System settings
414
+ {
415
+ name: 'system_control',
416
+ description: 'Control performance, audio, UI, screenshots, and engine lifecycle',
417
+ inputSchema: {
418
+ type: 'object',
419
+ properties: {
420
+ action: {
421
+ type: 'string',
422
+ enum: ['profile', 'show_fps', 'set_quality', 'play_sound', 'create_widget', 'show_widget', 'screenshot', 'engine_start', 'engine_quit'],
423
+ description: 'System action'
424
+ },
425
+ // Performance
426
+ profileType: {
427
+ type: 'string',
428
+ description: 'Profile type (CPU, GPU, Memory)'
429
+ },
430
+ category: {
431
+ type: 'string',
432
+ description: 'Quality category (Shadows, Textures, etc.)'
433
+ },
434
+ level: { type: 'number', description: 'Quality level (0-4)' },
435
+ enabled: { type: 'boolean', description: 'Enable/disable' },
436
+ verbose: { type: 'boolean', description: 'Verbose output' },
437
+ // Audio
438
+ soundPath: { type: 'string', description: 'Sound asset path' },
439
+ location: {
440
+ type: 'object',
441
+ properties: {
442
+ x: { type: 'number' },
443
+ y: { type: 'number' },
444
+ z: { type: 'number' }
445
+ }
446
+ },
447
+ volume: { type: 'number', description: 'Volume (0-1)' },
448
+ is3D: { type: 'boolean', description: '3D sound' },
449
+ // UI
450
+ widgetName: { type: 'string', description: 'Widget name' },
451
+ widgetType: {
452
+ type: 'string',
453
+ description: 'Widget type (HUD, Menu, etc.)'
454
+ },
455
+ visible: { type: 'boolean', description: 'Visibility' },
456
+ // Screenshot
457
+ resolution: { type: 'string', description: 'e.g. 1920x1080' },
458
+ // Engine lifecycle
459
+ projectPath: { type: 'string', description: 'Path to .uproject (for engine_start, optional if UE_PROJECT_PATH env set)' },
460
+ editorExe: { type: 'string', description: 'Path to UE Editor executable (optional if UE_EDITOR_EXE env set)' }
461
+ },
462
+ required: ['action']
463
+ },
464
+ outputSchema: {
465
+ type: 'object',
466
+ properties: {
467
+ success: { type: 'boolean', description: 'Whether the operation succeeded' },
468
+ profiling: { type: 'boolean', description: 'Profiling active state' },
469
+ fpsVisible: { type: 'boolean', description: 'FPS display state' },
470
+ qualityLevel: { type: 'number', description: 'Current quality level' },
471
+ soundPlaying: { type: 'boolean', description: 'Sound playback state' },
472
+ widgetPath: { type: 'string', description: 'Created widget path' },
473
+ widgetVisible: { type: 'boolean', description: 'Widget visibility state' },
474
+ imagePath: { type: 'string', description: 'Saved screenshot path' },
475
+ imageBase64: { type: 'string', description: 'Screenshot image base64 (truncated)' },
476
+ pid: { type: 'number', description: 'Process ID for launched editor' },
477
+ message: { type: 'string', description: 'Status message' },
478
+ error: { type: 'string', description: 'Error message if failed' }
479
+ }
480
+ }
481
+ },
482
+
483
+ // 10. CONSOLE COMMAND - Universal tool
484
+ {
485
+ name: 'console_command',
486
+ description: 'Execute any console command in Unreal Engine',
487
+ inputSchema: {
488
+ type: 'object',
489
+ properties: {
490
+ command: { type: 'string', description: 'Console command to execute' }
491
+ },
492
+ required: ['command']
493
+ },
494
+ outputSchema: {
495
+ type: 'object',
496
+ properties: {
497
+ success: { type: 'boolean', description: 'Whether the command executed' },
498
+ command: { type: 'string', description: 'The command that was executed' },
499
+ result: { type: 'object', description: 'Command execution result' },
500
+ warning: { type: 'string', description: 'Warning if command may be unrecognized' },
501
+ info: { type: 'string', description: 'Additional information' },
502
+ error: { type: 'string', description: 'Error message if failed' }
503
+ }
504
+ }
505
+ },
506
+
507
+ // 11. REMOTE CONTROL PRESETS
508
+ {
509
+ name: 'manage_rc',
510
+ description: 'Manage Remote Control presets: create, expose, list fields, set/get values',
511
+ inputSchema: {
512
+ type: 'object',
513
+ properties: {
514
+ action: {
515
+ type: 'string',
516
+ enum: ['create_preset', 'expose_actor', 'expose_property', 'list_fields', 'set_property', 'get_property'],
517
+ description: 'RC action'
518
+ },
519
+ name: { type: 'string', description: 'Preset or entity name' },
520
+ path: { type: 'string', description: 'Preset save path (e.g. /Game/RCPresets)' },
521
+ presetPath: { type: 'string', description: 'Preset asset path (e.g. /Game/RCPresets/MyPreset)' },
522
+ actorName: { type: 'string', description: 'Actor label/name to expose' },
523
+ objectPath: { type: 'string', description: 'Object path for property get/set' },
524
+ propertyName: { type: 'string', description: 'Property name for remote property set/get' },
525
+ value: { description: 'Value for property set (JSON-serializable)' }
526
+ },
527
+ required: ['action']
528
+ },
529
+ outputSchema: {
530
+ type: 'object',
531
+ properties: {
532
+ success: { type: 'boolean' },
533
+ message: { type: 'string' },
534
+ presetPath: { type: 'string' },
535
+ fields: { type: 'array', items: { type: 'object' } },
536
+ value: {},
537
+ error: { type: 'string' }
538
+ }
539
+ }
540
+ },
541
+
542
+ // 12. SEQUENCER / CINEMATICS
543
+ {
544
+ name: 'manage_sequence',
545
+ description: 'Create/open sequences, add cameras/actors, manage bindings, control playback, and set properties',
546
+ inputSchema: {
547
+ type: 'object',
548
+ properties: {
549
+ action: {
550
+ type: 'string',
551
+ enum: [
552
+ 'create', 'open', 'add_camera', 'add_actor', 'add_actors',
553
+ 'remove_actors', 'get_bindings', 'add_spawnable_from_class',
554
+ 'play', 'pause', 'stop', 'set_properties', 'get_properties', 'set_playback_speed'
555
+ ],
556
+ description: 'Sequence action'
557
+ },
558
+ name: { type: 'string', description: 'Sequence name (for create)' },
559
+ path: { type: 'string', description: 'Save path (for create), or asset path (for open/operations)' },
560
+ actorName: { type: 'string', description: 'Actor name to add as possessable' },
561
+ actorNames: { type: 'array', items: { type: 'string' }, description: 'Multiple actor names for batch operations' },
562
+ className: { type: 'string', description: 'Class name for spawnable (e.g. StaticMeshActor, CineCameraActor)' },
563
+ spawnable: { type: 'boolean', description: 'If true, camera is spawnable' },
564
+ frameRate: { type: 'number', description: 'Frame rate for sequence' },
565
+ lengthInFrames: { type: 'number', description: 'Total length in frames' },
566
+ playbackStart: { type: 'number', description: 'Playback start frame' },
567
+ playbackEnd: { type: 'number', description: 'Playback end frame' },
568
+ speed: { type: 'number', description: 'Playback speed multiplier' },
569
+ loopMode: { type: 'string', enum: ['once', 'loop', 'pingpong'], description: 'Playback loop mode' }
570
+ },
571
+ required: ['action']
572
+ },
573
+ outputSchema: {
574
+ type: 'object',
575
+ properties: {
576
+ success: { type: 'boolean' },
577
+ sequencePath: { type: 'string' },
578
+ cameraBindingId: { type: 'string' },
579
+ bindings: { type: 'array', items: { type: 'object' } },
580
+ actorsAdded: { type: 'array', items: { type: 'string' } },
581
+ removedActors: { type: 'array', items: { type: 'string' } },
582
+ notFound: { type: 'array', items: { type: 'string' } },
583
+ spawnableId: { type: 'string' },
584
+ frameRate: { type: 'object' },
585
+ playbackStart: { type: 'number' },
586
+ playbackEnd: { type: 'number' },
587
+ duration: { type: 'number' },
588
+ playbackSpeed: { type: 'number' },
589
+ message: { type: 'string' },
590
+ error: { type: 'string' }
591
+ }
592
+ }
593
+ },
594
+
595
+ // 13. INTROSPECTION
596
+ {
597
+ name: 'inspect',
598
+ description: 'Inspect objects and set properties safely',
599
+ inputSchema: {
600
+ type: 'object',
601
+ properties: {
602
+ action: { type: 'string', enum: ['inspect_object', 'set_property'], description: 'Inspection action' },
603
+ objectPath: { type: 'string', description: 'Object path' },
604
+ propertyName: { type: 'string', description: 'Property to set/get' },
605
+ value: { description: 'Value to set (JSON-serializable)' }
606
+ },
607
+ required: ['action']
608
+ },
609
+ outputSchema: {
610
+ type: 'object',
611
+ properties: {
612
+ success: { type: 'boolean' },
613
+ info: { type: 'object' },
614
+ message: { type: 'string' },
615
+ error: { type: 'string' }
616
+ }
617
+ }
618
+ }
619
+ ];