Skip to content

Commit 7c85d2e

Browse files
authored
Merge branch 'main' into bug/protocol_versioning
2 parents 195bce5 + ed02736 commit 7c85d2e

File tree

25 files changed

+688
-90
lines changed

25 files changed

+688
-90
lines changed

.github/dependabot.yml

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -4,11 +4,17 @@ updates:
44
directory: '/'
55
schedule:
66
interval: monthly
7+
labels:
8+
- 'github_actions'
9+
- 'waiting for triage'
710
- package-ecosystem: 'maven'
811
directory: '/'
912
schedule:
1013
interval: monthly
1114
open-pull-requests-limit: 10
15+
labels:
16+
- 'dependencies'
17+
- 'waiting for triage'
1218
ignore:
1319
# Freeze production dependencies of mcp-core
1420
- dependency-name: 'org.slf4j:slf4j-api'

conformance-tests/VALIDATION_RESULTS.md

Lines changed: 11 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -2,27 +2,22 @@
22

33
## Summary
44

5-
**Server Tests:** 37/40 passed (92.5%)
5+
**Server Tests:** 40/40 passed (100%)
66
**Client Tests:** 3/4 scenarios passed (9/10 checks passed)
77
**Auth Tests:** 12/14 scenarios fully passing (178 passed, 1 failed, 1 warning, 85.7% scenarios, 98.9% checks)
88

99
## Server Test Results
1010

11-
### Passing (37/40)
11+
### Passing (40/40)
1212

1313
- **Lifecycle & Utilities (4/4):** initialize, ping, logging-set-level, completion-complete
1414
- **Tools (11/11):** All scenarios including progress notifications ✨
1515
- **Elicitation (10/10):** SEP-1034 defaults (5 checks), SEP-1330 enums (5 checks)
16-
- **Resources (4/6):** list, read-text, read-binary, templates-read
16+
- **Resources (6/6):** list, read-text, read-binary, templates-read, subscribe, unsubscribe
1717
- **Prompts (4/4):** list, simple, with-args, embedded-resource, with-image
1818
- **SSE Transport (2/2):** Multiple streams
1919
- **Security (2/2):** Localhost validation passes, DNS rebinding protection
2020

21-
### Failing (3/40)
22-
23-
1. **resources-subscribe** - Not implemented in SDK
24-
2. **resources-unsubscribe** - Not implemented in SDK
25-
2621
## Client Test Results
2722

2823
### Passing (3/4 scenarios, 9/10 checks)
@@ -68,18 +63,16 @@ Uses the `client-spring-http-client` module with Spring Security OAuth2 and the
6863

6964
## Known Limitations
7065

71-
1. **Resource Subscriptions:** SDK doesn't implement `resources/subscribe` and `resources/unsubscribe` handlers
72-
2. **Client SSE Retry:** Client doesn't parse or respect the `retry:` field, reconnects immediately, and doesn't send Last-Event-ID header
73-
3. **Auth Scope Step-Up:** Client does not fully handle scope step-up challenges where the server requests additional scopes after initial authorization
74-
4. **Auth Basic CIMD:** Minor conformance warning in the basic Client-Initiated Metadata Discovery flow
66+
1. **Client SSE Retry:** Client doesn't parse or respect the `retry:` field, reconnects immediately, and doesn't send Last-Event-ID header
67+
2. **Auth Scope Step-Up:** Client does not fully handle scope step-up challenges where the server requests additional scopes after initial authorization
68+
3. **Auth Basic CIMD:** Minor conformance warning in the basic Client-Initiated Metadata Discovery flow
7569

7670
## Running Tests
7771

