diff --git a/axhub-tool-core/src/main/java/io/shinhanlife/axhub/biz/mcp/tool/annotation/McpFunction.java b/axhub-tool-core/src/main/java/io/shinhanlife/axhub/biz/mcp/tool/annotation/McpFunction.java index d4a92a4..c9d20de 100644 --- a/axhub-tool-core/src/main/java/io/shinhanlife/axhub/biz/mcp/tool/annotation/McpFunction.java +++ b/axhub-tool-core/src/main/java/io/shinhanlife/axhub/biz/mcp/tool/annotation/McpFunction.java @@ -13,4 +13,7 @@ public @interface McpFunction { // 추가: 해당 함수가 요구하는 비즈니스 파라미터(JSON 형태의 properties)를 정의 String parameterSchema() default "{}"; + + // 추가: Redis 자동 등록 및 Heartbeat 대상 여부 제어 + boolean register() default true; } diff --git a/axhub-tool-core/src/main/java/io/shinhanlife/axhub/biz/mcp/tool/config/McpProperties.java b/axhub-tool-core/src/main/java/io/shinhanlife/axhub/biz/mcp/tool/config/McpProperties.java index a99a2ba..72b5387 100644 --- a/axhub-tool-core/src/main/java/io/shinhanlife/axhub/biz/mcp/tool/config/McpProperties.java +++ b/axhub-tool-core/src/main/java/io/shinhanlife/axhub/biz/mcp/tool/config/McpProperties.java @@ -18,5 +18,6 @@ public class McpProperties { private String description; private String prompt; private String mappingId; + private Boolean register; } } 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 9283d3b..a9da007 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 @@ -63,6 +63,12 @@ public class ToolRegistryHeartbeatSender { prop = mcpProperties.getFunctions().get(functionAnnotation.name()); } + boolean isRegister = prop != null && prop.getRegister() != null ? prop.getRegister() : functionAnnotation.register(); + if (!isRegister) { + log.info(" [HeartbeatSender] '{}' 툴은 설정에 의해 외부 등록(Redis) 대상에서 제외되었습니다.", functionAnnotation.name()); + continue; + } + ToolMetadata meta = new ToolMetadata(); meta.setToolName(functionAnnotation.name()); meta.setDescription(prop != null && prop.getDescription() != null ? prop.getDescription() : functionAnnotation.description());