Initial commit

This commit is contained in:
jade
2026-08-14 18:16:14 +09:00
commit 22f4fab58d
656 changed files with 22614 additions and 0 deletions

View File

@@ -0,0 +1,34 @@
package io.shinhanlife.dap.mcc.biz.crm.dto;
import lombok.Data;
import org.springaicommunity.mcp.annotation.McpToolParam;
@Data
public class CrmToolRequest {
@McpToolParam(description = "업무 대상 식별자", required = false)
private String subjectId;
@McpToolParam(description = "고객 식별자", required = false)
private String customerId;
@McpToolParam(description = "검색어 또는 처리 내용", required = false)
private String content;
@McpToolParam(description = "상태, 유형, 등급 또는 처리 값", required = false)
private String value;
@McpToolParam(description = "담당자 식별자", required = false)
private String assigneeId;
@McpToolParam(description = "조회 시작일(YYYY-MM-DD)", required = false)
private String startDate;
@McpToolParam(description = "조회 종료일 또는 처리 예정일(YYYY-MM-DD)", required = false)
private String endDate;
@McpToolParam(description = "페이지 번호", required = false)
private Integer page;
@McpToolParam(description = "페이지 크기", required = false)
private Integer size;
}

View File

@@ -0,0 +1,15 @@
package io.shinhanlife.dap.mcc.biz.crm.dto;
import java.util.List;
import lombok.Data;
@Data
public class CrmToolResponse {
private String toolName;
private String category;
private String referenceId;
private String status;
private String summary;
private String processedAt;
private List<String> details;
}

View File

@@ -0,0 +1,60 @@
package io.shinhanlife.dap.mcc.biz.crm.usecase;
import io.shinhanlife.dap.lib.annotation.GrowToolHint;
import io.shinhanlife.dap.mcc.biz.crm.dto.CrmToolRequest;
import io.shinhanlife.dap.mcc.biz.crm.dto.CrmToolResponse;
import org.springaicommunity.mcp.annotation.McpTool;
public interface CrmToolUseCase {
@McpTool(name = "crm_customer_search", title = "고객 통합 조회", description = "고객 통합 조회 기능을 안전한 모의 데이터로 제공합니다.")
@GrowToolHint(requiresApproval = false, categoryKey = "crm", mappingId = "DIRECT_CRM_CUSTOMER_SEARCH")
CrmToolResponse searchCustomers(CrmToolRequest request);
@McpTool(name = "crm_customer_detail", title = "고객 상세 정보 조회", description = "고객 상세 정보 조회 기능을 안전한 모의 데이터로 제공합니다.")
@GrowToolHint(requiresApproval = false, categoryKey = "crm", mappingId = "DIRECT_CRM_CUSTOMER_DETAIL")
CrmToolResponse getCustomerDetail(CrmToolRequest request);
@McpTool(name = "crm_customer_create", title = "고객 정보 등록", description = "고객 정보 등록 기능을 안전한 모의 데이터로 제공합니다.")
@GrowToolHint(requiresApproval = true, categoryKey = "crm", mappingId = "DIRECT_CRM_CUSTOMER_CREATE")
CrmToolResponse createCustomer(CrmToolRequest request);
@McpTool(name = "crm_customer_update", title = "고객 정보 수정", description = "고객 정보 수정 기능을 안전한 모의 데이터로 제공합니다.")
@GrowToolHint(requiresApproval = true, categoryKey = "crm", mappingId = "DIRECT_CRM_CUSTOMER_UPDATE")
CrmToolResponse updateCustomer(CrmToolRequest request);
@McpTool(name = "crm_customer_duplicate_check", title = "고객 중복 여부 확인", description = "고객 중복 여부 확인 기능을 안전한 모의 데이터로 제공합니다.")
@GrowToolHint(requiresApproval = false, categoryKey = "crm", mappingId = "DIRECT_CRM_CUSTOMER_DUPLICATE_CHECK")
CrmToolResponse checkDuplicateCustomer(CrmToolRequest request);
@McpTool(name = "crm_consultation_history", title = "고객 상담 이력 조회", description = "고객 상담 이력 조회 기능을 안전한 모의 데이터로 제공합니다.")
@GrowToolHint(requiresApproval = false, categoryKey = "crm", mappingId = "DIRECT_CRM_CONSULTATION_HISTORY")
CrmToolResponse getConsultationHistory(CrmToolRequest request);
@McpTool(name = "crm_consultation_register", title = "고객 상담 이력 등록", description = "고객 상담 이력 등록 기능을 안전한 모의 데이터로 제공합니다.")
@GrowToolHint(requiresApproval = true, categoryKey = "crm", mappingId = "DIRECT_CRM_CONSULTATION_REGISTER")
CrmToolResponse registerConsultation(CrmToolRequest request);
@McpTool(name = "crm_contact_history", title = "고객 접촉 이력 조회", description = "고객 접촉 이력 조회 기능을 안전한 모의 데이터로 제공합니다.")
@GrowToolHint(requiresApproval = false, categoryKey = "crm", mappingId = "DIRECT_CRM_CONTACT_HISTORY")
CrmToolResponse getContactHistory(CrmToolRequest request);
@McpTool(name = "crm_contact_register", title = "고객 접촉 이력 등록", description = "고객 접촉 이력 등록 기능을 안전한 모의 데이터로 제공합니다.")
@GrowToolHint(requiresApproval = true, categoryKey = "crm", mappingId = "DIRECT_CRM_CONTACT_REGISTER")
CrmToolResponse registerContact(CrmToolRequest request);
@McpTool(name = "crm_grade_detail", title = "고객 등급 조회", description = "고객 등급 조회 기능을 안전한 모의 데이터로 제공합니다.")
@GrowToolHint(requiresApproval = false, categoryKey = "crm", mappingId = "DIRECT_CRM_GRADE_DETAIL")
CrmToolResponse getCustomerGrade(CrmToolRequest request);
@McpTool(name = "crm_grade_change", title = "고객 등급 변경", description = "고객 등급 변경 기능을 안전한 모의 데이터로 제공합니다.")
@GrowToolHint(requiresApproval = true, categoryKey = "crm", mappingId = "DIRECT_CRM_GRADE_CHANGE")
CrmToolResponse changeCustomerGrade(CrmToolRequest request);
@McpTool(name = "crm_segment_detail", title = "고객 세그먼트 조회", description = "고객 세그먼트 조회 기능을 안전한 모의 데이터로 제공합니다.")
@GrowToolHint(requiresApproval = false, categoryKey = "crm", mappingId = "DIRECT_CRM_SEGMENT_DETAIL")
CrmToolResponse getCustomerSegment(CrmToolRequest request);
@McpTool(name = "crm_tag_manage", title = "고객 태그 관리", description = "고객 태그 관리 기능을 안전한 모의 데이터로 제공합니다.")
@GrowToolHint(requiresApproval = true, categoryKey = "crm", mappingId = "DIRECT_CRM_TAG_MANAGE")
CrmToolResponse manageCustomerTags(CrmToolRequest request);
@McpTool(name = "crm_consent_detail", title = "고객 동의 정보 조회", description = "고객 동의 정보 조회 기능을 안전한 모의 데이터로 제공합니다.")
@GrowToolHint(requiresApproval = false, categoryKey = "crm", mappingId = "DIRECT_CRM_CONSENT_DETAIL")
CrmToolResponse getCustomerConsent(CrmToolRequest request);
@McpTool(name = "crm_consent_change", title = "고객 동의 정보 변경", description = "고객 동의 정보 변경 기능을 안전한 모의 데이터로 제공합니다.")
@GrowToolHint(requiresApproval = true, categoryKey = "crm", mappingId = "DIRECT_CRM_CONSENT_CHANGE")
CrmToolResponse changeCustomerConsent(CrmToolRequest request);
@McpTool(name = "crm_owner_assign", title = "고객 담당자 배정", description = "고객 담당자 배정 기능을 안전한 모의 데이터로 제공합니다.")
@GrowToolHint(requiresApproval = true, categoryKey = "crm", mappingId = "DIRECT_CRM_OWNER_ASSIGN")
CrmToolResponse assignCustomerOwner(CrmToolRequest request);
@McpTool(name = "crm_activity_status", title = "고객 활동 현황 조회", description = "고객 활동 현황 조회 기능을 안전한 모의 데이터로 제공합니다.")
@GrowToolHint(requiresApproval = false, categoryKey = "crm", mappingId = "DIRECT_CRM_ACTIVITY_STATUS")
CrmToolResponse getCustomerActivityStatus(CrmToolRequest request);
}

View File

@@ -0,0 +1,95 @@
package io.shinhanlife.dap.mcc.biz.crm.usecase.impl;
import io.shinhanlife.dap.mcc.biz.crm.dto.CrmToolRequest;
import io.shinhanlife.dap.mcc.biz.crm.dto.CrmToolResponse;
import io.shinhanlife.dap.mcc.biz.crm.usecase.CrmToolUseCase;
import java.time.LocalDateTime;
import java.util.List;
import org.springframework.stereotype.Service;
@Service
public class CrmToolUseCaseImpl implements CrmToolUseCase {
@Override
public CrmToolResponse searchCustomers(CrmToolRequest request) {
return mockResponse(request, "crm_customer_search", "고객 통합 조회");
}
@Override
public CrmToolResponse getCustomerDetail(CrmToolRequest request) {
return mockResponse(request, "crm_customer_detail", "고객 상세 정보 조회");
}
@Override
public CrmToolResponse createCustomer(CrmToolRequest request) {
return mockResponse(request, "crm_customer_create", "고객 정보 등록");
}
@Override
public CrmToolResponse updateCustomer(CrmToolRequest request) {
return mockResponse(request, "crm_customer_update", "고객 정보 수정");
}
@Override
public CrmToolResponse checkDuplicateCustomer(CrmToolRequest request) {
return mockResponse(request, "crm_customer_duplicate_check", "고객 중복 여부 확인");
}
@Override
public CrmToolResponse getConsultationHistory(CrmToolRequest request) {
return mockResponse(request, "crm_consultation_history", "고객 상담 이력 조회");
}
@Override
public CrmToolResponse registerConsultation(CrmToolRequest request) {
return mockResponse(request, "crm_consultation_register", "고객 상담 이력 등록");
}
@Override
public CrmToolResponse getContactHistory(CrmToolRequest request) {
return mockResponse(request, "crm_contact_history", "고객 접촉 이력 조회");
}
@Override
public CrmToolResponse registerContact(CrmToolRequest request) {
return mockResponse(request, "crm_contact_register", "고객 접촉 이력 등록");
}
@Override
public CrmToolResponse getCustomerGrade(CrmToolRequest request) {
return mockResponse(request, "crm_grade_detail", "고객 등급 조회");
}
@Override
public CrmToolResponse changeCustomerGrade(CrmToolRequest request) {
return mockResponse(request, "crm_grade_change", "고객 등급 변경");
}
@Override
public CrmToolResponse getCustomerSegment(CrmToolRequest request) {
return mockResponse(request, "crm_segment_detail", "고객 세그먼트 조회");
}
@Override
public CrmToolResponse manageCustomerTags(CrmToolRequest request) {
return mockResponse(request, "crm_tag_manage", "고객 태그 관리");
}
@Override
public CrmToolResponse getCustomerConsent(CrmToolRequest request) {
return mockResponse(request, "crm_consent_detail", "고객 동의 정보 조회");
}
@Override
public CrmToolResponse changeCustomerConsent(CrmToolRequest request) {
return mockResponse(request, "crm_consent_change", "고객 동의 정보 변경");
}
@Override
public CrmToolResponse assignCustomerOwner(CrmToolRequest request) {
return mockResponse(request, "crm_owner_assign", "고객 담당자 배정");
}
@Override
public CrmToolResponse getCustomerActivityStatus(CrmToolRequest request) {
return mockResponse(request, "crm_activity_status", "고객 활동 현황 조회");
}
private CrmToolResponse mockResponse(CrmToolRequest request, String toolName, String title) {
CrmToolResponse response = new CrmToolResponse();
response.setToolName(toolName);
response.setCategory("CRM");
response.setReferenceId(request != null && hasText(request.getSubjectId()) ? request.getSubjectId() : "CRM-000001");
response.setStatus("정상");
response.setSummary(title + " 처리 결과");
response.setProcessedAt(LocalDateTime.now().toString());
response.setDetails(List.of(title + " 모의 상세 정보", "외부 시스템을 변경하지 않는 샘플 응답"));
return response;
}
private boolean hasText(String value) {
return value != null && !value.isBlank();
}
}

View File

@@ -0,0 +1,34 @@
package io.shinhanlife.dap.mcc.biz.voc.dto;
import lombok.Data;
import org.springaicommunity.mcp.annotation.McpToolParam;
@Data
public class VocToolRequest {
@McpToolParam(description = "업무 대상 식별자", required = false)
private String subjectId;
@McpToolParam(description = "고객 식별자", required = false)
private String customerId;
@McpToolParam(description = "검색어 또는 처리 내용", required = false)
private String content;
@McpToolParam(description = "상태, 유형, 등급 또는 처리 값", required = false)
private String value;
@McpToolParam(description = "담당자 식별자", required = false)
private String assigneeId;
@McpToolParam(description = "조회 시작일(YYYY-MM-DD)", required = false)
private String startDate;
@McpToolParam(description = "조회 종료일 또는 처리 예정일(YYYY-MM-DD)", required = false)
private String endDate;
@McpToolParam(description = "페이지 번호", required = false)
private Integer page;
@McpToolParam(description = "페이지 크기", required = false)
private Integer size;
}

View File

@@ -0,0 +1,15 @@
package io.shinhanlife.dap.mcc.biz.voc.dto;
import java.util.List;
import lombok.Data;
@Data
public class VocToolResponse {
private String toolName;
private String category;
private String referenceId;
private String status;
private String summary;
private String processedAt;
private List<String> details;
}

View File

@@ -0,0 +1,60 @@
package io.shinhanlife.dap.mcc.biz.voc.usecase;
import io.shinhanlife.dap.lib.annotation.GrowToolHint;
import io.shinhanlife.dap.mcc.biz.voc.dto.VocToolRequest;
import io.shinhanlife.dap.mcc.biz.voc.dto.VocToolResponse;
import org.springaicommunity.mcp.annotation.McpTool;
public interface VocToolUseCase {
@McpTool(name = "voc_register", title = "VOC 접수 등록", description = "VOC 접수 등록 기능을 안전한 모의 데이터로 제공합니다.")
@GrowToolHint(requiresApproval = true, categoryKey = "voc", mappingId = "DIRECT_VOC_REGISTER")
VocToolResponse registerVoc(VocToolRequest request);
@McpTool(name = "voc_detail", title = "VOC 상세 조회", description = "VOC 상세 조회 기능을 안전한 모의 데이터로 제공합니다.")
@GrowToolHint(requiresApproval = false, categoryKey = "voc", mappingId = "DIRECT_VOC_DETAIL")
VocToolResponse getVocDetail(VocToolRequest request);
@McpTool(name = "voc_search", title = "VOC 목록 검색", description = "VOC 목록 검색 기능을 안전한 모의 데이터로 제공합니다.")
@GrowToolHint(requiresApproval = false, categoryKey = "voc", mappingId = "DIRECT_VOC_SEARCH")
VocToolResponse searchVocs(VocToolRequest request);
@McpTool(name = "voc_update", title = "VOC 내용 수정", description = "VOC 내용 수정 기능을 안전한 모의 데이터로 제공합니다.")
@GrowToolHint(requiresApproval = true, categoryKey = "voc", mappingId = "DIRECT_VOC_UPDATE")
VocToolResponse updateVoc(VocToolRequest request);
@McpTool(name = "voc_assign", title = "VOC 담당자 배정", description = "VOC 담당자 배정 기능을 안전한 모의 데이터로 제공합니다.")
@GrowToolHint(requiresApproval = true, categoryKey = "voc", mappingId = "DIRECT_VOC_ASSIGN")
VocToolResponse assignVocOwner(VocToolRequest request);
@McpTool(name = "voc_change_status", title = "VOC 처리 상태 변경", description = "VOC 처리 상태 변경 기능을 안전한 모의 데이터로 제공합니다.")
@GrowToolHint(requiresApproval = true, categoryKey = "voc", mappingId = "DIRECT_VOC_CHANGE_STATUS")
VocToolResponse changeVocStatus(VocToolRequest request);
@McpTool(name = "voc_register_result", title = "VOC 처리 결과 등록", description = "VOC 처리 결과 등록 기능을 안전한 모의 데이터로 제공합니다.")
@GrowToolHint(requiresApproval = true, categoryKey = "voc", mappingId = "DIRECT_VOC_REGISTER_RESULT")
VocToolResponse registerVocResult(VocToolRequest request);
@McpTool(name = "voc_send_reply", title = "VOC 답변 발송", description = "VOC 답변 발송 기능을 안전한 모의 데이터로 제공합니다.")
@GrowToolHint(requiresApproval = true, categoryKey = "voc", mappingId = "DIRECT_VOC_SEND_REPLY")
VocToolResponse sendVocReply(VocToolRequest request);
@McpTool(name = "voc_transfer", title = "VOC 이관 처리", description = "VOC 이관 처리 기능을 안전한 모의 데이터로 제공합니다.")
@GrowToolHint(requiresApproval = true, categoryKey = "voc", mappingId = "DIRECT_VOC_TRANSFER")
VocToolResponse transferVoc(VocToolRequest request);
@McpTool(name = "voc_set_priority", title = "VOC 우선순위 설정", description = "VOC 우선순위 설정 기능을 안전한 모의 데이터로 제공합니다.")
@GrowToolHint(requiresApproval = true, categoryKey = "voc", mappingId = "DIRECT_VOC_SET_PRIORITY")
VocToolResponse setVocPriority(VocToolRequest request);
@McpTool(name = "voc_classify_type", title = "VOC 유형 분류", description = "VOC 유형 분류 기능을 안전한 모의 데이터로 제공합니다.")
@GrowToolHint(requiresApproval = true, categoryKey = "voc", mappingId = "DIRECT_VOC_CLASSIFY_TYPE")
VocToolResponse classifyVocType(VocToolRequest request);
@McpTool(name = "voc_attachments", title = "VOC 첨부파일 조회", description = "VOC 첨부파일 조회 기능을 안전한 모의 데이터로 제공합니다.")
@GrowToolHint(requiresApproval = false, categoryKey = "voc", mappingId = "DIRECT_VOC_ATTACHMENTS")
VocToolResponse getVocAttachments(VocToolRequest request);
@McpTool(name = "voc_customer_history", title = "고객별 VOC 이력 조회", description = "고객별 VOC 이력 조회 기능을 안전한 모의 데이터로 제공합니다.")
@GrowToolHint(requiresApproval = false, categoryKey = "voc", mappingId = "DIRECT_VOC_CUSTOMER_HISTORY")
VocToolResponse getCustomerVocHistory(VocToolRequest request);
@McpTool(name = "voc_detect_duplicate", title = "중복 VOC 탐지", description = "중복 VOC 탐지 기능을 안전한 모의 데이터로 제공합니다.")
@GrowToolHint(requiresApproval = false, categoryKey = "voc", mappingId = "DIRECT_VOC_DETECT_DUPLICATE")
VocToolResponse detectDuplicateVoc(VocToolRequest request);
@McpTool(name = "voc_urgent_list", title = "긴급 VOC 목록 조회", description = "긴급 VOC 목록 조회 기능을 안전한 모의 데이터로 제공합니다.")
@GrowToolHint(requiresApproval = false, categoryKey = "voc", mappingId = "DIRECT_VOC_URGENT_LIST")
VocToolResponse getUrgentVocs(VocToolRequest request);
@McpTool(name = "voc_extend_due_date", title = "VOC 처리 기한 연장", description = "VOC 처리 기한 연장 기능을 안전한 모의 데이터로 제공합니다.")
@GrowToolHint(requiresApproval = true, categoryKey = "voc", mappingId = "DIRECT_VOC_EXTEND_DUE_DATE")
VocToolResponse extendVocDueDate(VocToolRequest request);
@McpTool(name = "voc_statistics", title = "VOC 통계 조회", description = "VOC 통계 조회 기능을 안전한 모의 데이터로 제공합니다.")
@GrowToolHint(requiresApproval = false, categoryKey = "voc", mappingId = "DIRECT_VOC_STATISTICS")
VocToolResponse getVocStatistics(VocToolRequest request);
}

View File

