items;
- @McpParameter(description = "True when additional results exist beyond this response.")
- @McpValidation(required = true)
+ @McpToolParam(description = "True when additional results exist beyond this response.")
+ @Schema(required = true)
private Boolean hasMore;
- @McpParameter(description = "Total number of matched claims.")
- @McpValidation(required = true, minimum = 0)
+ @McpToolParam(description = "Total number of matched claims.")
+ @Schema(required = true, nullable = true)
private Integer totalCount;
@Getter
@@ -85,20 +70,18 @@ public class ClaimSearchResponse {
@AllArgsConstructor
public static class ClaimSummary {
- @McpParameter(description = "Claim processing status code.")
- @McpValidation(required = true)
+ @McpToolParam(description = "Claim processing status code.")
private String status;
- @McpParameter(description = "User-readable label for status.")
- @McpValidation(required = true)
+ @McpToolParam(description = "User-readable label for status.")
private String statusLabel;
- @McpParameter(description = "Received date in YYYY-MM-DD format.")
- @McpValidation(required = true, format = "date")
+ @McpToolParam(description = "Received date in YYYY-MM-DD format.")
+ @Schema(required = true, format = "date")
private String receivedDate;
- @McpParameter(description = "Approved amount. Null before review; do not interpret null as zero.")
- @McpValidation(minimum = 0, nullable = true)
+ @McpToolParam(description = "Approved amount. Null before review; do not interpret null as zero.")
+ @Schema(nullable = true)
private Long approvedAmount;
}
}
\ No newline at end of file
diff --git a/dap-was-oth/src/main/java/io/shinhanlife/dap/mcc/biz/cmm/dto/ContractDetailRequest.java b/dap-was-oth/src/main/java/io/shinhanlife/dap/mcc/biz/cmm/dto/ContractDetailRequest.java
index 2105f28a9..3fe867200 100644
--- a/dap-was-oth/src/main/java/io/shinhanlife/dap/mcc/biz/cmm/dto/ContractDetailRequest.java
+++ b/dap-was-oth/src/main/java/io/shinhanlife/dap/mcc/biz/cmm/dto/ContractDetailRequest.java
@@ -1,10 +1,14 @@
package io.shinhanlife.dap.mcc.biz.cmm.dto;
+
+
+
+import io.swagger.v3.oas.annotations.media.Schema;
+import org.springframework.ai.mcp.annotation.McpToolParam;
import lombok.Builder;
import lombok.NoArgsConstructor;
import lombok.AllArgsConstructor;
-import io.shinhanlife.dap.lib.annotation.McpParameter;
import lombok.Getter;
import lombok.Setter;
@@ -29,9 +33,12 @@ import lombok.Setter;
@AllArgsConstructor
public class ContractDetailRequest {
- @McpParameter(description = "고객명", required = true)
+ @McpToolParam(description = "고객명", required = true)
+ @Schema(example = "홍길동")
private String customerName;
- @McpParameter(description = "조회할 계약 번호", required = true)
+
+@McpToolParam(description = "조회할 계약 번호", required = true)
+ @Schema(example = "1234567890")
private String contractId;
}
\ No newline at end of file
diff --git a/dap-was-oth/src/main/java/io/shinhanlife/dap/mcc/biz/cmm/dto/ContractStatusRequest.java b/dap-was-oth/src/main/java/io/shinhanlife/dap/mcc/biz/cmm/dto/ContractStatusRequest.java
index 44966664f..01281c427 100644
--- a/dap-was-oth/src/main/java/io/shinhanlife/dap/mcc/biz/cmm/dto/ContractStatusRequest.java
+++ b/dap-was-oth/src/main/java/io/shinhanlife/dap/mcc/biz/cmm/dto/ContractStatusRequest.java
@@ -1,10 +1,14 @@
package io.shinhanlife.dap.mcc.biz.cmm.dto;
+
+
+
+import io.swagger.v3.oas.annotations.media.Schema;
+import org.springframework.ai.mcp.annotation.McpToolParam;
import lombok.Builder;
import lombok.NoArgsConstructor;
import lombok.AllArgsConstructor;
-import io.shinhanlife.dap.lib.annotation.McpParameter;
import lombok.Getter;
import lombok.Setter;
@@ -29,9 +33,11 @@ import lombok.Setter;
@AllArgsConstructor
public class ContractStatusRequest {
- @McpParameter(description = "고객명", required = true)
+ @McpToolParam(description = "고객명", required = true)
+ @Schema(example = "홍길동")
private String customerName;
- @McpParameter(description = "조회할 계약 번호")
+
+@McpToolParam(description = "조회할 계약 번호")
private String contractId;
}
\ No newline at end of file
diff --git a/dap-was-oth/src/main/java/io/shinhanlife/dap/mcc/biz/cmm/dto/CustomerDetailRequest.java b/dap-was-oth/src/main/java/io/shinhanlife/dap/mcc/biz/cmm/dto/CustomerDetailRequest.java
index e1161919c..92c690d31 100644
--- a/dap-was-oth/src/main/java/io/shinhanlife/dap/mcc/biz/cmm/dto/CustomerDetailRequest.java
+++ b/dap-was-oth/src/main/java/io/shinhanlife/dap/mcc/biz/cmm/dto/CustomerDetailRequest.java
@@ -1,10 +1,14 @@
package io.shinhanlife.dap.mcc.biz.cmm.dto;
+
+
+
+import io.swagger.v3.oas.annotations.media.Schema;
+import org.springframework.ai.mcp.annotation.McpToolParam;
import lombok.Builder;
import lombok.NoArgsConstructor;
import lombok.AllArgsConstructor;
-import io.shinhanlife.dap.lib.annotation.McpParameter;
import lombok.Getter;
import lombok.Setter;
@@ -29,9 +33,11 @@ import lombok.Setter;
@AllArgsConstructor
public class CustomerDetailRequest {
- @McpParameter(description = "고객명", required = true)
+ @McpToolParam(description = "고객명", required = true)
+ @Schema(example = "홍길동")
private String customerName;
- @McpParameter(description = "고객 식별 번호 (CID)")
+
+@McpToolParam(description = "고객 식별 번호 (CID)")
private String customerId;
}
\ No newline at end of file
diff --git a/dap-was-oth/src/main/java/io/shinhanlife/dap/mcc/biz/cmm/dto/CustomerGradeRequest.java b/dap-was-oth/src/main/java/io/shinhanlife/dap/mcc/biz/cmm/dto/CustomerGradeRequest.java
index 53387ab27..8ba28a81c 100644
--- a/dap-was-oth/src/main/java/io/shinhanlife/dap/mcc/biz/cmm/dto/CustomerGradeRequest.java
+++ b/dap-was-oth/src/main/java/io/shinhanlife/dap/mcc/biz/cmm/dto/CustomerGradeRequest.java
@@ -1,10 +1,14 @@
package io.shinhanlife.dap.mcc.biz.cmm.dto;
+
+
+
+import io.swagger.v3.oas.annotations.media.Schema;
+import org.springframework.ai.mcp.annotation.McpToolParam;
import lombok.Builder;
import lombok.NoArgsConstructor;
import lombok.AllArgsConstructor;
-import io.shinhanlife.dap.lib.annotation.McpParameter;
import lombok.Getter;
import lombok.Setter;
@@ -29,9 +33,11 @@ import lombok.Setter;
@AllArgsConstructor
public class CustomerGradeRequest {
- @McpParameter(description = "고객 이름 (예: 김신한)", required = true)
+ @McpToolParam(description = "고객 이름 (예: 김신한)", required = true)
+ @Schema(example = "홍길동")
private String customerName;
- @McpParameter(description = "고객 식별 번호 (CID)")
+
+@McpToolParam(description = "고객 식별 번호 (CID)")
private String customerId;
}
\ No newline at end of file
diff --git a/dap-was-oth/src/main/java/io/shinhanlife/dap/mcc/biz/cmm/dto/LeaveCountRequest.java b/dap-was-oth/src/main/java/io/shinhanlife/dap/mcc/biz/cmm/dto/LeaveCountRequest.java
index 2fdb449c9..c6af49c08 100644
--- a/dap-was-oth/src/main/java/io/shinhanlife/dap/mcc/biz/cmm/dto/LeaveCountRequest.java
+++ b/dap-was-oth/src/main/java/io/shinhanlife/dap/mcc/biz/cmm/dto/LeaveCountRequest.java
@@ -1,10 +1,14 @@
package io.shinhanlife.dap.mcc.biz.cmm.dto;
+
+
+
+import io.swagger.v3.oas.annotations.media.Schema;
+import org.springframework.ai.mcp.annotation.McpToolParam;
import lombok.Builder;
import lombok.NoArgsConstructor;
import lombok.AllArgsConstructor;
-import io.shinhanlife.dap.lib.annotation.McpParameter;
import lombok.Getter;
import lombok.Setter;
@@ -29,6 +33,8 @@ import lombok.Setter;
@AllArgsConstructor
public class LeaveCountRequest {
- @McpParameter(description = "연차 내역을 조회할 사원 번호", required = true)
+ @McpToolParam(description = "연차 내역을 조회할 사원 번호", required = true)
+ @Schema(example = "EMP12345")
private String employeeId;
+
}
\ No newline at end of file
diff --git a/dap-was-oth/src/main/java/io/shinhanlife/dap/mcc/biz/cmm/dto/MciSampleStringResponse.java b/dap-was-oth/src/main/java/io/shinhanlife/dap/mcc/biz/cmm/dto/MciSampleStringResponse.java
index cd50b1122..441b10929 100644
--- a/dap-was-oth/src/main/java/io/shinhanlife/dap/mcc/biz/cmm/dto/MciSampleStringResponse.java
+++ b/dap-was-oth/src/main/java/io/shinhanlife/dap/mcc/biz/cmm/dto/MciSampleStringResponse.java
@@ -1,21 +1,5 @@
package io.shinhanlife.dap.mcc.biz.cmm.dto;
-/**
- * @package io.shinhanlife.dap.mcc.biz.cmm.dto
- * @className MciSampleStringResponse
- * @description AX HUB 시스템 처리 클래스
- * @author 0986406
- * @create 2026.09.01
- *
- * ---------- 개정이력 ----------
- * 수정일 수정자 수정내용
- * ---------- -------- ---------------------------
- * 2026.09.01 0986406 최초생성
- *
- *
- */
-
-
import com.fasterxml.jackson.annotation.JsonInclude;
import io.shinhanlife.glow.GlowMciFieldInfo;
import lombok.Data;
diff --git a/dap-was-oth/src/main/java/io/shinhanlife/dap/mcc/biz/cmm/dto/MciSampleTargetDto.java b/dap-was-oth/src/main/java/io/shinhanlife/dap/mcc/biz/cmm/dto/MciSampleTargetDto.java
index 523971dbf..6c11d39c0 100644
--- a/dap-was-oth/src/main/java/io/shinhanlife/dap/mcc/biz/cmm/dto/MciSampleTargetDto.java
+++ b/dap-was-oth/src/main/java/io/shinhanlife/dap/mcc/biz/cmm/dto/MciSampleTargetDto.java
@@ -1,21 +1,5 @@
package io.shinhanlife.dap.mcc.biz.cmm.dto;
-/**
- * @package io.shinhanlife.dap.mcc.biz.cmm.dto
- * @className MciSampleTargetDto
- * @description AX HUB 시스템 처리 클래스
- * @author 0986406
- * @create 2026.09.01
- *
- * ---------- 개정이력 ----------
- * 수정일 수정자 수정내용
- * ---------- -------- ---------------------------
- * 2026.09.01 0986406 최초생성
- *
- *
- */
-
-
import io.shinhanlife.glow.GlowMciFieldInfo;
import lombok.Data;
diff --git a/dap-was-oth/src/main/java/io/shinhanlife/dap/mcc/biz/cmm/dto/MetaCommonCodeRequest.java b/dap-was-oth/src/main/java/io/shinhanlife/dap/mcc/biz/cmm/dto/MetaCommonCodeRequest.java
index a28a3afee..5466af2c0 100644
--- a/dap-was-oth/src/main/java/io/shinhanlife/dap/mcc/biz/cmm/dto/MetaCommonCodeRequest.java
+++ b/dap-was-oth/src/main/java/io/shinhanlife/dap/mcc/biz/cmm/dto/MetaCommonCodeRequest.java
@@ -1,7 +1,11 @@
package io.shinhanlife.dap.mcc.biz.cmm.dto;
+
+
+
+import io.swagger.v3.oas.annotations.media.Schema;
+import org.springframework.ai.mcp.annotation.McpToolParam;
import com.fasterxml.jackson.annotation.JsonInclude;
-import io.shinhanlife.dap.lib.annotation.McpParameter;
import lombok.Data;
/**
@@ -21,12 +25,15 @@ import lombok.Data;
@Data
@JsonInclude(JsonInclude.Include.NON_NULL)
public class MetaCommonCodeRequest {
- @McpParameter(description = "통합코드 그룹 ID (예: GRP_SYS_01, GRP_COMM_CD)", required = false)
+ @McpToolParam(description = "통합코드 그룹 ID (예: GRP_SYS_01, GRP_COMM_CD)", required = false)
+ @Schema(example = "GRP_001")
private String groupCode;
- @McpParameter(description = "코드명 검색 키워드 (예: 사용, 상태)", required = false)
+
+@McpToolParam(description = "코드명 검색 키워드 (예: 사용, 상태)", required = false)
private String codeName;
- @McpParameter(description = "사용여부 (예: Y, N)", required = false)
+ @McpToolParam(description = "사용여부 (예: Y, N)", required = false)
+ @Schema(example = "Y")
private String useYn;
-}
+}
\ No newline at end of file
diff --git a/dap-was-oth/src/main/java/io/shinhanlife/dap/mcc/biz/cmm/dto/MetaTableRequest.java b/dap-was-oth/src/main/java/io/shinhanlife/dap/mcc/biz/cmm/dto/MetaTableRequest.java
index 1712fdec4..304dc6cda 100644
--- a/dap-was-oth/src/main/java/io/shinhanlife/dap/mcc/biz/cmm/dto/MetaTableRequest.java
+++ b/dap-was-oth/src/main/java/io/shinhanlife/dap/mcc/biz/cmm/dto/MetaTableRequest.java
@@ -1,7 +1,11 @@
package io.shinhanlife.dap.mcc.biz.cmm.dto;
+
+
+
+import io.swagger.v3.oas.annotations.media.Schema;
+import org.springframework.ai.mcp.annotation.McpToolParam;
import com.fasterxml.jackson.annotation.JsonInclude;
-import io.shinhanlife.dap.lib.annotation.McpParameter;
import lombok.Data;
/**
@@ -21,12 +25,16 @@ import lombok.Data;
@Data
@JsonInclude(JsonInclude.Include.NON_NULL)
public class MetaTableRequest {
- @McpParameter(description = "테이블 물리명 키워드 (예: TB_CUST_BAS, TB_CONT)", required = false)
+ @McpToolParam(description = "테이블 물리명 키워드 (예: TB_CUST_BAS, TB_CONT)", required = false)
+ @Schema(example = "TB_USER")
private String tableName;
- @McpParameter(description = "테이블 논리명(한글) 키워드 (예: 고객기본, 계약)", required = false)
+
+@McpToolParam(description = "테이블 논리명(한글) 키워드 (예: 고객기본, 계약)", required = false)
+ @Schema(example = "고객기본")
private String tableLogicalName;
- @McpParameter(description = "스키마/소유자명 (예: DAPADM, SHLOWN)", required = false)
+ @McpToolParam(description = "스키마/소유자명 (예: DAPADM, SHLOWN)", required = false)
+ @Schema(example = "DAPADM")
private String owner;
-}
+}
\ No newline at end of file
diff --git a/dap-was-oth/src/main/java/io/shinhanlife/dap/mcc/biz/cmm/dto/SampleStringRequest.java b/dap-was-oth/src/main/java/io/shinhanlife/dap/mcc/biz/cmm/dto/SampleStringRequest.java
index ef77b77c2..8553125ee 100644
--- a/dap-was-oth/src/main/java/io/shinhanlife/dap/mcc/biz/cmm/dto/SampleStringRequest.java
+++ b/dap-was-oth/src/main/java/io/shinhanlife/dap/mcc/biz/cmm/dto/SampleStringRequest.java
@@ -1,5 +1,7 @@
package io.shinhanlife.dap.mcc.biz.cmm.dto;
+
+import io.swagger.v3.oas.annotations.media.Schema;
import com.fasterxml.jackson.annotation.JsonInclude;
import lombok.Data;
@@ -20,5 +22,6 @@ import lombok.Data;
@Data
@JsonInclude(JsonInclude.Include.NON_NULL)
public class SampleStringRequest {
+ @Schema(example = "test query")
private String query;
-}
+}
\ No newline at end of file
diff --git a/dap-was-oth/src/main/java/io/shinhanlife/dap/mcc/biz/cmm/dto/TemplateDownloadRequest.java b/dap-was-oth/src/main/java/io/shinhanlife/dap/mcc/biz/cmm/dto/TemplateDownloadRequest.java
index 21ae5d343..96340c549 100644
--- a/dap-was-oth/src/main/java/io/shinhanlife/dap/mcc/biz/cmm/dto/TemplateDownloadRequest.java
+++ b/dap-was-oth/src/main/java/io/shinhanlife/dap/mcc/biz/cmm/dto/TemplateDownloadRequest.java
@@ -1,5 +1,7 @@
package io.shinhanlife.dap.mcc.biz.cmm.dto;
+
+import io.swagger.v3.oas.annotations.media.Schema;
import lombok.AccessLevel;
import lombok.AllArgsConstructor;
import lombok.Builder;
@@ -31,5 +33,6 @@ public class TemplateDownloadRequest {
/**
* 다운로드할 템플릿의 종류 ID (예: CUSTOMER_EXCEL, PRODUCT_PDF 등)
*/
+ @Schema(example = "TPL_001")
private String templateId;
}
\ No newline at end of file
diff --git a/dap-was-oth/src/main/java/io/shinhanlife/dap/mcc/biz/cmm/dto/VacationRegisterRequest.java b/dap-was-oth/src/main/java/io/shinhanlife/dap/mcc/biz/cmm/dto/VacationRegisterRequest.java
index bde48595e..184d0dea0 100644
--- a/dap-was-oth/src/main/java/io/shinhanlife/dap/mcc/biz/cmm/dto/VacationRegisterRequest.java
+++ b/dap-was-oth/src/main/java/io/shinhanlife/dap/mcc/biz/cmm/dto/VacationRegisterRequest.java
@@ -1,11 +1,14 @@
package io.shinhanlife.dap.mcc.biz.cmm.dto;
+
+
+
+import io.swagger.v3.oas.annotations.media.Schema;
+import org.springframework.ai.mcp.annotation.McpToolParam;
import lombok.Builder;
import lombok.NoArgsConstructor;
import lombok.AllArgsConstructor;
-import io.shinhanlife.dap.lib.annotation.McpParameter;
-import io.shinhanlife.dap.lib.annotation.McpValidation;
import lombok.Getter;
import lombok.Setter;
@@ -30,11 +33,12 @@ import lombok.Setter;
@AllArgsConstructor
public class VacationRegisterRequest {
- @McpParameter(description = "연차를 등록할 사원 번호", required = true)
- @McpValidation(pattern = "\\S")
+ @McpToolParam(description = "연차를 등록할 사원 번호", required = true)
+ @Schema(pattern = "\\S", example = "EMP12345")
private String employeeId;
- @McpParameter(description = "휴가 일자 (YYYY-MM-DD 형식)", required = true)
- @McpValidation(pattern = "^\\d{4}-\\d{2}-\\d{2}$")
+
+@McpToolParam(description = "휴가 일자 (YYYY-MM-DD 형식)", required = true)
+ @Schema(pattern = "^\\d{4}-\\d{2}-\\d{2}$", example = "2026-08-05")
private String date;
-}
+}
\ No newline at end of file
diff --git a/dap-was-oth/src/main/java/io/shinhanlife/dap/mcc/biz/cmm/usecase/BalanceUseCase.java b/dap-was-oth/src/main/java/io/shinhanlife/dap/mcc/biz/cmm/usecase/BalanceUseCase.java
index cec4d7116..8935f29ba 100644
--- a/dap-was-oth/src/main/java/io/shinhanlife/dap/mcc/biz/cmm/usecase/BalanceUseCase.java
+++ b/dap-was-oth/src/main/java/io/shinhanlife/dap/mcc/biz/cmm/usecase/BalanceUseCase.java
@@ -1,31 +1,12 @@
package io.shinhanlife.dap.mcc.biz.cmm.usecase;
-/**
- * @package io.shinhanlife.dap.mcc.biz.cmm.usecase
- * @className BalanceUseCase
- * @description AX HUB 시스템 처리 클래스
- * @author 0986406
- * @create 2026.09.01
- *
- * ---------- 개정이력 ----------
- * 수정일 수정자 수정내용
- * ---------- -------- ---------------------------
- * 2026.09.01 0986406 최초생성
- *
- *
- */
-
-import io.shinhanlife.dap.lib.annotation.McpTool;
-import io.shinhanlife.dap.lib.annotation.McpFunction;
+import org.springframework.ai.mcp.annotation.McpTool;
+import io.shinhanlife.dap.lib.annotation.ToolHint;
import io.shinhanlife.dap.mcc.biz.cmm.dto.*;
-@McpTool(routingType = "MCI", categoryKey = "cmm")
public interface BalanceUseCase {
- @McpFunction(register = false, displayName = "balance 툴", name = "oth.cmm.balance.inquiry",
- description = "고객의 계좌 잔액을 조회합니다.",
- prompt = "고객 계좌 잔액을 조회해줘.",
- mappingId = "ACC_001"
- )
+ @McpTool(name = "oth.cmm.balance.inquiry", title = "잔고 조회 툴", description = "고객의 계좌 잔액을 조회합니다.")
+ @ToolHint(register = false, categoryKey = "cmm", mappingId = "ACC_001")
Object execute(BalanceRequest req);
}
diff --git a/dap-was-oth/src/main/java/io/shinhanlife/dap/mcc/biz/cmm/usecase/BillingProcessUseCase.java b/dap-was-oth/src/main/java/io/shinhanlife/dap/mcc/biz/cmm/usecase/BillingProcessUseCase.java
index b2f0e5248..9d0fec93a 100644
--- a/dap-was-oth/src/main/java/io/shinhanlife/dap/mcc/biz/cmm/usecase/BillingProcessUseCase.java
+++ b/dap-was-oth/src/main/java/io/shinhanlife/dap/mcc/biz/cmm/usecase/BillingProcessUseCase.java
@@ -1,32 +1,13 @@
package io.shinhanlife.dap.mcc.biz.cmm.usecase;
-/**
- * @package io.shinhanlife.dap.mcc.biz.cmm.usecase
- * @className BillingProcessUseCase
- * @description AX HUB 시스템 처리 클래스
- * @author 0986406
- * @create 2026.09.01
- *
- * ---------- 개정이력 ----------
- * 수정일 수정자 수정내용
- * ---------- -------- ---------------------------
- * 2026.09.01 0986406 최초생성
- *
- *
- */
-
-
-import io.shinhanlife.dap.lib.annotation.McpTool;
-import io.shinhanlife.dap.lib.annotation.McpFunction;
+import org.springframework.ai.mcp.annotation.McpTool;
+import io.shinhanlife.dap.lib.annotation.ToolHint;
import io.shinhanlife.dap.mcc.biz.cmm.dto.*;
-@McpTool(
- routingType = "MCI",
- categoryKey = "cmm"
-)
public interface BillingProcessUseCase {
Object getStatus(BillingStatusRequest req);
- @McpFunction(register = false, displayName = "process 툴", name = "oth.cmm.billing.process", description = "청구 처리", prompt = "현재 접수된 청구건에 대한 심사 처리를 진행해.", mappingId = "BILL_002")
+ @McpTool(name = "oth.cmm.billing.process", title = "청구 프로세스 툴", description = "청구 처리")
+ @ToolHint(register = false, categoryKey = "cmm", mappingId = "BILL_002")
Object processBilling(BillingProcessRequest data);
}
diff --git a/dap-was-oth/src/main/java/io/shinhanlife/dap/mcc/biz/cmm/usecase/BondIssueUseCase.java b/dap-was-oth/src/main/java/io/shinhanlife/dap/mcc/biz/cmm/usecase/BondIssueUseCase.java
index b3286ee51..7c92a9494 100644
--- a/dap-was-oth/src/main/java/io/shinhanlife/dap/mcc/biz/cmm/usecase/BondIssueUseCase.java
+++ b/dap-was-oth/src/main/java/io/shinhanlife/dap/mcc/biz/cmm/usecase/BondIssueUseCase.java
@@ -1,32 +1,14 @@
package io.shinhanlife.dap.mcc.biz.cmm.usecase;
-/**
- * @package io.shinhanlife.dap.mcc.biz.cmm.usecase
- * @className BondIssueUseCase
- * @description AX HUB 시스템 처리 클래스
- * @author 0986406
- * @create 2026.09.01
- *
- * ---------- 개정이력 ----------
- * 수정일 수정자 수정내용
- * ---------- -------- ---------------------------
- * 2026.09.01 0986406 최초생성
- *
- *
- */
-
-import io.shinhanlife.dap.lib.annotation.McpTool;
-import io.shinhanlife.dap.lib.annotation.McpFunction;
+import org.springframework.ai.mcp.annotation.McpTool;
+import io.shinhanlife.dap.lib.annotation.ToolHint;
import io.shinhanlife.dap.mcc.biz.cmm.dto.*;
-@McpTool(
- routingType = "EAI",
- categoryKey = "cmm"
-)
public interface BondIssueUseCase {
Object check(BondCheckRequest req);
- @McpFunction(displayName = "issue 툴", name = "oth.cmm.bond.issue", register = false, description = "증권 발행 테스트1", prompt = "디지털 증권 발행 프로세스를 실행해.", mappingId = "BOND_002")
+ @McpTool(name = "oth.cmm.bond.issue", title = "채권 발행 툴", description = "증권 발행 테스트1")
+ @ToolHint(register = false, categoryKey = "cmm", mappingId = "BOND_002")
Object issue(BondIssueRequest data);
}
diff --git a/dap-was-oth/src/main/java/io/shinhanlife/dap/mcc/biz/cmm/usecase/ClaimSearchSchemaSampleUseCase.java b/dap-was-oth/src/main/java/io/shinhanlife/dap/mcc/biz/cmm/usecase/ClaimSearchSchemaSampleUseCase.java
index e24da5a85..c55be3a0c 100644
--- a/dap-was-oth/src/main/java/io/shinhanlife/dap/mcc/biz/cmm/usecase/ClaimSearchSchemaSampleUseCase.java
+++ b/dap-was-oth/src/main/java/io/shinhanlife/dap/mcc/biz/cmm/usecase/ClaimSearchSchemaSampleUseCase.java
@@ -1,42 +1,16 @@
package io.shinhanlife.dap.mcc.biz.cmm.usecase;
-/**
- * @package io.shinhanlife.dap.mcc.biz.cmm.usecase
- * @className ClaimSearchSchemaSampleUseCase
- * @description AX HUB 시스템 처리 클래스
- * @author 0986406
- * @create 2026.09.01
- *
- * ---------- 개정이력 ----------
- * 수정일 수정자 수정내용
- * ---------- -------- ---------------------------
- * 2026.09.01 0986406 최초생성
- *
- *
- */
+import org.springframework.ai.mcp.annotation.McpTool;
+import io.shinhanlife.dap.lib.annotation.ToolHint;
-
-import io.shinhanlife.dap.lib.annotation.McpFunction;
-import io.shinhanlife.dap.lib.annotation.McpTool;
import io.shinhanlife.dap.mcc.biz.cmm.dto.ClaimSearchRequest;
import io.shinhanlife.dap.mcc.biz.cmm.dto.ClaimSearchResponse;
-@McpTool(
- routingType = "DIRECT",
- categoryKey = "cmm"
-)
public interface ClaimSearchSchemaSampleUseCase {
- @McpFunction(
- register = false,
- displayName = "Claim search JSON Schema sample",
- name = "oth.cmm.claim.search",
- description = "Claim search Tool sample using input and output JSON Schema resources.",
- prompt = "Search an insurance claim by claim number or contract number.",
- inputSchemaResource = "classpath:tool-schemas/cmm/claim-search-resource-input-schema.json",
- outputSchemaResource = "classpath:tool-schemas/cmm/claim-search-resource-output-schema.json",
- readOnlyHint = true,
- idempotentHint = true
- )
+ @McpTool(name = "oth.cmm.claim.search", title = "청구 조회 스키마 샘플", description = "Claim search Tool sample using input and output JSON Schema resources.", annotations = @McpTool.McpAnnotations(readOnlyHint = true, idempotentHint = true))
+ @ToolHint(register = false, categoryKey = "cmm",
+ inputSchemaResource = "classpath:mcp/schema/claim-search-resource-input-schema.json",
+ outputSchemaResource = "classpath:mcp/schema/claim-search-resource-output-schema.json")
ClaimSearchResponse search(ClaimSearchRequest request);
-}
\ No newline at end of file
+}
diff --git a/dap-was-oth/src/main/java/io/shinhanlife/dap/mcc/biz/cmm/usecase/CommonUtilityUseCase.java b/dap-was-oth/src/main/java/io/shinhanlife/dap/mcc/biz/cmm/usecase/CommonUtilityUseCase.java
index 4f066b24a..b7d2d2eb9 100644
--- a/dap-was-oth/src/main/java/io/shinhanlife/dap/mcc/biz/cmm/usecase/CommonUtilityUseCase.java
+++ b/dap-was-oth/src/main/java/io/shinhanlife/dap/mcc/biz/cmm/usecase/CommonUtilityUseCase.java
@@ -1,35 +1,18 @@
package io.shinhanlife.dap.mcc.biz.cmm.usecase;
-/**
- * @package io.shinhanlife.dap.mcc.biz.cmm.usecase
- * @className CommonUtilityUseCase
- * @description AX HUB 시스템 처리 클래스
- * @author 0986406
- * @create 2026.09.01
- *
- * ---------- 개정이력 ----------
- * 수정일 수정자 수정내용
- * ---------- -------- ---------------------------
- * 2026.09.01 0986406 최초생성
- *
- *
- */
-
-import io.shinhanlife.dap.lib.annotation.McpTool;
-import io.shinhanlife.dap.lib.annotation.McpFunction;
+import org.springframework.ai.mcp.annotation.McpTool;
+import io.shinhanlife.dap.lib.annotation.ToolHint;
import io.shinhanlife.dap.mcc.biz.cmm.dto.*;
-@McpTool(
- routingType = "HTTP",
- categoryKey = "cmm"
-)
public interface CommonUtilityUseCase {
Object registerVacation(VacationRegisterRequest req);
- @McpFunction(register = false, displayName = "get_leave_count 툴", name = "oth.cmm.leave.count", description = "연차 갯수 조회", prompt = "현재 사용 가능한 남은 연차 일수를 알려줘.", mappingId = "HR_VAC_02")
+ @McpTool(name = "oth.cmm.leave.count", title = "공통 유틸리티 툴", description = "연차 갯수 조회")
+ @ToolHint(register = false, categoryKey = "cmm", mappingId = "HR_VAC_02")
Object getLeaveCount(LeaveCountRequest data);
- @McpFunction(register = false, displayName = "secret_tool 툴", name = "oth.cmm.secret.execute", description = "비공개 툴 테스트", prompt = "숨겨진 툴 강제 호출", mappingId = "SECRET_001", visible = false)
+ @McpTool(name = "oth.cmm.secret.execute", title = "공통 유틸리티 툴", description = "비공개 툴 테스트")
+ @ToolHint(register = false, categoryKey = "cmm", mappingId = "SECRET_001")
Object secretTool(LeaveCountRequest data);
}
diff --git a/dap-was-oth/src/main/java/io/shinhanlife/dap/mcc/biz/cmm/usecase/ContractInquiryUseCase.java b/dap-was-oth/src/main/java/io/shinhanlife/dap/mcc/biz/cmm/usecase/ContractInquiryUseCase.java
index ce1844310..f3eee3e53 100644
--- a/dap-was-oth/src/main/java/io/shinhanlife/dap/mcc/biz/cmm/usecase/ContractInquiryUseCase.java
+++ b/dap-was-oth/src/main/java/io/shinhanlife/dap/mcc/biz/cmm/usecase/ContractInquiryUseCase.java
@@ -1,32 +1,14 @@
package io.shinhanlife.dap.mcc.biz.cmm.usecase;
-/**
- * @package io.shinhanlife.dap.mcc.biz.cmm.usecase
- * @className ContractInquiryUseCase
- * @description AX HUB 시스템 처리 클래스
- * @author 0986406
- * @create 2026.09.01
- *
- * ---------- 개정이력 ----------
- * 수정일 수정자 수정내용
- * ---------- -------- ---------------------------
- * 2026.09.01 0986406 최초생성
- *
- *
- */
-
-import io.shinhanlife.dap.lib.annotation.McpTool;
-import io.shinhanlife.dap.lib.annotation.McpFunction;
+import org.springframework.ai.mcp.annotation.McpTool;
+import io.shinhanlife.dap.lib.annotation.ToolHint;
import io.shinhanlife.dap.mcc.biz.cmm.dto.*;
-@McpTool(
- routingType = "HTTP",
- categoryKey = "cmm"
-)
public interface ContractInquiryUseCase {
Object getStatus(ContractStatusRequest req);
- @McpFunction(register = false, displayName = "contract_detail 툴", name = "oth.cmm.contract.detail", description = "계약상세 조회", prompt = "김신한 고객의 계약 상세 내역을 알려줘.", mappingId = "CNTR_002")
+ @McpTool(name = "oth.cmm.contract.detail", title = "계약 상세조회 툴", description = "계약상세 조회")
+ @ToolHint(register = false, categoryKey = "cmm", mappingId = "CNTR_002")
Object getDetail(ContractDetailRequest data);
}
diff --git a/dap-was-oth/src/main/java/io/shinhanlife/dap/mcc/biz/cmm/usecase/CustomerInfoUseCase.java b/dap-was-oth/src/main/java/io/shinhanlife/dap/mcc/biz/cmm/usecase/CustomerInfoUseCase.java
index f7327bb99..1847f93c7 100644
--- a/dap-was-oth/src/main/java/io/shinhanlife/dap/mcc/biz/cmm/usecase/CustomerInfoUseCase.java
+++ b/dap-was-oth/src/main/java/io/shinhanlife/dap/mcc/biz/cmm/usecase/CustomerInfoUseCase.java
@@ -1,32 +1,14 @@
package io.shinhanlife.dap.mcc.biz.cmm.usecase;
-/**
- * @package io.shinhanlife.dap.mcc.biz.cmm.usecase
- * @className CustomerInfoUseCase
- * @description AX HUB 시스템 처리 클래스
- * @author 0986406
- * @create 2026.09.01
- *
- * ---------- 개정이력 ----------
- * 수정일 수정자 수정내용
- * ---------- -------- ---------------------------
- * 2026.09.01 0986406 최초생성
- *
- *
- */
-
-import io.shinhanlife.dap.lib.annotation.McpTool;
-import io.shinhanlife.dap.lib.annotation.McpFunction;
+import org.springframework.ai.mcp.annotation.McpTool;
+import io.shinhanlife.dap.lib.annotation.ToolHint;
import io.shinhanlife.dap.mcc.biz.cmm.dto.*;
-@McpTool(
- routingType = "TCP",
- categoryKey = "cmm"
-)
public interface CustomerInfoUseCase {
Object getGrade(CustomerGradeRequest req);
- @McpFunction(register = false, displayName = "detail 툴", name = "oth.cmm.customer.detail", description = "고객상세 정보 조회", prompt = "이 고객의 상세 기본정보(주소, 연락처 등)를 알려줘.", mappingId = "CRM_002")
+ @McpTool(name = "oth.cmm.customer.detail", title = "고객 상세조회 툴", description = "고객상세 정보 조회")
+ @ToolHint(register = false, categoryKey = "cmm", mappingId = "CRM_002")
Object getDetail(CustomerDetailRequest data);
}
diff --git a/dap-was-oth/src/main/java/io/shinhanlife/dap/mcc/biz/cmm/usecase/MetaCommonCodeUseCase.java b/dap-was-oth/src/main/java/io/shinhanlife/dap/mcc/biz/cmm/usecase/MetaCommonCodeUseCase.java
index dd5d7ddcb..8ff9ce8a8 100644
--- a/dap-was-oth/src/main/java/io/shinhanlife/dap/mcc/biz/cmm/usecase/MetaCommonCodeUseCase.java
+++ b/dap-was-oth/src/main/java/io/shinhanlife/dap/mcc/biz/cmm/usecase/MetaCommonCodeUseCase.java
@@ -1,7 +1,8 @@
package io.shinhanlife.dap.mcc.biz.cmm.usecase;
-import io.shinhanlife.dap.lib.annotation.McpFunction;
-import io.shinhanlife.dap.lib.annotation.McpTool;
+import org.springframework.ai.mcp.annotation.McpTool;
+import io.shinhanlife.dap.lib.annotation.ToolHint;
+
import io.shinhanlife.dap.mcc.biz.cmm.dto.MetaCommonCodeRequest;
/**
@@ -18,20 +19,8 @@ import io.shinhanlife.dap.mcc.biz.cmm.dto.MetaCommonCodeRequest;
*
*
*/
-@McpTool(
- routingType = "MCI",
- categoryKey = "cmm"
-)
public interface MetaCommonCodeUseCase {
- @McpFunction(
- displayName = "메타 통합코드 조회 툴",
- name = "oth.cmm.common-code.lookup",
- description = "메타 통합코드 목록을 조회해줘",
- prompt = "메타 통합코드 목록을 조회해줘",
- mappingId = "CLCNNB00001",
- register = false,
- requiresApproval = false,
- openWorldHint = true
- )
+ @McpTool(name = "oth.cmm.common-code.lookup", title = "메타 공통코드 조회 툴", description = "메타 통합코드 목록을 조회해줘", annotations = @McpTool.McpAnnotations(openWorldHint = true))
+ @ToolHint(register = false, requiresApproval = false, categoryKey = "cmm", mappingId = "CLCNNB00001")
Object execute(MetaCommonCodeRequest req);
}
diff --git a/dap-was-oth/src/main/java/io/shinhanlife/dap/mcc/biz/cmm/usecase/MetaTableUseCase.java b/dap-was-oth/src/main/java/io/shinhanlife/dap/mcc/biz/cmm/usecase/MetaTableUseCase.java
index 0d7616c93..7eec1a6e7 100644
--- a/dap-was-oth/src/main/java/io/shinhanlife/dap/mcc/biz/cmm/usecase/MetaTableUseCase.java
+++ b/dap-was-oth/src/main/java/io/shinhanlife/dap/mcc/biz/cmm/usecase/MetaTableUseCase.java
@@ -1,7 +1,8 @@
package io.shinhanlife.dap.mcc.biz.cmm.usecase;
-import io.shinhanlife.dap.lib.annotation.McpFunction;
-import io.shinhanlife.dap.lib.annotation.McpTool;
+import org.springframework.ai.mcp.annotation.McpTool;
+import io.shinhanlife.dap.lib.annotation.ToolHint;
+
import io.shinhanlife.dap.mcc.biz.cmm.dto.MetaTableRequest;
/**
@@ -18,20 +19,8 @@ import io.shinhanlife.dap.mcc.biz.cmm.dto.MetaTableRequest;
*
*
*/
-@McpTool(
- routingType = "MCI",
- categoryKey = "cmm"
-)
public interface MetaTableUseCase {
- @McpFunction(
- displayName = "메타 테이블 조회 툴",
- name = "oth.cmm.meta.table",
- description = "메타 테이블 정보 목록을 조회해줘",
- prompt = "메타 테이블 정보 목록을 조회해줘",
- mappingId = "CLCNNB00001",
- register = false,
- requiresApproval = false,
- openWorldHint = true
- )
+ @McpTool(name = "oth.cmm.meta.table", title = "메타 테이블 조회 툴", description = "메타 테이블 정보 목록을 조회해줘", annotations = @McpTool.McpAnnotations(openWorldHint = true))
+ @ToolHint(register = false, requiresApproval = false, categoryKey = "cmm", mappingId = "CLCNNB00001")
Object execute(MetaTableRequest req);
}
diff --git a/dap-was-oth/src/main/java/io/shinhanlife/dap/mcc/biz/cmm/usecase/TemplateUtilityUseCase.java b/dap-was-oth/src/main/java/io/shinhanlife/dap/mcc/biz/cmm/usecase/TemplateUtilityUseCase.java
index b88752031..63015f61c 100644
--- a/dap-was-oth/src/main/java/io/shinhanlife/dap/mcc/biz/cmm/usecase/TemplateUtilityUseCase.java
+++ b/dap-was-oth/src/main/java/io/shinhanlife/dap/mcc/biz/cmm/usecase/TemplateUtilityUseCase.java
@@ -1,37 +1,14 @@
package io.shinhanlife.dap.mcc.biz.cmm.usecase;
-/**
- * @package io.shinhanlife.dap.mcc.biz.cmm.usecase
- * @className TemplateUtilityUseCase
- * @description AX HUB 시스템 처리 클래스
- * @author 0986406
- * @create 2026.09.01
- *
- * ---------- 개정이력 ----------
- * 수정일 수정자 수정내용
- * ---------- -------- ---------------------------
- * 2026.09.01 0986406 최초생성
- *
- *
- */
-
-import io.shinhanlife.dap.lib.annotation.McpTool;
-import io.shinhanlife.dap.lib.annotation.McpFunction;
+import org.springframework.ai.mcp.annotation.McpTool;
+import io.shinhanlife.dap.lib.annotation.ToolHint;
import io.shinhanlife.dap.mcc.biz.cmm.dto.*;
import java.util.Map;
-@McpTool(
- routingType = "HTTP",
- categoryKey = "cmm"
-)
public interface TemplateUtilityUseCase {
- @McpFunction(
- displayName = "템플릿 유틸리티",
- name = "oth.cmm.template.url",
- description = "요청한 템플릿(엑셀, 워드 등) 파일(양식)을 다운로드 받을 수 있는 시스템 URL을 반환합니다. AI는 이 URL을 사용자에게 마크다운 링크 형태로 제공해야 합니다.",
- prompt = "요청하신 템플릿 양식 파일 다운로드 URL은 다음과 같습니다. 클릭하여 다운로드하세요:"
- )
+ @McpTool(name = "oth.cmm.template.url", title = "템플릿 유틸리티 툴", description = "요청한 템플릿(엑셀, 워드 등) 파일(양식)을 다운로드 받을 수 있는 시스템 URL을 반환합니다. AI는 이 URL을 사용자에게 마크다운 링크 형태로 제공해야 합니다.")
+ @ToolHint(categoryKey = "cmm")
Map getTemplateFileUrl(TemplateDownloadRequest req);
}
diff --git a/dap-was-oth/src/main/java/io/shinhanlife/dap/mcc/biz/cmm/usecase/impl/ClaimSearchSchemaSampleUseCaseImpl.java b/dap-was-oth/src/main/java/io/shinhanlife/dap/mcc/biz/cmm/usecase/impl/ClaimSearchSchemaSampleUseCaseImpl.java
index fc4bd54d7..1a817f598 100644
--- a/dap-was-oth/src/main/java/io/shinhanlife/dap/mcc/biz/cmm/usecase/impl/ClaimSearchSchemaSampleUseCaseImpl.java
+++ b/dap-was-oth/src/main/java/io/shinhanlife/dap/mcc/biz/cmm/usecase/impl/ClaimSearchSchemaSampleUseCaseImpl.java
@@ -1,21 +1,5 @@
package io.shinhanlife.dap.mcc.biz.cmm.usecase.impl;
-/**
- * @package io.shinhanlife.dap.mcc.biz.cmm.usecase.impl
- * @className ClaimSearchSchemaSampleUseCaseImpl
- * @description AX HUB 시스템 처리 클래스
- * @author 0986406
- * @create 2026.09.01
- *
- * ---------- 개정이력 ----------
- * 수정일 수정자 수정내용
- * ---------- -------- ---------------------------
- * 2026.09.01 0986406 최초생성
- *
- *
- */
-
-
import io.shinhanlife.dap.mcc.biz.cmm.dto.ClaimSearchRequest;
import io.shinhanlife.dap.mcc.biz.cmm.dto.ClaimSearchResponse;
import io.shinhanlife.dap.mcc.biz.cmm.usecase.ClaimSearchSchemaSampleUseCase;
diff --git a/dap-was-oth/src/main/java/io/shinhanlife/dap/mcc/biz/oth/converter/Onnba3011Converter.java b/dap-was-oth/src/main/java/io/shinhanlife/dap/mcc/biz/oth/converter/Onnba3011Converter.java
index fe04128b5..97c6820cb 100644
--- a/dap-was-oth/src/main/java/io/shinhanlife/dap/mcc/biz/oth/converter/Onnba3011Converter.java
+++ b/dap-was-oth/src/main/java/io/shinhanlife/dap/mcc/biz/oth/converter/Onnba3011Converter.java
@@ -1,21 +1,5 @@
package io.shinhanlife.dap.mcc.biz.oth.converter;
-/**
- * @package io.shinhanlife.dap.mcc.biz.oth.converter
- * @className Onnba3011Converter
- * @description AX HUB 시스템 처리 클래스
- * @author 0986406
- * @create 2026.09.01
- *
- * ---------- 개정이력 ----------
- * 수정일 수정자 수정내용
- * ---------- -------- ---------------------------
- * 2026.09.01 0986406 최초생성
- *
- *
- */
-
-
import io.shinhanlife.dap.mcc.biz.oth.dto.Onnba3011Request;
import io.shinhanlife.dap.mcc.infra.itrf.mci.cfp.a.io.CLCNNB00001_I;
import org.mapstruct.Mapper;
diff --git a/dap-was-oth/src/main/java/io/shinhanlife/dap/mcc/biz/oth/dto/Onnba3011Request.java b/dap-was-oth/src/main/java/io/shinhanlife/dap/mcc/biz/oth/dto/Onnba3011Request.java
index d91ea8873..7eafeaae3 100644
--- a/dap-was-oth/src/main/java/io/shinhanlife/dap/mcc/biz/oth/dto/Onnba3011Request.java
+++ b/dap-was-oth/src/main/java/io/shinhanlife/dap/mcc/biz/oth/dto/Onnba3011Request.java
@@ -1,21 +1,5 @@
package io.shinhanlife.dap.mcc.biz.oth.dto;
-/**
- * @package io.shinhanlife.dap.mcc.biz.oth.dto
- * @className Onnba3011Request
- * @description AX HUB 시스템 처리 클래스
- * @author 0986406
- * @create 2026.09.01
- *
- * ---------- 개정이력 ----------
- * 수정일 수정자 수정내용
- * ---------- -------- ---------------------------
- * 2026.09.01 0986406 최초생성
- *
- *
- */
-
-
import com.fasterxml.jackson.annotation.JsonProperty;
import com.fasterxml.jackson.annotation.JsonPropertyDescription;
import lombok.Data;
diff --git a/dap-was-oth/src/main/java/io/shinhanlife/dap/mcc/biz/oth/usecase/Onnba3011UseCase.java b/dap-was-oth/src/main/java/io/shinhanlife/dap/mcc/biz/oth/usecase/Onnba3011UseCase.java
index 1f81fd5ef..06c7abb2c 100644
--- a/dap-was-oth/src/main/java/io/shinhanlife/dap/mcc/biz/oth/usecase/Onnba3011UseCase.java
+++ b/dap-was-oth/src/main/java/io/shinhanlife/dap/mcc/biz/oth/usecase/Onnba3011UseCase.java
@@ -1,26 +1,11 @@
package io.shinhanlife.dap.mcc.biz.oth.usecase;
-/**
- * @package io.shinhanlife.dap.mcc.biz.oth.usecase
- * @className Onnba3011UseCase
- * @description AX HUB 시스템 처리 클래스
- * @author 0986406
- * @create 2026.09.01
- *
- * ---------- 개정이력 ----------
- * 수정일 수정자 수정내용
- * ---------- -------- ---------------------------
- * 2026.09.01 0986406 최초생성
- *
- *
- */
-
-
-import io.shinhanlife.dap.lib.annotation.McpTool;
-import io.shinhanlife.dap.lib.annotation.McpFunction;
+import org.springframework.ai.mcp.annotation.McpTool;
+import io.shinhanlife.dap.lib.annotation.ToolHint;
import io.shinhanlife.dap.mcc.biz.oth.dto.*;
-@McpTool(routingType = "MCI", categoryKey = "oth")
public interface Onnba3011UseCase {
+ @McpTool(name = "oth.sol.request.detail", title = "보종By가입설계한도계산조회 툴")
+ @ToolHint(register = false, categoryKey = "oth")
Object callOnnba3011(Onnba3011Request req);
}
diff --git a/dap-was-oth/src/main/java/io/shinhanlife/dap/mcc/biz/oth/usecase/impl/Onnba3011UseCaseImpl.java b/dap-was-oth/src/main/java/io/shinhanlife/dap/mcc/biz/oth/usecase/impl/Onnba3011UseCaseImpl.java
index c96edf38a..2bd62e68f 100644
--- a/dap-was-oth/src/main/java/io/shinhanlife/dap/mcc/biz/oth/usecase/impl/Onnba3011UseCaseImpl.java
+++ b/dap-was-oth/src/main/java/io/shinhanlife/dap/mcc/biz/oth/usecase/impl/Onnba3011UseCaseImpl.java
@@ -35,9 +35,7 @@ public class Onnba3011UseCaseImpl implements Onnba3011UseCase {
private final Onnba3011Converter onnba3011Converter;
/**
* AI Agent가 호출하게 될 메서드입니다.
- * @McpFunction 어노테이션 하나로 AI 도구로 자동 노출 및 라우팅됩니다.
*/
-
@Override
public Object callOnnba3011(Onnba3011Request req) {
log.info("[MCI Tool] 보종By가입설계한도계산조회 요청 수신.");
diff --git a/dap-was-oth/src/main/java/io/shinhanlife/dap/mcc/biz/smp/dto/DailyQuoteRequest.java b/dap-was-oth/src/main/java/io/shinhanlife/dap/mcc/biz/smp/dto/DailyQuoteRequest.java
index 059a38a58..36e5e2a6f 100644
--- a/dap-was-oth/src/main/java/io/shinhanlife/dap/mcc/biz/smp/dto/DailyQuoteRequest.java
+++ b/dap-was-oth/src/main/java/io/shinhanlife/dap/mcc/biz/smp/dto/DailyQuoteRequest.java
@@ -1,19 +1,19 @@
package io.shinhanlife.dap.mcc.biz.smp.dto;
-/**
- * @package io.shinhanlife.dap.mcc.biz.smp.dto
- * @className DailyQuoteRequest
- * @description AX HUB 시스템 처리 클래스
- * @author 0986406
- * @create 2026.09.01
- *
- * ---------- 개정이력 ----------
- * 수정일 수정자 수정내용
- * ---------- -------- ---------------------------
- * 2026.09.01 0986406 최초생성
- *
- *
- */
-public record DailyQuoteRequest(String category) {}
+
+
+import io.swagger.v3.oas.annotations.media.Schema;
+import org.springframework.ai.mcp.annotation.McpToolParam;
+import com.fasterxml.jackson.annotation.JsonInclude;
+import lombok.Data;
+
+@Data
+@JsonInclude(JsonInclude.Include.NON_NULL)
+public class DailyQuoteRequest {
+
+ @McpToolParam(description = "카테고리 (예: 속담 등)", required = false)
+ @Schema(example = "속담")
+ private String category;
+}
diff --git a/dap-was-oth/src/main/java/io/shinhanlife/dap/mcc/biz/smp/dto/DailyQuoteResponse.java b/dap-was-oth/src/main/java/io/shinhanlife/dap/mcc/biz/smp/dto/DailyQuoteResponse.java
index d4f673f2d..bb09b7161 100644
--- a/dap-was-oth/src/main/java/io/shinhanlife/dap/mcc/biz/smp/dto/DailyQuoteResponse.java
+++ b/dap-was-oth/src/main/java/io/shinhanlife/dap/mcc/biz/smp/dto/DailyQuoteResponse.java
@@ -1,19 +1,3 @@
package io.shinhanlife.dap.mcc.biz.smp.dto;
-/**
- * @package io.shinhanlife.dap.mcc.biz.smp.dto
- * @className DailyQuoteResponse
- * @description AX HUB 시스템 처리 클래스
- * @author 0986406
- * @create 2026.09.01
- *
- * ---------- 개정이력 ----------
- * 수정일 수정자 수정내용
- * ---------- -------- ---------------------------
- * 2026.09.01 0986406 최초생성
- *
- *
- */
-
-
public record DailyQuoteResponse(String quote, String author) {}
diff --git a/dap-was-oth/src/main/java/io/shinhanlife/dap/mcc/biz/smp/dto/ExchangeRateRequest.java b/dap-was-oth/src/main/java/io/shinhanlife/dap/mcc/biz/smp/dto/ExchangeRateRequest.java
index 5a72a6c63..366c175d7 100644
--- a/dap-was-oth/src/main/java/io/shinhanlife/dap/mcc/biz/smp/dto/ExchangeRateRequest.java
+++ b/dap-was-oth/src/main/java/io/shinhanlife/dap/mcc/biz/smp/dto/ExchangeRateRequest.java
@@ -1,19 +1,18 @@
package io.shinhanlife.dap.mcc.biz.smp.dto;
-/**
- * @package io.shinhanlife.dap.mcc.biz.smp.dto
- * @className ExchangeRateRequest
- * @description AX HUB 시스템 처리 클래스
- * @author 0986406
- * @create 2026.09.01
- *
- * ---------- 개정이력 ----------
- * 수정일 수정자 수정내용
- * ---------- -------- ---------------------------
- * 2026.09.01 0986406 최초생성
- *
- *
- */
-public record ExchangeRateRequest(String currencyCode) {}
+
+
+import io.swagger.v3.oas.annotations.media.Schema;
+import org.springframework.ai.mcp.annotation.McpToolParam;
+import com.fasterxml.jackson.annotation.JsonInclude;
+import lombok.Data;
+
+@Data
+@JsonInclude(JsonInclude.Include.NON_NULL)
+public class ExchangeRateRequest {
+ @McpToolParam(description = "환율 코드 (예: USD 등)", required = false)
+ @Schema(example = "USD")
+ private String currencyCode;
+}
\ No newline at end of file
diff --git a/dap-was-oth/src/main/java/io/shinhanlife/dap/mcc/biz/smp/dto/ExchangeRateResponse.java b/dap-was-oth/src/main/java/io/shinhanlife/dap/mcc/biz/smp/dto/ExchangeRateResponse.java
index ede13cf1f..4968d01a3 100644
--- a/dap-was-oth/src/main/java/io/shinhanlife/dap/mcc/biz/smp/dto/ExchangeRateResponse.java
+++ b/dap-was-oth/src/main/java/io/shinhanlife/dap/mcc/biz/smp/dto/ExchangeRateResponse.java
@@ -1,19 +1,3 @@
package io.shinhanlife.dap.mcc.biz.smp.dto;
-/**
- * @package io.shinhanlife.dap.mcc.biz.smp.dto
- * @className ExchangeRateResponse
- * @description AX HUB 시스템 처리 클래스
- * @author 0986406
- * @create 2026.09.01
- *
- * ---------- 개정이력 ----------
- * 수정일 수정자 수정내용
- * ---------- -------- ---------------------------
- * 2026.09.01 0986406 최초생성
- *
- *
- */
-
-
public record ExchangeRateResponse(String baseCurrency, String targetCurrency, double rate) {}
diff --git a/dap-was-oth/src/main/java/io/shinhanlife/dap/mcc/biz/smp/dto/TeamMemberRequest.java b/dap-was-oth/src/main/java/io/shinhanlife/dap/mcc/biz/smp/dto/TeamMemberRequest.java
index c81ee0d79..ea2314bd8 100644
--- a/dap-was-oth/src/main/java/io/shinhanlife/dap/mcc/biz/smp/dto/TeamMemberRequest.java
+++ b/dap-was-oth/src/main/java/io/shinhanlife/dap/mcc/biz/smp/dto/TeamMemberRequest.java
@@ -1,7 +1,11 @@
package io.shinhanlife.dap.mcc.biz.smp.dto;
+
+
+
+import io.swagger.v3.oas.annotations.media.Schema;
+import org.springframework.ai.mcp.annotation.McpToolParam;
import com.fasterxml.jackson.annotation.JsonInclude;
-import io.shinhanlife.dap.lib.annotation.McpParameter;
import lombok.Data;
/**
@@ -21,6 +25,8 @@ import lombok.Data;
@Data
@JsonInclude(JsonInclude.Include.NON_NULL)
public class TeamMemberRequest {
- @McpParameter(description = "조회할 팀 이름 (예: AX, MCP, TOOL, 전체 등)", required = false)
+ @McpToolParam(description = "조회할 팀 이름 (예: AX, MCP, TOOL, 전체 등)", required = false)
+ @Schema(example = "TOOL")
private String teamName;
-}
+
+}
\ No newline at end of file
diff --git a/dap-was-oth/src/main/java/io/shinhanlife/dap/mcc/biz/smp/dto/WeatherRequest.java b/dap-was-oth/src/main/java/io/shinhanlife/dap/mcc/biz/smp/dto/WeatherRequest.java
index e6e97ff2e..9ea49678c 100644
--- a/dap-was-oth/src/main/java/io/shinhanlife/dap/mcc/biz/smp/dto/WeatherRequest.java
+++ b/dap-was-oth/src/main/java/io/shinhanlife/dap/mcc/biz/smp/dto/WeatherRequest.java
@@ -1,5 +1,8 @@
package io.shinhanlife.dap.mcc.biz.smp.dto;
+
+
+import org.springframework.ai.mcp.annotation.McpToolParam;
import com.fasterxml.jackson.annotation.JsonProperty;
import com.fasterxml.jackson.annotation.JsonPropertyDescription;
@@ -18,8 +21,7 @@ import com.fasterxml.jackson.annotation.JsonPropertyDescription;
*
*/
public record WeatherRequest(
- @JsonProperty(required = true, value = "city")
- @JsonPropertyDescription("날씨를 조회할 도시 이름 (예: 서울, 부산, 제주)")
+ @McpToolParam(description = "도시를 입력하세여(예: 서울)", required = true)
String city
) {
-}
+}
\ No newline at end of file
diff --git a/dap-was-oth/src/main/java/io/shinhanlife/dap/mcc/biz/smp/usecase/DailyQuoteToolUseCase.java b/dap-was-oth/src/main/java/io/shinhanlife/dap/mcc/biz/smp/usecase/DailyQuoteToolUseCase.java
index cad60051f..9905e5658 100644
--- a/dap-was-oth/src/main/java/io/shinhanlife/dap/mcc/biz/smp/usecase/DailyQuoteToolUseCase.java
+++ b/dap-was-oth/src/main/java/io/shinhanlife/dap/mcc/biz/smp/usecase/DailyQuoteToolUseCase.java
@@ -1,35 +1,13 @@
package io.shinhanlife.dap.mcc.biz.smp.usecase;
-/**
- * @package io.shinhanlife.dap.mcc.biz.smp.usecase
- * @className DailyQuoteToolUseCase
- * @description AX HUB 시스템 처리 클래스
- * @author 0986406
- * @create 2026.09.01
- *
- * ---------- 개정이력 ----------
- * 수정일 수정자 수정내용
- * ---------- -------- ---------------------------
- * 2026.09.01 0986406 최초생성
- *
- *
- */
-
-import io.shinhanlife.dap.lib.annotation.McpTool;
-import io.shinhanlife.dap.lib.annotation.McpFunction;
+import org.springframework.ai.mcp.annotation.McpTool;
+import io.shinhanlife.dap.lib.annotation.ToolHint;
import io.shinhanlife.dap.mcc.biz.smp.dto.DailyQuoteRequest;
import io.shinhanlife.dap.mcc.biz.smp.dto.DailyQuoteResponse;
-@McpTool(
- routingType = "DIRECT",
- categoryKey = "smp"
-)
public interface DailyQuoteToolUseCase {
- @McpFunction(register = false, displayName = "랜덤 명언 툴", name = "oth.smp.quote.daily",
- description = "무작위로 영감을 주는 명언을 하나 가져옵니다.",
- prompt = "오늘의 명언 하나 알려줘, 동기부여 명언 등",
- mappingId = "QUOTE_001"
- )
+ @McpTool(name = "oth.smp.quote.daily", title = "오늘의 명언 툴", description = "무작위로 영감을 주는 명언을 하나 가져옵니다.")
+ @ToolHint(register = false, categoryKey = "smp", mappingId = "QUOTE_001")
DailyQuoteResponse execute(DailyQuoteRequest req);
}
diff --git a/dap-was-oth/src/main/java/io/shinhanlife/dap/mcc/biz/smp/usecase/ExchangeRateToolUseCase.java b/dap-was-oth/src/main/java/io/shinhanlife/dap/mcc/biz/smp/usecase/ExchangeRateToolUseCase.java
index ae8d62794..ba628bd5f 100644
--- a/dap-was-oth/src/main/java/io/shinhanlife/dap/mcc/biz/smp/usecase/ExchangeRateToolUseCase.java
+++ b/dap-was-oth/src/main/java/io/shinhanlife/dap/mcc/biz/smp/usecase/ExchangeRateToolUseCase.java
@@ -1,37 +1,15 @@
package io.shinhanlife.dap.mcc.biz.smp.usecase;
-/**
- * @package io.shinhanlife.dap.mcc.biz.smp.usecase
- * @className ExchangeRateToolUseCase
- * @description AX HUB 시스템 처리 클래스
- * @author 0986406
- * @create 2026.09.01
- *
- * ---------- 개정이력 ----------
- * 수정일 수정자 수정내용
- * ---------- -------- ---------------------------
- * 2026.09.01 0986406 최초생성
- *
- *
- */
-
-import io.shinhanlife.dap.lib.annotation.McpTool;
-import io.shinhanlife.dap.lib.annotation.McpFunction;
+import org.springframework.ai.mcp.annotation.McpTool;
+import io.shinhanlife.dap.lib.annotation.ToolHint;
import io.shinhanlife.dap.mcc.biz.smp.dto.ExchangeRateRequest;
import io.shinhanlife.dap.mcc.biz.smp.dto.ExchangeRateResponse;
import io.shinhanlife.dap.mcc.biz.smp.dto.ExchangeRateRequest;
import io.shinhanlife.dap.mcc.biz.smp.dto.ExchangeRateResponse;
-@McpTool(
- routingType = "DIRECT",
- categoryKey = "smp"
-)
public interface ExchangeRateToolUseCase {
- @McpFunction(register = false, displayName = "실시간 환율 조회 툴", name = "oth.smp.exchange-rate.inquiry",
- description = "원하는 통화의 실시간 환율을 조회합니다. (예: USD, EUR, JPY)",
- prompt = "현재 달러 환율 알려줘, 엔화 환율은?",
- mappingId = "EXCHANGE_001"
- )
+ @McpTool(name = "oth.smp.exchange-rate.inquiry", title = "실시간 환율 조회 툴", description = "원하는 통화의 실시간 환율을 조회합니다. (예: USD, EUR, JPY)")
+ @ToolHint(register = false, categoryKey = "smp", mappingId = "EXCHANGE_001")
ExchangeRateResponse execute(ExchangeRateRequest req);
}
diff --git a/dap-was-oth/src/main/java/io/shinhanlife/dap/mcc/biz/smp/usecase/TeamMemberUseCase.java b/dap-was-oth/src/main/java/io/shinhanlife/dap/mcc/biz/smp/usecase/TeamMemberUseCase.java
index 092984e6e..5bc204bd1 100644
--- a/dap-was-oth/src/main/java/io/shinhanlife/dap/mcc/biz/smp/usecase/TeamMemberUseCase.java
+++ b/dap-was-oth/src/main/java/io/shinhanlife/dap/mcc/biz/smp/usecase/TeamMemberUseCase.java
@@ -1,39 +1,12 @@
package io.shinhanlife.dap.mcc.biz.smp.usecase;
-/**
- * @package io.shinhanlife.dap.mcc.biz.smp.usecase
- * @className TeamMemberUseCase
- * @description AX HUB 시스템 처리 클래스
- * @author 0986406
- * @create 2026.09.01
- *
- * ---------- 개정이력 ----------
- * 수정일 수정자 수정내용
- * ---------- -------- ---------------------------
- * 2026.09.01 0986406 최초생성
- *
- *
- */
+import org.springframework.ai.mcp.annotation.McpTool;
+import io.shinhanlife.dap.lib.annotation.ToolHint;
-
-import io.shinhanlife.dap.lib.annotation.McpFunction;
-import io.shinhanlife.dap.lib.annotation.McpTool;
import io.shinhanlife.dap.mcc.biz.smp.dto.TeamMemberRequest;
-@McpTool(
- routingType = "DIRECT",
- categoryKey = "smp"
-)
public interface TeamMemberUseCase {
- @McpFunction(
- displayName = "신한라이프 MCP, TOOL 파트 구성원 조회",
- name = "oth.smp.team.list",
- description = "신한라이프 MCP, TOOL 파트 구성원을 조회합니다.",
- prompt = "신한라이프 MCP, TOOL 파트 구성원을 조회해 줘. (주의: 응답 시 ** 등 마크다운 기호를 절대 사용하지 말고 평문으로만 출력해 줘)",
- mappingId = "DIRECT0001",
- register = false,
- requiresApproval = false,
- openWorldHint = true
- )
+ @McpTool(name = "oth.smp.team.list", title = "신한라이프 MCP, TOOL 파트 구성원 조회", description = "신한라이프 MCP, TOOL 파트 구성원을 조회합니다.", annotations = @McpTool.McpAnnotations(openWorldHint = true))
+ @ToolHint(register = false, requiresApproval = false, categoryKey = "smp", mappingId = "DIRECT0001")
Object execute(TeamMemberRequest req);
}
diff --git a/dap-was-oth/src/main/java/io/shinhanlife/dap/mcc/biz/smp/usecase/WeatherToolUseCase.java b/dap-was-oth/src/main/java/io/shinhanlife/dap/mcc/biz/smp/usecase/WeatherToolUseCase.java
index c49d3f210..1252d6a42 100644
--- a/dap-was-oth/src/main/java/io/shinhanlife/dap/mcc/biz/smp/usecase/WeatherToolUseCase.java
+++ b/dap-was-oth/src/main/java/io/shinhanlife/dap/mcc/biz/smp/usecase/WeatherToolUseCase.java
@@ -1,34 +1,12 @@
package io.shinhanlife.dap.mcc.biz.smp.usecase;
-/**
- * @package io.shinhanlife.dap.mcc.biz.smp.usecase
- * @className WeatherToolUseCase
- * @description AX HUB 시스템 처리 클래스
- * @author 0986406
- * @create 2026.09.01
- *
- * ---------- 개정이력 ----------
- * 수정일 수정자 수정내용
- * ---------- -------- ---------------------------
- * 2026.09.01 0986406 최초생성
- *
- *
- */
-
-import io.shinhanlife.dap.lib.annotation.McpTool;
-import io.shinhanlife.dap.lib.annotation.McpFunction;
+import org.springframework.ai.mcp.annotation.McpTool;
+import io.shinhanlife.dap.lib.annotation.ToolHint;
import io.shinhanlife.dap.mcc.biz.smp.dto.*;
-@McpTool(
- routingType = "DIRECT",
- categoryKey = "smp"
-)
public interface WeatherToolUseCase {
- @McpFunction(register = false, displayName = "날씨 조회 툴", name = "oth.smp.weather.inquiry",
- description = "특정 도시의 현재 날씨, 온도, 풍속 정보를 조회합니다.",
- prompt = "서울 날씨 알려줘, 부산 기온 알려줘 등 실시간 기상 조회",
- mappingId = "WEATHER_001"
- )
+ @McpTool(name = "oth.smp.weather.inquiry", title = "날씨 조회 툴", description = "특정 도시의 현재 날씨, 온도, 풍속 정보를 조회합니다.")
+ @ToolHint(register = false, categoryKey = "smp", mappingId = "WEATHER_001")
WeatherResponse execute(WeatherRequest req);
}
diff --git a/dap-was-oth/src/main/java/io/shinhanlife/dap/mcc/biz/smp/usecase/impl/ExchangeRateToolUseCaseImpl.java b/dap-was-oth/src/main/java/io/shinhanlife/dap/mcc/biz/smp/usecase/impl/ExchangeRateToolUseCaseImpl.java
index 10853b02d..20c0c7b54 100644
--- a/dap-was-oth/src/main/java/io/shinhanlife/dap/mcc/biz/smp/usecase/impl/ExchangeRateToolUseCaseImpl.java
+++ b/dap-was-oth/src/main/java/io/shinhanlife/dap/mcc/biz/smp/usecase/impl/ExchangeRateToolUseCaseImpl.java
@@ -34,7 +34,7 @@ public class ExchangeRateToolUseCaseImpl extends AbstractMcpToolUseCase implemen
@Override
public ExchangeRateResponse execute(ExchangeRateRequest req) {
- String targetCurrency = req.currencyCode() != null ? req.currencyCode().toUpperCase().trim() : "USD";
+ String targetCurrency = req.getCurrencyCode() != null ? req.getCurrencyCode().toUpperCase().trim() : "USD";
// 간단한 모의 데이터로 반환 (실제 구현 시 외부 연동)
double dummyRate = 1350.50;
diff --git a/dap-was-oth/src/main/java/io/shinhanlife/dap/mcc/biz/sol/dto/SolReqDetailRequest.java b/dap-was-oth/src/main/java/io/shinhanlife/dap/mcc/biz/sol/dto/SolReqDetailRequest.java
index 130454190..98d30aa07 100644
--- a/dap-was-oth/src/main/java/io/shinhanlife/dap/mcc/biz/sol/dto/SolReqDetailRequest.java
+++ b/dap-was-oth/src/main/java/io/shinhanlife/dap/mcc/biz/sol/dto/SolReqDetailRequest.java
@@ -1,7 +1,11 @@
package io.shinhanlife.dap.mcc.biz.sol.dto;
+
+
+
+import io.swagger.v3.oas.annotations.media.Schema;
+import org.springframework.ai.mcp.annotation.McpToolParam;
import com.fasterxml.jackson.annotation.JsonInclude;
-import io.shinhanlife.dap.lib.annotation.McpParameter;
import lombok.Data;
/**
@@ -22,6 +26,8 @@ import lombok.Data;
@JsonInclude(JsonInclude.Include.NON_NULL)
public class SolReqDetailRequest {
- @McpParameter(description = "상세 조회할 SOL 의뢰서 ID", required = true)
+ @McpToolParam(description = "상세 조회할 SOL 의뢰서 ID", required = true)
+ @Schema(example = "SR20260805")
private String srId;
-}
+
+}
\ No newline at end of file
diff --git a/dap-was-oth/src/main/java/io/shinhanlife/dap/mcc/biz/sol/dto/SolReqListRequest.java b/dap-was-oth/src/main/java/io/shinhanlife/dap/mcc/biz/sol/dto/SolReqListRequest.java
index c669fabd5..517418ab7 100644
--- a/dap-was-oth/src/main/java/io/shinhanlife/dap/mcc/biz/sol/dto/SolReqListRequest.java
+++ b/dap-was-oth/src/main/java/io/shinhanlife/dap/mcc/biz/sol/dto/SolReqListRequest.java
@@ -1,7 +1,11 @@
package io.shinhanlife.dap.mcc.biz.sol.dto;
+
+
+
+import io.swagger.v3.oas.annotations.media.Schema;
+import org.springframework.ai.mcp.annotation.McpToolParam;
import com.fasterxml.jackson.annotation.JsonInclude;
-import io.shinhanlife.dap.lib.annotation.McpParameter;
import lombok.Data;
/**
@@ -21,12 +25,15 @@ import lombok.Data;
@Data
@JsonInclude(JsonInclude.Include.NON_NULL)
public class SolReqListRequest {
- @McpParameter(description = "진행상태 (예: 진행중, 완료 등)", required = false)
+ @McpToolParam(description = "진행상태 (예: 진행중, 완료 등)", required = false)
+ @Schema(example = "RECEIVED")
private String status;
- @McpParameter(description = "조회기간 (예: 1개월, 3개월 등)", required = false)
+
+@McpToolParam(description = "조회기간 (예: 1개월, 3개월 등)", required = false)
private String period;
- @McpParameter(description = "조회대상 (예: 나의 업무, 전체 등)", required = false)
+ @McpToolParam(description = "조회대상 (예: 나의 업무, 전체 등)", required = false)
+ @Schema(example = "USER")
private String target;
-}
+}
\ No newline at end of file
diff --git a/dap-was-oth/src/main/java/io/shinhanlife/dap/mcc/biz/sol/usecase/SolReqDetailUseCase.java b/dap-was-oth/src/main/java/io/shinhanlife/dap/mcc/biz/sol/usecase/SolReqDetailUseCase.java
index 7ec6ac381..4567e68a7 100644
--- a/dap-was-oth/src/main/java/io/shinhanlife/dap/mcc/biz/sol/usecase/SolReqDetailUseCase.java
+++ b/dap-was-oth/src/main/java/io/shinhanlife/dap/mcc/biz/sol/usecase/SolReqDetailUseCase.java
@@ -1,7 +1,8 @@
package io.shinhanlife.dap.mcc.biz.sol.usecase;
-import io.shinhanlife.dap.lib.annotation.McpFunction;
-import io.shinhanlife.dap.lib.annotation.McpTool;
+import org.springframework.ai.mcp.annotation.McpTool;
+import io.shinhanlife.dap.lib.annotation.ToolHint;
+
import io.shinhanlife.dap.mcc.biz.sol.dto.SolReqDetailRequest;
/**
@@ -18,22 +19,9 @@ import io.shinhanlife.dap.mcc.biz.sol.dto.SolReqDetailRequest;
*
*
*/
-@McpTool(
- routingType = "MCI",
- categoryKey = "sol"
-)
public interface SolReqDetailUseCase {
- @McpFunction(
- displayName = "SolReqDetail 툴",
- name = "oth.sol.request.detail",
- description = "SOL 의뢰서 상세 조회",
- prompt = "SOL 의뢰서 상세 조회해줘",
- mappingId = "SOLG00000002",
- register = false,
- requiresApproval = false,
- readOnlyHint = true,
- openWorldHint = true
- )
+ @McpTool(name = "oth.sol.request.detail", title = "SolReqDetail 툴", description = "SOL 의뢰서 상세 조회", annotations = @McpTool.McpAnnotations(openWorldHint = true, readOnlyHint = true))
+ @ToolHint(register = false, requiresApproval = false, categoryKey = "sol", mappingId = "SOLG00000002")
Object execute(SolReqDetailRequest req);
}
diff --git a/dap-was-oth/src/main/java/io/shinhanlife/dap/mcc/biz/sol/usecase/SolReqListUseCase.java b/dap-was-oth/src/main/java/io/shinhanlife/dap/mcc/biz/sol/usecase/SolReqListUseCase.java
index 145c626c1..00a7c491a 100644
--- a/dap-was-oth/src/main/java/io/shinhanlife/dap/mcc/biz/sol/usecase/SolReqListUseCase.java
+++ b/dap-was-oth/src/main/java/io/shinhanlife/dap/mcc/biz/sol/usecase/SolReqListUseCase.java
@@ -1,39 +1,12 @@
package io.shinhanlife.dap.mcc.biz.sol.usecase;
-/**
- * @package io.shinhanlife.dap.mcc.biz.sol.usecase
- * @className SolReqListUseCase
- * @description AX HUB 시스템 처리 클래스
- * @author 0986406
- * @create 2026.09.01
- *
- * ---------- 개정이력 ----------
- * 수정일 수정자 수정내용
- * ---------- -------- ---------------------------
- * 2026.09.01 0986406 최초생성
- *
- *
- */
+import org.springframework.ai.mcp.annotation.McpTool;
+import io.shinhanlife.dap.lib.annotation.ToolHint;
-
-import io.shinhanlife.dap.lib.annotation.McpFunction;
-import io.shinhanlife.dap.lib.annotation.McpTool;
import io.shinhanlife.dap.mcc.biz.sol.dto.SolReqListRequest;
-@McpTool(
- routingType = "MCI",
- categoryKey = "sol"
-)
public interface SolReqListUseCase {
- @McpFunction(
- displayName = "SolReqList 툴",
- name = "oth.sol.request.list",
- description = "SOL 의뢰서 목록 조회해줘",
- prompt = "SOL 의뢰서 목록 조회해줘",
- mappingId = "SOLG00000001",
- register = false,
- requiresApproval = false,
- openWorldHint = true
- )
+ @McpTool(name = "oth.sol.request.list", title = "SolReqList 툴", description = "SOL 의뢰서 목록 조회해줘", annotations = @McpTool.McpAnnotations(openWorldHint = true))
+ @ToolHint(register = false, requiresApproval = false, categoryKey = "sol", mappingId = "SOLG00000001")
Object execute(SolReqListRequest req);
}
diff --git a/dap-was-oth/src/main/java/io/shinhanlife/dap/mcc/biz/sol/usecase/impl/SolReqDetailUseCaseImpl.java b/dap-was-oth/src/main/java/io/shinhanlife/dap/mcc/biz/sol/usecase/impl/SolReqDetailUseCaseImpl.java
index 62b1a0296..be197500d 100644
--- a/dap-was-oth/src/main/java/io/shinhanlife/dap/mcc/biz/sol/usecase/impl/SolReqDetailUseCaseImpl.java
+++ b/dap-was-oth/src/main/java/io/shinhanlife/dap/mcc/biz/sol/usecase/impl/SolReqDetailUseCaseImpl.java
@@ -86,7 +86,7 @@ public class SolReqDetailUseCaseImpl implements SolReqDetailUseCase {
response.setSrName("SOL 연동 모듈 추가 개발");
response.setProcess("진행중");
response.setDevStage("분석/설계");
- response.setAppName("MCP WAS");
+ response.setAppName("MCP Gateway");
response.setRequester("고석민");
response.setRequestDate("2026-07-15");
response.setDueDate("2026-09-30");
diff --git a/dap-was-oth/src/main/java/io/shinhanlife/dap/mcc/biz/sol/usecase/impl/SolReqListUseCaseImpl.java b/dap-was-oth/src/main/java/io/shinhanlife/dap/mcc/biz/sol/usecase/impl/SolReqListUseCaseImpl.java
index 8675124c8..35ea868e5 100644
--- a/dap-was-oth/src/main/java/io/shinhanlife/dap/mcc/biz/sol/usecase/impl/SolReqListUseCaseImpl.java
+++ b/dap-was-oth/src/main/java/io/shinhanlife/dap/mcc/biz/sol/usecase/impl/SolReqListUseCaseImpl.java
@@ -65,7 +65,7 @@ public class SolReqListUseCaseImpl implements SolReqListUseCase {
item2.setSrName("툴 연동 모듈 추가 개발");
item2.setProcess("진행중");
item2.setDevStage("분석/설계");
- item2.setAppName("MCP WAS");
+ item2.setAppName("MCP Gateway");
item2.setRequester("고석민");
list.add(item2);
diff --git a/dap-was-oth/src/main/java/io/shinhanlife/dap/mcc/infra/itrf/mci/cfp/a/io/CLCNNB00001_I.java b/dap-was-oth/src/main/java/io/shinhanlife/dap/mcc/infra/itrf/mci/cfp/a/io/CLCNNB00001_I.java
index 3d0d41eb9..7de87b33f 100644
--- a/dap-was-oth/src/main/java/io/shinhanlife/dap/mcc/infra/itrf/mci/cfp/a/io/CLCNNB00001_I.java
+++ b/dap-was-oth/src/main/java/io/shinhanlife/dap/mcc/infra/itrf/mci/cfp/a/io/CLCNNB00001_I.java
@@ -1,21 +1,5 @@
package io.shinhanlife.dap.mcc.infra.itrf.mci.cfp.a.io;
-/**
- * @package io.shinhanlife.dap.mcc.infra.itrf.mci.cfp.a.io
- * @className CLCNNB00001_I
- * @description AX HUB 시스템 처리 클래스
- * @author 0986406
- * @create 2026.09.01
- *
- * ---------- 개정이력 ----------
- * 수정일 수정자 수정내용
- * ---------- -------- ---------------------------
- * 2026.09.01 0986406 최초생성
- *
- *
- */
-
-
import com.fasterxml.jackson.annotation.JsonProperty;
import lombok.Data;
diff --git a/dap-was-oth/src/main/java/io/shinhanlife/dap/mcc/infra/itrf/mci/cfp/a/io/CLCNNB00001_O.java b/dap-was-oth/src/main/java/io/shinhanlife/dap/mcc/infra/itrf/mci/cfp/a/io/CLCNNB00001_O.java
index 4a2ab3727..fcb0f3fc7 100644
--- a/dap-was-oth/src/main/java/io/shinhanlife/dap/mcc/infra/itrf/mci/cfp/a/io/CLCNNB00001_O.java
+++ b/dap-was-oth/src/main/java/io/shinhanlife/dap/mcc/infra/itrf/mci/cfp/a/io/CLCNNB00001_O.java
@@ -1,21 +1,5 @@
package io.shinhanlife.dap.mcc.infra.itrf.mci.cfp.a.io;
-/**
- * @package io.shinhanlife.dap.mcc.infra.itrf.mci.cfp.a.io
- * @className CLCNNB00001_O
- * @description AX HUB 시스템 처리 클래스
- * @author 0986406
- * @create 2026.09.01
- *
- * ---------- 개정이력 ----------
- * 수정일 수정자 수정내용
- * ---------- -------- ---------------------------
- * 2026.09.01 0986406 최초생성
- *
- *
- */
-
-
import lombok.Data;
/**
diff --git a/dap-was-oth/src/main/java/io/shinhanlife/dap/mcc/oth/DapWasOthApplication.java b/dap-was-oth/src/main/java/io/shinhanlife/dap/mcc/oth/DapWasOthApplication.java
index e28f35170..4b831fb10 100644
--- a/dap-was-oth/src/main/java/io/shinhanlife/dap/mcc/oth/DapWasOthApplication.java
+++ b/dap-was-oth/src/main/java/io/shinhanlife/dap/mcc/oth/DapWasOthApplication.java
@@ -19,10 +19,13 @@ import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.boot.context.properties.ConfigurationPropertiesScan;
import org.springframework.cache.annotation.EnableCaching;
+import org.springframework.context.annotation.Import;
+import io.shinhanlife.dap.lib.mcp.ToolMcpServerConfiguration;
@SpringBootApplication(scanBasePackages = {"io.shinhanlife.dap.mcc", "io.shinhanlife.dap.lib"})
@ConfigurationPropertiesScan(basePackages = {"io.shinhanlife.dap.mcc", "io.shinhanlife.dap.lib"})
@EnableCaching
+@Import(ToolMcpServerConfiguration.class)
public class DapWasOthApplication {
public static void main(String[] args) {
SpringApplication.run(DapWasOthApplication.class, args);
diff --git a/dap-was-oth/src/main/resources/application-local.yml b/dap-was-oth/src/main/resources/application-local.yml
index 1bf04bfb0..a4e5f24c7 100644
--- a/dap-was-oth/src/main/resources/application-local.yml
+++ b/dap-was-oth/src/main/resources/application-local.yml
@@ -4,7 +4,7 @@ spring:
url: jdbc:p6spy:h2:mem:testdb;DB_CLOSE_DELAY=-1;
driverClassName: com.p6spy.engine.spy.P6SpyDriver
username: sa
- password: ${REDIS_PASSWORD:}
+ password: password
h2:
console:
enabled: true
@@ -33,6 +33,8 @@ mcp:
mcp-client-2: ALL
axhub:
+ gateway:
+ url: http://localhost:8081
tool:
url: ${AXHUB_TOOL_URL:http://localhost:${server.port}}
diff --git a/dap-was-oth/src/main/resources/application.yml b/dap-was-oth/src/main/resources/application.yml
index cb0e1c57a..f81a5d6f0 100644
--- a/dap-was-oth/src/main/resources/application.yml
+++ b/dap-was-oth/src/main/resources/application.yml
@@ -11,7 +11,7 @@ logging:
mcp:
namespace: ""
manifest:
- bundle-id: tool-oth
+ bundle-id: was-oth
# Set the AA-assigned prefix before MCP pull activation (for example: oth.).
name-prefix: ""
security:
diff --git a/dap-was-oth/src/main/resources/mcp/schema/claim-search-resource-input-schema.json b/dap-was-oth/src/main/resources/mcp/schema/claim-search-resource-input-schema.json
new file mode 100644
index 000000000..56994fb2f
--- /dev/null
+++ b/dap-was-oth/src/main/resources/mcp/schema/claim-search-resource-input-schema.json
@@ -0,0 +1,49 @@
+{
+ "type": "object",
+ "additionalProperties": false,
+ "properties": {
+ "claimNo": {
+ "type": "string",
+ "description": "청구번호. CLM 이후 숫자 13자리 형식입니다.",
+ "pattern": "^CLM[0-9]{13}$",
+ "example": "CLM2026070100123"
+ },
+ "contractNo": {
+ "type": "string",
+ "description": "계약번호. 숫자 11자리 형식입니다.",
+ "pattern": "^[0-9]{11}$",
+ "example": "10023456789"
+ },
+ "status": {
+ "type": "string",
+ "description": "청구 상태 필터",
+ "enum": ["RECEIVED", "REVIEWING", "ADDITIONAL_DOC_REQUIRED", "APPROVED", "PAID", "REJECTED", "WITHDRAWN"],
+ "example": "RECEIVED"
+ },
+ "claimType": {
+ "type": "string",
+ "description": "청구 유형 필터",
+ "enum": ["MEDICAL", "SURGERY", "HOSPITALIZATION", "DIAGNOSIS", "DEATH", "DISABILITY"],
+ "example": "MEDICAL"
+ },
+ "fromDate": {
+ "type": "string",
+ "description": "접수일 조회 시작일 (YYYY-MM-DD)",
+ "format": "date",
+ "example": "2026-01-01"
+ },
+ "toDate": {
+ "type": "string",
+ "description": "접수일 조회 종료일 (YYYY-MM-DD)",
+ "format": "date",
+ "example": "2026-07-31"
+ },
+ "size": {
+ "type": "string",
+ "description": "반환할 최대 건수 (기본값: 20, 최대: 50)",
+ "pattern": "^[1-9][0-9]?$|^50$",
+ "default": "20",
+ "example": "20"
+ }
+ }
+}
diff --git a/dap-was-oth/src/main/resources/mcp/schema/claim-search-resource-output-schema.json b/dap-was-oth/src/main/resources/mcp/schema/claim-search-resource-output-schema.json
new file mode 100644
index 000000000..b7844be33
--- /dev/null
+++ b/dap-was-oth/src/main/resources/mcp/schema/claim-search-resource-output-schema.json
@@ -0,0 +1,83 @@
+{
+ "type": "object",
+ "additionalProperties": false,
+ "properties": {
+ "resultCode": {
+ "type": "string",
+ "description": "실행 결과 코드",
+ "enum": ["SUCCESS", "FAILURE"]
+ },
+ "resultLabel": {
+ "type": "string",
+ "description": "resultCode의 사용자 표시 라벨",
+ "maxLength": 100
+ },
+ "status": {
+ "type": "string",
+ "description": "현재 청구 처리 상태 코드",
+ "enum": ["RECEIVED", "REVIEWING", "ADDITIONAL_DOC_REQUIRED", "APPROVED", "PAID", "REJECTED", "WITHDRAWN"]
+ },
+ "statusLabel": {
+ "type": "string",
+ "description": "status의 사용자 표시 라벨",
+ "maxLength": 100
+ },
+ "approvedAmount": {
+ "anyOf": [
+ {"type": "integer", "minimum": 0},
+ {"type": "null"}
+ ],
+ "description": "승인 금액. 심사 전에는 null이며 0으로 해석하지 않습니다."
+ },
+ "rejectionReason": {
+ "anyOf": [
+ {"type": "string", "maxLength": 200},
+ {"type": "null"}
+ ],
+ "description": "status가 REJECTED일 때만 존재하며, 그 외에는 null입니다."
+ },
+ "items": {
+ "type": "array",
+ "description": "수령일 내림차순으로 정렬된 청구 요약 목록",
+ "items": {
+ "type": "object",
+ "additionalProperties": false,
+ "properties": {
+ "status": {
+ "type": "string",
+ "description": "청구 처리 상태 코드"
+ },
+ "statusLabel": {
+ "type": "string",
+ "description": "status의 사용자 표시 라벨"
+ },
+ "receivedDate": {
+ "type": "string",
+ "description": "접수일 (YYYY-MM-DD 형식)",
+ "format": "date"
+ },
+ "approvedAmount": {
+ "anyOf": [
+ {"type": "integer", "minimum": 0},
+ {"type": "null"}
+ ],
+ "description": "승인 금액. 심사 전에는 null"
+ }
+ },
+ "required": ["receivedDate"]
+ }
+ },
+ "hasMore": {
+ "type": "boolean",
+ "description": "이 응답 이후 추가 결과가 있는지 여부"
+ },
+ "totalCount": {
+ "anyOf": [
+ {"type": "integer", "minimum": 0},
+ {"type": "null"}
+ ],
+ "description": "매칭된 청구 건수 합계"
+ }
+ },
+ "required": ["resultCode", "resultLabel", "status", "statusLabel", "items", "hasMore"]
+}
diff --git a/dap-was-oth/src/test/java/io/shinhanlife/dap/mcc/biz/cmm/dto/ClaimSearchRequestSchemaTest.java b/dap-was-oth/src/test/java/io/shinhanlife/dap/mcc/biz/cmm/dto/ClaimSearchRequestSchemaTest.java
index e9e30de32..10f92c571 100644
--- a/dap-was-oth/src/test/java/io/shinhanlife/dap/mcc/biz/cmm/dto/ClaimSearchRequestSchemaTest.java
+++ b/dap-was-oth/src/test/java/io/shinhanlife/dap/mcc/biz/cmm/dto/ClaimSearchRequestSchemaTest.java
@@ -1,34 +1,19 @@
package io.shinhanlife.dap.mcc.biz.cmm.dto;
-/**
- * @package io.shinhanlife.dap.mcc.biz.cmm.dto
- * @className ClaimSearchRequestSchemaTest
- * @description AX HUB 시스템 처리 클래스
- * @author 0986406
- * @create 2026.09.01
- *
- * ---------- 개정이력 ----------
- * 수정일 수정자 수정내용
- * ---------- -------- ---------------------------
- * 2026.09.01 0986406 최초생성
- *
- *
- */
-
-
import static org.junit.jupiter.api.Assertions.assertEquals;
import static org.junit.jupiter.api.Assertions.assertTrue;
import com.fasterxml.jackson.databind.ObjectMapper;
-import io.shinhanlife.dap.lib.annotation.McpFunction;
import io.shinhanlife.dap.lib.util.JsonSchemaGenerator;
import io.shinhanlife.dap.lib.util.ToolSchemaResolver;
+import io.shinhanlife.dap.lib.annotation.ToolHint;
import io.shinhanlife.dap.mcc.biz.cmm.usecase.impl.ClaimSearchSchemaSampleUseCaseImpl;
import io.shinhanlife.dap.lib.validation.ToolArgumentSchemaValidator;import io.shinhanlife.dap.mcc.biz.cmm.usecase.ClaimSearchSchemaSampleUseCase;
import java.lang.reflect.Method;
import java.util.List;
import java.util.Map;
import org.junit.jupiter.api.Test;
+import org.springframework.ai.mcp.annotation.McpTool;
class ClaimSearchRequestSchemaTest {
@@ -50,10 +35,11 @@ class ClaimSearchRequestSchemaTest {
void resolvesSchemaFromToolModuleResource() throws Exception {
Method method = ClaimSearchSchemaSampleUseCase.class
.getDeclaredMethod("search", ClaimSearchRequest.class);
- McpFunction function = method.getAnnotation(McpFunction.class);
+ McpTool function = method.getAnnotation(McpTool.class);
+ ToolHint hint = method.getAnnotation(ToolHint.class);
Map schema = new ToolSchemaResolver(new ObjectMapper())
- .resolve(function, ClaimSearchRequest.class);
+ .resolve(function, hint, ClaimSearchRequest.class);
assertEquals("https://json-schema.org/draft/2020-12/schema", schema.get("$schema"));
assertTrue(schema.containsKey("anyOf"));
@@ -64,8 +50,10 @@ class ClaimSearchRequestSchemaTest {
void resolvesOutputSchemaFromToolModuleResource() throws Exception {
Method method = ClaimSearchSchemaSampleUseCase.class
.getDeclaredMethod("search", ClaimSearchRequest.class);
- McpFunction function = method.getAnnotation(McpFunction.class);
- Map schema = new ToolSchemaResolver(new ObjectMapper()).resolveOutput(function);
+ McpTool function = method.getAnnotation(McpTool.class);
+ ToolHint hint = method.getAnnotation(ToolHint.class);
+ Map schema = new ToolSchemaResolver(new ObjectMapper())
+ .resolveOutput(function, ClaimSearchResponse.class, hint);
assertEquals("https://json-schema.org/draft/2020-12/schema", schema.get("$schema"));
assertTrue(properties(schema).containsKey("resultCode"));
assertTrue(properties(schema).containsKey("statusLabel"));
@@ -78,7 +66,8 @@ class ClaimSearchRequestSchemaTest {
Method method = ClaimSearchSchemaSampleUseCase.class
.getDeclaredMethod("search", ClaimSearchRequest.class);
Map schema = new ToolSchemaResolver(new ObjectMapper())
- .resolveOutput(method.getAnnotation(McpFunction.class));
+ .resolveOutput(method.getAnnotation(McpTool.class), ClaimSearchResponse.class,
+ method.getAnnotation(ToolHint.class));
ClaimSearchResponse response = new ClaimSearchSchemaSampleUseCaseImpl().search(new ClaimSearchRequest());
ToolArgumentSchemaValidator validator = new ToolArgumentSchemaValidator(new ObjectMapper());
diff --git a/dap-was-oth/src/test/java/io/shinhanlife/dap/mcc/biz/oth/usecase/impl/Onnba3011UseCaseImplTest.java b/dap-was-oth/src/test/java/io/shinhanlife/dap/mcc/biz/oth/usecase/impl/Onnba3011UseCaseImplTest.java
index f10508236..cc909c812 100644
--- a/dap-was-oth/src/test/java/io/shinhanlife/dap/mcc/biz/oth/usecase/impl/Onnba3011UseCaseImplTest.java
+++ b/dap-was-oth/src/test/java/io/shinhanlife/dap/mcc/biz/oth/usecase/impl/Onnba3011UseCaseImplTest.java
@@ -1,21 +1,5 @@
package io.shinhanlife.dap.mcc.biz.oth.usecase.impl;
-/**
- * @package io.shinhanlife.dap.mcc.biz.oth.usecase.impl
- * @className Onnba3011UseCaseImplTest
- * @description AX HUB 시스템 처리 클래스
- * @author 0986406
- * @create 2026.09.01
- *
- * ---------- 개정이력 ----------
- * 수정일 수정자 수정내용
- * ---------- -------- ---------------------------
- * 2026.09.01 0986406 최초생성
- *
- *
- */
-
-
import static org.junit.jupiter.api.Assertions.assertEquals;
import static org.mockito.Mockito.verify;
import static org.mockito.Mockito.when;
diff --git a/dap-was-oth/src/test/java/io/shinhanlife/dap/mcc/biz/sol/usecase/impl/SolReqListUseCaseImplTest.java b/dap-was-oth/src/test/java/io/shinhanlife/dap/mcc/biz/sol/usecase/impl/SolReqListUseCaseImplTest.java
index b8ecf9b54..26ef60f74 100644
--- a/dap-was-oth/src/test/java/io/shinhanlife/dap/mcc/biz/sol/usecase/impl/SolReqListUseCaseImplTest.java
+++ b/dap-was-oth/src/test/java/io/shinhanlife/dap/mcc/biz/sol/usecase/impl/SolReqListUseCaseImplTest.java
@@ -1,21 +1,5 @@
package io.shinhanlife.dap.mcc.biz.sol.usecase.impl;
-/**
- * @package io.shinhanlife.dap.mcc.biz.sol.usecase.impl
- * @className SolReqListUseCaseImplTest
- * @description AX HUB 시스템 처리 클래스
- * @author 0986406
- * @create 2026.09.01
- *
- * ---------- 개정이력 ----------
- * 수정일 수정자 수정내용
- * ---------- -------- ---------------------------
- * 2026.09.01 0986406 최초생성
- *
- *
- */
-
-
import static org.assertj.core.api.Assertions.assertThat;
import static org.mockito.ArgumentMatchers.eq;
import static org.mockito.Mockito.verify;
diff --git a/dap-was-oth/src/test/java/io/shinhanlife/dap/mcc/infra/itrf/mci/cfp/a/converter/Onnba3011MciRequestConverterTest.java b/dap-was-oth/src/test/java/io/shinhanlife/dap/mcc/infra/itrf/mci/cfp/a/converter/Onnba3011MciRequestConverterTest.java
index df749d020..d7e3a564f 100644
--- a/dap-was-oth/src/test/java/io/shinhanlife/dap/mcc/infra/itrf/mci/cfp/a/converter/Onnba3011MciRequestConverterTest.java
+++ b/dap-was-oth/src/test/java/io/shinhanlife/dap/mcc/infra/itrf/mci/cfp/a/converter/Onnba3011MciRequestConverterTest.java
@@ -1,21 +1,5 @@
package io.shinhanlife.dap.mcc.infra.itrf.mci.cfp.a.converter;
-/**
- * @package io.shinhanlife.dap.mcc.infra.itrf.mci.cfp.a.converter
- * @className Onnba3011MciRequestConverterTest
- * @description AX HUB 시스템 처리 클래스
- * @author 0986406
- * @create 2026.09.01
- *
- * ---------- 개정이력 ----------
- * 수정일 수정자 수정내용
- * ---------- -------- ---------------------------
- * 2026.09.01 0986406 최초생성
- *
- *
- */
-
-
import static org.junit.jupiter.api.Assertions.assertEquals;
import static org.junit.jupiter.api.Assertions.assertNotNull;
diff --git a/dap-was-sms/src/main/java/io/shinhanlife/dap/mcc/biz/sms/dto/SmsSendRequest.java b/dap-was-sms/src/main/java/io/shinhanlife/dap/mcc/biz/sms/dto/SmsSendRequest.java
index b7cea0df7..32bcdbeb5 100644
--- a/dap-was-sms/src/main/java/io/shinhanlife/dap/mcc/biz/sms/dto/SmsSendRequest.java
+++ b/dap-was-sms/src/main/java/io/shinhanlife/dap/mcc/biz/sms/dto/SmsSendRequest.java
@@ -1,11 +1,14 @@
package io.shinhanlife.dap.mcc.biz.sms.dto;
+
+
+
+import io.swagger.v3.oas.annotations.media.Schema;
+import org.springframework.ai.mcp.annotation.McpToolParam;
import lombok.Builder;
import lombok.NoArgsConstructor;
import lombok.AllArgsConstructor;
-import io.shinhanlife.dap.lib.annotation.McpParameter;
-import io.shinhanlife.dap.lib.annotation.McpValidation;
import lombok.Getter;
import lombok.Setter;
@@ -30,13 +33,14 @@ import lombok.Setter;
@AllArgsConstructor
public class SmsSendRequest {
- @McpParameter(description = "수신자 전화번호", required = true)
- @McpValidation(pattern = "^01[0-9]-?\\d{3,4}-?\\d{4}$")
+ @McpToolParam(description = "수신자 전화번호", required = true)
+ @Schema(pattern = "^01[0-9]-?\\d{3,4}-?\\d{4}$", example = "01012345678")
private String phoneNumber;
- @McpParameter(description = "전송할 메시지 내용", required = true)
- @McpValidation(pattern = "\\S")
+
+@McpToolParam(description = "전송할 메시지 내용", required = true)
+ @Schema(pattern = "\\S", example = "테스트 메시지입니다.")
private String message;
-}
+}
\ No newline at end of file
diff --git a/dap-was-sms/src/main/java/io/shinhanlife/dap/mcc/biz/sms/usecase/SmsToolUseCase.java b/dap-was-sms/src/main/java/io/shinhanlife/dap/mcc/biz/sms/usecase/SmsToolUseCase.java
index 36a608714..0c544e8ff 100644
--- a/dap-was-sms/src/main/java/io/shinhanlife/dap/mcc/biz/sms/usecase/SmsToolUseCase.java
+++ b/dap-was-sms/src/main/java/io/shinhanlife/dap/mcc/biz/sms/usecase/SmsToolUseCase.java
@@ -1,26 +1,11 @@
package io.shinhanlife.dap.mcc.biz.sms.usecase;
-/**
- * @package io.shinhanlife.dap.mcc.biz.sms.usecase
- * @className SmsToolUseCase
- * @description AX HUB 시스템 처리 클래스
- * @author 0986406
- * @create 2026.09.01
- *
- * ---------- 개정이력 ----------
- * 수정일 수정자 수정내용
- * ---------- -------- ---------------------------
- * 2026.09.01 0986406 최초생성
- *
- *
- */
-
-
-import io.shinhanlife.dap.lib.annotation.McpTool;
-import io.shinhanlife.dap.lib.annotation.McpFunction;
+import org.springframework.ai.mcp.annotation.McpTool;
+import io.shinhanlife.dap.lib.annotation.ToolHint;
import io.shinhanlife.dap.mcc.biz.sms.dto.*;
-@McpTool(routingType = "EAI", categoryKey = "notification")
public interface SmsToolUseCase {
+ @McpTool(name = "sms.send", title = "SMS 발송 툴", description = "SMS 발송 기능을 제공합니다.")
+ @ToolHint(register = false, categoryKey = "notification", mappingId = "SMS_SEND")
Object sendSms(SmsSendRequest req);
}
diff --git a/dap-was-sms/src/main/resources/application-local.yml b/dap-was-sms/src/main/resources/application-local.yml
index 833d4fa62..13593bf4a 100644
--- a/dap-was-sms/src/main/resources/application-local.yml
+++ b/dap-was-sms/src/main/resources/application-local.yml
@@ -4,7 +4,7 @@ spring:
url: jdbc:p6spy:h2:mem:testdb;DB_CLOSE_DELAY=-1;
driverClassName: com.p6spy.engine.spy.P6SpyDriver
username: sa
- password: ${REDIS_PASSWORD:}
+ password: password
h2:
console:
enabled: true
@@ -33,5 +33,7 @@ mcp:
mcp-client-2: ALL
axhub:
+ gateway:
+ url: http://localhost:8081
tool:
url: ${AXHUB_TOOL_URL:http://localhost:${server.port}}
\ No newline at end of file
diff --git a/docs/superpowers/plans/2026-08-04-readme-current-was.md b/docs/superpowers/plans/2026-08-04-readme-current-was.md
deleted file mode 100644
index e64d57ba2..000000000
--- a/docs/superpowers/plans/2026-08-04-readme-current-was.md
+++ /dev/null
@@ -1,62 +0,0 @@
-# Current WAS README Implementation Plan
-
-> **For agentic workers:** REQUIRED SUB-SKILL: Use superpowers:subagent-driven-development (recommended) or superpowers:executing-plans to implement this plan task-by-task. Steps use checkbox (`- [ ]`) syntax for tracking.
-
-**Goal:** Replace the README's removed Gateway-era documentation with an accurate guide to the current independent Tool WAS modules.
-
-**Architecture:** The README becomes the single user-facing reference for the Gradle modules, the two Tool Pods, direct REST and Streamable HTTP MCP access, schema resolution, local configuration, and Docker Compose. Every statement must be traceable to the current checked-in source or configuration; stale Dockerfile jar paths and the missing SMS `@McpFunction` are documented as explicit limitations.
-
-**Tech Stack:** Java 21, Spring Boot 4.0.5, Gradle 8.14.3, Spring AI MCP Server WebMVC, Redis, Docker Compose.
-
-## Global Constraints
-
-- Modify only `README.md` for the requested deliverable; do not restore or alter Java source, Gradle, Docker, or CI files.
-- Describe only current Tool WAS behavior; exclude the removed `dap-gateway`, Chat API, SSE transport, and external registry/heartbeat workflow.
-- Use exact module names `dap-was-lib`, `dap-was-oth`, and `dap-was-sms`.
-- Label stale Dockerfile jar paths and the missing SMS `@McpFunction` as known implementation limitations, not supported behavior.
-
----
-
-### Task 1: Replace the obsolete README content
-
-**Files:**
-- Modify: `README.md`
-
-**Interfaces:**
-- Consumes: Gradle module declarations in `settings.gradle`, runtime configuration in both Tool Pods, `BusinessToolController`, `ToolManifestController`, `ToolMcpServerConfiguration`, `LocalToolScanner`, and `ToolPodMcpToolSynchronizer` from `HEAD`.
-- Produces: A self-contained Korean README for developers operating or extending the current Tool WAS deployment.
-
-- [x] **Step 1: Create a fact inventory before editing**
-
-Record the following source-backed details for use in the README:
-
-```text
-Modules: dap-was-lib, dap-was-sms, dap-was-oth
-Ports: SMS 8082, OTH 8084
-REST endpoints: GET /mcp/api/v1/tools/local, POST /mcp/{name}, GET /tool-manifest
-MCP transport: Streamable HTTP at /mcp
-Compose host ports: SMS 8282, OTH 8284, Redis 6379, WireMock 8089
-```
-
-- [x] **Step 2: Rewrite README sections**
-
-Replace Gateway-centric architecture, commands, URLs, environment variables, and future Gateway design material with sections for architecture, modules, API behavior, tool development, schema behavior, local/Docker execution, configuration, testing, and known limitations.
-
-- [x] **Step 3: Verify README facts mechanically**
-
-Run:
-
-```powershell
-rg -n "dap-gateway|OPENROUTER|/api/chat|/mcp/sse|AXHUB_GATEWAY_URL|ToolRegistryHeartbeatSender" README.md
-rg -n "dap-was-(lib|sms|oth)|/mcp/\{name\}|/tool-manifest|/mcp/api/v1/tools/local|8282|8284" README.md
-```
-
-Expected: the first command produces no matches; the second shows the retained current implementation references.
-
-- [x] **Step 4: Cross-check every endpoint and command**
-
-Compare README endpoint statements with the Java controller/configuration classes and compare module names, ports, profiles, and Docker service names with `settings.gradle`, `application*.yml`, and `docker-compose.yml`. Confirm that the README explicitly distinguishes source-backed behavior from known blockers.
-
-- [ ] **Step 5: Commit**
-
-Do not commit unless the user explicitly requests a commit; the workspace already contains unrelated migration changes.
diff --git a/docs/superpowers/plans/2026-08-06-mcp-sdk-validator-updater.md b/docs/superpowers/plans/2026-08-06-mcp-sdk-validator-updater.md
new file mode 100644
index 000000000..30e9988a0
--- /dev/null
+++ b/docs/superpowers/plans/2026-08-06-mcp-sdk-validator-updater.md
@@ -0,0 +1,61 @@
+# MCP SDK Validator and Source Updater Implementation Plan
+
+> **For agentic workers:** REQUIRED SUB-SKILL: Use superpowers:subagent-driven-development (recommended) or superpowers:executing-plans to implement this plan task-by-task. Steps use checkbox (`- [ ]`) syntax for tracking.
+
+**Goal:** Keep tool-name validation and source metadata updates functional after replacing the custom `@McpFunction` annotation with Spring AI's `@McpTool`.
+
+**Architecture:** `McpToolNameValidator` will scan `@McpTool(name = "...")` declarations for naming and duplication rules. `ToolSourceUpdater` will update SDK-owned fields (`name`, `description`) on `@McpTool` and project-owned fields (`group`, `register`, `requiresApproval`) on adjacent `@ToolHint`, without trying to write unsupported fields to the SDK annotation.
+
+**Tech Stack:** Java 21, JUnit 5, Spring AI MCP annotations, Gradle.
+
+## Global Constraints
+
+- Preserve the existing tool-name convention and duplicate-name build validation.
+- Do not reintroduce the removed custom `McpFunction` annotation.
+- Keep project-specific metadata in `io.shinhanlife.dap.lib.annotation.ToolHint`.
+- Verify with focused tests and `gradlew.bat test`.
+
+---
+
+### Task 1: Migrate tool-name validation
+
+**Files:**
+- Modify: `dap-was-lib/src/main/java/io/shinhanlife/dap/lib/validation/McpToolNameValidator.java`
+- Modify: `dap-was-lib/src/test/java/io/shinhanlife/dap/lib/validation/McpToolNameValidatorTest.java`
+
+**Interfaces:**
+- Consumes: Java source files containing `@McpTool(name = "...")`.
+- Produces: `McpToolNameValidator.assertUnique(Path)` that rejects duplicate or invalid SDK tool names.
+
+- [ ] Write tests using `@McpTool` source snippets for duplicate, invalid, and valid names.
+- [ ] Run `:dap-was-lib:test --tests *McpToolNameValidatorTest` and confirm current implementation does not detect those annotations.
+- [ ] Replace the annotation scan target from `@McpFunction` to `@McpTool`.
+- [ ] Re-run the focused test and confirm it passes.
+
+### Task 2: Migrate source metadata update behavior
+
+**Files:**
+- Modify: `dap-was-lib/src/main/java/io/shinhanlife/dap/lib/util/ToolSourceUpdater.java`
+- Create: `dap-was-lib/src/test/java/io/shinhanlife/dap/lib/util/ToolSourceUpdaterTest.java`
+
+**Interfaces:**
+- Consumes: a tool interface source containing `@McpTool` and `@ToolHint`.
+- Produces: `ToolSourceUpdater.updateToolSource(String, String, String, boolean, Boolean)` that updates SDK name/description and project metadata without emitting invalid `@McpTool` attributes.
+
+- [ ] Write a temporary-source test defining one SDK annotation and one `ToolHint` annotation.
+- [ ] Run the focused test and confirm the legacy updater cannot locate `@McpTool` declarations.
+- [ ] Update annotation matching and replacements: `description` belongs to `@McpTool`; `group`, `register`, and `requiresApproval` belong to `@ToolHint`.
+- [ ] Re-run the focused test and confirm it passes.
+
+### Task 3: Restore test-suite compilation after SDK migration
+
+**Files:**
+- Modify: stale tests referencing `McpFunction` or old package locations.
+
+**Interfaces:**
+- Consumes: `McpTool`, `ToolHint`, current `ToolSchemaResolver`, and current package names.
+- Produces: compilation and behavioral coverage aligned with the SDK-based production code.
+
+- [ ] Replace stale annotation and resolver signatures in tests.
+- [ ] Fix package relocation and missing assertion imports without widening production visibility.
+- [ ] Run `gradlew.bat test`.