diff --git a/jooby-mcp-apt/pom.xml b/jooby-mcp-apt/pom.xml
index 5564552..6124ec4 100644
--- a/jooby-mcp-apt/pom.xml
+++ b/jooby-mcp-apt/pom.xml
@@ -38,7 +38,7 @@
io.modelcontextprotocol.sdk
- mcp
+ mcp-core
@@ -56,7 +56,7 @@
com.palantir.javapoet
javapoet
- 0.11.0
+ 0.12.0
diff --git a/jooby-mcp-common/pom.xml b/jooby-mcp-common/pom.xml
index 6154aab..c6340c5 100644
--- a/jooby-mcp-common/pom.xml
+++ b/jooby-mcp-common/pom.xml
@@ -32,7 +32,7 @@
io.modelcontextprotocol.sdk
- mcp
+ mcp-core
diff --git a/jooby-mcp-example/pom.xml b/jooby-mcp-example/pom.xml
index 6035630..42a6b21 100644
--- a/jooby-mcp-example/pom.xml
+++ b/jooby-mcp-example/pom.xml
@@ -111,7 +111,7 @@
org.apache.maven.plugins
maven-shade-plugin
- 3.6.1
+ 3.6.2
false
diff --git a/jooby-mcp/pom.xml b/jooby-mcp/pom.xml
index 132ab7f..be3c1b3 100644
--- a/jooby-mcp/pom.xml
+++ b/jooby-mcp/pom.xml
@@ -68,7 +68,11 @@
io.modelcontextprotocol.sdk
- mcp
+ mcp-core
+
+
+ io.modelcontextprotocol.sdk
+ mcp-json-jackson2
io.jooby
@@ -106,7 +110,7 @@
io.swagger.core.v3
swagger-annotations
- 2.2.42
+ 2.2.45
test
diff --git a/jooby-mcp/src/main/java/io/github/kliushnichenko/jooby/mcp/transport/JoobySseTransportProvider.java b/jooby-mcp/src/main/java/io/github/kliushnichenko/jooby/mcp/transport/JoobySseTransportProvider.java
index 5296412..d304a76 100644
--- a/jooby-mcp/src/main/java/io/github/kliushnichenko/jooby/mcp/transport/JoobySseTransportProvider.java
+++ b/jooby-mcp/src/main/java/io/github/kliushnichenko/jooby/mcp/transport/JoobySseTransportProvider.java
@@ -77,6 +77,18 @@ public Mono notifyClients(String method, Object params) {
.then();
}
+ @Override
+ public Mono notifyClient(String sessionId, String method, Object params) {
+ return Mono.defer(() -> {
+ McpServerSession session = this.sessions.get(sessionId);
+ if (session == null) {
+ LOG.debug("Session {} not found", sessionId);
+ return Mono.empty();
+ }
+ return session.sendNotification(method, params);
+ });
+ }
+
@Override
public Mono closeGracefully() {
return Flux.fromIterable(sessions.values())
diff --git a/jooby-mcp/src/main/java/io/github/kliushnichenko/jooby/mcp/transport/JoobyStreamableServerTransportProvider.java b/jooby-mcp/src/main/java/io/github/kliushnichenko/jooby/mcp/transport/JoobyStreamableServerTransportProvider.java
index 5ecfa28..c77e304 100644
--- a/jooby-mcp/src/main/java/io/github/kliushnichenko/jooby/mcp/transport/JoobyStreamableServerTransportProvider.java
+++ b/jooby-mcp/src/main/java/io/github/kliushnichenko/jooby/mcp/transport/JoobyStreamableServerTransportProvider.java
@@ -296,6 +296,18 @@ public void setSessionFactory(McpStreamableServerSession.Factory sessionFactory)
this.sessionFactory = sessionFactory;
}
+ @Override
+ public Mono notifyClient(String sessionId, String method, Object params) {
+ return Mono.defer(() -> {
+ McpStreamableServerSession session = this.sessions.get(sessionId);
+ if (session == null) {
+ LOG.debug("Session {} not found", sessionId);
+ return Mono.empty();
+ }
+ return session.sendNotification(method, params);
+ });
+ }
+
@Override
public Mono notifyClients(String method, Object params) {
if (this.sessions.isEmpty()) {
diff --git a/jooby-mcp/src/test/java/transport/StreamableTransportApp.java b/jooby-mcp/src/test/java/transport/StreamableTransportApp.java
index 9451329..d37e427 100644
--- a/jooby-mcp/src/test/java/transport/StreamableTransportApp.java
+++ b/jooby-mcp/src/test/java/transport/StreamableTransportApp.java
@@ -6,7 +6,7 @@
import io.jooby.Jooby;
import io.jooby.jackson.JacksonModule;
import io.modelcontextprotocol.common.McpTransportContext;
-import io.modelcontextprotocol.json.jackson.JacksonMcpJsonMapper;
+import io.modelcontextprotocol.json.jackson2.JacksonMcpJsonMapper;
import io.modelcontextprotocol.server.McpServer;
import io.modelcontextprotocol.server.McpServerFeatures;
import io.modelcontextprotocol.spec.McpSchema;
@@ -32,12 +32,17 @@ private void runMcpServer() {
McpServerFeatures.SyncToolSpecification toolSpec =
McpServerFeatures.SyncToolSpecification.builder()
.tool(McpSchema.Tool.builder()
- .name("echo_tool")
+ .name("echo_tool")
.description("A tool that echoes back the input it receives.")
// .inputSchema(new McpSchema.JsonSchema(""))
- .build()
+ .build()
)
- .callHandler((exchange, request) -> new McpSchema.CallToolResult(request.arguments().get("input").toString(), false))
+ .callHandler((exchange, request) -> {
+ var input = request.arguments().get("input").toString();
+ return McpSchema.CallToolResult.builder()
+ .addTextContent(input)
+ .build();
+ })
.build();
McpServer.sync(transportProvider)
diff --git a/pom.xml b/pom.xml
index 07a19d6..3d2a6ad 100644
--- a/pom.xml
+++ b/pom.xml
@@ -40,11 +40,11 @@
21
2.1.0
- 4.0.15
- 2.21.0
+ 4.0.17
+ 2.21.1
2.21
- 0.18.1
- 1.18.42
+ 1.1.0
+ 1.18.44
6.0.3
7.16.0
@@ -106,8 +106,10 @@
io.modelcontextprotocol.sdk
- mcp
+ mcp-bom
${mcp.sdk.version}
+ pom
+ import