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