This is an automated email from the ASF dual-hosted git repository.

hefengen pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/shenyu.git


The following commit(s) were added to refs/heads/master by this push:
     new 75ade3625f fix: handle tool not found error and update requestConfig 
type to JsonElement (#6284)
75ade3625f is described below

commit 75ade3625f5483a5848ccabe287235aea49e33a1
Author: aias00 <[email protected]>
AuthorDate: Wed Feb 4 08:53:12 2026 +0800

    fix: handle tool not found error and update requestConfig type to 
JsonElement (#6284)
---
 .../mcp/server/manager/ShenyuMcpServerManager.java | 17 ++++++++++++++
 .../mcp/server/model/ShenyuMcpServerTool.java      | 27 +++++++++++++++++++---
 2 files changed, 41 insertions(+), 3 deletions(-)

diff --git 
a/shenyu-plugin/shenyu-plugin-mcp-server/src/main/java/org/apache/shenyu/plugin/mcp/server/manager/ShenyuMcpServerManager.java
 
b/shenyu-plugin/shenyu-plugin-mcp-server/src/main/java/org/apache/shenyu/plugin/mcp/server/manager/ShenyuMcpServerManager.java
index d0180f3f7c..e31493d587 100644
--- 
a/shenyu-plugin/shenyu-plugin-mcp-server/src/main/java/org/apache/shenyu/plugin/mcp/server/manager/ShenyuMcpServerManager.java
+++ 
b/shenyu-plugin/shenyu-plugin-mcp-server/src/main/java/org/apache/shenyu/plugin/mcp/server/manager/ShenyuMcpServerManager.java
@@ -432,6 +432,11 @@ public class ShenyuMcpServerManager {
                 LOG.info("Removed tool '{}' from shared server for path: {} 
(removed from protocols: {})",
                         name, normalizedPath, protocols);
             } catch (Exception e) {
+                if (isToolNotFoundError(e)) {
+                    LOG.debug("Tool '{}' not found on shared server for path: 
{} (skip removal)",
+                            name, normalizedPath);
+                    return;
+                }
                 LOG.error("Failed to remove tool '{}' from shared server for 
path: {}", name, normalizedPath, e);
             }
         } else {
@@ -439,6 +444,18 @@ public class ShenyuMcpServerManager {
         }
     }
 
+    private boolean isToolNotFoundError(final Throwable error) {
+        Throwable current = error;
+        while (Objects.nonNull(current)) {
+            String message = current.getMessage();
+            if (Objects.nonNull(message) && message.contains("Tool with name") 
&& message.contains("not found")) {
+                return true;
+            }
+            current = current.getCause();
+        }
+        return false;
+    }
+
     /**
      * Get supported protocols for a server path.
      *
diff --git 
a/shenyu-plugin/shenyu-plugin-mcp-server/src/main/java/org/apache/shenyu/plugin/mcp/server/model/ShenyuMcpServerTool.java
 
b/shenyu-plugin/shenyu-plugin-mcp-server/src/main/java/org/apache/shenyu/plugin/mcp/server/model/ShenyuMcpServerTool.java
index 964e97b837..b9fa2c4ddb 100644
--- 
a/shenyu-plugin/shenyu-plugin-mcp-server/src/main/java/org/apache/shenyu/plugin/mcp/server/model/ShenyuMcpServerTool.java
+++ 
b/shenyu-plugin/shenyu-plugin-mcp-server/src/main/java/org/apache/shenyu/plugin/mcp/server/model/ShenyuMcpServerTool.java
@@ -18,6 +18,8 @@
 package org.apache.shenyu.plugin.mcp.server.model;
 
 import com.google.common.collect.Lists;
+import com.google.gson.JsonElement;
+import com.google.gson.JsonPrimitive;
 
 import java.util.ArrayList;
 import java.util.List;
@@ -43,7 +45,7 @@ public class ShenyuMcpServerTool {
     /**
      * requestTemplate of the tool .
      */
-    private String requestConfig;
+    private JsonElement requestConfig;
     
     /**
      * Parameters of the tool .
@@ -93,7 +95,13 @@ public class ShenyuMcpServerTool {
      * @return requestConfig
      */
     public String getRequestConfig() {
-        return requestConfig;
+        if (Objects.isNull(requestConfig) || requestConfig.isJsonNull()) {
+            return null;
+        }
+        if (requestConfig.isJsonPrimitive() && 
requestConfig.getAsJsonPrimitive().isString()) {
+            return requestConfig.getAsString();
+        }
+        return requestConfig.toString();
     }
     
     /**
@@ -102,6 +110,19 @@ public class ShenyuMcpServerTool {
      * @param requestConfig requestConfig
      */
     public void setRequestConfig(final String requestConfig) {
+        if (Objects.isNull(requestConfig)) {
+            this.requestConfig = null;
+            return;
+        }
+        this.requestConfig = new JsonPrimitive(requestConfig);
+    }
+
+    /**
+     * Setter for requestConfig.
+     *
+     * @param requestConfig requestConfig
+     */
+    public void setRequestConfig(final JsonElement requestConfig) {
         this.requestConfig = requestConfig;
     }
     
@@ -157,7 +178,7 @@ public class ShenyuMcpServerTool {
         return String.format("McpServerPluginRuleHandle: name: %s, 
description: %s, requestConfig: %s, parameters: %s",
                 name,
                 description,
-                requestConfig,
+                getRequestConfig(),
                 parameters);
     }
 }

Reply via email to