@@ -0,0 +1,95 @@
package io.shinhanlife.dap.mcc.biz.voc.usecase.impl;
import io.shinhanlife.dap.mcc.biz.voc.dto.VocToolRequest;
import io.shinhanlife.dap.mcc.biz.voc.dto.VocToolResponse;
import io.shinhanlife.dap.mcc.biz.voc.usecase.VocToolUseCase;
import java.time.LocalDateTime;
import java.util.List;
import org.springframework.stereotype.Service;
@Service
public class VocToolUseCaseImpl implements VocToolUseCase {
@Override
public VocToolResponse registerVoc(VocToolRequest request) {
return mockResponse(request, "voc_register", "VOC 접수 등록");
}
@Override
public VocToolResponse getVocDetail(VocToolRequest request) {
return mockResponse(request, "voc_detail", "VOC 상세 조회");
}
@Override
public VocToolResponse searchVocs(VocToolRequest request) {
return mockResponse(request, "voc_search", "VOC 목록 검색");
}
@Override
public VocToolResponse updateVoc(VocToolRequest request) {
return mockResponse(request, "voc_update", "VOC 내용 수정");
}
@Override
public VocToolResponse assignVocOwner(VocToolRequest request) {
return mockResponse(request, "voc_assign", "VOC 담당자 배정");
}
@Override
public VocToolResponse changeVocStatus(VocToolRequest request) {
return mockResponse(request, "voc_change_status", "VOC 처리 상태 변경");
}
@Override
public VocToolResponse registerVocResult(VocToolRequest request) {
return mockResponse(request, "voc_register_result", "VOC 처리 결과 등록");
}
@Override
public VocToolResponse sendVocReply(VocToolRequest request) {
return mockResponse(request, "voc_send_reply", "VOC 답변 발송");
}
@Override
public VocToolResponse transferVoc(VocToolRequest request) {
return mockResponse(request, "voc_transfer", "VOC 이관 처리");
}
@Override
public VocToolResponse setVocPriority(VocToolRequest request) {
return mockResponse(request, "voc_set_priority", "VOC 우선순위 설정");
}
@Override
public VocToolResponse classifyVocType(VocToolRequest request) {
return mockResponse(request, "voc_classify_type", "VOC 유형 분류");
}
@Override
public VocToolResponse getVocAttachments(VocToolRequest request) {
return mockResponse(request, "voc_attachments", "VOC 첨부파일 조회");
}
@Override
public VocToolResponse getCustomerVocHistory(VocToolRequest request) {
return mockResponse(request, "voc_customer_history", "고객별 VOC 이력 조회");
}
@Override
public VocToolResponse detectDuplicateVoc(VocToolRequest request) {
return mockResponse(request, "voc_detect_duplicate", "중복 VOC 탐지");
}
@Override
public VocToolResponse getUrgentVocs(VocToolRequest request) {
return mockResponse(request, "voc_urgent_list", "긴급 VOC 목록 조회");
}
@Override
public VocToolResponse extendVocDueDate(VocToolRequest request) {
return mockResponse(request, "voc_extend_due_date", "VOC 처리 기한 연장");
}
@Override
public VocToolResponse getVocStatistics(VocToolRequest request) {
return mockResponse(request, "voc_statistics", "VOC 통계 조회");
}
private VocToolResponse mockResponse(VocToolRequest request, String toolName, String title) {
VocToolResponse response = new VocToolResponse();
response.setToolName(toolName);
response.setCategory("VOC");
response.setReferenceId(request != null && hasText(request.getSubjectId()) ? request.getSubjectId() : "VOC-000001");
response.setStatus("정상");
response.setSummary(title + " 처리 결과");
response.setProcessedAt(LocalDateTime.now().toString());
response.setDetails(List.of(title + " 모의 상세 정보", "외부 시스템을 변경하지 않는 샘플 응답"));
return response;
}
private boolean hasText(String value) {
return value != null && !value.isBlank();
}
}

View File

@@ -0,0 +1,34 @@
package io.shinhanlife.dap.mcc.biz.wcm.dto;
import lombok.Data;
import org.springaicommunity.mcp.annotation.McpToolParam;
@Data
public class WcmToolRequest {
@McpToolParam(description = "업무 대상 식별자", required = false)
private String subjectId;
@McpToolParam(description = "고객 식별자", required = false)
private String customerId;
@McpToolParam(description = "검색어 또는 처리 내용", required = false)
private String content;
@McpToolParam(description = "상태, 유형, 등급 또는 처리 값", required = false)
private String value;
@McpToolParam(description = "담당자 식별자", required = false)
private String assigneeId;
@McpToolParam(description = "조회 시작일(YYYY-MM-DD)", required = false)
private String startDate;
@McpToolParam(description = "조회 종료일 또는 처리 예정일(YYYY-MM-DD)", required = false)
private String endDate;
@McpToolParam(description = "페이지 번호", required = false)
private Integer page;
@McpToolParam(description = "페이지 크기", required = false)
private Integer size;
}

View File

@@ -0,0 +1,15 @@
package io.shinhanlife.dap.mcc.biz.wcm.dto;
import java.util.List;
import lombok.Data;
@Data
public class WcmToolResponse {
private String toolName;
private String category;
private String referenceId;
private String status;
private String summary;
private String processedAt;
private List<String> details;
}

View File

@@ -0,0 +1,60 @@
package io.shinhanlife.dap.mcc.biz.wcm.usecase;
import io.shinhanlife.dap.lib.annotation.GrowToolHint;
import io.shinhanlife.dap.mcc.biz.wcm.dto.WcmToolRequest;
import io.shinhanlife.dap.mcc.biz.wcm.dto.WcmToolResponse;
import org.springaicommunity.mcp.annotation.McpTool;
public interface WcmToolUseCase {
@McpTool(name = "wcm_content_list", title = "웹 콘텐츠 목록 조회", description = "웹 콘텐츠 목록 조회 기능을 안전한 모의 데이터로 제공합니다.")
@GrowToolHint(requiresApproval = false, categoryKey = "wcm", mappingId = "DIRECT_WCM_CONTENT_LIST")
WcmToolResponse getContentList(WcmToolRequest request);
@McpTool(name = "wcm_content_detail", title = "웹 콘텐츠 상세 조회", description = "웹 콘텐츠 상세 조회 기능을 안전한 모의 데이터로 제공합니다.")
@GrowToolHint(requiresApproval = false, categoryKey = "wcm", mappingId = "DIRECT_WCM_CONTENT_DETAIL")
WcmToolResponse getContentDetail(WcmToolRequest request);
@McpTool(name = "wcm_content_create", title = "웹 콘텐츠 등록", description = "웹 콘텐츠 등록 기능을 안전한 모의 데이터로 제공합니다.")
@GrowToolHint(requiresApproval = true, categoryKey = "wcm", mappingId = "DIRECT_WCM_CONTENT_CREATE")
WcmToolResponse createContent(WcmToolRequest request);
@McpTool(name = "wcm_content_update", title = "웹 콘텐츠 수정", description = "웹 콘텐츠 수정 기능을 안전한 모의 데이터로 제공합니다.")
@GrowToolHint(requiresApproval = true, categoryKey = "wcm", mappingId = "DIRECT_WCM_CONTENT_UPDATE")
WcmToolResponse updateContent(WcmToolRequest request);
@McpTool(name = "wcm_content_delete", title = "웹 콘텐츠 삭제", description = "웹 콘텐츠 삭제 기능을 안전한 모의 데이터로 제공합니다.")
@GrowToolHint(requiresApproval = true, categoryKey = "wcm", mappingId = "DIRECT_WCM_CONTENT_DELETE")
WcmToolResponse deleteContent(WcmToolRequest request);
@McpTool(name = "wcm_content_copy", title = "웹 콘텐츠 복사", description = "웹 콘텐츠 복사 기능을 안전한 모의 데이터로 제공합니다.")
@GrowToolHint(requiresApproval = true, categoryKey = "wcm", mappingId = "DIRECT_WCM_CONTENT_COPY")
WcmToolResponse copyContent(WcmToolRequest request);
@McpTool(name = "wcm_content_preview", title = "웹 콘텐츠 미리보기", description = "웹 콘텐츠 미리보기 기능을 안전한 모의 데이터로 제공합니다.")
@GrowToolHint(requiresApproval = false, categoryKey = "wcm", mappingId = "DIRECT_WCM_CONTENT_PREVIEW")
WcmToolResponse previewContent(WcmToolRequest request);
@McpTool(name = "wcm_content_publish", title = "웹 콘텐츠 게시", description = "웹 콘텐츠 게시 기능을 안전한 모의 데이터로 제공합니다.")
@GrowToolHint(requiresApproval = true, categoryKey = "wcm", mappingId = "DIRECT_WCM_CONTENT_PUBLISH")
WcmToolResponse publishContent(WcmToolRequest request);
@McpTool(name = "wcm_content_unpublish", title = "웹 콘텐츠 게시 중지", description = "웹 콘텐츠 게시 중지 기능을 안전한 모의 데이터로 제공합니다.")
@GrowToolHint(requiresApproval = true, categoryKey = "wcm", mappingId = "DIRECT_WCM_CONTENT_UNPUBLISH")
WcmToolResponse unpublishContent(WcmToolRequest request);
@McpTool(name = "wcm_content_schedule_publish", title = "웹 콘텐츠 예약 게시", description = "웹 콘텐츠 예약 게시 기능을 안전한 모의 데이터로 제공합니다.")
@GrowToolHint(requiresApproval = true, categoryKey = "wcm", mappingId = "DIRECT_WCM_CONTENT_SCHEDULE_PUBLISH")
WcmToolResponse scheduleContentPublish(WcmToolRequest request);
@McpTool(name = "wcm_content_request_approval", title = "웹 콘텐츠 승인 요청", description = "웹 콘텐츠 승인 요청 기능을 안전한 모의 데이터로 제공합니다.")
@GrowToolHint(requiresApproval = true, categoryKey = "wcm", mappingId = "DIRECT_WCM_CONTENT_REQUEST_APPROVAL")
WcmToolResponse requestContentApproval(WcmToolRequest request);
@McpTool(name = "wcm_content_review_approval", title = "웹 콘텐츠 승인·반려", description = "웹 콘텐츠 승인·반려 기능을 안전한 모의 데이터로 제공합니다.")
@GrowToolHint(requiresApproval = true, categoryKey = "wcm", mappingId = "DIRECT_WCM_CONTENT_REVIEW_APPROVAL")
WcmToolResponse reviewContentApproval(WcmToolRequest request);
@McpTool(name = "wcm_content_version_history", title = "웹 콘텐츠 버전 이력 조회", description = "웹 콘텐츠 버전 이력 조회 기능을 안전한 모의 데이터로 제공합니다.")
@GrowToolHint(requiresApproval = false, categoryKey = "wcm", mappingId = "DIRECT_WCM_CONTENT_VERSION_HISTORY")
WcmToolResponse getContentVersionHistory(WcmToolRequest request);
@McpTool(name = "wcm_content_restore_version", title = "웹 콘텐츠 이전 버전 복원", description = "웹 콘텐츠 이전 버전 복원 기능을 안전한 모의 데이터로 제공합니다.")
@GrowToolHint(requiresApproval = true, categoryKey = "wcm", mappingId = "DIRECT_WCM_CONTENT_RESTORE_VERSION")
WcmToolResponse restoreContentVersion(WcmToolRequest request);
@McpTool(name = "wcm_metadata_detail", title = "콘텐츠 메타데이터 조회", description = "콘텐츠 메타데이터 조회 기능을 안전한 모의 데이터로 제공합니다.")
@GrowToolHint(requiresApproval = false, categoryKey = "wcm", mappingId = "DIRECT_WCM_METADATA_DETAIL")
WcmToolResponse getContentMetadata(WcmToolRequest request);
@McpTool(name = "wcm_metadata_upsert", title = "콘텐츠 메타데이터 등록·수정", description = "콘텐츠 메타데이터 등록·수정 기능을 안전한 모의 데이터로 제공합니다.")
@GrowToolHint(requiresApproval = true, categoryKey = "wcm", mappingId = "DIRECT_WCM_METADATA_UPSERT")
WcmToolResponse upsertContentMetadata(WcmToolRequest request);
@McpTool(name = "wcm_taxonomy_manage", title = "콘텐츠 카테고리·태그 관리", description = "콘텐츠 카테고리·태그 관리 기능을 안전한 모의 데이터로 제공합니다.")
@GrowToolHint(requiresApproval = true, categoryKey = "wcm", mappingId = "DIRECT_WCM_TAXONOMY_MANAGE")
WcmToolResponse manageContentTaxonomy(WcmToolRequest request);
}

View File

@@ -0,0 +1,95 @@
package io.shinhanlife.dap.mcc.biz.wcm.usecase.impl;
import io.shinhanlife.dap.mcc.biz.wcm.dto.WcmToolRequest;
import io.shinhanlife.dap.mcc.biz.wcm.dto.WcmToolResponse;
import io.shinhanlife.dap.mcc.biz.wcm.usecase.WcmToolUseCase;
import java.time.LocalDateTime;
import java.util.List;
import org.springframework.stereotype.Service;
@Service
public class WcmToolUseCaseImpl implements WcmToolUseCase {
@Override
public WcmToolResponse getContentList(WcmToolRequest request) {
return mockResponse(request, "wcm_content_list", "웹 콘텐츠 목록 조회");
}
@Override
public WcmToolResponse getContentDetail(WcmToolRequest request) {
return mockResponse(request, "wcm_content_detail", "웹 콘텐츠 상세 조회");
}
@Override
public WcmToolResponse createContent(WcmToolRequest request) {
return mockResponse(request, "wcm_content_create", "웹 콘텐츠 등록");
}
@Override
public WcmToolResponse updateContent(WcmToolRequest request) {
return mockResponse(request, "wcm_content_update", "웹 콘텐츠 수정");
}
@Override
public WcmToolResponse deleteContent(WcmToolRequest request) {
return mockResponse(request, "wcm_content_delete", "웹 콘텐츠 삭제");
}
@Override
public WcmToolResponse copyContent(WcmToolRequest request) {
return mockResponse(request, "wcm_content_copy", "웹 콘텐츠 복사");
}
@Override
public WcmToolResponse previewContent(WcmToolRequest request) {
return mockResponse(request, "wcm_content_preview", "웹 콘텐츠 미리보기");
}
@Override
public WcmToolResponse publishContent(WcmToolRequest request) {
return mockResponse(request, "wcm_content_publish", "웹 콘텐츠 게시");
}
@Override
public WcmToolResponse unpublishContent(WcmToolRequest request) {
return mockResponse(request, "wcm_content_unpublish", "웹 콘텐츠 게시 중지");
}
@Override
public WcmToolResponse scheduleContentPublish(WcmToolRequest request) {
return mockResponse(request, "wcm_content_schedule_publish", "웹 콘텐츠 예약 게시");
}
@Override
public WcmToolResponse requestContentApproval(WcmToolRequest request) {
return mockResponse(request, "wcm_content_request_approval", "웹 콘텐츠 승인 요청");
}
@Override
public WcmToolResponse reviewContentApproval(WcmToolRequest request) {
return mockResponse(request, "wcm_content_review_approval", "웹 콘텐츠 승인·반려");
}
@Override
public WcmToolResponse getContentVersionHistory(WcmToolRequest request) {
return mockResponse(request, "wcm_content_version_history", "웹 콘텐츠 버전 이력 조회");
}
@Override
public WcmToolResponse restoreContentVersion(WcmToolRequest request) {
return mockResponse(request, "wcm_content_restore_version", "웹 콘텐츠 이전 버전 복원");
}
@Override
public WcmToolResponse getContentMetadata(WcmToolRequest request) {
return mockResponse(request, "wcm_metadata_detail", "콘텐츠 메타데이터 조회");
}
@Override
public WcmToolResponse upsertContentMetadata(WcmToolRequest request) {
return mockResponse(request, "wcm_metadata_upsert", "콘텐츠 메타데이터 등록·수정");
}
@Override
public WcmToolResponse manageContentTaxonomy(WcmToolRequest request) {
return mockResponse(request, "wcm_taxonomy_manage", "콘텐츠 카테고리·태그 관리");
}
private WcmToolResponse mockResponse(WcmToolRequest request, String toolName, String title) {
WcmToolResponse response = new WcmToolResponse();
response.setToolName(toolName);
response.setCategory("WCMS");
response.setReferenceId(request != null && hasText(request.getSubjectId()) ? request.getSubjectId() : "WCMS-000001");
response.setStatus("정상");
response.setSummary(title + " 처리 결과");
response.setProcessedAt(LocalDateTime.now().toString());
response.setDetails(List.of(title + " 모의 상세 정보", "외부 시스템을 변경하지 않는 샘플 응답"));
return response;
}
private boolean hasText(String value) {
return value != null && !value.isBlank();
}
}

View File

@@ -0,0 +1,33 @@
package io.shinhanlife.dap.mcc.cus;
/**
* @package io.shinhanlife.dap.mcc.cus
* @className DapWasCusApplication
* @description AX HUB 시스템 처리 클래스
* @author 0986406
* @create 2026.09.01
* <pre>
* ---------- 개정이력 ----------
* 수정일 수정자 수정내용
* ---------- -------- ---------------------------
* 2026.09.01 0986406 최초생성
*
* </pre>
*/
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 DapWasCusApplication {
public static void main(String[] args) {
SpringApplication.run(DapWasCusApplication.class, args);
}
}

View File

