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,907 @@
1
+ // Tool definitions for all 16 MCP tools
2
+
3
+ export const toolDefinitions = [
4
+ // Asset Tools
5
+ {
6
+ name: 'list_assets',
7
+ description: 'List all assets in a directory',
8
+ inputSchema: {
9
+ type: 'object',
10
+ properties: {
11
+ directory: { type: 'string', description: 'Directory path (e.g. /Game/Assets)' },
12
+ recursive: { type: 'boolean', description: 'List recursively' }
13
+ },
14
+ required: ['directory']
15
+ },
16
+ outputSchema: {
17
+ type: 'object',
18
+ properties: {
19
+ assets: {
20
+ type: 'array',
21
+ items: {
22
+ type: 'object',
23
+ properties: {
24
+ Name: { type: 'string' },
25
+ Path: { type: 'string' },
26
+ Class: { type: 'string' },
27
+ PackagePath: { type: 'string' }
28
+ }
29
+ }
30
+ },
31
+ error: { type: 'string' },
32
+ note: { type: 'string' }
33
+ }
34
+ }
35
+ },
36
+ {
37
+ name: 'import_asset',
38
+ description: 'Import an asset from file system',
39
+ inputSchema: {
40
+ type: 'object',
41
+ properties: {
42
+ sourcePath: { type: 'string', description: 'File system path to import from' },
43
+ destinationPath: { type: 'string', description: 'Project path to import to' }
44
+ },
45
+ required: ['sourcePath', 'destinationPath']
46
+ },
47
+ outputSchema: {
48
+ type: 'object',
49
+ properties: {
50
+ success: { type: 'boolean' },
51
+ paths: { type: 'array', items: { type: 'string' } },
52
+ message: { type: 'string' },
53
+ error: { type: 'string' }
54
+ }
55
+ }
56
+ },
57
+
58
+ // Actor Tools
59
+ {
60
+ name: 'spawn_actor',
61
+ description: 'Spawn a new actor in the level',
62
+ inputSchema: {
63
+ type: 'object',
64
+ properties: {
65
+ classPath: { type: 'string', description: 'Blueprint/class path' },
66
+ location: {
67
+ type: 'object',
68
+ properties: {
69
+ x: { type: 'number' },
70
+ y: { type: 'number' },
71
+ z: { type: 'number' }
72
+ }
73
+ },
74
+ rotation: {
75
+ type: 'object',
76
+ properties: {
77
+ pitch: { type: 'number' },
78
+ yaw: { type: 'number' },
79
+ roll: { type: 'number' }
80
+ }
81
+ }
82
+ },
83
+ required: ['classPath']
84
+ },
85
+ outputSchema: {
86
+ type: 'object',
87
+ properties: {
88
+ success: { type: 'boolean' },
89
+ actor: { type: 'string' },
90
+ error: { type: 'string' }
91
+ }
92
+ }
93
+ },
94
+ {
95
+ name: 'delete_actor',
96
+ description: 'Delete an actor from the level',
97
+ inputSchema: {
98
+ type: 'object',
99
+ properties: {
100
+ actorName: { type: 'string', description: 'Name of the actor to delete' }
101
+ },
102
+ required: ['actorName']
103
+ },
104
+ outputSchema: {
105
+ type: 'object',
106
+ properties: {
107
+ success: { type: 'boolean' },
108
+ deleted: { type: 'string' },
109
+ error: { type: 'string' }
110
+ }
111
+ }
112
+ },
113
+
114
+ // Material Tools
115
+ {
116
+ name: 'create_material',
117
+ description: 'Create a new material asset',
118
+ inputSchema: {
119
+ type: 'object',
120
+ properties: {
121
+ name: { type: 'string', description: 'Material name' },
122
+ path: { type: 'string', description: 'Path to create material' }
123
+ },
124
+ required: ['name', 'path']
125
+ },
126
+ outputSchema: {
127
+ type: 'object',
128
+ properties: {
129
+ success: { type: 'boolean' },
130
+ materialPath: { type: 'string' },
131
+ message: { type: 'string' },
132
+ error: { type: 'string' }
133
+ }
134
+ }
135
+ },
136
+ {
137
+ name: 'apply_material_to_actor',
138
+ description: 'Apply a material to an actor in the level',
139
+ inputSchema: {
140
+ type: 'object',
141
+ properties: {
142
+ actorPath: { type: 'string', description: 'Path to the actor' },
143
+ materialPath: { type: 'string', description: 'Path to the material asset' },
144
+ slotIndex: { type: 'number', description: 'Material slot index (default: 0)' }
145
+ },
146
+ required: ['actorPath', 'materialPath']
147
+ },
148
+ outputSchema: {
149
+ type: 'object',
150
+ properties: {
151
+ success: { type: 'boolean' },
152
+ message: { type: 'string' }
153
+ }
154
+ }
155
+ },
156
+
157
+ // Editor Tools
158
+ {
159
+ name: 'play_in_editor',
160
+ description: 'Start Play In Editor (PIE) mode',
161
+ inputSchema: {
162
+ type: 'object',
163
+ properties: {}
164
+ },
165
+ outputSchema: {
166
+ type: 'object',
167
+ properties: {
168
+ success: { type: 'boolean' },
169
+ playing: { type: 'boolean' },
170
+ message: { type: 'string' }
171
+ }
172
+ }
173
+ },
174
+ {
175
+ name: 'stop_play_in_editor',
176
+ description: 'Stop Play In Editor (PIE) mode',
177
+ inputSchema: {
178
+ type: 'object',
179
+ properties: {}
180
+ },
181
+ outputSchema: {
182
+ type: 'object',
183
+ properties: {
184
+ success: { type: 'boolean' },
185
+ playing: { type: 'boolean' },
186
+ message: { type: 'string' }
187
+ }
188
+ }
189
+ },
190
+ {
191
+ name: 'set_camera',
192
+ description: 'Set viewport camera position and rotation',
193
+ inputSchema: {
194
+ type: 'object',
195
+ properties: {
196
+ location: {
197
+ type: 'object',
198
+ properties: {
199
+ x: { type: 'number' },
200
+ y: { type: 'number' },
201
+ z: { type: 'number' }
202
+ }
203
+ },
204
+ rotation: {
205
+ type: 'object',
206
+ properties: {
207
+ pitch: { type: 'number' },
208
+ yaw: { type: 'number' },
209
+ roll: { type: 'number' }
210
+ }
211
+ }
212
+ },
213
+ required: ['location']
214
+ },
215
+ outputSchema: {
216
+ type: 'object',
217
+ properties: {
218
+ success: { type: 'boolean' },
219
+ location: { type: 'array', items: { type: 'number' } },
220
+ rotation: { type: 'array', items: { type: 'number' } }
221
+ }
222
+ }
223
+ },
224
+
225
+ // Animation Tools
226
+ {
227
+ name: 'create_animation_blueprint',
228
+ description: 'Create an animation blueprint',
229
+ inputSchema: {
230
+ type: 'object',
231
+ properties: {
232
+ name: { type: 'string', description: 'Animation blueprint name' },
233
+ skeletonPath: { type: 'string', description: 'Path to skeleton' },
234
+ savePath: { type: 'string', description: 'Save location' }
235
+ },
236
+ required: ['name', 'skeletonPath']
237
+ },
238
+ outputSchema: {
239
+ type: 'object',
240
+ properties: {
241
+ success: { type: 'boolean' },
242
+ blueprintPath: { type: 'string' },
243
+ message: { type: 'string' }
244
+ }
245
+ }
246
+ },
247
+ {
248
+ name: 'play_animation_montage',
249
+ description: 'Play an animation montage on an actor',
250
+ inputSchema: {
251
+ type: 'object',
252
+ properties: {
253
+ actorName: { type: 'string', description: 'Actor name' },
254
+ montagePath: { type: 'string', description: 'Path to montage' },
255
+ playRate: { type: 'number', description: 'Playback rate' }
256
+ },
257
+ required: ['actorName', 'montagePath']
258
+ },
259
+ outputSchema: {
260
+ type: 'object',
261
+ properties: {
262
+ success: { type: 'boolean' },
263
+ playing: { type: 'boolean' },
264
+ message: { type: 'string' }
265
+ }
266
+ }
267
+ },
268
+
269
+ // Physics Tools
270
+ {
271
+ name: 'setup_ragdoll',
272
+ description: 'Setup ragdoll physics for a skeletal mesh',
273
+ inputSchema: {
274
+ type: 'object',
275
+ properties: {
276
+ skeletonPath: { type: 'string', description: 'Path to skeleton' },
277
+ physicsAssetName: { type: 'string', description: 'Physics asset name' },
278
+ blendWeight: { type: 'number', description: 'Blend weight (0-1)' }
279
+ },
280
+ required: ['skeletonPath', 'physicsAssetName']
281
+ },
282
+ outputSchema: {
283
+ type: 'object',
284
+ properties: {
285
+ success: { type: 'boolean' },
286
+ ragdollActive: { type: 'boolean' },
287
+ message: { type: 'string' }
288
+ }
289
+ }
290
+ },
291
+ {
292
+ name: 'apply_force',
293
+ description: 'Apply force to an actor',
294
+ inputSchema: {
295
+ type: 'object',
296
+ properties: {
297
+ actorName: { type: 'string', description: 'Actor name' },
298
+ force: {
299
+ type: 'object',
300
+ properties: {
301
+ x: { type: 'number' },
302
+ y: { type: 'number' },
303
+ z: { type: 'number' }
304
+ }
305
+ }
306
+ },
307
+ required: ['actorName', 'force']
308
+ },
309
+ outputSchema: {
310
+ type: 'object',
311
+ properties: {
312
+ success: { type: 'boolean' },
313
+ physicsEnabled: { type: 'boolean' },
314
+ message: { type: 'string' },
315
+ error: { type: 'string' }
316
+ }
317
+ }
318
+ },
319
+
320
+ // Niagara Tools
321
+ {
322
+ name: 'create_particle_effect',
323
+ description: 'Create a Niagara particle effect',
324
+ inputSchema: {
325
+ type: 'object',
326
+ properties: {
327
+ effectType: { type: 'string', description: 'Effect type (Fire, Smoke, Water, etc.)' },
328
+ name: { type: 'string', description: 'Effect name' },
329
+ location: {
330
+ type: 'object',
331
+ properties: {
332
+ x: { type: 'number' },
333
+ y: { type: 'number' },
334
+ z: { type: 'number' }
335
+ }
336
+ }
337
+ },
338
+ required: ['effectType', 'name', 'location']
339
+ },
340
+ outputSchema: {
341
+ type: 'object',
342
+ properties: {
343
+ success: { type: 'boolean' },
344
+ effectName: { type: 'string' },
345
+ effectPath: { type: 'string' },
346
+ message: { type: 'string' }
347
+ }
348
+ }
349
+ },
350
+ {
351
+ name: 'spawn_niagara_system',
352
+ description: 'Spawn a Niagara system in the level',
353
+ inputSchema: {
354
+ type: 'object',
355
+ properties: {
356
+ systemPath: { type: 'string', description: 'Path to Niagara system' },
357
+ location: {
358
+ type: 'object',
359
+ properties: {
360
+ x: { type: 'number' },
361
+ y: { type: 'number' },
362
+ z: { type: 'number' }
363
+ }
364
+ },
365
+ scale: { type: 'number', description: 'Scale factor' }
366
+ },
367
+ required: ['systemPath', 'location']
368
+ },
369
+ outputSchema: {
370
+ type: 'object',
371
+ properties: {
372
+ success: { type: 'boolean' },
373
+ spawned: { type: 'boolean' },
374
+ message: { type: 'string' }
375
+ }
376
+ }
377
+ },
378
+
379
+ // Blueprint Tools
380
+ {
381
+ name: 'create_blueprint',
382
+ description: 'Create a new blueprint',
383
+ inputSchema: {
384
+ type: 'object',
385
+ properties: {
386
+ name: { type: 'string', description: 'Blueprint name' },
387
+ blueprintType: { type: 'string', description: 'Type (Actor, Pawn, Character, etc.)' },
388
+ savePath: { type: 'string', description: 'Save location' }
389
+ },
390
+ required: ['name', 'blueprintType']
391
+ },
392
+ outputSchema: {
393
+ type: 'object',
394
+ properties: {
395
+ success: { type: 'boolean' },
396
+ blueprintPath: { type: 'string' },
397
+ message: { type: 'string' }
398
+ }
399
+ }
400
+ },
401
+ {
402
+ name: 'add_blueprint_component',
403
+ description: 'Add a component to a blueprint',
404
+ inputSchema: {
405
+ type: 'object',
406
+ properties: {
407
+ blueprintName: { type: 'string', description: 'Blueprint name' },
408
+ componentType: { type: 'string', description: 'Component type' },
409
+ componentName: { type: 'string', description: 'Component name' }
410
+ },
411
+ required: ['blueprintName', 'componentType', 'componentName']
412
+ },
413
+ outputSchema: {
414
+ type: 'object',
415
+ properties: {
416
+ success: { type: 'boolean' },
417
+ componentAdded: { type: 'string' },
418
+ message: { type: 'string' },
419
+ warning: { type: 'string' }
420
+ }
421
+ }
422
+ },
423
+
424
+ // Level Tools
425
+ {
426
+ name: 'load_level',
427
+ description: 'Load a level',
428
+ inputSchema: {
429
+ type: 'object',
430
+ properties: {
431
+ levelPath: { type: 'string', description: 'Path to level' },
432
+ streaming: { type: 'boolean', description: 'Use streaming' }
433
+ },
434
+ required: ['levelPath']
435
+ },
436
+ outputSchema: {
437
+ type: 'object',
438
+ properties: {
439
+ success: { type: 'boolean' },
440
+ levelName: { type: 'string' },
441
+ message: { type: 'string' }
442
+ }
443
+ }
444
+ },
445
+ {
446
+ name: 'save_level',
447
+ description: 'Save the current level',
448
+ inputSchema: {
449
+ type: 'object',
450
+ properties: {
451
+ levelName: { type: 'string', description: 'Level name' },
452
+ savePath: { type: 'string', description: 'Save path' }
453
+ }
454
+ },
455
+ outputSchema: {
456
+ type: 'object',
457
+ properties: {
458
+ success: { type: 'boolean' },
459
+ saved: { type: 'boolean' },
460
+ message: { type: 'string' }
461
+ }
462
+ }
463
+ },
464
+ {
465
+ name: 'stream_level',
466
+ description: 'Stream a level in or out',
467
+ inputSchema: {
468
+ type: 'object',
469
+ properties: {
470
+ levelName: { type: 'string', description: 'Level name' },
471
+ shouldBeLoaded: { type: 'boolean', description: 'Load or unload' },
472
+ shouldBeVisible: { type: 'boolean', description: 'Make visible' }
473
+ },
474
+ required: ['levelName', 'shouldBeLoaded', 'shouldBeVisible']
475
+ },
476
+ outputSchema: {
477
+ type: 'object',
478
+ properties: {
479
+ success: { type: 'boolean' },
480
+ loaded: { type: 'boolean' },
481
+ visible: { type: 'boolean' },
482
+ message: { type: 'string' }
483
+ }
484
+ }
485
+ },
486
+
487
+ // Lighting Tools
488
+ {
489
+ name: 'create_light',
490
+ description: 'Create a light in the level',
491
+ inputSchema: {
492
+ type: 'object',
493
+ properties: {
494
+ lightType: { type: 'string', description: 'Light type (Directional, Point, Spot, Rect)' },
495
+ name: { type: 'string', description: 'Light name' },
496
+ location: {
497
+ type: 'object',
498
+ properties: {
499
+ x: { type: 'number' },
500
+ y: { type: 'number' },
501
+ z: { type: 'number' }
502
+ }
503
+ },
504
+ intensity: { type: 'number', description: 'Light intensity' }
505
+ },
506
+ required: ['lightType', 'name']
507
+ },
508
+ outputSchema: {
509
+ type: 'object',
510
+ properties: {
511
+ success: { type: 'boolean' },
512
+ lightName: { type: 'string' },
513
+ message: { type: 'string' }
514
+ }
515
+ }
516
+ },
517
+ {
518
+ name: 'build_lighting',
519
+ description: 'Build lighting for the current level',
520
+ inputSchema: {
521
+ type: 'object',
522
+ properties: {
523
+ quality: { type: 'string', description: 'Quality (Preview, Medium, High, Production)' }
524
+ }
525
+ },
526
+ outputSchema: {
527
+ type: 'object',
528
+ properties: {
529
+ success: { type: 'boolean' },
530
+ quality: { type: 'string' },
531
+ message: { type: 'string' }
532
+ }
533
+ }
534
+ },
535
+
536
+ // Landscape Tools
537
+ {
538
+ name: 'create_landscape',
539
+ description: 'Create a new landscape',
540
+ inputSchema: {
541
+ type: 'object',
542
+ properties: {
543
+ name: { type: 'string', description: 'Landscape name' },
544
+ sizeX: { type: 'number', description: 'Size X' },
545
+ sizeY: { type: 'number', description: 'Size Y' },
546
+ materialPath: { type: 'string', description: 'Material path' }
547
+ },
548
+ required: ['name']
549
+ },
550
+ outputSchema: {
551
+ type: 'object',
552
+ properties: {
553
+ success: { type: 'boolean' },
554
+ landscapeName: { type: 'string' },
555
+ message: { type: 'string' }
556
+ }
557
+ }
558
+ },
559
+ {
560
+ name: 'sculpt_landscape',
561
+ description: 'Sculpt the landscape',
562
+ inputSchema: {
563
+ type: 'object',
564
+ properties: {
565
+ landscapeName: { type: 'string', description: 'Landscape name' },
566
+ tool: { type: 'string', description: 'Tool (Sculpt, Smooth, Flatten, etc.)' },
567
+ brushSize: { type: 'number', description: 'Brush size' },
568
+ strength: { type: 'number', description: 'Tool strength' }
569
+ },
570
+ required: ['landscapeName', 'tool']
571
+ },
572
+ outputSchema: {
573
+ type: 'object',
574
+ properties: {
575
+ success: { type: 'boolean' },
576
+ message: { type: 'string' }
577
+ }
578
+ }
579
+ },
580
+
581
+ // Foliage Tools
582
+ {
583
+ name: 'add_foliage_type',
584
+ description: 'Add a foliage type',
585
+ inputSchema: {
586
+ type: 'object',
587
+ properties: {
588
+ name: { type: 'string', description: 'Foliage type name' },
589
+ meshPath: { type: 'string', description: 'Path to mesh' },
590
+ density: { type: 'number', description: 'Density' }
591
+ },
592
+ required: ['name', 'meshPath']
593
+ },
594
+ outputSchema: {
595
+ type: 'object',
596
+ properties: {
597
+ success: { type: 'boolean' },
598
+ foliageTypeName: { type: 'string' },
599
+ message: { type: 'string' }
600
+ }
601
+ }
602
+ },
603
+ {
604
+ name: 'paint_foliage',
605
+ description: 'Paint foliage on landscape',
606
+ inputSchema: {
607
+ type: 'object',
608
+ properties: {
609
+ foliageType: { type: 'string', description: 'Foliage type' },
610
+ position: {
611
+ type: 'object',
612
+ properties: {
613
+ x: { type: 'number' },
614
+ y: { type: 'number' },
615
+ z: { type: 'number' }
616
+ }
617
+ },
618
+ brushSize: { type: 'number', description: 'Brush size' }
619
+ },
620
+ required: ['foliageType', 'position']
621
+ },
622
+ outputSchema: {
623
+ type: 'object',
624
+ properties: {
625
+ success: { type: 'boolean' },
626
+ instancesPlaced: { type: 'number' },
627
+ message: { type: 'string' }
628
+ }
629
+ }
630
+ },
631
+
632
+ // Debug Visualization Tools
633
+ {
634
+ name: 'draw_debug_shape',
635
+ description: 'Draw a debug shape',
636
+ inputSchema: {
637
+ type: 'object',
638
+ properties: {
639
+ shape: { type: 'string', description: 'Shape type (Line, Box, Sphere, etc.)' },
640
+ position: {
641
+ type: 'object',
642
+ properties: {
643
+ x: { type: 'number' },
644
+ y: { type: 'number' },
645
+ z: { type: 'number' }
646
+ }
647
+ },
648
+ size: { type: 'number', description: 'Size/radius' },
649
+ color: {
650
+ type: 'array',
651
+ items: { type: 'number' },
652
+ description: 'RGBA color'
653
+ },
654
+ duration: { type: 'number', description: 'Duration in seconds' }
655
+ },
656
+ required: ['shape', 'position']
657
+ },
658
+ outputSchema: {
659
+ type: 'object',
660
+ properties: {
661
+ success: { type: 'boolean' },
662
+ message: { type: 'string' }
663
+ }
664
+ }
665
+ },
666
+ {
667
+ name: 'set_view_mode',
668
+ description: 'Set the viewport view mode',
669
+ inputSchema: {
670
+ type: 'object',
671
+ properties: {
672
+ mode: { type: 'string', description: 'View mode (Lit, Unlit, Wireframe, etc.)' }
673
+ },
674
+ required: ['mode']
675
+ },
676
+ outputSchema: {
677
+ type: 'object',
678
+ properties: {
679
+ success: { type: 'boolean' },
680
+ viewMode: { type: 'string' },
681
+ message: { type: 'string' }
682
+ }
683
+ }
684
+ },
685
+
686
+ // Performance Tools
687
+ {
688
+ name: 'start_profiling',
689
+ description: 'Start performance profiling',
690
+ inputSchema: {
691
+ type: 'object',
692
+ properties: {
693
+ type: { type: 'string', description: 'Profiling type (CPU, GPU, Memory, etc.)' },
694
+ duration: { type: 'number', description: 'Duration in seconds' }
695
+ },
696
+ required: ['type']
697
+ },
698
+ outputSchema: {
699
+ type: 'object',
700
+ properties: {
701
+ success: { type: 'boolean' },
702
+ profiling: { type: 'boolean' },
703
+ message: { type: 'string' }
704
+ }
705
+ }
706
+ },
707
+ {
708
+ name: 'show_fps',
709
+ description: 'Show FPS counter',
710
+ inputSchema: {
711
+ type: 'object',
712
+ properties: {
713
+ enabled: { type: 'boolean', description: 'Enable FPS display' },
714
+ verbose: { type: 'boolean', description: 'Show verbose stats' }
715
+ },
716
+ required: ['enabled']
717
+ },
718
+ outputSchema: {
719
+ type: 'object',
720
+ properties: {
721
+ success: { type: 'boolean' },
722
+ fpsVisible: { type: 'boolean' },
723
+ message: { type: 'string' }
724
+ }
725
+ }
726
+ },
727
+ {
728
+ name: 'set_scalability',
729
+ description: 'Set scalability settings',
730
+ inputSchema: {
731
+ type: 'object',
732
+ properties: {
733
+ category: { type: 'string', description: 'Category (Shadows, Textures, Effects, etc.)' },
734
+ level: { type: 'number', description: 'Quality level (0-4)' }
735
+ },
736
+ required: ['category', 'level']
737
+ },
738
+ outputSchema: {
739
+ type: 'object',
740
+ properties: {
741
+ success: { type: 'boolean' },
742
+ qualityLevel: { type: 'number' },
743
+ message: { type: 'string' }
744
+ }
745
+ }
746
+ },
747
+
748
+ // Audio Tools
749
+ {
750
+ name: 'play_sound',
751
+ description: 'Play a sound',
752
+ inputSchema: {
753
+ type: 'object',
754
+ properties: {
755
+ soundPath: { type: 'string', description: 'Path to sound asset' },
756
+ location: {
757
+ type: 'object',
758
+ properties: {
759
+ x: { type: 'number' },
760
+ y: { type: 'number' },
761
+ z: { type: 'number' }
762
+ }
763
+ },
764
+ volume: { type: 'number', description: 'Volume (0-1)' },
765
+ is3D: { type: 'boolean', description: '3D or 2D sound' }
766
+ },
767
+ required: ['soundPath']
768
+ },
769
+ outputSchema: {
770
+ type: 'object',
771
+ properties: {
772
+ success: { type: 'boolean' },
773
+ soundPlaying: { type: 'boolean' },
774
+ message: { type: 'string' }
775
+ }
776
+ }
777
+ },
778
+ {
779
+ name: 'create_ambient_sound',
780
+ description: 'Create an ambient sound',
781
+ inputSchema: {
782
+ type: 'object',
783
+ properties: {
784
+ name: { type: 'string', description: 'Sound name' },
785
+ soundPath: { type: 'string', description: 'Path to sound' },
786
+ location: {
787
+ type: 'object',
788
+ properties: {
789
+ x: { type: 'number' },
790
+ y: { type: 'number' },
791
+ z: { type: 'number' }
792
+ }
793
+ },
794
+ radius: { type: 'number', description: 'Sound radius' }
795
+ },
796
+ required: ['name', 'soundPath', 'location']
797
+ },
798
+ outputSchema: {
799
+ type: 'object',
800
+ properties: {
801
+ success: { type: 'boolean' },
802
+ soundName: { type: 'string' },
803
+ message: { type: 'string' }
804
+ }
805
+ }
806
+ },
807
+
808
+ // UI Tools
809
+ {
810
+ name: 'create_widget',
811
+ description: 'Create a UI widget',
812
+ inputSchema: {
813
+ type: 'object',
814
+ properties: {
815
+ name: { type: 'string', description: 'Widget name' },
816
+ type: { type: 'string', description: 'Widget type (HUD, Menu, etc.)' },
817
+ savePath: { type: 'string', description: 'Save location' }
818
+ },
819
+ required: ['name']
820
+ },
821
+ outputSchema: {
822
+ type: 'object',
823
+ properties: {
824
+ success: { type: 'boolean' },
825
+ widgetPath: { type: 'string' },
826
+ message: { type: 'string' }
827
+ }
828
+ }
829
+ },
830
+ {
831
+ name: 'show_widget',
832
+ description: 'Show or hide a widget',
833
+ inputSchema: {
834
+ type: 'object',
835
+ properties: {
836
+ widgetName: { type: 'string', description: 'Widget name' },
837
+ visible: { type: 'boolean', description: 'Show or hide' }
838
+ },
839
+ required: ['widgetName', 'visible']
840
+ },
841
+ outputSchema: {
842
+ type: 'object',
843
+ properties: {
844
+ success: { type: 'boolean' },
845
+ widgetVisible: { type: 'boolean' },
846
+ message: { type: 'string' }
847
+ }
848
+ }
849
+ },
850
+ {
851
+ name: 'create_hud',
852
+ description: 'Create a HUD',
853
+ inputSchema: {
854
+ type: 'object',
855
+ properties: {
856
+ name: { type: 'string', description: 'HUD name' },
857
+ elements: {
858
+ type: 'array',
859
+ items: {
860
+ type: 'object',
861
+ properties: {
862
+ type: { type: 'string', description: 'Element type' },
863
+ position: {
864
+ type: 'array',
865
+ items: { type: 'number' }
866
+ }
867
+ }
868
+ }
869
+ }
870
+ },
871
+ required: ['name']
872
+ },
873
+ outputSchema: {
874
+ type: 'object',
875
+ properties: {
876
+ success: { type: 'boolean' },
877
+ hudPath: { type: 'string' },
878
+ message: { type: 'string' }
879
+ }
880
+ }
881
+ },
882
+
883
+ // Console command (universal tool)
884
+ {
885
+ name: 'console_command',
886
+ description: 'Execute any console command in Unreal Engine',
887
+ inputSchema: {
888
+ type: 'object',
889
+ properties: {
890
+ command: { type: 'string', description: 'Console command to execute' }
891
+ },
892
+ required: ['command']
893
+ },
894
+ outputSchema: {
895
+ type: 'object',
896
+ properties: {
897
+ success: { type: 'boolean' },
898
+ command: { type: 'string' },
899
+ result: { type: 'object' },
900
+ warning: { type: 'string' },
901
+ info: { type: 'string' },
902
+ error: { type: 'string' },
903
+ message: { type: 'string' }
904
+ }
905
+ }
906
+ }
907
+ ];