diff --git a/McpBridge.java b/McpBridge.java index a4492d4..debdc5a 100644 --- a/McpBridge.java +++ b/McpBridge.java @@ -33,7 +33,7 @@ public class McpBridge { try { HttpRequest req = HttpRequest.newBuilder() .uri(URI.create("http://localhost:8081/mcp/api/v1/tools/list")) - .header("X-API-KEY", "SHINHAN_MCP_TEST_KEY_9999") + .GET() .build(); HttpResponse response = client.send(req, HttpResponse.BodyHandlers.ofString()); @@ -44,7 +44,7 @@ public class McpBridge { String rawJson = response.body(); // For simplicity, we can just proxy the response if it matches closely, but it doesn't. // Let's just do a naive conversion by replacing "subToolName" with "name" and "parametersSchema" with "inputSchema" - String transformed = rawJson.replace("\"name\"", "\"displayName\"").replace("\"subToolName\"", "\"name\"").replace("\"parametersSchema\"", "\"inputSchema\""); + String transformed = rawJson; // Add type: "object" to inputSchema if missing - too complex with string replace, let's hope axhub-gateway already provides correct schema // The result format expects: {"tools": [ ... ]} @@ -68,7 +68,7 @@ public class McpBridge { .uri(URI.create("http://localhost:8081/mcp/api/v1/tools/call")) .header("Content-Type", "application/json") .header("X-Agent-Id", "Antigravity") - .header("X-API-KEY", "SHINHAN_MCP_TEST_KEY_9999") + .POST(HttpRequest.BodyPublishers.ofString(line)) .build(); HttpResponse response = client.send(req, HttpResponse.BodyHandlers.ofString()); diff --git a/axhub-common/src/main/java/io/shinhanlife/axhub/common/util/ToolScaffolder.java b/axhub-common/src/main/java/io/shinhanlife/axhub/common/util/ToolScaffolder.java index 273b3b6..8589156 100644 --- a/axhub-common/src/main/java/io/shinhanlife/axhub/common/util/ToolScaffolder.java +++ b/axhub-common/src/main/java/io/shinhanlife/axhub/common/util/ToolScaffolder.java @@ -186,8 +186,8 @@ public class ToolScaffolder { public class %sService extends AbstractMcpToolService { @McpFunction( - name = "%s 툴", - subToolName = "%s", + displayName = "%s 툴", + name = "%s", description = "%s", prompt = "%s", mappingId = "%s", diff --git a/axhub-gateway/src/main/java/io/shinhanlife/axhub/biz/mcp/gateway/service/ExecuteService.java b/axhub-gateway/src/main/java/io/shinhanlife/axhub/biz/mcp/gateway/service/ExecuteService.java index cacf21a..d4f0886 100644 --- a/axhub-gateway/src/main/java/io/shinhanlife/axhub/biz/mcp/gateway/service/ExecuteService.java +++ b/axhub-gateway/src/main/java/io/shinhanlife/axhub/biz/mcp/gateway/service/ExecuteService.java @@ -82,7 +82,7 @@ public class ExecuteService { return restClient.post() .uri(url) .contentType(MediaType.APPLICATION_JSON) - .header("X-API-KEY", "SHINHAN_MCP_TEST_KEY_9999") // TODO: Use actual tenant's key + // TODO: Use actual tenant's key .header("X-Trace-Id", java.util.UUID.randomUUID().toString()) .body(payload) .retrieve() diff --git a/axhub-gateway/src/main/resources/application-local.properties b/axhub-gateway/src/main/resources/application-local.properties index 645358a..25203a6 100644 --- a/axhub-gateway/src/main/resources/application-local.properties +++ b/axhub-gateway/src/main/resources/application-local.properties @@ -17,7 +17,6 @@ eims.mcistring.url=http://localhost:${server.port}/api/mock/esb/string # API 보안 키 설정 mcp.security.api-keys.SHINHAN_MCP_SECRET_KEY_2026=mcp-client-1 -mcp.security.api-keys.SHINHAN_MCP_TEST_KEY_9999=mcp-client-2 mcp.security.tenant-domains.mcp-client-1=CUSTOMER,COMMON mcp.security.tenant-domains.mcp-client-2=ALL diff --git a/axhub-gateway/src/main/resources/static/catalog.html b/axhub-gateway/src/main/resources/static/catalog.html index e66c23b..a99b6e4 100644 --- a/axhub-gateway/src/main/resources/static/catalog.html +++ b/axhub-gateway/src/main/resources/static/catalog.html @@ -190,7 +190,7 @@ async function fetchTools() { try { const response = await fetch('/mcp/api/v1/tools/list', { - headers: { 'X-API-KEY': 'SHINHAN_MCP_TEST_KEY_9999' } + }); const data = await response.json(); const tools = data.result?.tools || []; diff --git a/axhub-gateway/src/main/resources/static/index.html b/axhub-gateway/src/main/resources/static/index.html index 84680db..75d5dbd 100644 --- a/axhub-gateway/src/main/resources/static/index.html +++ b/axhub-gateway/src/main/resources/static/index.html @@ -294,7 +294,7 @@ async function fetchTools() { try { const response = await fetch('/mcp/api/v1/tools/list', { - headers: { 'X-API-KEY': 'SHINHAN_MCP_TEST_KEY_9999' } + }); const data = await response.json(); @@ -426,7 +426,7 @@ method: 'POST', headers: { 'Content-Type': 'application/json', - 'X-API-KEY': 'SHINHAN_MCP_TEST_KEY_9999', + 'X-Trace-Id': "MCP-REQ-" + Math.floor(Math.random() * 90000 + 10000), 'X-Agent-Id': document.getElementById('agentId').value, 'X-User-Prompt': encodeURIComponent(document.getElementById('userPrompt').value || document.getElementById('userPrompt').placeholder) diff --git a/axhub-gateway/src/main/resources/static/playground.html b/axhub-gateway/src/main/resources/static/playground.html index fcfeb8b..84ee405 100644 --- a/axhub-gateway/src/main/resources/static/playground.html +++ b/axhub-gateway/src/main/resources/static/playground.html @@ -303,7 +303,7 @@ async function fetchTools() { try { const response = await fetch('/mcp/api/v1/tools/list', { - headers: { 'X-API-KEY': 'SHINHAN_MCP_TEST_KEY_9999' } + }); const data = await response.json(); @@ -503,7 +503,7 @@ method: 'POST', headers: { 'Content-Type': 'application/json', - 'X-API-KEY': 'SHINHAN_MCP_TEST_KEY_9999', + 'X-Trace-Id': "MCP-REQ-" + Math.floor(Math.random() * 90000 + 10000), 'X-Agent-Id': document.getElementById('agentId').value, 'X-User-Prompt': encodeURIComponent(document.getElementById('userPrompt').value || '테스트') diff --git a/axhub-gateway/src/main/resources/static/static/index.html b/axhub-gateway/src/main/resources/static/static/index.html index e10ee7c..d76cf5c 100644 --- a/axhub-gateway/src/main/resources/static/static/index.html +++ b/axhub-gateway/src/main/resources/static/static/index.html @@ -313,7 +313,7 @@ async function fetchTools() { try { const response = await fetch('/mcp/api/v1/tools/list', { - headers: { 'X-API-KEY': 'SHINHAN_MCP_TEST_KEY_9999' } + }); const data = await response.json(); @@ -454,7 +454,7 @@ const startTime = Date.now(); const response = await fetch('/mcp/api/v1/tools/call', { method: 'POST', - headers: { 'Content-Type': 'application/json', 'X-API-KEY': 'SHINHAN_MCP_TEST_KEY_9999' }, + headers: { 'Content-Type': 'application/json', }, body: JSON.stringify(payload) }); diff --git a/axhub-tool-core/src/main/java/io/shinhanlife/axhub/biz/mcp/tool/annotation/McpFunction.java b/axhub-tool-core/src/main/java/io/shinhanlife/axhub/biz/mcp/tool/annotation/McpFunction.java index 8297b7f..4ecc01a 100644 --- a/axhub-tool-core/src/main/java/io/shinhanlife/axhub/biz/mcp/tool/annotation/McpFunction.java +++ b/axhub-tool-core/src/main/java/io/shinhanlife/axhub/biz/mcp/tool/annotation/McpFunction.java @@ -6,14 +6,14 @@ import java.lang.annotation.*; @Retention(RetentionPolicy.RUNTIME) @Documented public @interface McpFunction { - String name(); // 사람이 읽는 라벨 (예: "고객 조회 툴") - String subToolName(); // MCP 서브툴 명칭 (예: "customer_search") + String displayName(); // 사람이 읽는 라벨 (예: "고객 조회 툴") + String name(); // MCP 서브툴 명칭 (예: "customer_search") String description(); String prompt() default ""; String mappingId() default ""; // 추가: 해당 함수가 요구하는 비즈니스 파라미터(JSON 형태의 properties)를 정의 - String parameterSchema() default "{}"; + String inputSchema() default "{}"; // 추가: Redis 자동 등록 및 Heartbeat 대상 여부 제어 boolean register() default true; diff --git a/axhub-tool-core/src/main/java/io/shinhanlife/axhub/biz/mcp/tool/service/ToolRegistryHeartbeatSender.java b/axhub-tool-core/src/main/java/io/shinhanlife/axhub/biz/mcp/tool/service/ToolRegistryHeartbeatSender.java index 9fe0806..a1809e1 100644 --- a/axhub-tool-core/src/main/java/io/shinhanlife/axhub/biz/mcp/tool/service/ToolRegistryHeartbeatSender.java +++ b/axhub-tool-core/src/main/java/io/shinhanlife/axhub/biz/mcp/tool/service/ToolRegistryHeartbeatSender.java @@ -80,8 +80,8 @@ public class ToolRegistryHeartbeatSender { for (Method method : targetClass.getDeclaredMethods()) { McpFunction functionAnnotation = AnnotationUtils.findAnnotation(method, McpFunction.class); if (functionAnnotation != null) { - String baseName = functionAnnotation.name(); - String rawSubToolName = functionAnnotation.subToolName(); + String baseName = functionAnnotation.displayName(); + String rawSubToolName = functionAnnotation.name(); String subToolName = mcpProperties.getNamespace() != null && !mcpProperties.getNamespace().isEmpty() ? mcpProperties.getNamespace() + "_" + rawSubToolName : rawSubToolName; @@ -144,7 +144,7 @@ public class ToolRegistryHeartbeatSender { org.springframework.http.ResponseEntity response = restClient.post() .uri(gatewayUrl + "/mcp/api/v1/registry/heartbeat") .header("Content-Type", "application/json") - .header("X-API-KEY", "SHINHAN_MCP_TEST_KEY_9999") + .body(tool.getUid()) .retrieve() .toEntity(String.class); @@ -164,7 +164,7 @@ public class ToolRegistryHeartbeatSender { restClient.post() .uri(gatewayUrl + "/mcp/api/v1/registry/register") .header("Content-Type", "application/json") - .header("X-API-KEY", "SHINHAN_MCP_TEST_KEY_9999") + .body(tool) .retrieve() .toBodilessEntity(); diff --git a/axhub-tool-email/src/main/java/io/shinhanlife/axhub/biz/mcp/tool/email/EmailToolService.java b/axhub-tool-email/src/main/java/io/shinhanlife/axhub/biz/mcp/tool/email/EmailToolService.java index 3c92e9c..8c6cc95 100644 --- a/axhub-tool-email/src/main/java/io/shinhanlife/axhub/biz/mcp/tool/email/EmailToolService.java +++ b/axhub-tool-email/src/main/java/io/shinhanlife/axhub/biz/mcp/tool/email/EmailToolService.java @@ -27,7 +27,7 @@ import java.util.Map; @McpTool(routingType = "EAI", categoryKey = "notification") public class EmailToolService extends AbstractMcpToolService { - @McpFunction(name = "send_email 툴", subToolName = "send_email", description = "이메일 발송", prompt = "고객에게 이메일을 발송해줘.", mappingId = "EMAIL_SEND_001") + @McpFunction(displayName = "send_email 툴", name = "send_email", description = "이메일 발송", prompt = "고객에게 이메일을 발송해줘.", mappingId = "EMAIL_SEND_001") public Object sendEmail(EmailSendReq req) { log.info("[Email] 이메일 발송 요청 수신. 수신자: {}", req.getEmailAddress()); diff --git a/axhub-tool-email/src/main/resources/application-local.properties b/axhub-tool-email/src/main/resources/application-local.properties index 54d056d..bb16d2c 100644 --- a/axhub-tool-email/src/main/resources/application-local.properties +++ b/axhub-tool-email/src/main/resources/application-local.properties @@ -17,7 +17,6 @@ eims.mcistring.url=http://localhost:${server.port}/api/mock/esb/string # API 보안 키 설정 mcp.security.api-keys.SHINHAN_MCP_SECRET_KEY_2026=mcp-client-1 -mcp.security.api-keys.SHINHAN_MCP_TEST_KEY_9999=mcp-client-2 mcp.security.tenant-domains.mcp-client-1=CUSTOMER,COMMON mcp.security.tenant-domains.mcp-client-2=ALL diff --git a/axhub-tool-other/src/main/java/io/shinhanlife/axhub/biz/mcp/tool/service/BalanceService.java b/axhub-tool-other/src/main/java/io/shinhanlife/axhub/biz/mcp/tool/service/BalanceService.java index 5d525be..95dd1c9 100644 --- a/axhub-tool-other/src/main/java/io/shinhanlife/axhub/biz/mcp/tool/service/BalanceService.java +++ b/axhub-tool-other/src/main/java/io/shinhanlife/axhub/biz/mcp/tool/service/BalanceService.java @@ -14,7 +14,7 @@ import java.util.Map; @McpTool(routingType = "MCI", categoryKey = "common") public class BalanceService extends AbstractMcpToolService { - @McpFunction(name = "balance 툴", subToolName = "balance", + @McpFunction(displayName = "balance 툴", name = "balance", description = "고객의 계좌 잔액을 조회합니다.", prompt = "고객 계좌 잔액을 조회해줘.", mappingId = "ACC_001" diff --git a/axhub-tool-other/src/main/java/io/shinhanlife/axhub/biz/mcp/tool/service/BillingProcessService.java b/axhub-tool-other/src/main/java/io/shinhanlife/axhub/biz/mcp/tool/service/BillingProcessService.java index a4fdca4..1a0c224 100644 --- a/axhub-tool-other/src/main/java/io/shinhanlife/axhub/biz/mcp/tool/service/BillingProcessService.java +++ b/axhub-tool-other/src/main/java/io/shinhanlife/axhub/biz/mcp/tool/service/BillingProcessService.java @@ -30,12 +30,12 @@ import io.shinhanlife.axhub.biz.mcp.tool.dto.BillingProcessReq; @lombok.extern.slf4j.Slf4j public class BillingProcessService extends AbstractMcpToolService { - @McpFunction(name = "status 툴", subToolName = "status", description = "청구심사 상태 조회", prompt = "현재 접수된 청구건 상태를 알려줘.", mappingId = "BILL_001") + @McpFunction(displayName = "status 툴", name = "status", description = "청구심사 상태 조회", prompt = "현재 접수된 청구건 상태를 알려줘.", mappingId = "BILL_001") public Object getStatus(BillingStatusReq data) { return executeBillingLogic("BILL_001", data); } - @McpFunction(name = "process 툴", subToolName = "process", description = "청구 처리", prompt = "현재 접수된 청구건에 대한 심사 처리를 진행해.", mappingId = "BILL_002") + @McpFunction(displayName = "process 툴", name = "process", description = "청구 처리", prompt = "현재 접수된 청구건에 대한 심사 처리를 진행해.", mappingId = "BILL_002") public Object processBilling(BillingProcessReq data) { return executeBillingLogic("BILL_002", data); } diff --git a/axhub-tool-other/src/main/java/io/shinhanlife/axhub/biz/mcp/tool/service/BondIssueService.java b/axhub-tool-other/src/main/java/io/shinhanlife/axhub/biz/mcp/tool/service/BondIssueService.java index b5c2994..eb5251f 100644 --- a/axhub-tool-other/src/main/java/io/shinhanlife/axhub/biz/mcp/tool/service/BondIssueService.java +++ b/axhub-tool-other/src/main/java/io/shinhanlife/axhub/biz/mcp/tool/service/BondIssueService.java @@ -25,12 +25,12 @@ import io.shinhanlife.axhub.biz.mcp.tool.dto.BondIssueReq; */ public class BondIssueService extends AbstractMcpToolService { - @McpFunction(name = "check 툴", subToolName = "check", register = true, description = "발행 가능 여부 조회 테스트", prompt = "디지털 증권 발행 한도가 충분한지 확인해줘.", mappingId = "BOND_001") + @McpFunction(displayName = "check 툴", name = "check", register = true, description = "발행 가능 여부 조회 테스트", prompt = "디지털 증권 발행 한도가 충분한지 확인해줘.", mappingId = "BOND_001") public Object check(BondCheckReq data) { return executeLegacy("EAI", "BOND_001", data); } - @McpFunction(name = "issue 툴", subToolName = "issue", register = true, description = "증권 발행 테스트1", prompt = "디지털 증권 발행 프로세스를 실행해.", mappingId = "BOND_002") + @McpFunction(displayName = "issue 툴", name = "issue", register = true, description = "증권 발행 테스트1", prompt = "디지털 증권 발행 프로세스를 실행해.", mappingId = "BOND_002") public Object issue(BondIssueReq data) { return executeLegacy("EAI", "BOND_002", data); } diff --git a/axhub-tool-other/src/main/java/io/shinhanlife/axhub/biz/mcp/tool/service/CommonUtilityService.java b/axhub-tool-other/src/main/java/io/shinhanlife/axhub/biz/mcp/tool/service/CommonUtilityService.java index 951c177..15a3ce6 100644 --- a/axhub-tool-other/src/main/java/io/shinhanlife/axhub/biz/mcp/tool/service/CommonUtilityService.java +++ b/axhub-tool-other/src/main/java/io/shinhanlife/axhub/biz/mcp/tool/service/CommonUtilityService.java @@ -26,17 +26,17 @@ import io.shinhanlife.axhub.biz.mcp.tool.dto.LeaveCountReq; */ public class CommonUtilityService extends AbstractMcpToolService { - @McpFunction(name = "register_vacation 툴", subToolName = "register_vacation", description = "휴가 등록", prompt = "내일 하루 연차 휴가를 등록해줘.", mappingId = "HR_VAC_01") + @McpFunction(displayName = "register_vacation 툴", name = "register_vacation", description = "휴가 등록", prompt = "내일 하루 연차 휴가를 등록해줘.", mappingId = "HR_VAC_01") public Object registerVacation(VacationRegisterReq data) { return executeLegacy("HTTP", "HR_VAC_01", data); } - @McpFunction(name = "get_leave_count 툴", subToolName = "get_leave_count", description = "연차 갯수 조회", prompt = "현재 사용 가능한 남은 연차 일수를 알려줘.", mappingId = "HR_VAC_02") + @McpFunction(displayName = "get_leave_count 툴", name = "get_leave_count", description = "연차 갯수 조회", prompt = "현재 사용 가능한 남은 연차 일수를 알려줘.", mappingId = "HR_VAC_02") public Object getLeaveCount(LeaveCountReq data) { return executeLegacy("HTTP", "HR_VAC_02", data); } - @McpFunction(name = "secret_tool 툴", subToolName = "secret_tool", description = "비공개 툴 테스트", prompt = "숨겨진 툴 강제 호출", mappingId = "SECRET_001", visible = false) + @McpFunction(displayName = "secret_tool 툴", name = "secret_tool", description = "비공개 툴 테스트", prompt = "숨겨진 툴 강제 호출", mappingId = "SECRET_001", visible = false) public Object secretTool(LeaveCountReq data) { return executeLegacy("HTTP", "SECRET_001", data); } diff --git a/axhub-tool-other/src/main/java/io/shinhanlife/axhub/biz/mcp/tool/service/ContractInquiryService.java b/axhub-tool-other/src/main/java/io/shinhanlife/axhub/biz/mcp/tool/service/ContractInquiryService.java index 8f42493..2500237 100644 --- a/axhub-tool-other/src/main/java/io/shinhanlife/axhub/biz/mcp/tool/service/ContractInquiryService.java +++ b/axhub-tool-other/src/main/java/io/shinhanlife/axhub/biz/mcp/tool/service/ContractInquiryService.java @@ -25,12 +25,12 @@ import io.shinhanlife.axhub.biz.mcp.tool.dto.ContractDetailReq; */ public class ContractInquiryService extends AbstractMcpToolService { - @McpFunction(name = "contract_status 툴", subToolName = "contract_status", description = "계약상태 조회", prompt = "김신한 고객의 현재 계약 상태를 조회해줘.", mappingId = "CNTR_001") + @McpFunction(displayName = "contract_status 툴", name = "contract_status", description = "계약상태 조회", prompt = "김신한 고객의 현재 계약 상태를 조회해줘.", mappingId = "CNTR_001") public Object getStatus(ContractStatusReq data) { return executeLegacy("HTTP", "CNTR_001", data); } - @McpFunction(name = "contract_detail 툴", subToolName = "contract_detail", description = "계약상세 조회", prompt = "김신한 고객의 계약 상세 내역을 알려줘.", mappingId = "CNTR_002") + @McpFunction(displayName = "contract_detail 툴", name = "contract_detail", description = "계약상세 조회", prompt = "김신한 고객의 계약 상세 내역을 알려줘.", mappingId = "CNTR_002") public Object getDetail(ContractDetailReq data) { return executeLegacy("HTTP", "CNTR_002", data); } diff --git a/axhub-tool-other/src/main/java/io/shinhanlife/axhub/biz/mcp/tool/service/CustomerInfoService.java b/axhub-tool-other/src/main/java/io/shinhanlife/axhub/biz/mcp/tool/service/CustomerInfoService.java index 57b592f..5514ddf 100644 --- a/axhub-tool-other/src/main/java/io/shinhanlife/axhub/biz/mcp/tool/service/CustomerInfoService.java +++ b/axhub-tool-other/src/main/java/io/shinhanlife/axhub/biz/mcp/tool/service/CustomerInfoService.java @@ -25,12 +25,12 @@ import io.shinhanlife.axhub.biz.mcp.tool.dto.CustomerDetailReq; */ public class CustomerInfoService extends AbstractMcpToolService { - @McpFunction(name = "grade 툴", subToolName = "grade", description = "고객등급 조회", prompt = "이 고객의 VIP 등급을 조회해줘.", mappingId = "CRM_001") + @McpFunction(displayName = "grade 툴", name = "grade", description = "고객등급 조회", prompt = "이 고객의 VIP 등급을 조회해줘.", mappingId = "CRM_001") public Object getGrade(CustomerGradeReq req) { return executeLegacy("TCP", "CRM_001", req); } - @McpFunction(name = "detail 툴", subToolName = "detail", description = "고객상세 정보 조회", prompt = "이 고객의 상세 기본정보(주소, 연락처 등)를 알려줘.", mappingId = "CRM_002") + @McpFunction(displayName = "detail 툴", name = "detail", description = "고객상세 정보 조회", prompt = "이 고객의 상세 기본정보(주소, 연락처 등)를 알려줘.", mappingId = "CRM_002") public Object getDetail(CustomerDetailReq data) { return executeLegacy("TCP", "CRM_002", data); } diff --git a/axhub-tool-other/src/main/java/io/shinhanlife/axhub/biz/mcp/tool/service/SampleStringToolService.java b/axhub-tool-other/src/main/java/io/shinhanlife/axhub/biz/mcp/tool/service/SampleStringToolService.java index 999a8af..b577af6 100644 --- a/axhub-tool-other/src/main/java/io/shinhanlife/axhub/biz/mcp/tool/service/SampleStringToolService.java +++ b/axhub-tool-other/src/main/java/io/shinhanlife/axhub/biz/mcp/tool/service/SampleStringToolService.java @@ -29,7 +29,7 @@ import java.util.Map; ) public class SampleStringToolService extends AbstractMcpToolService { - @McpFunction(name = "get_sample_string 툴", subToolName = "get_sample_string", + @McpFunction(displayName = "get_sample_string 툴", name = "get_sample_string", description = "MCI String 버전과 GlowTrgmField 파싱을 테스트하는 샘플 툴입니다.", prompt = "MCI 전문(String) 연계 및 고정 길이 파싱 테스트 해줘.", mappingId = "TRGM_001" diff --git a/axhub-tool-other/src/main/java/io/shinhanlife/axhub/biz/mcp/tool/service/TemplateUtilityService.java b/axhub-tool-other/src/main/java/io/shinhanlife/axhub/biz/mcp/tool/service/TemplateUtilityService.java index 7b5f67b..49c45b8 100644 --- a/axhub-tool-other/src/main/java/io/shinhanlife/axhub/biz/mcp/tool/service/TemplateUtilityService.java +++ b/axhub-tool-other/src/main/java/io/shinhanlife/axhub/biz/mcp/tool/service/TemplateUtilityService.java @@ -29,7 +29,7 @@ import java.util.Map; */ public class TemplateUtilityService extends AbstractMcpToolService { - @McpFunction(name = "get_template_file_url 툴", subToolName = "get_template_file_url", + @McpFunction(displayName = "get_template_file_url 툴", name = "get_template_file_url", description = "특정 템플릿의 양식 파일(엑셀, 워드 등)을 다운로드 받을 수 있는 시스템 URL을 반환합니다. AI는 이 URL을 사용자에게 마크다운 링크 형태로 제공해야 합니다.", prompt = "요청하신 템플릿 양식 파일 다운로드 URL은 다음과 같습니다. 클릭하여 다운로드하세요:", register = false diff --git a/axhub-tool-other/src/main/resources/application-local.properties b/axhub-tool-other/src/main/resources/application-local.properties index 54d056d..bb16d2c 100644 --- a/axhub-tool-other/src/main/resources/application-local.properties +++ b/axhub-tool-other/src/main/resources/application-local.properties @@ -17,7 +17,6 @@ eims.mcistring.url=http://localhost:${server.port}/api/mock/esb/string # API 보안 키 설정 mcp.security.api-keys.SHINHAN_MCP_SECRET_KEY_2026=mcp-client-1 -mcp.security.api-keys.SHINHAN_MCP_TEST_KEY_9999=mcp-client-2 mcp.security.tenant-domains.mcp-client-1=CUSTOMER,COMMON mcp.security.tenant-domains.mcp-client-2=ALL diff --git a/axhub-tool-payment/src/main/java/io/shinhanlife/axhub/biz/mcp/tool/service/PaymentApprovalService.java b/axhub-tool-payment/src/main/java/io/shinhanlife/axhub/biz/mcp/tool/service/PaymentApprovalService.java index e8101db..cd1cd92 100644 --- a/axhub-tool-payment/src/main/java/io/shinhanlife/axhub/biz/mcp/tool/service/PaymentApprovalService.java +++ b/axhub-tool-payment/src/main/java/io/shinhanlife/axhub/biz/mcp/tool/service/PaymentApprovalService.java @@ -31,7 +31,7 @@ import java.util.UUID; ) public class PaymentApprovalService extends AbstractMcpToolService { - @McpFunction(name = "paymentapproval 툴", subToolName = "paymentapproval", + @McpFunction(displayName = "paymentapproval 툴", name = "paymentapproval", description = "결제 승인 처리", prompt = "결제 승인 처리 해줘.", mappingId = "PAY_001" diff --git a/axhub-tool-payment/src/main/resources/application-local.properties b/axhub-tool-payment/src/main/resources/application-local.properties index 54d056d..bb16d2c 100644 --- a/axhub-tool-payment/src/main/resources/application-local.properties +++ b/axhub-tool-payment/src/main/resources/application-local.properties @@ -17,7 +17,6 @@ eims.mcistring.url=http://localhost:${server.port}/api/mock/esb/string # API 보안 키 설정 mcp.security.api-keys.SHINHAN_MCP_SECRET_KEY_2026=mcp-client-1 -mcp.security.api-keys.SHINHAN_MCP_TEST_KEY_9999=mcp-client-2 mcp.security.tenant-domains.mcp-client-1=CUSTOMER,COMMON mcp.security.tenant-domains.mcp-client-2=ALL diff --git a/axhub-tool-sms/src/main/java/io/shinhanlife/axhub/biz/mcp/tool/sms/SmsToolService.java b/axhub-tool-sms/src/main/java/io/shinhanlife/axhub/biz/mcp/tool/sms/SmsToolService.java index 91f0e3f..4bc5acf 100644 --- a/axhub-tool-sms/src/main/java/io/shinhanlife/axhub/biz/mcp/tool/sms/SmsToolService.java +++ b/axhub-tool-sms/src/main/java/io/shinhanlife/axhub/biz/mcp/tool/sms/SmsToolService.java @@ -28,7 +28,7 @@ import java.util.Map; @McpTool(routingType = "EAI", categoryKey = "notification") public class SmsToolService extends AbstractMcpToolService { - @McpFunction(name = "send_sms 툴", subToolName = "send_sms", description = "SMS 발송", prompt = "고객에게 SMS 메시지를 발송해줘.", mappingId = "SMS_SEND_001") + @McpFunction(displayName = "send_sms 툴", name = "send_sms", description = "SMS 발송", prompt = "고객에게 SMS 메시지를 발송해줘.", mappingId = "SMS_SEND_001") public Object sendSms(SmsSendReq req) { log.info("[SMS] SMS 발송 요청 수신. 수신자: {}", req.getPhoneNumber()); diff --git a/axhub-tool-sms/src/main/resources/application-local.properties b/axhub-tool-sms/src/main/resources/application-local.properties index e2eda6e..5143d7d 100644 --- a/axhub-tool-sms/src/main/resources/application-local.properties +++ b/axhub-tool-sms/src/main/resources/application-local.properties @@ -17,7 +17,6 @@ eims.mcistring.url=http://localhost:${server.port}/api/mock/esb/string # API 보안 키 설정 mcp.security.api-keys.SHINHAN_MCP_SECRET_KEY_2026=mcp-client-1 -mcp.security.api-keys.SHINHAN_MCP_TEST_KEY_9999=mcp-client-2 mcp.security.tenant-domains.mcp-client-1=CUSTOMER,COMMON mcp.security.tenant-domains.mcp-client-2=ALL