From 09e95be1d3f15679b8ce805cf5bdd7da15fb5367 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E9=BB=84=E5=8F=AF=E6=AC=A3?= <2218887102@qq.com> Date: Wed, 10 Sep 2025 17:31:04 +0800 Subject: [PATCH 01/13] [FEL] add a handler to the MCP server for handling logging/setLevel requests. --- .../tool/mcp/server/McpServerController.java | 9 +++ .../handler/LoggingSetLevelHandler.java | 80 ++++++++++++++++++ .../fel/tool/mcp/entity/LoggingLevel.java | 81 +++++++++++++++++++ .../fel/tool/mcp/entity/Method.java | 7 +- 4 files changed, 176 insertions(+), 1 deletion(-) create mode 100644 framework/fel/java/plugins/tool-mcp-server/src/main/java/modelengine/fel/tool/mcp/server/handler/LoggingSetLevelHandler.java create mode 100644 framework/fel/java/services/tool-mcp-common/src/main/java/modelengine/fel/tool/mcp/entity/LoggingLevel.java diff --git a/framework/fel/java/plugins/tool-mcp-server/src/main/java/modelengine/fel/tool/mcp/server/McpServerController.java b/framework/fel/java/plugins/tool-mcp-server/src/main/java/modelengine/fel/tool/mcp/server/McpServerController.java index 44a23dcf..929f501f 100644 --- a/framework/fel/java/plugins/tool-mcp-server/src/main/java/modelengine/fel/tool/mcp/server/McpServerController.java +++ b/framework/fel/java/plugins/tool-mcp-server/src/main/java/modelengine/fel/tool/mcp/server/McpServerController.java @@ -11,11 +11,13 @@ import modelengine.fel.tool.mcp.entity.Event; import modelengine.fel.tool.mcp.entity.JsonRpc; +import modelengine.fel.tool.mcp.entity.LoggingLevel; import modelengine.fel.tool.mcp.entity.Method; import modelengine.fel.tool.mcp.server.handler.InitializeHandler; import modelengine.fel.tool.mcp.server.handler.PingHandler; import modelengine.fel.tool.mcp.server.handler.ToolCallHandler; import modelengine.fel.tool.mcp.server.handler.ToolListHandler; +import modelengine.fel.tool.mcp.server.handler.LoggingSetLevelHandler; import modelengine.fel.tool.mcp.server.handler.UnsupportedMethodHandler; import modelengine.fit.http.annotation.GetMapping; import modelengine.fit.http.annotation.PostMapping; @@ -60,6 +62,8 @@ public class McpServerController implements McpServer.ToolsChangedObserver { private final MessageHandler unsupportedMethodHandler = new UnsupportedMethodHandler(); private final ObjectSerializer serializer; + private LoggingLevel loggingLevel = LoggingLevel.INFO; + /** * Constructs a new instance of the McpController class. * @@ -77,6 +81,7 @@ public McpServerController(@Fit(alias = "json") ObjectSerializer serializer, Mcp this.methodHandlers.put(Method.PING.code(), new PingHandler()); this.methodHandlers.put(Method.TOOLS_LIST.code(), new ToolListHandler(mcpServer)); this.methodHandlers.put(Method.TOOLS_CALL.code(), new ToolCallHandler(mcpServer, this.serializer)); + this.methodHandlers.put(Method.LOGGING_SET_LEVEL.code(), new LoggingSetLevelHandler(this)); ThreadPoolScheduler channelDetectorScheduler = ThreadPoolScheduler.custom() .corePoolSize(1) @@ -176,4 +181,8 @@ public void onToolsChanged() { log.info("Send MCP notification: tools changed. [sessionId={}]", sessionId); }); } + + public void setLoggingLevel(LoggingLevel loggingLevel) { + this.loggingLevel = loggingLevel; + } } diff --git a/framework/fel/java/plugins/tool-mcp-server/src/main/java/modelengine/fel/tool/mcp/server/handler/LoggingSetLevelHandler.java b/framework/fel/java/plugins/tool-mcp-server/src/main/java/modelengine/fel/tool/mcp/server/handler/LoggingSetLevelHandler.java new file mode 100644 index 00000000..5b71fbc6 --- /dev/null +++ b/framework/fel/java/plugins/tool-mcp-server/src/main/java/modelengine/fel/tool/mcp/server/handler/LoggingSetLevelHandler.java @@ -0,0 +1,80 @@ +/*--------------------------------------------------------------------------------------------- + * Copyright (c) 2025 Huawei Technologies Co., Ltd. All rights reserved. + * This file is a part of the ModelEngine Project. + * Licensed under the MIT License. See License.txt in the project root for license information. + *--------------------------------------------------------------------------------------------*/ + +package modelengine.fel.tool.mcp.server.handler; + +import modelengine.fel.tool.mcp.entity.LoggingLevel; +import modelengine.fel.tool.mcp.server.McpServerController; +import modelengine.fel.tool.mcp.server.MessageRequest; +import modelengine.fitframework.util.StringUtils; + +import java.util.Collections; +import java.util.Map; + +import static modelengine.fitframework.inspection.Validation.notNull; + +/** + * @since 2025-09-10 + */ +public class LoggingSetLevelHandler extends AbstractMessageHandler { + private final McpServerController mcpServerController; + private static final Map SET_LEVEL_RESULT = Collections.emptyMap(); + /** + * Constructs a new instance of the LoggingSetLevelHandler class. + * + * @param mcpServerController The MCP server instance used to set logging level during request handling. + * @throws IllegalArgumentException If {@code mcpServer} is null. + */ + public LoggingSetLevelHandler(McpServerController mcpServerController) { + super(LoggingSetLevelHandler.LoggingSetLevelRequest.class); + this.mcpServerController = notNull(mcpServerController, "The MCP server controller cannot be null."); + } + + @Override + public Object handle(LoggingSetLevelHandler.LoggingSetLevelRequest request) { + if (request == null) { + throw new IllegalStateException("No logging setLevel request."); + } + if (StringUtils.isBlank(request.getLevel())) { + throw new IllegalStateException("No logging level in request."); + } + String loggingLevelString = request.getLevel(); + LoggingLevel loggingLevel = LoggingLevel.fromCode(loggingLevelString); + if (loggingLevel == null) { + throw new IllegalStateException("Error logging level in request."); + } + mcpServerController.setLoggingLevel(loggingLevel); + return SET_LEVEL_RESULT; + } + + /** + * Represents a request to set the logging level in the MCP server. + * This request is handled by {@link LoggingSetLevelHandler} to set the logging level in the MCP server. + * + * @since 2025-09-10 + */ + public static class LoggingSetLevelRequest extends MessageRequest { + private String level; + + /** + * Gets the level of server logging. + * + * @return The level of server logging as a {@link String}. + */ + public String getLevel() { + return this.level; + } + + /** + * Sets the level of server logging . + * + * @param level The level of server logging as a {@link String}. + */ + public void setLevel(String level) { + this.level = level; + } + } +} diff --git a/framework/fel/java/services/tool-mcp-common/src/main/java/modelengine/fel/tool/mcp/entity/LoggingLevel.java b/framework/fel/java/services/tool-mcp-common/src/main/java/modelengine/fel/tool/mcp/entity/LoggingLevel.java new file mode 100644 index 00000000..ea282987 --- /dev/null +++ b/framework/fel/java/services/tool-mcp-common/src/main/java/modelengine/fel/tool/mcp/entity/LoggingLevel.java @@ -0,0 +1,81 @@ +/*--------------------------------------------------------------------------------------------- + * Copyright (c) 2025 Huawei Technologies Co., Ltd. All rights reserved. + * This file is a part of the ModelEngine Project. + * Licensed under the MIT License. See License.txt in the project root for license information. + *--------------------------------------------------------------------------------------------*/ + +package modelengine.fel.tool.mcp.entity; + +/** + * Represents different logging level in MCP server, following the RFC-5424 severity scale. + * + * @since 2025-09-10 + */ +public enum LoggingLevel { + /** + * Detailed debugging information (function entry/exit points). + */ + DEBUG("debug"), + + /** + * General informational messages (operation progress updates). + */ + INFO("info"), + + /** + * Normal but significant events (configuration changes). + */ + NOTICE("notice"), + + /** + * Warning conditions (deprecated feature usage). + */ + WARNING("warning"), + + /** + * Error conditions (operation failures). + */ + ERROR("error"), + + /** + * Critical conditions (system component failures). + */ + CRITICAL("critical"), + + /** + * Action must be taken immediately (data corruption detected). + */ + ALERT("alert"), + + /** + * System is unusable (complete system failure). + */ + EMERGENCY("emergency"); + + private final String code; + + LoggingLevel(String code) { this.code = code; } + + /** + * Returns the code associated with the logging level. + * + * @return The code of the logging level. + */ + public String code() { return this.code; } + + /** + * Reverse lookup by code (ignore case). + * + * @param code The external code + * @return Corresponding enum or {@code null} + */ + public static LoggingLevel fromCode(String code) { + if (code == null) return null; + for (LoggingLevel level : values()) { + if (level.code.equalsIgnoreCase(code)) { + return level; + } + } + return null; + } +} diff --git a/framework/fel/java/services/tool-mcp-common/src/main/java/modelengine/fel/tool/mcp/entity/Method.java b/framework/fel/java/services/tool-mcp-common/src/main/java/modelengine/fel/tool/mcp/entity/Method.java index 8ccc3b3b..9b47105d 100644 --- a/framework/fel/java/services/tool-mcp-common/src/main/java/modelengine/fel/tool/mcp/entity/Method.java +++ b/framework/fel/java/services/tool-mcp-common/src/main/java/modelengine/fel/tool/mcp/entity/Method.java @@ -40,7 +40,12 @@ public enum Method { /** * Represents the notification method indicating a change in the list of tools. */ - NOTIFICATION_TOOLS_CHANGED("notifications/tools/list_changed"); + NOTIFICATION_TOOLS_CHANGED("notifications/tools/list_changed"), + + /** + * Represents the method to set logging level. + */ + LOGGING_SET_LEVEL("logging/setLevel"); private final String code; From 6abbf996d7153d6ba339f8d38a4c45401f0565b6 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E9=BB=84=E5=8F=AF=E6=AC=A3?= <2218887102@qq.com> Date: Fri, 12 Sep 2025 14:55:57 +0800 Subject: [PATCH 02/13] =?UTF-8?q?=E5=A2=9E=E5=8A=A0RFC-5424=E5=8D=8F?= =?UTF-8?q?=E8=AE=AE=E9=93=BE=E6=8E=A5?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../main/java/modelengine/fel/tool/mcp/entity/LoggingLevel.java | 1 + 1 file changed, 1 insertion(+) diff --git a/framework/fel/java/services/tool-mcp-common/src/main/java/modelengine/fel/tool/mcp/entity/LoggingLevel.java b/framework/fel/java/services/tool-mcp-common/src/main/java/modelengine/fel/tool/mcp/entity/LoggingLevel.java index ea282987..18d6fc27 100644 --- a/framework/fel/java/services/tool-mcp-common/src/main/java/modelengine/fel/tool/mcp/entity/LoggingLevel.java +++ b/framework/fel/java/services/tool-mcp-common/src/main/java/modelengine/fel/tool/mcp/entity/LoggingLevel.java @@ -8,6 +8,7 @@ /** * Represents different logging level in MCP server, following the RFC-5424 severity scale. + * RFC-5424 * * @since 2025-09-10 */ From 63fd3f18694a507ca3935f475135c255bee37818 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E9=BB=84=E5=8F=AF=E6=AC=A3?= <2218887102@qq.com> Date: Fri, 12 Sep 2025 15:06:52 +0800 Subject: [PATCH 03/13] =?UTF-8?q?=E4=BF=AE=E6=94=B9LoggingLevel=E6=B3=A8?= =?UTF-8?q?=E9=87=8A?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../main/java/modelengine/fel/tool/mcp/entity/LoggingLevel.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/framework/fel/java/services/tool-mcp-common/src/main/java/modelengine/fel/tool/mcp/entity/LoggingLevel.java b/framework/fel/java/services/tool-mcp-common/src/main/java/modelengine/fel/tool/mcp/entity/LoggingLevel.java index 18d6fc27..0f5687f0 100644 --- a/framework/fel/java/services/tool-mcp-common/src/main/java/modelengine/fel/tool/mcp/entity/LoggingLevel.java +++ b/framework/fel/java/services/tool-mcp-common/src/main/java/modelengine/fel/tool/mcp/entity/LoggingLevel.java @@ -8,8 +8,8 @@ /** * Represents different logging level in MCP server, following the RFC-5424 severity scale. - * RFC-5424 * + * @see RFC 5424 * @since 2025-09-10 */ public enum LoggingLevel { From 5c9eb6d316e89f97fb439a5aebafaba6963b1911 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E9=BB=84=E5=8F=AF=E6=AC=A3?= <2218887102@qq.com> Date: Fri, 12 Sep 2025 15:29:02 +0800 Subject: [PATCH 04/13] =?UTF-8?q?=E4=BF=AE=E6=94=B9LoggingSetLevelHandler?= =?UTF-8?q?=E6=B3=A8=E9=87=8A?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../fel/tool/mcp/server/handler/LoggingSetLevelHandler.java | 5 +++++ .../java/modelengine/fel/tool/mcp/entity/LoggingLevel.java | 1 + 2 files changed, 6 insertions(+) diff --git a/framework/fel/java/plugins/tool-mcp-server/src/main/java/modelengine/fel/tool/mcp/server/handler/LoggingSetLevelHandler.java b/framework/fel/java/plugins/tool-mcp-server/src/main/java/modelengine/fel/tool/mcp/server/handler/LoggingSetLevelHandler.java index 5b71fbc6..17737813 100644 --- a/framework/fel/java/plugins/tool-mcp-server/src/main/java/modelengine/fel/tool/mcp/server/handler/LoggingSetLevelHandler.java +++ b/framework/fel/java/plugins/tool-mcp-server/src/main/java/modelengine/fel/tool/mcp/server/handler/LoggingSetLevelHandler.java @@ -17,6 +17,11 @@ import static modelengine.fitframework.inspection.Validation.notNull; /** + * A handler for processing logging set level requests in the MCP server. + * This class extends {@link AbstractMessageHandler} and is responsible for handling + * {@link LoggingSetLevelRequest} messages by setting the logging level of the associated {@link McpServerController}. + * + * @author 黄可欣 * @since 2025-09-10 */ public class LoggingSetLevelHandler extends AbstractMessageHandler { diff --git a/framework/fel/java/services/tool-mcp-common/src/main/java/modelengine/fel/tool/mcp/entity/LoggingLevel.java b/framework/fel/java/services/tool-mcp-common/src/main/java/modelengine/fel/tool/mcp/entity/LoggingLevel.java index 0f5687f0..0a838269 100644 --- a/framework/fel/java/services/tool-mcp-common/src/main/java/modelengine/fel/tool/mcp/entity/LoggingLevel.java +++ b/framework/fel/java/services/tool-mcp-common/src/main/java/modelengine/fel/tool/mcp/entity/LoggingLevel.java @@ -9,6 +9,7 @@ /** * Represents different logging level in MCP server, following the RFC-5424 severity scale. * + * @author 黄可欣 * @see RFC 5424 * @since 2025-09-10 */ From fabecf0ad25a0f9bce0d5c9db098fd6ef72ed4c7 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E9=BB=84=E5=8F=AF=E6=AC=A3?= <2218887102@qq.com> Date: Mon, 15 Sep 2025 09:18:21 +0800 Subject: [PATCH 05/13] =?UTF-8?q?=E4=BF=AE=E6=94=B9=E4=BB=A3=E7=A0=81?= =?UTF-8?q?=E6=A0=BC=E5=BC=8F?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../fel/tool/mcp/server/handler/LoggingSetLevelHandler.java | 1 + 1 file changed, 1 insertion(+) diff --git a/framework/fel/java/plugins/tool-mcp-server/src/main/java/modelengine/fel/tool/mcp/server/handler/LoggingSetLevelHandler.java b/framework/fel/java/plugins/tool-mcp-server/src/main/java/modelengine/fel/tool/mcp/server/handler/LoggingSetLevelHandler.java index 17737813..18ec4123 100644 --- a/framework/fel/java/plugins/tool-mcp-server/src/main/java/modelengine/fel/tool/mcp/server/handler/LoggingSetLevelHandler.java +++ b/framework/fel/java/plugins/tool-mcp-server/src/main/java/modelengine/fel/tool/mcp/server/handler/LoggingSetLevelHandler.java @@ -27,6 +27,7 @@ public class LoggingSetLevelHandler extends AbstractMessageHandler { private final McpServerController mcpServerController; private static final Map SET_LEVEL_RESULT = Collections.emptyMap(); + /** * Constructs a new instance of the LoggingSetLevelHandler class. * From f13ec822c1a022a9d1d3ec90d08bec0f1afece56 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E9=BB=84=E5=8F=AF=E6=AC=A3?= <2218887102@qq.com> Date: Tue, 16 Sep 2025 10:32:16 +0800 Subject: [PATCH 06/13] =?UTF-8?q?LoggingLevel=E5=A2=9E=E5=8A=A0int?= =?UTF-8?q?=E7=B1=BB=E5=9E=8B=E7=9A=84level=E5=B1=9E=E6=80=A7?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../fel/tool/mcp/entity/LoggingLevel.java | 35 +++++++++++++------ 1 file changed, 25 insertions(+), 10 deletions(-) diff --git a/framework/fel/java/services/tool-mcp-common/src/main/java/modelengine/fel/tool/mcp/entity/LoggingLevel.java b/framework/fel/java/services/tool-mcp-common/src/main/java/modelengine/fel/tool/mcp/entity/LoggingLevel.java index 0a838269..ccb49822 100644 --- a/framework/fel/java/services/tool-mcp-common/src/main/java/modelengine/fel/tool/mcp/entity/LoggingLevel.java +++ b/framework/fel/java/services/tool-mcp-common/src/main/java/modelengine/fel/tool/mcp/entity/LoggingLevel.java @@ -17,53 +17,68 @@ public enum LoggingLevel { /** * Detailed debugging information (function entry/exit points). */ - DEBUG("debug"), + DEBUG(0,"debug"), /** * General informational messages (operation progress updates). */ - INFO("info"), + INFO(1,"info"), /** * Normal but significant events (configuration changes). */ - NOTICE("notice"), + NOTICE(2,"notice"), /** * Warning conditions (deprecated feature usage). */ - WARNING("warning"), + WARNING(3,"warning"), /** * Error conditions (operation failures). */ - ERROR("error"), + ERROR(4,"error"), /** * Critical conditions (system component failures). */ - CRITICAL("critical"), + CRITICAL(5,"critical"), /** * Action must be taken immediately (data corruption detected). */ - ALERT("alert"), + ALERT(6,"alert"), /** * System is unusable (complete system failure). */ - EMERGENCY("emergency"); + EMERGENCY(7,"emergency"); + private final int level; private final String code; - LoggingLevel(String code) { this.code = code; } + LoggingLevel(int level, String code) { + this.level = level; + this.code = code; + } + + /** + * Returns the level number associated with the logging level. + * + * @return The number of the logging level. + */ + public int level() { + return this.level; + } /** * Returns the code associated with the logging level. * * @return The code of the logging level. */ - public String code() { return this.code; } + public String code() { + return this.code; + } /** * Reverse lookup by code (ignore case). From 8658983b21b757afd24489a65f2eacfd01ce1220 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E9=BB=84=E5=8F=AF=E6=AC=A3?= <2218887102@qq.com> Date: Wed, 17 Sep 2025 09:08:32 +0800 Subject: [PATCH 07/13] =?UTF-8?q?=E4=BF=AE=E6=94=B9LoggingSetLevelHandler?= =?UTF-8?q?=E4=BE=9D=E8=B5=96?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../fel/tool/mcp/server/McpServerController.java | 9 +-------- .../mcp/server/handler/LoggingSetLevelHandler.java | 11 +++-------- 2 files changed, 4 insertions(+), 16 deletions(-) diff --git a/framework/fel/java/plugins/tool-mcp-server/src/main/java/modelengine/fel/tool/mcp/server/McpServerController.java b/framework/fel/java/plugins/tool-mcp-server/src/main/java/modelengine/fel/tool/mcp/server/McpServerController.java index 929f501f..71da475c 100644 --- a/framework/fel/java/plugins/tool-mcp-server/src/main/java/modelengine/fel/tool/mcp/server/McpServerController.java +++ b/framework/fel/java/plugins/tool-mcp-server/src/main/java/modelengine/fel/tool/mcp/server/McpServerController.java @@ -11,7 +11,6 @@ import modelengine.fel.tool.mcp.entity.Event; import modelengine.fel.tool.mcp.entity.JsonRpc; -import modelengine.fel.tool.mcp.entity.LoggingLevel; import modelengine.fel.tool.mcp.entity.Method; import modelengine.fel.tool.mcp.server.handler.InitializeHandler; import modelengine.fel.tool.mcp.server.handler.PingHandler; @@ -62,8 +61,6 @@ public class McpServerController implements McpServer.ToolsChangedObserver { private final MessageHandler unsupportedMethodHandler = new UnsupportedMethodHandler(); private final ObjectSerializer serializer; - private LoggingLevel loggingLevel = LoggingLevel.INFO; - /** * Constructs a new instance of the McpController class. * @@ -81,7 +78,7 @@ public McpServerController(@Fit(alias = "json") ObjectSerializer serializer, Mcp this.methodHandlers.put(Method.PING.code(), new PingHandler()); this.methodHandlers.put(Method.TOOLS_LIST.code(), new ToolListHandler(mcpServer)); this.methodHandlers.put(Method.TOOLS_CALL.code(), new ToolCallHandler(mcpServer, this.serializer)); - this.methodHandlers.put(Method.LOGGING_SET_LEVEL.code(), new LoggingSetLevelHandler(this)); + this.methodHandlers.put(Method.LOGGING_SET_LEVEL.code(), new LoggingSetLevelHandler()); ThreadPoolScheduler channelDetectorScheduler = ThreadPoolScheduler.custom() .corePoolSize(1) @@ -181,8 +178,4 @@ public void onToolsChanged() { log.info("Send MCP notification: tools changed. [sessionId={}]", sessionId); }); } - - public void setLoggingLevel(LoggingLevel loggingLevel) { - this.loggingLevel = loggingLevel; - } } diff --git a/framework/fel/java/plugins/tool-mcp-server/src/main/java/modelengine/fel/tool/mcp/server/handler/LoggingSetLevelHandler.java b/framework/fel/java/plugins/tool-mcp-server/src/main/java/modelengine/fel/tool/mcp/server/handler/LoggingSetLevelHandler.java index 18ec4123..689d49d6 100644 --- a/framework/fel/java/plugins/tool-mcp-server/src/main/java/modelengine/fel/tool/mcp/server/handler/LoggingSetLevelHandler.java +++ b/framework/fel/java/plugins/tool-mcp-server/src/main/java/modelengine/fel/tool/mcp/server/handler/LoggingSetLevelHandler.java @@ -19,24 +19,19 @@ /** * A handler for processing logging set level requests in the MCP server. * This class extends {@link AbstractMessageHandler} and is responsible for handling - * {@link LoggingSetLevelRequest} messages by setting the logging level of the associated {@link McpServerController}. + * {@link LoggingSetLevelRequest} messages. * * @author 黄可欣 * @since 2025-09-10 */ public class LoggingSetLevelHandler extends AbstractMessageHandler { - private final McpServerController mcpServerController; private static final Map SET_LEVEL_RESULT = Collections.emptyMap(); /** * Constructs a new instance of the LoggingSetLevelHandler class. - * - * @param mcpServerController The MCP server instance used to set logging level during request handling. - * @throws IllegalArgumentException If {@code mcpServer} is null. */ - public LoggingSetLevelHandler(McpServerController mcpServerController) { + public LoggingSetLevelHandler() { super(LoggingSetLevelHandler.LoggingSetLevelRequest.class); - this.mcpServerController = notNull(mcpServerController, "The MCP server controller cannot be null."); } @Override @@ -52,7 +47,7 @@ public Object handle(LoggingSetLevelHandler.LoggingSetLevelRequest request) { if (loggingLevel == null) { throw new IllegalStateException("Error logging level in request."); } - mcpServerController.setLoggingLevel(loggingLevel); + // TODO change the logging level of corresponding session. return SET_LEVEL_RESULT; } From fa2e8009da0b9ebf43a652d770a569ae1ac6fb11 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E9=BB=84=E5=8F=AF=E6=AC=A3?= <2218887102@qq.com> Date: Wed, 17 Sep 2025 09:21:19 +0800 Subject: [PATCH 08/13] =?UTF-8?q?=E5=88=A0=E9=99=A4LoggingSetLevelHandler?= =?UTF-8?q?=E5=A4=9A=E4=BD=99import?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../fel/tool/mcp/server/handler/LoggingSetLevelHandler.java | 3 --- 1 file changed, 3 deletions(-) diff --git a/framework/fel/java/plugins/tool-mcp-server/src/main/java/modelengine/fel/tool/mcp/server/handler/LoggingSetLevelHandler.java b/framework/fel/java/plugins/tool-mcp-server/src/main/java/modelengine/fel/tool/mcp/server/handler/LoggingSetLevelHandler.java index 689d49d6..d01a311f 100644 --- a/framework/fel/java/plugins/tool-mcp-server/src/main/java/modelengine/fel/tool/mcp/server/handler/LoggingSetLevelHandler.java +++ b/framework/fel/java/plugins/tool-mcp-server/src/main/java/modelengine/fel/tool/mcp/server/handler/LoggingSetLevelHandler.java @@ -7,15 +7,12 @@ package modelengine.fel.tool.mcp.server.handler; import modelengine.fel.tool.mcp.entity.LoggingLevel; -import modelengine.fel.tool.mcp.server.McpServerController; import modelengine.fel.tool.mcp.server.MessageRequest; import modelengine.fitframework.util.StringUtils; import java.util.Collections; import java.util.Map; -import static modelengine.fitframework.inspection.Validation.notNull; - /** * A handler for processing logging set level requests in the MCP server. * This class extends {@link AbstractMessageHandler} and is responsible for handling From c5cf514e84d5fdf7d664f278b468c984016cb47a Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E9=BB=84=E5=8F=AF=E6=AC=A3?= <2218887102@qq.com> Date: Wed, 17 Sep 2025 11:15:48 +0800 Subject: [PATCH 09/13] =?UTF-8?q?=E6=B7=BB=E5=8A=A0LoggingLevel=E7=9A=84?= =?UTF-8?q?=E9=BB=98=E8=AE=A4=E5=80=BC,=E4=BF=AE=E6=94=B9=E6=B3=A8?= =?UTF-8?q?=E9=87=8A?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../handler/LoggingSetLevelHandler.java | 5 +--- .../fel/tool/mcp/entity/LoggingLevel.java | 27 +++++++++++++------ 2 files changed, 20 insertions(+), 12 deletions(-) diff --git a/framework/fel/java/plugins/tool-mcp-server/src/main/java/modelengine/fel/tool/mcp/server/handler/LoggingSetLevelHandler.java b/framework/fel/java/plugins/tool-mcp-server/src/main/java/modelengine/fel/tool/mcp/server/handler/LoggingSetLevelHandler.java index d01a311f..1cc2fb44 100644 --- a/framework/fel/java/plugins/tool-mcp-server/src/main/java/modelengine/fel/tool/mcp/server/handler/LoggingSetLevelHandler.java +++ b/framework/fel/java/plugins/tool-mcp-server/src/main/java/modelengine/fel/tool/mcp/server/handler/LoggingSetLevelHandler.java @@ -34,16 +34,13 @@ public LoggingSetLevelHandler() { @Override public Object handle(LoggingSetLevelHandler.LoggingSetLevelRequest request) { if (request == null) { - throw new IllegalStateException("No logging setLevel request."); + throw new IllegalStateException("No logging set level request."); } if (StringUtils.isBlank(request.getLevel())) { throw new IllegalStateException("No logging level in request."); } String loggingLevelString = request.getLevel(); LoggingLevel loggingLevel = LoggingLevel.fromCode(loggingLevelString); - if (loggingLevel == null) { - throw new IllegalStateException("Error logging level in request."); - } // TODO change the logging level of corresponding session. return SET_LEVEL_RESULT; } diff --git a/framework/fel/java/services/tool-mcp-common/src/main/java/modelengine/fel/tool/mcp/entity/LoggingLevel.java b/framework/fel/java/services/tool-mcp-common/src/main/java/modelengine/fel/tool/mcp/entity/LoggingLevel.java index ccb49822..e052229b 100644 --- a/framework/fel/java/services/tool-mcp-common/src/main/java/modelengine/fel/tool/mcp/entity/LoggingLevel.java +++ b/framework/fel/java/services/tool-mcp-common/src/main/java/modelengine/fel/tool/mcp/entity/LoggingLevel.java @@ -6,6 +6,8 @@ package modelengine.fel.tool.mcp.entity; +import modelengine.fitframework.inspection.Nonnull; + /** * Represents different logging level in MCP server, following the RFC-5424 severity scale. * @@ -65,7 +67,7 @@ public enum LoggingLevel { /** * Returns the level number associated with the logging level. * - * @return The number of the logging level. + * @return The number of the logging level as an int. */ public int level() { return this.level; @@ -74,25 +76,34 @@ public int level() { /** * Returns the code associated with the logging level. * - * @return The code of the logging level. + * @return The code of the logging level as a {@link String}. */ public String code() { return this.code; } /** - * Reverse lookup by code (ignore case). + * Returns the default logging level which is INFO level. + * + * @return The default INFO logging level as a {@link LoggingLevel}. + */ + public static LoggingLevel getDefault() { + return LoggingLevel.INFO; + } + + /** + * Return the corresponding {@link LoggingLevel} from the logging level code. + * If there is no corresponding logging level, return the default logging level. * - * @param code The external code - * @return Corresponding enum or {@code null} + * @param code The code of logging level as a {@link String}. + * @return The corresponding or default logging level as a {@link LoggingLevel}. */ - public static LoggingLevel fromCode(String code) { - if (code == null) return null; + public static LoggingLevel fromCode(@Nonnull String code) { for (LoggingLevel level : values()) { if (level.code.equalsIgnoreCase(code)) { return level; } } - return null; + return LoggingLevel.getDefault(); } } From 4916f4f88195bf464fe9e4ced50bfe93c4bf6143 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E9=BB=84=E5=8F=AF=E6=AC=A3?= <2218887102@qq.com> Date: Wed, 17 Sep 2025 12:58:54 +0800 Subject: [PATCH 10/13] =?UTF-8?q?LoggingLevel=E6=96=87=E6=A1=A3=E6=A0=BC?= =?UTF-8?q?=E5=BC=8F=E5=8C=96?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../fel/tool/mcp/entity/LoggingLevel.java | 16 ++++++++-------- 1 file changed, 8 insertions(+), 8 deletions(-) diff --git a/framework/fel/java/services/tool-mcp-common/src/main/java/modelengine/fel/tool/mcp/entity/LoggingLevel.java b/framework/fel/java/services/tool-mcp-common/src/main/java/modelengine/fel/tool/mcp/entity/LoggingLevel.java index e052229b..4c982ec4 100644 --- a/framework/fel/java/services/tool-mcp-common/src/main/java/modelengine/fel/tool/mcp/entity/LoggingLevel.java +++ b/framework/fel/java/services/tool-mcp-common/src/main/java/modelengine/fel/tool/mcp/entity/LoggingLevel.java @@ -19,42 +19,42 @@ public enum LoggingLevel { /** * Detailed debugging information (function entry/exit points). */ - DEBUG(0,"debug"), + DEBUG(0, "debug"), /** * General informational messages (operation progress updates). */ - INFO(1,"info"), + INFO(1, "info"), /** * Normal but significant events (configuration changes). */ - NOTICE(2,"notice"), + NOTICE(2, "notice"), /** * Warning conditions (deprecated feature usage). */ - WARNING(3,"warning"), + WARNING(3, "warning"), /** * Error conditions (operation failures). */ - ERROR(4,"error"), + ERROR(4, "error"), /** * Critical conditions (system component failures). */ - CRITICAL(5,"critical"), + CRITICAL(5, "critical"), /** * Action must be taken immediately (data corruption detected). */ - ALERT(6,"alert"), + ALERT(6, "alert"), /** * System is unusable (complete system failure). */ - EMERGENCY(7,"emergency"); + EMERGENCY(7, "emergency"); private final int level; private final String code; From df80fa03dc6c85dce18ef8da5082d6058056e540 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E9=BB=84=E5=8F=AF=E6=AC=A3?= <2218887102@qq.com> Date: Wed, 17 Sep 2025 15:25:08 +0800 Subject: [PATCH 11/13] =?UTF-8?q?"logging/setLevel"=E5=91=BD=E5=90=8D?= =?UTF-8?q?=E6=A0=BC=E5=BC=8FTODO?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../src/main/java/modelengine/fel/tool/mcp/entity/Method.java | 1 + 1 file changed, 1 insertion(+) diff --git a/framework/fel/java/services/tool-mcp-common/src/main/java/modelengine/fel/tool/mcp/entity/Method.java b/framework/fel/java/services/tool-mcp-common/src/main/java/modelengine/fel/tool/mcp/entity/Method.java index 9b47105d..9c1218cd 100644 --- a/framework/fel/java/services/tool-mcp-common/src/main/java/modelengine/fel/tool/mcp/entity/Method.java +++ b/framework/fel/java/services/tool-mcp-common/src/main/java/modelengine/fel/tool/mcp/entity/Method.java @@ -44,6 +44,7 @@ public enum Method { /** * Represents the method to set logging level. + * TODO The naming need to be standardized as snake_case. */ LOGGING_SET_LEVEL("logging/setLevel"); From 3a2c0a83d2079587b8e50c5e0a7df2f56b136e4f Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E9=BB=84=E5=8F=AF=E6=AC=A3?= <2218887102@qq.com> Date: Thu, 18 Sep 2025 09:17:11 +0800 Subject: [PATCH 12/13] =?UTF-8?q?LoggingLevel=E6=B3=A8=E9=87=8A=E4=BF=AE?= =?UTF-8?q?=E6=94=B9?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../main/java/modelengine/fel/tool/mcp/entity/LoggingLevel.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/framework/fel/java/services/tool-mcp-common/src/main/java/modelengine/fel/tool/mcp/entity/LoggingLevel.java b/framework/fel/java/services/tool-mcp-common/src/main/java/modelengine/fel/tool/mcp/entity/LoggingLevel.java index 4c982ec4..4004e4c9 100644 --- a/framework/fel/java/services/tool-mcp-common/src/main/java/modelengine/fel/tool/mcp/entity/LoggingLevel.java +++ b/framework/fel/java/services/tool-mcp-common/src/main/java/modelengine/fel/tool/mcp/entity/LoggingLevel.java @@ -67,7 +67,7 @@ public enum LoggingLevel { /** * Returns the level number associated with the logging level. * - * @return The number of the logging level as an int. + * @return The number of the logging level as an {@code int}. */ public int level() { return this.level; From 2841089a569f2f9d8cc9945fdd94a8c2be582b91 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E9=BB=84=E5=8F=AF=E6=AC=A3?= <2218887102@qq.com> Date: Thu, 18 Sep 2025 09:59:28 +0800 Subject: [PATCH 13/13] =?UTF-8?q?LoggingLevel=E6=B3=A8=E8=A7=A3=E9=80=BB?= =?UTF-8?q?=E8=BE=91=E4=BF=AE=E6=94=B9?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../java/modelengine/fel/tool/mcp/entity/LoggingLevel.java | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/framework/fel/java/services/tool-mcp-common/src/main/java/modelengine/fel/tool/mcp/entity/LoggingLevel.java b/framework/fel/java/services/tool-mcp-common/src/main/java/modelengine/fel/tool/mcp/entity/LoggingLevel.java index 4004e4c9..07bf34b0 100644 --- a/framework/fel/java/services/tool-mcp-common/src/main/java/modelengine/fel/tool/mcp/entity/LoggingLevel.java +++ b/framework/fel/java/services/tool-mcp-common/src/main/java/modelengine/fel/tool/mcp/entity/LoggingLevel.java @@ -98,7 +98,11 @@ public static LoggingLevel getDefault() { * @param code The code of logging level as a {@link String}. * @return The corresponding or default logging level as a {@link LoggingLevel}. */ - public static LoggingLevel fromCode(@Nonnull String code) { + @Nonnull + public static LoggingLevel fromCode(String code) { + if (code == null) { + return LoggingLevel.getDefault(); + } for (LoggingLevel level : values()) { if (level.code.equalsIgnoreCase(code)) { return level;