Skip to content

Commit eed00ce

Browse files
authored
[hotfix][mcp] Skip listPrompts for MCP servers without prompt support (#539)
1 parent 8d50fb9 commit eed00ce

File tree

2 files changed

+30
-0
lines changed

2 files changed

+30
-0
lines changed

integrations/mcp/src/main/java/org/apache/flink/agents/integrations/mcp/MCPServer.java

Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -42,6 +42,7 @@
4242
import java.net.http.HttpRequest;
4343
import java.time.Duration;
4444
import java.util.ArrayList;
45+
import java.util.Collections;
4546
import java.util.HashMap;
4647
import java.util.List;
4748
import java.util.Map;
@@ -360,6 +361,21 @@ private void validateHttpUrl() {
360361
}
361362
}
362363

364+
/**
365+
* Check if the MCP server supports prompts based on its declared capabilities.
366+
*
367+
* @return true if the server declared prompt capabilities during initialization
368+
*/
369+
public boolean supportsPrompts() {
370+
try {
371+
McpSyncClient mcpClient = getClient();
372+
McpSchema.ServerCapabilities caps = mcpClient.getServerCapabilities();
373+
return caps != null && caps.prompts() != null;
374+
} catch (Exception e) {
375+
return false;
376+
}
377+
}
378+
363379
/**
364380
* List available tools from the MCP server.
365381
*
@@ -456,6 +472,9 @@ public List<Object> callTool(String toolName, Map<String, Object> arguments) {
456472
* @return List of MCPPrompt instances
457473
*/
458474
public List<MCPPrompt> listPrompts() {
475+
if (!supportsPrompts()) {
476+
return Collections.emptyList();
477+
}
459478
return getRetryExecutor()
460479
.execute(
461480
() -> {

integrations/mcp/src/test/java/org/apache/flink/agents/integrations/mcp/MCPServerTest.java

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -30,6 +30,7 @@
3030

3131
import java.time.Duration;
3232
import java.util.HashMap;
33+
import java.util.List;
3334
import java.util.Map;
3435

3536
import static com.fasterxml.jackson.databind.DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES;
@@ -270,4 +271,14 @@ void testCustomRetryConfiguration() {
270271
assertThat(server.getInitialBackoffMs()).isEqualTo(200);
271272
assertThat(server.getMaxBackoffMs()).isEqualTo(5000);
272273
}
274+
275+
@Test
276+
@DisabledOnJre(JRE.JAVA_11)
277+
@DisplayName("listPrompts returns empty list when server does not support prompts")
278+
void testListPromptsReturnsEmptyWhenNotSupported() {
279+
MCPServer server = MCPServer.builder(DEFAULT_ENDPOINT).build();
280+
281+
List<MCPPrompt> prompts = server.listPrompts();
282+
assertThat(prompts).isEmpty();
283+
}
273284
}

0 commit comments

Comments
 (0)