Skip to content

Commit 817fdbd

Browse files
committed
Update mcp support
1 parent 486212d commit 817fdbd

File tree

6 files changed

+54
-21
lines changed

6 files changed

+54
-21
lines changed

README.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -8,4 +8,4 @@ Reference implementation of [Agentic Workflow and Patterns](https://javaaidev.co
88
Requirements:
99

1010
- Java 21 (for virtual threads)
11-
- Spring AI (Current version `1.1.0`)
11+
- Spring AI (Current version `1.1.1`)

core/src/main/java/com/javaaidev/agenticpatterns/core/McpClientConfiguration.java

Lines changed: 21 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -4,14 +4,28 @@
44
import java.util.HashMap;
55
import java.util.Map;
66
import org.jspecify.annotations.Nullable;
7-
import org.springframework.ai.mcp.client.autoconfigure.properties.McpSseClientProperties.SseParameters;
8-
import org.springframework.ai.mcp.client.autoconfigure.properties.McpStdioClientProperties.Parameters;
7+
import org.springframework.ai.mcp.client.common.autoconfigure.properties.McpSseClientProperties.SseParameters;
8+
import org.springframework.ai.mcp.client.common.autoconfigure.properties.McpStdioClientProperties.Parameters;
9+
import org.springframework.ai.mcp.client.common.autoconfigure.properties.McpStreamableHttpClientProperties.ConnectionParameters;
910

1011
public record McpClientConfiguration(
1112
@Nullable StdioClientProperties stdioClientProperties,
12-
@Nullable SseClientProperties sseClientProperties
13+
@Nullable SseClientProperties sseClientProperties,
14+
@Nullable StreamableHttpClientProperties streamableHttpClientProperties
1315
) {
1416

17+
public McpClientConfiguration(StdioClientProperties stdioClientProperties) {
18+
this(stdioClientProperties, null, null);
19+
}
20+
21+
public McpClientConfiguration(SseClientProperties sseClientProperties) {
22+
this(null, sseClientProperties, null);
23+
}
24+
25+
public McpClientConfiguration(StreamableHttpClientProperties streamableHttpClientProperties) {
26+
this(null, null, streamableHttpClientProperties);
27+
}
28+
1529
public record StdioClientProperties(Map<String, Parameters> connections) {
1630

1731
public Map<String, ServerParameters> toServerParameters() {
@@ -26,4 +40,8 @@ public Map<String, ServerParameters> toServerParameters() {
2640
public record SseClientProperties(Map<String, SseParameters> connections) {
2741

2842
}
43+
44+
public record StreamableHttpClientProperties(Map<String, ConnectionParameters> connections) {
45+
46+
}
2947
}

examples/pom.xml

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -18,8 +18,8 @@
1818
<maven.compiler.source>21</maven.compiler.source>
1919
<maven.compiler.target>21</maven.compiler.target>
2020
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
21-
<spring-ai.version>1.1.0</spring-ai.version>
22-
<spring-boot.version>3.5.5</spring-boot.version>
21+
<spring-ai.version>1.1.1</spring-ai.version>
22+
<spring-boot.version>3.5.9</spring-boot.version>
2323
</properties>
2424

2525
<dependencyManagement>

examples/src/main/java/com/javaaidev/agenticpatterns/examples/taskexecution/UserGenerationConfiguration.java

Lines changed: 2 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,7 @@
88
import java.util.List;
99
import java.util.Map;
1010
import org.springframework.ai.chat.client.ChatClient;
11-
import org.springframework.ai.mcp.client.autoconfigure.properties.McpStdioClientProperties.Parameters;
11+
import org.springframework.ai.mcp.client.common.autoconfigure.properties.McpStdioClientProperties.Parameters;
1212
import org.springframework.beans.factory.annotation.Qualifier;
1313
import org.springframework.context.annotation.Bean;
1414
import org.springframework.context.annotation.Configuration;
@@ -45,8 +45,7 @@ public TaskExecutionAgent<UserGenerationRequest, UserGenerationResponse> userGen
4545
Map.of()
4646
)
4747
)
48-
),
49-
null
48+
)
5049
))
5150
.build();
5251
}

patterns/task-execution/src/main/java/com/javaaidev/agenticpatterns/taskexecution/TaskExecutionAgent.java

