ue-mcp 0.4.0-alpha

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 (141) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +89 -0
  3. package/dist/bridge.d.ts +25 -0
  4. package/dist/bridge.js +124 -0
  5. package/dist/bridge.js.map +1 -0
  6. package/dist/deployer.d.ts +18 -0
  7. package/dist/deployer.js +175 -0
  8. package/dist/deployer.js.map +1 -0
  9. package/dist/editor-control.d.ts +15 -0
  10. package/dist/editor-control.js +181 -0
  11. package/dist/editor-control.js.map +1 -0
  12. package/dist/github-app.d.ts +4 -0
  13. package/dist/github-app.js +94 -0
  14. package/dist/github-app.js.map +1 -0
  15. package/dist/index.d.ts +2 -0
  16. package/dist/index.js +125 -0
  17. package/dist/index.js.map +1 -0
  18. package/dist/init.d.ts +2 -0
  19. package/dist/init.js +290 -0
  20. package/dist/init.js.map +1 -0
  21. package/dist/instructions.d.ts +1 -0
  22. package/dist/instructions.js +150 -0
  23. package/dist/instructions.js.map +1 -0
  24. package/dist/project.d.ts +32 -0
  25. package/dist/project.js +175 -0
  26. package/dist/project.js.map +1 -0
  27. package/dist/tools/animation.d.ts +2 -0
  28. package/dist/tools/animation.js +62 -0
  29. package/dist/tools/animation.js.map +1 -0
  30. package/dist/tools/asset.d.ts +2 -0
  31. package/dist/tools/asset.js +128 -0
  32. package/dist/tools/asset.js.map +1 -0
  33. package/dist/tools/audio.d.ts +2 -0
  34. package/dist/tools/audio.js +24 -0
  35. package/dist/tools/audio.js.map +1 -0
  36. package/dist/tools/blueprint.d.ts +2 -0
  37. package/dist/tools/blueprint.js +64 -0
  38. package/dist/tools/blueprint.js.map +1 -0
  39. package/dist/tools/demo.d.ts +2 -0
  40. package/dist/tools/demo.js +10 -0
  41. package/dist/tools/demo.js.map +1 -0
  42. package/dist/tools/editor.d.ts +2 -0
  43. package/dist/tools/editor.js +133 -0
  44. package/dist/tools/editor.js.map +1 -0
  45. package/dist/tools/feedback.d.ts +2 -0
  46. package/dist/tools/feedback.js +44 -0
  47. package/dist/tools/feedback.js.map +1 -0
  48. package/dist/tools/foliage.d.ts +2 -0
  49. package/dist/tools/foliage.js +29 -0
  50. package/dist/tools/foliage.js.map +1 -0
  51. package/dist/tools/gameplay.d.ts +2 -0
  52. package/dist/tools/gameplay.js +101 -0
  53. package/dist/tools/gameplay.js.map +1 -0
  54. package/dist/tools/gas.d.ts +2 -0
  55. package/dist/tools/gas.js +43 -0
  56. package/dist/tools/gas.js.map +1 -0
  57. package/dist/tools/landscape.d.ts +2 -0
  58. package/dist/tools/landscape.js +32 -0
  59. package/dist/tools/landscape.js.map +1 -0
  60. package/dist/tools/level.d.ts +2 -0
  61. package/dist/tools/level.js +66 -0
  62. package/dist/tools/level.js.map +1 -0
  63. package/dist/tools/material.d.ts +2 -0
  64. package/dist/tools/material.js +59 -0
  65. package/dist/tools/material.js.map +1 -0
  66. package/dist/tools/networking.d.ts +2 -0
  67. package/dist/tools/networking.js +42 -0
  68. package/dist/tools/networking.js.map +1 -0
  69. package/dist/tools/niagara.d.ts +2 -0
  70. package/dist/tools/niagara.js +42 -0
  71. package/dist/tools/niagara.js.map +1 -0
  72. package/dist/tools/pcg.d.ts +2 -0
  73. package/dist/tools/pcg.js +39 -0
  74. package/dist/tools/pcg.js.map +1 -0
  75. package/dist/tools/project.d.ts +2 -0
  76. package/dist/tools/project.js +282 -0
  77. package/dist/tools/project.js.map +1 -0
  78. package/dist/tools/reflection.d.ts +2 -0
  79. package/dist/tools/reflection.js +26 -0
  80. package/dist/tools/reflection.js.map +1 -0
  81. package/dist/tools/widget.d.ts +2 -0
  82. package/dist/tools/widget.js +34 -0
  83. package/dist/tools/widget.js.map +1 -0
  84. package/dist/types.d.ts +21 -0
  85. package/dist/types.js +38 -0
  86. package/dist/types.js.map +1 -0
  87. package/package.json +76 -0
  88. package/plugin/ue_mcp_bridge/Source/UE_MCP_Bridge/Private/BridgeServer.cpp +746 -0
  89. package/plugin/ue_mcp_bridge/Source/UE_MCP_Bridge/Private/BridgeServer.h +81 -0
  90. package/plugin/ue_mcp_bridge/Source/UE_MCP_Bridge/Private/GameThreadExecutor.cpp +49 -0
  91. package/plugin/ue_mcp_bridge/Source/UE_MCP_Bridge/Private/GameThreadExecutor.h +37 -0
  92. package/plugin/ue_mcp_bridge/Source/UE_MCP_Bridge/Private/HandlerRegistry.cpp +75 -0
  93. package/plugin/ue_mcp_bridge/Source/UE_MCP_Bridge/Private/HandlerRegistry.h +50 -0
  94. package/plugin/ue_mcp_bridge/Source/UE_MCP_Bridge/Private/Handlers/AnimationHandlers.cpp +1418 -0
  95. package/plugin/ue_mcp_bridge/Source/UE_MCP_Bridge/Private/Handlers/AnimationHandlers.h +43 -0
  96. package/plugin/ue_mcp_bridge/Source/UE_MCP_Bridge/Private/Handlers/AssetHandlers.cpp +1773 -0
  97. package/plugin/ue_mcp_bridge/Source/UE_MCP_Bridge/Private/Handlers/AssetHandlers.h +48 -0
  98. package/plugin/ue_mcp_bridge/Source/UE_MCP_Bridge/Private/Handlers/AudioHandlers.cpp +289 -0
  99. package/plugin/ue_mcp_bridge/Source/UE_MCP_Bridge/Private/Handlers/AudioHandlers.h +18 -0
  100. package/plugin/ue_mcp_bridge/Source/UE_MCP_Bridge/Private/Handlers/BlueprintHandlers.cpp +1982 -0
  101. package/plugin/ue_mcp_bridge/Source/UE_MCP_Bridge/Private/Handlers/BlueprintHandlers.h +44 -0
  102. package/plugin/ue_mcp_bridge/Source/UE_MCP_Bridge/Private/Handlers/DemoHandlers.cpp +1217 -0
  103. package/plugin/ue_mcp_bridge/Source/UE_MCP_Bridge/Private/Handlers/DemoHandlers.h +71 -0
  104. package/plugin/ue_mcp_bridge/Source/UE_MCP_Bridge/Private/Handlers/DialogHandlers.cpp +465 -0
  105. package/plugin/ue_mcp_bridge/Source/UE_MCP_Bridge/Private/Handlers/DialogHandlers.h +49 -0
  106. package/plugin/ue_mcp_bridge/Source/UE_MCP_Bridge/Private/Handlers/EditorHandlers.cpp +1676 -0
  107. package/plugin/ue_mcp_bridge/Source/UE_MCP_Bridge/Private/Handlers/EditorHandlers.h +53 -0
  108. package/plugin/ue_mcp_bridge/Source/UE_MCP_Bridge/Private/Handlers/FoliageHandlers.cpp +876 -0
  109. package/plugin/ue_mcp_bridge/Source/UE_MCP_Bridge/Private/Handlers/FoliageHandlers.h +22 -0
  110. package/plugin/ue_mcp_bridge/Source/UE_MCP_Bridge/Private/Handlers/GameplayHandlers.cpp +2222 -0
  111. package/plugin/ue_mcp_bridge/Source/UE_MCP_Bridge/Private/Handlers/GameplayHandlers.h +54 -0
  112. package/plugin/ue_mcp_bridge/Source/UE_MCP_Bridge/Private/Handlers/GasHandlers.cpp +783 -0
  113. package/plugin/ue_mcp_bridge/Source/UE_MCP_Bridge/Private/Handlers/GasHandlers.h +24 -0
  114. package/plugin/ue_mcp_bridge/Source/UE_MCP_Bridge/Private/Handlers/LandscapeHandlers.cpp +898 -0
  115. package/plugin/ue_mcp_bridge/Source/UE_MCP_Bridge/Private/Handlers/LandscapeHandlers.h +24 -0
  116. package/plugin/ue_mcp_bridge/Source/UE_MCP_Bridge/Private/Handlers/LevelHandlers.cpp +1270 -0
  117. package/plugin/ue_mcp_bridge/Source/UE_MCP_Bridge/Private/Handlers/LevelHandlers.h +34 -0
  118. package/plugin/ue_mcp_bridge/Source/UE_MCP_Bridge/Private/Handlers/MaterialHandlers.cpp +2190 -0
  119. package/plugin/ue_mcp_bridge/Source/UE_MCP_Bridge/Private/Handlers/MaterialHandlers.h +53 -0
  120. package/plugin/ue_mcp_bridge/Source/UE_MCP_Bridge/Private/Handlers/NetworkingHandlers.cpp +554 -0
  121. package/plugin/ue_mcp_bridge/Source/UE_MCP_Bridge/Private/Handlers/NetworkingHandlers.h +29 -0
  122. package/plugin/ue_mcp_bridge/Source/UE_MCP_Bridge/Private/Handlers/NiagaraHandlers.cpp +601 -0
  123. package/plugin/ue_mcp_bridge/Source/UE_MCP_Bridge/Private/Handlers/NiagaraHandlers.h +25 -0
  124. package/plugin/ue_mcp_bridge/Source/UE_MCP_Bridge/Private/Handlers/PCGHandlers.cpp +1024 -0
  125. package/plugin/ue_mcp_bridge/Source/UE_MCP_Bridge/Private/Handlers/PCGHandlers.h +25 -0
  126. package/plugin/ue_mcp_bridge/Source/UE_MCP_Bridge/Private/Handlers/PhysicsHandlers.cpp +370 -0
  127. package/plugin/ue_mcp_bridge/Source/UE_MCP_Bridge/Private/Handlers/PhysicsHandlers.h +19 -0
  128. package/plugin/ue_mcp_bridge/Source/UE_MCP_Bridge/Private/Handlers/ReflectionHandlers.cpp +499 -0
  129. package/plugin/ue_mcp_bridge/Source/UE_MCP_Bridge/Private/Handlers/ReflectionHandlers.h +27 -0
  130. package/plugin/ue_mcp_bridge/Source/UE_MCP_Bridge/Private/Handlers/SequencerHandlers.cpp +426 -0
  131. package/plugin/ue_mcp_bridge/Source/UE_MCP_Bridge/Private/Handlers/SequencerHandlers.h +19 -0
  132. package/plugin/ue_mcp_bridge/Source/UE_MCP_Bridge/Private/Handlers/SplineHandlers.cpp +303 -0
  133. package/plugin/ue_mcp_bridge/Source/UE_MCP_Bridge/Private/Handlers/SplineHandlers.h +18 -0
  134. package/plugin/ue_mcp_bridge/Source/UE_MCP_Bridge/Private/Handlers/WidgetHandlers.cpp +985 -0
  135. package/plugin/ue_mcp_bridge/Source/UE_MCP_Bridge/Private/Handlers/WidgetHandlers.h +27 -0
  136. package/plugin/ue_mcp_bridge/Source/UE_MCP_Bridge/Private/JsonSerializer.cpp +181 -0
  137. package/plugin/ue_mcp_bridge/Source/UE_MCP_Bridge/Private/JsonSerializer.h +42 -0
  138. package/plugin/ue_mcp_bridge/Source/UE_MCP_Bridge/Private/UE_MCP_Bridge.cpp +39 -0
  139. package/plugin/ue_mcp_bridge/Source/UE_MCP_Bridge/Public/UE_MCP_BridgeModule.h +14 -0
  140. package/plugin/ue_mcp_bridge/Source/UE_MCP_Bridge/UE_MCP_Bridge.Build.cs +87 -0
  141. package/plugin/ue_mcp_bridge/UE_MCP_Bridge.uplugin +55 -0
