unreal-engine-mcp-server 0.3.0 → 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.
- package/.env.production +6 -1
- package/Dockerfile +11 -28
- package/dist/index.js +105 -37
- package/dist/resources/actors.js +71 -13
- package/dist/tools/consolidated-tool-definitions.js +127 -5
- package/dist/tools/consolidated-tool-handlers.js +4 -1
- package/dist/tools/tool-definitions.js +77 -19
- package/dist/unreal-bridge.d.ts +4 -1
- package/dist/unreal-bridge.js +211 -53
- package/dist/utils/http.js +4 -2
- package/dist/utils/response-validator.js +2 -1
- package/package.json +2 -2
- package/server.json +2 -2
- package/src/index.ts +103 -38
- package/src/resources/actors.ts +51 -13
- package/src/tools/consolidated-tool-definitions.ts +127 -5
- package/src/tools/consolidated-tool-handlers.ts +5 -1
- package/src/tools/tool-definitions.ts +77 -19
- package/src/unreal-bridge.ts +163 -60
- package/src/utils/http.ts +7 -4
- package/src/utils/response-validator.ts +2 -1
|
@@ -563,7 +563,7 @@ Example:
|
|
|
563
563
|
description: `Stream in/out a sublevel and set visibility.
|
|
564
564
|
|
|
565
565
|
Example:
|
|
566
|
-
- {
|
|
566
|
+
- {"levelName":"Sublevel_A","shouldBeLoaded":true,"shouldBeVisible":true}`,
|
|
567
567
|
inputSchema: {
|
|
568
568
|
type: 'object',
|
|
569
569
|
properties: {
|
|
@@ -589,8 +589,8 @@ Example:
|
|
|
589
589
|
description: `Create a light (Directional/Point/Spot/Rect/Sky) with optional transform/intensity.
|
|
590
590
|
|
|
591
591
|
Examples:
|
|
592
|
-
- {
|
|
593
|
-
- {
|
|
592
|
+
- {"lightType":"Directional","name":"KeyLight","intensity":5.0}
|
|
593
|
+
- {"lightType":"Point","name":"Fill","location":{"x":0,"y":100,"z":200},"intensity":2000}`,
|
|
594
594
|
inputSchema: {
|
|
595
595
|
type: 'object',
|
|
596
596
|
properties: {
|
|
@@ -619,7 +619,13 @@ Examples:
|
|
|
619
619
|
},
|
|
620
620
|
{
|
|
621
621
|
name: 'build_lighting',
|
|
622
|
-
description:
|
|
622
|
+
description: `Start a lighting build.
|
|
623
|
+
|
|
624
|
+
When to use:
|
|
625
|
+
- Bake lights for preview or final output (choose quality).
|
|
626
|
+
|
|
627
|
+
Example:
|
|
628
|
+
- {"quality":"High"}`,
|
|
623
629
|
inputSchema: {
|
|
624
630
|
type: 'object',
|
|
625
631
|
properties: {
|
|
@@ -638,7 +644,13 @@ Examples:
|
|
|
638
644
|
// Landscape Tools
|
|
639
645
|
{
|
|
640
646
|
name: 'create_landscape',
|
|
641
|
-
description:
|
|
647
|
+
description: `Attempt to create a landscape.
|
|
648
|
+
|
|
649
|
+
Notes:
|
|
650
|
+
- Native Python APIs are limited; you may be guided to use Landscape Mode in the editor.
|
|
651
|
+
|
|
652
|
+
Example:
|
|
653
|
+
- {"name":"Landscape_Basic","sizeX":1024,"sizeY":1024}`,
|
|
642
654
|
inputSchema: {
|
|
643
655
|
type: 'object',
|
|
644
656
|
properties: {
|
|
@@ -660,7 +672,10 @@ Examples:
|
|
|
660
672
|
},
|
|
661
673
|
{
|
|
662
674
|
name: 'sculpt_landscape',
|
|
663
|
-
description:
|
|
675
|
+
description: `Sculpt a landscape using editor tools (best-effort; some operations may require manual Landscape Mode).
|
|
676
|
+
|
|
677
|
+
Example:
|
|
678
|
+
- {"landscapeName":"Landscape_Basic","tool":"Smooth","brushSize":300,"strength":0.5}`,
|
|
664
679
|
inputSchema: {
|
|
665
680
|
type: 'object',
|
|
666
681
|
properties: {
|
|
@@ -685,7 +700,7 @@ Examples:
|
|
|
685
700
|
description: `Create or load a FoliageType asset for instanced foliage workflows.
|
|
686
701
|
|
|
687
702
|
Example:
|
|
688
|
-
- {
|
|
703
|
+
- {"name":"FT_Grass","meshPath":"/Game/Foliage/SM_Grass","density":300}`,
|
|
689
704
|
inputSchema: {
|
|
690
705
|
type: 'object',
|
|
691
706
|
properties: {
|
|
@@ -706,7 +721,13 @@ Example:
|
|
|
706
721
|
},
|
|
707
722
|
{
|
|
708
723
|
name: 'paint_foliage',
|
|
709
|
-
description:
|
|
724
|
+
description: `Paint foliage onto the world.
|
|
725
|
+
|
|
726
|
+
When to use:
|
|
727
|
+
- Scatter instances using an existing FoliageType.
|
|
728
|
+
|
|
729
|
+
Example:
|
|
730
|
+
- {"foliageType":"/Game/Foliage/Types/FT_Grass","position":{"x":0,"y":0,"z":0},"brushSize":300}`,
|
|
710
731
|
inputSchema: {
|
|
711
732
|
type: 'object',
|
|
712
733
|
properties: {
|
|
@@ -735,7 +756,10 @@ Example:
|
|
|
735
756
|
// Debug Visualization Tools
|
|
736
757
|
{
|
|
737
758
|
name: 'draw_debug_shape',
|
|
738
|
-
description:
|
|
759
|
+
description: `Draw a debug shape.
|
|
760
|
+
|
|
761
|
+
Example:
|
|
762
|
+
- {"shape":"Sphere","position":{"x":0,"y":0,"z":0},"size":100,"color":[255,0,0,255],"duration":3}`,
|
|
739
763
|
inputSchema: {
|
|
740
764
|
type: 'object',
|
|
741
765
|
properties: {
|
|
@@ -768,7 +792,10 @@ Example:
|
|
|
768
792
|
},
|
|
769
793
|
{
|
|
770
794
|
name: 'set_view_mode',
|
|
771
|
-
description:
|
|
795
|
+
description: `Set the viewport view mode.
|
|
796
|
+
|
|
797
|
+
Example:
|
|
798
|
+
- {"mode":"Wireframe"}`,
|
|
772
799
|
inputSchema: {
|
|
773
800
|
type: 'object',
|
|
774
801
|
properties: {
|
|
@@ -788,7 +815,10 @@ Example:
|
|
|
788
815
|
// Performance Tools
|
|
789
816
|
{
|
|
790
817
|
name: 'start_profiling',
|
|
791
|
-
description:
|
|
818
|
+
description: `Start performance profiling.
|
|
819
|
+
|
|
820
|
+
Example:
|
|
821
|
+
- {"type":"GPU","duration":10}`,
|
|
792
822
|
inputSchema: {
|
|
793
823
|
type: 'object',
|
|
794
824
|
properties: {
|
|
@@ -808,7 +838,10 @@ Example:
|
|
|
808
838
|
},
|
|
809
839
|
{
|
|
810
840
|
name: 'show_fps',
|
|
811
|
-
description:
|
|
841
|
+
description: `Show/hide the FPS counter.
|
|
842
|
+
|
|
843
|
+
Example:
|
|
844
|
+
- {"enabled":true,"verbose":false}`,
|
|
812
845
|
inputSchema: {
|
|
813
846
|
type: 'object',
|
|
814
847
|
properties: {
|
|
@@ -828,7 +861,10 @@ Example:
|
|
|
828
861
|
},
|
|
829
862
|
{
|
|
830
863
|
name: 'set_scalability',
|
|
831
|
-
description:
|
|
864
|
+
description: `Set scalability/quality levels.
|
|
865
|
+
|
|
866
|
+
Example:
|
|
867
|
+
- {"category":"Shadows","level":2}`,
|
|
832
868
|
inputSchema: {
|
|
833
869
|
type: 'object',
|
|
834
870
|
properties: {
|
|
@@ -849,7 +885,10 @@ Example:
|
|
|
849
885
|
// Audio Tools
|
|
850
886
|
{
|
|
851
887
|
name: 'play_sound',
|
|
852
|
-
description:
|
|
888
|
+
description: `Play a sound.
|
|
889
|
+
|
|
890
|
+
Example:
|
|
891
|
+
- {"soundPath":"/Game/Audio/SFX/Click","volume":0.5,"is3D":true}`,
|
|
853
892
|
inputSchema: {
|
|
854
893
|
type: 'object',
|
|
855
894
|
properties: {
|
|
@@ -878,7 +917,10 @@ Example:
|
|
|
878
917
|
},
|
|
879
918
|
{
|
|
880
919
|
name: 'create_ambient_sound',
|
|
881
|
-
description:
|
|
920
|
+
description: `Create an ambient sound actor.
|
|
921
|
+
|
|
922
|
+
Example:
|
|
923
|
+
- {"name":"Amb_Wind","soundPath":"/Game/Audio/Amb/AMB_Wind","location":{"x":0,"y":0,"z":0},"radius":1000}`,
|
|
882
924
|
inputSchema: {
|
|
883
925
|
type: 'object',
|
|
884
926
|
properties: {
|
|
@@ -908,7 +950,10 @@ Example:
|
|
|
908
950
|
// UI Tools
|
|
909
951
|
{
|
|
910
952
|
name: 'create_widget',
|
|
911
|
-
description:
|
|
953
|
+
description: `Create a UI widget.
|
|
954
|
+
|
|
955
|
+
Example:
|
|
956
|
+
- {"name":"HUDMain","type":"HUD","savePath":"/Game/UI"}`,
|
|
912
957
|
inputSchema: {
|
|
913
958
|
type: 'object',
|
|
914
959
|
properties: {
|
|
@@ -929,7 +974,10 @@ Example:
|
|
|
929
974
|
},
|
|
930
975
|
{
|
|
931
976
|
name: 'show_widget',
|
|
932
|
-
description:
|
|
977
|
+
description: `Show or hide a widget.
|
|
978
|
+
|
|
979
|
+
Example:
|
|
980
|
+
- {"widgetName":"HUDMain","visible":true}`,
|
|
933
981
|
inputSchema: {
|
|
934
982
|
type: 'object',
|
|
935
983
|
properties: {
|
|
@@ -949,7 +997,10 @@ Example:
|
|
|
949
997
|
},
|
|
950
998
|
{
|
|
951
999
|
name: 'create_hud',
|
|
952
|
-
description:
|
|
1000
|
+
description: `Create a HUD description/layout.
|
|
1001
|
+
|
|
1002
|
+
Example:
|
|
1003
|
+
- {"name":"GameHUD","elements":[{"type":"Text","position":[10,10]}]}`,
|
|
953
1004
|
inputSchema: {
|
|
954
1005
|
type: 'object',
|
|
955
1006
|
properties: {
|
|
@@ -982,7 +1033,14 @@ Example:
|
|
|
982
1033
|
// Console command (universal tool)
|
|
983
1034
|
{
|
|
984
1035
|
name: 'console_command',
|
|
985
|
-
description:
|
|
1036
|
+
description: `Execute a console command.
|
|
1037
|
+
|
|
1038
|
+
When to use:
|
|
1039
|
+
- Quick toggles like "stat fps", "viewmode wireframe", or r.* cvars.
|
|
1040
|
+
|
|
1041
|
+
Examples:
|
|
1042
|
+
- {"command":"stat fps"}
|
|
1043
|
+
- {"command":"r.ScreenPercentage 75"}`,
|
|
986
1044
|
inputSchema: {
|
|
987
1045
|
type: 'object',
|
|
988
1046
|
properties: {
|
package/dist/unreal-bridge.d.ts
CHANGED
|
@@ -14,6 +14,7 @@ export declare class UnrealBridge {
|
|
|
14
14
|
private reconnectAttempts;
|
|
15
15
|
private readonly MAX_RECONNECT_ATTEMPTS;
|
|
16
16
|
private readonly BASE_RECONNECT_DELAY;
|
|
17
|
+
private autoReconnectEnabled;
|
|
17
18
|
private commandQueue;
|
|
18
19
|
private isProcessing;
|
|
19
20
|
private readonly MIN_COMMAND_DELAY;
|
|
@@ -32,6 +33,7 @@ export declare class UnrealBridge {
|
|
|
32
33
|
* @param retryDelayMs Delay between retry attempts in milliseconds
|
|
33
34
|
* @returns Promise that resolves when connected or rejects after all attempts fail
|
|
34
35
|
*/
|
|
36
|
+
private connectPromise?;
|
|
35
37
|
tryConnect(maxAttempts?: number, timeoutMs?: number, retryDelayMs?: number): Promise<boolean>;
|
|
36
38
|
connect(timeoutMs?: number): Promise<void>;
|
|
37
39
|
httpCall<T = any>(path: string, method?: 'GET' | 'POST' | 'PUT', body?: any): Promise<T>;
|
|
@@ -39,6 +41,7 @@ export declare class UnrealBridge {
|
|
|
39
41
|
getExposed(): Promise<any>;
|
|
40
42
|
executeConsoleCommand(command: string): Promise<any>;
|
|
41
43
|
executePython(command: string): Promise<any>;
|
|
44
|
+
setAutoReconnectEnabled(enabled: boolean): void;
|
|
42
45
|
private scheduleReconnect;
|
|
43
46
|
disconnect(): Promise<void>;
|
|
44
47
|
/**
|
|
@@ -49,7 +52,7 @@ export declare class UnrealBridge {
|
|
|
49
52
|
/**
|
|
50
53
|
* Execute Python script and parse the result
|
|
51
54
|
*/
|
|
52
|
-
|
|
55
|
+
executePythonWithResult(script: string): Promise<any>;
|
|
53
56
|
/**
|
|
54
57
|
* Get the Unreal Engine version via Python and parse major/minor/patch.
|
|
55
58
|
*/
|