Refactor MCPHandler to be a UINTERFACE

This commit is contained in:
2026-03-06 14:28:24 -05:00
parent 896df949f7
commit 7e3a4d2fea
6 changed files with 41 additions and 35 deletions

View File

@@ -862,8 +862,9 @@ bool FBlueprintMCPServer::ProcessOneRequest()
GEditor->BeginTransaction(FText::FromString(FString::Printf(TEXT("BlueprintMCP: %s"), *Req->Endpoint)));
}
TStrongObjectPtr<UMCPHandler> Handler(NewObject<UMCPHandler>(GetTransientPackage(), *HandlerClass));
FString PopulateError = PopulateFromJson(Handler->GetClass(), Handler.Get(), Params.Get());
TStrongObjectPtr<UObject> HandlerObj(NewObject<UObject>(GetTransientPackage(), *HandlerClass));
IMCPHandler* Handler = Cast<IMCPHandler>(HandlerObj.Get());
FString PopulateError = PopulateFromJson(HandlerObj->GetClass(), HandlerObj.Get(), Params.Get());
if (PopulateError.IsEmpty())
{
Handler->Handle(Params.Get(), &*Result);
@@ -1057,11 +1058,13 @@ void FBlueprintMCPServer::RegisterHandlers()
void FBlueprintMCPServer::BuildMCPHandlerRegistry()
{
TArray<UClass*> HandlerClasses;
GetDerivedClasses(UMCPHandler::StaticClass(), HandlerClasses);
for (UClass* Class : HandlerClasses)
for (TObjectIterator<UClass> It; It; ++It)
{
UClass* Class = *It;
if (!Class->ImplementsInterface(UMCPHandler::StaticClass()))
{
continue;
}
if (Class->HasAnyClassFlags(CLASS_Abstract))
{
continue;