7872
### Server
7973
```bash
8074
# Start server
81-
cd conformance-tests/server-servlet
82-
../../mvnw compile exec:java -Dexec.mainClass="io.modelcontextprotocol.conformance.server.ConformanceServlet"
75+
./mvnw compile -pl conformance-tests/server-servlet -am exec:java
8376

8477
# Run tests (in another terminal)
8578
npx @modelcontextprotocol/conformance server --url http://localhost:8080/mcp --suite active
@@ -94,7 +87,7 @@ cd conformance-tests/client-jdk-http-client
9487
# Run all scenarios
9588
for scenario in initialize tools_call elicitation-sep1034-client-defaults sse-retry; do
9689
npx @modelcontextprotocol/conformance client \
97-
--command "java -jar target/client-jdk-http-client-1.0.0-SNAPSHOT.jar" \
90+
--command "java -jar target/client-jdk-http-client-1.1.0-SNAPSHOT.jar" \
9891
--scenario $scenario
9992
done
10093
```
@@ -111,14 +104,13 @@ cd conformance-tests/client-spring-http-client
111104
# Run auth suite
112105
npx @modelcontextprotocol/conformance@0.1.15 client \
113106
--spec-version 2025-11-25 \
114-
--command "java -jar target/client-spring-http-client-0.18.0-SNAPSHOT.jar" \
107+
--command "java -jar target/client-spring-http-client-1.1.0-SNAPSHOT.jar" \
115108
--suite auth
116109
```
117110

118111
## Recommendations
119112

120113
### High Priority
121114
1. Fix client SSE retry field handling in `HttpClientStreamableHttpTransport`
122-
2. Implement resource subscription handlers in `McpStatelessAsyncServer`
123-
3. Implement CIMD
124-
4. Implement scope step up
115+
2. Implement CIMD
116+
3. Implement scope step up

conformance-tests/client-jdk-http-client/README.md

Lines changed: 7 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -54,7 +54,7 @@ cd conformance-tests/client-jdk-http-client
5454

5555
This creates an executable JAR at:
5656
```
57-
target/client-jdk-http-client-1.0.0-SNAPSHOT.jar
57+
target/client-jdk-http-client-1.1.0-SNAPSHOT.jar
5858
```
5959

6060
## Running Tests
@@ -65,27 +65,27 @@ Run a single scenario:
6565

6666
```bash
6767
npx @modelcontextprotocol/conformance client \
68-
--command "java -jar conformance-tests/client-jdk-http-client/target/client-jdk-http-client-1.0.0-SNAPSHOT.jar" \
68+
--command "java -jar conformance-tests/client-jdk-http-client/target/client-jdk-http-client-1.1.0-SNAPSHOT.jar" \
6969
--scenario initialize
7070

7171
npx @modelcontextprotocol/conformance client \
72-
--command "java -jar conformance-tests/client-jdk-http-client/target/client-jdk-http-client-1.0.0-SNAPSHOT.jar" \
72+
--command "java -jar conformance-tests/client-jdk-http-client/target/client-jdk-http-client-1.1.0-SNAPSHOT.jar" \
7373
--scenario tools_call
7474

7575
npx @modelcontextprotocol/conformance client \
76-
--command "java -jar conformance-tests/client-jdk-http-client/target/client-jdk-http-client-1.0.0-SNAPSHOT.jar" \
76+
--command "java -jar conformance-tests/client-jdk-http-client/target/client-jdk-http-client-1.1.0-SNAPSHOT.jar" \
7777
--scenario elicitation-sep1034-client-defaults
7878

