Skip to content

Commit a3ddb75

Browse files
committed
WIP: make it compile
Signed-off-by: Dariusz Jędrzejczyk <[email protected]>
1 parent 1645ecb commit a3ddb75

File tree

5 files changed

+50
-37
lines changed

5 files changed

+50
-37
lines changed

mcp-spring/mcp-spring-webflux/src/main/java/io/modelcontextprotocol/server/transport/WebFluxSseServerTransportProvider.java

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -10,7 +10,6 @@
1010
import io.modelcontextprotocol.spec.McpServerSession;
1111
import io.modelcontextprotocol.spec.McpServerTransport;
1212
import io.modelcontextprotocol.spec.McpServerTransportProvider;
13-
import io.modelcontextprotocol.spec.McpSingleSessionServerTransportProvider;
1413
import io.modelcontextprotocol.util.Assert;
1514
import org.slf4j.Logger;
1615
import org.slf4j.LoggerFactory;
@@ -63,7 +62,7 @@
6362
* @see McpServerTransport
6463
* @see ServerSentEvent
6564
*/
66-
public class WebFluxSseServerTransportProvider implements McpSingleSessionServerTransportProvider {
65+
public class WebFluxSseServerTransportProvider implements McpServerTransportProvider {
6766

6867
private static final Logger logger = LoggerFactory.getLogger(WebFluxSseServerTransportProvider.class);
6968

mcp-spring/mcp-spring-webflux/src/main/java/io/modelcontextprotocol/server/transport/WebFluxStreamableServerTransportProvider.java

Lines changed: 46 additions & 29 deletions
Original file line numberDiff line numberDiff line change
@@ -193,7 +193,8 @@ private Mono<ServerResponse> handleGet(ServerRequest request) {
193193

194194
return Mono.defer(() -> {
195195
if (!request.headers().asHttpHeaders().containsKey("mcp-session-id")) {
196-
return ServerResponse.badRequest().build(); // TODO: say we need a session id
196+
return ServerResponse.badRequest().build(); // TODO: say we need a session
197+
// id
197198
}
198199

199200
String sessionId = request.headers().asHttpHeaders().getFirst("mcp-session-id");
@@ -206,15 +207,20 @@ private Mono<ServerResponse> handleGet(ServerRequest request) {
206207

207208
if (request.headers().asHttpHeaders().containsKey("mcp-last-id")) {
208209
String lastId = request.headers().asHttpHeaders().getFirst("mcp-last-id");
209-
return ServerResponse.ok().contentType(MediaType.TEXT_EVENT_STREAM).body(session.replay(lastId), ServerSentEvent.class);
210+
return ServerResponse.ok()
211+
.contentType(MediaType.TEXT_EVENT_STREAM)
212+
.body(session.replay(lastId), ServerSentEvent.class);
210213
}
211214

212-
return ServerResponse.ok().contentType(MediaType.TEXT_EVENT_STREAM)
213-
.body(Flux.<ServerSentEvent<?>>create(sink -> {
214-
WebFluxStreamableMcpSessionTransport sessionTransport = new WebFluxStreamableMcpSessionTransport(sink);
215-
McpStreamableServerSession.McpStreamableServerSessionStream listeningStream = session.listeningStream(sessionTransport);
216-
sink.onDispose(listeningStream::close);
217-
}), ServerSentEvent.class);
215+
return ServerResponse.ok()
216+
.contentType(MediaType.TEXT_EVENT_STREAM)
217+
.body(Flux.<ServerSentEvent<?>>create(sink -> {
218+
WebFluxStreamableMcpSessionTransport sessionTransport = new WebFluxStreamableMcpSessionTransport(
219+
sink);
220+
McpStreamableServerSession.McpStreamableServerSessionStream listeningStream = session
221+
.listeningStream(sessionTransport);
222+
sink.onDispose(listeningStream::close);
223+
}), ServerSentEvent.class);
218224

219225
}).contextWrite(ctx -> ctx.put(McpTransportContext.KEY, transportContext));
220226
}
@@ -244,11 +250,18 @@ private Mono<ServerResponse> handlePost(ServerRequest request) {
244250
return request.bodyToMono(String.class).<ServerResponse>flatMap(body -> {
245251
try {
246252
McpSchema.JSONRPCMessage message = McpSchema.deserializeJsonRpcMessage(objectMapper, body);
247-
if (message instanceof McpSchema.JSONRPCRequest jsonrpcRequest && jsonrpcRequest.method().equals(McpSchema.METHOD_INITIALIZE)) {
248-
McpSchema.InitializeRequest initializeRequest = objectMapper.convertValue(jsonrpcRequest.params(), new TypeReference<McpSchema.InitializeRequest>() {});
249-
McpStreamableServerSession.McpStreamableServerSessionInit init = this.sessionFactory.startSession(initializeRequest);
253+
if (message instanceof McpSchema.JSONRPCRequest jsonrpcRequest
254+
&& jsonrpcRequest.method().equals(McpSchema.METHOD_INITIALIZE)) {
255+
McpSchema.InitializeRequest initializeRequest = objectMapper.convertValue(jsonrpcRequest.params(),
256+
new TypeReference<McpSchema.InitializeRequest>() {
257+
});
258+
McpStreamableServerSession.McpStreamableServerSessionInit init = this.sessionFactory
259+
.startSession(initializeRequest);
250260
sessions.put(init.session().getId(), init.session());
251-
return init.initResult().flatMap(initResult -> ServerResponse.ok().header("mcp-session-id", init.session().getId()).bodyValue(initResult));
261+
return init.initResult()
262+
.flatMap(initResult -> ServerResponse.ok()
263+
.header("mcp-session-id", init.session().getId())
264+
.bodyValue(initResult));
252265
}
253266

254267
if (!request.headers().asHttpHeaders().containsKey("sessionId")) {
@@ -260,26 +273,30 @@ private Mono<ServerResponse> handlePost(ServerRequest request) {
260273

261274
if (session == null) {
262275
return ServerResponse.status(HttpStatus.NOT_FOUND)
263-
.bodyValue(new McpError("Session not found: " + sessionId));
276+
.bodyValue(new McpError("Session not found: " + sessionId));
264277
}
265278

266279
if (message instanceof McpSchema.JSONRPCResponse jsonrpcResponse) {
267280
return session.accept(jsonrpcResponse).then(ServerResponse.accepted().build());
268-
} else if (message instanceof McpSchema.JSONRPCNotification jsonrpcNotification) {
281+
}
282+
else if (message instanceof McpSchema.JSONRPCNotification jsonrpcNotification) {
269283
return session.accept(jsonrpcNotification).then(ServerResponse.accepted().build());
270-
} else if (message instanceof McpSchema.JSONRPCRequest jsonrpcRequest) {
271-
return ServerResponse.ok().contentType(MediaType.TEXT_EVENT_STREAM)
272-
.body(Flux.<ServerSentEvent<?>>create(sink -> {
273-
WebFluxStreamableMcpSessionTransport st = new WebFluxStreamableMcpSessionTransport(sink);
274-
Mono<Void> stream = session.responseStream(jsonrpcRequest, st);
275-
Disposable streamSubscription = stream
276-
.doOnError(err -> sink.error(err))
277-
.contextWrite(sink.contextView())
278-
.subscribe();
279-
sink.onCancel(streamSubscription);
280-
}), ServerSentEvent.class);
281-
} else {
282-
return ServerResponse.status(HttpStatus.INTERNAL_SERVER_ERROR).bodyValue(new McpError("Unknown message type"));
284+
}
285+
else if (message instanceof McpSchema.JSONRPCRequest jsonrpcRequest) {
286+
return ServerResponse.ok()
287+
.contentType(MediaType.TEXT_EVENT_STREAM)
288+
.body(Flux.<ServerSentEvent<?>>create(sink -> {
289+
WebFluxStreamableMcpSessionTransport st = new WebFluxStreamableMcpSessionTransport(sink);
290+
Mono<Void> stream = session.responseStream(jsonrpcRequest, st);
291+
Disposable streamSubscription = stream.doOnError(err -> sink.error(err))
292+
.contextWrite(sink.contextView())
293+
.subscribe();
294+
sink.onCancel(streamSubscription);
295+
}), ServerSentEvent.class);
296+
}
297+
else {
298+
return ServerResponse.status(HttpStatus.INTERNAL_SERVER_ERROR)
299+
.bodyValue(new McpError("Unknown message type"));
283300
}
284301
}
285302
catch (IllegalArgumentException | IOException e) {
@@ -393,8 +410,8 @@ public Builder messageEndpoint(String messageEndpoint) {
393410
}
394411

395412
/**
396-
* Builds a new instance of {@link WebFluxStreamableServerTransportProvider} with the
397-
* configured settings.
413+
* Builds a new instance of {@link WebFluxStreamableServerTransportProvider} with
414+
* the configured settings.
398415
* @return A new WebFluxSseServerTransportProvider instance
399416
* @throws IllegalStateException if required parameters are not set
400417
*/

mcp-spring/mcp-spring-webmvc/src/main/java/io/modelcontextprotocol/server/transport/WebMvcSseServerTransportProvider.java

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -16,7 +16,6 @@
1616
import io.modelcontextprotocol.spec.McpServerTransport;
1717
import io.modelcontextprotocol.spec.McpServerTransportProvider;
1818
import io.modelcontextprotocol.spec.McpServerSession;
19-
import io.modelcontextprotocol.spec.McpSingleSessionServerTransportProvider;
2019
import io.modelcontextprotocol.util.Assert;
2120
import org.slf4j.Logger;
2221
import org.slf4j.LoggerFactory;
@@ -66,7 +65,7 @@
6665
* @see McpServerTransportProvider
6766
* @see RouterFunction
6867
*/
69-
public class WebMvcSseServerTransportProvider implements McpSingleSessionServerTransportProvider {
68+
public class WebMvcSseServerTransportProvider implements McpServerTransportProvider {
7069

7170
private static final Logger logger = LoggerFactory.getLogger(WebMvcSseServerTransportProvider.class);
7271

mcp/src/main/java/io/modelcontextprotocol/server/transport/StdioServerTransportProvider.java

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -22,7 +22,6 @@
2222
import io.modelcontextprotocol.spec.McpServerSession;
2323
import io.modelcontextprotocol.spec.McpServerTransport;
2424
import io.modelcontextprotocol.spec.McpServerTransportProvider;
25-
import io.modelcontextprotocol.spec.McpSingleSessionServerTransportProvider;
2625
import io.modelcontextprotocol.util.Assert;
2726
import org.slf4j.Logger;
2827
import org.slf4j.LoggerFactory;
@@ -39,7 +38,7 @@
3938
*
4039
* @author Christian Tzolov
4140
*/
42-
public class StdioServerTransportProvider implements McpSingleSessionServerTransportProvider {
41+
public class StdioServerTransportProvider implements McpServerTransportProvider {
4342

4443
private static final Logger logger = LoggerFactory.getLogger(StdioServerTransportProvider.class);
4544

mcp/src/test/java/io/modelcontextprotocol/MockMcpServerTransportProvider.java

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -19,13 +19,12 @@
1919
import io.modelcontextprotocol.spec.McpServerSession;
2020
import io.modelcontextprotocol.spec.McpServerSession.Factory;
2121
import io.modelcontextprotocol.spec.McpServerTransportProvider;
22-
import io.modelcontextprotocol.spec.McpSingleSessionServerTransportProvider;
2322
import reactor.core.publisher.Mono;
2423

2524
/**
2625
* @author Christian Tzolov
2726
*/
28-
public class MockMcpServerTransportProvider implements McpSingleSessionServerTransportProvider {
27+
public class MockMcpServerTransportProvider implements McpServerTransportProvider {
2928

3029
private McpServerSession session;
3130

0 commit comments

Comments
 (0)