@@ -0,0 +1,27 @@
1
+ #pragma once
2
+
3
+ #include "CoreMinimal.h"
4
+ #include "Dom/JsonValue.h"
5
+ #include "Dom/JsonObject.h"
6
+
7
+ class FWidgetHandlers
8
+ {
9
+ public:
10
+ static void RegisterHandlers(class FMCPHandlerRegistry& Registry);
11
+
12
+ private:
13
+ static TSharedPtr<FJsonValue> ListWidgetBlueprints(const TSharedPtr<FJsonObject>& Params);
14
+ static TSharedPtr<FJsonValue> CreateWidgetBlueprint(const TSharedPtr<FJsonObject>& Params);
15
+ static TSharedPtr<FJsonValue> ReadWidgetTree(const TSharedPtr<FJsonObject>& Params);
16
+ static TSharedPtr<FJsonValue> CreateEditorUtilityWidget(const TSharedPtr<FJsonObject>& Params);
17
+ static TSharedPtr<FJsonValue> CreateEditorUtilityBlueprint(const TSharedPtr<FJsonObject>& Params);
18
+ static TSharedPtr<FJsonValue> SearchWidgetByName(const TSharedPtr<FJsonObject>& Params);
19
+ static TSharedPtr<FJsonValue> GetWidgetProperties(const TSharedPtr<FJsonObject>& Params);
20
+ static TSharedPtr<FJsonValue> SetWidgetProperty(const TSharedPtr<FJsonObject>& Params);
21
+ static TSharedPtr<FJsonValue> ReadWidgetAnimations(const TSharedPtr<FJsonObject>& Params);
22
+ static TSharedPtr<FJsonValue> RunEditorUtilityWidget(const TSharedPtr<FJsonObject>& Params);
23
+ static TSharedPtr<FJsonValue> RunEditorUtilityBlueprint(const TSharedPtr<FJsonObject>& Params);
24
+
25
+ // Helper: recursively search for a widget by name in the tree
26
+ static class UWidget* FindWidgetByNameRecursive(class UWidget* Root, const FString& WidgetName);
27
+ };
@@ -0,0 +1,181 @@
1
+ #include "JsonSerializer.h"
2
+ #include "UObject/UnrealType.h"
3
+ #include "UObject/PropertyPortFlags.h"
4
+ #include "Dom/JsonObject.h"
5
+ #include "Dom/JsonValue.h"
6
+
7
+ TSharedPtr<FJsonValue> FMCPJsonSerializer::SerializeValue(const void* Value, FProperty* Property)
8
+ {
9
+ if (!Property || !Value)
10
+ {
11
+ return MakeShared<FJsonValueNull>();
12
+ }
13
+
14
+ return SerializePropertyValue(Value, Property);
15
+ }
16
+
17
+ TSharedPtr<FJsonValue> FMCPJsonSerializer::SerializeVector(const FVector& Vector)
18
+ {
19
+ TSharedPtr<FJsonObject> JsonObject = MakeShared<FJsonObject>();
20
+ JsonObject->SetNumberField(TEXT("x"), Vector.X);
21
+ JsonObject->SetNumberField(TEXT("y"), Vector.Y);
22
+ JsonObject->SetNumberField(TEXT("z"), Vector.Z);
23
+ return MakeShared<FJsonValueObject>(JsonObject);
24
+ }
25
+
26
+ TSharedPtr<FJsonValue> FMCPJsonSerializer::SerializeRotator(const FRotator& Rotator)
27
+ {
28
+ TSharedPtr<FJsonObject> JsonObject = MakeShared<FJsonObject>();
29
+ JsonObject->SetNumberField(TEXT("pitch"), Rotator.Pitch);
30
+ JsonObject->SetNumberField(TEXT("yaw"), Rotator.Yaw);
31
+ JsonObject->SetNumberField(TEXT("roll"), Rotator.Roll);
32
+ return MakeShared<FJsonValueObject>(JsonObject);
33
+ }
34
+
35
+ TSharedPtr<FJsonValue> FMCPJsonSerializer::SerializeTransform(const FTransform& Transform)
36
+ {
37
+ TSharedPtr<FJsonObject> JsonObject = MakeShared<FJsonObject>();
38
+ TSharedPtr<FJsonValue> TranslationValue = SerializeVector(Transform.GetTranslation());
39
+ TSharedPtr<FJsonValue> RotationValue = SerializeRotator(Transform.GetRotation().Rotator());
40
+ TSharedPtr<FJsonValue> ScaleValue = SerializeVector(Transform.GetScale3D());
41
+ JsonObject->SetObjectField(TEXT("translation"), TranslationValue->AsObject());
42
+ JsonObject->SetObjectField(TEXT("rotation"), RotationValue->AsObject());
43
+ JsonObject->SetObjectField(TEXT("scale"), ScaleValue->AsObject());
44
+ return MakeShared<FJsonValueObject>(JsonObject);
45
+ }
46
+
47
+ TSharedPtr<FJsonValue> FMCPJsonSerializer::SerializeLinearColor(const FLinearColor& Color)
48
+ {
49
+ TSharedPtr<FJsonObject> JsonObject = MakeShared<FJsonObject>();
50
+ JsonObject->SetNumberField(TEXT("r"), Color.R);
51
+ JsonObject->SetNumberField(TEXT("g"), Color.G);
52
+ JsonObject->SetNumberField(TEXT("b"), Color.B);
53
+ JsonObject->SetNumberField(TEXT("a"), Color.A);
54
+ return MakeShared<FJsonValueObject>(JsonObject);
55
+ }
56
+
57
+ TSharedPtr<FJsonValue> FMCPJsonSerializer::SerializeString(const FString& String)
58
+ {
59
+ return MakeShared<FJsonValueString>(String);
60
+ }
61
+
62
+ TSharedPtr<FJsonValue> FMCPJsonSerializer::SerializeObjectProperty(UObject* Object, FProperty* Property)
63
+ {
64
+ if (!Object || !Property)
65
+ {
66
+ return MakeShared<FJsonValueNull>();
67
+ }
68
+
69
+ const void* ValuePtr = Property->ContainerPtrToValuePtr<void>(Object);
70
+ return SerializePropertyValue(ValuePtr, Property);
71
+ }
72
+
73
+ TSharedPtr<FJsonObject> FMCPJsonSerializer::SerializeObject(UObject* Object)
74
+ {
75
+ if (!Object)
76
+ {
77
+ return MakeShared<FJsonObject>();
78
+ }
79
+
80
+ TSharedPtr<FJsonObject> JsonObject = MakeShared<FJsonObject>();
81
+
82
+ // Serialize basic object info
83
+ JsonObject->SetStringField(TEXT("name"), Object->GetName());
84
+ JsonObject->SetStringField(TEXT("class"), Object->GetClass()->GetName());
85
+ JsonObject->SetStringField(TEXT("path"), Object->GetPathName());
86
+
87
+ // Serialize properties
88
+ for (TFieldIterator<FProperty> PropIt(Object->GetClass()); PropIt; ++PropIt)
89
+ {
90
+ FProperty* Property = *PropIt;
91
+ if (Property && Property->HasAnyPropertyFlags(CPF_BlueprintVisible))
92
+ {
93
+ TSharedPtr<FJsonValue> PropValue = SerializeObjectProperty(Object, Property);
94
+ if (PropValue.IsValid())
95
+ {
96
+ JsonObject->SetField(Property->GetName(), PropValue);
97
+ }
98
+ }
99
+ }
100
+
101
+ return JsonObject;
102
+ }
103
+
104
+ TSharedPtr<FJsonValue> FMCPJsonSerializer::SerializePropertyValue(const void* Value, FProperty* Property)
105
+ {
106
+ if (!Property || !Value)
107
+ {
108
+ return MakeShared<FJsonValueNull>();
109
+ }
110
+
111
+ if (FStrProperty* StrProp = CastField<FStrProperty>(Property))
112
+ {
113
+ return MakeShared<FJsonValueString>(StrProp->GetPropertyValue(Value));
114
+ }
115
+ else if (FNameProperty* NameProp = CastField<FNameProperty>(Property))
116
+ {
117
+ return MakeShared<FJsonValueString>(NameProp->GetPropertyValue(Value).ToString());
118
+ }
119
+ else if (FTextProperty* TextProp = CastField<FTextProperty>(Property))
120
+ {
121
+ return MakeShared<FJsonValueString>(TextProp->GetPropertyValue(Value).ToString());
122
+ }
123
+ else if (FBoolProperty* BoolProp = CastField<FBoolProperty>(Property))
124
+ {
125
+ return MakeShared<FJsonValueBoolean>(BoolProp->GetPropertyValue(Value));
126
+ }
127
+ else if (FIntProperty* IntProp = CastField<FIntProperty>(Property))
128
+ {
129
+ return MakeShared<FJsonValueNumber>(IntProp->GetPropertyValue(Value));
130
+ }
131
+ else if (FInt64Property* Int64Prop = CastField<FInt64Property>(Property))
132
+ {
133
+ return MakeShared<FJsonValueNumber>(Int64Prop->GetPropertyValue(Value));
134
+ }
135
+ else if (FFloatProperty* FloatProp = CastField<FFloatProperty>(Property))
136
+ {
137
+ return MakeShared<FJsonValueNumber>(FloatProp->GetPropertyValue(Value));
138
+ }
139
+ else if (FDoubleProperty* DoubleProp = CastField<FDoubleProperty>(Property))
140
+ {
141
+ return MakeShared<FJsonValueNumber>(DoubleProp->GetPropertyValue(Value));
142
+ }
143
+ else if (FStructProperty* StructProp = CastField<FStructProperty>(Property))
144
+ {
145
+ if (StructProp->Struct == TBaseStructure<FVector>::Get())
146
+ {
147
+ return SerializeVector(*static_cast<const FVector*>(Value));
148
+ }
149
+ else if (StructProp->Struct == TBaseStructure<FRotator>::Get())
150
+ {
151
+ return SerializeRotator(*static_cast<const FRotator*>(Value));
152
+ }
153
+ else if (StructProp->Struct == TBaseStructure<FTransform>::Get())
154
+ {
155
+ return SerializeTransform(*static_cast<const FTransform*>(Value));
156
+ }
157
+ else if (StructProp->Struct == TBaseStructure<FLinearColor>::Get())
158
+ {
159
+ return SerializeLinearColor(*static_cast<const FLinearColor*>(Value));
160
+ }
161
+ }
162
+ else if (FArrayProperty* ArrayProp = CastField<FArrayProperty>(Property))
163
+ {
164
+ TArray<TSharedPtr<FJsonValue>> JsonArray;
165
+ FScriptArrayHelper ArrayHelper(ArrayProp, Value);
166
+ for (int32 i = 0; i < ArrayHelper.Num(); ++i)
167
+ {
168
+ const void* ItemValue = ArrayHelper.GetRawPtr(i);
169
+ TSharedPtr<FJsonValue> ItemJson = SerializePropertyValue(ItemValue, ArrayProp->Inner);
170
+ if (ItemJson.IsValid())
171
+ {
172
+ JsonArray.Add(ItemJson);
173
+ }
174
+ }
175
+ return MakeShared<FJsonValueArray>(JsonArray);
176
+ }
177
+
178
+ // Fallback: convert to string - use property name as fallback
179
+ FString StringValue = FString::Printf(TEXT("(%s)"), *Property->GetName());
180
+ return MakeShared<FJsonValueString>(StringValue);
181
+ }
@@ -0,0 +1,42 @@
1
+ #pragma once
2
+
3
+ #include "CoreMinimal.h"
4
+ #include "Dom/JsonValue.h"
5
+ #include "Dom/JsonObject.h"
6
+ #include "UObject/UnrealType.h"
7
+
8
+ class FMCPJsonSerializer
9
+ {
10
+ public:
11
+ // Serialize UE type to JSON value
12
+ static TSharedPtr<FJsonValue> SerializeValue(const void* Value, FProperty* Property);
13
+
14
+ // Serialize FVector to JSON
15
+ static TSharedPtr<FJsonValue> SerializeVector(const FVector& Vector);
16
+
17
+ // Serialize FRotator to JSON
18
+ static TSharedPtr<FJsonValue> SerializeRotator(const FRotator& Rotator);
19
+
20
+ // Serialize FTransform to JSON
21
+ static TSharedPtr<FJsonValue> SerializeTransform(const FTransform& Transform);
22
+
23
+ // Serialize FLinearColor to JSON
24
+ static TSharedPtr<FJsonValue> SerializeLinearColor(const FLinearColor& Color);
25
+
26
+ // Serialize FString to JSON
27
+ static TSharedPtr<FJsonValue> SerializeString(const FString& String);
28
+
29
+ // Serialize TArray to JSON
30
+ template<typename T>
31
+ static TSharedPtr<FJsonValue> SerializeArray(const TArray<T>& Array);
32
+
33
+ // Serialize UObject property to JSON
34
+ static TSharedPtr<FJsonValue> SerializeObjectProperty(UObject* Object, FProperty* Property);
35
+
36
+ // Serialize UObject to JSON (basic properties)
37
+ static TSharedPtr<FJsonObject> SerializeObject(UObject* Object);
38
+
39
+ private:
40
+ // Helper to serialize property value
41
+ static TSharedPtr<FJsonValue> SerializePropertyValue(const void* Value, FProperty* Property);
42
+ };
@@ -0,0 +1,39 @@
1
+ #include "UE_MCP_BridgeModule.h"
2
+ #include "Modules/ModuleManager.h"
3
+ #include "BridgeServer.h"
4
+ #include "Handlers/DialogHandlers.h"
5
+ #include "Misc/ConfigCacheIni.h"
6
+
7
+ DEFINE_LOG_CATEGORY(LogMCPBridge);
8
+ IMPLEMENT_MODULE(FUE_MCP_BridgeModule, UE_MCP_Bridge)
9
+
10
+ static TSharedPtr<FMCPBridgeServer> G_BridgeServer;
11
+
12
+ void FUE_MCP_BridgeModule::StartupModule()
13
+ {
14
+ // Create and start bridge server
15
+ G_BridgeServer = MakeShared<FMCPBridgeServer>(9877);
16
+ FDialogHandlers::InstallDialogHook();
17
+
18
+ if (G_BridgeServer->Start())
19
+ {
20
+ UE_LOG(LogMCPBridge, Log, TEXT("[UE-MCP] Bridge server started on port 9877"));
21
+ }
22
+ else
23
+ {
24
+ UE_LOG(LogMCPBridge, Warning, TEXT("[UE-MCP] Failed to start bridge server"));
25
+ }
26
+ }
27
+
28
+ void FUE_MCP_BridgeModule::ShutdownModule()
29
+ {
30
+ // Stop bridge server
31
+ FDialogHandlers::RemoveDialogHook();
32
+
33
+ if (G_BridgeServer.IsValid())
34
+ {
35
+ G_BridgeServer->Shutdown();
36
+ G_BridgeServer.Reset();
37
+ UE_LOG(LogMCPBridge, Log, TEXT("[UE-MCP] Bridge server stopped"));
38
+ }
39
+ }
@@ -0,0 +1,14 @@
1
+ #pragma once
2
+
3
+ #include "CoreMinimal.h"
4
+ #include "Modules/ModuleManager.h"
5
+
6
+ DECLARE_LOG_CATEGORY_EXTERN(LogMCPBridge, Log, All);
7
+
8
+ class FUE_MCP_BridgeModule : public IModuleInterface
9
+ {
10
+ public:
11
+ /** IModuleInterface implementation */
12
+ virtual void StartupModule() override;
13
+ virtual void ShutdownModule() override;
14
+ };
@@ -0,0 +1,87 @@
1
+ using UnrealBuildTool;
2
+
3
+ public class UE_MCP_Bridge : ModuleRules
4
+ {
5
+ public UE_MCP_Bridge(ReadOnlyTargetRules Target) : base(Target)
6
+ {
7
+ PCHUsage = ModuleRules.PCHUsageMode.UseExplicitOrSharedPCHs;
8
+
9
+ PublicIncludePaths.AddRange(
10
+ new string[] {
11
+ }
12
+ );
13
+
14
+ PrivateIncludePaths.AddRange(
15
+ new string[] {
16
+ }
17
+ );
18
+
19
+ PublicDependencyModuleNames.AddRange(
20
+ new string[]
21
+ {
22
+ "Core",
23
+ "CoreUObject",
24
+ "Engine",
25
+ "Json",
26
+ "JsonUtilities",
27
+ "GameplayTags",
28
+ }
29
+ );
30
+
31
+ PrivateDependencyModuleNames.AddRange(
32
+ new string[]
33
+ {
34
+ "AIModule",
35
+ "AnimationEditor",
36
+ "AssetRegistry",
37
+ "AssetTools",
38
+ "AudioEditor",
39
+ "BlueprintGraph",
40
+ "Blutility",
41
+ "ContentBrowser",
42
+ "DataValidation",
43
+ "EditorScriptingUtilities",
44
+ "EditorStyle",
45
+ "EditorSubsystem",
46
+ "EditorWidgets",
47
+ "EnhancedInput",
48
+ "Foliage",
49
+ "GameplayAbilities",
50
+ "GameplayTasks",
51
+ "HTTP",
52
+ "InputCore",
53
+ "Kismet",
54
+ "KismetCompiler",
55
+ "Landscape",
56
+ "LevelEditor",
57
+ "LevelSequence",
58
+ "LiveCoding",
59
+ "MaterialEditor",
60
+ "MovieScene",
61
+ "MovieSceneTracks",
62
+ "NavigationSystem",
63
+ "Niagara",
64
+ "NiagaraEditor",
65
+ "PCG",
66
+ "PropertyEditor",
67
+ "PythonScriptPlugin",
68
+ "Sequencer",
69
+ "Slate",
70
+ "SlateCore",
71
+ "SubobjectDataInterface",
72
+ "ToolMenus",
73
+ "UMG",
74
+ "UMGEditor",
75
+ "UnrealEd",
76
+ "WebSockets",
77
+ "WorkspaceMenuStructure",
78
+ }
79
+ );
80
+
81
+ DynamicallyLoadedModuleNames.AddRange(
82
+ new string[]
83
+ {
84
+ }
85
+ );
86
+ }
87
+ }
@@ -0,0 +1,55 @@
1
+ {
2
+ "FileVersion": 3,
3
+ "Version": 1,
4
+ "VersionName": "0.3.0",
5
+ "FriendlyName": "UE MCP Bridge",
6
+ "Description": "C++ WebSocket bridge for UE-MCP, providing 185+ editor tools via MCP protocol",
7
+ "Category": "Developer Tools",
8
+ "CreatedBy": "UE-MCP",
9
+ "CreatedByURL": "",
10
+ "DocsURL": "",
11
+ "MarketplaceURL": "",
12
+ "SupportURL": "",
13
+ "EnabledByDefault": true,
14
+ "CanContainContent": false,
15
+ "IsBetaVersion": false,
16
+ "IsExperimentalVersion": false,
17
+ "Installed": false,
18
+ "Modules": [
19
+ {
20
+ "Name": "UE_MCP_Bridge",
21
+ "Type": "Editor",
22
+ "LoadingPhase": "Default"
23
+ }
24
+ ],
25
+ "Plugins": [
26
+ {
27
+ "Name": "PythonScriptPlugin",
28
+ "Enabled": true
29
+ },
30
+ {
31
+ "Name": "DataValidation",
32
+ "Enabled": true
33
+ },
34
+ {
35
+ "Name": "EditorScriptingUtilities",
36
+ "Enabled": true
37
+ },
38
+ {
39
+ "Name": "EnhancedInput",
40
+ "Enabled": true
41
+ },
42
+ {
43
+ "Name": "GameplayAbilities",
44
+ "Enabled": true
45
+ },
46
+ {
47
+ "Name": "Niagara",
48
+ "Enabled": true
49
+ },
50
+ {
51
+ "Name": "PCG",
52
+ "Enabled": true
53
+ }
54
+ ]
55
+ }