From 11dd976441e81b6d2709a895d2edeacd7ca21f3b Mon Sep 17 00:00:00 2001 From: jyelon Date: Fri, 6 Mar 2026 15:43:55 -0500 Subject: [PATCH] Rename endpoints to make them more intuitive. --- .../BlueprintMCPHandlers_DiffBlueprints.cpp | 2 +- .../BlueprintMCPHandlers_Interfaces.cpp | 6 +- .../Private/BlueprintMCPHandlers_Mutation.cpp | 28 +- .../Private/BlueprintMCPServer.cpp | 476 +++++++++--------- .../BlueprintMCPHandlers_DiffBlueprints.h | 4 +- .../Public/BlueprintMCPHandlers_Interfaces.h | 12 +- .../Public/BlueprintMCPHandlers_Mutation.h | 44 +- Plugins/BlueprintMCP/endpoint-rename-plan.md | 206 ++++++++ 8 files changed, 492 insertions(+), 286 deletions(-) create mode 100644 Plugins/BlueprintMCP/endpoint-rename-plan.md diff --git a/Plugins/BlueprintMCP/Source/BlueprintMCP/Private/BlueprintMCPHandlers_DiffBlueprints.cpp b/Plugins/BlueprintMCP/Source/BlueprintMCP/Private/BlueprintMCPHandlers_DiffBlueprints.cpp index 6d4c897d..3b0e3f02 100644 --- a/Plugins/BlueprintMCP/Source/BlueprintMCP/Private/BlueprintMCPHandlers_DiffBlueprints.cpp +++ b/Plugins/BlueprintMCP/Source/BlueprintMCP/Private/BlueprintMCPHandlers_DiffBlueprints.cpp @@ -6,7 +6,7 @@ #include "EdGraph/EdGraphNode.h" #include "EdGraph/EdGraphPin.h" -void UMCPHandler_DiffBlueprints::Handle(const FJsonObject* Json, FJsonObject* Result) +void UMCPHandler_DiffTwoBlueprints::Handle(const FJsonObject* Json, FJsonObject* Result) { MCPHelper* Helper = MCPHelper::Get(); diff --git a/Plugins/BlueprintMCP/Source/BlueprintMCP/Private/BlueprintMCPHandlers_Interfaces.cpp b/Plugins/BlueprintMCP/Source/BlueprintMCP/Private/BlueprintMCPHandlers_Interfaces.cpp index 9690cc5c..b0469e60 100644 --- a/Plugins/BlueprintMCP/Source/BlueprintMCP/Private/BlueprintMCPHandlers_Interfaces.cpp +++ b/Plugins/BlueprintMCP/Source/BlueprintMCP/Private/BlueprintMCPHandlers_Interfaces.cpp @@ -10,7 +10,7 @@ // ListInterfaces // ============================================================ -void UMCPHandler_ListInterfaces::Handle(const FJsonObject* Json, FJsonObject* Result) +void UMCPHandler_ListBlueprintInterfaces::Handle(const FJsonObject* Json, FJsonObject* Result) { MCPHelper* Helper = MCPHelper::Get(); @@ -55,7 +55,7 @@ void UMCPHandler_ListInterfaces::Handle(const FJsonObject* Json, FJsonObject* Re // AddInterface // ============================================================ -void UMCPHandler_AddInterface::Handle(const FJsonObject* Json, FJsonObject* Result) +void UMCPHandler_AddBlueprintInterface::Handle(const FJsonObject* Json, FJsonObject* Result) { MCPHelper* Helper = MCPHelper::Get(); @@ -179,7 +179,7 @@ void UMCPHandler_AddInterface::Handle(const FJsonObject* Json, FJsonObject* Resu // RemoveInterface // ============================================================ -void UMCPHandler_RemoveInterface::Handle(const FJsonObject* Json, FJsonObject* Result) +void UMCPHandler_RemoveBlueprintInterface::Handle(const FJsonObject* Json, FJsonObject* Result) { MCPHelper* Helper = MCPHelper::Get(); diff --git a/Plugins/BlueprintMCP/Source/BlueprintMCP/Private/BlueprintMCPHandlers_Mutation.cpp b/Plugins/BlueprintMCP/Source/BlueprintMCP/Private/BlueprintMCPHandlers_Mutation.cpp index bcc146fe..8055014d 100644 --- a/Plugins/BlueprintMCP/Source/BlueprintMCP/Private/BlueprintMCPHandlers_Mutation.cpp +++ b/Plugins/BlueprintMCP/Source/BlueprintMCP/Private/BlueprintMCPHandlers_Mutation.cpp @@ -50,7 +50,7 @@ // ReplaceFunctionCalls — redirect function call nodes // ============================================================ -void UMCPHandler_ReplaceFunctionCalls::Handle(const FJsonObject* Json, FJsonObject* Result) +void UMCPHandler_ReplaceFunctionCallsInBlueprint::Handle(const FJsonObject* Json, FJsonObject* Result) { MCPHelper* Helper = MCPHelper::Get(); @@ -427,9 +427,9 @@ void UMCPHandler_DeleteAsset::Handle(const FJsonObject* Json, FJsonObject* Resul // HandleConnectPins — wire two pins together // ============================================================ -// connect_pins is now handled by UMCPHandler_ConnectPins (new-style registry) +// connect_pins is now handled by UMCPHandler_ConnectBlueprintPins (new-style registry) -void UMCPHandler_ConnectPins::Handle(const FJsonObject* Json, FJsonObject* Result) +void UMCPHandler_ConnectBlueprintPins::Handle(const FJsonObject* Json, FJsonObject* Result) { MCPHelper* Helper = MCPHelper::Get(); @@ -530,9 +530,9 @@ void UMCPHandler_ConnectPins::Handle(const FJsonObject* Json, FJsonObject* Resul // HandleDisconnectPin — break connections on a pin // ============================================================ -// disconnect_pin is now handled by UMCPHandler_DisconnectPin (new-style registry) +// disconnect_pin is now handled by UMCPHandler_DisconnectBlueprintPins (new-style registry) -void UMCPHandler_DisconnectPin::Handle(const FJsonObject* Json, FJsonObject* Result) +void UMCPHandler_DisconnectBlueprintPins::Handle(const FJsonObject* Json, FJsonObject* Result) { MCPHelper* Helper = MCPHelper::Get(); @@ -639,7 +639,7 @@ void UMCPHandler_DisconnectPin::Handle(const FJsonObject* Json, FJsonObject* Res // RefreshAllNodes — refresh all nodes and recompile // ============================================================ -void UMCPHandler_RefreshAllNodes::Handle(const FJsonObject* Json, FJsonObject* Result) +void UMCPHandler_RefreshAllNodesInGraph::Handle(const FJsonObject* Json, FJsonObject* Result) { MCPHelper* Helper = MCPHelper::Get(); @@ -746,7 +746,7 @@ void UMCPHandler_RefreshAllNodes::Handle(const FJsonObject* Json, FJsonObject* R // SetPinDefault — set the default value of a pin on a node // ============================================================ -void UMCPHandler_SetPinDefault::Handle(const FJsonObject* Json, FJsonObject* Result) +void UMCPHandler_SetPinDefaultValues::Handle(const FJsonObject* Json, FJsonObject* Result) { MCPHelper* Helper = MCPHelper::Get(); @@ -1059,9 +1059,9 @@ void UMCPHandler_ChangeStructNodeType::Handle(const FJsonObject* Json, FJsonObje // HandleDeleteNode — remove a node from a blueprint graph // ============================================================ -// delete_node is now handled by UMCPHandler_DeleteNode (new-style registry) +// delete_node is now handled by UMCPHandler_DeleteNodeFromGraph (new-style registry) -void UMCPHandler_DeleteNode::Handle(const FJsonObject* Json, FJsonObject* Result) +void UMCPHandler_DeleteNodeFromGraph::Handle(const FJsonObject* Json, FJsonObject* Result) { MCPHelper* Helper = MCPHelper::Get(); @@ -1219,7 +1219,7 @@ void UMCPHandler_RenameAsset::Handle(const FJsonObject* Json, FJsonObject* Resul // SetBlueprintDefault — set a default property value on a Blueprint CDO // ============================================================ -void UMCPHandler_SetBlueprintDefault::Handle(const FJsonObject* Json, FJsonObject* Result) +void UMCPHandler_SetClassDefaultValue::Handle(const FJsonObject* Json, FJsonObject* Result) { MCPHelper* Helper = MCPHelper::Get(); @@ -1377,7 +1377,7 @@ void UMCPHandler_SetBlueprintDefault::Handle(const FJsonObject* Json, FJsonObjec // MoveNode — reposition one or more nodes in a blueprint graph // ============================================================ -void UMCPHandler_MoveNode::Handle(const FJsonObject* Json, FJsonObject* Result) +void UMCPHandler_SetNodePositions::Handle(const FJsonObject* Json, FJsonObject* Result) { MCPHelper* Helper = MCPHelper::Get(); @@ -1441,7 +1441,7 @@ void UMCPHandler_MoveNode::Handle(const FJsonObject* Json, FJsonObject* Result) // DuplicateNodes — duplicate one or more nodes in a graph // ============================================================ -void UMCPHandler_DuplicateNodes::Handle(const FJsonObject* Json, FJsonObject* Result) +void UMCPHandler_DuplicateNodesInGraph::Handle(const FJsonObject* Json, FJsonObject* Result) { MCPHelper* Helper = MCPHelper::Get(); @@ -1656,7 +1656,7 @@ void UMCPHandler_SetNodeComment::Handle(const FJsonObject* Json, FJsonObject* Re // for spawners matching a query string (same pool as the right-click menu) // ============================================================ -void UMCPHandler_SearchNodeTypes::Handle(const FJsonObject* Json, FJsonObject* Result) +void UMCPHandler_SearchSpawnableNodeTypes::Handle(const FJsonObject* Json, FJsonObject* Result) { int32 ClampedMax = FMath::Clamp(MaxResults, 1, 500); @@ -1678,7 +1678,7 @@ void UMCPHandler_SearchNodeTypes::Handle(const FJsonObject* Json, FJsonObject* R // Takes a full action name, finds the spawner, and calls Invoke(). // ============================================================ -void UMCPHandler_SpawnNode::Handle(const FJsonObject* Json, FJsonObject* Result) +void UMCPHandler_SpawnNodesInGraph::Handle(const FJsonObject* Json, FJsonObject* Result) { MCPHelper* Helper = MCPHelper::Get(); diff --git a/Plugins/BlueprintMCP/Source/BlueprintMCP/Private/BlueprintMCPServer.cpp b/Plugins/BlueprintMCP/Source/BlueprintMCP/Private/BlueprintMCPServer.cpp index b95dd58e..6030944d 100644 --- a/Plugins/BlueprintMCP/Source/BlueprintMCP/Private/BlueprintMCPServer.cpp +++ b/Plugins/BlueprintMCP/Source/BlueprintMCP/Private/BlueprintMCPServer.cpp @@ -510,11 +510,11 @@ bool FBlueprintMCPServer::Start(int32 InPort, bool bEditorMode) })); // /api/rescan — re-scan asset registry and refresh cached asset lists (game thread) - Router->BindRoute(FHttpPath(TEXT("/api/rescan")), EHttpServerRequestVerbs::VERB_POST, - QueuedHandler(TEXT("rescan"))); + Router->BindRoute(FHttpPath(TEXT("/api/rescan_asset_registry")), EHttpServerRequestVerbs::VERB_POST, + QueuedHandler(TEXT("rescan_asset_registry"))); // /api/list — answered directly (only reads immutable asset list) - Router->BindRoute(FHttpPath(TEXT("/api/list")), EHttpServerRequestVerbs::VERB_GET, + Router->BindRoute(FHttpPath(TEXT("/api/list_blueprint_assets")), EHttpServerRequestVerbs::VERB_GET, FHttpRequestHandler::CreateLambda( [this](const FHttpServerRequest& Request, const FHttpResultCallback& OnComplete) { @@ -532,87 +532,87 @@ bool FBlueprintMCPServer::Start(int32 InPort, bool bEditorMode) })); // Old-style handlers (queued, not yet ported to UMCPHandler) - Router->BindRoute(FHttpPath(TEXT("/api/blueprint")), EHttpServerRequestVerbs::VERB_GET, - QueuedHandler(TEXT("blueprint"))); - Router->BindRoute(FHttpPath(TEXT("/api/graph")), EHttpServerRequestVerbs::VERB_GET, - QueuedHandler(TEXT("graph"))); - Router->BindRoute(FHttpPath(TEXT("/api/search")), EHttpServerRequestVerbs::VERB_GET, - QueuedHandler(TEXT("search"))); - Router->BindRoute(FHttpPath(TEXT("/api/references")), EHttpServerRequestVerbs::VERB_GET, - QueuedHandler(TEXT("references"))); - Router->BindRoute(FHttpPath(TEXT("/api/change_variable_type")), EHttpServerRequestVerbs::VERB_POST, - QueuedHandler(TEXT("change_variable_type"))); - Router->BindRoute(FHttpPath(TEXT("/api/change_function_param_type")), EHttpServerRequestVerbs::VERB_POST, - QueuedHandler(TEXT("change_function_param_type"))); - Router->BindRoute(FHttpPath(TEXT("/api/test_save")), EHttpServerRequestVerbs::VERB_GET, - QueuedHandler(TEXT("test_save"))); - Router->BindRoute(FHttpPath(TEXT("/api/get_pin_info")), EHttpServerRequestVerbs::VERB_POST, - QueuedHandler(TEXT("get_pin_info"))); - Router->BindRoute(FHttpPath(TEXT("/api/check_pin_compatibility")), EHttpServerRequestVerbs::VERB_POST, - QueuedHandler(TEXT("check_pin_compatibility"))); - Router->BindRoute(FHttpPath(TEXT("/api/list_classes")), EHttpServerRequestVerbs::VERB_POST, - QueuedHandler(TEXT("list_classes"))); - Router->BindRoute(FHttpPath(TEXT("/api/list_functions")), EHttpServerRequestVerbs::VERB_POST, - QueuedHandler(TEXT("list_functions"))); - Router->BindRoute(FHttpPath(TEXT("/api/list_properties")), EHttpServerRequestVerbs::VERB_POST, - QueuedHandler(TEXT("list_properties"))); + Router->BindRoute(FHttpPath(TEXT("/api/dump_blueprint")), EHttpServerRequestVerbs::VERB_GET, + QueuedHandler(TEXT("dump_blueprint"))); + Router->BindRoute(FHttpPath(TEXT("/api/dump_blueprint_graph")), EHttpServerRequestVerbs::VERB_GET, + QueuedHandler(TEXT("dump_blueprint_graph"))); + Router->BindRoute(FHttpPath(TEXT("/api/search_within_blueprints")), EHttpServerRequestVerbs::VERB_GET, + QueuedHandler(TEXT("search_within_blueprints"))); + Router->BindRoute(FHttpPath(TEXT("/api/find_asset_references")), EHttpServerRequestVerbs::VERB_GET, + QueuedHandler(TEXT("find_asset_references"))); + Router->BindRoute(FHttpPath(TEXT("/api/change_blueprint_variable_type")), EHttpServerRequestVerbs::VERB_POST, + QueuedHandler(TEXT("change_blueprint_variable_type"))); + Router->BindRoute(FHttpPath(TEXT("/api/change_function_parameter_type")), EHttpServerRequestVerbs::VERB_POST, + QueuedHandler(TEXT("change_function_parameter_type"))); + Router->BindRoute(FHttpPath(TEXT("/api/test_save_blueprint_package")), EHttpServerRequestVerbs::VERB_GET, + QueuedHandler(TEXT("test_save_blueprint_package"))); + Router->BindRoute(FHttpPath(TEXT("/api/get_pin_details")), EHttpServerRequestVerbs::VERB_POST, + QueuedHandler(TEXT("get_pin_details"))); + Router->BindRoute(FHttpPath(TEXT("/api/check_pin_connection_compatibility")), EHttpServerRequestVerbs::VERB_POST, + QueuedHandler(TEXT("check_pin_connection_compatibility"))); + Router->BindRoute(FHttpPath(TEXT("/api/search_unreal_classes")), EHttpServerRequestVerbs::VERB_POST, + QueuedHandler(TEXT("search_unreal_classes"))); + Router->BindRoute(FHttpPath(TEXT("/api/list_class_functions")), EHttpServerRequestVerbs::VERB_POST, + QueuedHandler(TEXT("list_class_functions"))); + Router->BindRoute(FHttpPath(TEXT("/api/list_class_properties")), EHttpServerRequestVerbs::VERB_POST, + QueuedHandler(TEXT("list_class_properties"))); Router->BindRoute(FHttpPath(TEXT("/api/remove_function_parameter")), EHttpServerRequestVerbs::VERB_POST, QueuedHandler(TEXT("remove_function_parameter"))); - Router->BindRoute(FHttpPath(TEXT("/api/search_by_type")), EHttpServerRequestVerbs::VERB_GET, - QueuedHandler(TEXT("search_by_type"))); - Router->BindRoute(FHttpPath(TEXT("/api/validate_blueprint")), EHttpServerRequestVerbs::VERB_POST, - QueuedHandler(TEXT("validate_blueprint"))); - Router->BindRoute(FHttpPath(TEXT("/api/validate_all_blueprints")), EHttpServerRequestVerbs::VERB_POST, - QueuedHandler(TEXT("validate_all_blueprints"))); + Router->BindRoute(FHttpPath(TEXT("/api/search_type_usage_in_blueprints")), EHttpServerRequestVerbs::VERB_GET, + QueuedHandler(TEXT("search_type_usage_in_blueprints"))); + Router->BindRoute(FHttpPath(TEXT("/api/compile_blueprint")), EHttpServerRequestVerbs::VERB_POST, + QueuedHandler(TEXT("compile_blueprint"))); + Router->BindRoute(FHttpPath(TEXT("/api/compile_all_blueprints")), EHttpServerRequestVerbs::VERB_POST, + QueuedHandler(TEXT("compile_all_blueprints"))); Router->BindRoute(FHttpPath(TEXT("/api/reparent_blueprint")), EHttpServerRequestVerbs::VERB_POST, QueuedHandler(TEXT("reparent_blueprint"))); - Router->BindRoute(FHttpPath(TEXT("/api/create_blueprint")), EHttpServerRequestVerbs::VERB_POST, - QueuedHandler(TEXT("create_blueprint"))); - Router->BindRoute(FHttpPath(TEXT("/api/create_graph")), EHttpServerRequestVerbs::VERB_POST, - QueuedHandler(TEXT("create_graph"))); - Router->BindRoute(FHttpPath(TEXT("/api/create_struct")), EHttpServerRequestVerbs::VERB_POST, - QueuedHandler(TEXT("create_struct"))); - Router->BindRoute(FHttpPath(TEXT("/api/create_enum")), EHttpServerRequestVerbs::VERB_POST, - QueuedHandler(TEXT("create_enum"))); - Router->BindRoute(FHttpPath(TEXT("/api/add_struct_property")), EHttpServerRequestVerbs::VERB_POST, - QueuedHandler(TEXT("add_struct_property"))); - Router->BindRoute(FHttpPath(TEXT("/api/remove_struct_property")), EHttpServerRequestVerbs::VERB_POST, - QueuedHandler(TEXT("remove_struct_property"))); - Router->BindRoute(FHttpPath(TEXT("/api/delete_graph")), EHttpServerRequestVerbs::VERB_POST, - QueuedHandler(TEXT("delete_graph"))); - Router->BindRoute(FHttpPath(TEXT("/api/rename_graph")), EHttpServerRequestVerbs::VERB_POST, - QueuedHandler(TEXT("rename_graph"))); - Router->BindRoute(FHttpPath(TEXT("/api/add_variable")), EHttpServerRequestVerbs::VERB_POST, - QueuedHandler(TEXT("add_variable"))); - Router->BindRoute(FHttpPath(TEXT("/api/remove_variable")), EHttpServerRequestVerbs::VERB_POST, - QueuedHandler(TEXT("remove_variable"))); - Router->BindRoute(FHttpPath(TEXT("/api/set_variable_metadata")), EHttpServerRequestVerbs::VERB_POST, - QueuedHandler(TEXT("set_variable_metadata"))); + Router->BindRoute(FHttpPath(TEXT("/api/create_blueprint_asset")), EHttpServerRequestVerbs::VERB_POST, + QueuedHandler(TEXT("create_blueprint_asset"))); + Router->BindRoute(FHttpPath(TEXT("/api/create_blueprint_graph")), EHttpServerRequestVerbs::VERB_POST, + QueuedHandler(TEXT("create_blueprint_graph"))); + Router->BindRoute(FHttpPath(TEXT("/api/create_struct_asset")), EHttpServerRequestVerbs::VERB_POST, + QueuedHandler(TEXT("create_struct_asset"))); + Router->BindRoute(FHttpPath(TEXT("/api/create_enum_asset")), EHttpServerRequestVerbs::VERB_POST, + QueuedHandler(TEXT("create_enum_asset"))); + Router->BindRoute(FHttpPath(TEXT("/api/add_struct_field")), EHttpServerRequestVerbs::VERB_POST, + QueuedHandler(TEXT("add_struct_field"))); + Router->BindRoute(FHttpPath(TEXT("/api/remove_struct_field")), EHttpServerRequestVerbs::VERB_POST, + QueuedHandler(TEXT("remove_struct_field"))); + Router->BindRoute(FHttpPath(TEXT("/api/delete_blueprint_graph")), EHttpServerRequestVerbs::VERB_POST, + QueuedHandler(TEXT("delete_blueprint_graph"))); + Router->BindRoute(FHttpPath(TEXT("/api/rename_blueprint_graph")), EHttpServerRequestVerbs::VERB_POST, + QueuedHandler(TEXT("rename_blueprint_graph"))); + Router->BindRoute(FHttpPath(TEXT("/api/add_blueprint_variable")), EHttpServerRequestVerbs::VERB_POST, + QueuedHandler(TEXT("add_blueprint_variable"))); + Router->BindRoute(FHttpPath(TEXT("/api/remove_blueprint_variable")), EHttpServerRequestVerbs::VERB_POST, + QueuedHandler(TEXT("remove_blueprint_variable"))); + Router->BindRoute(FHttpPath(TEXT("/api/set_blueprint_variable_metadata")), EHttpServerRequestVerbs::VERB_POST, + QueuedHandler(TEXT("set_blueprint_variable_metadata"))); Router->BindRoute(FHttpPath(TEXT("/api/add_event_dispatcher")), EHttpServerRequestVerbs::VERB_POST, QueuedHandler(TEXT("add_event_dispatcher"))); Router->BindRoute(FHttpPath(TEXT("/api/list_event_dispatchers")), EHttpServerRequestVerbs::VERB_POST, QueuedHandler(TEXT("list_event_dispatchers"))); Router->BindRoute(FHttpPath(TEXT("/api/add_function_parameter")), EHttpServerRequestVerbs::VERB_POST, QueuedHandler(TEXT("add_function_parameter"))); - Router->BindRoute(FHttpPath(TEXT("/api/add_component")), EHttpServerRequestVerbs::VERB_POST, - QueuedHandler(TEXT("add_component"))); - Router->BindRoute(FHttpPath(TEXT("/api/remove_component")), EHttpServerRequestVerbs::VERB_POST, - QueuedHandler(TEXT("remove_component"))); - Router->BindRoute(FHttpPath(TEXT("/api/list_components")), EHttpServerRequestVerbs::VERB_POST, - QueuedHandler(TEXT("list_components"))); - Router->BindRoute(FHttpPath(TEXT("/api/snapshot_graph")), EHttpServerRequestVerbs::VERB_POST, - QueuedHandler(TEXT("snapshot_graph"))); - Router->BindRoute(FHttpPath(TEXT("/api/diff_graph")), EHttpServerRequestVerbs::VERB_POST, - QueuedHandler(TEXT("diff_graph"))); - Router->BindRoute(FHttpPath(TEXT("/api/restore_graph")), EHttpServerRequestVerbs::VERB_POST, - QueuedHandler(TEXT("restore_graph"))); - Router->BindRoute(FHttpPath(TEXT("/api/find_disconnected_pins")), EHttpServerRequestVerbs::VERB_POST, - QueuedHandler(TEXT("find_disconnected_pins"))); - Router->BindRoute(FHttpPath(TEXT("/api/analyze_rebuild_impact")), EHttpServerRequestVerbs::VERB_POST, - QueuedHandler(TEXT("analyze_rebuild_impact"))); + Router->BindRoute(FHttpPath(TEXT("/api/add_blueprint_component")), EHttpServerRequestVerbs::VERB_POST, + QueuedHandler(TEXT("add_blueprint_component"))); + Router->BindRoute(FHttpPath(TEXT("/api/remove_blueprint_component")), EHttpServerRequestVerbs::VERB_POST, + QueuedHandler(TEXT("remove_blueprint_component"))); + Router->BindRoute(FHttpPath(TEXT("/api/list_blueprint_components")), EHttpServerRequestVerbs::VERB_POST, + QueuedHandler(TEXT("list_blueprint_components"))); + Router->BindRoute(FHttpPath(TEXT("/api/snapshot_blueprint_graph")), EHttpServerRequestVerbs::VERB_POST, + QueuedHandler(TEXT("snapshot_blueprint_graph"))); + Router->BindRoute(FHttpPath(TEXT("/api/diff_blueprint_graph_vs_snapshot")), EHttpServerRequestVerbs::VERB_POST, + QueuedHandler(TEXT("diff_blueprint_graph_vs_snapshot"))); + Router->BindRoute(FHttpPath(TEXT("/api/restore_blueprint_graph_from_snapshot")), EHttpServerRequestVerbs::VERB_POST, + QueuedHandler(TEXT("restore_blueprint_graph_from_snapshot"))); + Router->BindRoute(FHttpPath(TEXT("/api/find_pins_disconnected_since_snapshot")), EHttpServerRequestVerbs::VERB_POST, + QueuedHandler(TEXT("find_pins_disconnected_since_snapshot"))); + Router->BindRoute(FHttpPath(TEXT("/api/analyze_cpp_rebuild_impact")), EHttpServerRequestVerbs::VERB_POST, + QueuedHandler(TEXT("analyze_cpp_rebuild_impact"))); // Material read-only tools (Phase 1) - Router->BindRoute(FHttpPath(TEXT("/api/materials")), EHttpServerRequestVerbs::VERB_GET, + Router->BindRoute(FHttpPath(TEXT("/api/list_material_assets")), EHttpServerRequestVerbs::VERB_GET, FHttpRequestHandler::CreateLambda( [this](const FHttpServerRequest& Request, const FHttpResultCallback& OnComplete) { @@ -629,46 +629,46 @@ bool FBlueprintMCPServer::Start(int32 InPort, bool bEditorMode) return true; })); Router->BindRoute(FHttpPath(TEXT("/api/material")), EHttpServerRequestVerbs::VERB_GET, - QueuedHandler(TEXT("get_material"))); + QueuedHandler(TEXT("dump_material"))); Router->BindRoute(FHttpPath(TEXT("/api/material_graph")), EHttpServerRequestVerbs::VERB_GET, - QueuedHandler(TEXT("get_material_graph"))); - Router->BindRoute(FHttpPath(TEXT("/api/describe_material")), EHttpServerRequestVerbs::VERB_POST, - QueuedHandler(TEXT("describe_material"))); - Router->BindRoute(FHttpPath(TEXT("/api/search_materials")), EHttpServerRequestVerbs::VERB_GET, - QueuedHandler(TEXT("search_materials"))); + QueuedHandler(TEXT("dump_material_expression_graph"))); + Router->BindRoute(FHttpPath(TEXT("/api/describe_material_in_english")), EHttpServerRequestVerbs::VERB_POST, + QueuedHandler(TEXT("describe_material_in_english"))); + Router->BindRoute(FHttpPath(TEXT("/api/search_within_materials")), EHttpServerRequestVerbs::VERB_GET, + QueuedHandler(TEXT("search_within_materials"))); Router->BindRoute(FHttpPath(TEXT("/api/material_references")), EHttpServerRequestVerbs::VERB_POST, QueuedHandler(TEXT("find_material_references"))); // Material mutation tools (Phase 2) - Router->BindRoute(FHttpPath(TEXT("/api/create_material")), EHttpServerRequestVerbs::VERB_POST, - QueuedHandler(TEXT("create_material"))); + Router->BindRoute(FHttpPath(TEXT("/api/create_material_asset")), EHttpServerRequestVerbs::VERB_POST, + QueuedHandler(TEXT("create_material_asset"))); Router->BindRoute(FHttpPath(TEXT("/api/set_material_property")), EHttpServerRequestVerbs::VERB_POST, QueuedHandler(TEXT("set_material_property"))); Router->BindRoute(FHttpPath(TEXT("/api/add_material_expression")), EHttpServerRequestVerbs::VERB_POST, QueuedHandler(TEXT("add_material_expression"))); Router->BindRoute(FHttpPath(TEXT("/api/delete_material_expression")), EHttpServerRequestVerbs::VERB_POST, QueuedHandler(TEXT("delete_material_expression"))); - Router->BindRoute(FHttpPath(TEXT("/api/connect_material_pins")), EHttpServerRequestVerbs::VERB_POST, - QueuedHandler(TEXT("connect_material_pins"))); - Router->BindRoute(FHttpPath(TEXT("/api/disconnect_material_pin")), EHttpServerRequestVerbs::VERB_POST, - QueuedHandler(TEXT("disconnect_material_pin"))); - Router->BindRoute(FHttpPath(TEXT("/api/set_expression_value")), EHttpServerRequestVerbs::VERB_POST, - QueuedHandler(TEXT("set_expression_value"))); - Router->BindRoute(FHttpPath(TEXT("/api/move_material_expression")), EHttpServerRequestVerbs::VERB_POST, - QueuedHandler(TEXT("move_material_expression"))); + Router->BindRoute(FHttpPath(TEXT("/api/connect_material_expression_pins")), EHttpServerRequestVerbs::VERB_POST, + QueuedHandler(TEXT("connect_material_expression_pins"))); + Router->BindRoute(FHttpPath(TEXT("/api/disconnect_material_expression_pin")), EHttpServerRequestVerbs::VERB_POST, + QueuedHandler(TEXT("disconnect_material_expression_pin"))); + Router->BindRoute(FHttpPath(TEXT("/api/set_material_expression_property")), EHttpServerRequestVerbs::VERB_POST, + QueuedHandler(TEXT("set_material_expression_property"))); + Router->BindRoute(FHttpPath(TEXT("/api/set_material_expression_position")), EHttpServerRequestVerbs::VERB_POST, + QueuedHandler(TEXT("set_material_expression_position"))); // Material instance tools (Phase 3) - Router->BindRoute(FHttpPath(TEXT("/api/create_material_instance")), EHttpServerRequestVerbs::VERB_POST, - QueuedHandler(TEXT("create_material_instance"))); + Router->BindRoute(FHttpPath(TEXT("/api/create_material_instance_asset")), EHttpServerRequestVerbs::VERB_POST, + QueuedHandler(TEXT("create_material_instance_asset"))); Router->BindRoute(FHttpPath(TEXT("/api/set_material_instance_parameter")), EHttpServerRequestVerbs::VERB_POST, QueuedHandler(TEXT("set_material_instance_parameter"))); Router->BindRoute(FHttpPath(TEXT("/api/material_instance_params")), EHttpServerRequestVerbs::VERB_GET, - QueuedHandler(TEXT("get_material_instance_params"))); + QueuedHandler(TEXT("dump_material_instance_parameters"))); Router->BindRoute(FHttpPath(TEXT("/api/reparent_material_instance")), EHttpServerRequestVerbs::VERB_POST, QueuedHandler(TEXT("reparent_material_instance"))); // Material function tools (Phase 4) - Router->BindRoute(FHttpPath(TEXT("/api/material_functions")), EHttpServerRequestVerbs::VERB_GET, + Router->BindRoute(FHttpPath(TEXT("/api/list_material_function_assets")), EHttpServerRequestVerbs::VERB_GET, FHttpRequestHandler::CreateLambda( [this](const FHttpServerRequest& Request, const FHttpResultCallback& OnComplete) { @@ -685,47 +685,47 @@ bool FBlueprintMCPServer::Start(int32 InPort, bool bEditorMode) return true; })); Router->BindRoute(FHttpPath(TEXT("/api/material_function")), EHttpServerRequestVerbs::VERB_GET, - QueuedHandler(TEXT("get_material_function"))); - Router->BindRoute(FHttpPath(TEXT("/api/create_material_function")), EHttpServerRequestVerbs::VERB_POST, - QueuedHandler(TEXT("create_material_function"))); + QueuedHandler(TEXT("dump_material_function"))); + Router->BindRoute(FHttpPath(TEXT("/api/create_material_function_asset")), EHttpServerRequestVerbs::VERB_POST, + QueuedHandler(TEXT("create_material_function_asset"))); // Material snapshot/diff/restore (Phase 5) - Router->BindRoute(FHttpPath(TEXT("/api/snapshot_material_graph")), EHttpServerRequestVerbs::VERB_POST, - QueuedHandler(TEXT("snapshot_material_graph"))); - Router->BindRoute(FHttpPath(TEXT("/api/diff_material_graph")), EHttpServerRequestVerbs::VERB_POST, - QueuedHandler(TEXT("diff_material_graph"))); - Router->BindRoute(FHttpPath(TEXT("/api/restore_material_graph")), EHttpServerRequestVerbs::VERB_POST, - QueuedHandler(TEXT("restore_material_graph"))); - Router->BindRoute(FHttpPath(TEXT("/api/validate_material")), EHttpServerRequestVerbs::VERB_POST, - QueuedHandler(TEXT("validate_material"))); + Router->BindRoute(FHttpPath(TEXT("/api/snapshot_material_expression_graph")), EHttpServerRequestVerbs::VERB_POST, + QueuedHandler(TEXT("snapshot_material_expression_graph"))); + Router->BindRoute(FHttpPath(TEXT("/api/diff_material_graph_vs_snapshot")), EHttpServerRequestVerbs::VERB_POST, + QueuedHandler(TEXT("diff_material_graph_vs_snapshot"))); + Router->BindRoute(FHttpPath(TEXT("/api/restore_material_graph_from_snapshot")), EHttpServerRequestVerbs::VERB_POST, + QueuedHandler(TEXT("restore_material_graph_from_snapshot"))); + Router->BindRoute(FHttpPath(TEXT("/api/compile_material")), EHttpServerRequestVerbs::VERB_POST, + QueuedHandler(TEXT("compile_material"))); // Animation Blueprint tools - Router->BindRoute(FHttpPath(TEXT("/api/create_anim_blueprint")), EHttpServerRequestVerbs::VERB_POST, - QueuedHandler(TEXT("create_anim_blueprint"))); - Router->BindRoute(FHttpPath(TEXT("/api/add_anim_state")), EHttpServerRequestVerbs::VERB_POST, - QueuedHandler(TEXT("add_anim_state"))); - Router->BindRoute(FHttpPath(TEXT("/api/remove_anim_state")), EHttpServerRequestVerbs::VERB_POST, - QueuedHandler(TEXT("remove_anim_state"))); - Router->BindRoute(FHttpPath(TEXT("/api/add_anim_transition")), EHttpServerRequestVerbs::VERB_POST, - QueuedHandler(TEXT("add_anim_transition"))); - Router->BindRoute(FHttpPath(TEXT("/api/set_transition_rule")), EHttpServerRequestVerbs::VERB_POST, - QueuedHandler(TEXT("set_transition_rule"))); - Router->BindRoute(FHttpPath(TEXT("/api/add_anim_node")), EHttpServerRequestVerbs::VERB_POST, - QueuedHandler(TEXT("add_anim_node"))); - Router->BindRoute(FHttpPath(TEXT("/api/add_state_machine")), EHttpServerRequestVerbs::VERB_POST, - QueuedHandler(TEXT("add_state_machine"))); - Router->BindRoute(FHttpPath(TEXT("/api/set_state_animation")), EHttpServerRequestVerbs::VERB_POST, - QueuedHandler(TEXT("set_state_animation"))); - Router->BindRoute(FHttpPath(TEXT("/api/list_anim_slots")), EHttpServerRequestVerbs::VERB_POST, - QueuedHandler(TEXT("list_anim_slots"))); - Router->BindRoute(FHttpPath(TEXT("/api/list_sync_groups")), EHttpServerRequestVerbs::VERB_POST, - QueuedHandler(TEXT("list_sync_groups"))); - Router->BindRoute(FHttpPath(TEXT("/api/create_blend_space")), EHttpServerRequestVerbs::VERB_POST, - QueuedHandler(TEXT("create_blend_space"))); - Router->BindRoute(FHttpPath(TEXT("/api/set_blend_space_samples")), EHttpServerRequestVerbs::VERB_POST, - QueuedHandler(TEXT("set_blend_space_samples"))); - Router->BindRoute(FHttpPath(TEXT("/api/set_state_blend_space")), EHttpServerRequestVerbs::VERB_POST, - QueuedHandler(TEXT("set_state_blend_space"))); + Router->BindRoute(FHttpPath(TEXT("/api/create_anim_blueprint_asset")), EHttpServerRequestVerbs::VERB_POST, + QueuedHandler(TEXT("create_anim_blueprint_asset"))); + Router->BindRoute(FHttpPath(TEXT("/api/add_anim_state_to_machine")), EHttpServerRequestVerbs::VERB_POST, + QueuedHandler(TEXT("add_anim_state_to_machine"))); + Router->BindRoute(FHttpPath(TEXT("/api/remove_anim_state_from_machine")), EHttpServerRequestVerbs::VERB_POST, + QueuedHandler(TEXT("remove_anim_state_from_machine"))); + Router->BindRoute(FHttpPath(TEXT("/api/add_anim_state_transition")), EHttpServerRequestVerbs::VERB_POST, + QueuedHandler(TEXT("add_anim_state_transition"))); + Router->BindRoute(FHttpPath(TEXT("/api/set_anim_transition_rule")), EHttpServerRequestVerbs::VERB_POST, + QueuedHandler(TEXT("set_anim_transition_rule"))); + Router->BindRoute(FHttpPath(TEXT("/api/add_anim_graph_node")), EHttpServerRequestVerbs::VERB_POST, + QueuedHandler(TEXT("add_anim_graph_node"))); + Router->BindRoute(FHttpPath(TEXT("/api/add_anim_state_machine")), EHttpServerRequestVerbs::VERB_POST, + QueuedHandler(TEXT("add_anim_state_machine"))); + Router->BindRoute(FHttpPath(TEXT("/api/set_anim_state_animation")), EHttpServerRequestVerbs::VERB_POST, + QueuedHandler(TEXT("set_anim_state_animation"))); + Router->BindRoute(FHttpPath(TEXT("/api/list_anim_slot_names")), EHttpServerRequestVerbs::VERB_POST, + QueuedHandler(TEXT("list_anim_slot_names"))); + Router->BindRoute(FHttpPath(TEXT("/api/list_anim_sync_groups")), EHttpServerRequestVerbs::VERB_POST, + QueuedHandler(TEXT("list_anim_sync_groups"))); + Router->BindRoute(FHttpPath(TEXT("/api/create_blend_space_asset")), EHttpServerRequestVerbs::VERB_POST, + QueuedHandler(TEXT("create_blend_space_asset"))); + Router->BindRoute(FHttpPath(TEXT("/api/set_blend_space_sample_points")), EHttpServerRequestVerbs::VERB_POST, + QueuedHandler(TEXT("set_blend_space_sample_points"))); + Router->BindRoute(FHttpPath(TEXT("/api/set_anim_state_blend_space")), EHttpServerRequestVerbs::VERB_POST, + QueuedHandler(TEXT("set_anim_state_blend_space"))); // Build new-style handler registry from UMCPHandler subclasses and bind routes for each BuildMCPHandlerRegistry(); @@ -872,63 +872,63 @@ void FBlueprintMCPServer::RegisterHandlers() { // Mutation endpoints — wrapped in undo transactions by ProcessOneRequest() MutationEndpoints = { - TEXT("replace_function_calls"), - TEXT("change_variable_type"), - TEXT("change_function_param_type"), + TEXT("replace_function_calls_in_blueprint"), + TEXT("change_blueprint_variable_type"), + TEXT("change_function_parameter_type"), TEXT("remove_function_parameter"), TEXT("delete_asset"), - TEXT("connect_pins"), - TEXT("disconnect_pin"), - TEXT("refresh_all_nodes"), - TEXT("set_pin_default"), - TEXT("move_node"), + TEXT("connect_blueprint_pins"), + TEXT("disconnect_blueprint_pins"), + TEXT("refresh_all_nodes_in_graph"), + TEXT("set_pin_default_values"), + TEXT("set_node_positions"), TEXT("change_struct_node_type"), - TEXT("delete_node"), - TEXT("duplicate_nodes"), - TEXT("spawn_node"), + TEXT("delete_node_from_graph"), + TEXT("duplicate_nodes_in_graph"), + TEXT("spawn_nodes_in_graph"), TEXT("set_node_comment"), TEXT("rename_asset"), TEXT("reparent_blueprint"), - TEXT("set_blueprint_default"), - TEXT("create_blueprint"), - TEXT("create_graph"), - TEXT("delete_graph"), - TEXT("rename_graph"), - TEXT("add_variable"), - TEXT("remove_variable"), - TEXT("set_variable_metadata"), - TEXT("add_interface"), - TEXT("remove_interface"), + TEXT("set_class_default_value"), + TEXT("create_blueprint_asset"), + TEXT("create_blueprint_graph"), + TEXT("delete_blueprint_graph"), + TEXT("rename_blueprint_graph"), + TEXT("add_blueprint_variable"), + TEXT("remove_blueprint_variable"), + TEXT("set_blueprint_variable_metadata"), + TEXT("add_blueprint_interface"), + TEXT("remove_blueprint_interface"), TEXT("add_event_dispatcher"), TEXT("add_function_parameter"), - TEXT("add_component"), - TEXT("remove_component"), - TEXT("restore_graph"), - TEXT("create_struct"), - TEXT("create_enum"), - TEXT("add_struct_property"), - TEXT("remove_struct_property"), - TEXT("create_material"), + TEXT("add_blueprint_component"), + TEXT("remove_blueprint_component"), + TEXT("restore_blueprint_graph_from_snapshot"), + TEXT("create_struct_asset"), + TEXT("create_enum_asset"), + TEXT("add_struct_field"), + TEXT("remove_struct_field"), + TEXT("create_material_asset"), TEXT("set_material_property"), TEXT("add_material_expression"), TEXT("delete_material_expression"), - TEXT("connect_material_pins"), - TEXT("disconnect_material_pin"), - TEXT("set_expression_value"), - TEXT("move_material_expression"), - TEXT("create_material_instance"), + TEXT("connect_material_expression_pins"), + TEXT("disconnect_material_expression_pin"), + TEXT("set_material_expression_property"), + TEXT("set_material_expression_position"), + TEXT("create_material_instance_asset"), TEXT("set_material_instance_parameter"), TEXT("reparent_material_instance"), - TEXT("create_material_function"), - TEXT("restore_material_graph"), - TEXT("create_anim_blueprint"), - TEXT("add_anim_state"), - TEXT("remove_anim_state"), - TEXT("add_anim_transition"), - TEXT("set_transition_rule"), - TEXT("add_anim_node"), - TEXT("add_state_machine"), - TEXT("set_state_animation"), + TEXT("create_material_function_asset"), + TEXT("restore_material_graph_from_snapshot"), + TEXT("create_anim_blueprint_asset"), + TEXT("add_anim_state_to_machine"), + TEXT("remove_anim_state_from_machine"), + TEXT("add_anim_state_transition"), + TEXT("set_anim_transition_rule"), + TEXT("add_anim_graph_node"), + TEXT("add_anim_state_machine"), + TEXT("set_anim_state_animation"), }; // All handlers have uniform signature: void(const FJsonObject&, FJsonObject&) @@ -937,82 +937,82 @@ void FBlueprintMCPServer::RegisterHandlers() HandlerMap.Add(Name, [this, Fn](const FJsonObject* Json, FJsonObject* Result) { (this->*Fn)(Json, Result); }); }; - H(TEXT("rescan"), &FBlueprintMCPServer::HandleRescan); - H(TEXT("blueprint"), &FBlueprintMCPServer::HandleGetBlueprint); - H(TEXT("graph"), &FBlueprintMCPServer::HandleGetGraph); - H(TEXT("search"), &FBlueprintMCPServer::HandleSearch); - H(TEXT("references"), &FBlueprintMCPServer::HandleFindReferences); - H(TEXT("test_save"), &FBlueprintMCPServer::HandleTestSave); - H(TEXT("search_by_type"), &FBlueprintMCPServer::HandleSearchByType); - H(TEXT("change_variable_type"), &FBlueprintMCPServer::HandleChangeVariableType); - H(TEXT("change_function_param_type"), &FBlueprintMCPServer::HandleChangeFunctionParamType); + H(TEXT("rescan_asset_registry"), &FBlueprintMCPServer::HandleRescan); + H(TEXT("dump_blueprint"), &FBlueprintMCPServer::HandleGetBlueprint); + H(TEXT("dump_blueprint_graph"), &FBlueprintMCPServer::HandleGetGraph); + H(TEXT("search_within_blueprints"), &FBlueprintMCPServer::HandleSearch); + H(TEXT("find_asset_references"), &FBlueprintMCPServer::HandleFindReferences); + H(TEXT("test_save_blueprint_package"), &FBlueprintMCPServer::HandleTestSave); + H(TEXT("search_type_usage_in_blueprints"), &FBlueprintMCPServer::HandleSearchByType); + H(TEXT("change_blueprint_variable_type"), &FBlueprintMCPServer::HandleChangeVariableType); + H(TEXT("change_function_parameter_type"), &FBlueprintMCPServer::HandleChangeFunctionParamType); H(TEXT("remove_function_parameter"), &FBlueprintMCPServer::HandleRemoveFunctionParameter); - H(TEXT("get_pin_info"), &FBlueprintMCPServer::HandleGetPinInfo); - H(TEXT("check_pin_compatibility"), &FBlueprintMCPServer::HandleCheckPinCompatibility); - H(TEXT("list_classes"), &FBlueprintMCPServer::HandleListClasses); - H(TEXT("list_functions"), &FBlueprintMCPServer::HandleListFunctions); - H(TEXT("list_properties"), &FBlueprintMCPServer::HandleListProperties); - H(TEXT("validate_blueprint"), &FBlueprintMCPServer::HandleValidateBlueprint); - H(TEXT("validate_all_blueprints"), &FBlueprintMCPServer::HandleValidateAllBlueprints); + H(TEXT("get_pin_details"), &FBlueprintMCPServer::HandleGetPinInfo); + H(TEXT("check_pin_connection_compatibility"), &FBlueprintMCPServer::HandleCheckPinCompatibility); + H(TEXT("search_unreal_classes"), &FBlueprintMCPServer::HandleListClasses); + H(TEXT("list_class_functions"), &FBlueprintMCPServer::HandleListFunctions); + H(TEXT("list_class_properties"), &FBlueprintMCPServer::HandleListProperties); + H(TEXT("compile_blueprint"), &FBlueprintMCPServer::HandleValidateBlueprint); + H(TEXT("compile_all_blueprints"), &FBlueprintMCPServer::HandleValidateAllBlueprints); H(TEXT("reparent_blueprint"), &FBlueprintMCPServer::HandleReparentBlueprint); - H(TEXT("create_blueprint"), &FBlueprintMCPServer::HandleCreateBlueprint); - H(TEXT("create_graph"), &FBlueprintMCPServer::HandleCreateGraph); - H(TEXT("delete_graph"), &FBlueprintMCPServer::HandleDeleteGraph); - H(TEXT("rename_graph"), &FBlueprintMCPServer::HandleRenameGraph); - H(TEXT("add_variable"), &FBlueprintMCPServer::HandleAddVariable); - H(TEXT("remove_variable"), &FBlueprintMCPServer::HandleRemoveVariable); - H(TEXT("set_variable_metadata"), &FBlueprintMCPServer::HandleSetVariableMetadata); + H(TEXT("create_blueprint_asset"), &FBlueprintMCPServer::HandleCreateBlueprint); + H(TEXT("create_blueprint_graph"), &FBlueprintMCPServer::HandleCreateGraph); + H(TEXT("delete_blueprint_graph"), &FBlueprintMCPServer::HandleDeleteGraph); + H(TEXT("rename_blueprint_graph"), &FBlueprintMCPServer::HandleRenameGraph); + H(TEXT("add_blueprint_variable"), &FBlueprintMCPServer::HandleAddVariable); + H(TEXT("remove_blueprint_variable"), &FBlueprintMCPServer::HandleRemoveVariable); + H(TEXT("set_blueprint_variable_metadata"), &FBlueprintMCPServer::HandleSetVariableMetadata); H(TEXT("add_event_dispatcher"), &FBlueprintMCPServer::HandleAddEventDispatcher); H(TEXT("list_event_dispatchers"), &FBlueprintMCPServer::HandleListEventDispatchers); H(TEXT("add_function_parameter"), &FBlueprintMCPServer::HandleAddFunctionParameter); - H(TEXT("add_component"), &FBlueprintMCPServer::HandleAddComponent); - H(TEXT("remove_component"), &FBlueprintMCPServer::HandleRemoveComponent); - H(TEXT("list_components"), &FBlueprintMCPServer::HandleListComponents); - H(TEXT("snapshot_graph"), &FBlueprintMCPServer::HandleSnapshotGraph); - H(TEXT("diff_graph"), &FBlueprintMCPServer::HandleDiffGraph); - H(TEXT("restore_graph"), &FBlueprintMCPServer::HandleRestoreGraph); - H(TEXT("find_disconnected_pins"), &FBlueprintMCPServer::HandleFindDisconnectedPins); - H(TEXT("analyze_rebuild_impact"), &FBlueprintMCPServer::HandleAnalyzeRebuildImpact); - H(TEXT("create_struct"), &FBlueprintMCPServer::HandleCreateStruct); - H(TEXT("create_enum"), &FBlueprintMCPServer::HandleCreateEnum); - H(TEXT("add_struct_property"), &FBlueprintMCPServer::HandleAddStructProperty); - H(TEXT("remove_struct_property"), &FBlueprintMCPServer::HandleRemoveStructProperty); - H(TEXT("get_material"), &FBlueprintMCPServer::HandleGetMaterial); - H(TEXT("get_material_graph"), &FBlueprintMCPServer::HandleGetMaterialGraph); - H(TEXT("search_materials"), &FBlueprintMCPServer::HandleSearchMaterials); - H(TEXT("get_material_instance_params"),&FBlueprintMCPServer::HandleGetMaterialInstanceParameters); - H(TEXT("get_material_function"), &FBlueprintMCPServer::HandleGetMaterialFunction); - H(TEXT("describe_material"), &FBlueprintMCPServer::HandleDescribeMaterial); + H(TEXT("add_blueprint_component"), &FBlueprintMCPServer::HandleAddComponent); + H(TEXT("remove_blueprint_component"), &FBlueprintMCPServer::HandleRemoveComponent); + H(TEXT("list_blueprint_components"), &FBlueprintMCPServer::HandleListComponents); + H(TEXT("snapshot_blueprint_graph"), &FBlueprintMCPServer::HandleSnapshotGraph); + H(TEXT("diff_blueprint_graph_vs_snapshot"), &FBlueprintMCPServer::HandleDiffGraph); + H(TEXT("restore_blueprint_graph_from_snapshot"), &FBlueprintMCPServer::HandleRestoreGraph); + H(TEXT("find_pins_disconnected_since_snapshot"), &FBlueprintMCPServer::HandleFindDisconnectedPins); + H(TEXT("analyze_cpp_rebuild_impact"), &FBlueprintMCPServer::HandleAnalyzeRebuildImpact); + H(TEXT("create_struct_asset"), &FBlueprintMCPServer::HandleCreateStruct); + H(TEXT("create_enum_asset"), &FBlueprintMCPServer::HandleCreateEnum); + H(TEXT("add_struct_field"), &FBlueprintMCPServer::HandleAddStructProperty); + H(TEXT("remove_struct_field"), &FBlueprintMCPServer::HandleRemoveStructProperty); + H(TEXT("dump_material"), &FBlueprintMCPServer::HandleGetMaterial); + H(TEXT("dump_material_expression_graph"), &FBlueprintMCPServer::HandleGetMaterialGraph); + H(TEXT("search_within_materials"), &FBlueprintMCPServer::HandleSearchMaterials); + H(TEXT("dump_material_instance_parameters"),&FBlueprintMCPServer::HandleGetMaterialInstanceParameters); + H(TEXT("dump_material_function"), &FBlueprintMCPServer::HandleGetMaterialFunction); + H(TEXT("describe_material_in_english"), &FBlueprintMCPServer::HandleDescribeMaterial); H(TEXT("find_material_references"), &FBlueprintMCPServer::HandleFindMaterialReferences); - H(TEXT("create_material"), &FBlueprintMCPServer::HandleCreateMaterial); + H(TEXT("create_material_asset"), &FBlueprintMCPServer::HandleCreateMaterial); H(TEXT("set_material_property"), &FBlueprintMCPServer::HandleSetMaterialProperty); H(TEXT("add_material_expression"), &FBlueprintMCPServer::HandleAddMaterialExpression); H(TEXT("delete_material_expression"), &FBlueprintMCPServer::HandleDeleteMaterialExpression); - H(TEXT("connect_material_pins"), &FBlueprintMCPServer::HandleConnectMaterialPins); - H(TEXT("disconnect_material_pin"), &FBlueprintMCPServer::HandleDisconnectMaterialPin); - H(TEXT("set_expression_value"), &FBlueprintMCPServer::HandleSetExpressionValue); - H(TEXT("move_material_expression"), &FBlueprintMCPServer::HandleMoveMaterialExpression); - H(TEXT("create_material_instance"), &FBlueprintMCPServer::HandleCreateMaterialInstance); + H(TEXT("connect_material_expression_pins"), &FBlueprintMCPServer::HandleConnectMaterialPins); + H(TEXT("disconnect_material_expression_pin"), &FBlueprintMCPServer::HandleDisconnectMaterialPin); + H(TEXT("set_material_expression_property"), &FBlueprintMCPServer::HandleSetExpressionValue); + H(TEXT("set_material_expression_position"), &FBlueprintMCPServer::HandleMoveMaterialExpression); + H(TEXT("create_material_instance_asset"), &FBlueprintMCPServer::HandleCreateMaterialInstance); H(TEXT("set_material_instance_parameter"), &FBlueprintMCPServer::HandleSetMaterialInstanceParameter); H(TEXT("reparent_material_instance"), &FBlueprintMCPServer::HandleReparentMaterialInstance); - H(TEXT("create_material_function"), &FBlueprintMCPServer::HandleCreateMaterialFunction); - H(TEXT("snapshot_material_graph"), &FBlueprintMCPServer::HandleSnapshotMaterialGraph); - H(TEXT("diff_material_graph"), &FBlueprintMCPServer::HandleDiffMaterialGraph); - H(TEXT("restore_material_graph"), &FBlueprintMCPServer::HandleRestoreMaterialGraph); - H(TEXT("validate_material"), &FBlueprintMCPServer::HandleValidateMaterial); - H(TEXT("create_anim_blueprint"), &FBlueprintMCPServer::HandleCreateAnimBlueprint); - H(TEXT("add_anim_state"), &FBlueprintMCPServer::HandleAddAnimState); - H(TEXT("remove_anim_state"), &FBlueprintMCPServer::HandleRemoveAnimState); - H(TEXT("add_anim_transition"), &FBlueprintMCPServer::HandleAddAnimTransition); - H(TEXT("set_transition_rule"), &FBlueprintMCPServer::HandleSetTransitionRule); - H(TEXT("add_anim_node"), &FBlueprintMCPServer::HandleAddAnimNode); - H(TEXT("add_state_machine"), &FBlueprintMCPServer::HandleAddStateMachine); - H(TEXT("set_state_animation"), &FBlueprintMCPServer::HandleSetStateAnimation); - H(TEXT("list_anim_slots"), &FBlueprintMCPServer::HandleListAnimSlots); - H(TEXT("list_sync_groups"), &FBlueprintMCPServer::HandleListSyncGroups); - H(TEXT("create_blend_space"), &FBlueprintMCPServer::HandleCreateBlendSpace); - H(TEXT("set_blend_space_samples"), &FBlueprintMCPServer::HandleSetBlendSpaceSamples); - H(TEXT("set_state_blend_space"), &FBlueprintMCPServer::HandleSetStateBlendSpace); + H(TEXT("create_material_function_asset"), &FBlueprintMCPServer::HandleCreateMaterialFunction); + H(TEXT("snapshot_material_expression_graph"), &FBlueprintMCPServer::HandleSnapshotMaterialGraph); + H(TEXT("diff_material_graph_vs_snapshot"), &FBlueprintMCPServer::HandleDiffMaterialGraph); + H(TEXT("restore_material_graph_from_snapshot"), &FBlueprintMCPServer::HandleRestoreMaterialGraph); + H(TEXT("compile_material"), &FBlueprintMCPServer::HandleValidateMaterial); + H(TEXT("create_anim_blueprint_asset"), &FBlueprintMCPServer::HandleCreateAnimBlueprint); + H(TEXT("add_anim_state_to_machine"), &FBlueprintMCPServer::HandleAddAnimState); + H(TEXT("remove_anim_state_from_machine"), &FBlueprintMCPServer::HandleRemoveAnimState); + H(TEXT("add_anim_state_transition"), &FBlueprintMCPServer::HandleAddAnimTransition); + H(TEXT("set_anim_transition_rule"), &FBlueprintMCPServer::HandleSetTransitionRule); + H(TEXT("add_anim_graph_node"), &FBlueprintMCPServer::HandleAddAnimNode); + H(TEXT("add_anim_state_machine"), &FBlueprintMCPServer::HandleAddStateMachine); + H(TEXT("set_anim_state_animation"), &FBlueprintMCPServer::HandleSetStateAnimation); + H(TEXT("list_anim_slot_names"), &FBlueprintMCPServer::HandleListAnimSlots); + H(TEXT("list_anim_sync_groups"), &FBlueprintMCPServer::HandleListSyncGroups); + H(TEXT("create_blend_space_asset"), &FBlueprintMCPServer::HandleCreateBlendSpace); + H(TEXT("set_blend_space_sample_points"), &FBlueprintMCPServer::HandleSetBlendSpaceSamples); + H(TEXT("set_anim_state_blend_space"), &FBlueprintMCPServer::HandleSetStateBlendSpace); } void FBlueprintMCPServer::BuildMCPHandlerRegistry() diff --git a/Plugins/BlueprintMCP/Source/BlueprintMCP/Public/BlueprintMCPHandlers_DiffBlueprints.h b/Plugins/BlueprintMCP/Source/BlueprintMCP/Public/BlueprintMCPHandlers_DiffBlueprints.h index 987858dc..dfdb1980 100644 --- a/Plugins/BlueprintMCP/Source/BlueprintMCP/Public/BlueprintMCPHandlers_DiffBlueprints.h +++ b/Plugins/BlueprintMCP/Source/BlueprintMCP/Public/BlueprintMCPHandlers_DiffBlueprints.h @@ -4,8 +4,8 @@ #include "MCPHandler.h" #include "BlueprintMCPHandlers_DiffBlueprints.generated.h" -UCLASS(meta=(ToolName="diff_blueprints")) -class UMCPHandler_DiffBlueprints : public UObject, public IMCPHandler +UCLASS(meta=(ToolName="diff_two_blueprints")) +class UMCPHandler_DiffTwoBlueprints : public UObject, public IMCPHandler { GENERATED_BODY() diff --git a/Plugins/BlueprintMCP/Source/BlueprintMCP/Public/BlueprintMCPHandlers_Interfaces.h b/Plugins/BlueprintMCP/Source/BlueprintMCP/Public/BlueprintMCPHandlers_Interfaces.h index 5c197666..dde08d0d 100644 --- a/Plugins/BlueprintMCP/Source/BlueprintMCP/Public/BlueprintMCPHandlers_Interfaces.h +++ b/Plugins/BlueprintMCP/Source/BlueprintMCP/Public/BlueprintMCPHandlers_Interfaces.h @@ -4,8 +4,8 @@ #include "MCPHandler.h" #include "BlueprintMCPHandlers_Interfaces.generated.h" -UCLASS(meta=(ToolName="list_interfaces")) -class UMCPHandler_ListInterfaces : public UObject, public IMCPHandler +UCLASS(meta=(ToolName="list_blueprint_interfaces")) +class UMCPHandler_ListBlueprintInterfaces : public UObject, public IMCPHandler { GENERATED_BODY() @@ -22,8 +22,8 @@ public: virtual void Handle(const FJsonObject* Json, FJsonObject* Result) override; }; -UCLASS(meta=(ToolName="add_interface")) -class UMCPHandler_AddInterface : public UObject, public IMCPHandler +UCLASS(meta=(ToolName="add_blueprint_interface")) +class UMCPHandler_AddBlueprintInterface : public UObject, public IMCPHandler { GENERATED_BODY() @@ -43,8 +43,8 @@ public: virtual void Handle(const FJsonObject* Json, FJsonObject* Result) override; }; -UCLASS(meta=(ToolName="remove_interface")) -class UMCPHandler_RemoveInterface : public UObject, public IMCPHandler +UCLASS(meta=(ToolName="remove_blueprint_interface")) +class UMCPHandler_RemoveBlueprintInterface : public UObject, public IMCPHandler { GENERATED_BODY() diff --git a/Plugins/BlueprintMCP/Source/BlueprintMCP/Public/BlueprintMCPHandlers_Mutation.h b/Plugins/BlueprintMCP/Source/BlueprintMCP/Public/BlueprintMCPHandlers_Mutation.h index e13eb8a9..56c3ed34 100644 --- a/Plugins/BlueprintMCP/Source/BlueprintMCP/Public/BlueprintMCPHandlers_Mutation.h +++ b/Plugins/BlueprintMCP/Source/BlueprintMCP/Public/BlueprintMCPHandlers_Mutation.h @@ -22,8 +22,8 @@ struct FSetPinDefaultEntry FString Value; }; -UCLASS(meta=(ToolName="set_pin_default")) -class UMCPHandler_SetPinDefault : public UObject, public IMCPHandler +UCLASS(meta=(ToolName="set_pin_default_values")) +class UMCPHandler_SetPinDefaultValues : public UObject, public IMCPHandler { GENERATED_BODY() @@ -54,8 +54,8 @@ struct FMoveNodeEntry int32 Y = 0; }; -UCLASS(meta=(ToolName="move_node")) -class UMCPHandler_MoveNode : public UObject, public IMCPHandler +UCLASS(meta=(ToolName="set_node_positions")) +class UMCPHandler_SetNodePositions : public UObject, public IMCPHandler { GENERATED_BODY() @@ -74,8 +74,8 @@ public: virtual void Handle(const FJsonObject* Json, FJsonObject* Result) override; }; -UCLASS(meta=(ToolName="duplicate_nodes")) -class UMCPHandler_DuplicateNodes : public UObject, public IMCPHandler +UCLASS(meta=(ToolName="duplicate_nodes_in_graph")) +class UMCPHandler_DuplicateNodesInGraph : public UObject, public IMCPHandler { GENERATED_BODY() @@ -120,8 +120,8 @@ struct FSpawnNodeEntry int32 PosY = 0; }; -UCLASS(meta=(ToolName="spawn_node")) -class UMCPHandler_SpawnNode : public UObject, public IMCPHandler +UCLASS(meta=(ToolName="spawn_nodes_in_graph")) +class UMCPHandler_SpawnNodesInGraph : public UObject, public IMCPHandler { GENERATED_BODY() @@ -188,8 +188,8 @@ public: virtual void Handle(const FJsonObject* Json, FJsonObject* Result) override; }; -UCLASS(meta=(ToolName="delete_node")) -class UMCPHandler_DeleteNode : public UObject, public IMCPHandler +UCLASS(meta=(ToolName="delete_node_from_graph")) +class UMCPHandler_DeleteNodeFromGraph : public UObject, public IMCPHandler { GENERATED_BODY() @@ -227,8 +227,8 @@ struct FConnectPinsEntry FString TargetPinName; }; -UCLASS(meta=(ToolName="connect_pins")) -class UMCPHandler_ConnectPins : public UObject, public IMCPHandler +UCLASS(meta=(ToolName="connect_blueprint_pins")) +class UMCPHandler_ConnectBlueprintPins : public UObject, public IMCPHandler { GENERATED_BODY() @@ -265,8 +265,8 @@ struct FDisconnectPinEntry FString TargetPinName; }; -UCLASS(meta=(ToolName="disconnect_pin")) -class UMCPHandler_DisconnectPin : public UObject, public IMCPHandler +UCLASS(meta=(ToolName="disconnect_blueprint_pins")) +class UMCPHandler_DisconnectBlueprintPins : public UObject, public IMCPHandler { GENERATED_BODY() @@ -286,8 +286,8 @@ public: virtual void Handle(const FJsonObject* Json, FJsonObject* Result) override; }; -UCLASS(meta=(ToolName="replace_function_calls")) -class UMCPHandler_ReplaceFunctionCalls : public UObject, public IMCPHandler +UCLASS(meta=(ToolName="replace_function_calls_in_blueprint")) +class UMCPHandler_ReplaceFunctionCallsInBlueprint : public UObject, public IMCPHandler { GENERATED_BODY() @@ -334,8 +334,8 @@ public: virtual void Handle(const FJsonObject* Json, FJsonObject* Result) override; }; -UCLASS(meta=(ToolName="refresh_all_nodes")) -class UMCPHandler_RefreshAllNodes : public UObject, public IMCPHandler +UCLASS(meta=(ToolName="refresh_all_nodes_in_graph")) +class UMCPHandler_RefreshAllNodesInGraph : public UObject, public IMCPHandler { GENERATED_BODY() @@ -396,8 +396,8 @@ public: virtual void Handle(const FJsonObject* Json, FJsonObject* Result) override; }; -UCLASS(meta=(ToolName="set_blueprint_default")) -class UMCPHandler_SetBlueprintDefault : public UObject, public IMCPHandler +UCLASS(meta=(ToolName="set_class_default_value")) +class UMCPHandler_SetClassDefaultValue : public UObject, public IMCPHandler { GENERATED_BODY() @@ -420,8 +420,8 @@ public: virtual void Handle(const FJsonObject* Json, FJsonObject* Result) override; }; -UCLASS(meta=(ToolName="search_node_types")) -class UMCPHandler_SearchNodeTypes : public UObject, public IMCPHandler +UCLASS(meta=(ToolName="search_spawnable_node_types")) +class UMCPHandler_SearchSpawnableNodeTypes : public UObject, public IMCPHandler { GENERATED_BODY() diff --git a/Plugins/BlueprintMCP/endpoint-rename-plan.md b/Plugins/BlueprintMCP/endpoint-rename-plan.md new file mode 100644 index 00000000..d6feca04 --- /dev/null +++ b/Plugins/BlueprintMCP/endpoint-rename-plan.md @@ -0,0 +1,206 @@ +# BlueprintMCP Endpoint Naming Plan + +Convention: every endpoint is `verb_noun`. Names should be descriptive enough that you can guess what the endpoint does without reading documentation. Verbs: +- **dump** — return the entire contents of a single object (blueprint, graph, material, etc.) +- **list** — enumerate assets or sub-elements from the asset registry (cheap, no loading) +- **search** — deep search that loads assets, inspects their contents, and returns matches +- **find** — look up references or locate specific items by criteria +- **create** — make a new asset/graph/struct/enum +- **add** — add a sub-element to an existing thing (variable, component, parameter, etc.) +- **remove/delete** — remove a sub-element or asset +- **set/change** — change a property value or type +- **rename** — rename something +- **connect/disconnect** — wire/unwire pins +- **validate/compile** — compile and report errors +- **snapshot/diff/restore** — capture, compare, and restore graph state + +## Blueprint — Read/Query + +| Current | Proposed | Description | +|---------|----------|-------------| +| `list` | `list_blueprint_assets` | List all blueprint and level blueprint assets from the asset registry (no loading). Optional `query` filters by name/path substring. Optional `parentClass` filters by parent class name. Returns name, path, and parent class for each. | +| `blueprint` | `dump_blueprint` | Load one blueprint by name and dump everything: variables, graph list, interfaces, and parent class. | +| `graph` | `dump_blueprint_graph` | Load one graph by blueprint name + graph name. Dumps all nodes with their pins, connections, positions, and metadata. | +| `search` | `search_within_blueprints` | Deep search: loads every blueprint, iterates all graphs/nodes, and finds nodes whose title, function name, event name, or variable name matches the query. Returns blueprint, graph, and node info for each match. | +| `references` | `find_asset_references` | Given an asset path, queries the asset registry for all packages that reference it. Separates results into blueprint referencers and other referencers. | +| `search_by_type` | `search_type_usage_in_blueprints` | Deep search: loads every blueprint and finds variables, function parameters, and pin types that use a given type name (struct, class, or enum). Returns usage location and context for each match. | +| `get_pin_info` | `get_pin_details` | Get detailed type and connection info for a specific pin (by blueprint, nodeId, pinName). | +| `check_pin_compatibility` | `check_pin_connection_compatibility` | Check whether two specific pins (source and target) can be connected. Returns compatibility and any error message. | +| `test_save` | `test_save_blueprint_package` | Diagnostic: load a blueprint and save its package with no modifications, to verify the save pipeline works. | + +## Blueprint — Discovery (Unreal reflection) + +| Current | Proposed | Description | +|---------|----------|-------------| +| `list_classes` | `search_unreal_classes` | Search all UClasses in the engine. Optional `query` filters by class name substring. Optional `parentClass` restricts to subclasses. Returns class name, path, parent, and flags. | +| `list_functions` | `list_class_functions` | List all UFunctions on a given class. Optional `query` filters by function name substring. Returns name, parameters, return type, and flags for each. | +| `list_properties` | `list_class_properties` | List all UProperties on a given class. Optional `query` filters by property name substring. Returns name, type, flags, and metadata for each. | + +## Blueprint — Validation + +| Current | Proposed | Description | +|---------|----------|-------------| +| `validate_blueprint` | `compile_blueprint` | Compile one blueprint and report any errors/warnings with graph, node, and message details. | +| `validate_all_blueprints` | `compile_all_blueprints` | Compile all blueprints (optional `query` to filter which ones). Returns per-blueprint pass/fail with error details. Supports pagination. | + +## Blueprint — Creation/Structure + +| Current | Proposed | Description | +|---------|----------|-------------| +| `create_blueprint` | `create_blueprint_asset` | Create a new Blueprint asset with a given name, path, and parent class. | +| `create_graph` | `create_blueprint_graph` | Create a new function or macro graph inside a blueprint. | +| `delete_graph` | `delete_blueprint_graph` | Delete a graph from a blueprint. | +| `rename_graph` | `rename_blueprint_graph` | Rename a graph inside a blueprint. | +| `reparent_blueprint` | `reparent_blueprint` | Change a blueprint's parent class. | +| `create_struct` | `create_struct_asset` | Create a new user-defined struct asset. | +| `create_enum` | `create_enum_asset` | Create a new user-defined enum asset. | +| `add_struct_property` | `add_struct_field` | Add a field to a user-defined struct. | +| `remove_struct_property` | `remove_struct_field` | Remove a field from a user-defined struct. | + +## Blueprint — Variables + +| Current | Proposed | Description | +|---------|----------|-------------| +| `add_variable` | `add_blueprint_variable` | Add a variable to a blueprint with a given name and type. | +| `remove_variable` | `remove_blueprint_variable` | Remove a variable from a blueprint by name. | +| `change_variable_type` | `change_blueprint_variable_type` | Change an existing blueprint variable's type. | +| `set_variable_metadata` | `set_blueprint_variable_metadata` | Set variable metadata (category, tooltip, replication, etc.). | + +## Blueprint — Functions/Parameters + +| Current | Proposed | Description | +|---------|----------|-------------| +| `add_function_parameter` | `add_function_parameter` | Add an input or output parameter to a function graph. | +| `remove_function_parameter` | `remove_function_parameter` | Remove a parameter from a function graph. | +| `change_function_param_type` | `change_function_parameter_type` | Change the type of an existing function parameter. | + +## Blueprint — Event Dispatchers + +| Current | Proposed | Description | +|---------|----------|-------------| +| `add_event_dispatcher` | `add_event_dispatcher` | Add an event dispatcher to a blueprint. | +| `list_event_dispatchers` | `list_event_dispatchers` | List all event dispatchers on a blueprint with their delegate signatures. | + +## Blueprint — Components + +| Current | Proposed | Description | +|---------|----------|-------------| +| `add_component` | `add_blueprint_component` | Add a component to a blueprint's component hierarchy. | +| `remove_component` | `remove_blueprint_component` | Remove a component from a blueprint. | +| `list_components` | `list_blueprint_components` | List all components in a blueprint's component hierarchy. | + +## Blueprint — Interfaces (new-style) + +| Current | Proposed | Description | +|---------|----------|-------------| +| `list_interfaces` | `list_blueprint_interfaces` | List all interfaces implemented by a blueprint, with the function stubs each provides. | +| `add_interface` | `add_blueprint_interface` | Add an interface implementation to a blueprint. Creates function stub graphs. | +| `remove_interface` | `remove_blueprint_interface` | Remove an interface implementation from a blueprint. Optionally preserves function graphs. | + +## Blueprint — Node Mutation (new-style) + +| Current | Proposed | Description | +|---------|----------|-------------| +| `search_node_types` | `search_spawnable_node_types` | Search the blueprint action database (the right-click menu) for spawnable node types matching a query string. Returns full action names like "Utilities\|Flow Control\|Branch". | +| `spawn_node` | `spawn_node_in_graph` | Create one or more nodes in a graph by exact action name (from search_spawnable_node_types). Invokes the spawner and returns the new node details. | +| `delete_node` | `delete_node_from_graph` | Delete a node from a graph by GUID. | +| `move_node` | `set_node_position` | Set a node's X/Y position in the graph editor. | +| `duplicate_nodes` | `duplicate_nodes_in_graph` | Duplicate one or more nodes within a graph. | +| `connect_pins` | `connect_blueprint_pins` | Connect two pins (by blueprint, source node+pin, target node+pin). | +| `disconnect_pin` | `disconnect_blueprint_pin` | Break connections on a pin (all connections, or a specific one). | +| `set_pin_default` | `set_pin_default_value` | Set a pin's default value string. | +| `get_node_comment` | `get_node_comment` | Get the comment text on a node. | +| `set_node_comment` | `set_node_comment` | Set or clear the comment text on a node. | +| `replace_function_calls` | `replace_function_calls_in_blueprint` | Bulk-replace all calls to one function with calls to another across a blueprint. | +| `refresh_all_nodes` | `refresh_all_nodes_in_graph` | Refresh (reconstruct) all nodes in a graph to pick up signature changes. | +| `change_struct_node_type` | `change_struct_node_type` | Change which struct a Break/Make/Set-Members node operates on. | +| `set_blueprint_default` | `set_class_default_value` | Set a property value on the blueprint's Class Default Object (CDO). | +| `rename_asset` | `rename_asset` | Rename or move an asset to a new name/path. | +| `delete_asset` | `delete_asset` | Delete an asset from the project. | +| `diff_blueprints` | `diff_two_blueprints` | Compare two blueprints and return structural differences (added/removed/changed nodes, connections, variables). | + +## Blueprint — Snapshots + +| Current | Proposed | Description | +|---------|----------|-------------| +| `snapshot_graph` | `snapshot_blueprint_graph` | Capture a snapshot of a blueprint's graphs (nodes and connections) for later diffing or restore. | +| `diff_graph` | `diff_blueprint_graph_vs_snapshot` | Diff the current state of a blueprint's graphs against a previously captured snapshot. Returns added/removed/changed nodes and connections. | +| `restore_graph` | `restore_blueprint_graph_from_snapshot` | Restore a blueprint's graphs to the state captured in a snapshot (recreates nodes and connections). | +| `find_disconnected_pins` | `find_pins_disconnected_since_snapshot` | Compare current graphs against a snapshot and find pins that were previously connected but are now disconnected. | +| `analyze_rebuild_impact` | `analyze_cpp_rebuild_impact` | Given a C++ module name, find all blueprints that use structs/classes from that module and report which nodes/pins would be affected by a rebuild. | + +## Materials — Read + +| Current | Proposed | Description | +|---------|----------|-------------| +| `materials` | `list_material_assets` | List all material and material instance assets from the asset registry (no loading). Optional `query` filters by name/path substring. Optional `type` filters to "material" or "instance" only. | +| `material` | `dump_material` | Load one material by name and dump everything: properties (domain, blend mode, shading model, two-sided, etc.) and expression summary. | +| `material_graph` | `dump_material_expression_graph` | Load one material and dump its full expression graph: every expression node with type, position, parameter values, and all pin connections. | +| `describe_material` | `describe_material_in_english` | Load a material and generate a human-readable text description by tracing the expression graph backwards from each material output pin. | +| `search_materials` | `search_within_materials` | Deep search: loads every material, inspects expression nodes, and finds materials/expressions whose name, class, description, or parameter name matches the query. | +| `material_references` | `find_material_references` | Given a material name, query the asset registry for all assets that reference it. | + +## Materials — Mutation + +| Current | Proposed | Description | +|---------|----------|-------------| +| `create_material` | `create_material_asset` | Create a new material asset. | +| `set_material_property` | `set_material_property` | Set a top-level material property (blend mode, shading model, two-sided, etc.). | +| `add_material_expression` | `add_material_expression` | Add a material expression node to a material's graph. | +| `delete_material_expression` | `delete_material_expression` | Remove a material expression node from a material's graph. | +| `connect_material_pins` | `connect_material_expression_pins` | Connect two expression pins in a material graph. | +| `disconnect_material_pin` | `disconnect_material_expression_pin` | Disconnect a pin in a material graph. | +| `set_expression_value` | `set_material_expression_property` | Set a property on a material expression node (e.g. constant value, texture, parameter name). | +| `move_material_expression` | `set_material_expression_position` | Set X/Y position of a material expression in the graph editor. | +| `validate_material` | `compile_material` | Compile a material and report errors. | + +## Material Instances + +| Current | Proposed | Description | +|---------|----------|-------------| +| `create_material_instance` | `create_material_instance_asset` | Create a new material instance constant with a given parent material. | +| `set_material_instance_parameter` | `set_material_instance_parameter` | Set a parameter override on a material instance (scalar, vector, texture, etc.). | +| `material_instance_params` | `dump_material_instance_parameters` | Dump all parameter values on a material instance, showing both overridden and inherited values. | +| `reparent_material_instance` | `reparent_material_instance` | Change a material instance's parent material. | + +## Material Functions + +| Current | Proposed | Description | +|---------|----------|-------------| +| `material_functions` | `list_material_function_assets` | List all material function assets from the asset registry. Optional `query` filters by name/path substring. | +| `material_function` | `dump_material_function` | Load one material function and dump its expressions, inputs, and outputs. | +| `create_material_function` | `create_material_function_asset` | Create a new material function asset. | + +## Material Snapshots + +| Current | Proposed | Description | +|---------|----------|-------------| +| `snapshot_material_graph` | `snapshot_material_expression_graph` | Capture a snapshot of a material's expression graph. | +| `diff_material_graph` | `diff_material_graph_vs_snapshot` | Diff a material's current expression graph against a snapshot. | +| `restore_material_graph` | `restore_material_graph_from_snapshot` | Restore a material's expression graph from a snapshot. | + +## Animation Blueprints + +| Current | Proposed | Description | +|---------|----------|-------------| +| `create_anim_blueprint` | `create_anim_blueprint_asset` | Create a new Animation Blueprint asset with a given skeleton. | +| `add_anim_state` | `add_anim_state_to_machine` | Add a state node to a state machine graph. | +| `remove_anim_state` | `remove_anim_state_from_machine` | Remove a state node from a state machine graph. | +| `add_anim_transition` | `add_anim_state_transition` | Add a transition between two states in a state machine. | +| `set_transition_rule` | `set_anim_transition_rule` | Set the boolean condition expression for a state machine transition. | +| `add_anim_node` | `add_anim_graph_node` | Add an animation node (sequence player, blend space player, etc.) to a state's graph. | +| `add_state_machine` | `add_anim_state_machine` | Add a state machine sub-graph to an anim blueprint's AnimGraph. | +| `set_state_animation` | `set_anim_state_animation` | Set which animation sequence a state plays. | +| `list_anim_slots` | `list_anim_slot_names` | List all animation slot names available in the skeleton's slot groups. | +| `list_sync_groups` | `list_anim_sync_groups` | List all animation sync groups defined in the project. | +| `create_blend_space` | `create_blend_space_asset` | Create a new Blend Space asset. | +| `set_blend_space_samples` | `set_blend_space_sample_points` | Set the sample points (animation + coordinates) on a blend space. | +| `set_state_blend_space` | `set_anim_state_blend_space` | Set a state to play a blend space instead of a single animation. | + +## System + +| Current | Proposed | Description | +|---------|----------|-------------| +| `health` | `health` | Returns server status, mode, and asset counts. Answered on HTTP thread, no game-thread access. | +| `rescan` | `rescan_asset_registry` | Re-scan the asset registry and refresh all cached asset lists. | +| `shutdown` | `shutdown` | Request graceful engine exit. Only available in commandlet mode. |