Skip to content

Commit 6af1f2f

Browse files
committed
更新MCP SDK版本0.14.0
1 parent c6c35bb commit 6af1f2f

File tree

2 files changed

+33
-14
lines changed

2 files changed

+33
-14
lines changed

framework/fel/java/plugins/tool-mcp-server/pom.xml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -44,7 +44,7 @@
4444
<dependency>
4545
<groupId>io.modelcontextprotocol.sdk</groupId>
4646
<artifactId>mcp</artifactId>
47-
<version>0.12.0</version>
47+
<version>0.14.0</version>
4848
</dependency>
4949

5050
<!-- Test -->

framework/fel/java/plugins/tool-mcp-server/src/main/java/modelengine/fel/tool/mcp/server/support/DefaultMcpStreamableServerTransportProvider.java

Lines changed: 32 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,7 @@
33
import com.fasterxml.jackson.core.type.TypeReference;
44
import com.fasterxml.jackson.databind.ObjectMapper;
55
import io.modelcontextprotocol.common.McpTransportContext;
6+
import io.modelcontextprotocol.json.TypeRef;
67
import io.modelcontextprotocol.server.McpTransportContextExtractor;
78
import io.modelcontextprotocol.spec.*;
89
import io.modelcontextprotocol.util.Assert;
@@ -23,6 +24,7 @@
2324
import reactor.core.publisher.Mono;
2425