Lines changed: 27 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -13,18 +13,19 @@
1313
import io.modelcontextprotocol.client.McpAsyncClient;
1414
import io.modelcontextprotocol.client.McpClient;
1515
import io.modelcontextprotocol.client.transport.HttpClientSseClientTransport;
16-
import io.modelcontextprotocol.client.transport.ServerParameters;
16+
import io.modelcontextprotocol.client.transport.HttpClientStreamableHttpTransport;
1717
import io.modelcontextprotocol.client.transport.StdioClientTransport;
18+
import io.modelcontextprotocol.json.jackson.JacksonMcpJsonMapper;
1819
import io.modelcontextprotocol.spec.McpSchema;
1920
import java.lang.reflect.ParameterizedType;
2021
import java.lang.reflect.Type;
21-
import java.net.http.HttpClient;
2222
import java.time.Duration;
2323
import java.util.ArrayList;
2424
import java.util.Arrays;
2525
import java.util.HashMap;
2626
import java.util.List;
2727
import java.util.Map;
28+
import java.util.Objects;
2829
import java.util.Optional;
2930
import java.util.function.Consumer;
3031
import java.util.function.Function;
@@ -35,8 +36,7 @@
3536
import org.springframework.ai.chat.client.ChatClient;
3637
import org.springframework.ai.chat.client.ChatClient.ChatClientRequestSpec;
3738
import org.springframework.ai.mcp.AsyncMcpToolCallbackProvider;
38-
import org.springframework.ai.mcp.client.autoconfigure.NamedClientMcpTransport;
39-
import org.springframework.ai.mcp.client.autoconfigure.properties.McpSseClientProperties.SseParameters;
39+
import org.springframework.ai.mcp.client.common.autoconfigure.NamedClientMcpTransport;
4040
import org.springframework.ai.tool.StaticToolCallbackProvider;
4141
import org.springframework.ai.tool.ToolCallbackProvider;
4242
import org.springframework.core.ParameterizedTypeReference;
@@ -234,24 +234,40 @@ protected ToolCallbackProvider getToolCallbackProvider() {
234234
List<NamedClientMcpTransport> transports = new ArrayList<>();
235235
var stdioProperties = mcpClientConfiguration.stdioClientProperties();
236236
if (stdioProperties != null) {
237-
for (Map.Entry<String, ServerParameters> serverParameters : stdioProperties.toServerParameters()
237+
for (var serverParameters : stdioProperties.toServerParameters()
238238
.entrySet()) {
239-
var transport = new StdioClientTransport(serverParameters.getValue());
239+
var transport = new StdioClientTransport(serverParameters.getValue(),
240+
new JacksonMcpJsonMapper(objectMapper));
240241
transports.add(new NamedClientMcpTransport(serverParameters.getKey(),
241242
transport));
242243
}
243244
}
245+
244246
var sseProperties = mcpClientConfiguration.sseClientProperties();
245247
if (sseProperties != null) {
246-
for (Map.Entry<String, SseParameters> serverParameters : sseProperties.connections()
248+
for (var serverParameters : sseProperties.connections()
247249
.entrySet()) {
248250
String baseUrl = serverParameters.getValue().url();
249-
String sseEndpoint = serverParameters.getValue().sseEndpoint() != null
250-
? serverParameters.getValue().sseEndpoint() : "/sse";
251+
String sseEndpoint = Objects.requireNonNullElse(serverParameters.getValue().sseEndpoint(),
252+
"/sse");
251253
var transport = HttpClientSseClientTransport.builder(baseUrl)
252254
.sseEndpoint(sseEndpoint)
253-
.clientBuilder(HttpClient.newBuilder())
254-
.objectMapper(objectMapper)
255+
.jsonMapper(new JacksonMcpJsonMapper(objectMapper))
256+
.build();
257+
transports.add(new NamedClientMcpTransport(serverParameters.getKey(), transport));
258+
}
259+
}
260+
261+
var streamableHttpProperties = mcpClientConfiguration.streamableHttpClientProperties();
262+
if (streamableHttpProperties != null) {
263+
for (var serverParameters : streamableHttpProperties.connections()
264+
.entrySet()) {
265+
String baseUrl = serverParameters.getValue().url();
266+
String endpoint = Objects.requireNonNullElse(serverParameters.getValue().endpoint(),
267+
"/mcp");
268+
var transport = HttpClientStreamableHttpTransport.builder(baseUrl)
269+
.endpoint(endpoint)
270+
.jsonMapper(new JacksonMcpJsonMapper(objectMapper))
255271
.build();
256272
transports.add(new NamedClientMcpTransport(serverParameters.getKey(), transport));
257273
}

pom.xml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -52,7 +52,7 @@
5252
<maven.compiler.source>${java.version}</maven.compiler.source>
5353
<maven.compiler.target>${java.version}</maven.compiler.target>
5454
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
55-
<spring-ai.version>1.1.0</spring-ai.version>
55+
<spring-ai.version>1.1.1</spring-ai.version>
5656
<micrometer.version>1.14.4</micrometer.version>
5757
</properties>
5858

0 commit comments

Comments
 (0)