fix(core): resolve Spring AOP proxy masking @McpFunction annotations

This commit is contained in:
jade
2026-07-09 11:25:53 +09:00
parent 744a3d09af
commit fb5312d242
2 changed files with 5 additions and 3 deletions

View File

@@ -76,7 +76,8 @@ public class BusinessToolController {
Map<String, Object> toolBeans = applicationContext.getBeansWithAnnotation(McpTool.class); Map<String, Object> toolBeans = applicationContext.getBeansWithAnnotation(McpTool.class);
outerLoop: outerLoop:
for (Object bean : toolBeans.values()) { 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); McpFunction mcpFunc = method.getAnnotation(McpFunction.class);
if (mcpFunc != null) { if (mcpFunc != null) {
String baseName = mcpFunc.name(); String baseName = mcpFunc.name();

View File

@@ -67,9 +67,10 @@ public class ToolRegistryHeartbeatSender {
private void scanAndBuildMetadata() { private void scanAndBuildMetadata() {
Map<String, Object> toolBeans = applicationContext.getBeansWithAnnotation(McpTool.class); Map<String, Object> toolBeans = applicationContext.getBeansWithAnnotation(McpTool.class);
for (Object bean : toolBeans.values()) { 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); McpFunction functionAnnotation = method.getAnnotation(McpFunction.class);
if (functionAnnotation != null) { if (functionAnnotation != null) {
String baseName = functionAnnotation.name(); String baseName = functionAnnotation.name();