diff --git a/axhub-tool-core/src/main/java/io/shinhanlife/axhub/biz/mcp/tool/presentation/BusinessToolController.java b/axhub-tool-core/src/main/java/io/shinhanlife/axhub/biz/mcp/tool/presentation/BusinessToolController.java index 47fb72c..936615f 100644 --- a/axhub-tool-core/src/main/java/io/shinhanlife/axhub/biz/mcp/tool/presentation/BusinessToolController.java +++ b/axhub-tool-core/src/main/java/io/shinhanlife/axhub/biz/mcp/tool/presentation/BusinessToolController.java @@ -70,15 +70,15 @@ public class BusinessToolController { } } - // 1. 대상 Bean 및 Method 찾기 (ApplicationContext 활용) Map arguments = params != null ? (Map) params.get("arguments") : null; Object targetBean = null; Method targetMethod = null; McpFunction targetFunctionAnnotation = null; - Map toolBeans = applicationContext.getBeansWithAnnotation(McpTool.class); + // McpTool 어노테이션 기반 조회가 프록시 문제로 누락될 수 있으므로, 전체 빈을 순회하며 @McpFunction을 찾습니다. + Map allBeans = applicationContext.getBeansOfType(Object.class); outerLoop: - for (Object bean : toolBeans.values()) { + for (Object bean : allBeans.values()) { Class targetClass = AopUtils.getTargetClass(bean); for (Method method : targetClass.getDeclaredMethods()) { McpFunction mcpFunc = AnnotationUtils.findAnnotation(method, McpFunction.class); @@ -100,7 +100,7 @@ public class BusinessToolController { if (targetBean == null || targetMethod == null) { List availableFunctions = new ArrayList<>(); - for (Object bean : toolBeans.values()) { + for (Object bean : allBeans.values()) { Class targetCls = AopUtils.getTargetClass(bean); for (Method m : targetCls.getDeclaredMethods()) { McpFunction func = AnnotationUtils.findAnnotation(m, McpFunction.class); diff --git a/axhub-tool-core/src/main/java/io/shinhanlife/axhub/biz/mcp/tool/service/ToolRegistryHeartbeatSender.java b/axhub-tool-core/src/main/java/io/shinhanlife/axhub/biz/mcp/tool/service/ToolRegistryHeartbeatSender.java index 9081a52..4baa49f 100644 --- a/axhub-tool-core/src/main/java/io/shinhanlife/axhub/biz/mcp/tool/service/ToolRegistryHeartbeatSender.java +++ b/axhub-tool-core/src/main/java/io/shinhanlife/axhub/biz/mcp/tool/service/ToolRegistryHeartbeatSender.java @@ -68,8 +68,8 @@ public class ToolRegistryHeartbeatSender { } private void scanAndBuildMetadata() { - Map toolBeans = applicationContext.getBeansWithAnnotation(McpTool.class); - for (Object bean : toolBeans.values()) { + Map allBeans = applicationContext.getBeansOfType(Object.class); + for (Object bean : allBeans.values()) { Class targetClass = AopUtils.getTargetClass(bean); McpTool toolAnnotation = AnnotationUtils.findAnnotation(targetClass, McpTool.class); diff --git a/axhub-tool-other/src/main/java/io/shinhanlife/axhub/biz/mcp/tool/service/TemplateUtilityService.java b/axhub-tool-other/src/main/java/io/shinhanlife/axhub/biz/mcp/tool/service/TemplateUtilityService.java index e1c1680..0f91ec9 100644 --- a/axhub-tool-other/src/main/java/io/shinhanlife/axhub/biz/mcp/tool/service/TemplateUtilityService.java +++ b/axhub-tool-other/src/main/java/io/shinhanlife/axhub/biz/mcp/tool/service/TemplateUtilityService.java @@ -4,9 +4,11 @@ import io.shinhanlife.axhub.biz.mcp.tool.annotation.McpFunction; import io.shinhanlife.axhub.biz.mcp.tool.annotation.McpTool; import io.shinhanlife.axhub.biz.mcp.tool.dto.TemplateDownloadReq; import lombok.extern.slf4j.Slf4j; +import org.springframework.stereotype.Service; import java.util.Map; @Slf4j +@Service @McpTool( routingType = "HTTP", group = "COMMON"