Skip to content

Commit 5f56153

Browse files
committed
修改transport类null返回值
1 parent 22a4a30 commit 5f56153

File tree

3 files changed

+26
-27
lines changed

3 files changed

+26
-27
lines changed

framework/fel/java/plugins/tool-mcp-server/README.md

Lines changed: 4 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -3,10 +3,9 @@
33
## 文档概述
44

55
本文档用于记录 `FitMcpStreamableServerTransportProvider` 类的设计、实现细节以及维护更新指南。该类是基于 MCP SDK 中的
6-
`WebMvcStreamableServerTransportProvider` 类改造而来,用于在 FIT 框架中提供 MCP(Model Context Protocol)服务端的传输层实现。
6+
`HttpServletStreamableServerTransportProvider` 类改造而来,用于在 FIT 框架中提供 MCP(Model Context Protocol)服务端的传输层实现。
77

8-
**原始参考类**: MCP SDK 中的 `WebMvcStreamableServerTransportProvider` (或
9-
`HttpServletStreamableServerTransportProvider`)
8+
**原始参考类**: MCP SDK 中的 `HttpServletStreamableServerTransportProvider`
109

1110
**创建时间**: 2025-11-04
1211

@@ -86,7 +85,7 @@
8685

8786
## SDK 原始逻辑
8887

89-
以下是从 MCP SDK 的 `WebMvcStreamableServerTransportProvider` 类保留的原始逻辑:
88+
以下是从 MCP SDK 的 `HttpServletStreamableServerTransportProvider` 类保留的原始逻辑:
9089

9190
### 1. 会话管理核心逻辑
9291

