|
7 | 7 | import java.time.Duration; |
8 | 8 | import java.util.List; |
9 | 9 | import java.util.Map; |
10 | | -import java.util.Objects; |
11 | 10 | import java.util.function.BiFunction; |
12 | 11 |
|
13 | 12 | import io.modelcontextprotocol.client.McpClient; |
@@ -40,10 +39,8 @@ class HttpClientStreamableHttpVersionNegotiationIntegrationTests { |
40 | 39 |
|
41 | 40 | private final HttpServletStreamableServerTransportProvider transport = HttpServletStreamableServerTransportProvider |
42 | 41 | .builder() |
43 | | - // The MCP-Protocol-Version header may legitimately be absent on initialize |
44 | | - // requests, so a missing header must not break context extraction. |
45 | | - .contextExtractor(req -> McpTransportContext |
46 | | - .create(Map.of("protocol-version", Objects.requireNonNullElse(req.getHeader("MCP-protocol-version"), "")))) |
| 42 | + .contextExtractor( |
| 43 | + req -> McpTransportContext.create(Map.of("protocol-version", req.getHeader("MCP-protocol-version")))) |
47 | 44 | .build(); |
48 | 45 |
|
49 | 46 | private final McpSchema.Tool toolSpec = McpSchema.Tool.builder("test-tool") |
@@ -79,18 +76,15 @@ void usesLatestVersion() { |
79 | 76 |
|
80 | 77 | // The GET /mcp stream is opened asynchronously once the initialize response |
81 | 78 | // creates the session, so wait for it to be recorded before asserting. |
82 | | - await().atMost(Duration.ofSeconds(5)) |
83 | | - .untilAsserted(() -> assertThat(requestRecordingFilter.getCalls()).filteredOn(c -> "GET".equals(c.method())) |
84 | | - .hasSize(1)); |
85 | | - |
86 | | - var calls = requestRecordingFilter.getCalls(); |
87 | | - |
88 | | - assertThat(calls).filteredOn(c -> !c.body().contains("\"method\":\"initialize\"")) |
89 | | - // GET /mcp ; POST notification/initialized ; POST tools/call |
90 | | - .hasSize(3) |
91 | | - .map(McpTestRequestRecordingServletFilter.Call::headers) |
92 | | - .allSatisfy(headers -> assertThat(headers).containsEntry("mcp-protocol-version", |
93 | | - ProtocolVersions.MCP_2025_11_25)); |
| 79 | + await().atMost(Duration.ofSeconds(5)).untilAsserted(() -> { |
| 80 | + var calls = requestRecordingFilter.getCalls(); |
| 81 | + assertThat(calls).filteredOn(c -> !c.body().contains("\"method\":\"initialize\"")) |
| 82 | + // GET /mcp ; POST notification/initialized ; POST tools/call |
| 83 | + .hasSize(3) |
| 84 | + .map(McpTestRequestRecordingServletFilter.Call::headers) |
| 85 | + .allSatisfy(headers -> assertThat(headers).containsEntry("mcp-protocol-version", |
| 86 | + ProtocolVersions.MCP_2025_11_25)); |
| 87 | + }); |
94 | 88 |
|
95 | 89 | assertThat(response).isNotNull(); |
96 | 90 | assertThat(response.content()).hasSize(1) |
|
0 commit comments