2526
import java.io.IOException;
27+
import java.lang.reflect.Type;
2628
import java.time.Duration;
2729
import java.util.List;
2830
import java.util.Map;
@@ -115,7 +117,7 @@ private DefaultMcpStreamableServerTransportProvider(ObjectMapper objectMapper,
115117

116118
@Override
117119
public List<String> protocolVersions() {
118-
return List.of(ProtocolVersions.MCP_2024_11_05, ProtocolVersions.MCP_2025_03_26);
120+
return List.of(ProtocolVersions.MCP_2024_11_05, ProtocolVersions.MCP_2025_03_26, ProtocolVersions.MCP_2025_06_18);
119121
}
120122

121123
@Override
@@ -215,7 +217,9 @@ public Object handleGet(HttpClassicServerRequest request, HttpClassicServerRespo
215217

216218
if (session == null) {
217219
response.statusCode(HttpResponseStatus.NOT_FOUND.statusCode());
218-
return Entity.createObject(response, new McpError("Session not found: " + sessionId));
220+
return Entity.createObject(response, McpError.builder(McpSchema.ErrorCodes.INVALID_PARAMS)
221+
.message("Session not found: " + sessionId)
222+
.build());
219223
}
220224

221225
logger.info("[GET] Handling GET request for session: {}", sessionId);
@@ -308,7 +312,9 @@ public Object handlePost(HttpClassicServerRequest request,
308312
|| !acceptHeaders.contains(MimeType.APPLICATION_JSON.value())) {
309313
response.statusCode(HttpResponseStatus.BAD_REQUEST.statusCode());
310314
return Entity.createObject(response,
311-
new McpError("Invalid Accept headers. Expected TEXT_EVENT_STREAM and APPLICATION_JSON"));
315+
McpError.builder(McpSchema.ErrorCodes.INVALID_REQUEST)
316+
.message("Invalid Accept headers. Expected TEXT_EVENT_STREAM and APPLICATION_JSON")
317+
.build());
312318
}
313319
McpTransportContext transportContext = this.contextExtractor.extract(request);
314320
try {
@@ -341,14 +347,18 @@ public Object handlePost(HttpClassicServerRequest request,
341347
catch (Exception e) {
342348
logger.error("Failed to initialize session: {}", e.getMessage());
343349
response.statusCode(HttpResponseStatus.INTERNAL_SERVER_ERROR.statusCode());
344-
return Entity.createObject(response, new McpError(e.getMessage()));
350+
return Entity.createObject(response, McpError.builder(McpSchema.ErrorCodes.INTERNAL_ERROR)
351+
.message(e.getMessage())
352+
.build());
345353
}
346354
}
347355

348356
// Handle other messages that require a session
349357
if (!request.headers().contains(HttpHeaders.MCP_SESSION_ID)) {
350358
response.statusCode(HttpResponseStatus.BAD_REQUEST.statusCode());
351-
return Entity.createObject(response, new McpError("Session ID missing"));
359+
return Entity.createObject(response, McpError.builder(McpSchema.ErrorCodes.INVALID_REQUEST)
360+
.message("Session ID missing")
361+
.build());
352362
}
353363

354364
String sessionId = request.headers().first(HttpHeaders.MCP_SESSION_ID).orElse("");
@@ -357,7 +367,9 @@ public Object handlePost(HttpClassicServerRequest request,
357367

358368
if (session == null) {
359369
response.statusCode(HttpResponseStatus.NOT_FOUND.statusCode());
360-
return Entity.createObject(response, new McpError("Session not found: " + sessionId));
370+
return Entity.createObject(response, McpError.builder(McpSchema.ErrorCodes.INVALID_PARAMS)
371+
.message("Session not found: " + sessionId)
372+
.build());
361373
}
362374

363375
if (message instanceof McpSchema.JSONRPCResponse jsonrpcResponse) {
@@ -408,18 +420,18 @@ public void onFailed(Exception e) {
408420
}
409421
else {
410422
response.statusCode(HttpResponseStatus.INTERNAL_SERVER_ERROR.statusCode());
411-
return Entity.createObject(response, new McpError("Unknown message type"));
423+
return Entity.createObject(response, McpError.builder(McpSchema.ErrorCodes.INTERNAL_ERROR).message("Unknown message type").build());
412424
}
413425
}
414426
catch (IllegalArgumentException | IOException e) {
415427
logger.error("Failed to deserialize message: {}", e.getMessage());
416428
response.statusCode(HttpResponseStatus.BAD_REQUEST.statusCode());
417-
return Entity.createObject(response, new McpError("Invalid message format"));
429+
return Entity.createObject(response, McpError.builder(McpSchema.ErrorCodes.PARSE_ERROR).message("Invalid message format").build());
418430
}
419431
catch (Exception e) {
420432
logger.error("Error handling message: {}", e.getMessage());
421433
response.statusCode(HttpResponseStatus.INTERNAL_SERVER_ERROR.statusCode());
422-
return Entity.createObject(response, new McpError(e.getMessage()));
434+
return Entity.createObject(response, McpError.builder(McpSchema.ErrorCodes.INTERNAL_ERROR).message(e.getMessage()).build());
423435
}
424436
}
425437

@@ -455,7 +467,7 @@ public Object handleDelete(HttpClassicServerRequest request, HttpClassicServerRe
455467
logger.info("[DELETE] Receiving delete request from session: {}", sessionId);
456468
if (session == null) {
457469
response.statusCode(HttpResponseStatus.NOT_FOUND.statusCode());
458-
return Entity.createObject(response, new McpError("Session not found: " + sessionId));
470+
return Entity.createObject(response, McpError.builder(McpSchema.ErrorCodes.INVALID_PARAMS).message("Session not found: " + sessionId).build());
459471
}
460472

461473
try {
@@ -467,7 +479,7 @@ public Object handleDelete(HttpClassicServerRequest request, HttpClassicServerRe
467479
catch (Exception e) {
468480
logger.error("Failed to delete session {}: {}", sessionId, e.getMessage());
469481
response.statusCode(HttpResponseStatus.INTERNAL_SERVER_ERROR.statusCode());
470-
return Entity.createObject(response, new McpError(e.getMessage()));
482+
return Entity.createObject(response, McpError.builder(McpSchema.ErrorCodes.INTERNAL_ERROR).message(e.getMessage()).build());
471483
}
472484
}
473485

@@ -591,8 +603,15 @@ public Mono<Void> sendMessage(McpSchema.JSONRPCMessage message, String messageId
591603
* @param <T> The target type
592604
*/
593605
@Override
594-
public <T> T unmarshalFrom(Object data, TypeReference<T> typeRef) {
595-
return objectMapper.convertValue(data, typeRef);
606+
public <T> T unmarshalFrom(Object data, TypeRef<T> typeRef) {
607+
// Convert TypeRef to TypeReference for ObjectMapper compatibility
608+
TypeReference<T> typeReference = new TypeReference<T>() {
609+
@Override
610+
public Type getType() {
611+
return typeRef.getType();
612+
}
613+
};
614+
return objectMapper.convertValue(data, typeReference);
596615
}
597616

598617
/**

0 commit comments

Comments
 (0)