You are viewing a plain text version of this content. The canonical link for it is here.
Posted to notifications@shardingsphere.apache.org by zh...@apache.org on 2026/07/13 03:38:02 UTC
(shardingsphere) branch master updated: Remove redundant MCP EXPLAIN execution semantics (#39080)
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 <zh...@apache.org>
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));
}
}