ue-mcp 0.5.1 → 0.5.2

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/README.md CHANGED
@@ -83,14 +83,21 @@ If you prefer to configure manually, add to your MCP client config:
83
83
  | **Editor** | Console, Python, PIE, viewport, sequencer, build pipeline, logs |
84
84
  | **Reflection** | Class/struct/enum introspection, gameplay tags |
85
85
 
86
- ## Supported Versions
86
+ ## Supported Platforms
87
87
 
88
- Tested with UE 5.4–5.7. Requires `PythonScriptPlugin` (ships with UE 4.26+).
88
+ - **Windows** UE 5.4–5.7
89
+ - **Linux** — UE 5.6+ (contributed by [@robinduckett](https://github.com/robinduckett))
90
+
91
+ Requires `PythonScriptPlugin` (ships with UE 4.26+).
89
92
 
90
93
  ## Contributing
91
94
 
92
95
  Issues and pull requests welcome. If an AI agent had to fall back to `execute_python` during your session, it will offer to submit structured feedback automatically — this helps us prioritize which native handlers to add next.
93
96
 
97
+ ### Contributors
98
+
99
+ - [@robinduckett](https://github.com/robinduckett) — Linux platform support ([#96](https://github.com/db-lyon/ue-mcp/pull/96))
100
+
94
101
  ## License
95
102
 
96
103
  MIT — see [LICENSE](LICENSE).
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "ue-mcp",
3
- "version": "0.5.1",
3
+ "version": "0.5.2",
4
4
  "description": "Unreal Engine MCP server — 19 tools, 300+ actions for AI-driven editor control",
5
5
  "type": "module",
6
6
  "main": "dist/index.js",
@@ -40,6 +40,7 @@
40
40
  #elif PLATFORM_LINUX || PLATFORM_MAC
41
41
  #include <sys/socket.h>
42
42
  #include <netinet/in.h>
43
+ #include <netinet/tcp.h>
43
44
  #include <arpa/inet.h>
44
45
  #include <unistd.h>
45
46
  #include <sys/select.h>
@@ -551,10 +552,10 @@ FString FMCPBridgeServer::CreateWebSocketAcceptKey(const FString& ClientKey)
551
552
  FString MagicString = TEXT("258EAFA5-E914-47DA-95CA-C5AB0DC85B11");
552
553
  FString Combined = ClientKey + MagicString;
553
554
 
554
- // Compute SHA1 hash (20 bytes) using Windows CryptoAPI
555
+ // Compute SHA1 hash (20 bytes)
555
556
  FTCHARToUTF8 UTF8String(*Combined);
556
557
  uint8 HashBytes[20];
557
-
558
+
558
559
  #if PLATFORM_WINDOWS
559
560
  HCRYPTPROV hProv = 0;
560
561
  HCRYPTHASH hHash = 0;
@@ -570,13 +571,11 @@ FString FMCPBridgeServer::CreateWebSocketAcceptKey(const FString& ClientKey)
570
571
  CryptReleaseContext(hProv, 0);
571
572
  }
572
573
  #else
573
- // Fallback: use a simple hash (not secure, but works for WebSocket handshake)
574
- uint32 Hash = 0;
575
- for (int32 i = 0; i < UTF8String.Length(); ++i)
576
- {
577
- Hash = Hash * 31 + UTF8String.Get()[i];
578
- }
579
- FMemory::Memcpy(HashBytes, &Hash, 20);
574
+ // UE's cross-platform SHA1
575
+ FSHA1 Sha1;
576
+ Sha1.Update((const uint8*)UTF8String.Get(), UTF8String.Length());
577
+ Sha1.Final();
578
+ Sha1.GetHash(HashBytes);
580
579
  #endif
581
580
 
582
581
  // Base64 encode
@@ -1,5 +1,5 @@
1
1
  #include "HandlerRegistry.h"
2
- #include "HAL/PlatformFilemanager.h"
2
+ #include "HAL/PlatformFileManager.h"
3
3
  #include "Misc/FileHelper.h"
4
4
  #include "Misc/Paths.h"
5
5
 
@@ -34,7 +34,9 @@
34
34
  #include "GameFramework/Actor.h"
35
35
  #include "EditorValidatorSubsystem.h"
36
36
  #include "GenericPlatform/GenericPlatformCrashContext.h"
37
+ #if PLATFORM_WINDOWS
37
38
  #include "ILiveCodingModule.h"
39
+ #endif
38
40
  #include "LevelEditorSubsystem.h"
39
41
  #include "Subsystems/AssetEditorSubsystem.h"
40
42
  #include "DesktopPlatformModule.h"
@@ -1130,6 +1132,7 @@ TSharedPtr<FJsonValue> FEditorHandlers::FocusViewportOnActor(const TSharedPtr<FJ
1130
1132
 
1131
1133
  TSharedPtr<FJsonValue> FEditorHandlers::HotReload(const TSharedPtr<FJsonObject>& Params)
1132
1134
  {
1135
+ #if PLATFORM_WINDOWS
1133
1136
  ILiveCodingModule* LiveCoding = FModuleManager::GetModulePtr<ILiveCodingModule>(LIVE_CODING_MODULE_NAME);
1134
1137
  if (LiveCoding && LiveCoding->IsEnabledForSession())
1135
1138
  {
@@ -1147,8 +1150,9 @@ TSharedPtr<FJsonValue> FEditorHandlers::HotReload(const TSharedPtr<FJsonObject>&
1147
1150
  return MCPResult(Result);
1148
1151
  }
1149
1152
  else
1153
+ #endif
1150
1154
  {
1151
- // Live Coding not available - fall back to console command
1155
+ // Live Coding not available (or not on Windows) - fall back to console command
1152
1156
  UWorld* World = GetEditorWorld();
1153
1157
  if (World)
1154
1158
  {
@@ -13,7 +13,7 @@
13
13
  #include "Dom/JsonObject.h"
14
14
  #include "Dom/JsonValue.h"
15
15
  #include "JsonSerializer.h"
16
- #include "HAL/PlatformFilemanager.h"
16
+ #include "HAL/PlatformFileManager.h"
17
17
  #include "Misc/FileHelper.h"
18
18
  #include "Misc/Paths.h"
19
19
 
@@ -6,16 +6,6 @@ public class UE_MCP_Bridge : ModuleRules
6
6
  {
7
7
  PCHUsage = ModuleRules.PCHUsageMode.UseExplicitOrSharedPCHs;
8
8
 
9
- PublicIncludePaths.AddRange(
10
- new string[] {
11
- }
12
- );
13
-
14
- PrivateIncludePaths.AddRange(
15
- new string[] {
16
- }
17
- );
18
-
19
9
  PublicDependencyModuleNames.AddRange(
20
10
  new string[]
21
11
  {
@@ -40,6 +30,8 @@ public class UE_MCP_Bridge : ModuleRules
40
30
  "BlueprintGraph",
41
31
  "Blutility",
42
32
  "ContentBrowser",
33
+ "ControlRig",
34
+ "ControlRigDeveloper",
43
35
  "DataValidation",
44
36
  "EditorScriptingUtilities",
45
37
  "EditorStyle",
@@ -49,19 +41,16 @@ public class UE_MCP_Bridge : ModuleRules
49
41
  "Foliage",
50
42
  "GameplayAbilities",
51
43
  "GameplayTasks",
52
- "ControlRig",
53
- "ControlRigDeveloper",
54
44
  "HTTP",
55
45
  "IKRig",
56
- "IKRigEditor",
57
46
  "IKRigDeveloper",
47
+ "IKRigEditor",
58
48
  "InputCore",
59
49
  "Kismet",
60
50
  "KismetCompiler",
61
51
  "Landscape",
62
52
  "LevelEditor",
63
53
  "LevelSequence",
64
- "LiveCoding",
65
54
  "MaterialEditor",
66
55
  "MovieScene",
67
56
  "MovieSceneTracks",
@@ -84,10 +73,10 @@ public class UE_MCP_Bridge : ModuleRules
84
73
  }
85
74
  );
86
75
 
87
- DynamicallyLoadedModuleNames.AddRange(
88
- new string[]
89
- {
90
- }
91
- );
76
+ // LiveCoding is Windows-only (Developer/Windows/LiveCoding)
77
+ if (Target.Platform == UnrealTargetPlatform.Win64)
78
+ {
79
+ PrivateDependencyModuleNames.Add("LiveCoding");
80
+ }
92
81
  }
93
82
  }