@@ -0,0 +1,433 @@
package io.shinhanlife.dap.mcc.presentation;
import java.io.ByteArrayOutputStream;
import java.io.IOException;
import java.lang.annotation.Annotation;
import java.lang.reflect.Field;
import java.lang.reflect.Method;
import java.lang.reflect.ParameterizedType;
import java.lang.reflect.Type;
import java.util.ArrayList;
import java.util.Comparator;
import java.util.List;
import java.util.Map;
import java.util.Set;
import java.util.TreeMap;
import java.util.TreeSet;
import java.util.regex.Pattern;
import org.apache.poi.ss.usermodel.*;
import org.apache.poi.ss.util.CellRangeAddress;
import org.apache.poi.xssf.usermodel.XSSFColor;
import org.apache.poi.xssf.usermodel.XSSFWorkbook;
import org.springframework.context.annotation.ClassPathScanningCandidateComponentProvider;
import org.springframework.core.type.filter.RegexPatternTypeFilter;
import org.springframework.http.ContentDisposition;
import org.springframework.http.HttpHeaders;
import org.springframework.http.MediaType;
import org.springframework.http.ResponseEntity;
import org.springframework.http.HttpStatus;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.ExceptionHandler;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.RestController;
/**
* MCI DTO 클래스를 조회하고 인터페이스 설계서 형식의 엑셀 파일을 생성한다.
* 외부 템플릿 파일에 의존하지 않고 Apache POI로 양식과 데이터를 모두 만든다.
*/
@RestController
public class DtoExcelDownloadController {
private static final int FIRST_FIELD_ROW = 12;
private static final int TEMPLATE_LAST_ROW = 35;
private static final int COLUMN_COUNT = 20;
private static final MediaType XLSX_MEDIA_TYPE = MediaType.parseMediaType(
"application/vnd.openxmlformats-officedocument.spreadsheetml.sheet");
private static final String MCI_BASE_PACKAGE = "io.shinhanlife.dap.mcc.infra.itrf.mci";
private static final String INVALID_DTO_MESSAGE =
"dto의 내용이 엑셀파일 양식에 맞지않습니다 파일을 확인해주세요";
private static final Pattern VARIANT_SUFFIX = Pattern.compile("_[IO]$");
private final Map<String, String> dtoClasses;
public DtoExcelDownloadController() {
this.dtoClasses = scanDtoClasses();
}
@GetMapping("/dto-download/options")
public List<String> options() {
// DTO는 항상 _I/_O 한 쌍으로 존재하므로 접미사를 제거한 이름 단위로 묶어 화면에 제공한다.
Set<String> baseNames = new TreeSet<>();
for (String simpleName : dtoClasses.keySet()) {
baseNames.add(VARIANT_SUFFIX.matcher(simpleName).replaceFirst(""));
}
return List.copyOf(baseNames);
}
@GetMapping("/dto-download/{dtoName}")
public ResponseEntity<byte[]> download(@PathVariable String dtoName) throws IOException {
// 스캔되지 않은 이름을 받아 임의 클래스를 조회하지 못하도록 제한한다.
String className = dtoClasses.get(dtoName);
if (className == null) {
return ResponseEntity.notFound().build();
}
byte[] workbook = createWorkbook(dtoName, className);
String fileName = dtoName + ".xlsx";
return ResponseEntity.ok()
.contentType(XLSX_MEDIA_TYPE)
.contentLength(workbook.length)
.header(HttpHeaders.CONTENT_DISPOSITION,
ContentDisposition.attachment().filename(fileName).build().toString())
.body(workbook);
}
@ExceptionHandler(DtoFormatException.class)
public ResponseEntity<String> handleInvalidDto() {
return ResponseEntity.status(HttpStatus.UNPROCESSABLE_ENTITY)
.contentType(MediaType.parseMediaType("text/plain;charset=UTF-8"))
.body(INVALID_DTO_MESSAGE);
}
private byte[] createWorkbook(String dtoName, String className) throws IOException {
// 요청마다 새 워크북을 생성하므로 여러 사용자의 다운로드가 서로 영향을 주지 않는다.
try (XSSFWorkbook workbook = createTemplateWorkbook();
ByteArrayOutputStream output = new ByteArrayOutputStream()) {
Sheet sheet = workbook.getSheetAt(0);
setText(sheet, 2, 2, dtoName);
setText(sheet, 3, 2, dtoName);
List<FieldRow> fields;
try {
fields = describeFields(Class.forName(className));
} catch (ReflectiveOperationException error) {
throw new IOException("DTO class could not be inspected: " + className, error);
}
writeFields(sheet, fields);
workbook.write(output);
return output.toByteArray();
}
}
private XSSFWorkbook createTemplateWorkbook() {
// 기준 문서의 시트명, 열 너비, 병합, 색상과 테두리를 코드로 재현한다.
XSSFWorkbook workbook = new XSSFWorkbook();
Sheet sheet = workbook.createSheet("대내");
sheet.setDisplayGridlines(false);
sheet.createFreezePane(0, 12);
sheet.getPrintSetup().setLandscape(true);
sheet.setRepeatingRows(new CellRangeAddress(11, 11, -1, -1));
double[] widths = {4.44, 8, 23.22, 23.22, 10, 14, 18, 11, 9, 7.44,
8, 9.55, 9, 10.55, 11.44, 9, 13, 10.55, 14, 30};
for (int column = 0; column < widths.length; column++) {
sheet.setColumnWidth(column, (int) (widths[column] * 256));
}
CellStyle titleStyle = style(workbook, "000000", "FFFFFF", true, (short) 14,
HorizontalAlignment.CENTER, false);
CellStyle sectionStyle = style(workbook, "F2F2F2", "000000", true, (short) 10,
HorizontalAlignment.CENTER, false);
CellStyle labelStyle = borderedStyle(workbook, "F2F2F2", true, HorizontalAlignment.CENTER);
CellStyle inputStyle = borderedStyle(workbook, "C6D9F1", false, HorizontalAlignment.LEFT);
CellStyle requiredStyle = borderedStyle(workbook, "C6D9F1", false, HorizontalAlignment.LEFT);
CellStyle autoStyle = borderedStyle(workbook, "F2DCDB", false, HorizontalAlignment.LEFT);
CellStyle userStyle = borderedStyle(workbook, "FFFFFF", false, HorizontalAlignment.LEFT);
CellStyle headerStyle = borderedStyle(workbook, "D9D9D9", true, HorizontalAlignment.CENTER);
headerStyle.setWrapText(true);
CellStyle whiteDataStyle = borderedStyle(workbook, "FFFFFF", false, HorizontalAlignment.CENTER);
CellStyle blueDataStyle = borderedStyle(workbook, "C6D9F1", false, HorizontalAlignment.CENTER);
CellStyle pinkDataStyle = borderedStyle(workbook, "F2DCDB", false, HorizontalAlignment.CENTER);
createStyledRow(sheet, 0, 25.5f, titleStyle);
merge(sheet, "A1:T1");
setText(sheet, 0, 0, "인터페이스 설계서(대내)");
createStyledRow(sheet, 1, 18f, sectionStyle);
merge(sheet, "A2:T2");
setText(sheet, 1, 0, "기본정보");
String[] labels = {"코드", "한글명", "영문명", "암호화", "유형", "레코드구분자", "필드구분자"};
for (int index = 0; index < labels.length; index++) {
int rowIndex = index + 2;
Row row = sheet.createRow(rowIndex);
cell(row, 1, labelStyle).setCellValue(labels[index]);
cell(row, 2, inputStyle);
cell(row, 3, inputStyle);
merge(sheet, "C" + (rowIndex + 1) + ":D" + (rowIndex + 1));
}
setText(sheet, 6, 2, "json");
sheet.getRow(7).setHeightInPoints(24);
sheet.getRow(8).setHeightInPoints(24);
for (int rowIndex = 3; rowIndex <= 5; rowIndex++) {
Row row = sheet.getRow(rowIndex);
CellStyle legendStyle = rowIndex == 3 ? requiredStyle : rowIndex == 4 ? autoStyle : userStyle;
cell(row, 5, legendStyle);
cell(row, 6, legendStyle);
merge(sheet, "F" + (rowIndex + 1) + ":G" + (rowIndex + 1));
}
setText(sheet, 3, 7, "필수입력");
setText(sheet, 4, 7, "필드자동채우기(메타시스템 연동시)");
setText(sheet, 5, 7, "사용자입력(필요시)");
createStyledRow(sheet, 10, 18f, sectionStyle);
merge(sheet, "A11:T11");
setText(sheet, 10, 0, "필드정보");
String[] headers = {"NO", "Level", "한글명", "부모식별자(한글명)", "끝수여부", "영문명",
"부모식별자(영문명)", "데이터유형", "필드길이", "SCALE", "기본값", "정렬기준",
"채움문자", "암호화방식", "메타체크여부", "한글여부", "소수점포함여부",
"마스킹여부", "마스킹패턴코드", "비고"};
Row header = sheet.createRow(11);
header.setHeightInPoints(30);
for (int column = 0; column < headers.length; column++) {
cell(header, column, headerStyle).setCellValue(headers[column]);
}
for (int rowIndex = FIRST_FIELD_ROW; rowIndex <= TEMPLATE_LAST_ROW; rowIndex++) {
Row row = sheet.createRow(rowIndex);
row.setHeightInPoints(15.75f);
for (int column = 0; column < COLUMN_COUNT; column++) {
CellStyle dataStyle;
if (column == 0 || column == 4 || (column >= 14 && column <= 16) || column == 19) {
dataStyle = whiteDataStyle;
} else if (column >= 1 && column <= 3) {
dataStyle = blueDataStyle;
} else {
dataStyle = pinkDataStyle;
}
cell(row, column, dataStyle);
}
}
return workbook;
}
private CellStyle style(XSSFWorkbook workbook, String fillColor, String fontColor,
boolean bold, short fontSize, HorizontalAlignment alignment,
boolean bordered) {
CellStyle style = workbook.createCellStyle();
style.setAlignment(alignment);
style.setVerticalAlignment(VerticalAlignment.CENTER);
style.setFillForegroundColor(new XSSFColor(java.awt.Color.decode("#" + fillColor), null));
style.setFillPattern(FillPatternType.SOLID_FOREGROUND);
Font font = workbook.createFont();
font.setFontName("맑은 고딕");
font.setFontHeightInPoints(fontSize);
font.setBold(bold);
font.setColor("FFFFFF".equals(fontColor) ? IndexedColors.WHITE.getIndex() : IndexedColors.BLACK.getIndex());
style.setFont(font);
if (bordered) setBorders(style);
return style;
}
private CellStyle borderedStyle(XSSFWorkbook workbook, String fillColor,
boolean bold, HorizontalAlignment alignment) {
return style(workbook, fillColor, "000000", bold, (short) 9, alignment, true);
}
private void setBorders(CellStyle style) {
style.setBorderTop(BorderStyle.THIN);
style.setBorderBottom(BorderStyle.THIN);
style.setBorderLeft(BorderStyle.THIN);
style.setBorderRight(BorderStyle.THIN);
style.setTopBorderColor(IndexedColors.GREY_50_PERCENT.getIndex());
style.setBottomBorderColor(IndexedColors.GREY_50_PERCENT.getIndex());
style.setLeftBorderColor(IndexedColors.GREY_50_PERCENT.getIndex());
style.setRightBorderColor(IndexedColors.GREY_50_PERCENT.getIndex());
}
private void createStyledRow(Sheet sheet, int rowIndex, float height, CellStyle style) {
Row row = sheet.createRow(rowIndex);
row.setHeightInPoints(height);
for (int column = 0; column < COLUMN_COUNT; column++) cell(row, column, style);
}
private Cell cell(Row row, int column, CellStyle style) {
Cell cell = row.createCell(column);
cell.setCellStyle(style);
return cell;
}
private void merge(Sheet sheet, String range) {
sheet.addMergedRegion(CellRangeAddress.valueOf(range));
}
private void writeFields(Sheet sheet, List<FieldRow> fields) {
// 기본 24행을 유지하고 필드가 더 많으면 마지막 행의 서식을 복제해 확장한다.
int requiredRows = Math.max(fields.size(), TEMPLATE_LAST_ROW - FIRST_FIELD_ROW + 1);
for (int offset = 0; offset < requiredRows; offset++) {
int rowIndex = FIRST_FIELD_ROW + offset;
Row row = sheet.getRow(rowIndex);
if (row == null) {
row = cloneTemplateRow(sheet, rowIndex);
}
clearRowValues(row);
setNumber(row, 0, offset + 1);
if (offset < fields.size()) {
FieldRow field = fields.get(offset);
setNumber(row, 1, field.level());
setText(row, 2, field.description());
setText(row, 3, field.parentDescription());
setText(row, 5, field.name());
setText(row, 6, field.parentName());
setText(row, 7, field.dataType());
if (field.length() > 0) {
setNumber(row, 8, field.length());
}
}
}
}
private Row cloneTemplateRow(Sheet sheet, int rowIndex) {
Row source = sheet.getRow(TEMPLATE_LAST_ROW);
Row target = sheet.createRow(rowIndex);
target.setHeight(source.getHeight());
for (int column = 0; column < COLUMN_COUNT; column++) {
Cell sourceCell = source.getCell(column, Row.MissingCellPolicy.CREATE_NULL_AS_BLANK);
Cell targetCell = target.createCell(column);
CellStyle style = sourceCell.getCellStyle();
targetCell.setCellStyle(style);
}
return target;
}
private void clearRowValues(Row row) {
for (int column = 0; column < COLUMN_COUNT; column++) {
Cell cell = row.getCell(column, Row.MissingCellPolicy.CREATE_NULL_AS_BLANK);
cell.setBlank();
}
}
private List<FieldRow> describeFields(Class<?> rootClass) {
List<FieldRow> output = new ArrayList<>();
appendFields(rootClass, 1, "", "", output);
return output;
}
private void appendFields(Class<?> type, int level, String parentName,
String parentDescription, List<FieldRow> output) {
// 중첩 DTO와 List 요소 타입을 재귀적으로 펼쳐 Level 및 부모 식별자를 계산한다.
List<Field> fields = new ArrayList<>(List.of(type.getDeclaredFields()));
fields.removeIf(field -> field.isSynthetic());
fields.sort(Comparator.comparingInt(this::fieldOrder));
for (Field field : fields) {
Annotation metadata = telegramMetadata(field);
// 한글명, 순서, 길이를 알 수 없는 DTO는 설계서 양식으로 변환할 수 없다.
if (metadata == null) {
throw new DtoFormatException();
}
String description = annotationString(metadata, "description", field.getName());
int length = annotationInt(metadata, "length", 0);
Class<?> nestedType = nestedType(field);
String dataType = annotationString(metadata, "type", simpleDataType(field));
output.add(new FieldRow(level, description, parentDescription, field.getName(),
parentName, dataType, length));
if (nestedType != null && nestedType != type) {
appendFields(nestedType, level + 1, field.getName(), description, output);
}
}
}
private int fieldOrder(Field field) {
return annotationInt(telegramMetadata(field), "order", Integer.MAX_VALUE);
}
private Annotation telegramMetadata(Field field) {
for (Annotation annotation : field.getDeclaredAnnotations()) {
String annotationName = annotation.annotationType().getSimpleName();
if (annotationName.equals("GlowTrgmField")
|| annotationName.equals("GlowMciFieldInfo")) {
return annotation;
}
}
return null;
}
private String annotationString(Annotation annotation, String methodName, String fallback) {
Object value = annotationValue(annotation, methodName);
return value instanceof String text && !text.isBlank() ? text : fallback;
}
private int annotationInt(Annotation annotation, String methodName, int fallback) {
Object value = annotationValue(annotation, methodName);
return value instanceof Number number ? number.intValue() : fallback;
}
private Object annotationValue(Annotation annotation, String methodName) {
if (annotation == null) {
return null;
}
try {
Method method = annotation.annotationType().getMethod(methodName);
return method.invoke(annotation);
} catch (ReflectiveOperationException ignored) {
return null;
}
}
private Class<?> nestedType(Field field) {
Class<?> type = field.getType();
if (List.class.isAssignableFrom(type) && field.getGenericType() instanceof ParameterizedType generic) {
Type argument = generic.getActualTypeArguments()[0];
if (argument instanceof Class<?> itemType && isDtoType(itemType)) {
return itemType;
}
}
return isDtoType(type) ? type : null;
}
private boolean isDtoType(Class<?> type) {
return !type.isPrimitive()
&& !type.getName().startsWith("java.")
&& !type.isEnum();
}
private String simpleDataType(Field field) {
if (List.class.isAssignableFrom(field.getType())) {
return "List";
}
return field.getType().getSimpleName();
}
private void setText(Sheet sheet, int row, int column, String value) {
setText(sheet.getRow(row), column, value);
}
private void setText(Row row, int column, String value) {
row.getCell(column, Row.MissingCellPolicy.CREATE_NULL_AS_BLANK).setCellValue(value == null ? "" : value);
}
private void setNumber(Row row, int column, int value) {
row.getCell(column, Row.MissingCellPolicy.CREATE_NULL_AS_BLANK).setCellValue(value);
}
private Map<String, String> scanDtoClasses() {
// itrf.mci 하위의 모든 io 패키지를 검색하므로 신규 DTO 추가 시 하드코딩이 필요 없다.
ClassPathScanningCandidateComponentProvider scanner =
new ClassPathScanningCandidateComponentProvider(false);
scanner.addIncludeFilter(new RegexPatternTypeFilter(
Pattern.compile(".*\\.itrf\\.mci\\..*\\.io\\.[^.]+$")));
Map<String, String> classes = new TreeMap<>();
scanner.findCandidateComponents(MCI_BASE_PACKAGE).forEach(candidate -> {
String className = candidate.getBeanClassName();
if (className == null || className.contains("$")) {
return;
}
String simpleName = className.substring(className.lastIndexOf('.') + 1);
String previous = classes.putIfAbsent(simpleName, className);
if (previous != null) {
throw new IllegalStateException("Duplicate DTO class name: " + simpleName);
}
});
return Map.copyOf(classes);
}
private record FieldRow(int level, String description, String parentDescription,
String name, String parentName, String dataType, int length) {
}
private static final class DtoFormatException extends RuntimeException {
}
}

View File

@@ -0,0 +1,15 @@
# OCI 클라우드 개발 환경 전용 설정
server:
port: ${PORT:8084}
axhub:
gateway:
url: https://axhubmcp.devjun.net
spring:
config:
activate:
on-profile: dev
import:
- classpath:glow/application-glow.yml
- classpath:glow/application-glow-dev.yml

View File

