Skip to content

Commit f734e79

Browse files
Merge branch 'main' into main
2 parents dc3e5cf + cbb235f commit f734e79

File tree

41 files changed

+1673
-347
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

41 files changed

+1673
-347
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-jdk-http-client/pom.xml

Lines changed: 8 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,7 @@
66
<parent>
77
<groupId>io.modelcontextprotocol.sdk</groupId>
88
<artifactId>conformance-tests</artifactId>
9-
<version>1.1.0-SNAPSHOT</version>
9+
<version>2.0.0-SNAPSHOT</version>
1010
</parent>
1111
<artifactId>client-jdk-http-client</artifactId>
1212
<packaging>jar</packaging>
@@ -16,19 +16,19 @@
1616

1717
<scm>
1818
<url>https://github.com/modelcontextprotocol/java-sdk</url>
19-
<connection>git://github.com/modelcontextprotocol/java-sdk.git</connection>
20-
<developerConnection>git@github.com/modelcontextprotocol/java-sdk.git</developerConnection>
19+
<connection>scm:git:git://github.com/modelcontextprotocol/java-sdk.git</connection>
20+
<developerConnection>scm:git:ssh://git@github.com/modelcontextprotocol/java-sdk.git</developerConnection>
2121
</scm>
2222

2323
<properties>
2424
<maven.deploy.skip>true</maven.deploy.skip>
2525
</properties>
26-
26+
2727
<dependencies>
2828
<dependency>
2929
<groupId>io.modelcontextprotocol.sdk</groupId>
3030
<artifactId>mcp</artifactId>
31-
<version>1.1.0-SNAPSHOT</version>
31+
<version>2.0.0-SNAPSHOT</version>
3232
</dependency>
3333

3434
<!-- Logging -->
@@ -57,7 +57,8 @@
5757
<transformers>
5858
<transformer
5959
implementation="org.apache.maven.plugins.shade.resource.ManifestResourceTransformer">
60-
<mainClass>io.modelcontextprotocol.conformance.client.ConformanceJdkClientMcpClient</mainClass>
60+
<mainClass>
61+
io.modelcontextprotocol.conformance.client.ConformanceJdkClientMcpClient</mainClass>
6162
</transformer>
6263
<transformer
6364
implementation="org.apache.maven.plugins.shade.resource.ServicesResourceTransformer" />
@@ -79,4 +80,4 @@
7980
</plugins>
8081
</build>
8182

82-
</project>
83+
</project>

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: 27 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -4,31 +4,41 @@
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>2.0.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>
1815
<url>https://github.com/modelcontextprotocol/java-sdk</url>
1916

2017
<scm>
2118
<url>https://github.com/modelcontextprotocol/java-sdk</url>
22-
<connection>git://github.com/modelcontextprotocol/java-sdk.git</connection>
23-
<developerConnection>git@github.com/modelcontextprotocol/java-sdk.git</developerConnection>
19+
<connection>scm:git:git://github.com/modelcontextprotocol/java-sdk.git</connection>
20+
<developerConnection>scm:git:ssh://git@github.com/modelcontextprotocol/java-sdk.git</developerConnection>
2421
</scm>
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>
@@ -88,4 +106,4 @@
88106
</repository>
89107
</repositories>
90108

91-
</project>
109+
</project>

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/pom.xml

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,7 @@
66
<parent>
77
<groupId>io.modelcontextprotocol.sdk</groupId>
88
<artifactId>mcp-parent</artifactId>
9-
<version>1.1.0-SNAPSHOT</version>
9+
<version>2.0.0-SNAPSHOT</version>
1010
</parent>
1111
<artifactId>conformance-tests</artifactId>
1212
<packaging>pom</packaging>
@@ -16,18 +16,18 @@
1616

1717
<scm>
1818
<url>https://github.com/modelcontextprotocol/java-sdk</url>
19-
<connection>git://github.com/modelcontextprotocol/java-sdk.git</connection>
20-
<developerConnection>git@github.com/modelcontextprotocol/java-sdk.git</developerConnection>
19+
<connection>scm:git:git://github.com/modelcontextprotocol/java-sdk.git</connection>
20+
<developerConnection>scm:git:ssh://git@github.com/modelcontextprotocol/java-sdk.git</developerConnection>
2121
</scm>
2222

2323
<properties>
2424
<maven.deploy.skip>true</maven.deploy.skip>
2525
</properties>
26-
26+
2727
<modules>
2828
<module>client-jdk-http-client</module>
2929
<module>client-spring-http-client</module>
3030
<module>server-servlet</module>
3131
</modules>
3232

33-
</project>
33+
</project>

0 commit comments

Comments
 (0)