diff --git a/mcp-spring/mcp-spring-webflux/README.md b/mcp-spring/mcp-spring-webflux/README.md index e701e41e..c70146e6 100644 --- a/mcp-spring/mcp-spring-webflux/README.md +++ b/mcp-spring/mcp-spring-webflux/README.md @@ -8,48 +8,51 @@ ``` ```java -String MESSAGE_ENDPOINT = "/mcp/message"; +import io.modelcontextprotocol.server.McpAsyncServer; +import io.modelcontextprotocol.server.McpServer; +import io.modelcontextprotocol.server.transport.WebFluxSseServerTransportProvider; +import io.modelcontextprotocol.spec.McpSchema; +import io.modelcontextprotocol.spec.McpServerTransportProvider; +import org.springframework.context.annotation.Bean; +import org.springframework.context.annotation.Configuration; +import org.springframework.web.reactive.function.server.RouterFunction; @Configuration -static class MyConfig { - +public class MyConfig { // SSE transport - @Bean - public WebFluxSseServerTransport sseServerTransport() { - return new WebFluxSseServerTransport(new ObjectMapper(), "/mcp/message"); - } - - // Router function for SSE transport used by Spring WebFlux to start an HTTP - // server. - @Bean - public RouterFunction mcpRouterFunction(WebFluxSseServerTransport transport) { - return transport.getRouterFunction(); - } - - @Bean - public McpAsyncServer mcpServer(ServerMcpTransport transport, OpenLibrary openLibrary) { - - // Configure server capabilities with resource support - var capabilities = McpSchema.ServerCapabilities.builder() - .resources(false, true) // No subscribe support, but list changes notifications - .tools(true) // Tool support with list changes notifications - .prompts(true) // Prompt support with list changes notifications - .logging() // Logging support - .build(); - - // Create the server with both tool and resource capabilities - var server = McpServer.using(transport) - .serverInfo("MCP Demo Server", "1.0.0") - .capabilities(capabilities) - .resources(systemInfoResourceRegistration()) - .prompts(greetingPromptRegistration()) - .tools(openLibraryToolRegistrations(openLibrary)) - .async(); - - return server; - } - - // ... - + @Bean + public WebFluxSseServerTransportProvider sseServerTransportProvider() { + return WebFluxSseServerTransportProvider.builder() + .messageEndpoint("/mcp/message") + .sseEndpoint("/mcp") + .build(); + } + + // Router function for SSE transport used by Spring WebFlux to start an HTTP + // server. + @Bean + public RouterFunction mcpRouterFunction(WebFluxSseServerTransportProvider transport) { + return transport.getRouterFunction(); + } + + @Bean + public McpAsyncServer mcpServer(McpServerTransportProvider transport, OpenLibrary openLibrary) { + // Configure server capabilities with resource support + var capabilities = McpSchema.ServerCapabilities.builder() + .resources(false, true) // No subscribe support, but list changes notifications + .tools(true) // Tool support with list changes notifications + .prompts(true) // Prompt support with list changes notifications + .logging() // Logging support + .build(); + + // Create the server with both tool and resource capabilities + return McpServer.async(transport) + .serverInfo("MCP Demo Server", "1.0.0") + .capabilities(capabilities) + .resources(systemInfoResourceRegistration()) + .prompts(greetingPromptRegistration()) + .tools(openLibraryToolRegistrations(openLibrary)) + .build(); + } } ```