Class WebRxSseServerTransportProvider
java.lang.Object
io.modelcontextprotocol.server.transport.WebRxSseServerTransportProvider
- All Implemented Interfaces:
io.modelcontextprotocol.spec.McpServerTransportProvider
public class WebRxSseServerTransportProvider
extends Object
implements io.modelcontextprotocol.spec.McpServerTransportProvider
Server-side implementation of the MCP (Model Context Protocol) HTTP transport using
Server-Sent Events (SSE). This implementation provides a bidirectional communication
channel between MCP clients and servers using HTTP POST for client-to-server messages
and SSE for server-to-client messages.
Key features:
- Implements the
McpServerTransportProviderinterface that allows managingMcpServerSessioninstances and enabling their communication with theMcpServerTransportabstraction. - Uses WebFlux for non-blocking request handling and SSE support
- Maintains client sessions for reliable message delivery
- Supports graceful shutdown with session cleanup
- Thread-safe message broadcasting to multiple clients
The transport sets up two main endpoints:
- SSE endpoint (/sse) - For establishing SSE connections with clients
- Message endpoint (configurable) - For receiving JSON-RPC messages from clients
This implementation is thread-safe and can handle multiple concurrent client
connections. It uses ConcurrentHashMap for session management and Project
Reactor's non-blocking APIs for message processing and delivery.
- Author:
- Christian Tzolov, Alexandros Pappas, Dariusz Jędrzejczyk, noear
- See Also:
-
McpServerTransportSseEvent
-
Nested Class Summary
Nested ClassesModifier and TypeClassDescriptionstatic classBuilder for creating instances ofWebRxSseServerTransportProvider. -
Field Summary
Fields -
Constructor Summary
ConstructorsConstructorDescriptionWebRxSseServerTransportProvider(com.fasterxml.jackson.databind.ObjectMapper objectMapper, String messageEndpoint) Constructs a new WebFlux SSE server transport provider instance with the default SSE endpoint.WebRxSseServerTransportProvider(com.fasterxml.jackson.databind.ObjectMapper objectMapper, String messageEndpoint, String sseEndpoint) Constructs a new WebFlux SSE server transport provider instance. -
Method Summary
Modifier and TypeMethodDescriptionbuilder()reactor.core.publisher.Mono<Void>Initiates a graceful shutdown of all the sessions.reactor.core.publisher.Mono<Void>notifyClients(String method, Object params) Broadcasts a JSON-RPC message to all connected clients through their SSE connections.voidsetSessionFactory(io.modelcontextprotocol.spec.McpServerSession.Factory sessionFactory) voidtoHttpHandler(org.noear.solon.SolonApp app) Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, waitMethods inherited from interface io.modelcontextprotocol.spec.McpServerTransportProvider
close
-
Field Details
-
MESSAGE_EVENT_TYPE
Event type for JSON-RPC messages sent through the SSE connection.- See Also:
-
ENDPOINT_EVENT_TYPE
Event type for sending the message endpoint URI to clients.- See Also:
-
DEFAULT_SSE_ENDPOINT
Default SSE endpoint path as specified by the MCP transport specification.- See Also:
-
-
Constructor Details
-
WebRxSseServerTransportProvider
public WebRxSseServerTransportProvider(com.fasterxml.jackson.databind.ObjectMapper objectMapper, String messageEndpoint, String sseEndpoint) Constructs a new WebFlux SSE server transport provider instance.- Parameters:
objectMapper- The ObjectMapper to use for JSON serialization/deserialization of MCP messages. Must not be null.messageEndpoint- The endpoint URI where clients should send their JSON-RPC messages. This endpoint will be communicated to clients during SSE connection setup. Must not be null.- Throws:
IllegalArgumentException- if either parameter is null
-
WebRxSseServerTransportProvider
public WebRxSseServerTransportProvider(com.fasterxml.jackson.databind.ObjectMapper objectMapper, String messageEndpoint) Constructs a new WebFlux SSE server transport provider instance with the default SSE endpoint.- Parameters:
objectMapper- The ObjectMapper to use for JSON serialization/deserialization of MCP messages. Must not be null.messageEndpoint- The endpoint URI where clients should send their JSON-RPC messages. This endpoint will be communicated to clients during SSE connection setup. Must not be null.- Throws:
IllegalArgumentException- if either parameter is null
-
-
Method Details
-
toHttpHandler
public void toHttpHandler(org.noear.solon.SolonApp app) -
setSessionFactory
public void setSessionFactory(io.modelcontextprotocol.spec.McpServerSession.Factory sessionFactory) - Specified by:
setSessionFactoryin interfaceio.modelcontextprotocol.spec.McpServerTransportProvider
-
notifyClients
Broadcasts a JSON-RPC message to all connected clients through their SSE connections. The message is serialized to JSON and sent as a server-sent event to each active session.The method:
- Serializes the message to JSON
- Creates a server-sent event with the message data
- Attempts to send the event to all active sessions
- Tracks and reports any delivery failures
- Specified by:
notifyClientsin interfaceio.modelcontextprotocol.spec.McpServerTransportProvider- Parameters:
method- The JSON-RPC method to send to clientsparams- The method parameters to send to clients- Returns:
- A Mono that completes when the message has been sent to all sessions, or errors if any session fails to receive the message
-
closeGracefully
Initiates a graceful shutdown of all the sessions. This method ensures all active sessions are properly closed and cleaned up.The shutdown process:
- Marks the transport as closing to prevent new connections
- Closes each active session
- Removes closed sessions from the sessions map
- Times out after 5 seconds if shutdown takes too long
- Specified by:
closeGracefullyin interfaceio.modelcontextprotocol.spec.McpServerTransportProvider- Returns:
- A Mono that completes when all sessions have been closed
-
builder
-