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);
}
}