unreal-engine-mcp-server 0.3.0 → 0.4.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (43) hide show
  1. package/.env.production +6 -1
  2. package/Dockerfile +11 -28
  3. package/README.md +1 -2
  4. package/dist/index.js +120 -54
  5. package/dist/resources/actors.js +71 -13
  6. package/dist/resources/assets.d.ts +3 -2
  7. package/dist/resources/assets.js +96 -72
  8. package/dist/resources/levels.js +2 -2
  9. package/dist/tools/assets.js +6 -2
  10. package/dist/tools/build_environment_advanced.js +46 -42
  11. package/dist/tools/consolidated-tool-definitions.d.ts +232 -15
  12. package/dist/tools/consolidated-tool-definitions.js +173 -8
  13. package/dist/tools/consolidated-tool-handlers.js +331 -718
  14. package/dist/tools/debug.js +4 -6
  15. package/dist/tools/rc.js +2 -2
  16. package/dist/tools/sequence.js +21 -2
  17. package/dist/unreal-bridge.d.ts +4 -1
  18. package/dist/unreal-bridge.js +211 -53
  19. package/dist/utils/http.js +4 -2
  20. package/dist/utils/response-validator.d.ts +6 -1
  21. package/dist/utils/response-validator.js +43 -15
  22. package/package.json +5 -5
  23. package/server.json +2 -2
  24. package/src/index.ts +120 -56
  25. package/src/resources/actors.ts +51 -13
  26. package/src/resources/assets.ts +97 -73
  27. package/src/resources/levels.ts +2 -2
  28. package/src/tools/assets.ts +6 -2
  29. package/src/tools/build_environment_advanced.ts +46 -42
  30. package/src/tools/consolidated-tool-definitions.ts +173 -8
  31. package/src/tools/consolidated-tool-handlers.ts +318 -747
  32. package/src/tools/debug.ts +4 -6
  33. package/src/tools/rc.ts +2 -2
  34. package/src/tools/sequence.ts +21 -2
  35. package/src/unreal-bridge.ts +163 -60
  36. package/src/utils/http.ts +7 -4
  37. package/src/utils/response-validator.ts +48 -19
  38. package/dist/tools/tool-definitions.d.ts +0 -4919
  39. package/dist/tools/tool-definitions.js +0 -1007
  40. package/dist/tools/tool-handlers.d.ts +0 -47
  41. package/dist/tools/tool-handlers.js +0 -863
  42. package/src/tools/tool-definitions.ts +0 -1023
  43. package/src/tools/tool-handlers.ts +0 -973
