Class HttpServletSseServerTransportProvider
- All Implemented Interfaces:
McpServerTransportProvider,McpServerTransportProviderBase,jakarta.servlet.Servlet,jakarta.servlet.ServletConfig,Serializable
The transport handles two types of endpoints:
- SSE endpoint (/sse) - Establishes a long-lived connection for server-to-client events
- Message endpoint (configurable) - Handles client-to-server message requests
Features:
- Asynchronous message handling using Servlet 6.0 async support
- Session management for multiple client connections
- Graceful shutdown support
- Error handling and response formatting
- Author:
- Christian Tzolov, Alexandros Pappas
- See Also:
-
McpServerTransportProviderHttpServlet- Serialized Form
-
Nested Class Summary
Nested ClassesModifier and TypeClassDescriptionstatic classBuilder for creating instances of HttpServletSseServerTransportProvider. -
Field Summary
FieldsModifier and TypeFieldDescriptionstatic final Stringstatic final Stringstatic final StringDefault endpoint path for SSE connectionsstatic final StringEvent type for endpoint informationstatic final Stringstatic final StringEvent type for regular messagesstatic final StringFields inherited from class jakarta.servlet.http.HttpServlet
LEGACY_DO_HEAD -
Constructor Summary
ConstructorsConstructorDescriptionHttpServletSseServerTransportProvider(com.fasterxml.jackson.databind.ObjectMapper objectMapper, String messageEndpoint) Creates a new HttpServletSseServerTransportProvider instance with the default SSE endpoint.HttpServletSseServerTransportProvider(com.fasterxml.jackson.databind.ObjectMapper objectMapper, String messageEndpoint, String sseEndpoint) Deprecated.HttpServletSseServerTransportProvider(com.fasterxml.jackson.databind.ObjectMapper objectMapper, String baseUrl, String messageEndpoint, String sseEndpoint) Deprecated.Use the builderbuilder()instead for better configuration options.HttpServletSseServerTransportProvider(com.fasterxml.jackson.databind.ObjectMapper objectMapper, String baseUrl, String messageEndpoint, String sseEndpoint, Duration keepAliveInterval) Deprecated.Use the builderbuilder()instead for better configuration options. -
Method Summary
Modifier and TypeMethodDescriptionbuilder()Creates a new Builder instance for configuring and creating instances of HttpServletSseServerTransportProvider.reactor.core.publisher.Mono<Void>Initiates a graceful shutdown of the transport.voiddestroy()Cleans up resources when the servlet is being destroyed.protected voiddoGet(jakarta.servlet.http.HttpServletRequest request, jakarta.servlet.http.HttpServletResponse response) Handles GET requests to establish SSE connections.protected voiddoPost(jakarta.servlet.http.HttpServletRequest request, jakarta.servlet.http.HttpServletResponse response) Handles POST requests for client messages.reactor.core.publisher.Mono<Void>notifyClients(String method, Object params) Broadcasts a notification to all connected clients.Returns the protocol version supported by this transport provider.voidsetSessionFactory(McpServerSession.Factory sessionFactory) Sets the session factory for creating new sessions.Methods inherited from class jakarta.servlet.http.HttpServlet
doDelete, doHead, doOptions, doPatch, doPut, doTrace, getLastModified, init, isSensitiveHeader, service, serviceMethods inherited from class jakarta.servlet.GenericServlet
getInitParameter, getInitParameterNames, getServletConfig, getServletContext, getServletInfo, getServletName, init, log, logMethods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, waitMethods inherited from interface io.modelcontextprotocol.spec.McpServerTransportProviderBase
close
-
Field Details
-
UTF_8
- See Also:
-
APPLICATION_JSON
- See Also:
-
FAILED_TO_SEND_ERROR_RESPONSE
- See Also:
-
DEFAULT_SSE_ENDPOINT
Default endpoint path for SSE connections- See Also:
-
MESSAGE_EVENT_TYPE
Event type for regular messages- See Also:
-
ENDPOINT_EVENT_TYPE
Event type for endpoint information- See Also:
-
DEFAULT_BASE_URL
- See Also:
-
-
Constructor Details
-
HttpServletSseServerTransportProvider
@Deprecated public HttpServletSseServerTransportProvider(com.fasterxml.jackson.databind.ObjectMapper objectMapper, String messageEndpoint, String sseEndpoint) Deprecated.Use the builderbuilder()instead for better configuration options.Creates a new HttpServletSseServerTransportProvider instance with a custom SSE endpoint.- Parameters:
objectMapper- The JSON object mapper to use for message serialization/deserializationmessageEndpoint- The endpoint path where clients will send their messagessseEndpoint- The endpoint path where clients will establish SSE connections
-
HttpServletSseServerTransportProvider
@Deprecated public HttpServletSseServerTransportProvider(com.fasterxml.jackson.databind.ObjectMapper objectMapper, String baseUrl, String messageEndpoint, String sseEndpoint) Deprecated.Use the builderbuilder()instead for better configuration options.Creates a new HttpServletSseServerTransportProvider instance with a custom SSE endpoint.- Parameters:
objectMapper- The JSON object mapper to use for message serialization/deserializationbaseUrl- The base URL for the server transportmessageEndpoint- The endpoint path where clients will send their messagessseEndpoint- The endpoint path where clients will establish SSE connections
-
HttpServletSseServerTransportProvider
@Deprecated public HttpServletSseServerTransportProvider(com.fasterxml.jackson.databind.ObjectMapper objectMapper, String baseUrl, String messageEndpoint, String sseEndpoint, Duration keepAliveInterval) Deprecated.Use the builderbuilder()instead for better configuration options.Creates a new HttpServletSseServerTransportProvider instance with a custom SSE endpoint.- Parameters:
objectMapper- The JSON object mapper to use for message serialization/deserializationbaseUrl- The base URL for the server transportmessageEndpoint- The endpoint path where clients will send their messagessseEndpoint- The endpoint path where clients will establish SSE connectionskeepAliveInterval- The interval for keep-alive pings, or null to disable keep-alive functionality
-
HttpServletSseServerTransportProvider
public HttpServletSseServerTransportProvider(com.fasterxml.jackson.databind.ObjectMapper objectMapper, String messageEndpoint) Creates a new HttpServletSseServerTransportProvider instance with the default SSE endpoint.- Parameters:
objectMapper- The JSON object mapper to use for message serialization/deserializationmessageEndpoint- The endpoint path where clients will send their messages
-
-
Method Details
-
protocolVersion
Description copied from interface:McpServerTransportProviderBaseReturns the protocol version supported by this transport provider.- Specified by:
protocolVersionin interfaceMcpServerTransportProviderBase- Returns:
- the protocol version as a string
-
setSessionFactory
Sets the session factory for creating new sessions.- Specified by:
setSessionFactoryin interfaceMcpServerTransportProvider- Parameters:
sessionFactory- The session factory to use
-
notifyClients
Broadcasts a notification to all connected clients.- Specified by:
notifyClientsin interfaceMcpServerTransportProviderBase- Parameters:
method- The method name for the notificationparams- The parameters for the notification- Returns:
- A Mono that completes when the broadcast attempt is finished
- See Also:
-
doGet
protected void doGet(jakarta.servlet.http.HttpServletRequest request, jakarta.servlet.http.HttpServletResponse response) throws jakarta.servlet.ServletException, IOException Handles GET requests to establish SSE connections.This method sets up a new SSE connection when a client connects to the SSE endpoint. It configures the response headers for SSE, creates a new session, and sends the initial endpoint information to the client.
- Overrides:
doGetin classjakarta.servlet.http.HttpServlet- Parameters:
request- The HTTP servlet requestresponse- The HTTP servlet response- Throws:
jakarta.servlet.ServletException- If a servlet-specific error occursIOException- If an I/O error occurs
-
doPost
protected void doPost(jakarta.servlet.http.HttpServletRequest request, jakarta.servlet.http.HttpServletResponse response) throws jakarta.servlet.ServletException, IOException Handles POST requests for client messages.This method processes incoming messages from clients, routes them through the session handler, and sends back the appropriate response. It handles error cases and formats error responses according to the MCP specification.
- Overrides:
doPostin classjakarta.servlet.http.HttpServlet- Parameters:
request- The HTTP servlet requestresponse- The HTTP servlet response- Throws:
jakarta.servlet.ServletException- If a servlet-specific error occursIOException- If an I/O error occurs
-
closeGracefully
Initiates a graceful shutdown of the transport.This method marks the transport as closing and closes all active client sessions. New connection attempts will be rejected during shutdown.
- Specified by:
closeGracefullyin interfaceMcpServerTransportProviderBase- Returns:
- A Mono that completes when all sessions have been closed
-
destroy
public void destroy()Cleans up resources when the servlet is being destroyed.This method ensures a graceful shutdown by closing all client connections before calling the parent's destroy method.
- Specified by:
destroyin interfacejakarta.servlet.Servlet- Overrides:
destroyin classjakarta.servlet.GenericServlet
-
builder
Creates a new Builder instance for configuring and creating instances of HttpServletSseServerTransportProvider.- Returns:
- A new Builder instance
-
builder()instead for better configuration options.