diff --git a/.gitea/workflows/deploy.yml b/.gitea/workflows/deploy.yml index 158603a2..b61776fb 100644 --- a/.gitea/workflows/deploy.yml +++ b/.gitea/workflows/deploy.yml @@ -59,7 +59,7 @@ jobs: # 4. 마운트된 /app 디렉토리로 이동하여 호스트의 도커 컴포즈 제어! cd /app docker system prune -f - ACTIVE_PROFILE=dev docker compose up -d --build --pull always --remove-orphans gateway redis mci-mock dozzle was-sms was-oth + ACTIVE_PROFILE=dev docker compose up -d --build --pull always --remove-orphans gateway mci-mock dozzle was-sms was-oth # 5. 배포 후 대롱대롱 매달려 있는 가비지 이미지 및 빌드 캐시 자동 소거 청소! docker image prune -a -f diff --git a/dap-gateway/build.gradle b/dap-gateway/build.gradle index d0be68a0..18d4109f 100644 --- a/dap-gateway/build.gradle +++ b/dap-gateway/build.gradle @@ -13,11 +13,9 @@ dependencies { // 등록된 Excel 양식을 보존하면서 Tool 문서를 생성합니다. implementation 'org.apache.poi:poi-ooxml:5.5.1' - // Tool Registry 및 분산 캐시 연동에 사용합니다. - implementation 'org.springframework.boot:spring-boot-starter-data-redis' - // Tool/Registry 관련 DB 조회와 MyBatis Mapper 실행에 사용합니다. implementation 'org.springframework.boot:spring-boot-starter-jdbc' + implementation 'org.springframework.boot:spring-boot-starter-validation' implementation 'org.mybatis.spring.boot:mybatis-spring-boot-starter:3.0.3' // Gateway가 /mcp Endpoint를 MCP Server로 노출하도록 지원합니다. diff --git a/dap-gateway/src/main/java/io/shinhanlife/dap/mcg/config/McpGatewayProperties.java b/dap-gateway/src/main/java/io/shinhanlife/dap/mcg/config/McpGatewayProperties.java index 75d99035..013a78ce 100644 --- a/dap-gateway/src/main/java/io/shinhanlife/dap/mcg/config/McpGatewayProperties.java +++ b/dap-gateway/src/main/java/io/shinhanlife/dap/mcg/config/McpGatewayProperties.java @@ -37,8 +37,8 @@ public class McpGatewayProperties { private Boolean agentClaimsRequired; private Boolean trustedClaimsRequired; private Boolean writeApprovalRequired; - private Boolean redisTraceEnabled; - private Long redisTraceTtlSeconds; + private Boolean traceEnabled; + private Long traceRetentionSize; private Long toolTimeoutMillis; private Integer retryMaxAttempts; private Long retryInitialBackoffMillis; @@ -70,8 +70,8 @@ public class McpGatewayProperties { public void setAgentClaimsRequired(Boolean agentClaimsRequired) { this.agentClaimsRequired = agentClaimsRequired; } public void setTrustedClaimsRequired(Boolean trustedClaimsRequired) { this.trustedClaimsRequired = trustedClaimsRequired; } public void setWriteApprovalRequired(Boolean writeApprovalRequired) { this.writeApprovalRequired = writeApprovalRequired; } - public void setRedisTraceEnabled(Boolean redisTraceEnabled) { this.redisTraceEnabled = redisTraceEnabled; } - public void setRedisTraceTtlSeconds(Long redisTraceTtlSeconds) { this.redisTraceTtlSeconds = redisTraceTtlSeconds; } + public void setTraceEnabled(Boolean traceEnabled) { this.traceEnabled = traceEnabled; } + public void setTraceRetentionSize(Long traceRetentionSize) { this.traceRetentionSize = traceRetentionSize; } public void setToolTimeoutMillis(Long toolTimeoutMillis) { this.toolTimeoutMillis = toolTimeoutMillis; } public void setRetryMaxAttempts(Integer retryMaxAttempts) { this.retryMaxAttempts = retryMaxAttempts; } public void setRetryInitialBackoffMillis(Long retryInitialBackoffMillis) { this.retryInitialBackoffMillis = retryInitialBackoffMillis; } @@ -103,8 +103,8 @@ public class McpGatewayProperties { public boolean agentClaimsRequired() { return agentClaimsRequired == null || agentClaimsRequired; } public boolean trustedClaimsRequired() { return trustedClaimsRequired == null || trustedClaimsRequired; } public boolean writeApprovalRequired() { return writeApprovalRequired == null || writeApprovalRequired; } - public boolean redisTraceEnabled() { return redisTraceEnabled == null || redisTraceEnabled; } - public long redisTraceTtlSeconds() { return redisTraceTtlSeconds == null || redisTraceTtlSeconds < 1 ? 3_600 : redisTraceTtlSeconds; } + public boolean traceEnabled() { return traceEnabled == null || traceEnabled; } + public long traceRetentionSize() { return traceRetentionSize == null || traceRetentionSize < 1 ? 1000 : traceRetentionSize; } public long toolTimeoutMillis() { return toolTimeoutMillis == null || toolTimeoutMillis < 1 ? 5_000 : toolTimeoutMillis; } public int retryMaxAttempts() { return retryMaxAttempts == null || retryMaxAttempts < 1 ? 3 : retryMaxAttempts; } public long retryInitialBackoffMillis() { return retryInitialBackoffMillis == null || retryInitialBackoffMillis < 1 ? 1_000 : retryInitialBackoffMillis; } diff --git a/dap-gateway/src/main/java/io/shinhanlife/dap/mcg/config/RedisConfig.java b/dap-gateway/src/main/java/io/shinhanlife/dap/mcg/config/RedisConfig.java deleted file mode 100644 index 9498936e..00000000 --- a/dap-gateway/src/main/java/io/shinhanlife/dap/mcg/config/RedisConfig.java +++ /dev/null @@ -1,46 +0,0 @@ -package io.shinhanlife.dap.mcg.config; - -import io.shinhanlife.dap.mcc.dto.ToolMetadata; -import org.springframework.context.annotation.Bean; -import org.springframework.context.annotation.Configuration; -import org.springframework.data.redis.connection.RedisConnectionFactory; -import org.springframework.data.redis.core.RedisTemplate; - -import org.springframework.data.redis.serializer.Jackson2JsonRedisSerializer; -import org.springframework.data.redis.serializer.StringRedisSerializer; - -/** - * @package io.shinhanlife.dap.mcg.config - * @className RedisConfig - * @description AX HUB 시스템 처리 클래스 - * @author 0986406 - * @create 2026.09.01 - *
- * ---------- 개정이력 ---------- - * 수정일 수정자 수정내용 - * ---------- -------- --------------------------- - * 2026.09.01 0986406 최초생성 - * - *- */ -@Configuration -public class RedisConfig { - - @Bean - public RedisTemplate
- * ---------- 개정이력 ---------- - * 수정일 수정자 수정내용 - * ---------- -------- --------------------------- - * 2026.09.01 0986406 최초생성 - * - *- */ -import io.shinhanlife.dap.mcg.config.McpGatewayProperties; -import io.shinhanlife.dap.mcg.security.McpRequestContext; -import io.shinhanlife.dap.mcc.dto.ToolMetadata; -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; -import org.springframework.beans.factory.ObjectProvider; -import org.springframework.data.redis.core.StringRedisTemplate; -import org.springframework.stereotype.Service; -import com.fasterxml.jackson.databind.JsonNode; -import com.fasterxml.jackson.databind.ObjectMapper; -import com.fasterxml.jackson.databind.node.ObjectNode; - -import java.nio.charset.StandardCharsets; -import java.security.MessageDigest; -import java.time.Duration; -import java.time.Instant; -import java.util.HexFormat; -import java.util.LinkedHashMap; -import java.util.List; -import java.util.ArrayList; -import java.util.Map; -import java.util.concurrent.ConcurrentHashMap; - -@Service -public class RedisToolTraceService { - private static final Logger log = LoggerFactory.getLogger(RedisToolTraceService.class); - private static final String KEY_PREFIX = "mcp:request:"; - private static final String RECENT_KEY = "mcp:request:recent"; - - private final McpGatewayProperties properties; - private final ObjectProvider
- * ---------- 개정이력 ---------- - * 수정일 수정자 수정내용 - * ---------- -------- --------------------------- - * 2026.09.01 0986406 최초생성 - * - *- */ -@Slf4j -@Service -@RequiredArgsConstructor -public class RedisRegistryService { - - private final RedisTemplate
- * ---------- 개정이력 ---------- - * 수정일 수정자 수정내용 - * ---------- -------- --------------------------- - * 2026.09.01 0986406 최초생성 - * - **/ @Slf4j @Service @RequiredArgsConstructor public class KillSwitchService { - // 기본 제공되는 StringRedisTemplate 사용 - private final StringRedisTemplate stringRedisTemplate; + // 인메모리 맵으로 변경 + private final Map
- * ---------- 개정이력 ---------- - * 수정일 수정자 수정내용 + * ---------- 개정?�력 ---------- + * ?�정?? ?�정?? ?�정?�용 * ---------- -------- --------------------------- - * 2026.09.01 0986406 최초생성 + * 2026.09.01 0986406 최초?�성 * **/ @@ -30,30 +30,30 @@ import java.util.Map; @RequiredArgsConstructor public class ToolPlanner { - private final RedisRegistryService redisRegistryService; + private final InMemoryRegistryService InMemoryRegistryService; private final SecurityProperties securityProperties; private final GatewayFallbackProperties fallbackProperties; /** - * 요청(payload)을 분석하여 실행해야 할 Tool의 계획을 생성합니다. + * ?�청(payload)??분석?�여 ?�행?�야 ??Tool??계획???�성?�니?? */ public Object createPlan(Map
- * ---------- 개정이력 ---------- - * 수정일 수정자 수정내용 + * ---------- 개정?�력 ---------- + * ?�정?? ?�정?? ?�정?�용 * ---------- -------- --------------------------- - * 2026.09.01 0986406 최초생성 + * 2026.09.01 0986406 최초?�성 * **/ @@ -20,7 +20,7 @@ import org.springframework.boot.test.context.SpringBootTest; import org.springframework.test.context.ActiveProfiles; import org.springframework.test.context.bean.override.mockito.MockitoBean; import io.shinhanlife.dap.mcg.audit.AuditLogService; -import io.shinhanlife.dap.mcg.redis.RedisToolTraceService; +import io.shinhanlife.dap.mcg.trace.InMemoryToolTraceService; @SpringBootTest @ActiveProfiles("test") @@ -28,7 +28,7 @@ class DapGatewayApplicationTests { // Mock components that might require external dependencies (like Redis/DB) to pass the context load @MockitoBean - private RedisToolTraceService redisToolTraceService; + private InMemoryToolTraceService InMemoryToolTraceService; @MockitoBean private AuditLogService auditLogService; diff --git a/dap-gateway/src/test/java/io/shinhanlife/dap/mcg/DapGatewayApplicationTests.java b/dap-gateway/src/test/java/io/shinhanlife/dap/mcg/DapGatewayApplicationTests.java new file mode 100644 index 00000000..5f282702 --- /dev/null +++ b/dap-gateway/src/test/java/io/shinhanlife/dap/mcg/DapGatewayApplicationTests.java @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/dap-was-lib/src/test/java/io/shinhanlife/dap/lib/mcp/McpSdk2CompatibilityTest.java b/dap-was-lib/src/test/java/io/shinhanlife/dap/lib/mcp/McpSdk2CompatibilityTest.java new file mode 100644 index 00000000..f49597e9 --- /dev/null +++ b/dap-was-lib/src/test/java/io/shinhanlife/dap/lib/mcp/McpSdk2CompatibilityTest.java @@ -0,0 +1,20 @@ +package io.shinhanlife.dap.lib.mcp; + +import static org.junit.jupiter.api.Assertions.assertEquals; + +import io.modelcontextprotocol.spec.McpSchema; +import org.junit.jupiter.api.Test; +import org.springframework.ai.mcp.annotation.McpTool; + +class McpSdk2CompatibilityTest { + + @Test + void usesOfficialSpringAiMcpAnnotations() { + assertEquals("org.springframework.ai.mcp.annotation", McpTool.class.getPackageName()); + } + + @Test + void usesMcpJavaSdkTwo() { + assertEquals("2.0.0", McpSchema.class.getPackage().getImplementationVersion()); + } +} diff --git a/deps.txt b/deps.txt new file mode 100644 index 00000000..6ac78b7c Binary files /dev/null and b/deps.txt differ diff --git a/docker-compose.yml b/docker-compose.yml index e4cccf0a..bd34e964 100644 --- a/docker-compose.yml +++ b/docker-compose.yml @@ -1,15 +1,7 @@ name: ax_hub_mcp_tool services: - redis: - image: redis:latest - ports: - - "6379:6379" - healthcheck: - test: ["CMD", "redis-cli", "ping"] - interval: 5s - timeout: 3s - retries: 5 + gateway: build: @@ -20,16 +12,10 @@ services: volumes: - ./:/src depends_on: - redis: - condition: service_healthy tool-report: condition: service_started environment: - TZ=Asia/Seoul - - SPRING_REDIS_HOST=redis - - SPRING_REDIS_PORT=6379 - - SPRING_DATA_REDIS_HOST=redis - - SPRING_DATA_REDIS_PORT=6379 - AXHUB_SOURCE_DIR=/src - JAVA_TOOL_OPTIONS=-Xms64m -Xmx384m - SPRING_PROFILES_ACTIVE=${ACTIVE_PROFILE:-local} @@ -67,13 +53,8 @@ services: dockerfile: dap-was-sms/Dockerfile ports: - "8282:8082" - depends_on: - - redis environment: - TZ=Asia/Seoul - - SPRING_REDIS_HOST=redis - - SPRING_REDIS_PORT=6379 - - SPRING_DATA_REDIS_PORT=6379 - AXHUB_GATEWAY_URL=http://gateway:8081 - AXHUB_SOURCE_DIR=/src - AXHUB_TOOL_URL=http://was-sms:8082 @@ -91,13 +72,8 @@ services: dockerfile: dap-was-oth/Dockerfile ports: - "8284:8084" - depends_on: - - redis environment: - TZ=Asia/Seoul - - SPRING_REDIS_HOST=redis - - SPRING_REDIS_PORT=6379 - - SPRING_DATA_REDIS_PORT=6379 - AXHUB_GATEWAY_URL=http://gateway:8081 - AXHUB_TOOL_URL=http://was-oth:8084 - GLOW_COMMUNICATION_MCI_HOMT=http://mci-mock diff --git a/smp_tools.json b/smp_tools.json new file mode 100644 index 00000000..93001915 --- /dev/null +++ b/smp_tools.json @@ -0,0 +1,859 @@ +{ + "value": [ + { + "uid": "080f2207-f98a-31b4-9a46-5bc7a8e41f90", + "semver": "1.0.0", + "displayName": "ê³ ê° íµí© ìë´ì´ë ¥ ì¡°í", + "name": "cmm_customer_tool", + "description": "ê³ ê°ì íµí© ìë´ ì´ë ¥ì ì¡°ííë ë구ì\u0085ëë¤.\nì¬ì© ìì : ê³ ê° IDì ì¡°í 기ê°ì 기ë°ì¼ë¡ í´ë¹ ê¸°ê° ëìì ìë´ ì´ë ¥ì íì¸í ë ì¬ì©í©ëë¤.\nì¬ì© ì ì¸: ìë´ ì´ë ¥ì ìì±íê±°ë ìì í ëë ì¬ì©íì§ ììµëë¤.\nì\u0085ì¶ë ¥ ì í: ìë´ ì´ë ¥ ì¡°íë§ ìííë©° ë°ì´í°ë¥¼ ë³ê²½íì§ ììµëë¤.", + "functionDescription": "ê³ ê°ì íµí© ìë´ ì´ë ¥ì ì¡°ííë ë구ì\u0085ëë¤.", + "whenToUse": "ê³ ê° IDì ì¡°í 기ê°ì 기ë°ì¼ë¡ í´ë¹ ê¸°ê° ëìì ìë´ ì´ë ¥ì íì¸í ë ì¬ì©í©ëë¤.", + "whenNotToUse": "ìë´ ì´ë ¥ì ìì±íê±°ë ìì í ëë ì¬ì©íì§ ììµëë¤.", + "ioLimits": "ìë´ ì´ë ¥ ì¡°íë§ ìííë©° ë°ì´í°ë¥¼ ë³ê²½íì§ ììµëë¤.", + "displayDescription": "ê³ ê°ì íµí© ìë´ ì´ë ¥ì ì¡°íí©ëë¤.", + "exampleQueries": [ + "ê³ ê° íµí© ìë´ì´ë ¥ ì¡°íí´ì¤", + "í¹ì 기ê°ì ìë´ ì´ë ¥ì íì¸í´ì¤", + "ê³ ê° ë²í¸ë¡ ìë´ ì´ë ¥ì ì°¾ìì¤" + ], + "tags": [ + "ê³ ê°", + "íµí©ìë´ì´ë ¥" + ], + "ownerOrg": "MCP_TOOL", + "requiredEnvKeys": [ + + ], + "parametersSchema": { + "type": "object", + "properties": { + "csNo": { + "type": "string", + "description": "ê³ ê°ë²í¸" + }, + "ntleCd": { + "type": "string", + "description": "ìë´ì¥ì½ë" + }, + "notiPmlMdCd": { + "type": "string", + "description": "ìë´ë°ì¡ë°©ë²ì½ë" + }, + "inqrStrYmd": { + "type": "string", + "description": "ì¡°íììì¼ì" + }, + "inqrEndYmd": { + "type": "string", + "description": "ì¡°íì¢\u0085ë£ì¼ì" + } + }, + "required": [ + "csNo" + ], + "additionalProperties": false + }, + "outputSchema": null, + "actionPrompts": { + + }, + "categoryKey": "cmm", + "endpoint": "http://localhost:8084/mcp/cmm_customer_tool", + "podUrl": "http://localhost:8084", + "visible": true, + "enabled": true, + "isRegistered": false, + "requiresApproval": false, + "readOnlyHint": true, + "destructiveHint": false, + "idempotentHint": true, + "openWorldHint": true, + "integrationType": "REST", + "mciServiceId": "ONILD0320", + "lastHeartbeat": null, + "failureRateThreshold": null, + "slidingWindowSize": null, + "rateLimitForPeriod": null, + "operationType": "READ", + "retryEnabled": true, + "circuitBreakerFailureThreshold": 0, + "circuitBreakerOpenMillis": 0, + "timeoutMillis": 5000 + }, + { + "uid": "26c5b305-a75d-3092-9252-16849187090d", + "semver": "1.0.0", + "displayName": "ë©í ê³µíµì½ë ì¡°í", + "name": "cmm_comcode_lookup", + "description": "íµí©ì½ë 그룹과 ì½ëëª\u0085 ì¡°ê±´ì¼ë¡ ë©í ê³µíµì½ë 목ë¡ì ì¡°ííë¤.\nì¬ì© ìì : ì\u0085무 ì½ëì ê°ê³¼ íìëª\u0085ì íì¸íê±°ë ì í¨í ì½ë 목ë¡ì´ íìí ê²½ì° ì¬ì©íë¤.\nì¬ì© ì ì¸: ê³µíµì½ë를 ì ê· ë±ë¡íê±°ë ë³ê²½ ëë ìì íë ¤ë ê²½ì°ìë ì¬ì©íì§ ìëë¤.\nì\u0085ì¶ë ¥ ì í: ê²ì ì¡°ê±´ì ë§ë ì½ëì ì½ëëª\u0085ë§ ë°ííë©° ì½ë ë°ì´í°ë ë³ê²½íì§ ìëë¤.", + "functionDescription": "íµí©ì½ë 그룹과 ì½ëëª\u0085 ì¡°ê±´ì¼ë¡ ë©í ê³µíµì½ë 목ë¡ì ì¡°ííë¤.", + "whenToUse": "ì\u0085무 ì½ëì ê°ê³¼ íìëª\u0085ì íì¸íê±°ë ì í¨í ì½ë 목ë¡ì´ íìí ê²½ì° ì¬ì©íë¤.", + "whenNotToUse": "ê³µíµì½ë를 ì ê· ë±ë¡íê±°ë ë³ê²½ ëë ìì íë ¤ë ê²½ì°ìë ì¬ì©íì§ ìëë¤.", + "ioLimits": "ê²ì ì¡°ê±´ì ë§ë ì½ëì ì½ëëª\u0085ë§ ë°ííë©° ì½ë ë°ì´í°ë ë³ê²½íì§ ìëë¤.", + "displayDescription": "ë©í ìì¤í\u0085ì ê³µíµì½ë 목ë¡ì ì¡°íí©ëë¤.", + "exampleQueries": [ + "ì¬ì© ìí ì½ë 목ë¡ì ìë ¤ì¤", + "ê³ ê° êµ¬ë¶ ê³µíµì½ë를 ì°¾ìì¤", + "ì¬ì© ì¤ì¸ íµí©ì½ë를 ì¡°íí´ì¤" + ], + "tags": [ + "ë©í", + "ê³µíµì½ë" + ], + "ownerOrg": "MCP_TOOL", + "requiredEnvKeys": [ + + ], + "parametersSchema": { + "type": "object", + "properties": { + "groupCode": { + "type": "string", + "description": "ì¡°íí íµí©ì½ë 그룹 ID" + }, + "codeName": { + "type": "string", + "description": "ì½ëëª\u0085 ê²ì í¤ìë" + }, + "useYn": { + "type": "string", + "description": "ì¬ì© ì¬ë¶ Y ëë N", + "enum": [ + "Y", + "N" + ] + } + }, + "additionalProperties": false + }, + "outputSchema": null, + "actionPrompts": { + + }, + "categoryKey": "cmm", + "endpoint": "http://localhost:8084/mcp/cmm_comcode_lookup", + "podUrl": "http://localhost:8084", + "visible": true, + "enabled": true, + "isRegistered": false, + "requiresApproval": false, + "readOnlyHint": true, + "destructiveHint": false, + "idempotentHint": true, + "openWorldHint": true, + "integrationType": "REST", + "mciServiceId": "CLCNNB00001", + "lastHeartbeat": null, + "failureRateThreshold": null, + "slidingWindowSize": null, + "rateLimitForPeriod": null, + "operationType": "READ", + "retryEnabled": true, + "circuitBreakerFailureThreshold": 0, + "circuitBreakerOpenMillis": 0, + "timeoutMillis": 5000 + }, + { + "uid": "bf437712-8e47-3db6-9e56-2d1995dc0609", + "semver": "1.0.0", + "displayName": "ë©í í\u0085ì´ë¸ ì¡°í", + "name": "cmm_meta_table", + "description": "물리ëª\u0085, ë\u0085¼ë¦¬ëª\u0085 ëë ìì ì ì¡°ê±´ì¼ë¡ ë©í í\u0085ì´ë¸ ì 보를 ì¡°ííë¤.\nì¬ì© ìì : ì¬ì©ìê° ì\u0085무 ë°ì´í°ì í\u0085ì´ë¸ëª\u0085ì´ë ìì ì¤í¤ë§ë¥¼ íì¸íë ¤ë ê²½ì° ì¬ì©íë¤.\nì¬ì© ì ì¸: í\u0085ì´ë¸ì ìì±íê±°ë 구조를 ë³ê²½íë ¤ë ê²½ì°ìë ì¬ì©íì§ ìëë¤.\nì\u0085ì¶ë ¥ ì í: ë©íì ë±ë¡ë í\u0085ì´ë¸ ì¤ëª\u0085 ì ë³´ë§ ë°ííë©° ì¤ì í\u0085ì´ë¸ ë°ì´í°ë ì¡°ííì§ ìëë¤.", + "functionDescription": "물리ëª\u0085, ë\u0085¼ë¦¬ëª\u0085 ëë ìì ì ì¡°ê±´ì¼ë¡ ë©í í\u0085ì´ë¸ ì 보를 ì¡°ííë¤.", + "whenToUse": "ì¬ì©ìê° ì\u0085무 ë°ì´í°ì í\u0085ì´ë¸ëª\u0085ì´ë ìì ì¤í¤ë§ë¥¼ íì¸íë ¤ë ê²½ì° ì¬ì©íë¤.", + "whenNotToUse": "í\u0085ì´ë¸ì ìì±íê±°ë 구조를 ë³ê²½íë ¤ë ê²½ì°ìë ì¬ì©íì§ ìëë¤.", + "ioLimits": "ë©íì ë±ë¡ë í\u0085ì´ë¸ ì¤ëª\u0085 ì ë³´ë§ ë°ííë©° ì¤ì í\u0085ì´ë¸ ë°ì´í°ë ì¡°ííì§ ìëë¤.", + "displayDescription": "ë©í ìì¤í\u0085ì ë±ë¡ë í\u0085ì´ë¸ ì 보를 ì¡°íí©ëë¤.", + "exampleQueries": [ + "ê³ ê° ê¸°ë³¸ í\u0085ì´ë¸ì ì°¾ìì¤", + "ê³ì½ ê´ë ¨ í\u0085ì´ë¸ 목ë¡ì ë³´ì¬ì¤", + "í¹ì ì¤í¤ë§ì í\u0085ì´ë¸ì ì¡°íí´ì¤" + ], + "tags": [ + "ë©í", + "í\u0085ì´ë¸" + ], + "ownerOrg": "MCP_TOOL", + "requiredEnvKeys": [ + + ], + "parametersSchema": { + "type": "object", + "properties": { + "tableName": { + "type": "string", + "description": "í\u0085ì´ë¸ 물리ëª\u0085 ê²ìì´" + }, + "tableLogicalName": { + "type": "string", + "description": "í\u0085ì´ë¸ ë\u0085¼ë¦¬ëª\u0085 ê²ìì´" + }, + "owner": { + "type": "string", + "description": "í\u0085ì´ë¸ ìì ì¤í¤ë§ëª\u0085" + } + }, + "additionalProperties": false + }, + "outputSchema": null, + "actionPrompts": { + + }, + "categoryKey": "cmm", + "endpoint": "http://localhost:8084/mcp/cmm_meta_table", + "podUrl": "http://localhost:8084", + "visible": true, + "enabled": true, + "isRegistered": false, + "requiresApproval": false, + "readOnlyHint": true, + "destructiveHint": false, + "idempotentHint": true, + "openWorldHint": true, + "integrationType": "REST", + "mciServiceId": null, + "lastHeartbeat": null, + "failureRateThreshold": null, + "slidingWindowSize": null, + "rateLimitForPeriod": null, + "operationType": "READ", + "retryEnabled": true, + "circuitBreakerFailureThreshold": 0, + "circuitBreakerOpenMillis": 0, + "timeoutMillis": 5000 + }, + { + "uid": "4914953b-ea25-389b-a6a9-c3c407f4d5bb", + "semver": "1.0.0", + "displayName": "ì\u0085무 í\u0085í릿 ë¤ì´ë¡ë URL ì¡°í", + "name": "cmm_template_url", + "description": "ìì²í ì\u0085무 í\u0085í릿 íì¼ì ë´ë ¤ë°ì ì ìë URLì ë°ííë¤.\nì¬ì© ìì : ì¬ì©ìê° ìì\u0085ì´ë ìë ì\u0085무 ììì ë¤ì´ë¡ë ìì¹ë¥¼ ìì²í ê²½ì° ì¬ì©íë¤.\nì¬ì© ì ì¸: í\u0085í릿 ë´ì©ì ìì±íê±°ë ì\u0085ë¡ë ëë ë³ê²½íë ¤ë ê²½ì°ìë ì¬ì©íì§ ìëë¤.\nì\u0085ì¶ë ¥ ì í: ë±ë¡ë í\u0085í릿 IDì ëí ë¤ì´ë¡ë URLë§ ë°ííë©° íì¼ ìì²´ë ë°ííì§ ìëë¤.", + "functionDescription": "ìì²í ì\u0085무 í\u0085í릿 íì¼ì ë´ë ¤ë°ì ì ìë URLì ë°ííë¤.", + "whenToUse": "ì¬ì©ìê° ìì\u0085ì´ë ìë ì\u0085무 ììì ë¤ì´ë¡ë ìì¹ë¥¼ ìì²í ê²½ì° ì¬ì©íë¤.", + "whenNotToUse": "í\u0085í릿 ë´ì©ì ìì±íê±°ë ì\u0085ë¡ë ëë ë³ê²½íë ¤ë ê²½ì°ìë ì¬ì©íì§ ìëë¤.", + "ioLimits": "ë±ë¡ë í\u0085í릿 IDì ëí ë¤ì´ë¡ë URLë§ ë°ííë©° íì¼ ìì²´ë ë°ííì§ ìëë¤.", + "displayDescription": "ì\u0085무 í\u0085í릿ì ë¤ì´ë¡ëí ì ìë URLì ì ê³µí©ëë¤.", + "exampleQueries": [ + "ì²êµ¬ ìì ë¤ì´ë¡ë ë§í¬ë¥¼ ìë ¤ì¤", + "ì\u0085ë¬´ì© ìì\u0085 í\u0085í릿ì ë°ê³ ì¶ì´", + "ë±ë¡ë 문ì ìì ìì¹ë¥¼ ì°¾ìì¤" + ], + "tags": [ + "í\u0085í릿", + "ë¤ì´ë¡ë" + ], + "ownerOrg": "MCP_TOOL", + "requiredEnvKeys": [ + + ], + "parametersSchema": { + "type": "object", + "properties": { + "templateId": { + "type": "string", + "description": "ë¤ì´ë¡ëí í\u0085í릿 ìë³ì" + } + }, + "required": [ + "templateId" + ], + "additionalProperties": false + }, + "outputSchema": null, + "actionPrompts": { + + }, + "categoryKey": "cmm", + "endpoint": "http://localhost:8084/mcp/cmm_template_url", + "podUrl": "http://localhost:8084", + "visible": true, + "enabled": true, + "isRegistered": false, + "requiresApproval": false, + "readOnlyHint": true, + "destructiveHint": false, + "idempotentHint": true, + "openWorldHint": true, + "integrationType": "REST", + "mciServiceId": null, + "lastHeartbeat": null, + "failureRateThreshold": null, + "slidingWindowSize": null, + "rateLimitForPeriod": null, + "operationType": "READ", + "retryEnabled": true, + "circuitBreakerFailureThreshold": 0, + "circuitBreakerOpenMillis": 0, + "timeoutMillis": 5000 + }, + { + "uid": "e14f5dc9-38c5-3424-bc73-69052c28f660", + "semver": "1.0.0", + "displayName": "ë³´íê¸ ì²êµ¬ ì²ë¦¬", + "name": "ins_insurance_processor", + "description": "ë³´íê¸ ì²êµ¬ë²í¸, ì²êµ¬ê¸ì¡ê³¼ ì²êµ¬ì¼ì ë°ì ì²êµ¬ ì²ë¦¬ ìì²ì ìííë¤.\nì¬ì© ìì : ì¬ì©ìê° íì¸ë ë³´íê¸ ì²êµ¬ ì 보를 ì¤ì ì²ë¦¬ê³ì ì ìíë ¤ë ê²½ì° ì¬ì©íë¤.\nì¬ì© ì ì¸: ì²êµ¬ ìíë§ ì¡°ííê±°ë íì ì ë³´ê° íì¸ëì§ ìì ê²½ì°ìë ì¬ì©íì§ ìëë¤.\nì\u0085ì¶ë ¥ ì í: ì¤í ì ì\u0085무 ìíê° ë³ê²½ë ì ìì¼ë¯ë¡ í¸ì¶ ì ì ì\u0085ë ¥ê°ê³¼ ì¬ì©ì ìì¬ë¥¼ íì¸í´ì¼ íë¤.", + "functionDescription": "ë³´íê¸ ì²êµ¬ë²í¸, ì²êµ¬ê¸ì¡ê³¼ ì²êµ¬ì¼ì ë°ì ì²êµ¬ ì²ë¦¬ ìì²ì ìííë¤.", + "whenToUse": "ì¬ì©ìê° íì¸ë ë³´íê¸ ì²êµ¬ ì 보를 ì¤ì ì²ë¦¬ê³ì ì ìíë ¤ë ê²½ì° ì¬ì©íë¤.", + "whenNotToUse": "ì²êµ¬ ìíë§ ì¡°ííê±°ë íì ì ë³´ê° íì¸ëì§ ìì ê²½ì°ìë ì¬ì©íì§ ìëë¤.", + "ioLimits": "ì¤í ì ì\u0085무 ìíê° ë³ê²½ë ì ìì¼ë¯ë¡ í¸ì¶ ì ì ì\u0085ë ¥ê°ê³¼ ì¬ì©ì ìì¬ë¥¼ íì¸í´ì¼ íë¤.", + "displayDescription": "íì¸ë ë³´íê¸ ì²êµ¬ ìì²ì ì²ë¦¬ê³ì ì ë¬í©ëë¤.", + "exampleQueries": [ + "íì¸í ë´ì©ì¼ë¡ ë³´íê¸ ì²êµ¬ë¥¼ ì ìí´ì¤", + "ì´ ì²êµ¬ë²í¸ì ë³´íê¸ ì²ë¦¬ë¥¼ ì§íí´ì¤", + "ì¤ë ë ì§ë¡ ë³´íê¸ ì²êµ¬ ìì²ì ë³´ë´ì¤" + ], + "tags": [ + "ë³´íê¸", + "ì²êµ¬ì²ë¦¬" + ], + "ownerOrg": "MCP_TOOL", + "requiredEnvKeys": [ + + ], + "parametersSchema": { + "type": "object", + "properties": { + "claimNumber": { + "type": "string", + "description": "ì²ë¦¬í ë³´íê¸ ì²êµ¬ë²í¸" + }, + "claimAmount": { + "type": "number", + "description": "ì²ë¦¬í ë³´íê¸ ì²êµ¬ê¸ì¡" + }, + "claimDate": { + "type": "string", + "description": "ì²êµ¬ì¼ì YYYYMMDD", + "pattern": "^[0-9]{8}$" + } + }, + "required": [ + "claimNumber", + "claimAmount", + "claimDate" + ], + "additionalProperties": false + }, + "outputSchema": null, + "actionPrompts": { + + }, + "categoryKey": "ins", + "endpoint": "http://localhost:8084/mcp/ins_insurance_processor", + "podUrl": "http://localhost:8084", + "visible": true, + "enabled": true, + "isRegistered": false, + "requiresApproval": false, + "readOnlyHint": false, + "destructiveHint": true, + "idempotentHint": false, + "openWorldHint": true, + "integrationType": "REST", + "mciServiceId": "CLAIM0000001", + "lastHeartbeat": null, + "failureRateThreshold": null, + "slidingWindowSize": null, + "rateLimitForPeriod": null, + "operationType": "READ", + "retryEnabled": true, + "circuitBreakerFailureThreshold": 0, + "circuitBreakerOpenMillis": 0, + "timeoutMillis": 5000 + }, + { + "uid": "a503bf94-adc5-3bdc-b9b0-9c6fcb59838d", + "semver": "1.0.0", + "displayName": "ONNBA3011 ë³´í ì\u0085무 ì¡°í", + "name": "oth_onnba3011_call", + "description": "ONNBA3011 ì\u0085ë ¥ì 보를 MCI ì 문ì¼ë¡ ë³íí´ ë³´í ì\u0085무 결과를 ì¡°ííë¤.\nì¬ì© ìì : ì¬ì©ìê° ONNBA3011 ì¸í°íì´ì¤ 기ì¤ì ë³´í ê³ì½ ëë ì§ê¸ ì 보를 ì¡°ííë ¤ë ê²½ì° ì¬ì©íë¤.\nì¬ì© ì ì¸: ì¸í°íì´ì¤ ì\u0085ë ¥ê°ì íì¸í ì ìê±°ë ë³´í ì 보를 ë³ê²½íë ¤ë ê²½ì°ìë ì¬ì©íì§ ìëë¤.\nì\u0085ì¶ë ¥ ì í: CLCNNB00001 ì¸í°íì´ì¤ ê·ê²©ì ë§ë ê°ë§ ì ë¬íë©° ì¡°í 결과를 ì\u0085무 ìëµì¼ë¡ ë³ííë¤.", + "functionDescription": "ONNBA3011 ì\u0085ë ¥ì 보를 MCI ì 문ì¼ë¡ ë³íí´ ë³´í ì\u0085무 결과를 ì¡°ííë¤.", + "whenToUse": "ì¬ì©ìê° ONNBA3011 ì¸í°íì´ì¤ 기ì¤ì ë³´í ê³ì½ ëë ì§ê¸ ì 보를 ì¡°ííë ¤ë ê²½ì° ì¬ì©íë¤.", + "whenNotToUse": "ì¸í°íì´ì¤ ì\u0085ë ¥ê°ì íì¸í ì ìê±°ë ë³´í ì 보를 ë³ê²½íë ¤ë ê²½ì°ìë ì¬ì©íì§ ìëë¤.", + "ioLimits": "CLCNNB00001 ì¸í°íì´ì¤ ê·ê²©ì ë§ë ê°ë§ ì ë¬íë©° ì¡°í 결과를 ì\u0085무 ìëµì¼ë¡ ë³ííë¤.", + "displayDescription": "ONNBA3011 ì\u0085무 ì 보를 MCIë¡ ì¡°íí©ëë¤.", + "exampleQueries": [ + "ê³ ê°ì ë³´í ì\u0085무 ì 보를 ì¡°íí´ì¤", + "ONNBA3011 기ì¤ì¼ë¡ ê³ì½ ì 보를 íì¸í´ì¤", + "ì\u0085ë ¥í ê³ ê°ë²í¸ì ë³´í 결과를 ìë ¤ì¤" + ], + "tags": [ + "ë³´í", + "MCI" + ], + "ownerOrg": "MCP_TOOL", + "requiredEnvKeys": [ + "GLOW_COMMUNICATION_MCI_HOST", + "GLOW_COMMUNICATION_MCI_PORT" + ], + "parametersSchema": { + "type": "object", + "properties": { + "dalScCd": { + "type": "string", + "description": "ê±°ë êµ¬ë¶ ì½ë" + }, + "cstSucoRltyCd": { + "type": "string", + "description": "ê³ ê° ì±ê³µ ê´ê³ ì½ë" + }, + "csNo": { + "type": "string", + "description": "ê³ ê° ë²í¸" + }, + "rdreNo": { + "type": "string", + "description": "ì¤ê³ì¬ ë²í¸" + }, + "unfcPvsCalReqYn": { + "type": "string", + "description": "미íì ì§ê¸ ê³ì° ìì² ì¬ë¶" + }, + "kcisPymmTnnrRequest": { + "type": "string", + "description": "KCIS ë©ì\u0085 ê¸°ê° ìì²ê°" + }, + "lmovYn": { + "type": "string", + "description": "ê³ì½ ì´ë ì¬ë¶" + }, + "genPsthApvTrgtYn": { + "type": "string", + "description": "ì¼ë° ì¬í ì¹ì¸ ëì ì¬ë¶" + }, + "ircoLmovEcpbTrgtYn": { + "type": "string", + "description": "ê³ì½ ì´ë ìì¸ ëì ì¬ë¶" + }, + "digCalYn": { + "type": "string", + "description": "ëì§í¸ ê³ì° ì¬ë¶" + }, + "prbuIciDigCalYn": { + "type": "string", + "description": "ìíë³ ëì§í¸ ê³ì° ì¬ë¶" + }, + "unfcPrbuIrcoAddu": { + "type": "object", + "description": "미íì ìí ì¶ê° ì ë³´", + "additionalProperties": true + }, + "sucoIspaBasDto": { + "type": "object", + "description": "ì±ê³µ ì¬ì¬ 기본 ì ë³´", + "additionalProperties": true + } + }, + "additionalProperties": false + }, + "outputSchema": null, + "actionPrompts": { + + }, + "categoryKey": "oth", + "endpoint": "http://localhost:8084/mcp/oth_onnba3011_call", + "podUrl": "http://localhost:8084", + "visible": true, + "enabled": true, + "isRegistered": false, + "requiresApproval": false, + "readOnlyHint": true, + "destructiveHint": false, + "idempotentHint": true, + "openWorldHint": true, + "integrationType": "REST", + "mciServiceId": "CLCNNB00001", + "lastHeartbeat": null, + "failureRateThreshold": null, + "slidingWindowSize": null, + "rateLimitForPeriod": null, + "operationType": "READ", + "retryEnabled": true, + "circuitBreakerFailureThreshold": 0, + "circuitBreakerOpenMillis": 0, + "timeoutMillis": 5000 + }, + { + "uid": "850ea7c1-f54f-38d9-8b4f-958602271fb2", + "semver": "1.0.0", + "displayName": "ì¤ëì ëª\u0085ì¸ ì¡°í", + "name": "smp_quote_daily", + "description": "ì íí ì¹´í\u0085ê³ ë¦¬ì ë§ë ì¤ëì ëª\u0085ì¸ í ê±´ì ì¡°ííë¤.\nì¬ì© ìì : ì¬ì©ìê° ëª\u0085ì¸ì´ë ì§§ì ë기ë¶ì¬ 문구를 ìì²í ê²½ì° ì¬ì©íë¤.\nì¬ì© ì ì¸: ì\u0085무 ë°ì´í° ì¡°íë ì¬ì¤ ê²ì¦ì´ íìí ì§ë¬¸ìë ì¬ì©íì§ ìëë¤.\nì\u0085ì¶ë ¥ ì í: ë±ë¡ë ëª\u0085ì¸ ë°ì´í° ì¤ í ê±´ë§ ë°ííë©° ì¶ì² ì ë³´ê° ìì ì ìë¤.", + "functionDescription": "ì íí ì¹´í\u0085ê³ ë¦¬ì ë§ë ì¤ëì ëª\u0085ì¸ í ê±´ì ì¡°ííë¤.", + "whenToUse": "ì¬ì©ìê° ëª\u0085ì¸ì´ë ì§§ì ë기ë¶ì¬ 문구를 ìì²í ê²½ì° ì¬ì©íë¤.", + "whenNotToUse": "ì\u0085무 ë°ì´í° ì¡°íë ì¬ì¤ ê²ì¦ì´ íìí ì§ë¬¸ìë ì¬ì©íì§ ìëë¤.", + "ioLimits": "ë±ë¡ë ëª\u0085ì¸ ë°ì´í° ì¤ í ê±´ë§ ë°ííë©° ì¶ì² ì ë³´ê° ìì ì ìë¤.", + "displayDescription": "ì¹´í\u0085ê³ ë¦¬ì ë§ë ì¤ëì ëª\u0085ì¸ì ì ê³µí©ëë¤.", + "exampleQueries": [ + "ì¤ë íì´ ëë ë§ì ìë ¤ì¤", + "ì\u0085무 ìì ì ì ëª\u0085ì¸ íë ë³´ì¬ì¤", + "ì±ê³µì ê´í ì§§ì 문구를 ì¶ì²í´ì¤" + ], + "tags": [ + "ëª\u0085ì¸", + "ì½í\u0085ì¸ " + ], + "ownerOrg": "MCP_TOOL", + "requiredEnvKeys": [ + + ], + "parametersSchema": { + "type": "object", + "properties": { + "category": { + "type": "string", + "description": "ì¡°íí ëª\u0085ì¸ ì¹´í\u0085ê³ ë¦¬" + } + }, + "additionalProperties": false + }, + "outputSchema": null, + "actionPrompts": { + + }, + "categoryKey": "smp", + "endpoint": "http://localhost:8084/mcp/smp_quote_daily", + "podUrl": "http://localhost:8084", + "visible": true, + "enabled": true, + "isRegistered": false, + "requiresApproval": false, + "readOnlyHint": true, + "destructiveHint": false, + "idempotentHint": false, + "openWorldHint": true, + "integrationType": "REST", + "mciServiceId": null, + "lastHeartbeat": null, + "failureRateThreshold": null, + "slidingWindowSize": null, + "rateLimitForPeriod": null, + "operationType": "READ", + "retryEnabled": true, + "circuitBreakerFailureThreshold": 0, + "circuitBreakerOpenMillis": 0, + "timeoutMillis": 5000 + }, + { + "uid": "ef86d147-785e-3007-a158-f7e6ffd275de", + "semver": "1.0.0", + "displayName": "ì¤ìê° íì¨ ì¡°í", + "name": "smp_exchange_inquiry", + "description": "íµíì½ë를 기ì¤ì¼ë¡ íì¬ íì¨ ì 보를 ì¡°ííë¤.\nì¬ì© ìì : ì¬ì©ìê° USD, EUR, JPY ë± í¹ì íµíì íì¨ì íì¸íë ¤ë ê²½ì° ì¬ì©íë¤.\nì¬ì© ì ì¸: íì ê±°ë를 ì¤ííê±°ë 과거 íì¨ íµê³ë¥¼ ë¶ìíë ¤ë ê²½ì°ìë ì¬ì©íì§ ìëë¤.\nì\u0085ì¶ë ¥ ì í: ì§ìëë íµíì½ëì ì¡°í ìì íì¨ë§ ë°ííë©° ì¤ì íì 기ë¥ì ì ê³µíì§ ìëë¤.", + "functionDescription": "íµíì½ë를 기ì¤ì¼ë¡ íì¬ íì¨ ì 보를 ì¡°ííë¤.", + "whenToUse": "ì¬ì©ìê° USD, EUR, JPY ë± í¹ì íµíì íì¨ì íì¸íë ¤ë ê²½ì° ì¬ì©íë¤.", + "whenNotToUse": "íì ê±°ë를 ì¤ííê±°ë 과거 íì¨ íµê³ë¥¼ ë¶ìíë ¤ë ê²½ì°ìë ì¬ì©íì§ ìëë¤.", + "ioLimits": "ì§ìëë íµíì½ëì ì¡°í ìì íì¨ë§ ë°ííë©° ì¤ì íì 기ë¥ì ì ê³µíì§ ìëë¤.", + "displayDescription": "ì§ì í íµíì íì¬ íì¨ì ì¡°íí©ëë¤.", + "exampleQueries": [ + "ì¤ë ë¬ë¬ íì¨ì ìë ¤ì¤", + "ìí íì¨ì´ ì¼ë§ì¸ì§ ì¡°íí´ì¤", + "ì ë¡ íì¨ì íì¸í´ì¤" + ], + "tags": [ + "íì¨", + "ê¸ìµ" + ], + "ownerOrg": "MCP_TOOL", + "requiredEnvKeys": [ + + ], + "parametersSchema": { + "type": "object", + "properties": { + "currencyCode": { + "type": "string", + "description": "ì¡°íí ISO íµíì½ë", + "pattern": "^[A-Z]{3}$" + } + }, + "additionalProperties": false + }, + "outputSchema": null, + "actionPrompts": { + + }, + "categoryKey": "smp", + "endpoint": "http://localhost:8084/mcp/smp_exchange_inquiry", + "podUrl": "http://localhost:8084", + "visible": true, + "enabled": true, + "isRegistered": false, + "requiresApproval": false, + "readOnlyHint": true, + "destructiveHint": false, + "idempotentHint": true, + "openWorldHint": true, + "integrationType": "REST", + "mciServiceId": null, + "lastHeartbeat": null, + "failureRateThreshold": null, + "slidingWindowSize": null, + "rateLimitForPeriod": null, + "operationType": "READ", + "retryEnabled": true, + "circuitBreakerFailureThreshold": 0, + "circuitBreakerOpenMillis": 0, + "timeoutMillis": 5000 + }, + { + "uid": "44508c3e-89a8-3fa8-92ec-ae236ca2cd88", + "semver": "1.0.0", + "displayName": "MCP·TOOL íí¸ êµ¬ì±ì ì¡°í", + "name": "smp_team_list", + "description": "ì íë¼ì´í AX ì¶ì§íê³¼ MCP·TOOL íí¸ êµ¬ì±ì ë° ì§ê¸ì ì¡°ííë¤.\nì¬ì© ìì : ì¬ì©ìê° íë¡ì í¸ ë´ë¹ìë íë³ êµ¬ì±ì ì 보를 묻ë ê²½ì° ì¬ì©íë¤.\nì¬ì© ì ì¸: ì¸ì¬ ê°ì¸ì ë³´ë ì°ë½ì² ëë ì¡°ì§ ë³ê²½ ì´ë ¥ì ìì²íë ê²½ì°ìë ì¬ì©íì§ ìëë¤.\nì\u0085ì¶ë ¥ ì í: ì¬ì ì ë±ë¡ë 구ì±ìì ì´ë¦ê³¼ ì§ê¸ë§ ë°ííë©° 민ê°í ì¸ì¬ì ë³´ë í¬í¨íì§ ìëë¤.", + "functionDescription": "ì íë¼ì´í AX ì¶ì§íê³¼ MCP·TOOL íí¸ êµ¬ì±ì ë° ì§ê¸ì ì¡°ííë¤.", + "whenToUse": "ì¬ì©ìê° íë¡ì í¸ ë´ë¹ìë íë³ êµ¬ì±ì ì 보를 묻ë ê²½ì° ì¬ì©íë¤.", + "whenNotToUse": "ì¸ì¬ ê°ì¸ì ë³´ë ì°ë½ì² ëë ì¡°ì§ ë³ê²½ ì´ë ¥ì ìì²íë ê²½ì°ìë ì¬ì©íì§ ìëë¤.", + "ioLimits": "ì¬ì ì ë±ë¡ë 구ì±ìì ì´ë¦ê³¼ ì§ê¸ë§ ë°ííë©° 민ê°í ì¸ì¬ì ë³´ë í¬í¨íì§ ìëë¤.", + "displayDescription": "ì íë¼ì´í MCP·TOOL íí¸ ë´ë¹ìì 구ì±ìì ì¡°íí©ëë¤.", + "exampleQueries": [ + "MCP í ë´ë¹ì를 ìë ¤ì¤", + "TOOL íí¸ êµ¬ì±ìì´ ë구ì¸ì§ ë³´ì¬ì¤", + "AX ì¶ì§í ë´ë¹ì를 ì°¾ìì¤" + ], + "tags": [ + "ì¡°ì§", + "ë´ë¹ì" + ], + "ownerOrg": "MCP_TOOL", + "requiredEnvKeys": [ + + ], + "parametersSchema": { + "type": "object", + "properties": { + "teamName": { + "type": "string", + "description": "ì¡°íí í ì´ë¦ ëë ì ì²´" + } + }, + "additionalProperties": false + }, + "outputSchema": null, + "actionPrompts": { + + }, + "categoryKey": "smp", + "endpoint": "http://localhost:8084/mcp/smp_team_list", + "podUrl": "http://localhost:8084", + "visible": true, + "enabled": true, + "isRegistered": false, + "requiresApproval": false, + "readOnlyHint": true, + "destructiveHint": false, + "idempotentHint": true, + "openWorldHint": true, + "integrationType": "REST", + "mciServiceId": null, + "lastHeartbeat": null, + "failureRateThreshold": null, + "slidingWindowSize": null, + "rateLimitForPeriod": null, + "operationType": "READ", + "retryEnabled": true, + "circuitBreakerFailureThreshold": 0, + "circuitBreakerOpenMillis": 0, + "timeoutMillis": 5000 + }, + { + "uid": "bc0f227e-3a9b-36a1-af6f-3f20c1964969", + "semver": "1.0.0", + "displayName": "ëì ë ì¨ ì¡°í", + "name": "smp_weather_inquiry", + "description": "ëìëª\u0085ì 기ì¤ì¼ë¡ íì¬ ë ì¨, ì¨ëì íìì ì¡°ííë¤.\nì¬ì© ìì : ì¬ì©ìê° í¹ì ëìì íì¬ ê¸°ì ì 보를 ìì²í ê²½ì° ì¬ì©íë¤.\nì¬ì© ì ì¸: ì¥ê¸° ìë³´ë 기ì í¹ë³´ ëë ê³µì ì¬ëì ë³´ê° íìí ê²½ì°ìë ì¬ì©íì§ ìëë¤.\nì\u0085ì¶ë ¥ ì í: ì\u0085ë ¥í ëìì íì¬ ê´ì¸¡ ê¸°ë° ìí ì ë³´ë§ ë°ííë¤.", + "functionDescription": "ëìëª\u0085ì 기ì¤ì¼ë¡ íì¬ ë ì¨, ì¨ëì íìì ì¡°ííë¤.", + "whenToUse": "ì¬ì©ìê° í¹ì ëìì íì¬ ê¸°ì ì 보를 ìì²í ê²½ì° ì¬ì©íë¤.", + "whenNotToUse": "ì¥ê¸° ìë³´ë 기ì í¹ë³´ ëë ê³µì ì¬ëì ë³´ê° íìí ê²½ì°ìë ì¬ì©íì§ ìëë¤.", + "ioLimits": "ì\u0085ë ¥í ëìì íì¬ ê´ì¸¡ ê¸°ë° ìí ì ë³´ë§ ë°ííë¤.", + "displayDescription": "ì§ì í ëìì íì¬ ë ì¨ ì 보를 ì¡°íí©ëë¤.", + "exampleQueries": [ + "ìì¸ ë ì¨ë¥¼ ìë ¤ì¤", + "ë¶ì°ì íì¬ ì¨ë를 ì¡°íí´ì¤", + "ì 주ë ë°ëì´ ì¼ë§ë ë¶ëì§ ìë ¤ì¤" + ], + "tags": [ + "ë ì¨", + "ì¡°í" + ], + "ownerOrg": "MCP_TOOL", + "requiredEnvKeys": [ + + ], + "parametersSchema": { + "type": "object", + "properties": { + "city": { + "type": "string", + "description": "ë ì¨ë¥¼ ì¡°íí ëìëª\u0085" + } + }, + "required": [ + "city" + ], + "additionalProperties": false + }, + "outputSchema": null, + "actionPrompts": { + + }, + "categoryKey": "smp", + "endpoint": "http://localhost:8084/mcp/smp_weather_inquiry", + "podUrl": "http://localhost:8084", + "visible": true, + "enabled": true, + "isRegistered": false, + "requiresApproval": false, + "readOnlyHint": true, + "destructiveHint": false, + "idempotentHint": true, + "openWorldHint": true, + "integrationType": "REST", + "mciServiceId": null, + "lastHeartbeat": null, + "failureRateThreshold": null, + "slidingWindowSize": null, + "rateLimitForPeriod": null, + "operationType": "READ", + "retryEnabled": true, + "circuitBreakerFailureThreshold": 0, + "circuitBreakerOpenMillis": 0, + "timeoutMillis": 5000 + }, + { + "uid": "5fd282b9-6472-3fc3-a562-fe23e000ab7e", + "semver": "1.0.0", + "displayName": "SOL ì뢰ì ìì¸ ì¡°í", + "name": "sol_request_detail", + "description": "SOL ì뢰ì ìë³ì를 기ì¤ì¼ë¡ ì뢰ì ìì¸ ë´ì©ì ì¡°ííë¤.\nì¬ì© ìì : ì¬ì©ìê° í¹ì SOL ì뢰ìì ìì¸ ë´ì©ê³¼ ì§í ì 보를 íì¸íë ¤ë ê²½ì° ì¬ì©íë¤.\nì¬ì© ì ì¸: ì뢰ì 목ë¡ë§ 찾거ë ì뢰ì를 ë³ê²½ ëë ì²ë¦¬íë ¤ë ê²½ì°ìë ì¬ì©íì§ ìëë¤.\nì\u0085ì¶ë ¥ ì í: ì íí ì뢰ì IDê° íìíë©° ë±ë¡ë ìì¸ ì ë³´ë§ ë°ííë¤.", + "functionDescription": "SOL ì뢰ì ìë³ì를 기ì¤ì¼ë¡ ì뢰ì ìì¸ ë´ì©ì ì¡°ííë¤.", + "whenToUse": "ì¬ì©ìê° í¹ì SOL ì뢰ìì ìì¸ ë´ì©ê³¼ ì§í ì 보를 íì¸íë ¤ë ê²½ì° ì¬ì©íë¤.", + "whenNotToUse": "ì뢰ì 목ë¡ë§ 찾거ë ì뢰ì를 ë³ê²½ ëë ì²ë¦¬íë ¤ë ê²½ì°ìë ì¬ì©íì§ ìëë¤.", + "ioLimits": "ì íí ì뢰ì IDê° íìíë©° ë±ë¡ë ìì¸ ì ë³´ë§ ë°ííë¤.", + "displayDescription": "SOL ì뢰ì í ê±´ì ìì¸ ì 보를 ì¡°íí©ëë¤.", + "exampleQueries": [ + "ì´ SOL ì뢰ì ìì¸ë¥¼ ë³´ì¬ì¤", + "ì뢰ì IDë¡ ì²ë¦¬ ë´ì©ì íì¸í´ì¤", + "ì íí ì뢰ìì ìì¸ ì 보를 ìë ¤ì¤" + ], + "tags": [ + "SOL", + "ì뢰ì" + ], + "ownerOrg": "MCP_TOOL", + "requiredEnvKeys": [ + + ], + "parametersSchema": { + "type": "object", + "properties": { + "srId": { + "type": "string", + "description": "ìì¸ ì¡°íí SOL ì뢰ì ID" + } + }, + "required": [ + "srId" + ], + "additionalProperties": false + }, + "outputSchema": null, + "actionPrompts": { + + }, + "categoryKey": "sol", + "endpoint": "http://localhost:8084/mcp/sol_request_detail", + "podUrl": "http://localhost:8084", + "visible": true, + "enabled": true, + "isRegistered": false, + "requiresApproval": false, + "readOnlyHint": true, + "destructiveHint": false, + "idempotentHint": true, + "openWorldHint": true, + "integrationType": "REST", + "mciServiceId": "SOLG00000002", + "lastHeartbeat": null, + "failureRateThreshold": null, + "slidingWindowSize": null, + "rateLimitForPeriod": null, + "operationType": "READ", + "retryEnabled": true, + "circuitBreakerFailureThreshold": 0, + "circuitBreakerOpenMillis": 0, + "timeoutMillis": 5000 + }, + { + "uid": "332361bb-488a-388a-974c-c28ec243c253", + "semver": "1.0.0", + "displayName": "SOL ì뢰ì ëª©ë¡ ì¡°í", + "name": "sol_request_list", + "description": "ì§íìí, ì¡°í기ê°ê³¼ ì¡°íëì ì¡°ê±´ì¼ë¡ SOL ì뢰ì 목ë¡ì ì¡°ííë¤.\nì¬ì© ìì : ì¬ì©ìê° ìì ì SOL ì뢰ìë ìíë³ ì뢰ì 목ë¡ì íì¸íë ¤ë ê²½ì° ì¬ì©íë¤.\nì¬ì© ì ì¸: í¹ì ì뢰ìì ìì¸ ë´ì©ë§ ë³´ê±°ë ì뢰ì를 ë³ê²½íë ¤ë ê²½ì°ìë ì¬ì©íì§ ìëë¤.\nì\u0085ì¶ë ¥ ì í: ì\u0085ë ¥ ì¡°ê±´ì í´ë¹íë ì뢰ì ìì½ ëª©ë¡ë§ ë°ííë¤.", + "functionDescription": "ì§íìí, ì¡°í기ê°ê³¼ ì¡°íëì ì¡°ê±´ì¼ë¡ SOL ì뢰ì 목ë¡ì ì¡°ííë¤.", + "whenToUse": "ì¬ì©ìê° ìì ì SOL ì뢰ìë ìíë³ ì뢰ì 목ë¡ì íì¸íë ¤ë ê²½ì° ì¬ì©íë¤.", + "whenNotToUse": "í¹ì ì뢰ìì ìì¸ ë´ì©ë§ ë³´ê±°ë ì뢰ì를 ë³ê²½íë ¤ë ê²½ì°ìë ì¬ì©íì§ ìëë¤.", + "ioLimits": "ì\u0085ë ¥ ì¡°ê±´ì í´ë¹íë ì뢰ì ìì½ ëª©ë¡ë§ ë°ííë¤.", + "displayDescription": "ì¡°ê±´ì ë§ë SOL ì뢰ì 목ë¡ì ì¡°íí©ëë¤.", + "exampleQueries": [ + "ì§í ì¤ì¸ SOL ì뢰ì를 ë³´ì¬ì¤", + "ìµê·¼ í ë¬ê° ë´ ì뢰ì를 ì¡°íí´ì¤", + "ìë£ë ì뢰ì 목ë¡ì ìë ¤ì¤" + ], + "tags": [ + "SOL", + "ì뢰ì" + ], + "ownerOrg": "MCP_TOOL", + "requiredEnvKeys": [ + + ], + "parametersSchema": { + "type": "object", + "properties": { + "status": { + "type": "string", + "description": "ì¡°íí ì뢰ì ì§íìí" + }, + "period": { + "type": "string", + "description": "ì¡°íí ê¸°ê° ì¡°ê±´" + }, + "target": { + "type": "string", + "description": "ëì ì\u0085무 ëë ì ì²´ ì¡°íëì" + } + }, + "additionalProperties": false + }, + "outputSchema": null, + "actionPrompts": { + + }, + "categoryKey": "sol", + "endpoint": "http://localhost:8084/mcp/sol_request_list", + "podUrl": "http://localhost:8084", + "visible": true, + "enabled": true, + "isRegistered": false, + "requiresApproval": false, + "readOnlyHint": true, + "destructiveHint": false, + "idempotentHint": true, + "openWorldHint": true, + "integrationType": "REST", + "mciServiceId": "SOLG00000001", + "lastHeartbeat": null, + "failureRateThreshold": null, + "slidingWindowSize": null, + "rateLimitForPeriod": null, + "operationType": "READ", + "retryEnabled": true, + "circuitBreakerFailureThreshold": 0, + "circuitBreakerOpenMillis": 0, + "timeoutMillis": 5000 + } + ], + "Count": 12 +}