Files
integration/Plugins/BlueprintMCP/Source/BlueprintMCP/Handlers/Asset_FindReferences.h

70 lines
1.7 KiB
C
Raw Normal View History

2026-03-08 22:17:14 -04:00
#pragma once
#include "CoreMinimal.h"
#include "MCPServer.h"
2026-03-08 22:17:14 -04:00
#include "MCPHandler.h"
#include "MCPUtils.h"
2026-03-12 19:12:37 -04:00
#include "AssetRegistry/AssetData.h"
2026-03-08 22:17:14 -04:00
#include "AssetRegistry/IAssetRegistry.h"
2026-03-12 00:44:17 -04:00
#include "Asset_FindReferences.generated.h"
2026-03-08 22:17:14 -04:00
// ---------------------------------------------------------------------------
// ---------------------------------------------------------------------------
// ---------------------------------------------------------------------------
2026-03-15 19:32:09 -04:00
UCLASS()
2026-03-12 00:44:17 -04:00
class UMCP_Asset_FindReferences : public UObject, public IMCPHandler
2026-03-08 22:17:14 -04:00
{
GENERATED_BODY()
public:
UPROPERTY(meta=(Description="Asset to find references for"))
2026-03-15 17:20:31 -04:00
FString Asset;
2026-03-08 22:17:14 -04:00
virtual FString GetDescription() const override
{
return TEXT("Find all assets that reference a given asset.");
2026-03-08 22:17:14 -04:00
}
virtual void Handle() override
2026-03-08 22:17:14 -04:00
{
IAssetRegistry& Registry = *IAssetRegistry::Get();
// Verify the asset exists
2026-03-15 17:20:31 -04:00
FAssetData AssetData = Registry.GetAssetByObjectPath(FSoftObjectPath(Asset));
if (!AssetData.IsValid())
{
2026-03-15 17:20:31 -04:00
UMCPServer::Printf(TEXT("ERROR: Asset not found: %s\n"), *Asset);
return;
}
2026-03-08 22:17:14 -04:00
TArray<FName> Referencers;
2026-03-15 17:20:31 -04:00
Registry.GetReferencers(FName(*Asset), Referencers);
2026-03-08 22:17:14 -04:00
if (Referencers.Num() == 0)
2026-03-08 22:17:14 -04:00
{
UMCPServer::Print(TEXT("No referencers found.\n"));
return;
2026-03-08 22:17:14 -04:00
}
// Classify referencers by looking up their asset class
2026-03-08 22:17:14 -04:00
for (const FName& Ref : Referencers)
{
FString RefStr = Ref.ToString();
TArray<FAssetData> RefAssets;
Registry.GetAssetsByPackageName(Ref, RefAssets);
if (RefAssets.Num() > 0)
2026-03-08 22:17:14 -04:00
{
UMCPServer::Printf(TEXT("%s %s\n"),
*MCPUtils::FormatName(RefAssets[0].GetClass()),
*RefStr);
2026-03-08 22:17:14 -04:00
}
else
{
UMCPServer::Printf(TEXT("Unknown %s\n"), *RefStr);
2026-03-08 22:17:14 -04:00
}
}
}
};