From 8a12f5d934ce54fa21428ef1d67f196853d22dad Mon Sep 17 00:00:00 2001 From: wangbing Date: Tue, 5 Aug 2025 14:40:52 +0800 Subject: [PATCH] =?UTF-8?q?=E4=B8=8A=E4=BC=A0=E5=A4=87=E4=BB=BD?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../wbsite/mcp/server/annotation/Tool.java | 7 +++++++ .../mcp/server/config/McpServerConfig.java | 8 ++++--- .../server/registrar/McpServerRegistrar.java | 21 +++++++++++++++++++ 3 files changed, 33 insertions(+), 3 deletions(-) diff --git a/src/main/java/xyz/wbsite/mcp/server/annotation/Tool.java b/src/main/java/xyz/wbsite/mcp/server/annotation/Tool.java index 4432e86..7e88b2a 100644 --- a/src/main/java/xyz/wbsite/mcp/server/annotation/Tool.java +++ b/src/main/java/xyz/wbsite/mcp/server/annotation/Tool.java @@ -5,6 +5,13 @@ import java.lang.annotation.Retention; import java.lang.annotation.RetentionPolicy; import java.lang.annotation.Target; +/** + * Tool 注解用于标记工具方法,可在运行时获取方法作为工具的相关信息。 + * 该注解可指定工具的名称和描述,若未提供工具名称,则默认使用方法名。 + * + * @author wangbing + * @since 1.0 + */ @Retention(RetentionPolicy.RUNTIME) @Target({ElementType.METHOD}) public @interface Tool { diff --git a/src/main/java/xyz/wbsite/mcp/server/config/McpServerConfig.java b/src/main/java/xyz/wbsite/mcp/server/config/McpServerConfig.java index 7393ec4..e5aaf34 100644 --- a/src/main/java/xyz/wbsite/mcp/server/config/McpServerConfig.java +++ b/src/main/java/xyz/wbsite/mcp/server/config/McpServerConfig.java @@ -7,14 +7,16 @@ import org.springframework.context.annotation.Configuration; import org.springframework.web.reactive.function.server.RouterFunction; /** - * @author quanyu - * @date 2025/5/6 22:39 + * MCP服务配置 + * + * @author wangbing + * @since 1.0 */ @Configuration class McpServerConfig { @Bean WebFluxSseServerTransportProvider webFluxSseServerTransportProvider() { - return new WebFluxSseServerTransportProvider(new ObjectMapper(), "/mcp/message"); + return new WebFluxSseServerTransportProvider(new ObjectMapper(), "/mcp/post"); } @Bean diff --git a/src/main/java/xyz/wbsite/mcp/server/registrar/McpServerRegistrar.java b/src/main/java/xyz/wbsite/mcp/server/registrar/McpServerRegistrar.java index 5c81c31..47a2191 100644 --- a/src/main/java/xyz/wbsite/mcp/server/registrar/McpServerRegistrar.java +++ b/src/main/java/xyz/wbsite/mcp/server/registrar/McpServerRegistrar.java @@ -84,6 +84,16 @@ public class McpServerRegistrar { .build()); } + /** + * 向JSON Schema对象添加方法参数的属性定义 + * + * @param schema JSON Schema对象,用于存储参数属性定义(包含类型、描述等元数据) + * @param parameter 方法参数对象,包含参数名称、类型及注解等元数据信息 + * @note 核心处理逻辑:
+ * 1. 若JSON Schema中不存在"properties"字段,则自动创建该对象
+ * 2. 根据参数类型通过{@link #jsonTypeMapper(Parameter)}映射JSON Schema类型
+ * 3. 为参数构建属性定义(包含类型和@P注解描述信息)并添加至"properties"字段 + */ private void putProperties(ObjectNode schema, Parameter parameter) { // 处理参数 String typeName = jsonTypeMapper(parameter); @@ -100,6 +110,17 @@ public class McpServerRegistrar { } } + /** + * 将Java方法参数类型映射为JSON Schema类型字符串 + * + * @param parameter 方法参数对象,包含参数类型元数据信息 + * @return 对应的JSON Schema类型字符串,如'boolean'、'number'、'string'、'array'或'object' + * @note 核心映射规则:
+ * - 基础类型:boolean→'boolean',char→'string',数值型基础类型(int/long/float等)→'number'
+ * - 包装类型:Number子类→'number',Boolean→'boolean',String→'string'
+ * - 容器类型:数组/Collection→'array',Map→'object'
+ * - 泛型类型:List/Set→'array',其余未明确匹配类型默认→'object' + */ private String jsonTypeMapper(Parameter parameter) { Class paramType = parameter.getType(); Type genericType = parameter.getParameterizedType();