7979
npx @modelcontextprotocol/conformance client \
80-
--command "java -jar conformance-tests/client-jdk-http-client/target/client-jdk-http-client-1.0.0-SNAPSHOT.jar" \
80+
--command "java -jar conformance-tests/client-jdk-http-client/target/client-jdk-http-client-1.1.0-SNAPSHOT.jar" \
8181
--scenario sse-retry
8282
```
8383

8484
Run with verbose output:
8585

8686
```bash
8787
npx @modelcontextprotocol/conformance client \
88-
--command "java -jar conformance-tests/client-jdk-http-client/target/client-jdk-http-client-1.0.0-SNAPSHOT.jar" \
88+
--command "java -jar conformance-tests/client-jdk-http-client/target/client-jdk-http-client-1.1.0-SNAPSHOT.jar" \
8989
--scenario initialize \
9090
--verbose
9191
```
@@ -96,7 +96,7 @@ You can also run the client manually if you have a test server:
9696

9797
```bash
9898
export MCP_CONFORMANCE_SCENARIO=initialize
99-
java -jar conformance-tests/client-jdk-http-client/target/client-jdk-http-client-1.0.0-SNAPSHOT.jar http://localhost:3000/mcp
99+
java -jar conformance-tests/client-jdk-http-client/target/client-jdk-http-client-1.1.0-SNAPSHOT.jar http://localhost:3000/mcp
100100
```
101101

102102
## Test Results

conformance-tests/client-spring-http-client/README.md

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -67,7 +67,7 @@ cd conformance-tests/client-spring-http-client
6767

6868
This creates an executable JAR at:
6969
```
70-
target/client-spring-http-client-0.18.0-SNAPSHOT.jar
70+
target/client-spring-http-client-1.1.0-SNAPSHOT.jar
7171
```
7272

7373
## Running Tests
@@ -79,7 +79,7 @@ Run the full auth suite:
7979
```bash
8080
npx @modelcontextprotocol/conformance@0.1.15 client \
8181
--spec-version 2025-11-25 \
82-
--command "java -jar conformance-tests/client-spring-http-client/target/client-spring-http-client-0.18.0-SNAPSHOT.jar" \
82+
--command "java -jar conformance-tests/client-spring-http-client/target/client-spring-http-client-1.1.0-SNAPSHOT.jar" \
8383
--suite auth
8484
```
8585

@@ -88,7 +88,7 @@ Run a single scenario:
8888
```bash
8989
npx @modelcontextprotocol/conformance@0.1.15 client \
9090
--spec-version 2025-11-25 \
91-
--command "java -jar conformance-tests/client-spring-http-client/target/client-spring-http-client-0.18.0-SNAPSHOT.jar" \
91+
--command "java -jar conformance-tests/client-spring-http-client/target/client-spring-http-client-1.1.0-SNAPSHOT.jar" \
9292
--scenario auth/metadata-default
9393
```
9494

@@ -97,7 +97,7 @@ Run with verbose output:
9797
```bash
9898
npx @modelcontextprotocol/conformance@0.1.15 client \
9999
--spec-version 2025-11-25 \
100-
--command "java -jar conformance-tests/client-spring-http-client/target/client-spring-http-client-0.18.0-SNAPSHOT.jar" \
100+
--command "java -jar conformance-tests/client-spring-http-client/target/client-spring-http-client-1.1.0-SNAPSHOT.jar" \
101101
--scenario auth/metadata-default \
102102
--verbose
103103
```
@@ -108,7 +108,7 @@ You can also run the client manually if you have a test server:
108108

109109
```bash
110110
export MCP_CONFORMANCE_SCENARIO=auth/metadata-default
111-
java -jar conformance-tests/client-spring-http-client/target/client-spring-http-client-0.18.0-SNAPSHOT.jar http://localhost:3000/mcp
111+
java -jar conformance-tests/client-spring-http-client/target/client-spring-http-client-1.1.0-SNAPSHOT.jar http://localhost:3000/mcp
112112
```
113113

114114
## Known Issues

conformance-tests/client-spring-http-client/pom.xml

Lines changed: 24 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -4,14 +4,11 @@
44
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd">
55
<modelVersion>4.0.0</modelVersion>
66
<parent>
7-
<groupId>org.springframework.boot</groupId>
8-
<artifactId>spring-boot-starter-parent</artifactId>
9-
<version>4.0.2</version>
10-
<relativePath/> <!-- lookup parent from repository -->
7+
<groupId>io.modelcontextprotocol.sdk</groupId>
8+
<artifactId>conformance-tests</artifactId>
9+
<version>1.1.0-SNAPSHOT</version>
1110
</parent>
12-
<groupId>io.modelcontextprotocol.sdk</groupId>
1311
<artifactId>client-spring-http-client</artifactId>
14-
<version>1.0.0-SNAPSHOT</version>
1512
<packaging>jar</packaging>
1613
<name>MCP Conformance Tests - Spring HTTP Client</name>
1714
<description>Spring HTTP Client conformance tests for the Java MCP SDK</description>
@@ -25,10 +22,23 @@
2522

2623
<properties>
2724
<java.version>17</java.version>
25+
<spring-boot.version>4.0.2</spring-boot.version>
2826
<spring-ai.version>2.0.0-M2</spring-ai.version>
2927
<maven.deploy.skip>true</maven.deploy.skip>
3028
</properties>
3129

30+
<dependencyManagement>
31+
<dependencies>
32+
<dependency>
33+
<groupId>org.springframework.boot</groupId>
34+
<artifactId>spring-boot-dependencies</artifactId>
35+
<version>${spring-boot.version}</version>
36+
<type>pom</type>
37+
<scope>import</scope>
38+
</dependency>
39+
</dependencies>
40+
</dependencyManagement>
41+
3242
<dependencies>
3343
<dependency>
3444
<groupId>org.springframework.boot</groupId>
@@ -63,6 +73,14 @@
6373
<plugin>
6474
<groupId>org.springframework.boot</groupId>
6575
<artifactId>spring-boot-maven-plugin</artifactId>
76+
<version>${spring-boot.version}</version>
77+
<executions>
78+
<execution>
79+
<goals>
80+
<goal>repackage</goal>
81+
</goals>
82+
</execution>
83+
</executions>
6684
</plugin>
6785
</plugins>
6886
</build>

conformance-tests/client-spring-http-client/src/main/java/io/modelcontextprotocol/conformance/client/configuration/DefaultConfiguration.java

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -24,8 +24,8 @@ public class DefaultConfiguration {
2424

2525
@Bean
2626
DefaultScenario defaultScenario(McpClientRegistrationRepository clientRegistrationRepository,
27-
ServletWebServerApplicationContext serverCtx,
28-
OAuth2AuthorizedClientRepository oAuth2AuthorizedClientRepository) {
27+
ServletWebServerApplicationContext serverCtx,
28+
OAuth2AuthorizedClientRepository oAuth2AuthorizedClientRepository) {
2929
return new DefaultScenario(clientRegistrationRepository, serverCtx, oAuth2AuthorizedClientRepository);
3030
}
3131

conformance-tests/client-spring-http-client/src/main/java/io/modelcontextprotocol/conformance/client/scenario/DefaultScenario.java

Lines changed: 3 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -29,8 +29,7 @@
2929

3030
public class DefaultScenario implements Scenario {
3131

32-
private static final Logger log = LoggerFactory
33-
.getLogger(DefaultScenario.class);
32+
private static final Logger log = LoggerFactory.getLogger(DefaultScenario.class);
3433

3534
private final ServletWebServerApplicationContext serverCtx;
3635

@@ -39,8 +38,8 @@ public class DefaultScenario implements Scenario {
3938
private McpSyncClient client;
4039

4140
public DefaultScenario(McpClientRegistrationRepository clientRegistrationRepository,
42-
ServletWebServerApplicationContext serverCtx,
43-
OAuth2AuthorizedClientRepository oAuth2AuthorizedClientRepository) {
41+
ServletWebServerApplicationContext serverCtx,
42+
OAuth2AuthorizedClientRepository oAuth2AuthorizedClientRepository) {
4443
this.serverCtx = serverCtx;
4544
this.authorizedClientManager = new DefaultOAuth2AuthorizedClientManager(clientRegistrationRepository,
4645
oAuth2AuthorizedClientRepository);

conformance-tests/conformance-baseline.yml

Lines changed: 0 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -2,11 +2,6 @@
22
# This file lists known failing scenarios that are expected to fail until fixed.
33
# See: https://github.com/modelcontextprotocol/conformance/blob/main/SDK_INTEGRATION.md
44

5-
server:
6-
# Resource subscription not implemented in SDK
7-
- resources-subscribe
8-
- resources-unsubscribe
9-
105
client:
116
# SSE retry field handling not implemented
127
# - Client does not parse or respect retry: field timing

conformance-tests/server-servlet/README.md

Lines changed: 4 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,7 @@ This module contains a comprehensive MCP (Model Context Protocol) server impleme
44

55
## Conformance Test Results
66

7-
**Status: 37 out of 40 tests passing (92.5%)**
7+
**Status: 40 out of 40 tests passing (100%)**
88

99
The server has been validated against the official [MCP conformance test suite](https://github.com/modelcontextprotocol/conformance). See [VALIDATION_RESULTS.md](../VALIDATION_RESULTS.md) for detailed results.
1010

@@ -22,9 +22,8 @@ The server has been validated against the official [MCP conformance test suite](
2222
- SEP-1034: Default values for all primitive types
2323
- SEP-1330: All enum schema variants
2424

25-
**Resources** (4/6)
26-
- List, read text/binary, templates
27-
- ⚠️ Subscribe/unsubscribe (SDK limitation)
25+
**Resources** (6/6)
26+
- List, read text/binary, templates, subscribe, unsubscribe
2827

2928
**Prompts** (4/4)
3029
- Simple, parameterized, embedded resources, images
@@ -191,12 +190,7 @@ curl -X POST http://localhost:8080/mcp \
191190

192191
## Known Limitations
193192

194-
See [VALIDATION_RESULTS.md](../VALIDATION_RESULTS.md) for details on:
195-
196-
1. **Resource Subscriptions** - Not implemented in Java SDK
197-
2. **DNS Rebinding Protection** - Missing Host/Origin validation
198-
199-
These are SDK-level limitations that require fixes in the core framework.
193+
See [VALIDATION_RESULTS.md](../VALIDATION_RESULTS.md) for details on remaining client-side limitations.
200194

201195
## References
202196

conformance-tests/server-servlet/pom.xml

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -65,6 +65,7 @@
6565
<version>3.1.0</version>
6666
<configuration>
6767
<mainClass>io.modelcontextprotocol.conformance.server.ConformanceServlet</mainClass>
68+
<skip>false</skip>
6869
</configuration>
6970
</plugin>
7071
</plugins>

0 commit comments

Comments
 (0)