From b195744ccff6382eeed0e7e13d3ada0681a0ab08 Mon Sep 17 00:00:00 2001 From: lym <2499445495@qq.com> Date: Tue, 14 Oct 2025 10:54:21 +0800 Subject: [PATCH] fix:#61:outputSchema do not contain description --- .../tool/utils/JsonSchemaGenerator.java | 20 ++----------------- .../tool/SyncMcpToolProviderTests.java | 8 ++++++-- 2 files changed, 8 insertions(+), 20 deletions(-) diff --git a/mcp-annotations/src/main/java/org/springaicommunity/mcp/method/tool/utils/JsonSchemaGenerator.java b/mcp-annotations/src/main/java/org/springaicommunity/mcp/method/tool/utils/JsonSchemaGenerator.java index a480d67..dacc4c7 100644 --- a/mcp-annotations/src/main/java/org/springaicommunity/mcp/method/tool/utils/JsonSchemaGenerator.java +++ b/mcp-annotations/src/main/java/org/springaicommunity/mcp/method/tool/utils/JsonSchemaGenerator.java @@ -184,15 +184,7 @@ public static String generateFromClass(Class clazz) { } private static String internalGenerateFromClass(Class clazz) { - SchemaGeneratorConfigBuilder configBuilder = new SchemaGeneratorConfigBuilder(SchemaVersion.DRAFT_2020_12, - OptionPreset.PLAIN_JSON); - SchemaGeneratorConfig config = configBuilder.with(Option.EXTRA_OPEN_API_FORMAT_VALUES) - .without(Option.FLATTENED_ENUMS_FROM_TOSTRING) - .build(); - - SchemaGenerator generator = new SchemaGenerator(config); - JsonNode jsonSchema = generator.generateSchema(clazz); - return jsonSchema.toPrettyString(); + return TYPE_SCHEMA_GENERATOR.generateSchema(clazz).toPrettyString(); } public static String generateFromType(Type type) { @@ -201,15 +193,7 @@ public static String generateFromType(Type type) { } private static String internalGenerateFromType(Type type) { - SchemaGeneratorConfigBuilder configBuilder = new SchemaGeneratorConfigBuilder(SchemaVersion.DRAFT_2020_12, - OptionPreset.PLAIN_JSON); - SchemaGeneratorConfig config = configBuilder.with(Option.EXTRA_OPEN_API_FORMAT_VALUES) - .without(Option.FLATTENED_ENUMS_FROM_TOSTRING) - .build(); - - SchemaGenerator generator = new SchemaGenerator(config); - JsonNode jsonSchema = generator.generateSchema(type); - return jsonSchema.toPrettyString(); + return TYPE_SCHEMA_GENERATOR.generateSchema(type).toPrettyString(); } /** diff --git a/mcp-annotations/src/test/java/org/springaicommunity/mcp/provider/tool/SyncMcpToolProviderTests.java b/mcp-annotations/src/test/java/org/springaicommunity/mcp/provider/tool/SyncMcpToolProviderTests.java index 812daa7..0781e53 100644 --- a/mcp-annotations/src/test/java/org/springaicommunity/mcp/provider/tool/SyncMcpToolProviderTests.java +++ b/mcp-annotations/src/test/java/org/springaicommunity/mcp/provider/tool/SyncMcpToolProviderTests.java @@ -24,6 +24,8 @@ import java.util.Map; import java.util.function.BiFunction; +import com.fasterxml.jackson.annotation.JsonProperty; +import com.fasterxml.jackson.annotation.JsonPropertyDescription; import org.junit.jupiter.api.Test; import org.springaicommunity.mcp.annotation.McpTool; @@ -586,7 +588,9 @@ public String defaultAnnotationsTool(String input) { void testToolWithOutputSchemaGeneration() { // Define a custom result class - record CustomResult(String message, int count) { + record CustomResult(@JsonPropertyDescription("customResultMessage") @JsonProperty(required = false) + String message, + @JsonProperty(required = true) int count) { } class OutputSchemaTool { @@ -613,7 +617,7 @@ public List outputSchemaTool(String input) { assertThat(outputSchemaString).contains("message"); assertThat(outputSchemaString).contains("count"); assertThat(outputSchemaString).isEqualTo( - "{$schema=https://json-schema.org/draft/2020-12/schema, type=array, items={type=object, properties={count={type=integer, format=int32}, message={type=string}}}}"); + "{$schema=https://json-schema.org/draft/2020-12/schema, type=array, items={type=object, properties={count={type=integer, format=int32}, message={type=string, description=customResultMessage}}, required=[count]}}"); } @Test