@@ -1,1023 +0,0 @@
1
- // Tool definitions for all 16 MCP tools
2
-
3
- export const toolDefinitions = [
4
- // Asset Tools
5
- {
6
- name: 'list_assets',
7
- description: `List assets in a folder of the project.
8
-
9
- When to use:
10
- - Browse project content (use /Game; /Content is auto-mapped by the server).
11
- - Get a quick inventory of assets in a subfolder to refine subsequent actions.
12
-
13
- Notes:
14
- - For /Game, the server may limit results for performance; prefer subfolders (e.g., /Game/ThirdPerson).
15
- - Returns a structured list with Name/Path/Class/PackagePath when available.
16
-
17
- Example:
18
- - {"directory":"/Game/ThirdPerson","recursive":false}`,
19
- inputSchema: {
20
- type: 'object',
21
- properties: {
22
- directory: { type: 'string', description: 'Directory path (e.g. /Game/Assets)' },
23
- recursive: { type: 'boolean', description: 'List recursively' }
24
- },
25
- required: ['directory']
26
- },
27
- outputSchema: {
28
- type: 'object',
29
- properties: {
30
- assets: {
31
- type: 'array',
32
- items: {
33
- type: 'object',
34
- properties: {
35
- Name: { type: 'string' },
36
- Path: { type: 'string' },
37
- Class: { type: 'string' },
38
- PackagePath: { type: 'string' }
39
- }
40
- }
41
- },
42
- error: { type: 'string' },
43
- note: { type: 'string' }
44
- }
45
- }
46
- },
47
- {
48
- name: 'import_asset',
49
- description: `Import a file from disk into the project (e.g., FBX, PNG, WAV, EXR).
50
-
51
- When to use:
52
- - Bring external content into /Game at a specific destination path.
53
-
54
- Notes:
55
- - destinationPath is a package path like /Game/Environment/Trees.
56
- - Keep file names simple (avoid spaces and special characters).
57
-
58
- Example:
59
- - {"sourcePath":"C:/Temp/Tree.fbx","destinationPath":"/Game/Environment/Trees"}`,
60
- inputSchema: {
61
- type: 'object',
62
- properties: {
63
- sourcePath: { type: 'string', description: 'File system path to import from' },
64
- destinationPath: { type: 'string', description: 'Project path to import to' }
65
- },
66
- required: ['sourcePath', 'destinationPath']
67
- },
68
- outputSchema: {
69
- type: 'object',
70
- properties: {
71
- success: { type: 'boolean' },
72
- paths: { type: 'array', items: { type: 'string' } },
73
- message: { type: 'string' },
74
- error: { type: 'string' }
75
- }
76
- }
77
- },
78
-
79
- // Actor Tools
80
- {
81
- name: 'spawn_actor',
82
- description: `Spawn a new actor in the current level.
83
-
84
- When to use:
85
- - Place a class (e.g., StaticMeshActor, CameraActor) or spawn from an asset path (e.g., /Engine/BasicShapes/Cube).
86
-
87
- Notes:
88
- - If an asset path is provided, a StaticMeshActor is auto-spawned with the mesh set.
89
- - location/rotation are optional; defaults are used if omitted.
90
-
91
- Example:
92
- - {"classPath":"/Engine/BasicShapes/Cube","location":{"x":0,"y":0,"z":100}}`,
93
- inputSchema: {
94
- type: 'object',
95
- properties: {
96
- classPath: { type: 'string', description: 'Blueprint/class path' },
97
- location: {
98
- type: 'object',
99
- properties: {
100
- x: { type: 'number' },
101
- y: { type: 'number' },
102
- z: { type: 'number' }
103
- }
104
- },
105
- rotation: {
106
- type: 'object',
107
- properties: {
108
- pitch: { type: 'number' },
109
- yaw: { type: 'number' },
110
- roll: { type: 'number' }
111
- }
112
- }
113
- },
114
- required: ['classPath']
115
- },
116
- outputSchema: {
117
- type: 'object',
118
- properties: {
119
- success: { type: 'boolean' },
120
- actor: { type: 'string' },
121
- error: { type: 'string' }
122
- }
123
- }
124
- },
125
- {
126
- name: 'delete_actor',
127
- description: `Delete one or more actors by name/label.
128
-
129
- When to use:
130
- - Remove actors matching a label/name (case-insensitive).
131
-
132
- Example:
133
- - {"actorName":"Cube_1"}`,
134
- inputSchema: {
135
- type: 'object',
136
- properties: {
137
- actorName: { type: 'string', description: 'Name of the actor to delete' }
138
- },
139
- required: ['actorName']
140
- },
141
- outputSchema: {
142
- type: 'object',
143
- properties: {
144
- success: { type: 'boolean' },
145
- deleted: { type: 'string' },
146
- error: { type: 'string' }
147
- }
148
- }
149
- },
150
-
151
- // Material Tools
152
- {
153
- name: 'create_material',
154
- description: `Create a simple Material asset at a path.
155
-
156
- When to use:
157
- - Quickly scaffold a basic material you can edit later.
158
-
159
- Example:
160
- - {"name":"M_Mask","path":"/Game/Materials"}`,
161
- inputSchema: {
162
- type: 'object',
163
- properties: {
164
- name: { type: 'string', description: 'Material name' },
165
- path: { type: 'string', description: 'Path to create material' }
166
- },
167
- required: ['name', 'path']
168
- },
169
- outputSchema: {
170
- type: 'object',
171
- properties: {
172
- success: { type: 'boolean' },
173
- materialPath: { type: 'string' },
174
- message: { type: 'string' },
175
- error: { type: 'string' }
176
- }
177
- }
178
- },
179
- {
180
- name: 'apply_material_to_actor',
181
- description: `Assign a material to an actor's mesh component.
182
-
183
- When to use:
184
- - Swap an actor's material by path; slotIndex defaults to 0.
185
-
186
- Example:
187
- - {"actorPath":"/Game/LevelActors/Cube_1","materialPath":"/Game/Materials/M_Mask","slotIndex":0}`,
188
- inputSchema: {
189
- type: 'object',
190
- properties: {
191
- actorPath: { type: 'string', description: 'Path to the actor' },
192
- materialPath: { type: 'string', description: 'Path to the material asset' },
193
- slotIndex: { type: 'number', description: 'Material slot index (default: 0)' }
194
- },
195
- required: ['actorPath', 'materialPath']
196
- },
197
- outputSchema: {
198
- type: 'object',
199
- properties: {
200
- success: { type: 'boolean' },
201
- message: { type: 'string' }
202
- }
203
- }
204
- },
205
-
206
- // Editor Tools
207
- {
208
- name: 'play_in_editor',
209
- description: `Start a Play-In-Editor (PIE) session.
210
-
211
- When to use:
212
- - Begin simulating the level in the editor.`,
213
- inputSchema: {
214
- type: 'object',
215
- properties: {}
216
- },
217
- outputSchema: {
218
- type: 'object',
219
- properties: {
220
- success: { type: 'boolean' },
221
- playing: { type: 'boolean' },
222
- message: { type: 'string' }
223
- }
224
- }
225
- },
226
- {
227
- name: 'stop_play_in_editor',
228
- description: `Stop the active PIE session.
229
-
230
- When to use:
231
- - End simulation and return to the editor.`,
232
- inputSchema: {
233
- type: 'object',
234
- properties: {}
235
- },
236
- outputSchema: {
237
- type: 'object',
238
- properties: {
239
- success: { type: 'boolean' },
240
- playing: { type: 'boolean' },
241
- message: { type: 'string' }
242
- }
243
- }
244
- },
245
- {
246
- name: 'set_camera',
247
- description: `Reposition the editor viewport camera.
248
-
249
- When to use:
250
- - Move/aim the camera in the editor for framing.
251
-
252
- Notes:
253
- - Accepts object or array formats; values are normalized.
254
-
255
- Example:
256
- - {"location":{"x":0,"y":-600,"z":250},"rotation":{"pitch":0,"yaw":0,"roll":0}}`,
257
- inputSchema: {
258
- type: 'object',
259
- properties: {
260
- location: {
261
- type: 'object',
262
- properties: {
263
- x: { type: 'number' },
264
- y: { type: 'number' },
265
- z: { type: 'number' }
266
- }
267
- },
268
- rotation: {
269
- type: 'object',
270
- properties: {
271
- pitch: { type: 'number' },
272
- yaw: { type: 'number' },
273
- roll: { type: 'number' }
274
- }
275
- }
276
- },
277
- required: ['location']
278
- },
279
- outputSchema: {
280
- type: 'object',
281
- properties: {
282
- success: { type: 'boolean' },
283
- location: { type: 'array', items: { type: 'number' } },
284
- rotation: { type: 'array', items: { type: 'number' } }
285
- }
286
- }
287
- },
288
-
289
- // Animation Tools
290
- {
291
- name: 'create_animation_blueprint',
292
- description: `Create an Animation Blueprint for a skeleton.
293
-
294
- When to use:
295
- - Generate a starter Anim BP for a given skeleton.
296
-
297
- Example:
298
- - {"name":"ABP_Hero","skeletonPath":"/Game/Characters/Hero/SK_Hero_Skeleton","savePath":"/Game/Characters/Hero"}`,
299
- inputSchema: {
300
- type: 'object',
301
- properties: {
302
- name: { type: 'string', description: 'Animation blueprint name' },
303
- skeletonPath: { type: 'string', description: 'Path to skeleton' },
304
- savePath: { type: 'string', description: 'Save location' }
305
- },
306
- required: ['name', 'skeletonPath']
307
- },
308
- outputSchema: {
309
- type: 'object',
310
- properties: {
311
- success: { type: 'boolean' },
312
- blueprintPath: { type: 'string' },
313
- message: { type: 'string' }
314
- }
315
- }
316
- },
317
- {
318
- name: 'play_animation_montage',
319
- description: `Play a Montage/Animation on an actor.
320
-
321
- When to use:
322
- - Trigger a montage on a possessed or editor actor.
323
-
324
- Example:
325
- - {"actorName":"Hero","montagePath":"/Game/Anim/MT_Attack","playRate":1.0}`,
326
- inputSchema: {
327
- type: 'object',
328
- properties: {
329
- actorName: { type: 'string', description: 'Actor name' },
330
- montagePath: { type: 'string', description: 'Path to montage' },
331
- playRate: { type: 'number', description: 'Playback rate' }
332
- },
333
- required: ['actorName', 'montagePath']
334
- },
335
- outputSchema: {
336
- type: 'object',
337
- properties: {
338
- success: { type: 'boolean' },
339
- playing: { type: 'boolean' },
340
- message: { type: 'string' }
341
- }
342
- }
343
- },
344
-
345
- // Physics Tools
346
- {
347
- name: 'setup_ragdoll',
348
- description: `Enable simple ragdoll using a physics asset.
349
-
350
- When to use:
351
- - Toggle ragdoll behavior on a character skeleton.
352
-
353
- Example:
354
- - {"skeletonPath":"/Game/Characters/Hero/SK_Hero_Skeleton","physicsAssetName":"PHYS_Hero","blendWeight":1.0}`,
355
- inputSchema: {
356
- type: 'object',
357
- properties: {
358
- skeletonPath: { type: 'string', description: 'Path to skeleton' },
359
- physicsAssetName: { type: 'string', description: 'Physics asset name' },
360
- blendWeight: { type: 'number', description: 'Blend weight (0-1)' }
361
- },
362
- required: ['skeletonPath', 'physicsAssetName']
363
- },
364
- outputSchema: {
365
- type: 'object',
366
- properties: {
367
- success: { type: 'boolean' },
368
- ragdollActive: { type: 'boolean' },
369
- message: { type: 'string' }
370
- }
371
- }
372
- },
373
- {
374
- name: 'apply_force',
375
- description: `Apply a world-space force vector to an actor with physics enabled.
376
-
377
- Example:
378
- - {"actorName":"PhysicsBox","force":{"x":0,"y":0,"z":5000}}`,
379
- inputSchema: {
380
- type: 'object',
381
- properties: {
382
- actorName: { type: 'string', description: 'Actor name' },
383
- force: {
384
- type: 'object',
385
- properties: {
386
- x: { type: 'number' },
387
- y: { type: 'number' },
388
- z: { type: 'number' }
389
- }
390
- }
391
- },
392
- required: ['actorName', 'force']
393
- },
394
- outputSchema: {
395
- type: 'object',
396
- properties: {
397
- success: { type: 'boolean' },
398
- physicsEnabled: { type: 'boolean' },
399
- message: { type: 'string' },
400
- error: { type: 'string' }
401
- }
402
- }
403
- },
404
-
405
- // Niagara Tools
406
- {
407
- name: 'create_particle_effect',
408
- description: `Create a simple particle/FX by tag.
409
-
410
- When to use:
411
- - Quickly drop a generic Fire/Smoke/Water effect for previews.
412
-
413
- Example:
414
- - {"effectType":"Smoke","name":"SMK1","location":{"x":100,"y":0,"z":50}}`,
415
- inputSchema: {
416
- type: 'object',
417
- properties: {
418
- effectType: { type: 'string', description: 'Effect type (Fire, Smoke, Water, etc.)' },
419
- name: { type: 'string', description: 'Effect name' },
420
- location: {
421
- type: 'object',
422
- properties: {
423
- x: { type: 'number' },
424
- y: { type: 'number' },
425
- z: { type: 'number' }
426
- }
427
- }
428
- },
429
- required: ['effectType', 'name', 'location']
430
- },
431
- outputSchema: {
432
- type: 'object',
433
- properties: {
434
- success: { type: 'boolean' },
435
- effectName: { type: 'string' },
436
- effectPath: { type: 'string' },
437
- message: { type: 'string' }
438
- }
439
- }
440
- },
441
- {
442
- name: 'spawn_niagara_system',
443
- description: `Spawn a Niagara system at a location.
444
-
445
- Example:
446
- - {"systemPath":"/Game/FX/NS_Explosion","location":{"x":0,"y":0,"z":200},"scale":1.0}`,
447
- inputSchema: {
448
- type: 'object',
449
- properties: {
450
- systemPath: { type: 'string', description: 'Path to Niagara system' },
451
- location: {
452
- type: 'object',
453
- properties: {
454
- x: { type: 'number' },
455
- y: { type: 'number' },
456
- z: { type: 'number' }
457
- }
458
- },
459
- scale: { type: 'number', description: 'Scale factor' }
460
- },
461
- required: ['systemPath', 'location']
462
- },
463
- outputSchema: {
464
- type: 'object',
465
- properties: {
466
- success: { type: 'boolean' },
467
- spawned: { type: 'boolean' },
468
- message: { type: 'string' }
469
- }
470
- }
471
- },
472
-
473
- // Blueprint Tools
474
- {
475
- name: 'create_blueprint',
476
- description: `Create a new Blueprint asset at a path.
477
-
478
- Example:
479
- - {"name":"BP_Switch","blueprintType":"Actor","savePath":"/Game/Blueprints"}`,
480
- inputSchema: {
481
- type: 'object',
482
- properties: {
483
- name: { type: 'string', description: 'Blueprint name' },
484
- blueprintType: { type: 'string', description: 'Type (Actor, Pawn, Character, etc.)' },
485
- savePath: { type: 'string', description: 'Save location' }
486
- },
487
- required: ['name', 'blueprintType']
488
- },
489
- outputSchema: {
490
- type: 'object',
491
- properties: {
492
- success: { type: 'boolean' },
493
- blueprintPath: { type: 'string' },
494
- message: { type: 'string' }
495
- }
496
- }
497
- },
498
- {
499
- name: 'add_blueprint_component',
500
- description: `Add a component to an existing Blueprint.
501
-
502
- Example:
503
- - {"blueprintName":"BP_Switch","componentType":"PointLightComponent","componentName":"KeyLight"}`,
504
- inputSchema: {
505
- type: 'object',
506
- properties: {
507
- blueprintName: { type: 'string', description: 'Blueprint name' },
508
- componentType: { type: 'string', description: 'Component type' },
509
- componentName: { type: 'string', description: 'Component name' }
510
- },
511
- required: ['blueprintName', 'componentType', 'componentName']
512
- },
513
- outputSchema: {
514
- type: 'object',
515
- properties: {
516
- success: { type: 'boolean' },
517
- componentAdded: { type: 'string' },
518
- message: { type: 'string' },
519
- warning: { type: 'string' }
520
- }
521
- }
522
- },
523
-
524
- // Level Tools
525
- {
526
- name: 'load_level',
527
- description: `Load a level by path (e.g., /Game/Maps/Lobby).
528
-
529
- Example:
530
- - {"levelPath":"/Game/Maps/Lobby","streaming":false}`,
531
- inputSchema: {
532
- type: 'object',
533
- properties: {
534
- levelPath: { type: 'string', description: 'Path to level' },
535
- streaming: { type: 'boolean', description: 'Use streaming' }
536
- },
537
- required: ['levelPath']
538
- },
539
- outputSchema: {
540
- type: 'object',
541
- properties: {
542
- success: { type: 'boolean' },
543
- levelName: { type: 'string' },
544
- message: { type: 'string' }
545
- }
546
- }
547
- },
548
- {
549
- name: 'save_level',
550
- description: `Save the current level to a path or by name.
551
-
552
- Example:
553
- - {"levelName":"Lobby","savePath":"/Game/Maps"}`,
554
- inputSchema: {
555
- type: 'object',
556
- properties: {
557
- levelName: { type: 'string', description: 'Level name' },
558
- savePath: { type: 'string', description: 'Save path' }
559
- }
560
- },
561
- outputSchema: {
562
- type: 'object',
563
- properties: {
564
- success: { type: 'boolean' },
565
- saved: { type: 'boolean' },
566
- message: { type: 'string' }
567
- }
568
- }
569
- },
570
- {
571
- name: 'stream_level',
572
- description: `Stream in/out a sublevel and set visibility.
573
-
574
- Example:
575
- - {'levelName':'Sublevel_A','shouldBeLoaded':true,'shouldBeVisible':true}`,
576
- inputSchema: {
577
- type: 'object',
578
- properties: {
579
- levelName: { type: 'string', description: 'Level name' },
580
- shouldBeLoaded: { type: 'boolean', description: 'Load or unload' },
581
- shouldBeVisible: { type: 'boolean', description: 'Make visible' }
582
- },
583
- required: ['levelName', 'shouldBeLoaded', 'shouldBeVisible']
584
- },
585
- outputSchema: {
586
- type: 'object',
587
- properties: {
588
- success: { type: 'boolean' },
589
- loaded: { type: 'boolean' },
590
- visible: { type: 'boolean' },
591
- message: { type: 'string' }
592
- }
593
- }
594
- },
595
-
596
- // Lighting Tools
597
- {
598
- name: 'create_light',
599
- description: `Create a light (Directional/Point/Spot/Rect/Sky) with optional transform/intensity.
600
-
601
- Examples:
602
- - {'lightType':'Directional','name':'KeyLight','intensity':5.0}
603
- - {'lightType':'Point','name':'Fill','location':{'x':0,'y':100,'z':200},'intensity':2000}`,
604
- inputSchema: {
605
- type: 'object',
606
- properties: {
607
- lightType: { type: 'string', description: 'Light type (Directional, Point, Spot, Rect)' },
608
- name: { type: 'string', description: 'Light name' },
609
- location: {
610
- type: 'object',
611
- properties: {
612
- x: { type: 'number' },
613
- y: { type: 'number' },
614
- z: { type: 'number' }
615
- }
616
- },
617
- intensity: { type: 'number', description: 'Light intensity' }
618
- },
619
- required: ['lightType', 'name']
620
- },
621
- outputSchema: {
622
- type: 'object',
623
- properties: {
624
- success: { type: 'boolean' },
625
- lightName: { type: 'string' },
626
- message: { type: 'string' }
627
- }
628
- }
629
- },
630
- {
631
- name: 'build_lighting',
632
- description: 'Start a lighting build at an optional quality level (Preview/Medium/High/Production).',
633
- inputSchema: {
634
- type: 'object',
635
- properties: {
636
- quality: { type: 'string', description: 'Quality (Preview, Medium, High, Production)' }
637
- }
638
- },
639
- outputSchema: {
640
- type: 'object',
641
- properties: {
642
- success: { type: 'boolean' },
643
- quality: { type: 'string' },
644
- message: { type: 'string' }
645
- }
646
- }
647
- },
648
-
649
- // Landscape Tools
650
- {
651
- name: 'create_landscape',
652
- description: 'Attempt to create a landscape. Native Python APIs are limited; you may receive a guidance message to use Landscape Mode in the editor.',
653
- inputSchema: {
654
- type: 'object',
655
- properties: {
656
- name: { type: 'string', description: 'Landscape name' },
657
- sizeX: { type: 'number', description: 'Size X' },
658
- sizeY: { type: 'number', description: 'Size Y' },
659
- materialPath: { type: 'string', description: 'Material path' }
660
- },
661
- required: ['name']
662
- },
663
- outputSchema: {
664
- type: 'object',
665
- properties: {
666
- success: { type: 'boolean' },
667
- landscapeName: { type: 'string' },
668
- message: { type: 'string' }
669
- }
670
- }
671
- },
672
- {
673
- name: 'sculpt_landscape',
674
- description: 'Sculpt a landscape using editor tools (best-effort; some operations may require manual Landscape Mode).',
675
- inputSchema: {
676
- type: 'object',
677
- properties: {
678
- landscapeName: { type: 'string', description: 'Landscape name' },
679
- tool: { type: 'string', description: 'Tool (Sculpt, Smooth, Flatten, etc.)' },
680
- brushSize: { type: 'number', description: 'Brush size' },
681
- strength: { type: 'number', description: 'Tool strength' }
682
- },
683
- required: ['landscapeName', 'tool']
684
- },
685
- outputSchema: {
686
- type: 'object',
687
- properties: {
688
- success: { type: 'boolean' },
689
- message: { type: 'string' }
690
- }
691
- }
692
- },
693
-
694
- // Foliage Tools
695
- {
696
- name: 'add_foliage_type',
697
- description: `Create or load a FoliageType asset for instanced foliage workflows.
698
-
699
- Example:
700
- - {'name':'FT_Grass','meshPath':'/Game/Foliage/SM_Grass','density':300}`,
701
- inputSchema: {
702
- type: 'object',
703
- properties: {
704
- name: { type: 'string', description: 'Foliage type name' },
705
- meshPath: { type: 'string', description: 'Path to mesh' },
706
- density: { type: 'number', description: 'Density' }
707
- },
708
- required: ['name', 'meshPath']
709
- },
710
- outputSchema: {
711
- type: 'object',
712
- properties: {
713
- success: { type: 'boolean' },
714
- foliageTypeName: { type: 'string' },
715
- message: { type: 'string' }
716
- }
717
- }
718
- },
719
- {
720
- name: 'paint_foliage',
721
- description: 'Paint foliage on landscape',
722
- inputSchema: {
723
- type: 'object',
724
- properties: {
725
- foliageType: { type: 'string', description: 'Foliage type' },
726
- position: {
727
- type: 'object',
728
- properties: {
729
- x: { type: 'number' },
730
- y: { type: 'number' },
731
- z: { type: 'number' }
732
- }
733
- },
734
- brushSize: { type: 'number', description: 'Brush size' }
735
- },
736
- required: ['foliageType', 'position']
737
- },
738
- outputSchema: {
739
- type: 'object',
740
- properties: {
741
- success: { type: 'boolean' },
742
- instancesPlaced: { type: 'number' },
743
- message: { type: 'string' }
744
- }
745
- }
746
- },
747
-
748
- // Debug Visualization Tools
749
- {
750
- name: 'draw_debug_shape',
751
- description: 'Draw a debug shape',
752
- inputSchema: {
753
- type: 'object',
754
- properties: {
755
- shape: { type: 'string', description: 'Shape type (Line, Box, Sphere, etc.)' },
756
- position: {
757
- type: 'object',
758
- properties: {
759
- x: { type: 'number' },
760
- y: { type: 'number' },
761
- z: { type: 'number' }
762
- }
763
- },
764
- size: { type: 'number', description: 'Size/radius' },
765
- color: {
766
- type: 'array',
767
- items: { type: 'number' },
768
- description: 'RGBA color'
769
- },
770
- duration: { type: 'number', description: 'Duration in seconds' }
771
- },
772
- required: ['shape', 'position']
773
- },
774
- outputSchema: {
775
- type: 'object',
776
- properties: {
777
- success: { type: 'boolean' },
778
- message: { type: 'string' }
779
- }
780
- }
781
- },
782
- {
783
- name: 'set_view_mode',
784
- description: 'Set the viewport view mode',
785
- inputSchema: {
786
- type: 'object',
787
- properties: {
788
- mode: { type: 'string', description: 'View mode (Lit, Unlit, Wireframe, etc.)' }
789
- },
790
- required: ['mode']
791
- },
792
- outputSchema: {
793
- type: 'object',
794
- properties: {
795
- success: { type: 'boolean' },
796
- viewMode: { type: 'string' },
797
- message: { type: 'string' }
798
- }
799
- }
800
- },
801
-
802
- // Performance Tools
803
- {
804
- name: 'start_profiling',
805
- description: 'Start performance profiling',
806
- inputSchema: {
807
- type: 'object',
808
- properties: {
809
- type: { type: 'string', description: 'Profiling type (CPU, GPU, Memory, etc.)' },
810
- duration: { type: 'number', description: 'Duration in seconds' }
811
- },
812
- required: ['type']
813
- },
814
- outputSchema: {
815
- type: 'object',
816
- properties: {
817
- success: { type: 'boolean' },
818
- profiling: { type: 'boolean' },
819
- message: { type: 'string' }
820
- }
821
- }
822
- },
823
- {
824
- name: 'show_fps',
825
- description: 'Show FPS counter',
826
- inputSchema: {
827
- type: 'object',
828
- properties: {
829
- enabled: { type: 'boolean', description: 'Enable FPS display' },
830
- verbose: { type: 'boolean', description: 'Show verbose stats' }
831
- },
832
- required: ['enabled']
833
- },
834
- outputSchema: {
835
- type: 'object',
836
- properties: {
837
- success: { type: 'boolean' },
838
- fpsVisible: { type: 'boolean' },
839
- message: { type: 'string' }
840
- }
841
- }
842
- },
843
- {
844
- name: 'set_scalability',
845
- description: 'Set scalability settings',
846
- inputSchema: {
847
- type: 'object',
848
- properties: {
849
- category: { type: 'string', description: 'Category (Shadows, Textures, Effects, etc.)' },
850
- level: { type: 'number', description: 'Quality level (0-4)' }
851
- },
852
- required: ['category', 'level']
853
- },
854
- outputSchema: {
855
- type: 'object',
856
- properties: {
857
- success: { type: 'boolean' },
858
- qualityLevel: { type: 'number' },
859
- message: { type: 'string' }
860
- }
861
- }
862
- },
863
-
864
- // Audio Tools
865
- {
866
- name: 'play_sound',
867
- description: 'Play a sound',
868
- inputSchema: {
869
- type: 'object',
870
- properties: {
871
- soundPath: { type: 'string', description: 'Path to sound asset' },
872
- location: {
873
- type: 'object',
874
- properties: {
875
- x: { type: 'number' },
876
- y: { type: 'number' },
877
- z: { type: 'number' }
878
- }
879
- },
880
- volume: { type: 'number', description: 'Volume (0-1)' },
881
- is3D: { type: 'boolean', description: '3D or 2D sound' }
882
- },
883
- required: ['soundPath']
884
- },
885
- outputSchema: {
886
- type: 'object',
887
- properties: {
888
- success: { type: 'boolean' },
889
- soundPlaying: { type: 'boolean' },
890
- message: { type: 'string' }
891
- }
892
- }
893
- },
894
- {
895
- name: 'create_ambient_sound',
896
- description: 'Create an ambient sound',
897
- inputSchema: {
898
- type: 'object',
899
- properties: {
900
- name: { type: 'string', description: 'Sound name' },
901
- soundPath: { type: 'string', description: 'Path to sound' },
902
- location: {
903
- type: 'object',
904
- properties: {
905
- x: { type: 'number' },
906
- y: { type: 'number' },
907
- z: { type: 'number' }
908
- }
909
- },
910
- radius: { type: 'number', description: 'Sound radius' }
911
- },
912
- required: ['name', 'soundPath', 'location']
913
- },
914
- outputSchema: {
915
- type: 'object',
916
- properties: {
917
- success: { type: 'boolean' },
918
- soundName: { type: 'string' },
919
- message: { type: 'string' }
920
- }
921
- }
922
- },
923
-
924
- // UI Tools
925
- {
926
- name: 'create_widget',
927
- description: 'Create a UI widget',
928
- inputSchema: {
929
- type: 'object',
930
- properties: {
931
- name: { type: 'string', description: 'Widget name' },
932
- type: { type: 'string', description: 'Widget type (HUD, Menu, etc.)' },
933
- savePath: { type: 'string', description: 'Save location' }
934
- },
935
- required: ['name']
936
- },
937
- outputSchema: {
938
- type: 'object',
939
- properties: {
940
- success: { type: 'boolean' },
941
- widgetPath: { type: 'string' },
942
- message: { type: 'string' }
943
- }
944
- }
945
- },
946
- {
947
- name: 'show_widget',
948
- description: 'Show or hide a widget',
949
- inputSchema: {
950
- type: 'object',
951
- properties: {
952
- widgetName: { type: 'string', description: 'Widget name' },
953
- visible: { type: 'boolean', description: 'Show or hide' }
954
- },
955
- required: ['widgetName', 'visible']
956
- },
957
- outputSchema: {
958
- type: 'object',
959
- properties: {
960
- success: { type: 'boolean' },
961
- widgetVisible: { type: 'boolean' },
962
- message: { type: 'string' }
963
- }
964
- }
965
- },
966
- {
967
- name: 'create_hud',
968
- description: 'Create a HUD',
969
- inputSchema: {
970
- type: 'object',
971
- properties: {
972
- name: { type: 'string', description: 'HUD name' },
973
- elements: {
974
- type: 'array',
975
- items: {
976
- type: 'object',
977
- properties: {
978
- type: { type: 'string', description: 'Element type' },
979
- position: {
980
- type: 'array',
981
- items: { type: 'number' }
982
- }
983
- }
984
- }
985
- }
986
- },
987
- required: ['name']
988
- },
989
- outputSchema: {
990
- type: 'object',
991
- properties: {
992
- success: { type: 'boolean' },
993
- hudPath: { type: 'string' },
994
- message: { type: 'string' }
995
- }
996
- }
997
- },
998
-
999
- // Console command (universal tool)
1000
- {
1001
- name: 'console_command',
1002
- description: 'Execute any console command in Unreal Engine',
1003
- inputSchema: {
1004
- type: 'object',
1005
- properties: {
1006
- command: { type: 'string', description: 'Console command to execute' }
1007
- },
1008
- required: ['command']
1009
- },
1010
- outputSchema: {
1011
- type: 'object',
1012
- properties: {
1013
- success: { type: 'boolean' },
1014
- command: { type: 'string' },
1015
- result: { type: 'object' },
1016
- warning: { type: 'string' },
1017
- info: { type: 'string' },
1018
- error: { type: 'string' },
1019
- message: { type: 'string' }
1020
- }
1021
- }
1022
- }
1023
- ];