ue-mcp 1.4.3 → 1.4.4

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.
@@ -34,6 +34,6 @@
34
34
  },
35
35
  "nativeToolsets": 52,
36
36
  "nativeToolActions": 830,
37
- "generatedAt": "2026-10-13T15:13:53.525Z",
38
- "version": "1.4.3"
37
+ "generatedAt": "2026-10-15T03:37:25.491Z",
38
+ "version": "1.4.4"
39
39
  }
@@ -31,7 +31,7 @@ export const materialTool = categoryTool("material", "Materials: create, read, p
31
31
  set_domain: specBp("mutate", "Set material domain. Required for post-process / decal / UI authoring (#299/#356).", "set_material_domain"),
32
32
  set_base_color: specBp("mutate", "Set base color.", "set_material_base_color"),
33
33
  connect_texture: specBp("mutate", "Connect texture to property.", "connect_texture_to_material"),
34
- add_expression: specBp("mutate", "Add expression node (#318).", "add_material_expression"),
34
+ add_expression: specBp("mutate", "Add expression node (#318). Returns expressionIndex, the node's position as set_expression_value and set_custom_expression take it, and expressionName, its unique engine name.", "add_material_expression"),
35
35
  connect_expressions: specBp("mutate", "Wire two expressions.", "connect_material_expressions"),
36
36
  connect_to_property: specBp("mutate", "Wire expression to material output.", "connect_to_material_property"),
37
37
  list_expressions: specBp("read", "List expression nodes, in the material's own stored order, which is what nodeId indexes into. Set includeInputs to include each node's input wiring (default false). Paged with cursor/limit.", "list_material_expressions"),
@@ -1 +1 @@
1
- {"version":3,"file":"material.js","sourceRoot":"","sources":["../../src/tools/material.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"material.js","sourceRoot":"","sources":["../../src/tools/material.ts"],"names":[],"mappings":"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"}
@@ -5791,9 +5791,12 @@ tasks:
5791
5791
  class_path: material.add_expression
5792
5792
  group: material
5793
5793
  description: >-
5794
- Add expression node (#318). Params: materialPath (or path, or assetPath),
5795
- expressionType, name? (or expressionName), parameterName?, group?,
5796
- sortPriority?, defaultValue?, value?, channels?, positionX?, positionY?
5794
+ Add expression node (#318). Returns expressionIndex, the node's position
5795
+ as set_expression_value and set_custom_expression take it, and
5796
+ expressionName, its unique engine name. Params: materialPath (or path, or
5797
+ assetPath), expressionType, name? (or expressionName), parameterName?,
5798
+ group?, sortPriority?, defaultValue?, value?, channels?, positionX?,
5799
+ positionY?
5797
5800
  material.connect_expressions:
5798
5801
  class_path: material.connect_expressions
5799
5802
  group: material
@@ -17503,7 +17506,7 @@ flows:
17503
17506
  task: material.set_expression_value
17504
17507
  options:
17505
17508
  materialPath: /Game/Flows/Beacon/M_Pillar
17506
- expressionIndex: 0
17509
+ expressionIndex: ${steps.10.expressionIndex}
17507
17510
  value: 1
17508
17511
  12:
17509
17512
  task: material.connect_to_property
@@ -17521,7 +17524,7 @@ flows:
17521
17524
  task: material.set_expression_value
17522
17525
  options:
17523
17526
  materialPath: /Game/Flows/Beacon/M_Pillar
17524
- expressionIndex: 1
17527
+ expressionIndex: ${steps.13.expressionIndex}
17525
17528
  value: 0.3
17526
17529
  15:
17527
17530
  task: material.connect_to_property
@@ -17572,7 +17575,7 @@ flows:
17572
17575
  task: material.set_expression_value
17573
17576
  options:
17574
17577
  materialPath: /Game/Flows/Beacon/M_Glow
17575
- expressionIndex: 1
17578
+ expressionIndex: ${steps.22.expressionIndex}
17576
17579
  value: 50
17577
17580
  24:
17578
17581
  task: material.add_expression
@@ -17745,6 +17748,7 @@ flows:
17745
17748
  rotation:
17746
17749
  pitch: -25
17747
17750
  yaw: -135
17751
+ roll: 0
17748
17752
  40:
17749
17753
  task: level.spawn_light
17750
17754
  options:
@@ -17852,6 +17856,7 @@ flows:
17852
17856
  rotation:
17853
17857
  pitch: -90
17854
17858
  yaw: 0
17859
+ roll: 0
17855
17860
  52:
17856
17861
  task: level.spawn_light
17857
17862
  options:
@@ -17898,6 +17903,7 @@ flows:
17898
17903
  rotation:
17899
17904
  pitch: -15
17900
17905
  yaw: 30
17906
+ roll: 0
17901
17907
  texture_bomb:
17902
17908
  description: >-
17903
17909
  Build a reusable MF_TextureBomb MaterialFunction (#491). Quantises UVs
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "ue-mcp",
3
- "version": "1.4.3",
3
+ "version": "1.4.4",
4
4
  "description": "Unreal Engine MCP server - 26 tools, 1975+ actions for AI-driven editor control",
5
5
  "type": "module",
6
6
  "main": "dist/index.js",
@@ -2067,13 +2067,15 @@ TSharedPtr<FJsonValue> FMaterialHandlers::AddMaterialExpression(const TSharedPtr
2067
2067
  FString SaveError;
2068
2068
  const bool bSaved = SaveAssetPackageChecked(Material, SaveError);
2069
2069
 
2070
- // Return the index as nodeId for use with connect_expressions and other operations
2071
- int32 NodeIndex = Material->GetExpressions().Num() - 1;
2070
+ // The node's position, as expressionIndex: the key and type set_expression_value,
2071
+ // set_custom_expression and read_graph take it under. nodeId is the same index as text.
2072
+ const int32 NodeIndex = Material->GetExpressions().IndexOfByKey(NewExpression);
2072
2073
 
2073
2074
  auto Result = MCPSuccess();
2074
2075
  MCPSetCreated(Result);
2075
2076
  Result->SetStringField(TEXT("expressionType"), ExpressionType);
2076
2077
  Result->SetStringField(TEXT("expressionClass"), NewExpression->GetClass()->GetName());
2078
+ Result->SetNumberField(TEXT("expressionIndex"), NodeIndex);
2077
2079
  Result->SetStringField(TEXT("nodeId"), FString::FromInt(NodeIndex));
2078
2080
  Result->SetStringField(TEXT("description"), NewExpression->GetDescription());
2079
2081
  Result->SetStringField(TEXT("materialPath"), Material->GetPathName());
@@ -3393,7 +3395,7 @@ TSharedPtr<FJsonValue> FMaterialHandlers::SetExpressionValue(const TSharedPtr<FJ
3393
3395
  // Name the call that produces the index rather than only the key that is
3394
3396
  // missing: this action has no name-based address, so a caller who does
3395
3397
  // not already hold an index has nowhere to go from "missing parameter".
3396
- return MCPError(TEXT("Missing required parameter 'expressionIndex'. This action addresses nodes by POSITION in the material's expression list and has no name form; material(list_expressions) reports that list in the same order (list_function_expressions for a MaterialFunction), and add_expression returns the new node's index as nodeId."));
3398
+ return MCPError(TEXT("Missing required parameter 'expressionIndex'. This action addresses nodes by POSITION in the material's expression list and has no name form; material(list_expressions) reports that list in the same order (list_function_expressions for a MaterialFunction), and add_expression returns the new node's index as expressionIndex."));
3397
3399
  }
3398
3400
 
3399
3401
  // #1138: a MaterialFunction graph (functionPath) is edited the same way.
@@ -3783,10 +3785,12 @@ UMaterialExpression* FMaterialHandlers::FindExpressionInList(TConstArrayView<TOb
3783
3785
  {
3784
3786
  if (ExpressionName.IsEmpty()) return nullptr;
3785
3787
 
3786
- // Try matching by description first (most specific)
3788
+ // Try matching by description or by Desc first (most specific). Desc is the
3789
+ // name add_expression stores and list_expressions reports as `name`; a
3790
+ // Constant's GetDescription is its value ("Constant (1)"), never that name.
3787
3791
  for (UMaterialExpression* Expression : Expressions)
3788
3792
  {
3789
- if (Expression && Expression->GetDescription() == ExpressionName)
3793
+ if (Expression && (Expression->GetDescription() == ExpressionName || Expression->Desc == ExpressionName))
3790
3794
  {
3791
3795
  return Expression;
3792
3796
  }
@@ -0,0 +1,52 @@
1
+ #if WITH_DEV_AUTOMATION_TESTS
2
+
3
+ #include "HandlerRegistry.h"
4
+ #include "Handlers/Material/MaterialHandlers.h"
5
+ #include "Materials/Material.h"
6
+ #include "Materials/MaterialExpressionConstant.h"
7
+ #include "Misc/AutomationTest.h"
8
+ #include "Misc/Guid.h"
9
+ #include "UObject/Package.h"
10
+ #include "UObject/StrongObjectPtr.h"
11
+
12
+ IMPLEMENT_SIMPLE_AUTOMATION_TEST(
13
+ FMaterialExpressionLookupByDescTest,
14
+ "UE.MCP.Material.ExpressionLookup.ByDesc",
15
+ EAutomationTestFlags::EditorContext | EAutomationTestFlags::EngineFilter)
16
+
17
+ // add_expression stores its `name` in Desc, and a Constant's GetDescription is
18
+ // its value, so a name lookup that skips Desc cannot find what it just created.
19
+ bool FMaterialExpressionLookupByDescTest::RunTest(const FString& Parameters)
20
+ {
21
+ UPackage* Package = CreatePackage(*FString::Printf(TEXT("/Temp/MCPLookup_%s"), *FGuid::NewGuid().ToString(EGuidFormats::Digits)));
22
+ TStrongObjectPtr<UMaterial> Material(NewObject<UMaterial>(Package, TEXT("Material"), RF_Transient));
23
+ auto* Metallic = NewObject<UMaterialExpressionConstant>(Material.Get(), NAME_None, RF_Transient);
24
+ auto* Roughness = NewObject<UMaterialExpressionConstant>(Material.Get(), NAME_None, RF_Transient);
25
+ Metallic->Desc = TEXT("Metallic");
26
+ Metallic->R = 1.0f;
27
+ Roughness->Desc = TEXT("Roughness");
28
+ Roughness->R = 0.3f;
29
+ Material->GetExpressionCollection().AddExpression(Metallic);
30
+ Material->GetExpressionCollection().AddExpression(Roughness);
31
+
32
+ FMCPHandlerRegistry Registry;
33
+ FMaterialHandlers::RegisterHandlers(Registry);
34
+ auto Connect = [&](const TCHAR* Name, const TCHAR* Property) -> bool
35
+ {
36
+ auto Request = MakeShared<FJsonObject>();
37
+ Request->SetStringField(TEXT("materialPath"), Material->GetPathName());
38
+ Request->SetStringField(TEXT("expressionName"), Name);
39
+ Request->SetStringField(TEXT("property"), Property);
40
+ const auto Value = Registry.ExecuteHandler(TEXT("connect_to_material_property"), Request);
41
+ return Value.IsValid() && Value->Type == EJson::Object && Value->AsObject()->GetBoolField(TEXT("success"));
42
+ };
43
+
44
+ TestTrue(TEXT("Metallic connects by its name"), Connect(TEXT("Metallic"), TEXT("Metallic")));
45
+ TestTrue(TEXT("Roughness connects by its name"), Connect(TEXT("Roughness"), TEXT("Roughness")));
46
+ TestTrue(TEXT("Metallic input holds the node named Metallic"), Material->GetExpressionInputForProperty(MP_Metallic)->Expression == Metallic);
47
+ TestTrue(TEXT("Roughness input holds the node named Roughness"), Material->GetExpressionInputForProperty(MP_Roughness)->Expression == Roughness);
48
+ TestFalse(TEXT("an unknown name is refused"), Connect(TEXT("Specular"), TEXT("Specular")));
49
+ return true;
50
+ }
51
+
52
+ #endif
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "FileVersion": 3,
3
3
  "Version": 1,
4
- "VersionName": "1.4.3",
4
+ "VersionName": "1.4.4",
5
5
  "FriendlyName": "UE MCP Bridge",
6
6
  "Description": "C++ WebSocket bridge for UE-MCP, providing 1914+ editor actions over the MCP protocol",
7
7
  "Category": "Developer Tools",