diff --git a/mcp/mcp-server/src/main/java/software/amazon/smithy/java/mcp/server/McpService.java b/mcp/mcp-server/src/main/java/software/amazon/smithy/java/mcp/server/McpService.java index c0440710a..176d9d2a1 100644 --- a/mcp/mcp-server/src/main/java/software/amazon/smithy/java/mcp/server/McpService.java +++ b/mcp/mcp-server/src/main/java/software/amazon/smithy/java/mcp/server/McpService.java @@ -135,6 +135,7 @@ public JsonRpcResponse handleRequest( var method = req.getMethod(); return switch (method) { case "initialize" -> handleInitialize(req); + case "ping" -> handlePing(req); default -> { initializeProxies(rpcResponse -> {}); yield switch (method) { @@ -218,6 +219,14 @@ private JsonRpcResponse handleInitialize(JsonRpcRequest req) { return createSuccessResponse(req.getId(), result); } + private JsonRpcResponse handlePing(JsonRpcRequest req) { + return JsonRpcResponse.builder() + .id(req.getId()) + .result(Document.of(Map.of())) + .jsonrpc("2.0") + .build(); + } + private JsonRpcResponse handlePromptsList(JsonRpcRequest req) { var result = ListPromptsResult.builder() .prompts(prompts.values().stream().map(Prompt::promptInfo).toList()) diff --git a/mcp/mcp-server/src/test/java/software/amazon/smithy/java/mcp/server/McpServerTest.java b/mcp/mcp-server/src/test/java/software/amazon/smithy/java/mcp/server/McpServerTest.java index 2a885b339..aab97592a 100644 --- a/mcp/mcp-server/src/test/java/software/amazon/smithy/java/mcp/server/McpServerTest.java +++ b/mcp/mcp-server/src/test/java/software/amazon/smithy/java/mcp/server/McpServerTest.java @@ -78,6 +78,36 @@ private void initializeWithProtocolVersion(ProtocolVersion protocolVersion) { assertEquals(expectedPv, pv); } + @Test + public void testPing() { + server = McpServer.builder() + .name("smithy-mcp-server") + .input(input) + .output(output) + .addService("test-mcp", + ProxyService.builder() + .service(ShapeId.from("smithy.test#TestService")) + .proxyEndpoint("http://localhost") + .model(MODEL) + .build()) + .build(); + + server.start(); + + write("ping", Document.of(Map.of()), Document.of(42)); + var response = read(); + assertEquals(42, response.getId().asNumber().intValue()); + assertNotNull(response.getResult()); + assertTrue(response.getResult().asStringMap().isEmpty()); + assertEquals("2.0", response.getJsonrpc()); + + write("ping", Document.of(Map.of()), Document.of("ping-id")); + response = read(); + assertEquals("ping-id", response.getId().asString()); + assertNotNull(response.getResult()); + assertTrue(response.getResult().asStringMap().isEmpty()); + } + @Test public void noOutputSchemaWithUnsupportedProtocolVersion() { server = McpServer.builder()