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,81 @@
1
+ #pragma once
2
+
3
+ #include "CoreMinimal.h"
4
+ #include "Dom/JsonValue.h"
5
+ #include "Dom/JsonObject.h"
6
+ #include "HandlerRegistry.h"
7
+ #include "GameThreadExecutor.h"
8
+ #include "HAL/Runnable.h"
9
+ #include "HAL/RunnableThread.h"
10
+ #include "HAL/ThreadSafeBool.h"
11
+ #include "Containers/Queue.h"
12
+
13
+ #if PLATFORM_WINDOWS
14
+ #include "Windows/AllowWindowsPlatformTypes.h"
15
+ #include <winsock2.h>
16
+ #include "Windows/HideWindowsPlatformTypes.h"
17
+ #endif
18
+
19
+ class FMCPBridgeServer : public FRunnable
20
+ {
21
+ public:
22
+ FMCPBridgeServer(int32 Port = 9877);
23
+ ~FMCPBridgeServer();
24
+
25
+ // Start the server
26
+ bool Start();
27
+
28
+ // FRunnable interface
29
+ virtual bool Init() override;
30
+ virtual uint32 Run() override;
31
+ virtual void Stop() override;
32
+ virtual void Exit() override;
33
+
34
+ // Public stop method (calls FRunnable::Stop)
35
+ void Shutdown();
36
+
37
+ // Get handler registry
38
+ FMCPHandlerRegistry& GetHandlerRegistry() { return HandlerRegistry; }
39
+
40
+ // Process a JSON-RPC message
41
+ FString ProcessMessage(const FString& Message);
42
+
43
+ private:
44
+ // Server port
45
+ int32 ServerPort;
46
+
47
+ // Thread management
48
+ FRunnableThread* ServerThread;
49
+ FThreadSafeBool bShouldStop;
50
+ FThreadSafeBool bIsRunning;
51
+
52
+ // Handler registry
53
+ FMCPHandlerRegistry HandlerRegistry;
54
+
55
+ // Game thread executor
56
+ FMCPGameThreadExecutor GameThreadExecutor;
57
+
58
+ // JSON-RPC processing
59
+ TSharedPtr<FJsonObject> ParseJsonRpcRequest(const FString& Message);
60
+ FString CreateJsonRpcResponse(const TSharedPtr<FJsonObject>& Request, const TSharedPtr<FJsonValue>& Result);
61
+ FString CreateJsonRpcError(const TSharedPtr<FJsonObject>& Request, int32 ErrorCode, const FString& ErrorMessage);
62
+
63
+ // WebSocket connection handling
64
+ #if PLATFORM_WINDOWS
65
+ void HandleWebSocketConnection(SOCKET ClientSocketFD);
66
+ FString PerformWebSocketHandshake(SOCKET ClientSocketFD);
67
+ void ProcessWebSocketMessages(SOCKET ClientSocketFD);
68
+ FString ReadHttpRequest(SOCKET SocketFD);
69
+ #else
70
+ void HandleWebSocketConnection(int32 ClientSocketFD);
71
+ FString PerformWebSocketHandshake(int32 ClientSocketFD);
72
+ void ProcessWebSocketMessages(int32 ClientSocketFD);
73
+ FString ReadHttpRequest(int32 SocketFD);
74
+ #endif
75
+ FString CreateWebSocketAcceptKey(const FString& ClientKey);
76
+ TArray<uint8> CreateWebSocketFrame(const FString& Message);
77
+ FString ParseWebSocketFrame(const TArray<uint8>& Data);
78
+
79
+ // Server socket (will use platform-specific implementation)
80
+ void* ServerSocket;
81
+ };
@@ -0,0 +1,49 @@
1
+ #include "GameThreadExecutor.h"
2
+ #include "HAL/PlatformProcess.h"
3
+ #include "Async/Async.h"
4
+
5
+ FMCPGameThreadExecutor::FMCPGameThreadExecutor()
6
+ {
7
+ }
8
+
9
+ FMCPGameThreadExecutor::~FMCPGameThreadExecutor()
10
+ {
11
+ }
12
+
13
+ bool FMCPGameThreadExecutor::IsGameThread()
14
+ {
15
+ return IsInGameThread();
16
+ }
17
+
18
+ TSharedPtr<FJsonValue> FMCPGameThreadExecutor::ExecuteOnGameThread(FHandlerFunction Handler, const TSharedPtr<FJsonObject>& Params, float TimeoutSeconds)
19
+ {
20
+ if (IsGameThread())
21
+ {
22
+ // Already on game thread, execute directly
23
+ return Handler(Params);
24
+ }
25
+
26
+ // Execute on game thread via AsyncTask
27
+ TSharedPtr<TFuture<TSharedPtr<FJsonValue>>> Future = MakeShared<TFuture<TSharedPtr<FJsonValue>>>(
28
+ Async(EAsyncExecution::TaskGraphMainThread, [Handler, Params]() -> TSharedPtr<FJsonValue>
29
+ {
30
+ return Handler(Params);
31
+ })
32
+ );
33
+
34
+ // Wait for result with timeout
35
+ double StartTime = FPlatformTime::Seconds();
36
+ while (!Future->IsReady())
37
+ {
38
+ if (FPlatformTime::Seconds() - StartTime > TimeoutSeconds)
39
+ {
40
+ // Timeout
41
+ TSharedPtr<FJsonObject> ErrorObject = MakeShared<FJsonObject>();
42
+ ErrorObject->SetStringField(TEXT("error"), TEXT("Handler execution timed out"));
43
+ return MakeShared<FJsonValueObject>(ErrorObject);
44
+ }
45
+ FPlatformProcess::Sleep(0.01f); // 10ms sleep
46
+ }
47
+
48
+ return Future->Get();
49
+ }
@@ -0,0 +1,37 @@
1
+ #pragma once
2
+
3
+ #include "CoreMinimal.h"
4
+ #include "Dom/JsonValue.h"
5
+ #include "Dom/JsonObject.h"
6
+ #include "Async/Async.h"
7
+ #include "HAL/PlatformProcess.h"
8
+
9
+ class FMCPGameThreadExecutor
10
+ {
11
+ public:
12
+ // Handler function signature
13
+ using FHandlerFunction = TFunction<TSharedPtr<FJsonValue>(const TSharedPtr<FJsonObject>& Params)>;
14
+
15
+ FMCPGameThreadExecutor();
16
+ ~FMCPGameThreadExecutor();
17
+
18
+ // Execute handler on game thread with timeout
19
+ TSharedPtr<FJsonValue> ExecuteOnGameThread(FHandlerFunction Handler, const TSharedPtr<FJsonObject>& Params, float TimeoutSeconds = 30.0f);
20
+
21
+ // Check if we're on game thread
22
+ static bool IsGameThread();
23
+
24
+ private:
25
+ // Pending execution info
26
+ struct FPendingExecution
27
+ {
28
+ FHandlerFunction Handler;
29
+ TSharedPtr<FJsonObject> Params;
30
+ TSharedPtr<TFuture<TSharedPtr<FJsonValue>>> Future;
31
+ double StartTime;
32
+ float TimeoutSeconds;
33
+ };
34
+
35
+ TArray<FPendingExecution> PendingExecutions;
36
+ FCriticalSection ExecutionMutex;
37
+ };
@@ -0,0 +1,75 @@
1
+ #include "HandlerRegistry.h"
2
+ #include "HAL/PlatformFilemanager.h"
3
+ #include "Misc/FileHelper.h"
4
+ #include "Misc/Paths.h"
5
+
6
+ FMCPHandlerRegistry::FMCPHandlerRegistry()
7
+ {
8
+ }
9
+
10
+ FMCPHandlerRegistry::~FMCPHandlerRegistry()
11
+ {
12
+ Clear();
13
+ }
14
+
15
+ void FMCPHandlerRegistry::RegisterHandler(const FString& MethodName, FHandlerFunction Handler)
16
+ {
17
+ CppHandlers.Add(MethodName, Handler);
18
+ }
19
+
20
+ void FMCPHandlerRegistry::RegisterPythonHandler(const FString& MethodName, const FString& PythonScriptPath)
21
+ {
22
+ FPythonHandlerInfo Info;
23
+ Info.ScriptPath = PythonScriptPath;
24
+ Info.HandlerName = MethodName;
25
+ PythonHandlers.Add(MethodName, Info);
26
+ }
27
+
28
+ TSharedPtr<FJsonValue> FMCPHandlerRegistry::ExecuteHandler(const FString& MethodName, const TSharedPtr<FJsonObject>& Params)
29
+ {
30
+ // Try C++ handler first
31
+ if (CppHandlers.Contains(MethodName))
32
+ {
33
+ return CppHandlers[MethodName](Params);
34
+ }
35
+
36
+ // Try Python handler
37
+ if (PythonHandlers.Contains(MethodName))
38
+ {
39
+ return ExecutePythonHandler(MethodName, Params);
40
+ }
41
+
42
+ // Handler not found - return nullptr so BridgeServer sends "Unknown method" error
43
+ return nullptr;
44
+ }
45
+
46
+ bool FMCPHandlerRegistry::HasHandler(const FString& MethodName) const
47
+ {
48
+ return CppHandlers.Contains(MethodName) || PythonHandlers.Contains(MethodName);
49
+ }
50
+
51
+ TArray<FString> FMCPHandlerRegistry::GetHandlerNames() const
52
+ {
53
+ TArray<FString> Names;
54
+ CppHandlers.GetKeys(Names);
55
+
56
+ TArray<FString> PythonNames;
57
+ PythonHandlers.GetKeys(PythonNames);
58
+ Names.Append(PythonNames);
59
+
60
+ return Names;
61
+ }
62
+
63
+ void FMCPHandlerRegistry::Clear()
64
+ {
65
+ CppHandlers.Empty();
66
+ PythonHandlers.Empty();
67
+ }
68
+
69
+ TSharedPtr<FJsonValue> FMCPHandlerRegistry::ExecutePythonHandler(const FString& MethodName, const TSharedPtr<FJsonObject>& Params)
70
+ {
71
+ // TODO: Implement Python handler execution
72
+ // For now, return empty result
73
+ // Will be implemented when Python plugin system is added
74
+ return MakeShared<FJsonValueObject>(MakeShared<FJsonObject>());
75
+ }
@@ -0,0 +1,50 @@
1
+ #pragma once
2
+
3
+ #include "CoreMinimal.h"
4
+ #include "Dom/JsonValue.h"
5
+ #include "Dom/JsonObject.h"
6
+
7
+ class FMCPHandlerRegistry
8
+ {
9
+ public:
10
+ // Handler function signature: takes params JSON object, returns result JSON value
11
+ using FHandlerFunction = TFunction<TSharedPtr<FJsonValue>(const TSharedPtr<FJsonObject>& Params)>;
12
+
13
+ // Python handler info
14
+ struct FPythonHandlerInfo
15
+ {
16
+ FString ScriptPath;
17
+ FString HandlerName;
18
+ };
19
+
20
+ FMCPHandlerRegistry();
21
+ ~FMCPHandlerRegistry();
22
+
23
+ // Register a C++ handler
24
+ void RegisterHandler(const FString& MethodName, FHandlerFunction Handler);
25
+
26
+ // Register a Python handler
27
+ void RegisterPythonHandler(const FString& MethodName, const FString& PythonScriptPath);
28
+
29
+ // Execute a handler
30
+ TSharedPtr<FJsonValue> ExecuteHandler(const FString& MethodName, const TSharedPtr<FJsonObject>& Params);
31
+
32
+ // Check if handler exists
33
+ bool HasHandler(const FString& MethodName) const;
34
+
35
+ // Get all registered handler names
36
+ TArray<FString> GetHandlerNames() const;
37
+
38
+ // Clear all handlers
39
+ void Clear();
40
+
41
+ private:
42
+ // C++ handlers
43
+ TMap<FString, FHandlerFunction> CppHandlers;
44
+
45
+ // Python handlers
46
+ TMap<FString, FPythonHandlerInfo> PythonHandlers;
47
+
48
+ // Execute Python handler
49
+ TSharedPtr<FJsonValue> ExecutePythonHandler(const FString& MethodName, const TSharedPtr<FJsonObject>& Params);
50
+ };