Skip to content

Commit 25752ee

Browse files
committed
Support an HTTP GET handler for HttpServletStatelessServerTransport
Currently, `HttpServletStatelessServerTransport` always returns `SC_METHOD_NOT_ALLOWED` for GET. With this change, consumers of the library can implement their own GET handler so that they can implement the Session semantics of the MCP protocol.
1 parent 63149b1 commit 25752ee

File tree

1 file changed

+21
-10
lines changed

1 file changed

+21
-10
lines changed

mcp-core/src/main/java/io/modelcontextprotocol/server/transport/HttpServletStatelessServerTransport.java

Lines changed: 21 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -4,16 +4,8 @@
44

55
package 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-
167
import io.modelcontextprotocol.common.McpTransportContext;
8+
import io.modelcontextprotocol.json.McpJsonMapper;
179
import io.modelcontextprotocol.server.McpStatelessServerHandler;
1810
import io.modelcontextprotocol.server.McpTransportContextExtractor;
1911
import io.modelcontextprotocol.spec.McpError;
@@ -25,8 +17,14 @@
2517
import jakarta.servlet.http.HttpServlet;
2618
import jakarta.servlet.http.HttpServletRequest;
2719
import jakarta.servlet.http.HttpServletResponse;
20+
import org.slf4j.Logger;
21+
import org.slf4j.LoggerFactory;
2822
import 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

Comments
 (0)