From 55dcffa2c931e25f6d6c633df6373dc471f8eec5 Mon Sep 17 00:00:00 2001 From: jade Date: Mon, 3 Aug 2026 16:35:46 +0900 Subject: [PATCH] =?UTF-8?q?feat(schema):=20=EA=B3=A0=EA=B8=89=20JSON=20Sch?= =?UTF-8?q?ema=20=EC=A0=9C=EC=95=BD=EC=A1=B0=EA=B1=B4(format,=20default,?= =?UTF-8?q?=20examples=20=EB=93=B1)=20=EC=A7=80=EC=9B=90=20=EB=B0=8F=20Mcp?= =?UTF-8?q?Function=20=EC=88=98=EC=A0=95=20=EB=B0=98=EC=98=81?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../io/shinhanlife/dap/lib/annotation/McpFunction.java | 5 +---- .../shinhanlife/dap/lib/annotation/McpValidation.java | 3 +++ .../shinhanlife/dap/lib/util/JsonSchemaGenerator.java | 10 ++++++++++ 3 files changed, 14 insertions(+), 4 deletions(-) diff --git a/dap-tool-core/src/main/java/io/shinhanlife/dap/lib/annotation/McpFunction.java b/dap-tool-core/src/main/java/io/shinhanlife/dap/lib/annotation/McpFunction.java index 3b3e27f2..acb185de 100644 --- a/dap-tool-core/src/main/java/io/shinhanlife/dap/lib/annotation/McpFunction.java +++ b/dap-tool-core/src/main/java/io/shinhanlife/dap/lib/annotation/McpFunction.java @@ -26,10 +26,7 @@ public @interface McpFunction { String description(); String prompt() default ""; String mappingId() default ""; - - // 추가: 해당 함수가 요구하는 비즈니스 파라미터(JSON 형태의 properties)를 정의 - String inputSchema() default "{}"; - + // 추가: Redis 자동 등록 및 Heartbeat 대상 여부 제어 boolean register() default false; diff --git a/dap-tool-core/src/main/java/io/shinhanlife/dap/lib/annotation/McpValidation.java b/dap-tool-core/src/main/java/io/shinhanlife/dap/lib/annotation/McpValidation.java index 2b7d975d..ac922a32 100644 --- a/dap-tool-core/src/main/java/io/shinhanlife/dap/lib/annotation/McpValidation.java +++ b/dap-tool-core/src/main/java/io/shinhanlife/dap/lib/annotation/McpValidation.java @@ -27,4 +27,7 @@ public @interface McpValidation { String pattern() default ""; long minimum() default Long.MIN_VALUE; String[] allowedValues() default {}; + String format() default ""; + String defaultValue() default ""; + String[] examples() default {}; } diff --git a/dap-tool-core/src/main/java/io/shinhanlife/dap/lib/util/JsonSchemaGenerator.java b/dap-tool-core/src/main/java/io/shinhanlife/dap/lib/util/JsonSchemaGenerator.java index ebf9543d..ac5de453 100644 --- a/dap-tool-core/src/main/java/io/shinhanlife/dap/lib/util/JsonSchemaGenerator.java +++ b/dap-tool-core/src/main/java/io/shinhanlife/dap/lib/util/JsonSchemaGenerator.java @@ -42,6 +42,7 @@ public class JsonSchemaGenerator { private static Map generateSchema(Class clazz, Set> visiting) { Map schema = new HashMap<>(); schema.put("type", "object"); + schema.put("additionalProperties", false); if (!visiting.add(clazz)) { return schema; } @@ -84,6 +85,15 @@ public class JsonSchemaGenerator { if (validation != null && validation.allowedValues().length > 0) { fieldSchema.put("enum", List.of(validation.allowedValues())); } + if (validation != null && !validation.format().isEmpty()) { + fieldSchema.put("format", validation.format()); + } + if (validation != null && !validation.defaultValue().isEmpty()) { + fieldSchema.put("default", validation.defaultValue()); + } + if (validation != null && validation.examples().length > 0) { + fieldSchema.put("examples", List.of(validation.examples())); + } properties.put(field.getName(), fieldSchema); }