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

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


The following commit(s) were added to refs/heads/master by this push:
     new ebe3d6d32da Remove redundant MCP EXPLAIN execution semantics (#39080)
ebe3d6d32da is described below

commit ebe3d6d32da426a2f72b2e265480aa1d5f4628aa
Author: Liang Zhang <[email protected]>
AuthorDate: Mon Jul 13 11:37:55 2026 +0800

    Remove redundant MCP EXPLAIN execution semantics (#39080)
    
    Keep supportsExplain as the machine-readable capability and update
    EXPLAIN recovery guidance to use the target database type.
---
 .../mcp/core/protocol/error/MCPSQLRecoveryPayloadFactory.java  |  3 ++-
 .../mcp/core/protocol/error/MCPErrorConverterTest.java         |  6 ++++--
 .../database/response/MCPDatabaseCapabilityResponse.java       |  6 +-----
 .../database/response/MCPDatabaseCapabilityResponseTest.java   | 10 ++++------
 4 files changed, 11 insertions(+), 14 deletions(-)

diff --git 
a/mcp/core/src/main/java/org/apache/shardingsphere/mcp/core/protocol/error/MCPSQLRecoveryPayloadFactory.java
 
b/mcp/core/src/main/java/org/apache/shardingsphere/mcp/core/protocol/error/MCPSQLRecoveryPayloadFactory.java
index bcd5783e9bd..97eab9f414f 100644
--- 
a/mcp/core/src/main/java/org/apache/shardingsphere/mcp/core/protocol/error/MCPSQLRecoveryPayloadFactory.java
+++ 
b/mcp/core/src/main/java/org/apache/shardingsphere/mcp/core/protocol/error/MCPSQLRecoveryPayloadFactory.java
@@ -66,7 +66,8 @@ final class MCPSQLRecoveryPayloadFactory {
         result.put("rejected_explain_sql", cause.getExplainSql());
         result.put("suggested_arguments", createExplainRetryArguments(cause));
         result.put(MCPPayloadFieldNames.NEXT_ACTIONS, 
MCPNextActionUtils.ordered(
-                
MCPNextActionUtils.readResource(createDatabaseCapabilityUri(cause.getDatabase()),
 "Read explain tool semantics before regenerating explain_sql."),
+                
MCPNextActionUtils.readResource(createDatabaseCapabilityUri(cause.getDatabase()),
+                        "Read the target database type before regenerating 
database-native explain_sql."),
                 
MCPNextActionUtils.dependsOn(MCPNextActionUtils.callTool("database_gateway_execute_explain_query",
                         "Regenerate explain_sql from sql without changing sql, 
then retry the explain tool with the generated explain_sql.",
                         createExplainRetryArguments(cause)), 1)));
diff --git 
a/mcp/core/src/test/java/org/apache/shardingsphere/mcp/core/protocol/error/MCPErrorConverterTest.java
 
b/mcp/core/src/test/java/org/apache/shardingsphere/mcp/core/protocol/error/MCPErrorConverterTest.java
index 6d45c326622..bd5421f79bc 100644
--- 
a/mcp/core/src/test/java/org/apache/shardingsphere/mcp/core/protocol/error/MCPErrorConverterTest.java
+++ 
b/mcp/core/src/test/java/org/apache/shardingsphere/mcp/core/protocol/error/MCPErrorConverterTest.java
@@ -295,8 +295,10 @@ class MCPErrorConverterTest {
         assertThat(actualRecovery.get("category"), is("invalid_explain_sql"));
         assertThat(actualRecovery.get("rejected_explain_sql"), is("EXPLAIN 
BROKEN SELECT * FROM orders"));
         assertThat(actualRecovery.get("suggested_arguments"), 
is(Map.of("database", "logic_db", "schema", "public", "sql", "SELECT * FROM 
orders")));
-        Map<?, ?> actualRetryAction = (Map<?, ?>) ((List<?>) 
actualRecovery.get("next_actions")).get(1);
-        assertThat(actualRetryAction.get("tool_name"), 
is("database_gateway_execute_explain_query"));
+        List<?> actualNextActions = (List<?>) 
actualRecovery.get("next_actions");
+        assertThat(((Map<?, ?>) actualNextActions.getFirst()).get("reason"),
+                is("Read the target database type before regenerating 
database-native explain_sql."));
+        assertThat(((Map<?, ?>) actualNextActions.get(1)).get("tool_name"), 
is("database_gateway_execute_explain_query"));
         assertFalse((Boolean) actualRecovery.get("ask_user_when_uncertain"));
     }
     
diff --git 
a/mcp/support/src/main/java/org/apache/shardingsphere/mcp/support/database/response/MCPDatabaseCapabilityResponse.java
 
b/mcp/support/src/main/java/org/apache/shardingsphere/mcp/support/database/response/MCPDatabaseCapabilityResponse.java
index 45a8e580b2c..94f63899e00 100644
--- 
a/mcp/support/src/main/java/org/apache/shardingsphere/mcp/support/database/response/MCPDatabaseCapabilityResponse.java
+++ 
b/mcp/support/src/main/java/org/apache/shardingsphere/mcp/support/database/response/MCPDatabaseCapabilityResponse.java
@@ -46,11 +46,7 @@ public final class MCPDatabaseCapabilityResponse implements 
MCPResponse {
         result.put("defaultSchemaSemantics", 
databaseCapability.getDefaultSchemaSemantics());
         result.put("schemaExecutionSemantics", 
databaseCapability.getSchemaExecutionSemantics());
         result.put("supportsCrossSchemaSql", 
databaseCapability.isSupportsCrossSchemaSql());
-        boolean supportsExplain = databaseCapability.isSupportsExplain();
-        result.put("supportsExplain", supportsExplain);
-        result.put("explainExecutionSemantics", supportsExplain
-                ? "database_gateway_execute_explain_query executes 
model-generated database-native EXPLAIN SQL for one classifier-approved SELECT. 
EXPLAIN ANALYZE is not supported."
-                : "database_gateway_execute_explain_query is not supported for 
this database type.");
+        result.put("supportsExplain", databaseCapability.isSupportsExplain());
         return result;
     }
 }
diff --git 
a/mcp/support/src/test/java/org/apache/shardingsphere/mcp/support/database/response/MCPDatabaseCapabilityResponseTest.java
 
b/mcp/support/src/test/java/org/apache/shardingsphere/mcp/support/database/response/MCPDatabaseCapabilityResponseTest.java
index e281aa5a2e5..b6244402367 100644
--- 
a/mcp/support/src/test/java/org/apache/shardingsphere/mcp/support/database/response/MCPDatabaseCapabilityResponseTest.java
+++ 
b/mcp/support/src/test/java/org/apache/shardingsphere/mcp/support/database/response/MCPDatabaseCapabilityResponseTest.java
@@ -40,7 +40,7 @@ class MCPDatabaseCapabilityResponseTest {
     
     @ParameterizedTest(name = "{0}")
     @MethodSource("assertToPayloadArguments")
-    void assertToPayload(final String name, final boolean supportsExplain, 
final String explainExecutionSemantics) {
+    void assertToPayload(final String name, final boolean supportsExplain) {
         MCPDatabaseCapability actualCapability = 
mock(MCPDatabaseCapability.class);
         when(actualCapability.getDatabaseName()).thenReturn("logic_db");
         when(actualCapability.getDatabaseType()).thenReturn("FixtureDB");
@@ -70,14 +70,12 @@ class MCPDatabaseCapabilityResponseTest {
                 Map.entry("defaultSchemaSemantics", 
DialectSchemaSemantics.DATABASE_AS_SCHEMA),
                 Map.entry("schemaExecutionSemantics", 
SchemaExecutionSemantics.FIXED_TO_DATABASE),
                 Map.entry("supportsCrossSchemaSql", false),
-                Map.entry("supportsExplain", supportsExplain),
-                Map.entry("explainExecutionSemantics", 
explainExecutionSemantics))));
+                Map.entry("supportsExplain", supportsExplain))));
     }
     
     private static Stream<Arguments> assertToPayloadArguments() {
         return Stream.of(
-                Arguments.of("supported", true,
-                        "database_gateway_execute_explain_query executes 
model-generated database-native EXPLAIN SQL for one classifier-approved SELECT. 
EXPLAIN ANALYZE is not supported."),
-                Arguments.of("unsupported", false, 
"database_gateway_execute_explain_query is not supported for this database 
type."));
+                Arguments.of("supported", true),
+                Arguments.of("unsupported", false));
     }
 }

Reply via email to