@@ -0,0 +1,32 @@
# Local 환경 전용 설정 (H2 메모리 DB 등)
spring:
config:
activate:
on-profile: local
import:
- classpath:glow/application-glow.yml
- classpath:glow/application-glow-local.yml
datasource:
url: jdbc:p6spy:h2:mem:testdb;DB_CLOSE_DELAY=-1;
driverClassName: com.p6spy.engine.spy.P6SpyDriver
username: sa
password: password
h2:
console:
enabled: true
mcp:
security:
tenant-domains:
mcp-client-1: CUSTOMER,COMMON
mcp-client-2: ALL
axhub:
gateway:
url: http://localhost:8081
tool:
url: ${AXHUB_TOOL_URL:http://localhost:${server.port}}
sol:
req-detail:
mock-enabled: true

View File

@@ -0,0 +1,16 @@
server:
port: ${PORT:8084}
spring:
config:
activate:
on-profile: prod
import:
- classpath:glow/application-glow.yml
- classpath:glow/application-glow-prod.yml
axhub:
gateway:
url: ${AXHUB_GATEWAY_URL}
tool:
url: ${AXHUB_TOOL_URL}

View File

@@ -0,0 +1,16 @@
server:
port: ${PORT:8084}
spring:
config:
activate:
on-profile: test
import:
- classpath:glow/application-glow.yml
- classpath:glow/application-glow-test.yml
axhub:
gateway:
url: ${AXHUB_GATEWAY_URL}
tool:
url: ${AXHUB_TOOL_URL}

View File

@@ -0,0 +1,19 @@
server:
port: 8084
spring:
application:
name: dap-was-cus
profiles:
active: local
logging:
level:
org.apache.kafka: ERROR
mcp:
namespace: ""
manifest:
bundle-id: was-cus
# Set the AA-assigned prefix before MCP pull activation (for example: cus.).
name-prefix: ""
security:
tenant-domains:
TESTER-DEV: ALL

View File

@@ -0,0 +1,41 @@
<?xml version="1.0" encoding="UTF-8"?>
<configuration>
<!-- 1. 로그 패턴 설정 (MDC traceId 포함) -->
<property name="LOG_PATTERN" value="%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] [%X{traceId}] %-5level %logger{36} - %msg%n" />
<!-- 2. 콘솔(Console) 출력 설정 (로컬 개발용) -->
<appender name="CONSOLE" class="ch.qos.logback.core.ConsoleAppender">
<encoder>
<pattern>${LOG_PATTERN}</pattern>
</encoder>
</appender>
<!-- 3. 파일(File) 출력 설정 (서버 운영용) -->
<!-- Logback에서 시스템 Hostname을 가져오기 위한 설정 -->
<property name="HOSTNAME" value="${HOSTNAME}" />
<appender name="FILE" class="ch.qos.logback.core.rolling.RollingFileAppender">
<file>/swlog/dap-was-cus/A01/${HOSTNAME}_A01.log</file> <!-- 현재 로그가 쌓이는 파일 -->
<rollingPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedRollingPolicy">
<!-- 매일 자정에 날짜를 붙여서 지난 로그를 분리 저장 -->
<fileNamePattern>/swlog/dap-was-cus/A01/${HOSTNAME}_A01_%d{yyyyMMdd}.%i.log</fileNamePattern>
<!-- 개별 로그 파일 크기를 100MB로 제한하고, 전체 보관 일수는 30일, 총 로그 누적 용량은 1GB로 제한 -->
<maxFileSize>100MB</maxFileSize>
<maxHistory>30</maxHistory>
<totalSizeCap>1GB</totalSizeCap>
</rollingPolicy>
<encoder>
<pattern>${LOG_PATTERN}</pattern>
</encoder>
</appender>
<!-- 4. 기본 로깅 레벨 설정 -->
<root level="INFO">
<appender-ref ref="CONSOLE" />
<appender-ref ref="FILE" />
</root>
<!-- 5. 우리 프로젝트 패키지는 디버그 레벨까지 상세히 보기 -->
<logger name="io.shinhanlife" level="DEBUG" />
</configuration>

View File

@@ -0,0 +1,4 @@
{
"resultCode" : "SUCCESS",
"data" : "[{\"date\":\"2024-01-05\",\"message\":\"안내 내용\"}]"
}

View File

@@ -0,0 +1,4 @@
{
"resultCode" : "SUCCESS",
"claimId" : "CLM20230001"
}

View File

@@ -0,0 +1,30 @@
name: crm_activity_status
display_name: 고객 활동 현황 조회
version: 1.0.0
category_key: crm
description:
function: 고객 활동 현황 조회 기능을 수행합니다.
when_to_use: 고객채널 업무에서 고객 활동 현황 조회 기능이 필요할 때 사용합니다.
when_not_to_use: 정보 변경이나 승인 처리가 필요한 경우에는 사용하지 않습니다.
io_limits: 입력 범위에 대한 모의 조회 결과만 반환하며 외부 시스템을 직접 변경하지 않습니다.
display_description: 고객 활동 현황 조회 기능을 안전한 모의 데이터로 제공합니다.
example_queries: ["고객 활동 현황 조회 해줘", "고객 활동 현황 조회 결과를 알려줘", "고객 활동 현황 조회 기능을 실행해줘"]
read_only: true
destructive: false
idempotent: true
parameters_schema:
type: object
properties:
subjectId: {type: string, description: 업무 대상 식별자, pattern: "^[A-Za-z0-9_-]{3,40}$"}
customerId: {type: string, description: 고객 식별자, pattern: "^[A-Za-z0-9_-]{3,40}$"}
content: {type: string, description: 검색어 또는 처리 내용, maxLength: 2000}
value: {type: string, description: 상태·유형·등급 또는 처리 값, maxLength: 100}
assigneeId: {type: string, description: 담당자 식별자, pattern: "^[A-Za-z0-9_-]{3,40}$"}
startDate: {type: string, description: 조회 시작일, pattern: "^\\d{4}-\\d{2}-\\d{2}$"}
endDate: {type: string, description: 조회 종료일 또는 처리 예정일, pattern: "^\\d{4}-\\d{2}-\\d{2}$"}
page: {type: integer, description: 페이지 번호, minimum: 0}
size: {type: integer, description: 페이지 크기, minimum: 1, maximum: 100}
additionalProperties: false
tags: [crm, 고객채널, 조회, mock]
required_env_keys: []
owner_org: MCP_TOOL

View File

@@ -0,0 +1,30 @@
name: crm_consent_change
display_name: 고객 동의 정보 변경
version: 1.0.0
category_key: crm
description:
function: 고객 동의 정보 변경 기능을 수행합니다.
when_to_use: 고객채널 업무에서 고객 동의 정보 변경 기능이 필요할 때 사용합니다.
when_not_to_use: 필수 식별자와 변경 내용이 확인되지 않은 경우에는 사용하지 않습니다.
io_limits: 입력 범위에 대한 모의 처리 결과만 반환하며 외부 시스템을 직접 변경하지 않습니다.
display_description: 고객 동의 정보 변경 기능을 안전한 모의 데이터로 제공합니다.
example_queries: ["고객 동의 정보 변경 해줘", "고객 동의 정보 변경 결과를 알려줘", "고객 동의 정보 변경 기능을 실행해줘"]
read_only: false
destructive: false
idempotent: true
parameters_schema:
type: object
properties:
subjectId: {type: string, description: 업무 대상 식별자, pattern: "^[A-Za-z0-9_-]{3,40}$"}
customerId: {type: string, description: 고객 식별자, pattern: "^[A-Za-z0-9_-]{3,40}$"}
content: {type: string, description: 검색어 또는 처리 내용, maxLength: 2000}
value: {type: string, description: 상태·유형·등급 또는 처리 값, maxLength: 100}
assigneeId: {type: string, description: 담당자 식별자, pattern: "^[A-Za-z0-9_-]{3,40}$"}
startDate: {type: string, description: 조회 시작일, pattern: "^\\d{4}-\\d{2}-\\d{2}$"}
endDate: {type: string, description: 조회 종료일 또는 처리 예정일, pattern: "^\\d{4}-\\d{2}-\\d{2}$"}
page: {type: integer, description: 페이지 번호, minimum: 0}
size: {type: integer, description: 페이지 크기, minimum: 1, maximum: 100}
additionalProperties: false
tags: [crm, 고객채널, 처리, mock]
required_env_keys: []
owner_org: MCP_TOOL

View File

@@ -0,0 +1,30 @@
name: crm_consent_detail
display_name: 고객 동의 정보 조회
version: 1.0.0
category_key: crm
description:
function: 고객 동의 정보 조회 기능을 수행합니다.
when_to_use: 고객채널 업무에서 고객 동의 정보 조회 기능이 필요할 때 사용합니다.
when_not_to_use: 정보 변경이나 승인 처리가 필요한 경우에는 사용하지 않습니다.
io_limits: 입력 범위에 대한 모의 조회 결과만 반환하며 외부 시스템을 직접 변경하지 않습니다.
display_description: 고객 동의 정보 조회 기능을 안전한 모의 데이터로 제공합니다.
example_queries: ["고객 동의 정보 조회 해줘", "고객 동의 정보 조회 결과를 알려줘", "고객 동의 정보 조회 기능을 실행해줘"]
read_only: true
destructive: false
idempotent: true
parameters_schema:
type: object
properties:
subjectId: {type: string, description: 업무 대상 식별자, pattern: "^[A-Za-z0-9_-]{3,40}$"}
customerId: {type: string, description: 고객 식별자, pattern: "^[A-Za-z0-9_-]{3,40}$"}
content: {type: string, description: 검색어 또는 처리 내용, maxLength: 2000}
value: {type: string, description: 상태·유형·등급 또는 처리 값, maxLength: 100}
assigneeId: {type: string, description: 담당자 식별자, pattern: "^[A-Za-z0-9_-]{3,40}$"}
startDate: {type: string, description: 조회 시작일, pattern: "^\\d{4}-\\d{2}-\\d{2}$"}
endDate: {type: string, description: 조회 종료일 또는 처리 예정일, pattern: "^\\d{4}-\\d{2}-\\d{2}$"}
page: {type: integer, description: 페이지 번호, minimum: 0}
size: {type: integer, description: 페이지 크기, minimum: 1, maximum: 100}
additionalProperties: false
tags: [crm, 고객채널, 조회, mock]
required_env_keys: []
owner_org: MCP_TOOL

View File

@@ -0,0 +1,30 @@
name: crm_consultation_history
display_name: 고객 상담 이력 조회
version: 1.0.0
category_key: crm
description:
function: 고객 상담 이력 조회 기능을 수행합니다.
when_to_use: 고객채널 업무에서 고객 상담 이력 조회 기능이 필요할 때 사용합니다.
when_not_to_use: 정보 변경이나 승인 처리가 필요한 경우에는 사용하지 않습니다.
io_limits: 입력 범위에 대한 모의 조회 결과만 반환하며 외부 시스템을 직접 변경하지 않습니다.
display_description: 고객 상담 이력 조회 기능을 안전한 모의 데이터로 제공합니다.
example_queries: ["고객 상담 이력 조회 해줘", "고객 상담 이력 조회 결과를 알려줘", "고객 상담 이력 조회 기능을 실행해줘"]
read_only: true
destructive: false
idempotent: true
parameters_schema:
type: object
properties:
subjectId: {type: string, description: 업무 대상 식별자, pattern: "^[A-Za-z0-9_-]{3,40}$"}
customerId: {type: string, description: 고객 식별자, pattern: "^[A-Za-z0-9_-]{3,40}$"}
content: {type: string, description: 검색어 또는 처리 내용, maxLength: 2000}
value: {type: string, description: 상태·유형·등급 또는 처리 값, maxLength: 100}
assigneeId: {type: string, description: 담당자 식별자, pattern: "^[A-Za-z0-9_-]{3,40}$"}
startDate: {type: string, description: 조회 시작일, pattern: "^\\d{4}-\\d{2}-\\d{2}$"}
endDate: {type: string, description: 조회 종료일 또는 처리 예정일, pattern: "^\\d{4}-\\d{2}-\\d{2}$"}
page: {type: integer, description: 페이지 번호, minimum: 0}
size: {type: integer, description: 페이지 크기, minimum: 1, maximum: 100}
additionalProperties: false
tags: [crm, 고객채널, 조회, mock]
required_env_keys: []
owner_org: MCP_TOOL

View File

@@ -0,0 +1,30 @@
name: crm_consultation_register
display_name: 고객 상담 이력 등록
version: 1.0.0
category_key: crm
description:
function: 고객 상담 이력 등록 기능을 수행합니다.
when_to_use: 고객채널 업무에서 고객 상담 이력 등록 기능이 필요할 때 사용합니다.
when_not_to_use: 필수 식별자와 변경 내용이 확인되지 않은 경우에는 사용하지 않습니다.
io_limits: 입력 범위에 대한 모의 처리 결과만 반환하며 외부 시스템을 직접 변경하지 않습니다.
display_description: 고객 상담 이력 등록 기능을 안전한 모의 데이터로 제공합니다.
example_queries: ["고객 상담 이력 등록 해줘", "고객 상담 이력 등록 결과를 알려줘", "고객 상담 이력 등록 기능을 실행해줘"]
read_only: false
destructive: false
idempotent: false
parameters_schema:
type: object
properties:
subjectId: {type: string, description: 업무 대상 식별자, pattern: "^[A-Za-z0-9_-]{3,40}$"}
customerId: {type: string, description: 고객 식별자, pattern: "^[A-Za-z0-9_-]{3,40}$"}
content: {type: string, description: 검색어 또는 처리 내용, maxLength: 2000}
value: {type: string, description: 상태·유형·등급 또는 처리 값, maxLength: 100}
assigneeId: {type: string, description: 담당자 식별자, pattern: "^[A-Za-z0-9_-]{3,40}$"}
startDate: {type: string, description: 조회 시작일, pattern: "^\\d{4}-\\d{2}-\\d{2}$"}
endDate: {type: string, description: 조회 종료일 또는 처리 예정일, pattern: "^\\d{4}-\\d{2}-\\d{2}$"}
page: {type: integer, description: 페이지 번호, minimum: 0}
size: {type: integer, description: 페이지 크기, minimum: 1, maximum: 100}
additionalProperties: false
tags: [crm, 고객채널, 처리, mock]
required_env_keys: []
owner_org: MCP_TOOL

View File

@@ -0,0 +1,30 @@
name: crm_contact_history
display_name: 고객 접촉 이력 조회
version: 1.0.0
category_key: crm
description:
function: 고객 접촉 이력 조회 기능을 수행합니다.
when_to_use: 고객채널 업무에서 고객 접촉 이력 조회 기능이 필요할 때 사용합니다.
when_not_to_use: 정보 변경이나 승인 처리가 필요한 경우에는 사용하지 않습니다.
io_limits: 입력 범위에 대한 모의 조회 결과만 반환하며 외부 시스템을 직접 변경하지 않습니다.
display_description: 고객 접촉 이력 조회 기능을 안전한 모의 데이터로 제공합니다.
example_queries: ["고객 접촉 이력 조회 해줘", "고객 접촉 이력 조회 결과를 알려줘", "고객 접촉 이력 조회 기능을 실행해줘"]
read_only: true
destructive: false
idempotent: true
parameters_schema:
type: object
properties:
subjectId: {type: string, description: 업무 대상 식별자, pattern: "^[A-Za-z0-9_-]{3,40}$"}
customerId: {type: string, description: 고객 식별자, pattern: "^[A-Za-z0-9_-]{3,40}$"}
content: {type: string, description: 검색어 또는 처리 내용, maxLength: 2000}
value: {type: string, description: 상태·유형·등급 또는 처리 값, maxLength: 100}
assigneeId: {type: string, description: 담당자 식별자, pattern: "^[A-Za-z0-9_-]{3,40}$"}
startDate: {type: string, description: 조회 시작일, pattern: "^\\d{4}-\\d{2}-\\d{2}$"}
endDate: {type: string, description: 조회 종료일 또는 처리 예정일, pattern: "^\\d{4}-\\d{2}-\\d{2}$"}
page: {type: integer, description: 페이지 번호, minimum: 0}
size: {type: integer, description: 페이지 크기, minimum: 1, maximum: 100}
additionalProperties: false
tags: [crm, 고객채널, 조회, mock]
required_env_keys: []
owner_org: MCP_TOOL

View File

@@ -0,0 +1,30 @@
name: crm_contact_register
display_name: 고객 접촉 이력 등록
version: 1.0.0
category_key: crm
description:
function: 고객 접촉 이력 등록 기능을 수행합니다.
when_to_use: 고객채널 업무에서 고객 접촉 이력 등록 기능이 필요할 때 사용합니다.
when_not_to_use: 필수 식별자와 변경 내용이 확인되지 않은 경우에는 사용하지 않습니다.
io_limits: 입력 범위에 대한 모의 처리 결과만 반환하며 외부 시스템을 직접 변경하지 않습니다.
display_description: 고객 접촉 이력 등록 기능을 안전한 모의 데이터로 제공합니다.
example_queries: ["고객 접촉 이력 등록 해줘", "고객 접촉 이력 등록 결과를 알려줘", "고객 접촉 이력 등록 기능을 실행해줘"]
read_only: false
destructive: false
idempotent: false
parameters_schema:
type: object
properties:
subjectId: {type: string, description: 업무 대상 식별자, pattern: "^[A-Za-z0-9_-]{3,40}$"}
customerId: {type: string, description: 고객 식별자, pattern: "^[A-Za-z0-9_-]{3,40}$"}
content: {type: string, description: 검색어 또는 처리 내용, maxLength: 2000}
value: {type: string, description: 상태·유형·등급 또는 처리 값, maxLength: 100}
assigneeId: {type: string, description: 담당자 식별자, pattern: "^[A-Za-z0-9_-]{3,40}$"}
startDate: {type: string, description: 조회 시작일, pattern: "^\\d{4}-\\d{2}-\\d{2}$"}
endDate: {type: string, description: 조회 종료일 또는 처리 예정일, pattern: "^\\d{4}-\\d{2}-\\d{2}$"}
page: {type: integer, description: 페이지 번호, minimum: 0}
size: {type: integer, description: 페이지 크기, minimum: 1, maximum: 100}
additionalProperties: false
tags: [crm, 고객채널, 처리, mock]
required_env_keys: []
owner_org: MCP_TOOL

View File

@@ -0,0 +1,30 @@
name: crm_customer_create
display_name: 고객 정보 등록
version: 1.0.0
category_key: crm
description:
function: 고객 정보 등록 기능을 수행합니다.
when_to_use: 고객채널 업무에서 고객 정보 등록 기능이 필요할 때 사용합니다.
when_not_to_use: 필수 식별자와 변경 내용이 확인되지 않은 경우에는 사용하지 않습니다.
io_limits: 입력 범위에 대한 모의 처리 결과만 반환하며 외부 시스템을 직접 변경하지 않습니다.
display_description: 고객 정보 등록 기능을 안전한 모의 데이터로 제공합니다.
example_queries: ["고객 정보 등록 해줘", "고객 정보 등록 결과를 알려줘", "고객 정보 등록 기능을 실행해줘"]
read_only: false
destructive: false
idempotent: false
parameters_schema:
type: object
properties:
subjectId: {type: string, description: 업무 대상 식별자, pattern: "^[A-Za-z0-9_-]{3,40}$"}
customerId: {type: string, description: 고객 식별자, pattern: "^[A-Za-z0-9_-]{3,40}$"}
content: {type: string, description: 검색어 또는 처리 내용, maxLength: 2000}
value: {type: string, description: 상태·유형·등급 또는 처리 값, maxLength: 100}
assigneeId: {type: string, description: 담당자 식별자, pattern: "^[A-Za-z0-9_-]{3,40}$"}
startDate: {type: string, description: 조회 시작일, pattern: "^\\d{4}-\\d{2}-\\d{2}$"}
endDate: {type: string, description: 조회 종료일 또는 처리 예정일, pattern: "^\\d{4}-\\d{2}-\\d{2}$"}
page: {type: integer, description: 페이지 번호, minimum: 0}
size: {type: integer, description: 페이지 크기, minimum: 1, maximum: 100}
additionalProperties: false
tags: [crm, 고객채널, 처리, mock]
required_env_keys: []
owner_org: MCP_TOOL

View File

@@ -0,0 +1,30 @@
name: crm_customer_detail
display_name: 고객 상세 정보 조회
version: 1.0.0
category_key: crm
description:
function: 고객 상세 정보 조회 기능을 수행합니다.
when_to_use: 고객채널 업무에서 고객 상세 정보 조회 기능이 필요할 때 사용합니다.
when_not_to_use: 정보 변경이나 승인 처리가 필요한 경우에는 사용하지 않습니다.
io_limits: 입력 범위에 대한 모의 조회 결과만 반환하며 외부 시스템을 직접 변경하지 않습니다.
display_description: 고객 상세 정보 조회 기능을 안전한 모의 데이터로 제공합니다.
example_queries: ["고객 상세 정보 조회 해줘", "고객 상세 정보 조회 결과를 알려줘", "고객 상세 정보 조회 기능을 실행해줘"]
read_only: true
destructive: false
idempotent: true
parameters_schema:
type: object
properties:
subjectId: {type: string, description: 업무 대상 식별자, pattern: "^[A-Za-z0-9_-]{3,40}$"}
customerId: {type: string, description: 고객 식별자, pattern: "^[A-Za-z0-9_-]{3,40}$"}
content: {type: string, description: 검색어 또는 처리 내용, maxLength: 2000}
value: {type: string, description: 상태·유형·등급 또는 처리 값, maxLength: 100}
assigneeId: {type: string, description: 담당자 식별자, pattern: "^[A-Za-z0-9_-]{3,40}$"}
startDate: {type: string, description: 조회 시작일, pattern: "^\\d{4}-\\d{2}-\\d{2}$"}
endDate: {type: string, description: 조회 종료일 또는 처리 예정일, pattern: "^\\d{4}-\\d{2}-\\d{2}$"}
page: {type: integer, description: 페이지 번호, minimum: 0}
size: {type: integer, description: 페이지 크기, minimum: 1, maximum: 100}
additionalProperties: false
tags: [crm, 고객채널, 조회, mock]
required_env_keys: []
owner_org: MCP_TOOL

View File

@@ -0,0 +1,30 @@
name: crm_customer_duplicate_check
display_name: 고객 중복 여부 확인
version: 1.0.0
category_key: crm
description:
function: 고객 중복 여부 확인 기능을 수행합니다.
when_to_use: 고객채널 업무에서 고객 중복 여부 확인 기능이 필요할 때 사용합니다.
when_not_to_use: 정보 변경이나 승인 처리가 필요한 경우에는 사용하지 않습니다.
io_limits: 입력 범위에 대한 모의 조회 결과만 반환하며 외부 시스템을 직접 변경하지 않습니다.
display_description: 고객 중복 여부 확인 기능을 안전한 모의 데이터로 제공합니다.
example_queries: ["고객 중복 여부 확인 해줘", "고객 중복 여부 확인 결과를 알려줘", "고객 중복 여부 확인 기능을 실행해줘"]
read_only: true
destructive: false
idempotent: true
parameters_schema:
type: object
properties:
subjectId: {type: string, description: 업무 대상 식별자, pattern: "^[A-Za-z0-9_-]{3,40}$"}
customerId: {type: string, description: 고객 식별자, pattern: "^[A-Za-z0-9_-]{3,40}$"}
content: {type: string, description: 검색어 또는 처리 내용, maxLength: 2000}
value: {type: string, description: 상태·유형·등급 또는 처리 값, maxLength: 100}
assigneeId: {type: string, description: 담당자 식별자, pattern: "^[A-Za-z0-9_-]{3,40}$"}
startDate: {type: string, description: 조회 시작일, pattern: "^\\d{4}-\\d{2}-\\d{2}$"}
endDate: {type: string, description: 조회 종료일 또는 처리 예정일, pattern: "^\\d{4}-\\d{2}-\\d{2}$"}
page: {type: integer, description: 페이지 번호, minimum: 0}
size: {type: integer, description: 페이지 크기, minimum: 1, maximum: 100}
additionalProperties: false
tags: [crm, 고객채널, 조회, mock]
required_env_keys: []
owner_org: MCP_TOOL

View File

@@ -0,0 +1,30 @@
name: crm_customer_search
display_name: 고객 통합 조회
version: 1.0.0
category_key: crm
description:
function: 고객 통합 조회 기능을 수행합니다.
when_to_use: 고객채널 업무에서 고객 통합 조회 기능이 필요할 때 사용합니다.
when_not_to_use: 정보 변경이나 승인 처리가 필요한 경우에는 사용하지 않습니다.
io_limits: 입력 범위에 대한 모의 조회 결과만 반환하며 외부 시스템을 직접 변경하지 않습니다.
display_description: 고객 통합 조회 기능을 안전한 모의 데이터로 제공합니다.
example_queries: ["고객 통합 조회 해줘", "고객 통합 조회 결과를 알려줘", "고객 통합 조회 기능을 실행해줘"]
read_only: true
destructive: false
idempotent: true
parameters_schema:
type: object
properties:
subjectId: {type: string, description: 업무 대상 식별자, pattern: "^[A-Za-z0-9_-]{3,40}$"}
customerId: {type: string, description: 고객 식별자, pattern: "^[A-Za-z0-9_-]{3,40}$"}
content: {type: string, description: 검색어 또는 처리 내용, maxLength: 2000}
value: {type: string, description: 상태·유형·등급 또는 처리 값, maxLength: 100}
assigneeId: {type: string, description: 담당자 식별자, pattern: "^[A-Za-z0-9_-]{3,40}$"}
startDate: {type: string, description: 조회 시작일, pattern: "^\\d{4}-\\d{2}-\\d{2}$"}
endDate: {type: string, description: 조회 종료일 또는 처리 예정일, pattern: "^\\d{4}-\\d{2}-\\d{2}$"}
page: {type: integer, description: 페이지 번호, minimum: 0}
size: {type: integer, description: 페이지 크기, minimum: 1, maximum: 100}
additionalProperties: false
tags: [crm, 고객채널, 조회, mock]
required_env_keys: []
owner_org: MCP_TOOL

View File

@@ -0,0 +1,30 @@
name: crm_customer_update
display_name: 고객 정보 수정
version: 1.0.0
category_key: crm
description:
function: 고객 정보 수정 기능을 수행합니다.
when_to_use: 고객채널 업무에서 고객 정보 수정 기능이 필요할 때 사용합니다.
when_not_to_use: 필수 식별자와 변경 내용이 확인되지 않은 경우에는 사용하지 않습니다.
io_limits: 입력 범위에 대한 모의 처리 결과만 반환하며 외부 시스템을 직접 변경하지 않습니다.
display_description: 고객 정보 수정 기능을 안전한 모의 데이터로 제공합니다.
example_queries: ["고객 정보 수정 해줘", "고객 정보 수정 결과를 알려줘", "고객 정보 수정 기능을 실행해줘"]
read_only: false
destructive: false
idempotent: true
parameters_schema:
type: object
properties:
subjectId: {type: string, description: 업무 대상 식별자, pattern: "^[A-Za-z0-9_-]{3,40}$"}
customerId: {type: string, description: 고객 식별자, pattern: "^[A-Za-z0-9_-]{3,40}$"}
content: {type: string, description: 검색어 또는 처리 내용, maxLength: 2000}
value: {type: string, description: 상태·유형·등급 또는 처리 값, maxLength: 100}
assigneeId: {type: string, description: 담당자 식별자, pattern: "^[A-Za-z0-9_-]{3,40}$"}
startDate: {type: string, description: 조회 시작일, pattern: "^\\d{4}-\\d{2}-\\d{2}$"}
endDate: {type: string, description: 조회 종료일 또는 처리 예정일, pattern: "^\\d{4}-\\d{2}-\\d{2}$"}
page: {type: integer, description: 페이지 번호, minimum: 0}
size: {type: integer, description: 페이지 크기, minimum: 1, maximum: 100}
additionalProperties: false
tags: [crm, 고객채널, 처리, mock]
required_env_keys: []
owner_org: MCP_TOOL

View File

@@ -0,0 +1,30 @@
name: crm_grade_change
display_name: 고객 등급 변경
version: 1.0.0
category_key: crm
description:
function: 고객 등급 변경 기능을 수행합니다.
when_to_use: 고객채널 업무에서 고객 등급 변경 기능이 필요할 때 사용합니다.
when_not_to_use: 필수 식별자와 변경 내용이 확인되지 않은 경우에는 사용하지 않습니다.
io_limits: 입력 범위에 대한 모의 처리 결과만 반환하며 외부 시스템을 직접 변경하지 않습니다.
display_description: 고객 등급 변경 기능을 안전한 모의 데이터로 제공합니다.
example_queries: ["고객 등급 변경 해줘", "고객 등급 변경 결과를 알려줘", "고객 등급 변경 기능을 실행해줘"]
read_only: false
destructive: false
idempotent: true
parameters_schema:
type: object
properties:
subjectId: {type: string, description: 업무 대상 식별자, pattern: "^[A-Za-z0-9_-]{3,40}$"}
customerId: {type: string, description: 고객 식별자, pattern: "^[A-Za-z0-9_-]{3,40}$"}
content: {type: string, description: 검색어 또는 처리 내용, maxLength: 2000}
value: {type: string, description: 상태·유형·등급 또는 처리 값, maxLength: 100}
assigneeId: {type: string, description: 담당자 식별자, pattern: "^[A-Za-z0-9_-]{3,40}$"}
startDate: {type: string, description: 조회 시작일, pattern: "^\\d{4}-\\d{2}-\\d{2}$"}
endDate: {type: string, description: 조회 종료일 또는 처리 예정일, pattern: "^\\d{4}-\\d{2}-\\d{2}$"}
page: {type: integer, description: 페이지 번호, minimum: 0}
size: {type: integer, description: 페이지 크기, minimum: 1, maximum: 100}
additionalProperties: false
tags: [crm, 고객채널, 처리, mock]
required_env_keys: []
owner_org: MCP_TOOL

View File

@@ -0,0 +1,30 @@
name: crm_grade_detail
display_name: 고객 등급 조회
version: 1.0.0
category_key: crm
description:
function: 고객 등급 조회 기능을 수행합니다.
when_to_use: 고객채널 업무에서 고객 등급 조회 기능이 필요할 때 사용합니다.
when_not_to_use: 정보 변경이나 승인 처리가 필요한 경우에는 사용하지 않습니다.
io_limits: 입력 범위에 대한 모의 조회 결과만 반환하며 외부 시스템을 직접 변경하지 않습니다.
display_description: 고객 등급 조회 기능을 안전한 모의 데이터로 제공합니다.
example_queries: ["고객 등급 조회 해줘", "고객 등급 조회 결과를 알려줘", "고객 등급 조회 기능을 실행해줘"]
read_only: true
destructive: false
idempotent: true
parameters_schema:
type: object
properties:
subjectId: {type: string, description: 업무 대상 식별자, pattern: "^[A-Za-z0-9_-]{3,40}$"}
customerId: {type: string, description: 고객 식별자, pattern: "^[A-Za-z0-9_-]{3,40}$"}
content: {type: string, description: 검색어 또는 처리 내용, maxLength: 2000}
value: {type: string, description: 상태·유형·등급 또는 처리 값, maxLength: 100}
assigneeId: {type: string, description: 담당자 식별자, pattern: "^[A-Za-z0-9_-]{3,40}$"}
startDate: {type: string, description: 조회 시작일, pattern: "^\\d{4}-\\d{2}-\\d{2}$"}
endDate: {type: string, description: 조회 종료일 또는 처리 예정일, pattern: "^\\d{4}-\\d{2}-\\d{2}$"}
page: {type: integer, description: 페이지 번호, minimum: 0}
size: {type: integer, description: 페이지 크기, minimum: 1, maximum: 100}
additionalProperties: false
tags: [crm, 고객채널, 조회, mock]
required_env_keys: []
owner_org: MCP_TOOL

View File

@@ -0,0 +1,30 @@
name: crm_owner_assign
display_name: 고객 담당자 배정
version: 1.0.0
category_key: crm
description:
function: 고객 담당자 배정 기능을 수행합니다.
when_to_use: 고객채널 업무에서 고객 담당자 배정 기능이 필요할 때 사용합니다.
when_not_to_use: 필수 식별자와 변경 내용이 확인되지 않은 경우에는 사용하지 않습니다.
io_limits: 입력 범위에 대한 모의 처리 결과만 반환하며 외부 시스템을 직접 변경하지 않습니다.
display_description: 고객 담당자 배정 기능을 안전한 모의 데이터로 제공합니다.
example_queries: ["고객 담당자 배정 해줘", "고객 담당자 배정 결과를 알려줘", "고객 담당자 배정 기능을 실행해줘"]
read_only: false
destructive: false
idempotent: true
parameters_schema:
type: object
properties:
subjectId: {type: string, description: 업무 대상 식별자, pattern: "^[A-Za-z0-9_-]{3,40}$"}
customerId: {type: string, description: 고객 식별자, pattern: "^[A-Za-z0-9_-]{3,40}$"}
content: {type: string, description: 검색어 또는 처리 내용, maxLength: 2000}
value: {type: string, description: 상태·유형·등급 또는 처리 값, maxLength: 100}
assigneeId: {type: string, description: 담당자 식별자, pattern: "^[A-Za-z0-9_-]{3,40}$"}
startDate: {type: string, description: 조회 시작일, pattern: "^\\d{4}-\\d{2}-\\d{2}$"}
endDate: {type: string, description: 조회 종료일 또는 처리 예정일, pattern: "^\\d{4}-\\d{2}-\\d{2}$"}
page: {type: integer, description: 페이지 번호, minimum: 0}
size: {type: integer, description: 페이지 크기, minimum: 1, maximum: 100}
additionalProperties: false
tags: [crm, 고객채널, 처리, mock]
required_env_keys: []
owner_org: MCP_TOOL

View File

@@ -0,0 +1,30 @@
name: crm_segment_detail
display_name: 고객 세그먼트 조회
version: 1.0.0
category_key: crm
description:
function: 고객 세그먼트 조회 기능을 수행합니다.
when_to_use: 고객채널 업무에서 고객 세그먼트 조회 기능이 필요할 때 사용합니다.
when_not_to_use: 정보 변경이나 승인 처리가 필요한 경우에는 사용하지 않습니다.
io_limits: 입력 범위에 대한 모의 조회 결과만 반환하며 외부 시스템을 직접 변경하지 않습니다.
display_description: 고객 세그먼트 조회 기능을 안전한 모의 데이터로 제공합니다.
example_queries: ["고객 세그먼트 조회 해줘", "고객 세그먼트 조회 결과를 알려줘", "고객 세그먼트 조회 기능을 실행해줘"]
read_only: true
destructive: false
idempotent: true
parameters_schema:
type: object
properties:
subjectId: {type: string, description: 업무 대상 식별자, pattern: "^[A-Za-z0-9_-]{3,40}$"}
customerId: {type: string, description: 고객 식별자, pattern: "^[A-Za-z0-9_-]{3,40}$"}
content: {type: string, description: 검색어 또는 처리 내용, maxLength: 2000}
value: {type: string, description: 상태·유형·등급 또는 처리 값, maxLength: 100}
assigneeId: {type: string, description: 담당자 식별자, pattern: "^[A-Za-z0-9_-]{3,40}$"}
startDate: {type: string, description: 조회 시작일, pattern: "^\\d{4}-\\d{2}-\\d{2}$"}
endDate: {type: string, description: 조회 종료일 또는 처리 예정일, pattern: "^\\d{4}-\\d{2}-\\d{2}$"}
page: {type: integer, description: 페이지 번호, minimum: 0}
size: {type: integer, description: 페이지 크기, minimum: 1, maximum: 100}
additionalProperties: false
tags: [crm, 고객채널, 조회, mock]
required_env_keys: []
owner_org: MCP_TOOL

View File

@@ -0,0 +1,30 @@
name: crm_tag_manage
display_name: 고객 태그 관리
version: 1.0.0
category_key: crm
description:
function: 고객 태그 관리 기능을 수행합니다.
when_to_use: 고객채널 업무에서 고객 태그 관리 기능이 필요할 때 사용합니다.
when_not_to_use: 필수 식별자와 변경 내용이 확인되지 않은 경우에는 사용하지 않습니다.
io_limits: 입력 범위에 대한 모의 처리 결과만 반환하며 외부 시스템을 직접 변경하지 않습니다.
display_description: 고객 태그 관리 기능을 안전한 모의 데이터로 제공합니다.
example_queries: ["고객 태그 관리 해줘", "고객 태그 관리 결과를 알려줘", "고객 태그 관리 기능을 실행해줘"]
read_only: false
destructive: false
idempotent: true
parameters_schema:
type: object
properties:
subjectId: {type: string, description: 업무 대상 식별자, pattern: "^[A-Za-z0-9_-]{3,40}$"}
customerId: {type: string, description: 고객 식별자, pattern: "^[A-Za-z0-9_-]{3,40}$"}
content: {type: string, description: 검색어 또는 처리 내용, maxLength: 2000}
value: {type: string, description: 상태·유형·등급 또는 처리 값, maxLength: 100}
assigneeId: {type: string, description: 담당자 식별자, pattern: "^[A-Za-z0-9_-]{3,40}$"}
startDate: {type: string, description: 조회 시작일, pattern: "^\\d{4}-\\d{2}-\\d{2}$"}
endDate: {type: string, description: 조회 종료일 또는 처리 예정일, pattern: "^\\d{4}-\\d{2}-\\d{2}$"}
page: {type: integer, description: 페이지 번호, minimum: 0}
size: {type: integer, description: 페이지 크기, minimum: 1, maximum: 100}
additionalProperties: false
tags: [crm, 고객채널, 처리, mock]
required_env_keys: []
owner_org: MCP_TOOL

View File

@@ -0,0 +1,30 @@
name: voc_assign
display_name: VOC 담당자 배정
version: 1.0.0
category_key: voc
description:
function: VOC 담당자 배정 기능을 수행합니다.
when_to_use: 고객채널 업무에서 VOC 담당자 배정 기능이 필요할 때 사용합니다.
when_not_to_use: 필수 식별자와 변경 내용이 확인되지 않은 경우에는 사용하지 않습니다.
io_limits: 입력 범위에 대한 모의 처리 결과만 반환하며 외부 시스템을 직접 변경하지 않습니다.
display_description: VOC 담당자 배정 기능을 안전한 모의 데이터로 제공합니다.
example_queries: ["VOC 담당자 배정 해줘", "VOC 담당자 배정 결과를 알려줘", "VOC 담당자 배정 기능을 실행해줘"]
read_only: false
destructive: false
idempotent: true
parameters_schema:
type: object
properties:
subjectId: {type: string, description: 업무 대상 식별자, pattern: "^[A-Za-z0-9_-]{3,40}$"}
customerId: {type: string, description: 고객 식별자, pattern: "^[A-Za-z0-9_-]{3,40}$"}
content: {type: string, description: 검색어 또는 처리 내용, maxLength: 2000}
value: {type: string, description: 상태·유형·등급 또는 처리 값, maxLength: 100}
assigneeId: {type: string, description: 담당자 식별자, pattern: "^[A-Za-z0-9_-]{3,40}$"}
startDate: {type: string, description: 조회 시작일, pattern: "^\\d{4}-\\d{2}-\\d{2}$"}
endDate: {type: string, description: 조회 종료일 또는 처리 예정일, pattern: "^\\d{4}-\\d{2}-\\d{2}$"}
page: {type: integer, description: 페이지 번호, minimum: 0}
size: {type: integer, description: 페이지 크기, minimum: 1, maximum: 100}
additionalProperties: false
tags: [voc, 고객채널, 처리, mock]
required_env_keys: []
owner_org: MCP_TOOL

View File

@@ -0,0 +1,30 @@
name: voc_attachments
display_name: VOC 첨부파일 조회
version: 1.0.0
category_key: voc
description:
function: VOC 첨부파일 조회 기능을 수행합니다.
when_to_use: 고객채널 업무에서 VOC 첨부파일 조회 기능이 필요할 때 사용합니다.
when_not_to_use: 정보 변경이나 승인 처리가 필요한 경우에는 사용하지 않습니다.
io_limits: 입력 범위에 대한 모의 조회 결과만 반환하며 외부 시스템을 직접 변경하지 않습니다.
display_description: VOC 첨부파일 조회 기능을 안전한 모의 데이터로 제공합니다.
example_queries: ["VOC 첨부파일 조회 해줘", "VOC 첨부파일 조회 결과를 알려줘", "VOC 첨부파일 조회 기능을 실행해줘"]
read_only: true
destructive: false
idempotent: true
parameters_schema:
type: object
properties:
subjectId: {type: string, description: 업무 대상 식별자, pattern: "^[A-Za-z0-9_-]{3,40}$"}
customerId: {type: string, description: 고객 식별자, pattern: "^[A-Za-z0-9_-]{3,40}$"}
content: {type: string, description: 검색어 또는 처리 내용, maxLength: 2000}
value: {type: string, description: 상태·유형·등급 또는 처리 값, maxLength: 100}
assigneeId: {type: string, description: 담당자 식별자, pattern: "^[A-Za-z0-9_-]{3,40}$"}
startDate: {type: string, description: 조회 시작일, pattern: "^\\d{4}-\\d{2}-\\d{2}$"}
endDate: {type: string, description: 조회 종료일 또는 처리 예정일, pattern: "^\\d{4}-\\d{2}-\\d{2}$"}
page: {type: integer, description: 페이지 번호, minimum: 0}
size: {type: integer, description: 페이지 크기, minimum: 1, maximum: 100}
additionalProperties: false
tags: [voc, 고객채널, 조회, mock]
required_env_keys: []
owner_org: MCP_TOOL

View File

@@ -0,0 +1,30 @@
name: voc_change_status
display_name: VOC 처리 상태 변경
version: 1.0.0
category_key: voc
description:
function: VOC 처리 상태 변경 기능을 수행합니다.
when_to_use: 고객채널 업무에서 VOC 처리 상태 변경 기능이 필요할 때 사용합니다.
when_not_to_use: 필수 식별자와 변경 내용이 확인되지 않은 경우에는 사용하지 않습니다.
io_limits: 입력 범위에 대한 모의 처리 결과만 반환하며 외부 시스템을 직접 변경하지 않습니다.
display_description: VOC 처리 상태 변경 기능을 안전한 모의 데이터로 제공합니다.
example_queries: ["VOC 처리 상태 변경 해줘", "VOC 처리 상태 변경 결과를 알려줘", "VOC 처리 상태 변경 기능을 실행해줘"]
read_only: false
destructive: false
idempotent: true
parameters_schema:
type: object
properties:
subjectId: {type: string, description: 업무 대상 식별자, pattern: "^[A-Za-z0-9_-]{3,40}$"}
customerId: {type: string, description: 고객 식별자, pattern: "^[A-Za-z0-9_-]{3,40}$"}
content: {type: string, description: 검색어 또는 처리 내용, maxLength: 2000}
value: {type: string, description: 상태·유형·등급 또는 처리 값, maxLength: 100}
assigneeId: {type: string, description: 담당자 식별자, pattern: "^[A-Za-z0-9_-]{3,40}$"}
startDate: {type: string, description: 조회 시작일, pattern: "^\\d{4}-\\d{2}-\\d{2}$"}
endDate: {type: string, description: 조회 종료일 또는 처리 예정일, pattern: "^\\d{4}-\\d{2}-\\d{2}$"}
page: {type: integer, description: 페이지 번호, minimum: 0}
size: {type: integer, description: 페이지 크기, minimum: 1, maximum: 100}
additionalProperties: false
tags: [voc, 고객채널, 처리, mock]
required_env_keys: []
owner_org: MCP_TOOL

View File

@@ -0,0 +1,30 @@
name: voc_classify_type
display_name: VOC 유형 분류
version: 1.0.0
category_key: voc
description:
function: VOC 유형 분류 기능을 수행합니다.
when_to_use: 고객채널 업무에서 VOC 유형 분류 기능이 필요할 때 사용합니다.
when_not_to_use: 필수 식별자와 변경 내용이 확인되지 않은 경우에는 사용하지 않습니다.
io_limits: 입력 범위에 대한 모의 처리 결과만 반환하며 외부 시스템을 직접 변경하지 않습니다.
display_description: VOC 유형 분류 기능을 안전한 모의 데이터로 제공합니다.
example_queries: ["VOC 유형 분류 해줘", "VOC 유형 분류 결과를 알려줘", "VOC 유형 분류 기능을 실행해줘"]
read_only: false
destructive: false
idempotent: true
parameters_schema:
type: object
properties:
subjectId: {type: string, description: 업무 대상 식별자, pattern: "^[A-Za-z0-9_-]{3,40}$"}
customerId: {type: string, description: 고객 식별자, pattern: "^[A-Za-z0-9_-]{3,40}$"}
content: {type: string, description: 검색어 또는 처리 내용, maxLength: 2000}
value: {type: string, description: 상태·유형·등급 또는 처리 값, maxLength: 100}
assigneeId: {type: string, description: 담당자 식별자, pattern: "^[A-Za-z0-9_-]{3,40}$"}
startDate: {type: string, description: 조회 시작일, pattern: "^\\d{4}-\\d{2}-\\d{2}$"}
endDate: {type: string, description: 조회 종료일 또는 처리 예정일, pattern: "^\\d{4}-\\d{2}-\\d{2}$"}
page: {type: integer, description: 페이지 번호, minimum: 0}
size: {type: integer, description: 페이지 크기, minimum: 1, maximum: 100}
additionalProperties: false
tags: [voc, 고객채널, 처리, mock]
required_env_keys: []
owner_org: MCP_TOOL

View File

@@ -0,0 +1,30 @@
name: voc_customer_history
display_name: 고객별 VOC 이력 조회
version: 1.0.0
category_key: voc
description:
function: 고객별 VOC 이력 조회 기능을 수행합니다.
when_to_use: 고객채널 업무에서 고객별 VOC 이력 조회 기능이 필요할 때 사용합니다.
when_not_to_use: 정보 변경이나 승인 처리가 필요한 경우에는 사용하지 않습니다.
io_limits: 입력 범위에 대한 모의 조회 결과만 반환하며 외부 시스템을 직접 변경하지 않습니다.
display_description: 고객별 VOC 이력 조회 기능을 안전한 모의 데이터로 제공합니다.
example_queries: ["고객별 VOC 이력 조회 해줘", "고객별 VOC 이력 조회 결과를 알려줘", "고객별 VOC 이력 조회 기능을 실행해줘"]
read_only: true
destructive: false
idempotent: true
parameters_schema:
type: object
properties:
subjectId: {type: string, description: 업무 대상 식별자, pattern: "^[A-Za-z0-9_-]{3,40}$"}
customerId: {type: string, description: 고객 식별자, pattern: "^[A-Za-z0-9_-]{3,40}$"}
content: {type: string, description: 검색어 또는 처리 내용, maxLength: 2000}
value: {type: string, description: 상태·유형·등급 또는 처리 값, maxLength: 100}
assigneeId: {type: string, description: 담당자 식별자, pattern: "^[A-Za-z0-9_-]{3,40}$"}
startDate: {type: string, description: 조회 시작일, pattern: "^\\d{4}-\\d{2}-\\d{2}$"}
endDate: {type: string, description: 조회 종료일 또는 처리 예정일, pattern: "^\\d{4}-\\d{2}-\\d{2}$"}
page: {type: integer, description: 페이지 번호, minimum: 0}
size: {type: integer, description: 페이지 크기, minimum: 1, maximum: 100}
additionalProperties: false
tags: [voc, 고객채널, 조회, mock]
required_env_keys: []
owner_org: MCP_TOOL

View File

@@ -0,0 +1,30 @@
name: voc_detail
display_name: VOC 상세 조회
version: 1.0.0
category_key: voc
description:
function: VOC 상세 조회 기능을 수행합니다.
when_to_use: 고객채널 업무에서 VOC 상세 조회 기능이 필요할 때 사용합니다.
when_not_to_use: 정보 변경이나 승인 처리가 필요한 경우에는 사용하지 않습니다.
io_limits: 입력 범위에 대한 모의 조회 결과만 반환하며 외부 시스템을 직접 변경하지 않습니다.
display_description: VOC 상세 조회 기능을 안전한 모의 데이터로 제공합니다.
example_queries: ["VOC 상세 조회 해줘", "VOC 상세 조회 결과를 알려줘", "VOC 상세 조회 기능을 실행해줘"]
read_only: true
destructive: false
idempotent: true
parameters_schema:
type: object
properties:
subjectId: {type: string, description: 업무 대상 식별자, pattern: "^[A-Za-z0-9_-]{3,40}$"}
customerId: {type: string, description: 고객 식별자, pattern: "^[A-Za-z0-9_-]{3,40}$"}
content: {type: string, description: 검색어 또는 처리 내용, maxLength: 2000}
value: {type: string, description: 상태·유형·등급 또는 처리 값, maxLength: 100}
assigneeId: {type: string, description: 담당자 식별자, pattern: "^[A-Za-z0-9_-]{3,40}$"}
startDate: {type: string, description: 조회 시작일, pattern: "^\\d{4}-\\d{2}-\\d{2}$"}
endDate: {type: string, description: 조회 종료일 또는 처리 예정일, pattern: "^\\d{4}-\\d{2}-\\d{2}$"}
page: {type: integer, description: 페이지 번호, minimum: 0}
size: {type: integer, description: 페이지 크기, minimum: 1, maximum: 100}
additionalProperties: false
tags: [voc, 고객채널, 조회, mock]
required_env_keys: []
owner_org: MCP_TOOL

View File

@@ -0,0 +1,30 @@
name: voc_detect_duplicate
display_name: 중복 VOC 탐지
version: 1.0.0
category_key: voc
description:
function: 중복 VOC 탐지 기능을 수행합니다.
when_to_use: 고객채널 업무에서 중복 VOC 탐지 기능이 필요할 때 사용합니다.
when_not_to_use: 정보 변경이나 승인 처리가 필요한 경우에는 사용하지 않습니다.
io_limits: 입력 범위에 대한 모의 조회 결과만 반환하며 외부 시스템을 직접 변경하지 않습니다.
display_description: 중복 VOC 탐지 기능을 안전한 모의 데이터로 제공합니다.
example_queries: ["중복 VOC 탐지 해줘", "중복 VOC 탐지 결과를 알려줘", "중복 VOC 탐지 기능을 실행해줘"]
read_only: true
destructive: false
idempotent: true
parameters_schema:
type: object
properties:
subjectId: {type: string, description: 업무 대상 식별자, pattern: "^[A-Za-z0-9_-]{3,40}$"}
customerId: {type: string, description: 고객 식별자, pattern: "^[A-Za-z0-9_-]{3,40}$"}
content: {type: string, description: 검색어 또는 처리 내용, maxLength: 2000}
value: {type: string, description: 상태·유형·등급 또는 처리 값, maxLength: 100}
assigneeId: {type: string, description: 담당자 식별자, pattern: "^[A-Za-z0-9_-]{3,40}$"}
startDate: {type: string, description: 조회 시작일, pattern: "^\\d{4}-\\d{2}-\\d{2}$"}
endDate: {type: string, description: 조회 종료일 또는 처리 예정일, pattern: "^\\d{4}-\\d{2}-\\d{2}$"}
page: {type: integer, description: 페이지 번호, minimum: 0}
size: {type: integer, description: 페이지 크기, minimum: 1, maximum: 100}
additionalProperties: false
tags: [voc, 고객채널, 조회, mock]
required_env_keys: []
owner_org: MCP_TOOL

View File

@@ -0,0 +1,30 @@
name: voc_extend_due_date
display_name: VOC 처리 기한 연장
version: 1.0.0
category_key: voc
description:
function: VOC 처리 기한 연장 기능을 수행합니다.
when_to_use: 고객채널 업무에서 VOC 처리 기한 연장 기능이 필요할 때 사용합니다.
when_not_to_use: 필수 식별자와 변경 내용이 확인되지 않은 경우에는 사용하지 않습니다.
io_limits: 입력 범위에 대한 모의 처리 결과만 반환하며 외부 시스템을 직접 변경하지 않습니다.
display_description: VOC 처리 기한 연장 기능을 안전한 모의 데이터로 제공합니다.
example_queries: ["VOC 처리 기한 연장 해줘", "VOC 처리 기한 연장 결과를 알려줘", "VOC 처리 기한 연장 기능을 실행해줘"]
read_only: false
destructive: false
idempotent: true
parameters_schema:
type: object
properties:
subjectId: {type: string, description: 업무 대상 식별자, pattern: "^[A-Za-z0-9_-]{3,40}$"}
customerId: {type: string, description: 고객 식별자, pattern: "^[A-Za-z0-9_-]{3,40}$"}
content: {type: string, description: 검색어 또는 처리 내용, maxLength: 2000}
value: {type: string, description: 상태·유형·등급 또는 처리 값, maxLength: 100}
assigneeId: {type: string, description: 담당자 식별자, pattern: "^[A-Za-z0-9_-]{3,40}$"}
startDate: {type: string, description: 조회 시작일, pattern: "^\\d{4}-\\d{2}-\\d{2}$"}
endDate: {type: string, description: 조회 종료일 또는 처리 예정일, pattern: "^\\d{4}-\\d{2}-\\d{2}$"}
page: {type: integer, description: 페이지 번호, minimum: 0}
size: {type: integer, description: 페이지 크기, minimum: 1, maximum: 100}
additionalProperties: false
tags: [voc, 고객채널, 처리, mock]
required_env_keys: []
owner_org: MCP_TOOL

View File

@@ -0,0 +1,30 @@
name: voc_register
display_name: VOC 접수 등록
version: 1.0.0
category_key: voc
description:
function: VOC 접수 등록 기능을 수행합니다.
when_to_use: 고객채널 업무에서 VOC 접수 등록 기능이 필요할 때 사용합니다.
when_not_to_use: 필수 식별자와 변경 내용이 확인되지 않은 경우에는 사용하지 않습니다.
io_limits: 입력 범위에 대한 모의 처리 결과만 반환하며 외부 시스템을 직접 변경하지 않습니다.
display_description: VOC 접수 등록 기능을 안전한 모의 데이터로 제공합니다.
example_queries: ["VOC 접수 등록 해줘", "VOC 접수 등록 결과를 알려줘", "VOC 접수 등록 기능을 실행해줘"]
read_only: false
destructive: false
idempotent: false
parameters_schema:
type: object
properties:
subjectId: {type: string, description: 업무 대상 식별자, pattern: "^[A-Za-z0-9_-]{3,40}$"}
customerId: {type: string, description: 고객 식별자, pattern: "^[A-Za-z0-9_-]{3,40}$"}
content: {type: string, description: 검색어 또는 처리 내용, maxLength: 2000}
value: {type: string, description: 상태·유형·등급 또는 처리 값, maxLength: 100}
assigneeId: {type: string, description: 담당자 식별자, pattern: "^[A-Za-z0-9_-]{3,40}$"}
startDate: {type: string, description: 조회 시작일, pattern: "^\\d{4}-\\d{2}-\\d{2}$"}
endDate: {type: string, description: 조회 종료일 또는 처리 예정일, pattern: "^\\d{4}-\\d{2}-\\d{2}$"}
page: {type: integer, description: 페이지 번호, minimum: 0}
size: {type: integer, description: 페이지 크기, minimum: 1, maximum: 100}
additionalProperties: false
tags: [voc, 고객채널, 처리, mock]
required_env_keys: []
owner_org: MCP_TOOL

View File

@@ -0,0 +1,30 @@
name: voc_register_result
display_name: VOC 처리 결과 등록
version: 1.0.0
category_key: voc
description:
function: VOC 처리 결과 등록 기능을 수행합니다.
when_to_use: 고객채널 업무에서 VOC 처리 결과 등록 기능이 필요할 때 사용합니다.
when_not_to_use: 필수 식별자와 변경 내용이 확인되지 않은 경우에는 사용하지 않습니다.
io_limits: 입력 범위에 대한 모의 처리 결과만 반환하며 외부 시스템을 직접 변경하지 않습니다.
display_description: VOC 처리 결과 등록 기능을 안전한 모의 데이터로 제공합니다.
example_queries: ["VOC 처리 결과 등록 해줘", "VOC 처리 결과 등록 결과를 알려줘", "VOC 처리 결과 등록 기능을 실행해줘"]
read_only: false
destructive: false
idempotent: true
parameters_schema:
type: object
properties:
subjectId: {type: string, description: 업무 대상 식별자, pattern: "^[A-Za-z0-9_-]{3,40}$"}
customerId: {type: string, description: 고객 식별자, pattern: "^[A-Za-z0-9_-]{3,40}$"}
content: {type: string, description: 검색어 또는 처리 내용, maxLength: 2000}
value: {type: string, description: 상태·유형·등급 또는 처리 값, maxLength: 100}
assigneeId: {type: string, description: 담당자 식별자, pattern: "^[A-Za-z0-9_-]{3,40}$"}
startDate: {type: string, description: 조회 시작일, pattern: "^\\d{4}-\\d{2}-\\d{2}$"}
endDate: {type: string, description: 조회 종료일 또는 처리 예정일, pattern: "^\\d{4}-\\d{2}-\\d{2}$"}
page: {type: integer, description: 페이지 번호, minimum: 0}
size: {type: integer, description: 페이지 크기, minimum: 1, maximum: 100}
additionalProperties: false
tags: [voc, 고객채널, 처리, mock]
required_env_keys: []
owner_org: MCP_TOOL

View File

@@ -0,0 +1,30 @@
name: voc_search
display_name: VOC 목록 검색
version: 1.0.0
category_key: voc
description:
function: VOC 목록 검색 기능을 수행합니다.
when_to_use: 고객채널 업무에서 VOC 목록 검색 기능이 필요할 때 사용합니다.
when_not_to_use: 정보 변경이나 승인 처리가 필요한 경우에는 사용하지 않습니다.
io_limits: 입력 범위에 대한 모의 조회 결과만 반환하며 외부 시스템을 직접 변경하지 않습니다.
display_description: VOC 목록 검색 기능을 안전한 모의 데이터로 제공합니다.
example_queries: ["VOC 목록 검색 해줘", "VOC 목록 검색 결과를 알려줘", "VOC 목록 검색 기능을 실행해줘"]
read_only: true
destructive: false
idempotent: true
parameters_schema:
type: object
properties:
subjectId: {type: string, description: 업무 대상 식별자, pattern: "^[A-Za-z0-9_-]{3,40}$"}
customerId: {type: string, description: 고객 식별자, pattern: "^[A-Za-z0-9_-]{3,40}$"}
content: {type: string, description: 검색어 또는 처리 내용, maxLength: 2000}
value: {type: string, description: 상태·유형·등급 또는 처리 값, maxLength: 100}
assigneeId: {type: string, description: 담당자 식별자, pattern: "^[A-Za-z0-9_-]{3,40}$"}
startDate: {type: string, description: 조회 시작일, pattern: "^\\d{4}-\\d{2}-\\d{2}$"}
endDate: {type: string, description: 조회 종료일 또는 처리 예정일, pattern: "^\\d{4}-\\d{2}-\\d{2}$"}
page: {type: integer, description: 페이지 번호, minimum: 0}
size: {type: integer, description: 페이지 크기, minimum: 1, maximum: 100}
additionalProperties: false
tags: [voc, 고객채널, 조회, mock]
required_env_keys: []
owner_org: MCP_TOOL

View File

@@ -0,0 +1,30 @@
name: voc_send_reply
display_name: VOC 답변 발송
version: 1.0.0
category_key: voc
description:
function: VOC 답변 발송 기능을 수행합니다.
when_to_use: 고객채널 업무에서 VOC 답변 발송 기능이 필요할 때 사용합니다.
when_not_to_use: 필수 식별자와 변경 내용이 확인되지 않은 경우에는 사용하지 않습니다.
io_limits: 입력 범위에 대한 모의 처리 결과만 반환하며 외부 시스템을 직접 변경하지 않습니다.
display_description: VOC 답변 발송 기능을 안전한 모의 데이터로 제공합니다.
example_queries: ["VOC 답변 발송 해줘", "VOC 답변 발송 결과를 알려줘", "VOC 답변 발송 기능을 실행해줘"]
read_only: false
destructive: false
idempotent: false
parameters_schema:
type: object
properties:
subjectId: {type: string, description: 업무 대상 식별자, pattern: "^[A-Za-z0-9_-]{3,40}$"}
customerId: {type: string, description: 고객 식별자, pattern: "^[A-Za-z0-9_-]{3,40}$"}
content: {type: string, description: 검색어 또는 처리 내용, maxLength: 2000}
value: {type: string, description: 상태·유형·등급 또는 처리 값, maxLength: 100}
assigneeId: {type: string, description: 담당자 식별자, pattern: "^[A-Za-z0-9_-]{3,40}$"}
startDate: {type: string, description: 조회 시작일, pattern: "^\\d{4}-\\d{2}-\\d{2}$"}
endDate: {type: string, description: 조회 종료일 또는 처리 예정일, pattern: "^\\d{4}-\\d{2}-\\d{2}$"}
page: {type: integer, description: 페이지 번호, minimum: 0}
size: {type: integer, description: 페이지 크기, minimum: 1, maximum: 100}
additionalProperties: false
tags: [voc, 고객채널, 처리, mock]
required_env_keys: []
owner_org: MCP_TOOL

View File

@@ -0,0 +1,30 @@
name: voc_set_priority
display_name: VOC 우선순위 설정
version: 1.0.0
category_key: voc
description:
function: VOC 우선순위 설정 기능을 수행합니다.
when_to_use: 고객채널 업무에서 VOC 우선순위 설정 기능이 필요할 때 사용합니다.
when_not_to_use: 필수 식별자와 변경 내용이 확인되지 않은 경우에는 사용하지 않습니다.
io_limits: 입력 범위에 대한 모의 처리 결과만 반환하며 외부 시스템을 직접 변경하지 않습니다.
display_description: VOC 우선순위 설정 기능을 안전한 모의 데이터로 제공합니다.
example_queries: ["VOC 우선순위 설정 해줘", "VOC 우선순위 설정 결과를 알려줘", "VOC 우선순위 설정 기능을 실행해줘"]
read_only: false
destructive: false
idempotent: true
parameters_schema:
type: object
properties:
subjectId: {type: string, description: 업무 대상 식별자, pattern: "^[A-Za-z0-9_-]{3,40}$"}
customerId: {type: string, description: 고객 식별자, pattern: "^[A-Za-z0-9_-]{3,40}$"}
content: {type: string, description: 검색어 또는 처리 내용, maxLength: 2000}
value: {type: string, description: 상태·유형·등급 또는 처리 값, maxLength: 100}
assigneeId: {type: string, description: 담당자 식별자, pattern: "^[A-Za-z0-9_-]{3,40}$"}
startDate: {type: string, description: 조회 시작일, pattern: "^\\d{4}-\\d{2}-\\d{2}$"}
endDate: {type: string, description: 조회 종료일 또는 처리 예정일, pattern: "^\\d{4}-\\d{2}-\\d{2}$"}
page: {type: integer, description: 페이지 번호, minimum: 0}
size: {type: integer, description: 페이지 크기, minimum: 1, maximum: 100}
additionalProperties: false
tags: [voc, 고객채널, 처리, mock]
required_env_keys: []
owner_org: MCP_TOOL

View File

@@ -0,0 +1,30 @@
name: voc_statistics
display_name: VOC 통계 조회
version: 1.0.0
category_key: voc
description:
function: VOC 통계 조회 기능을 수행합니다.
when_to_use: 고객채널 업무에서 VOC 통계 조회 기능이 필요할 때 사용합니다.
when_not_to_use: 정보 변경이나 승인 처리가 필요한 경우에는 사용하지 않습니다.
io_limits: 입력 범위에 대한 모의 조회 결과만 반환하며 외부 시스템을 직접 변경하지 않습니다.
display_description: VOC 통계 조회 기능을 안전한 모의 데이터로 제공합니다.
example_queries: ["VOC 통계 조회 해줘", "VOC 통계 조회 결과를 알려줘", "VOC 통계 조회 기능을 실행해줘"]
read_only: true
destructive: false
idempotent: true
parameters_schema:
type: object
properties:
subjectId: {type: string, description: 업무 대상 식별자, pattern: "^[A-Za-z0-9_-]{3,40}$"}
customerId: {type: string, description: 고객 식별자, pattern: "^[A-Za-z0-9_-]{3,40}$"}
content: {type: string, description: 검색어 또는 처리 내용, maxLength: 2000}
value: {type: string, description: 상태·유형·등급 또는 처리 값, maxLength: 100}
assigneeId: {type: string, description: 담당자 식별자, pattern: "^[A-Za-z0-9_-]{3,40}$"}
startDate: {type: string, description: 조회 시작일, pattern: "^\\d{4}-\\d{2}-\\d{2}$"}
endDate: {type: string, description: 조회 종료일 또는 처리 예정일, pattern: "^\\d{4}-\\d{2}-\\d{2}$"}
page: {type: integer, description: 페이지 번호, minimum: 0}
size: {type: integer, description: 페이지 크기, minimum: 1, maximum: 100}
additionalProperties: false
tags: [voc, 고객채널, 조회, mock]
required_env_keys: []
owner_org: MCP_TOOL

View File

@@ -0,0 +1,30 @@
name: voc_transfer
display_name: VOC 이관 처리
version: 1.0.0
category_key: voc
description:
function: VOC 이관 처리 기능을 수행합니다.
when_to_use: 고객채널 업무에서 VOC 이관 처리 기능이 필요할 때 사용합니다.
when_not_to_use: 필수 식별자와 변경 내용이 확인되지 않은 경우에는 사용하지 않습니다.
io_limits: 입력 범위에 대한 모의 처리 결과만 반환하며 외부 시스템을 직접 변경하지 않습니다.
display_description: VOC 이관 처리 기능을 안전한 모의 데이터로 제공합니다.
example_queries: ["VOC 이관 처리 해줘", "VOC 이관 처리 결과를 알려줘", "VOC 이관 처리 기능을 실행해줘"]
read_only: false
destructive: false
idempotent: true
parameters_schema:
type: object
properties:
subjectId: {type: string, description: 업무 대상 식별자, pattern: "^[A-Za-z0-9_-]{3,40}$"}
customerId: {type: string, description: 고객 식별자, pattern: "^[A-Za-z0-9_-]{3,40}$"}
content: {type: string, description: 검색어 또는 처리 내용, maxLength: 2000}
value: {type: string, description: 상태·유형·등급 또는 처리 값, maxLength: 100}
assigneeId: {type: string, description: 담당자 식별자, pattern: "^[A-Za-z0-9_-]{3,40}$"}
startDate: {type: string, description: 조회 시작일, pattern: "^\\d{4}-\\d{2}-\\d{2}$"}
endDate: {type: string, description: 조회 종료일 또는 처리 예정일, pattern: "^\\d{4}-\\d{2}-\\d{2}$"}
page: {type: integer, description: 페이지 번호, minimum: 0}
size: {type: integer, description: 페이지 크기, minimum: 1, maximum: 100}
additionalProperties: false
tags: [voc, 고객채널, 처리, mock]
required_env_keys: []
owner_org: MCP_TOOL

View File

@@ -0,0 +1,30 @@
name: voc_update
display_name: VOC 내용 수정
version: 1.0.0
category_key: voc
description:
function: VOC 내용 수정 기능을 수행합니다.
when_to_use: 고객채널 업무에서 VOC 내용 수정 기능이 필요할 때 사용합니다.
when_not_to_use: 필수 식별자와 변경 내용이 확인되지 않은 경우에는 사용하지 않습니다.
io_limits: 입력 범위에 대한 모의 처리 결과만 반환하며 외부 시스템을 직접 변경하지 않습니다.
display_description: VOC 내용 수정 기능을 안전한 모의 데이터로 제공합니다.
example_queries: ["VOC 내용 수정 해줘", "VOC 내용 수정 결과를 알려줘", "VOC 내용 수정 기능을 실행해줘"]
read_only: false
destructive: false
idempotent: true
parameters_schema:
type: object
properties:
subjectId: {type: string, description: 업무 대상 식별자, pattern: "^[A-Za-z0-9_-]{3,40}$"}
customerId: {type: string, description: 고객 식별자, pattern: "^[A-Za-z0-9_-]{3,40}$"}
content: {type: string, description: 검색어 또는 처리 내용, maxLength: 2000}
value: {type: string, description: 상태·유형·등급 또는 처리 값, maxLength: 100}
assigneeId: {type: string, description: 담당자 식별자, pattern: "^[A-Za-z0-9_-]{3,40}$"}
startDate: {type: string, description: 조회 시작일, pattern: "^\\d{4}-\\d{2}-\\d{2}$"}
endDate: {type: string, description: 조회 종료일 또는 처리 예정일, pattern: "^\\d{4}-\\d{2}-\\d{2}$"}
page: {type: integer, description: 페이지 번호, minimum: 0}
size: {type: integer, description: 페이지 크기, minimum: 1, maximum: 100}
additionalProperties: false
tags: [voc, 고객채널, 처리, mock]
required_env_keys: []
owner_org: MCP_TOOL

View File

@@ -0,0 +1,30 @@
name: voc_urgent_list
display_name: 긴급 VOC 목록 조회
version: 1.0.0
category_key: voc
description:
function: 긴급 VOC 목록 조회 기능을 수행합니다.
when_to_use: 고객채널 업무에서 긴급 VOC 목록 조회 기능이 필요할 때 사용합니다.
when_not_to_use: 정보 변경이나 승인 처리가 필요한 경우에는 사용하지 않습니다.
io_limits: 입력 범위에 대한 모의 조회 결과만 반환하며 외부 시스템을 직접 변경하지 않습니다.
display_description: 긴급 VOC 목록 조회 기능을 안전한 모의 데이터로 제공합니다.
example_queries: ["긴급 VOC 목록 조회 해줘", "긴급 VOC 목록 조회 결과를 알려줘", "긴급 VOC 목록 조회 기능을 실행해줘"]
read_only: true
destructive: false
idempotent: true
parameters_schema:
type: object
properties:
subjectId: {type: string, description: 업무 대상 식별자, pattern: "^[A-Za-z0-9_-]{3,40}$"}
customerId: {type: string, description: 고객 식별자, pattern: "^[A-Za-z0-9_-]{3,40}$"}
content: {type: string, description: 검색어 또는 처리 내용, maxLength: 2000}
value: {type: string, description: 상태·유형·등급 또는 처리 값, maxLength: 100}
assigneeId: {type: string, description: 담당자 식별자, pattern: "^[A-Za-z0-9_-]{3,40}$"}
startDate: {type: string, description: 조회 시작일, pattern: "^\\d{4}-\\d{2}-\\d{2}$"}
endDate: {type: string, description: 조회 종료일 또는 처리 예정일, pattern: "^\\d{4}-\\d{2}-\\d{2}$"}
page: {type: integer, description: 페이지 번호, minimum: 0}
size: {type: integer, description: 페이지 크기, minimum: 1, maximum: 100}
additionalProperties: false
tags: [voc, 고객채널, 조회, mock]
required_env_keys: []
owner_org: MCP_TOOL

View File

@@ -0,0 +1,30 @@
name: wcm_content_copy
display_name: 웹 콘텐츠 복사
version: 1.0.0
category_key: wcm
description:
function: 웹 콘텐츠 복사 기능을 수행합니다.
when_to_use: 고객채널 업무에서 웹 콘텐츠 복사 기능이 필요할 때 사용합니다.
when_not_to_use: 필수 식별자와 변경 내용이 확인되지 않은 경우에는 사용하지 않습니다.
io_limits: 입력 범위에 대한 모의 처리 결과만 반환하며 외부 시스템을 직접 변경하지 않습니다.
display_description: 웹 콘텐츠 복사 기능을 안전한 모의 데이터로 제공합니다.
example_queries: ["웹 콘텐츠 복사 해줘", "웹 콘텐츠 복사 결과를 알려줘", "웹 콘텐츠 복사 기능을 실행해줘"]
read_only: false
destructive: false
idempotent: false
parameters_schema:
type: object
properties:
subjectId: {type: string, description: 업무 대상 식별자, pattern: "^[A-Za-z0-9_-]{3,40}$"}
customerId: {type: string, description: 고객 식별자, pattern: "^[A-Za-z0-9_-]{3,40}$"}
content: {type: string, description: 검색어 또는 처리 내용, maxLength: 2000}
value: {type: string, description: 상태·유형·등급 또는 처리 값, maxLength: 100}
assigneeId: {type: string, description: 담당자 식별자, pattern: "^[A-Za-z0-9_-]{3,40}$"}
startDate: {type: string, description: 조회 시작일, pattern: "^\\d{4}-\\d{2}-\\d{2}$"}
endDate: {type: string, description: 조회 종료일 또는 처리 예정일, pattern: "^\\d{4}-\\d{2}-\\d{2}$"}
page: {type: integer, description: 페이지 번호, minimum: 0}
size: {type: integer, description: 페이지 크기, minimum: 1, maximum: 100}
additionalProperties: false
tags: [wcm, 고객채널, 처리, mock]
required_env_keys: []
owner_org: MCP_TOOL

View File

@@ -0,0 +1,30 @@
name: wcm_content_create
display_name: 웹 콘텐츠 등록
version: 1.0.0
category_key: wcm
description:
function: 웹 콘텐츠 등록 기능을 수행합니다.
when_to_use: 고객채널 업무에서 웹 콘텐츠 등록 기능이 필요할 때 사용합니다.
when_not_to_use: 필수 식별자와 변경 내용이 확인되지 않은 경우에는 사용하지 않습니다.
io_limits: 입력 범위에 대한 모의 처리 결과만 반환하며 외부 시스템을 직접 변경하지 않습니다.
display_description: 웹 콘텐츠 등록 기능을 안전한 모의 데이터로 제공합니다.
example_queries: ["웹 콘텐츠 등록 해줘", "웹 콘텐츠 등록 결과를 알려줘", "웹 콘텐츠 등록 기능을 실행해줘"]
read_only: false
destructive: false
idempotent: false
parameters_schema:
type: object
properties:
subjectId: {type: string, description: 업무 대상 식별자, pattern: "^[A-Za-z0-9_-]{3,40}$"}
customerId: {type: string, description: 고객 식별자, pattern: "^[A-Za-z0-9_-]{3,40}$"}
content: {type: string, description: 검색어 또는 처리 내용, maxLength: 2000}
value: {type: string, description: 상태·유형·등급 또는 처리 값, maxLength: 100}
assigneeId: {type: string, description: 담당자 식별자, pattern: "^[A-Za-z0-9_-]{3,40}$"}
startDate: {type: string, description: 조회 시작일, pattern: "^\\d{4}-\\d{2}-\\d{2}$"}
endDate: {type: string, description: 조회 종료일 또는 처리 예정일, pattern: "^\\d{4}-\\d{2}-\\d{2}$"}
page: {type: integer, description: 페이지 번호, minimum: 0}
size: {type: integer, description: 페이지 크기, minimum: 1, maximum: 100}
additionalProperties: false
tags: [wcm, 고객채널, 처리, mock]
required_env_keys: []
owner_org: MCP_TOOL

View File

@@ -0,0 +1,30 @@
name: wcm_content_delete
display_name: 웹 콘텐츠 삭제
version: 1.0.0
category_key: wcm
description:
function: 웹 콘텐츠 삭제 기능을 수행합니다.
when_to_use: 고객채널 업무에서 웹 콘텐츠 삭제 기능이 필요할 때 사용합니다.
when_not_to_use: 필수 식별자와 변경 내용이 확인되지 않은 경우에는 사용하지 않습니다.
io_limits: 입력 범위에 대한 모의 처리 결과만 반환하며 외부 시스템을 직접 변경하지 않습니다.
display_description: 웹 콘텐츠 삭제 기능을 안전한 모의 데이터로 제공합니다.
example_queries: ["웹 콘텐츠 삭제 해줘", "웹 콘텐츠 삭제 결과를 알려줘", "웹 콘텐츠 삭제 기능을 실행해줘"]
read_only: false
destructive: true
idempotent: true
parameters_schema:
type: object
properties:
subjectId: {type: string, description: 업무 대상 식별자, pattern: "^[A-Za-z0-9_-]{3,40}$"}
customerId: {type: string, description: 고객 식별자, pattern: "^[A-Za-z0-9_-]{3,40}$"}
content: {type: string, description: 검색어 또는 처리 내용, maxLength: 2000}
value: {type: string, description: 상태·유형·등급 또는 처리 값, maxLength: 100}
assigneeId: {type: string, description: 담당자 식별자, pattern: "^[A-Za-z0-9_-]{3,40}$"}
startDate: {type: string, description: 조회 시작일, pattern: "^\\d{4}-\\d{2}-\\d{2}$"}
endDate: {type: string, description: 조회 종료일 또는 처리 예정일, pattern: "^\\d{4}-\\d{2}-\\d{2}$"}
page: {type: integer, description: 페이지 번호, minimum: 0}
size: {type: integer, description: 페이지 크기, minimum: 1, maximum: 100}
additionalProperties: false
tags: [wcm, 고객채널, 처리, mock]
required_env_keys: []
owner_org: MCP_TOOL

View File

@@ -0,0 +1,30 @@
name: wcm_content_detail
display_name: 웹 콘텐츠 상세 조회
version: 1.0.0
category_key: wcm
description:
function: 웹 콘텐츠 상세 조회 기능을 수행합니다.
when_to_use: 고객채널 업무에서 웹 콘텐츠 상세 조회 기능이 필요할 때 사용합니다.
when_not_to_use: 정보 변경이나 승인 처리가 필요한 경우에는 사용하지 않습니다.
io_limits: 입력 범위에 대한 모의 조회 결과만 반환하며 외부 시스템을 직접 변경하지 않습니다.
display_description: 웹 콘텐츠 상세 조회 기능을 안전한 모의 데이터로 제공합니다.
example_queries: ["웹 콘텐츠 상세 조회 해줘", "웹 콘텐츠 상세 조회 결과를 알려줘", "웹 콘텐츠 상세 조회 기능을 실행해줘"]
read_only: true
destructive: false
idempotent: true
parameters_schema:
type: object
properties:
subjectId: {type: string, description: 업무 대상 식별자, pattern: "^[A-Za-z0-9_-]{3,40}$"}
customerId: {type: string, description: 고객 식별자, pattern: "^[A-Za-z0-9_-]{3,40}$"}
content: {type: string, description: 검색어 또는 처리 내용, maxLength: 2000}
value: {type: string, description: 상태·유형·등급 또는 처리 값, maxLength: 100}
assigneeId: {type: string, description: 담당자 식별자, pattern: "^[A-Za-z0-9_-]{3,40}$"}
startDate: {type: string, description: 조회 시작일, pattern: "^\\d{4}-\\d{2}-\\d{2}$"}
endDate: {type: string, description: 조회 종료일 또는 처리 예정일, pattern: "^\\d{4}-\\d{2}-\\d{2}$"}
page: {type: integer, description: 페이지 번호, minimum: 0}
size: {type: integer, description: 페이지 크기, minimum: 1, maximum: 100}
additionalProperties: false
tags: [wcm, 고객채널, 조회, mock]
required_env_keys: []
owner_org: MCP_TOOL

View File

@@ -0,0 +1,30 @@
name: wcm_content_list
display_name: 웹 콘텐츠 목록 조회
version: 1.0.0
category_key: wcm
description:
function: 웹 콘텐츠 목록 조회 기능을 수행합니다.
when_to_use: 고객채널 업무에서 웹 콘텐츠 목록 조회 기능이 필요할 때 사용합니다.
when_not_to_use: 정보 변경이나 승인 처리가 필요한 경우에는 사용하지 않습니다.
io_limits: 입력 범위에 대한 모의 조회 결과만 반환하며 외부 시스템을 직접 변경하지 않습니다.
display_description: 웹 콘텐츠 목록 조회 기능을 안전한 모의 데이터로 제공합니다.
example_queries: ["웹 콘텐츠 목록 조회 해줘", "웹 콘텐츠 목록 조회 결과를 알려줘", "웹 콘텐츠 목록 조회 기능을 실행해줘"]
read_only: true
destructive: false
idempotent: true
parameters_schema:
type: object
properties:
subjectId: {type: string, description: 업무 대상 식별자, pattern: "^[A-Za-z0-9_-]{3,40}$"}
customerId: {type: string, description: 고객 식별자, pattern: "^[A-Za-z0-9_-]{3,40}$"}
content: {type: string, description: 검색어 또는 처리 내용, maxLength: 2000}
value: {type: string, description: 상태·유형·등급 또는 처리 값, maxLength: 100}
assigneeId: {type: string, description: 담당자 식별자, pattern: "^[A-Za-z0-9_-]{3,40}$"}
startDate: {type: string, description: 조회 시작일, pattern: "^\\d{4}-\\d{2}-\\d{2}$"}
endDate: {type: string, description: 조회 종료일 또는 처리 예정일, pattern: "^\\d{4}-\\d{2}-\\d{2}$"}
page: {type: integer, description: 페이지 번호, minimum: 0}
size: {type: integer, description: 페이지 크기, minimum: 1, maximum: 100}
additionalProperties: false
tags: [wcm, 고객채널, 조회, mock]
required_env_keys: []
owner_org: MCP_TOOL

View File

@@ -0,0 +1,30 @@
name: wcm_content_preview
display_name: 웹 콘텐츠 미리보기
version: 1.0.0
category_key: wcm
description:
function: 웹 콘텐츠 미리보기 기능을 수행합니다.
when_to_use: 고객채널 업무에서 웹 콘텐츠 미리보기 기능이 필요할 때 사용합니다.
when_not_to_use: 정보 변경이나 승인 처리가 필요한 경우에는 사용하지 않습니다.
io_limits: 입력 범위에 대한 모의 조회 결과만 반환하며 외부 시스템을 직접 변경하지 않습니다.
display_description: 웹 콘텐츠 미리보기 기능을 안전한 모의 데이터로 제공합니다.
example_queries: ["웹 콘텐츠 미리보기 해줘", "웹 콘텐츠 미리보기 결과를 알려줘", "웹 콘텐츠 미리보기 기능을 실행해줘"]
read_only: true
destructive: false
idempotent: true
parameters_schema:
type: object
properties:
subjectId: {type: string, description: 업무 대상 식별자, pattern: "^[A-Za-z0-9_-]{3,40}$"}
customerId: {type: string, description: 고객 식별자, pattern: "^[A-Za-z0-9_-]{3,40}$"}
content: {type: string, description: 검색어 또는 처리 내용, maxLength: 2000}
value: {type: string, description: 상태·유형·등급 또는 처리 값, maxLength: 100}
assigneeId: {type: string, description: 담당자 식별자, pattern: "^[A-Za-z0-9_-]{3,40}$"}
startDate: {type: string, description: 조회 시작일, pattern: "^\\d{4}-\\d{2}-\\d{2}$"}
endDate: {type: string, description: 조회 종료일 또는 처리 예정일, pattern: "^\\d{4}-\\d{2}-\\d{2}$"}
page: {type: integer, description: 페이지 번호, minimum: 0}
size: {type: integer, description: 페이지 크기, minimum: 1, maximum: 100}
additionalProperties: false
tags: [wcm, 고객채널, 조회, mock]
required_env_keys: []
owner_org: MCP_TOOL

View File

@@ -0,0 +1,30 @@
name: wcm_content_publish
display_name: 웹 콘텐츠 게시
version: 1.0.0
category_key: wcm
description:
function: 웹 콘텐츠 게시 기능을 수행합니다.
when_to_use: 고객채널 업무에서 웹 콘텐츠 게시 기능이 필요할 때 사용합니다.
when_not_to_use: 필수 식별자와 변경 내용이 확인되지 않은 경우에는 사용하지 않습니다.
io_limits: 입력 범위에 대한 모의 처리 결과만 반환하며 외부 시스템을 직접 변경하지 않습니다.
display_description: 웹 콘텐츠 게시 기능을 안전한 모의 데이터로 제공합니다.
example_queries: ["웹 콘텐츠 게시 해줘", "웹 콘텐츠 게시 결과를 알려줘", "웹 콘텐츠 게시 기능을 실행해줘"]
read_only: false
destructive: false
idempotent: true
parameters_schema:
type: object
properties:
subjectId: {type: string, description: 업무 대상 식별자, pattern: "^[A-Za-z0-9_-]{3,40}$"}
customerId: {type: string, description: 고객 식별자, pattern: "^[A-Za-z0-9_-]{3,40}$"}
content: {type: string, description: 검색어 또는 처리 내용, maxLength: 2000}
value: {type: string, description: 상태·유형·등급 또는 처리 값, maxLength: 100}
assigneeId: {type: string, description: 담당자 식별자, pattern: "^[A-Za-z0-9_-]{3,40}$"}
startDate: {type: string, description: 조회 시작일, pattern: "^\\d{4}-\\d{2}-\\d{2}$"}
endDate: {type: string, description: 조회 종료일 또는 처리 예정일, pattern: "^\\d{4}-\\d{2}-\\d{2}$"}
page: {type: integer, description: 페이지 번호, minimum: 0}
size: {type: integer, description: 페이지 크기, minimum: 1, maximum: 100}
additionalProperties: false
tags: [wcm, 고객채널, 처리, mock]
required_env_keys: []
owner_org: MCP_TOOL

View File

@@ -0,0 +1,30 @@
name: wcm_content_request_approval
display_name: 웹 콘텐츠 승인 요청
version: 1.0.0
category_key: wcm
description:
function: 웹 콘텐츠 승인 요청 기능을 수행합니다.
when_to_use: 고객채널 업무에서 웹 콘텐츠 승인 요청 기능이 필요할 때 사용합니다.
when_not_to_use: 필수 식별자와 변경 내용이 확인되지 않은 경우에는 사용하지 않습니다.
io_limits: 입력 범위에 대한 모의 처리 결과만 반환하며 외부 시스템을 직접 변경하지 않습니다.
display_description: 웹 콘텐츠 승인 요청 기능을 안전한 모의 데이터로 제공합니다.
example_queries: ["웹 콘텐츠 승인 요청 해줘", "웹 콘텐츠 승인 요청 결과를 알려줘", "웹 콘텐츠 승인 요청 기능을 실행해줘"]
read_only: false
destructive: false
idempotent: true
parameters_schema:
type: object
properties:
subjectId: {type: string, description: 업무 대상 식별자, pattern: "^[A-Za-z0-9_-]{3,40}$"}
customerId: {type: string, description: 고객 식별자, pattern: "^[A-Za-z0-9_-]{3,40}$"}
content: {type: string, description: 검색어 또는 처리 내용, maxLength: 2000}
value: {type: string, description: 상태·유형·등급 또는 처리 값, maxLength: 100}
assigneeId: {type: string, description: 담당자 식별자, pattern: "^[A-Za-z0-9_-]{3,40}$"}
startDate: {type: string, description: 조회 시작일, pattern: "^\\d{4}-\\d{2}-\\d{2}$"}
endDate: {type: string, description: 조회 종료일 또는 처리 예정일, pattern: "^\\d{4}-\\d{2}-\\d{2}$"}
page: {type: integer, description: 페이지 번호, minimum: 0}
size: {type: integer, description: 페이지 크기, minimum: 1, maximum: 100}
additionalProperties: false
tags: [wcm, 고객채널, 처리, mock]
required_env_keys: []
owner_org: MCP_TOOL

View File

@@ -0,0 +1,30 @@
name: wcm_content_restore_version
display_name: 웹 콘텐츠 이전 버전 복원
version: 1.0.0
category_key: wcm
description:
function: 웹 콘텐츠 이전 버전 복원 기능을 수행합니다.
when_to_use: 고객채널 업무에서 웹 콘텐츠 이전 버전 복원 기능이 필요할 때 사용합니다.
when_not_to_use: 필수 식별자와 변경 내용이 확인되지 않은 경우에는 사용하지 않습니다.
io_limits: 입력 범위에 대한 모의 처리 결과만 반환하며 외부 시스템을 직접 변경하지 않습니다.
display_description: 웹 콘텐츠 이전 버전 복원 기능을 안전한 모의 데이터로 제공합니다.
example_queries: ["웹 콘텐츠 이전 버전 복원 해줘", "웹 콘텐츠 이전 버전 복원 결과를 알려줘", "웹 콘텐츠 이전 버전 복원 기능을 실행해줘"]
read_only: false
destructive: false
idempotent: true
parameters_schema:
type: object
properties:
subjectId: {type: string, description: 업무 대상 식별자, pattern: "^[A-Za-z0-9_-]{3,40}$"}
customerId: {type: string, description: 고객 식별자, pattern: "^[A-Za-z0-9_-]{3,40}$"}
content: {type: string, description: 검색어 또는 처리 내용, maxLength: 2000}
value: {type: string, description: 상태·유형·등급 또는 처리 값, maxLength: 100}
assigneeId: {type: string, description: 담당자 식별자, pattern: "^[A-Za-z0-9_-]{3,40}$"}
startDate: {type: string, description: 조회 시작일, pattern: "^\\d{4}-\\d{2}-\\d{2}$"}
endDate: {type: string, description: 조회 종료일 또는 처리 예정일, pattern: "^\\d{4}-\\d{2}-\\d{2}$"}
page: {type: integer, description: 페이지 번호, minimum: 0}
size: {type: integer, description: 페이지 크기, minimum: 1, maximum: 100}
additionalProperties: false
tags: [wcm, 고객채널, 처리, mock]
required_env_keys: []
owner_org: MCP_TOOL

View File

@@ -0,0 +1,30 @@
name: wcm_content_review_approval
display_name: 웹 콘텐츠 승인·반려
version: 1.0.0
category_key: wcm
description:
function: 웹 콘텐츠 승인·반려 기능을 수행합니다.
when_to_use: 고객채널 업무에서 웹 콘텐츠 승인·반려 기능이 필요할 때 사용합니다.
when_not_to_use: 필수 식별자와 변경 내용이 확인되지 않은 경우에는 사용하지 않습니다.
io_limits: 입력 범위에 대한 모의 처리 결과만 반환하며 외부 시스템을 직접 변경하지 않습니다.
display_description: 웹 콘텐츠 승인·반려 기능을 안전한 모의 데이터로 제공합니다.
example_queries: ["웹 콘텐츠 승인·반려 해줘", "웹 콘텐츠 승인·반려 결과를 알려줘", "웹 콘텐츠 승인·반려 기능을 실행해줘"]
read_only: false
destructive: false
idempotent: true
parameters_schema:
type: object
properties:
subjectId: {type: string, description: 업무 대상 식별자, pattern: "^[A-Za-z0-9_-]{3,40}$"}
customerId: {type: string, description: 고객 식별자, pattern: "^[A-Za-z0-9_-]{3,40}$"}
content: {type: string, description: 검색어 또는 처리 내용, maxLength: 2000}
value: {type: string, description: 상태·유형·등급 또는 처리 값, maxLength: 100}
assigneeId: {type: string, description: 담당자 식별자, pattern: "^[A-Za-z0-9_-]{3,40}$"}
startDate: {type: string, description: 조회 시작일, pattern: "^\\d{4}-\\d{2}-\\d{2}$"}
endDate: {type: string, description: 조회 종료일 또는 처리 예정일, pattern: "^\\d{4}-\\d{2}-\\d{2}$"}
page: {type: integer, description: 페이지 번호, minimum: 0}
size: {type: integer, description: 페이지 크기, minimum: 1, maximum: 100}
additionalProperties: false
tags: [wcm, 고객채널, 처리, mock]
required_env_keys: []
owner_org: MCP_TOOL

View File

@@ -0,0 +1,30 @@
name: wcm_content_schedule_publish
display_name: 웹 콘텐츠 예약 게시
version: 1.0.0
category_key: wcm
description:
function: 웹 콘텐츠 예약 게시 기능을 수행합니다.
when_to_use: 고객채널 업무에서 웹 콘텐츠 예약 게시 기능이 필요할 때 사용합니다.
when_not_to_use: 필수 식별자와 변경 내용이 확인되지 않은 경우에는 사용하지 않습니다.
io_limits: 입력 범위에 대한 모의 처리 결과만 반환하며 외부 시스템을 직접 변경하지 않습니다.
display_description: 웹 콘텐츠 예약 게시 기능을 안전한 모의 데이터로 제공합니다.
example_queries: ["웹 콘텐츠 예약 게시 해줘", "웹 콘텐츠 예약 게시 결과를 알려줘", "웹 콘텐츠 예약 게시 기능을 실행해줘"]
read_only: false
destructive: false
idempotent: true
parameters_schema:
type: object
properties:
subjectId: {type: string, description: 업무 대상 식별자, pattern: "^[A-Za-z0-9_-]{3,40}$"}
customerId: {type: string, description: 고객 식별자, pattern: "^[A-Za-z0-9_-]{3,40}$"}
content: {type: string, description: 검색어 또는 처리 내용, maxLength: 2000}
value: {type: string, description: 상태·유형·등급 또는 처리 값, maxLength: 100}
assigneeId: {type: string, description: 담당자 식별자, pattern: "^[A-Za-z0-9_-]{3,40}$"}
startDate: {type: string, description: 조회 시작일, pattern: "^\\d{4}-\\d{2}-\\d{2}$"}
endDate: {type: string, description: 조회 종료일 또는 처리 예정일, pattern: "^\\d{4}-\\d{2}-\\d{2}$"}
page: {type: integer, description: 페이지 번호, minimum: 0}
size: {type: integer, description: 페이지 크기, minimum: 1, maximum: 100}
additionalProperties: false
tags: [wcm, 고객채널, 처리, mock]
required_env_keys: []
owner_org: MCP_TOOL

View File

@@ -0,0 +1,30 @@
name: wcm_content_unpublish
display_name: 웹 콘텐츠 게시 중지
version: 1.0.0
category_key: wcm
description:
function: 웹 콘텐츠 게시 중지 기능을 수행합니다.
when_to_use: 고객채널 업무에서 웹 콘텐츠 게시 중지 기능이 필요할 때 사용합니다.
when_not_to_use: 필수 식별자와 변경 내용이 확인되지 않은 경우에는 사용하지 않습니다.
io_limits: 입력 범위에 대한 모의 처리 결과만 반환하며 외부 시스템을 직접 변경하지 않습니다.
display_description: 웹 콘텐츠 게시 중지 기능을 안전한 모의 데이터로 제공합니다.
example_queries: ["웹 콘텐츠 게시 중지 해줘", "웹 콘텐츠 게시 중지 결과를 알려줘", "웹 콘텐츠 게시 중지 기능을 실행해줘"]
read_only: false
destructive: false
idempotent: true
parameters_schema:
type: object
properties:
subjectId: {type: string, description: 업무 대상 식별자, pattern: "^[A-Za-z0-9_-]{3,40}$"}
customerId: {type: string, description: 고객 식별자, pattern: "^[A-Za-z0-9_-]{3,40}$"}
content: {type: string, description: 검색어 또는 처리 내용, maxLength: 2000}
value: {type: string, description: 상태·유형·등급 또는 처리 값, maxLength: 100}
assigneeId: {type: string, description: 담당자 식별자, pattern: "^[A-Za-z0-9_-]{3,40}$"}
startDate: {type: string, description: 조회 시작일, pattern: "^\\d{4}-\\d{2}-\\d{2}$"}
endDate: {type: string, description: 조회 종료일 또는 처리 예정일, pattern: "^\\d{4}-\\d{2}-\\d{2}$"}
page: {type: integer, description: 페이지 번호, minimum: 0}
size: {type: integer, description: 페이지 크기, minimum: 1, maximum: 100}
additionalProperties: false
tags: [wcm, 고객채널, 처리, mock]
required_env_keys: []
owner_org: MCP_TOOL

View File

@@ -0,0 +1,30 @@
name: wcm_content_update
display_name: 웹 콘텐츠 수정
version: 1.0.0
category_key: wcm
description:
function: 웹 콘텐츠 수정 기능을 수행합니다.
when_to_use: 고객채널 업무에서 웹 콘텐츠 수정 기능이 필요할 때 사용합니다.
when_not_to_use: 필수 식별자와 변경 내용이 확인되지 않은 경우에는 사용하지 않습니다.
io_limits: 입력 범위에 대한 모의 처리 결과만 반환하며 외부 시스템을 직접 변경하지 않습니다.
display_description: 웹 콘텐츠 수정 기능을 안전한 모의 데이터로 제공합니다.
example_queries: ["웹 콘텐츠 수정 해줘", "웹 콘텐츠 수정 결과를 알려줘", "웹 콘텐츠 수정 기능을 실행해줘"]
read_only: false
destructive: false
idempotent: true
parameters_schema:
type: object
properties:
subjectId: {type: string, description: 업무 대상 식별자, pattern: "^[A-Za-z0-9_-]{3,40}$"}
customerId: {type: string, description: 고객 식별자, pattern: "^[A-Za-z0-9_-]{3,40}$"}
content: {type: string, description: 검색어 또는 처리 내용, maxLength: 2000}
value: {type: string, description: 상태·유형·등급 또는 처리 값, maxLength: 100}
assigneeId: {type: string, description: 담당자 식별자, pattern: "^[A-Za-z0-9_-]{3,40}$"}
startDate: {type: string, description: 조회 시작일, pattern: "^\\d{4}-\\d{2}-\\d{2}$"}
endDate: {type: string, description: 조회 종료일 또는 처리 예정일, pattern: "^\\d{4}-\\d{2}-\\d{2}$"}
page: {type: integer, description: 페이지 번호, minimum: 0}
size: {type: integer, description: 페이지 크기, minimum: 1, maximum: 100}
additionalProperties: false
tags: [wcm, 고객채널, 처리, mock]
required_env_keys: []
owner_org: MCP_TOOL

View File

@@ -0,0 +1,30 @@
name: wcm_content_version_history
display_name: 웹 콘텐츠 버전 이력 조회
version: 1.0.0
category_key: wcm
description:
function: 웹 콘텐츠 버전 이력 조회 기능을 수행합니다.
when_to_use: 고객채널 업무에서 웹 콘텐츠 버전 이력 조회 기능이 필요할 때 사용합니다.
when_not_to_use: 정보 변경이나 승인 처리가 필요한 경우에는 사용하지 않습니다.
io_limits: 입력 범위에 대한 모의 조회 결과만 반환하며 외부 시스템을 직접 변경하지 않습니다.
display_description: 웹 콘텐츠 버전 이력 조회 기능을 안전한 모의 데이터로 제공합니다.
example_queries: ["웹 콘텐츠 버전 이력 조회 해줘", "웹 콘텐츠 버전 이력 조회 결과를 알려줘", "웹 콘텐츠 버전 이력 조회 기능을 실행해줘"]
read_only: true
destructive: false
idempotent: true
parameters_schema:
type: object
properties:
subjectId: {type: string, description: 업무 대상 식별자, pattern: "^[A-Za-z0-9_-]{3,40}$"}
customerId: {type: string, description: 고객 식별자, pattern: "^[A-Za-z0-9_-]{3,40}$"}
content: {type: string, description: 검색어 또는 처리 내용, maxLength: 2000}
value: {type: string, description: 상태·유형·등급 또는 처리 값, maxLength: 100}
assigneeId: {type: string, description: 담당자 식별자, pattern: "^[A-Za-z0-9_-]{3,40}$"}
startDate: {type: string, description: 조회 시작일, pattern: "^\\d{4}-\\d{2}-\\d{2}$"}
endDate: {type: string, description: 조회 종료일 또는 처리 예정일, pattern: "^\\d{4}-\\d{2}-\\d{2}$"}
page: {type: integer, description: 페이지 번호, minimum: 0}
size: {type: integer, description: 페이지 크기, minimum: 1, maximum: 100}
additionalProperties: false
tags: [wcm, 고객채널, 조회, mock]
required_env_keys: []
owner_org: MCP_TOOL

View File

@@ -0,0 +1,30 @@
name: wcm_metadata_detail
display_name: 콘텐츠 메타데이터 조회
version: 1.0.0
category_key: wcm
description:
function: 콘텐츠 메타데이터 조회 기능을 수행합니다.
when_to_use: 고객채널 업무에서 콘텐츠 메타데이터 조회 기능이 필요할 때 사용합니다.
when_not_to_use: 정보 변경이나 승인 처리가 필요한 경우에는 사용하지 않습니다.
io_limits: 입력 범위에 대한 모의 조회 결과만 반환하며 외부 시스템을 직접 변경하지 않습니다.
display_description: 콘텐츠 메타데이터 조회 기능을 안전한 모의 데이터로 제공합니다.
example_queries: ["콘텐츠 메타데이터 조회 해줘", "콘텐츠 메타데이터 조회 결과를 알려줘", "콘텐츠 메타데이터 조회 기능을 실행해줘"]
read_only: true
destructive: false
idempotent: true
parameters_schema:
type: object
properties:
subjectId: {type: string, description: 업무 대상 식별자, pattern: "^[A-Za-z0-9_-]{3,40}$"}
customerId: {type: string, description: 고객 식별자, pattern: "^[A-Za-z0-9_-]{3,40}$"}
content: {type: string, description: 검색어 또는 처리 내용, maxLength: 2000}
value: {type: string, description: 상태·유형·등급 또는 처리 값, maxLength: 100}
assigneeId: {type: string, description: 담당자 식별자, pattern: "^[A-Za-z0-9_-]{3,40}$"}
startDate: {type: string, description: 조회 시작일, pattern: "^\\d{4}-\\d{2}-\\d{2}$"}
endDate: {type: string, description: 조회 종료일 또는 처리 예정일, pattern: "^\\d{4}-\\d{2}-\\d{2}$"}
page: {type: integer, description: 페이지 번호, minimum: 0}
size: {type: integer, description: 페이지 크기, minimum: 1, maximum: 100}
additionalProperties: false
tags: [wcm, 고객채널, 조회, mock]
required_env_keys: []
owner_org: MCP_TOOL

View File

@@ -0,0 +1,30 @@
name: wcm_metadata_upsert
display_name: 콘텐츠 메타데이터 등록·수정
version: 1.0.0
category_key: wcm
description:
function: 콘텐츠 메타데이터 등록·수정 기능을 수행합니다.
when_to_use: 고객채널 업무에서 콘텐츠 메타데이터 등록·수정 기능이 필요할 때 사용합니다.
when_not_to_use: 필수 식별자와 변경 내용이 확인되지 않은 경우에는 사용하지 않습니다.
io_limits: 입력 범위에 대한 모의 처리 결과만 반환하며 외부 시스템을 직접 변경하지 않습니다.
display_description: 콘텐츠 메타데이터 등록·수정 기능을 안전한 모의 데이터로 제공합니다.
example_queries: ["콘텐츠 메타데이터 등록·수정 해줘", "콘텐츠 메타데이터 등록·수정 결과를 알려줘", "콘텐츠 메타데이터 등록·수정 기능을 실행해줘"]
read_only: false
destructive: false
idempotent: true
parameters_schema:
type: object
properties:
subjectId: {type: string, description: 업무 대상 식별자, pattern: "^[A-Za-z0-9_-]{3,40}$"}
customerId: {type: string, description: 고객 식별자, pattern: "^[A-Za-z0-9_-]{3,40}$"}
content: {type: string, description: 검색어 또는 처리 내용, maxLength: 2000}
value: {type: string, description: 상태·유형·등급 또는 처리 값, maxLength: 100}
assigneeId: {type: string, description: 담당자 식별자, pattern: "^[A-Za-z0-9_-]{3,40}$"}
startDate: {type: string, description: 조회 시작일, pattern: "^\\d{4}-\\d{2}-\\d{2}$"}
endDate: {type: string, description: 조회 종료일 또는 처리 예정일, pattern: "^\\d{4}-\\d{2}-\\d{2}$"}
page: {type: integer, description: 페이지 번호, minimum: 0}
size: {type: integer, description: 페이지 크기, minimum: 1, maximum: 100}
additionalProperties: false
tags: [wcm, 고객채널, 처리, mock]
required_env_keys: []
owner_org: MCP_TOOL

View File

@@ -0,0 +1,30 @@
name: wcm_taxonomy_manage
display_name: 콘텐츠 카테고리·태그 관리
version: 1.0.0
category_key: wcm
description:
function: 콘텐츠 카테고리·태그 관리 기능을 수행합니다.
when_to_use: 고객채널 업무에서 콘텐츠 카테고리·태그 관리 기능이 필요할 때 사용합니다.
when_not_to_use: 필수 식별자와 변경 내용이 확인되지 않은 경우에는 사용하지 않습니다.
io_limits: 입력 범위에 대한 모의 처리 결과만 반환하며 외부 시스템을 직접 변경하지 않습니다.
display_description: 콘텐츠 카테고리·태그 관리 기능을 안전한 모의 데이터로 제공합니다.
example_queries: ["콘텐츠 카테고리·태그 관리 해줘", "콘텐츠 카테고리·태그 관리 결과를 알려줘", "콘텐츠 카테고리·태그 관리 기능을 실행해줘"]
read_only: false
destructive: false
idempotent: true
parameters_schema:
type: object
properties:
subjectId: {type: string, description: 업무 대상 식별자, pattern: "^[A-Za-z0-9_-]{3,40}$"}
customerId: {type: string, description: 고객 식별자, pattern: "^[A-Za-z0-9_-]{3,40}$"}
content: {type: string, description: 검색어 또는 처리 내용, maxLength: 2000}
value: {type: string, description: 상태·유형·등급 또는 처리 값, maxLength: 100}
assigneeId: {type: string, description: 담당자 식별자, pattern: "^[A-Za-z0-9_-]{3,40}$"}
startDate: {type: string, description: 조회 시작일, pattern: "^\\d{4}-\\d{2}-\\d{2}$"}
endDate: {type: string, description: 조회 종료일 또는 처리 예정일, pattern: "^\\d{4}-\\d{2}-\\d{2}$"}
page: {type: integer, description: 페이지 번호, minimum: 0}
size: {type: integer, description: 페이지 크기, minimum: 1, maximum: 100}
additionalProperties: false
tags: [wcm, 고객채널, 처리, mock]
required_env_keys: []
owner_org: MCP_TOOL

View File

@@ -0,0 +1,32 @@
package io.shinhanlife.dap.mcc.presentation;
import static org.assertj.core.api.Assertions.assertThat;
import java.io.ByteArrayInputStream;
import org.apache.poi.xssf.usermodel.XSSFWorkbook;
import org.junit.jupiter.api.Test;
import org.springframework.http.ResponseEntity;
class DtoExcelDownloadControllerTest {
private final DtoExcelDownloadController controller = new DtoExcelDownloadController();
@Test
void downloadsBothOnild0320Variants() throws Exception {
assertWorkbook("ONILD0320_I", "csNo");
assertWorkbook("ONILD0320_O", "notiDt");
}
private void assertWorkbook(String dtoName, String expectedField) throws Exception {
ResponseEntity<byte[]> response = controller.download(dtoName);
assertThat(response.getStatusCode().is2xxSuccessful()).isTrue();
assertThat(response.getBody()).isNotNull();
try (XSSFWorkbook workbook = new XSSFWorkbook(new ByteArrayInputStream(response.getBody()))) {
assertThat(workbook.getSheetAt(0))
.anySatisfy(row -> assertThat(row)
.anySatisfy(cell -> assertThat(cell.toString()).isEqualTo(expectedField)));
}
}
}