ue-mcp 0.4.19 → 0.4.21

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.
@@ -16,6 +16,7 @@ export const blueprintTool = categoryTool("blueprint", "Blueprint reading, autho
16
16
  set_node_property: bp("set_node_property", (p) => ({ path: p.assetPath, graphName: p.graphName, nodeName: p.nodeName, propertyName: p.propertyName, value: p.value })),
17
17
  connect_pins: bp("connect_pins"),
18
18
  add_component: bp("add_component", (p) => ({ path: p.assetPath, componentClass: p.componentClass, componentName: p.componentName ?? p.componentClass })),
19
+ set_component_property: bp("set_component_property", (p) => ({ path: p.assetPath, componentName: p.componentName, propertyName: p.propertyName, value: p.value })),
19
20
  compile: bp("compile_blueprint", (p) => ({ path: p.assetPath })),
20
21
  list_node_types: bp("list_node_types"),
21
22
  search_node_types: bp("search_node_types"),
@@ -23,7 +24,7 @@ export const blueprintTool = categoryTool("blueprint", "Blueprint reading, autho
23
24
  add_interface: bp("add_blueprint_interface"),
24
25
  list_graphs: bp("list_blueprint_graphs", (p) => ({ path: p.assetPath })),
25
26
  add_event_dispatcher: bp("add_event_dispatcher"),
26
- }, `- read: Read full BP structure. Params: assetPath
27
+ }, `- read: Read BP structure incl. SCS components (name, class, mesh, materials, transform). Params: assetPath
27
28
  - list_variables: List variables. Params: assetPath
28
29
  - list_functions: List functions/graphs. Params: assetPath
29
30
  - list_graphs: List all graphs in a blueprint (EventGraph, AnimGraph, functions). Params: assetPath
@@ -39,6 +40,7 @@ export const blueprintTool = categoryTool("blueprint", "Blueprint reading, autho
39
40
  - set_node_property: Set node pin default or struct property (supports dot paths like "Node.IKBone.BoneName"). Params: assetPath, graphName, nodeName, propertyName, value
40
41
  - connect_pins: Wire nodes. Params: sourceNode, sourcePin, targetNode, targetPin, assetPath, graphName?
41
42
  - add_component: Add BP component. Params: assetPath, componentClass, componentName?
43
+ - set_component_property: Set property on SCS component template (supports dot paths, asset paths for object refs). Params: assetPath, componentName, propertyName, value
42
44
  - compile: Compile Blueprint. Params: assetPath
43
45
  - list_node_types: List node types. Params: category?, includeFunctions?
44
46
  - search_node_types: Search nodes. Params: query
@@ -1 +1 @@
1
- {"version":3,"file":"blueprint.js","sourceRoot":"","sources":["../../src/tools/blueprint.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"blueprint.js","sourceRoot":"","sources":["../../src/tools/blueprint.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "ue-mcp",
3
- "version": "0.4.19",
3
+ "version": "0.4.21",
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",
@@ -41,6 +41,15 @@
41
41
  #include "Kismet/KismetStringLibrary.h"
42
42
  #include "Kismet/KismetArrayLibrary.h"
43
43
 
44
+ // SCS component access
45
+ #include "Engine/SimpleConstructionScript.h"
46
+ #include "Engine/SCS_Node.h"
47
+ #include "Components/StaticMeshComponent.h"
48
+ #include "Components/SkeletalMeshComponent.h"
49
+ #include "Engine/StaticMesh.h"
50
+ #include "Engine/SkeletalMesh.h"
51
+ #include "EditorAssetLibrary.h"
52
+
44
53
  // Helper: find a UClass by short name (e.g. "AnimInstance" finds UAnimInstance)
45
54
  static UClass* FindClassByShortName(const FString& ClassName)
46
55
  {
@@ -83,6 +92,7 @@ void FBlueprintHandlers::RegisterHandlers(FMCPHandlerRegistry& Registry)
83
92
  Registry.RegisterHandler(TEXT("delete_node"), &DeleteNode);
84
93
  Registry.RegisterHandler(TEXT("set_node_property"), &SetNodeProperty);
85
94
  Registry.RegisterHandler(TEXT("list_blueprint_graphs"), &ListGraphs);
95
+ Registry.RegisterHandler(TEXT("set_component_property"), &SetComponentProperty);
86
96
  }
87
97
 
88
98
  UBlueprint* FBlueprintHandlers::LoadBlueprint(const FString& AssetPath)
@@ -330,6 +340,115 @@ TSharedPtr<FJsonValue> FBlueprintHandlers::ReadBlueprint(const TSharedPtr<FJsonO
330
340
  {
331
341
  Result->SetStringField(TEXT("parentClass"), Blueprint->ParentClass->GetName());
332
342
  }
343
+
344
+ // Enumerate SCS components
345
+ TArray<TSharedPtr<FJsonValue>> ComponentsArray;
346
+ if (USimpleConstructionScript* SCS = Blueprint->SimpleConstructionScript)
347
+ {
348
+ // Build child->parent map from the tree
349
+ TMap<USCS_Node*, USCS_Node*> ParentMap;
350
+ for (USCS_Node* Node : SCS->GetAllNodes())
351
+ {
352
+ if (!Node) continue;
353
+ for (USCS_Node* Child : Node->ChildNodes)
354
+ {
355
+ if (Child) ParentMap.Add(Child, Node);
356
+ }
357
+ }
358
+
359
+ for (USCS_Node* Node : SCS->GetAllNodes())
360
+ {
361
+ if (!Node || !Node->ComponentTemplate) continue;
362
+
363
+ UActorComponent* Template = Node->ComponentTemplate;
364
+ TSharedPtr<FJsonObject> CompObj = MakeShared<FJsonObject>();
365
+ CompObj->SetStringField(TEXT("name"), Node->GetVariableName().ToString());
366
+ CompObj->SetStringField(TEXT("class"), Template->GetClass()->GetName());
367
+
368
+ // Parent component
369
+ if (USCS_Node** ParentPtr = ParentMap.Find(Node))
370
+ {
371
+ CompObj->SetStringField(TEXT("parent"), (*ParentPtr)->GetVariableName().ToString());
372
+ }
373
+
374
+ // Transform for SceneComponents
375
+ if (USceneComponent* SceneComp = Cast<USceneComponent>(Template))
376
+ {
377
+ TSharedPtr<FJsonObject> Loc = MakeShared<FJsonObject>();
378
+ Loc->SetNumberField(TEXT("x"), SceneComp->GetRelativeLocation().X);
379
+ Loc->SetNumberField(TEXT("y"), SceneComp->GetRelativeLocation().Y);
380
+ Loc->SetNumberField(TEXT("z"), SceneComp->GetRelativeLocation().Z);
381
+ CompObj->SetObjectField(TEXT("relativeLocation"), Loc);
382
+
383
+ TSharedPtr<FJsonObject> Rot = MakeShared<FJsonObject>();
384
+ Rot->SetNumberField(TEXT("pitch"), SceneComp->GetRelativeRotation().Pitch);
385
+ Rot->SetNumberField(TEXT("yaw"), SceneComp->GetRelativeRotation().Yaw);
386
+ Rot->SetNumberField(TEXT("roll"), SceneComp->GetRelativeRotation().Roll);
387
+ CompObj->SetObjectField(TEXT("relativeRotation"), Rot);
388
+
389
+ TSharedPtr<FJsonObject> Scale = MakeShared<FJsonObject>();
390
+ Scale->SetNumberField(TEXT("x"), SceneComp->GetRelativeScale3D().X);
391
+ Scale->SetNumberField(TEXT("y"), SceneComp->GetRelativeScale3D().Y);
392
+ Scale->SetNumberField(TEXT("z"), SceneComp->GetRelativeScale3D().Z);
393
+ CompObj->SetObjectField(TEXT("relativeScale3D"), Scale);
394
+ }
395
+
396
+ // StaticMesh info
397
+ if (UStaticMeshComponent* SMC = Cast<UStaticMeshComponent>(Template))
398
+ {
399
+ if (UStaticMesh* Mesh = SMC->GetStaticMesh())
400
+ {
401
+ CompObj->SetStringField(TEXT("staticMesh"), Mesh->GetPathName());
402
+ }
403
+ // Material overrides
404
+ TArray<TSharedPtr<FJsonValue>> Mats;
405
+ for (int32 i = 0; i < SMC->GetNumMaterials(); i++)
406
+ {
407
+ if (UMaterialInterface* Mat = SMC->GetMaterial(i))
408
+ {
409
+ Mats.Add(MakeShared<FJsonValueString>(Mat->GetPathName()));
410
+ }
411
+ else
412
+ {
413
+ Mats.Add(MakeShared<FJsonValueNull>());
414
+ }
415
+ }
416
+ if (Mats.Num() > 0)
417
+ {
418
+ CompObj->SetArrayField(TEXT("materials"), Mats);
419
+ }
420
+ }
421
+
422
+ // SkeletalMesh info
423
+ if (USkeletalMeshComponent* SkMC = Cast<USkeletalMeshComponent>(Template))
424
+ {
425
+ if (USkeletalMesh* Mesh = SkMC->GetSkeletalMeshAsset())
426
+ {
427
+ CompObj->SetStringField(TEXT("skeletalMesh"), Mesh->GetPathName());
428
+ }
429
+ TArray<TSharedPtr<FJsonValue>> Mats;
430
+ for (int32 i = 0; i < SkMC->GetNumMaterials(); i++)
431
+ {
432
+ if (UMaterialInterface* Mat = SkMC->GetMaterial(i))
433
+ {
434
+ Mats.Add(MakeShared<FJsonValueString>(Mat->GetPathName()));
435
+ }
436
+ else
437
+ {
438
+ Mats.Add(MakeShared<FJsonValueNull>());
439
+ }
440
+ }
441
+ if (Mats.Num() > 0)
442
+ {
443
+ CompObj->SetArrayField(TEXT("materials"), Mats);
444
+ }
445
+ }
446
+
447
+ ComponentsArray.Add(MakeShared<FJsonValueObject>(CompObj));
448
+ }
449
+ }
450
+ Result->SetArrayField(TEXT("components"), ComponentsArray);
451
+
333
452
  Result->SetBoolField(TEXT("success"), true);
334
453
 
335
454
  return MakeShared<FJsonValueObject>(Result);
@@ -2204,3 +2323,191 @@ TSharedPtr<FJsonValue> FBlueprintHandlers::SetNodeProperty(const TSharedPtr<FJso
2204
2323
 
2205
2324
  return MakeShared<FJsonValueObject>(Result);
2206
2325
  }
2326
+
2327
+ // ---------------------------------------------------------------------------
2328
+ // set_component_property — Set a property on an SCS component template
2329
+ // Params: assetPath, componentName, propertyName, value
2330
+ // ---------------------------------------------------------------------------
2331
+ TSharedPtr<FJsonValue> FBlueprintHandlers::SetComponentProperty(const TSharedPtr<FJsonObject>& Params)
2332
+ {
2333
+ TSharedPtr<FJsonObject> Result = MakeShared<FJsonObject>();
2334
+
2335
+ FString AssetPath;
2336
+ if (!Params->TryGetStringField(TEXT("path"), AssetPath) && !Params->TryGetStringField(TEXT("assetPath"), AssetPath))
2337
+ {
2338
+ Result->SetStringField(TEXT("error"), TEXT("Missing 'assetPath' parameter"));
2339
+ Result->SetBoolField(TEXT("success"), false);
2340
+ return MakeShared<FJsonValueObject>(Result);
2341
+ }
2342
+
2343
+ FString ComponentName;
2344
+ if (!Params->TryGetStringField(TEXT("componentName"), ComponentName))
2345
+ {
2346
+ Result->SetStringField(TEXT("error"), TEXT("Missing 'componentName' parameter"));
2347
+ Result->SetBoolField(TEXT("success"), false);
2348
+ return MakeShared<FJsonValueObject>(Result);
2349
+ }
2350
+
2351
+ FString PropertyName;
2352
+ if (!Params->TryGetStringField(TEXT("propertyName"), PropertyName))
2353
+ {
2354
+ Result->SetStringField(TEXT("error"), TEXT("Missing 'propertyName' parameter"));
2355
+ Result->SetBoolField(TEXT("success"), false);
2356
+ return MakeShared<FJsonValueObject>(Result);
2357
+ }
2358
+
2359
+ FString Value;
2360
+ if (!Params->TryGetStringField(TEXT("value"), Value))
2361
+ {
2362
+ Result->SetStringField(TEXT("error"), TEXT("Missing 'value' parameter"));
2363
+ Result->SetBoolField(TEXT("success"), false);
2364
+ return MakeShared<FJsonValueObject>(Result);
2365
+ }
2366
+
2367
+ UBlueprint* Blueprint = LoadBlueprint(AssetPath);
2368
+ if (!Blueprint)
2369
+ {
2370
+ Result->SetStringField(TEXT("error"), FString::Printf(TEXT("Blueprint not found: %s"), *AssetPath));
2371
+ Result->SetBoolField(TEXT("success"), false);
2372
+ return MakeShared<FJsonValueObject>(Result);
2373
+ }
2374
+
2375
+ USimpleConstructionScript* SCS = Blueprint->SimpleConstructionScript;
2376
+ if (!SCS)
2377
+ {
2378
+ Result->SetStringField(TEXT("error"), TEXT("Blueprint has no SimpleConstructionScript (not an Actor blueprint?)"));
2379
+ Result->SetBoolField(TEXT("success"), false);
2380
+ return MakeShared<FJsonValueObject>(Result);
2381
+ }
2382
+
2383
+ // Find the SCS node by variable name or component template name
2384
+ USCS_Node* TargetNode = nullptr;
2385
+ for (USCS_Node* Node : SCS->GetAllNodes())
2386
+ {
2387
+ if (!Node || !Node->ComponentTemplate) continue;
2388
+ if (Node->GetVariableName().ToString() == ComponentName ||
2389
+ Node->ComponentTemplate->GetName() == ComponentName)
2390
+ {
2391
+ TargetNode = Node;
2392
+ break;
2393
+ }
2394
+ }
2395
+
2396
+ if (!TargetNode || !TargetNode->ComponentTemplate)
2397
+ {
2398
+ // List available component names for error message
2399
+ TArray<FString> Names;
2400
+ for (USCS_Node* Node : SCS->GetAllNodes())
2401
+ {
2402
+ if (Node && Node->ComponentTemplate)
2403
+ {
2404
+ Names.Add(Node->GetVariableName().ToString());
2405
+ }
2406
+ }
2407
+ Result->SetStringField(TEXT("error"), FString::Printf(
2408
+ TEXT("Component '%s' not found. Available: [%s]"),
2409
+ *ComponentName, *FString::Join(Names, TEXT(", "))));
2410
+ Result->SetBoolField(TEXT("success"), false);
2411
+ return MakeShared<FJsonValueObject>(Result);
2412
+ }
2413
+
2414
+ UActorComponent* Template = TargetNode->ComponentTemplate;
2415
+
2416
+ // Navigate dotted property paths (e.g. "RelativeLocation.X")
2417
+ TArray<FString> PathParts;
2418
+ PropertyName.ParseIntoArray(PathParts, TEXT("."));
2419
+
2420
+ UStruct* CurrentStruct = Template->GetClass();
2421
+ void* CurrentContainer = Template;
2422
+ FProperty* FinalProp = nullptr;
2423
+
2424
+ for (int32 i = 0; i < PathParts.Num(); i++)
2425
+ {
2426
+ FProperty* Prop = CurrentStruct->FindPropertyByName(FName(*PathParts[i]));
2427
+ if (!Prop) break;
2428
+
2429
+ if (i < PathParts.Num() - 1)
2430
+ {
2431
+ FStructProperty* StructProp = CastField<FStructProperty>(Prop);
2432
+ if (!StructProp) break;
2433
+ CurrentContainer = StructProp->ContainerPtrToValuePtr<void>(CurrentContainer);
2434
+ CurrentStruct = StructProp->Struct;
2435
+ }
2436
+ else
2437
+ {
2438
+ FinalProp = Prop;
2439
+ }
2440
+ }
2441
+
2442
+ if (!FinalProp)
2443
+ {
2444
+ // List available properties for error message
2445
+ TArray<FString> PropNames;
2446
+ for (TFieldIterator<FProperty> It(Template->GetClass()); It; ++It)
2447
+ {
2448
+ PropNames.Add(It->GetName());
2449
+ }
2450
+ Result->SetStringField(TEXT("error"), FString::Printf(
2451
+ TEXT("Property '%s' not found on %s. Properties: [%s]"),
2452
+ *PropertyName, *Template->GetClass()->GetName(),
2453
+ *FString::Join(PropNames, TEXT(", "))));
2454
+ Result->SetBoolField(TEXT("success"), false);
2455
+ return MakeShared<FJsonValueObject>(Result);
2456
+ }
2457
+
2458
+ // For object reference properties, try loading the asset by path first
2459
+ void* ValuePtr = FinalProp->ContainerPtrToValuePtr<void>(CurrentContainer);
2460
+
2461
+ if (FObjectPropertyBase* ObjProp = CastField<FObjectPropertyBase>(FinalProp))
2462
+ {
2463
+ UObject* LoadedObj = LoadObject<UObject>(nullptr, *Value);
2464
+ if (!LoadedObj)
2465
+ {
2466
+ // Try with common prefixes stripped
2467
+ LoadedObj = LoadObject<UObject>(nullptr, *Value);
2468
+ }
2469
+ if (LoadedObj)
2470
+ {
2471
+ ObjProp->SetObjectPropertyValue(ValuePtr, LoadedObj);
2472
+ }
2473
+ else
2474
+ {
2475
+ Result->SetStringField(TEXT("error"), FString::Printf(
2476
+ TEXT("Could not load object at '%s' for property '%s'"), *Value, *PropertyName));
2477
+ Result->SetBoolField(TEXT("success"), false);
2478
+ return MakeShared<FJsonValueObject>(Result);
2479
+ }
2480
+ }
2481
+ else if (FSoftObjectProperty* SoftProp = CastField<FSoftObjectProperty>(FinalProp))
2482
+ {
2483
+ FSoftObjectPath SoftPath(Value);
2484
+ SoftProp->SetPropertyValue(ValuePtr, FSoftObjectPtr(SoftPath));
2485
+ }
2486
+ else
2487
+ {
2488
+ // Generic: use ImportText for value types (int, float, bool, FVector, FName, etc.)
2489
+ FinalProp->ImportText_Direct(*Value, ValuePtr, nullptr, PPF_None);
2490
+ }
2491
+
2492
+ Template->PostEditChange();
2493
+
2494
+ // Compile and save
2495
+ FKismetEditorUtilities::CompileBlueprint(Blueprint);
2496
+ UPackage* Package = Blueprint->GetOutermost();
2497
+ if (Package)
2498
+ {
2499
+ Package->MarkPackageDirty();
2500
+ FString PackageFileName = FPackageName::LongPackageNameToFilename(Package->GetName(), FPackageName::GetAssetPackageExtension());
2501
+ FSavePackageArgs SaveArgs;
2502
+ SaveArgs.TopLevelFlags = RF_Standalone;
2503
+ UPackage::SavePackage(Package, nullptr, *PackageFileName, SaveArgs);
2504
+ }
2505
+
2506
+ Result->SetStringField(TEXT("path"), AssetPath);
2507
+ Result->SetStringField(TEXT("componentName"), ComponentName);
2508
+ Result->SetStringField(TEXT("propertyName"), PropertyName);
2509
+ Result->SetStringField(TEXT("value"), Value);
2510
+ Result->SetBoolField(TEXT("success"), true);
2511
+
2512
+ return MakeShared<FJsonValueObject>(Result);
2513
+ }
@@ -36,6 +36,7 @@ private:
36
36
  static TSharedPtr<FJsonValue> DeleteNode(const TSharedPtr<FJsonObject>& Params);
37
37
  static TSharedPtr<FJsonValue> SetNodeProperty(const TSharedPtr<FJsonObject>& Params);
38
38
  static TSharedPtr<FJsonValue> ListGraphs(const TSharedPtr<FJsonObject>& Params);
39
+ static TSharedPtr<FJsonValue> SetComponentProperty(const TSharedPtr<FJsonObject>& Params);
39
40
 
40
41
  // Helper functions
41
42
  static class UBlueprint* LoadBlueprint(const FString& AssetPath);