44
55package io .modelcontextprotocol .server .transport ;
66
7- import java .io .BufferedReader ;
8- import java .io .IOException ;
9- import java .io .PrintWriter ;
10-
11- import org .slf4j .Logger ;
12- import org .slf4j .LoggerFactory ;
13-
14- import io .modelcontextprotocol .json .McpJsonMapper ;
15-
167import io .modelcontextprotocol .common .McpTransportContext ;
8+ import io .modelcontextprotocol .json .McpJsonMapper ;
179import io .modelcontextprotocol .server .McpStatelessServerHandler ;
1810import io .modelcontextprotocol .server .McpTransportContextExtractor ;
1911import io .modelcontextprotocol .spec .McpError ;
2517import jakarta .servlet .http .HttpServlet ;
2618import jakarta .servlet .http .HttpServletRequest ;
2719import jakarta .servlet .http .HttpServletResponse ;
20+ import org .slf4j .Logger ;
21+ import org .slf4j .LoggerFactory ;
2822import reactor .core .publisher .Mono ;
2923
24+ import java .io .BufferedReader ;
25+ import java .io .IOException ;
26+ import java .io .PrintWriter ;
27+
3028/**
3129 * Implementation of an HttpServlet based {@link McpStatelessServerTransport}.
3230 *
@@ -58,6 +56,9 @@ public class HttpServletStatelessServerTransport extends HttpServlet implements
5856
5957 private volatile boolean isClosing = false ;
6058
59+ private volatile GetHandler getHandler = (request , response ) -> response
60+ .sendError (HttpServletResponse .SC_METHOD_NOT_ALLOWED );
61+
6162 private HttpServletStatelessServerTransport (McpJsonMapper jsonMapper , String mcpEndpoint ,
6263 McpTransportContextExtractor <HttpServletRequest > contextExtractor ) {
6364 Assert .notNull (jsonMapper , "jsonMapper must not be null" );
@@ -79,6 +80,16 @@ public Mono<Void> closeGracefully() {
7980 return Mono .fromRunnable (() -> this .isClosing = true );
8081 }
8182
83+ public void setGetHandler (GetHandler getHandler ) {
84+ this .getHandler = getHandler ;
85+ }
86+
87+ public interface GetHandler {
88+
89+ void doGet (HttpServletRequest request , HttpServletResponse response ) throws ServletException , IOException ;
90+
91+ }
92+
8293 /**
8394 * Handles GET requests - returns 405 METHOD NOT ALLOWED as stateless transport
8495 * doesn't support GET requests.
@@ -97,7 +108,7 @@ protected void doGet(HttpServletRequest request, HttpServletResponse response)
97108 return ;
98109 }
99110
100- response . sendError ( HttpServletResponse . SC_METHOD_NOT_ALLOWED );
111+ getHandler . doGet ( request , response );
101112 }
102113
103114 /**
0 commit comments