@@ -181,7 +180,7 @@ public Mono<Void> closeGracefully() {
181180

182181
### 2. SSE 实现改造(核心改造)
183182

184-
**原始 SDK (Spring MVC)**:
183+
**原始 SDK**:
185184

186185
```java
187186
SseEmitter sseEmitter = new SseEmitter();

framework/fel/java/plugins/tool-mcp-server/src/main/java/modelengine/fel/tool/mcp/server/transport/FitMcpStreamableServerTransportProvider.java

Lines changed: 21 additions & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -46,7 +46,8 @@
4646

4747
/**
4848
* The default implementation of {@link McpStreamableServerTransportProvider}.
49-
* The FIT transport provider for MCP Server, according to {@code WebMvcStreamableServerTransportProvider} in MCP SDK.
49+
* The FIT transport provider for MCP Server, according to {@code HttpServletStreamableServerTransportProvider} in MCP
50+
* SDK.
5051
*
5152
* @author 黄可欣
5253
* @since 2025-09-30
@@ -143,7 +144,7 @@ public Mono<Void> notifyClients(String method, Object params) {
143144
try {
144145
session.sendNotification(method, params).block();
145146
} catch (Exception e) {
146-
logger.error("Failed to send message to session {}: {}", session.getId(), e.getMessage());
147+
logger.error("Failed to send message to session {}: {}", session.getId(), e.getMessage(), e);
147148
}
148149
});
149150
});
@@ -164,7 +165,7 @@ public Mono<Void> closeGracefully() {
164165
try {
165166
session.closeGracefully().block();
166167
} catch (Exception e) {
167-
logger.error("Failed to close session {}: {}", session.getId(), e.getMessage());
168+
logger.error("Failed to close session {}: {}", session.getId(), e.getMessage(), e);
168169
}
169170
});
170171

@@ -219,7 +220,7 @@ public Object handleGet(HttpClassicServerRequest request, HttpClassicServerRespo
219220
}
220221
});
221222
} catch (Exception e) {
222-
logger.error("Failed to handle GET request for session {}: {}", sessionId, e.getMessage());
223+
logger.error("Failed to handle GET request for session {}: {}", sessionId, e.getMessage(), e);
223224
response.statusCode(HttpResponseStatus.INTERNAL_SERVER_ERROR.statusCode());
224225
return null;
225226
}
@@ -266,9 +267,11 @@ public Object handlePost(HttpClassicServerRequest request, HttpClassicServerResp
266267

267268
// Handle JSONRPCMessage
268269
if (message instanceof McpSchema.JSONRPCResponse jsonrpcResponse) {
269-
return handleJsonRpcResponse(jsonrpcResponse, session, transportContext, response);
270+
handleJsonRpcResponse(jsonrpcResponse, session, transportContext, response);
271+
return null;
270272
} else if (message instanceof McpSchema.JSONRPCNotification jsonrpcNotification) {
271-
return handleJsonRpcNotification(jsonrpcNotification, session, transportContext, response);
273+
handleJsonRpcNotification(jsonrpcNotification, session, transportContext, response);
274+
return null;
272275
} else if (message instanceof McpSchema.JSONRPCRequest jsonrpcRequest) {
273276
return handleJsonRpcRequest(jsonrpcRequest, session, sessionId, transportContext, response);
274277
} else {
@@ -277,12 +280,12 @@ public Object handlePost(HttpClassicServerRequest request, HttpClassicServerResp
277280
McpError.builder(McpSchema.ErrorCodes.INTERNAL_ERROR).message("Unknown message type").build());
278281
}
279282
} catch (IllegalArgumentException | IOException e) {
280-
logger.error("Failed to deserialize message: {}", e.getMessage());
283+
logger.error("Failed to deserialize message: {}", e.getMessage(), e);
281284
response.statusCode(HttpResponseStatus.BAD_REQUEST.statusCode());
282285
return Entity.createObject(response,
283286
McpError.builder(McpSchema.ErrorCodes.PARSE_ERROR).message("Invalid message format").build());
284287
} catch (Exception e) {
285-
logger.error("Error handling message: {}", e.getMessage());
288+
logger.error("Error handling message: {}", e.getMessage(), e);
286289
response.statusCode(HttpResponseStatus.INTERNAL_SERVER_ERROR.statusCode());
287290
return Entity.createObject(response,
288291
McpError.builder(McpSchema.ErrorCodes.INTERNAL_ERROR).message(e.getMessage()).build());
@@ -323,7 +326,7 @@ public Object handleDelete(HttpClassicServerRequest request, HttpClassicServerRe
323326
response.statusCode(HttpResponseStatus.OK.statusCode());
324327
return null;
325328
} catch (Exception e) {
326-
logger.error("Failed to delete session {}: {}", sessionId, e.getMessage());
329+
logger.error("Failed to delete session {}: {}", sessionId, e.getMessage(), e);
327330
response.statusCode(HttpResponseStatus.INTERNAL_SERVER_ERROR.statusCode());
328331
return Entity.createObject(response,
329332
McpError.builder(McpSchema.ErrorCodes.INTERNAL_ERROR).message(e.getMessage()).build());
@@ -423,12 +426,12 @@ private void handleReplaySseRequest(HttpClassicServerRequest request, McpTranspo
423426
.contextWrite(ctx -> ctx.put(McpTransportContext.KEY, transportContext))
424427
.block();
425428
} catch (Exception e) {
426-
logger.error("Failed to replay message: {}", e.getMessage());
429+
logger.error("Failed to replay message: {}", e.getMessage(), e);
427430
emitter.fail(e);
428431
}
429432
});
430433
} catch (Exception e) {
431-
logger.error("Failed to replay messages: {}", e.getMessage());
434+
logger.error("Failed to replay messages: {}", e.getMessage(), e);
432435
emitter.fail(e);
433436
}
434437
}
@@ -507,7 +510,7 @@ private Object handleInitializeRequest(HttpClassicServerRequest request, HttpCla
507510
return Entity.createObject(response,
508511
new McpSchema.JSONRPCResponse(McpSchema.JSONRPC_VERSION, jsonrpcRequest.id(), initResult, null));
509512
} catch (Exception e) {
510-
logger.error("Failed to initialize session: {}", e.getMessage());
513+
logger.error("Failed to initialize session: {}", e.getMessage(), e);
511514
response.statusCode(HttpResponseStatus.INTERNAL_SERVER_ERROR.statusCode());
512515
return Entity.createObject(response,
513516
McpError.builder(McpSchema.ErrorCodes.INTERNAL_ERROR).message(e.getMessage()).build());
@@ -523,13 +526,11 @@ private Object handleInitializeRequest(HttpClassicServerRequest request, HttpCla
523526
* @param session The {@link McpStreamableServerSession} to accept the response
524527
* @param transportContext The {@link McpTransportContext} for request context propagation
525528
* @param response The {@link HttpClassicServerResponse} to set the status code
526-
* @return {@code null} as the response status is set to {@code 202 Accepted}
527529
*/
528-
private Object handleJsonRpcResponse(McpSchema.JSONRPCResponse jsonrpcResponse, McpStreamableServerSession session,
530+
private void handleJsonRpcResponse(McpSchema.JSONRPCResponse jsonrpcResponse, McpStreamableServerSession session,
529531
McpTransportContext transportContext, HttpClassicServerResponse response) {
530532
session.accept(jsonrpcResponse).contextWrite(ctx -> ctx.put(McpTransportContext.KEY, transportContext)).block();
531533
response.statusCode(HttpResponseStatus.ACCEPTED.statusCode());
532-
return null;
533534
}
534535

535536
/**
@@ -541,16 +542,14 @@ private Object handleJsonRpcResponse(McpSchema.JSONRPCResponse jsonrpcResponse,
541542
* @param session The {@link McpStreamableServerSession} to accept the notification
542543
* @param transportContext The {@link McpTransportContext} for request context propagation
543544
* @param response The {@link HttpClassicServerResponse} to set the status code
544-
* @return {@code null} as the response status is set to {@code 202 Accepted}
545545
*/
546-
private Object handleJsonRpcNotification(McpSchema.JSONRPCNotification jsonrpcNotification,
546+
private void handleJsonRpcNotification(McpSchema.JSONRPCNotification jsonrpcNotification,
547547
McpStreamableServerSession session, McpTransportContext transportContext,
548548
HttpClassicServerResponse response) {
549549
session.accept(jsonrpcNotification)
550550
.contextWrite(ctx -> ctx.put(McpTransportContext.KEY, transportContext))
551551
.block();
552552
response.statusCode(HttpResponseStatus.ACCEPTED.statusCode());
553-
return null;
554553
}
555554

556555
/**
@@ -593,7 +592,7 @@ public void onFailed(Exception e) {
593592
.contextWrite(ctx -> ctx.put(McpTransportContext.KEY, transportContext))
594593
.block();
595594
} catch (Exception e) {
596-
logger.error("Failed to handle request stream: {}", e.getMessage());
595+
logger.error("Failed to handle request stream: {}", e.getMessage(), e);
597596
emitter.fail(e);
598597
}
599598
});
@@ -681,13 +680,14 @@ public Mono<Void> sendMessage(McpSchema.JSONRPCMessage message, String messageId
681680

682681
logger.info("[SSE] Sending message to session {}: {}", this.sessionId, jsonText);
683682
} catch (Exception e) {
684-
logger.error("Failed to send message to session {}: {}", this.sessionId, e.getMessage());
683+
logger.error("Failed to send message to session {}: {}", this.sessionId, e.getMessage(), e);
685684
try {
686685
this.emitter.fail(e);
687686
} catch (Exception errorException) {
688687
logger.error("Failed to send error to SSE builder for session {}: {}",
689688
this.sessionId,
690-
errorException.getMessage());
689+
errorException.getMessage(),
690+
errorException);
691691
}
692692
} finally {
693693
this.lock.unlock();

framework/fel/java/plugins/tool-mcp-server/src/main/resources/application.yml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -6,4 +6,4 @@ fit:
66
mcp:
77
server:
88
request:
9-
timeout-seconds: 10
9+
timeout-seconds: 60

0 commit comments

Comments
 (0)