unreal-engine-mcp-server 0.2.1 → 0.3.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.
@@ -1,9 +1,28 @@
1
- // Consolidated tool definitions - reduced from 36 to 10 multi-purpose tools
1
+ // Consolidated tool definitions - reduced from 36 to 13 multi-purpose tools
2
2
  export const consolidatedToolDefinitions = [
3
3
  // 1. ASSET MANAGER - Combines asset operations
4
4
  {
5
5
  name: 'manage_asset',
6
- description: 'Manage assets - list, import, create materials',
6
+ description: `Search, browse, import, and create simple material assets.
7
+
8
+ When to use this tool:
9
+ - You want to list assets in the project Content directory (use /Game; /Content is auto-mapped).
10
+ - You want to import files from disk into the project (e.g., FBX, PNG, WAV, EXR).
11
+ - You want to generate a very basic Material asset by name at a path.
12
+
13
+ Supported actions:
14
+ - list: Returns assets in a folder (recursive behavior is auto-enabled for /Game).
15
+ - import: Imports a file into the project at a destination path (e.g., /Game/Folder).
16
+ - create_material: Creates a simple Material asset at a path.
17
+
18
+ Tips:
19
+ - Unreal uses /Game for project content; this server maps /Content → /Game automatically.
20
+ - For large projects, listing /Game returns a sample subset for speed; refine to subfolders.
21
+
22
+ Examples:
23
+ - {"action":"list","directory":"/Game/ThirdPerson"}
24
+ - {"action":"import","sourcePath":"C:/Temp/Tree.fbx","destinationPath":"/Game/Environment/Trees"}
25
+ - {"action":"create_material","name":"M_Mask","path":"/Game/Materials"}`,
7
26
  inputSchema: {
8
27
  type: 'object',
9
28
  properties: {
@@ -50,7 +69,35 @@ export const consolidatedToolDefinitions = [
50
69
  // 2. ACTOR CONTROL - Combines actor operations
51
70
  {
52
71
  name: 'control_actor',
53
- 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',
72
+ description: `Spawn, delete, and apply physics to actors in the level.
73
+
74
+ When to use this tool:
75
+ - Place an actor/mesh, remove an actor, or nudge an actor with a physics force.
76
+
77
+ Supported actions:
78
+ - spawn
79
+ - delete
80
+ - apply_force
81
+
82
+ Spawning:
83
+ - classPath can be a class name (e.g., StaticMeshActor, CameraActor) OR an asset path (e.g., /Engine/BasicShapes/Cube, /Game/Meshes/SM_Rock).
84
+ - Asset paths auto-spawn StaticMeshActor with the mesh assigned.
85
+
86
+ Deleting:
87
+ - Finds actors by label/name (case-insensitive) and deletes matches.
88
+
89
+ Apply force:
90
+ - Applies a world-space force vector to an actor with physics enabled.
91
+
92
+ Tips:
93
+ - classPath accepts classes or asset paths; simple names like Cube auto-resolve to engine assets.
94
+ - location/rotation are optional; defaults are used if omitted.
95
+ - For delete/apply_force, provide actorName.
96
+
97
+ Examples:
98
+ - {"action":"spawn","classPath":"/Engine/BasicShapes/Cube","location":{"x":0,"y":0,"z":100}}
99
+ - {"action":"delete","actorName":"Cube_1"}
100
+ - {"action":"apply_force","actorName":"PhysicsBox","force":{"x":0,"y":0,"z":5000}}`,
54
101
  inputSchema: {
55
102
  type: 'object',
56
103
  properties: {
@@ -109,7 +156,26 @@ export const consolidatedToolDefinitions = [
109
156
  // 3. EDITOR CONTROL - Combines editor operations
110
157
  {
111
158
  name: 'control_editor',
112
- description: 'Control editor - PIE mode, camera, viewport',
159
+ description: `Play/Stop PIE, position the editor camera, and switch common view modes.
160
+
161
+ When to use this tool:
162
+ - Start/stop a PIE session, move the viewport camera, or change viewmode (Lit/Unlit/Wireframe/etc.).
163
+
164
+ Supported actions:
165
+ - play
166
+ - stop
167
+ - set_camera
168
+ - set_view_mode
169
+
170
+ Notes:
171
+ - View modes are validated; unsafe modes are blocked.
172
+ - Camera accepts location/rotation (optional); values normalized.
173
+
174
+ Examples:
175
+ - {"action":"play"}
176
+ - {"action":"set_camera","location":{"x":0,"y":-600,"z":250},"rotation":{"pitch":0,"yaw":0,"roll":0}}
177
+ - {"action":"set_view_mode","viewMode":"Wireframe"}
178
+ - {"action":"stop"}`,
113
179
  inputSchema: {
114
180
  type: 'object',
115
181
  properties: {
@@ -166,7 +232,28 @@ export const consolidatedToolDefinitions = [
166
232
  // 4. LEVEL MANAGER - Combines level and lighting operations
167
233
  {
168
234
  name: 'manage_level',
169
- description: 'Manage levels and lighting',
235
+ description: `Load/save/stream levels, create lights, and trigger lighting builds.
236
+
237
+ When to use this tool:
238
+ - Switch to a level, save the current level, stream sublevels, add a light, or start a lighting build.
239
+
240
+ Supported actions:
241
+ - load
242
+ - save
243
+ - stream
244
+ - create_light
245
+ - build_lighting
246
+
247
+ Tips:
248
+ - Use /Game paths for levels (e.g., /Game/Maps/Level).
249
+ - For streaming, set shouldBeLoaded and shouldBeVisible accordingly.
250
+ - For lights, provide lightType and optional location/intensity.
251
+
252
+ Examples:
253
+ - {"action":"load","levelPath":"/Game/Maps/Lobby"}
254
+ - {"action":"stream","levelName":"Sublevel_A","shouldBeLoaded":true,"shouldBeVisible":true}
255
+ - {"action":"create_light","lightType":"Directional","name":"KeyLight","intensity":5.0}
256
+ - {"action":"build_lighting","quality":"High"}`,
170
257
  inputSchema: {
171
258
  type: 'object',
172
259
  properties: {
@@ -221,7 +308,25 @@ export const consolidatedToolDefinitions = [
221
308
  // 5. ANIMATION SYSTEM - Combines animation and physics setup
222
309
  {
223
310
  name: 'animation_physics',
224
- description: 'Animation and physics systems',
311
+ description: `Create animation blueprints, play montages, and set up simple ragdolls.
312
+
313
+ When to use this tool:
314
+ - Generate an Anim Blueprint for a skeleton, play a Montage/Animation on an actor, or enable ragdoll.
315
+
316
+ Supported actions:
317
+ - create_animation_bp
318
+ - play_montage
319
+ - setup_ragdoll
320
+
321
+ Tips:
322
+ - Ensure the montage/animation is compatible with the target actor/skeleton.
323
+ - setup_ragdoll requires a valid physicsAssetName on the skeleton.
324
+ - Use savePath when creating new assets.
325
+
326
+ Examples:
327
+ - {"action":"create_animation_bp","name":"ABP_Hero","skeletonPath":"/Game/Characters/Hero/SK_Hero_Skeleton","savePath":"/Game/Characters/Hero"}
328
+ - {"action":"play_montage","actorName":"Hero","montagePath":"/Game/Anim/MT_Attack"}
329
+ - {"action":"setup_ragdoll","skeletonPath":"/Game/Characters/Hero/SK_Hero_Skeleton","physicsAssetName":"PHYS_Hero"}`,
225
330
  inputSchema: {
226
331
  type: 'object',
227
332
  properties: {
@@ -260,7 +365,24 @@ export const consolidatedToolDefinitions = [
260
365
  // 6. EFFECTS SYSTEM - Combines particles and visual effects
261
366
  {
262
367
  name: 'create_effect',
263
- description: 'Create visual effects - particles, Niagara',
368
+ description: `Create particles/FX and lightweight debug shapes for rapid iteration.
369
+
370
+ When to use this tool:
371
+ - Spawn a Niagara system at a location, create a particle effect by type tag, or draw debug geometry for planning.
372
+
373
+ Supported actions:
374
+ - particle
375
+ - niagara
376
+ - debug_shape
377
+
378
+ Tips:
379
+ - Set color as RGBA [r,g,b,a]; scale defaults to 1 if omitted.
380
+ - Use debug shapes for quick layout planning and measurements.
381
+
382
+ Examples:
383
+ - {"action":"niagara","systemPath":"/Game/FX/NS_Explosion","location":{"x":0,"y":0,"z":200},"scale":1.0}
384
+ - {"action":"particle","effectType":"Smoke","name":"SMK1","location":{"x":100,"y":0,"z":50}}
385
+ - {"action":"debug_shape","shape":"Sphere","location":{"x":0,"y":0,"z":0},"size":100,"duration":5}`,
264
386
  inputSchema: {
265
387
  type: 'object',
266
388
  properties: {
@@ -320,7 +442,22 @@ export const consolidatedToolDefinitions = [
320
442
  // 7. BLUEPRINT MANAGER - Blueprint operations
321
443
  {
322
444
  name: 'manage_blueprint',
323
- description: 'Create and modify blueprints',
445
+ description: `Create new Blueprints and add components programmatically.
446
+
447
+ When to use this tool:
448
+ - Quickly scaffold a Blueprint asset or add a component to an existing Blueprint.
449
+
450
+ Supported actions:
451
+ - create
452
+ - add_component
453
+
454
+ Tips:
455
+ - blueprintType can be Actor, Pawn, Character, etc.
456
+ - Component names should be unique within the Blueprint.
457
+
458
+ Examples:
459
+ - {"action":"create","name":"BP_Switch","blueprintType":"Actor","savePath":"/Game/Blueprints"}
460
+ - {"action":"add_component","name":"BP_Switch","componentType":"PointLightComponent","componentName":"KeyLight"}`,
324
461
  inputSchema: {
325
462
  type: 'object',
326
463
  properties: {
@@ -354,7 +491,28 @@ export const consolidatedToolDefinitions = [
354
491
  // 8. ENVIRONMENT BUILDER - Landscape and foliage
355
492
  {
356
493
  name: 'build_environment',
357
- description: 'Build environment - landscape, foliage',
494
+ description: `Environment authoring helpers (landscape, foliage).
495
+
496
+ When to use this tool:
497
+ - Create a procedural terrain alternative, add/paint foliage, or attempt a landscape workflow.
498
+
499
+ Supported actions:
500
+ - create_landscape
501
+ - sculpt
502
+ - add_foliage
503
+ - paint_foliage
504
+
505
+ Important:
506
+ - Native Landscape creation via Python is limited and may return a helpful error suggesting Landscape Mode in the editor.
507
+ - Foliage helpers create FoliageType assets and support simple placement.
508
+
509
+ Tips:
510
+ - Adjust brushSize and strength to tune sculpting results.
511
+
512
+ Examples:
513
+ - {"action":"create_landscape","name":"Landscape_Basic","sizeX":1024,"sizeY":1024}
514
+ - {"action":"add_foliage","name":"FT_Grass","meshPath":"/Game/Foliage/SM_Grass","density":300}
515
+ - {"action":"paint_foliage","foliageType":"/Game/Foliage/Types/FT_Grass","position":{"x":0,"y":0,"z":0},"brushSize":300}`,
358
516
  inputSchema: {
359
517
  type: 'object',
360
518
  properties: {
@@ -404,7 +562,31 @@ export const consolidatedToolDefinitions = [
404
562
  // 9. PERFORMANCE & AUDIO - System settings
405
563
  {
406
564
  name: 'system_control',
407
- description: 'Control performance, audio, UI, screenshots, and engine lifecycle',
565
+ description: `Performance toggles, quality settings, audio playback, simple UI helpers, screenshots, and engine lifecycle.
566
+
567
+ When to use this tool:
568
+ - Toggle profiling and FPS stats, adjust quality (sg.*), play a sound, create/show a basic widget, take a screenshot, or launch/quit the editor.
569
+
570
+ Supported actions:
571
+ - profile
572
+ - show_fps
573
+ - set_quality
574
+ - play_sound
575
+ - create_widget
576
+ - show_widget
577
+ - screenshot
578
+ - engine_start
579
+ - engine_quit
580
+
581
+ Tips:
582
+ - Screenshot resolution format: 1920x1080.
583
+ - engine_start can read UE project path from env; provide editorExe/projectPath if needed.
584
+
585
+ Examples:
586
+ - {"action":"show_fps","enabled":true}
587
+ - {"action":"set_quality","category":"Shadows","level":2}
588
+ - {"action":"play_sound","soundPath":"/Game/Audio/SFX/Click","volume":0.5}
589
+ - {"action":"screenshot","resolution":"1920x1080"}`,
408
590
  inputSchema: {
409
591
  type: 'object',
410
592
  properties: {
@@ -473,7 +655,22 @@ export const consolidatedToolDefinitions = [
473
655
  // 10. CONSOLE COMMAND - Universal tool
474
656
  {
475
657
  name: 'console_command',
476
- description: 'Execute any console command in Unreal Engine',
658
+ description: `Execute an Unreal console command with built-in safety.
659
+
660
+ When to use this tool:
661
+ - Fire a specific command (e.g., stat fps, viewmode wireframe, r.ScreenPercentage 75).
662
+
663
+ Safety:
664
+ - Dangerous commands are blocked (quit/exit, GPU crash triggers, unsafe visualizebuffer modes, etc.).
665
+ - Unknown commands will return a warning instead of crashing.
666
+
667
+ Tips:
668
+ - Prefer dedicated tools (system_control, control_editor) when available for structured control.
669
+
670
+ Examples:
671
+ - {"command":"stat fps"}
672
+ - {"command":"viewmode wireframe"}
673
+ - {"command":"r.ScreenPercentage 75"}`,
477
674
  inputSchema: {
478
675
  type: 'object',
479
676
  properties: {
@@ -496,7 +693,29 @@ export const consolidatedToolDefinitions = [
496
693
  // 11. REMOTE CONTROL PRESETS
497
694
  {
498
695
  name: 'manage_rc',
499
- description: 'Manage Remote Control presets: create, expose, list fields, set/get values',
696
+ description: `Create and manage Remote Control presets; expose actors/properties; set/get values.
697
+
698
+ When to use this tool:
699
+ - Automate Remote Control (RC) preset authoring and interaction from the assistant.
700
+
701
+ Supported actions:
702
+ - create_preset
703
+ - expose_actor
704
+ - expose_property
705
+ - list_fields
706
+ - set_property
707
+ - get_property
708
+
709
+ Tips:
710
+ - value must be JSON-serializable.
711
+ - Use objectPath/presetPath with full asset/object paths.
712
+
713
+ Examples:
714
+ - {"action":"create_preset","name":"LivePreset","path":"/Game/RCPresets"}
715
+ - {"action":"expose_actor","presetPath":"/Game/RCPresets/LivePreset","actorName":"CameraActor"}
716
+ - {"action":"expose_property","presetPath":"/Game/RCPresets/LivePreset","objectPath":"/Script/Engine.Default__Engine","propertyName":"GameUserSettings"}
717
+ - {"action":"list_fields","presetPath":"/Game/RCPresets/LivePreset"}
718
+ - {"action":"set_property","objectPath":"/Game/MyActor","propertyName":"CustomFloat","value":0.5}`,
500
719
  inputSchema: {
501
720
  type: 'object',
502
721
  properties: {
@@ -530,7 +749,37 @@ export const consolidatedToolDefinitions = [
530
749
  // 12. SEQUENCER / CINEMATICS
531
750
  {
532
751
  name: 'manage_sequence',
533
- description: 'Create/open sequences, add cameras/actors, manage bindings, control playback, and set properties',
752
+ description: `Create/open Level Sequences, bind actors, add cameras, and control playback.
753
+
754
+ When to use this tool:
755
+ - Build quick cinematics: create/open a sequence, add a camera or actors, tweak properties, and play.
756
+
757
+ Supported actions:
758
+ - create
759
+ - open
760
+ - add_camera
761
+ - add_actor
762
+ - add_actors
763
+ - remove_actors
764
+ - get_bindings
765
+ - add_spawnable_from_class
766
+ - play
767
+ - pause
768
+ - stop
769
+ - set_properties
770
+ - get_properties
771
+ - set_playback_speed
772
+
773
+ Tips:
774
+ - Set spawnable=true to auto-create a camera actor.
775
+ - Use frameRate/lengthInFrames to define timing; use playbackStart/End to trim.
776
+
777
+ Examples:
778
+ - {"action":"create","name":"Intro","path":"/Game/Cinematics"}
779
+ - {"action":"add_camera","spawnable":true}
780
+ - {"action":"add_actor","actorName":"Hero"}
781
+ - {"action":"play","loopMode":"once"}
782
+ - {"action":"set_properties","path":"/Game/Cinematics/Intro","frameRate":24,"lengthInFrames":480}`,
534
783
  inputSchema: {
535
784
  type: 'object',
536
785
  properties: {
@@ -582,7 +831,22 @@ export const consolidatedToolDefinitions = [
582
831
  // 13. INTROSPECTION
583
832
  {
584
833
  name: 'inspect',
585
- description: 'Inspect objects and set properties safely',
834
+ description: `Read object info and set properties with validation.
835
+
836
+ When to use this tool:
837
+ - Inspect an object by path (class default object or actor/component) and optionally modify properties.
838
+
839
+ Supported actions:
840
+ - inspect_object
841
+ - set_property
842
+
843
+ Tips:
844
+ - propertyName is case-sensitive; ensure it exists on the target object.
845
+ - For class default objects (CDOs), use the /Script/...Default__Class path.
846
+
847
+ Examples:
848
+ - {"action":"inspect_object","objectPath":"/Script/Engine.Default__Engine"}
849
+ - {"action":"set_property","objectPath":"/Game/MyActor","propertyName":"CustomBool","value":true}`,
586
850
  inputSchema: {
587
851
  type: 'object',
588
852
  properties: {
@@ -1,9 +1,12 @@
1
- // Consolidated tool handlers - maps 10 tools to all 36 operations
1
+ // Consolidated tool handlers - maps 13 tools to all 36 operations
2
2
  import { handleToolCall } from './tool-handlers.js';
3
3
  import { cleanObject } from '../utils/safe-json.js';
4
+ import { Logger } from '../utils/logger.js';
5
+ const log = new Logger('ConsolidatedToolHandler');
4
6
  export async function handleConsolidatedToolCall(name, args, tools) {
5
7
  const startTime = Date.now();
6
- console.log(`[ConsolidatedToolHandler] Starting execution of ${name} at ${new Date().toISOString()}`);
8
+ // Use scoped logger (stderr) to avoid polluting stdout JSON
9
+ log.debug(`Starting execution of ${name} at ${new Date().toISOString()}`);
7
10
  try {
8
11
  // Validate args is not null/undefined
9
12
  if (args === null || args === undefined) {