From fb5312d24213fcaea124459c048c149951050b2c Mon Sep 17 00:00:00 2001 From: jade Date: Thu, 9 Jul 2026 11:25:53 +0900 Subject: [PATCH] fix(core): resolve Spring AOP proxy masking @McpFunction annotations --- .../biz/mcp/tool/presentation/BusinessToolController.java | 3 ++- .../biz/mcp/tool/service/ToolRegistryHeartbeatSender.java | 5 +++-- 2 files changed, 5 insertions(+), 3 deletions(-) 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 76e3cfd..830d025 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 @@ -76,7 +76,8 @@ public class BusinessToolController { Map toolBeans = applicationContext.getBeansWithAnnotation(McpTool.class); outerLoop: for (Object bean : toolBeans.values()) { - for (Method method : bean.getClass().getDeclaredMethods()) { + Class userClass = org.springframework.util.ClassUtils.getUserClass(bean); + for (Method method : userClass.getDeclaredMethods()) { McpFunction mcpFunc = method.getAnnotation(McpFunction.class); if (mcpFunc != null) { String baseName = mcpFunc.name(); 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 145dde8..f2ed605 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 @@ -67,9 +67,10 @@ public class ToolRegistryHeartbeatSender { private void scanAndBuildMetadata() { Map toolBeans = applicationContext.getBeansWithAnnotation(McpTool.class); for (Object bean : toolBeans.values()) { - McpTool toolAnnotation = bean.getClass().getAnnotation(McpTool.class); + Class userClass = org.springframework.util.ClassUtils.getUserClass(bean); + McpTool toolAnnotation = userClass.getAnnotation(McpTool.class); - for (Method method : bean.getClass().getDeclaredMethods()) { + for (Method method : userClass.getDeclaredMethods()) { McpFunction functionAnnotation = method.getAnnotation(McpFunction.class); if (functionAnnotation != null) { String baseName = functionAnnotation.name();