diff --git a/axhub-gateway/src/main/java/io/shinhanlife/axhub/biz/mcp/gateway/service/ToolPlanner.java b/axhub-gateway/src/main/java/io/shinhanlife/axhub/biz/mcp/gateway/service/ToolPlanner.java
index dab3f77..1e7d3a3 100644
--- a/axhub-gateway/src/main/java/io/shinhanlife/axhub/biz/mcp/gateway/service/ToolPlanner.java
+++ b/axhub-gateway/src/main/java/io/shinhanlife/axhub/biz/mcp/gateway/service/ToolPlanner.java
@@ -2,6 +2,7 @@ package io.shinhanlife.axhub.biz.mcp.gateway.service;
import io.shinhanlife.axhub.common.mcp.security.SecurityProperties;
import io.shinhanlife.axhub.biz.mcp.gateway.registry.RedisRegistryService;
+import io.shinhanlife.axhub.biz.mcp.gateway.dto.ToolMetadata;
import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j;
import org.springframework.stereotype.Component;
@@ -36,8 +37,17 @@ public class ToolPlanner {
var toolMetadata = redisRegistryService.getTool(toolName);
if (toolMetadata == null) {
- log.warn(" [Planner] 등록되지 않은 툴 요청: {}", toolName);
- throw new RuntimeException("해당 툴(" + toolName + ")이 레지스트리에 존재하지 않습니다.");
+ log.warn(" [Planner] 등록되지 않은 툴 요청: {}. 레지스트리를 참조하지 않고 강제 연동 모드로 전환합니다.", toolName);
+ // 히든 툴(register=false)에 대한 강제 라우팅 폴백
+ String fallbackPodUrl = "http://tool-other:8084"; // 기본값 (get_template_file_url 등)
+ if (toolName.contains("email")) fallbackPodUrl = "http://tool-email:8083";
+ else if (toolName.contains("sms")) fallbackPodUrl = "http://tool-sms:8082";
+
+ toolMetadata = ToolMetadata.builder()
+ .toolName(toolName)
+ .integrationType("DIRECT")
+ .podUrl(fallbackPodUrl)
+ .build();
}
// 2-1. [신규] 도메인 그룹핑 기반 권한 검증
diff --git a/axhub-gateway/src/main/resources/static/playground.html b/axhub-gateway/src/main/resources/static/playground.html
index 93522f3..fcfeb8b 100644
--- a/axhub-gateway/src/main/resources/static/playground.html
+++ b/axhub-gateway/src/main/resources/static/playground.html
@@ -234,6 +234,21 @@
+
+
+