- org.springframework.experimental
+ org.modelcontextprotocol.sdk
mcp-test
0.7.0-SNAPSHOT
test
diff --git a/mcp-transport/mcp-webflux-sse-transport/src/main/java/org/springframework/ai/mcp/client/transport/WebFluxSseClientTransport.java b/mcp-transport/mcp-webflux-sse-transport/src/main/java/org/modelcontextprotocol/client/transport/WebFluxSseClientTransport.java
similarity index 96%
rename from mcp-transport/mcp-webflux-sse-transport/src/main/java/org/springframework/ai/mcp/client/transport/WebFluxSseClientTransport.java
rename to mcp-transport/mcp-webflux-sse-transport/src/main/java/org/modelcontextprotocol/client/transport/WebFluxSseClientTransport.java
index a4605c65..78a42917 100644
--- a/mcp-transport/mcp-webflux-sse-transport/src/main/java/org/springframework/ai/mcp/client/transport/WebFluxSseClientTransport.java
+++ b/mcp-transport/mcp-webflux-sse-transport/src/main/java/org/modelcontextprotocol/client/transport/WebFluxSseClientTransport.java
@@ -13,7 +13,7 @@
* See the License for the specific language governing permissions and
* limitations under the License.
*/
-package org.springframework.ai.mcp.client.transport;
+package org.modelcontextprotocol.client.transport;
import java.io.IOException;
import java.util.function.BiConsumer;
@@ -21,6 +21,11 @@
import com.fasterxml.jackson.core.type.TypeReference;
import com.fasterxml.jackson.databind.ObjectMapper;
+import org.modelcontextprotocol.spec.ClientMcpTransport;
+import org.modelcontextprotocol.spec.McpError;
+import org.modelcontextprotocol.spec.McpSchema;
+import org.modelcontextprotocol.spec.McpSchema.JSONRPCMessage;
+import org.modelcontextprotocol.util.Assert;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import reactor.core.Disposable;
@@ -32,11 +37,6 @@
import reactor.util.retry.Retry;
import reactor.util.retry.Retry.RetrySignal;
-import org.springframework.ai.mcp.spec.ClientMcpTransport;
-import org.springframework.ai.mcp.spec.McpError;
-import org.springframework.ai.mcp.spec.McpSchema;
-import org.springframework.ai.mcp.spec.McpSchema.JSONRPCMessage;
-import org.springframework.ai.mcp.util.Assert;
import org.springframework.core.ParameterizedTypeReference;
import org.springframework.http.MediaType;
import org.springframework.http.codec.ServerSentEvent;
@@ -44,7 +44,7 @@
/**
* Server-Sent Events (SSE) implementation of the
- * {@link org.springframework.ai.mcp.spec.McpTransport} that follows the MCP HTTP with SSE
+ * {@link org.modelcontextprotocol.spec.McpTransport} that follows the MCP HTTP with SSE
* transport specification.
*
*
diff --git a/mcp-transport/mcp-webflux-sse-transport/src/main/java/org/springframework/ai/mcp/server/transport/WebFluxSseServerTransport.java b/mcp-transport/mcp-webflux-sse-transport/src/main/java/org/modelcontextprotocol/server/transport/WebFluxSseServerTransport.java
similarity index 98%
rename from mcp-transport/mcp-webflux-sse-transport/src/main/java/org/springframework/ai/mcp/server/transport/WebFluxSseServerTransport.java
rename to mcp-transport/mcp-webflux-sse-transport/src/main/java/org/modelcontextprotocol/server/transport/WebFluxSseServerTransport.java
index 6126eba5..8baf6968 100644
--- a/mcp-transport/mcp-webflux-sse-transport/src/main/java/org/springframework/ai/mcp/server/transport/WebFluxSseServerTransport.java
+++ b/mcp-transport/mcp-webflux-sse-transport/src/main/java/org/modelcontextprotocol/server/transport/WebFluxSseServerTransport.java
@@ -1,4 +1,4 @@
-package org.springframework.ai.mcp.server.transport;
+package org.modelcontextprotocol.server.transport;
import java.io.IOException;
import java.time.Duration;
@@ -9,16 +9,16 @@
import com.fasterxml.jackson.core.type.TypeReference;
import com.fasterxml.jackson.databind.ObjectMapper;
+import org.modelcontextprotocol.spec.McpError;
+import org.modelcontextprotocol.spec.McpSchema;
+import org.modelcontextprotocol.spec.ServerMcpTransport;
+import org.modelcontextprotocol.util.Assert;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import reactor.core.publisher.Flux;
import reactor.core.publisher.Mono;
import reactor.core.publisher.Sinks;
-import org.springframework.ai.mcp.spec.McpError;
-import org.springframework.ai.mcp.spec.McpSchema;
-import org.springframework.ai.mcp.spec.ServerMcpTransport;
-import org.springframework.ai.mcp.util.Assert;
import org.springframework.http.HttpStatus;
import org.springframework.http.MediaType;
import org.springframework.http.codec.ServerSentEvent;
diff --git a/mcp-transport/mcp-webflux-sse-transport/src/test/java/org/springframework/ai/mcp/WebFluxSseIntegrationTests.java b/mcp-transport/mcp-webflux-sse-transport/src/test/java/org/modelcontextprotocol/WebFluxSseIntegrationTests.java
similarity index 91%
rename from mcp-transport/mcp-webflux-sse-transport/src/test/java/org/springframework/ai/mcp/WebFluxSseIntegrationTests.java
rename to mcp-transport/mcp-webflux-sse-transport/src/test/java/org/modelcontextprotocol/WebFluxSseIntegrationTests.java
index ca968cfb..9ac21b18 100644
--- a/mcp-transport/mcp-webflux-sse-transport/src/test/java/org/springframework/ai/mcp/WebFluxSseIntegrationTests.java
+++ b/mcp-transport/mcp-webflux-sse-transport/src/test/java/org/modelcontextprotocol/WebFluxSseIntegrationTests.java
@@ -13,7 +13,7 @@
* See the License for the specific language governing permissions and
* limitations under the License.
*/
-package org.springframework.ai.mcp;
+package org.modelcontextprotocol;
import java.time.Duration;
import java.util.List;
@@ -28,27 +28,27 @@
import org.junit.jupiter.api.Test;
import org.junit.jupiter.params.ParameterizedTest;
import org.junit.jupiter.params.provider.ValueSource;
+import org.modelcontextprotocol.client.McpClient;
+import org.modelcontextprotocol.client.transport.HttpClientSseClientTransport;
+import org.modelcontextprotocol.client.transport.WebFluxSseClientTransport;
+import org.modelcontextprotocol.server.McpServer;
+import org.modelcontextprotocol.server.McpServerFeatures;
+import org.modelcontextprotocol.server.transport.WebFluxSseServerTransport;
+import org.modelcontextprotocol.spec.McpError;
+import org.modelcontextprotocol.spec.McpSchema;
+import org.modelcontextprotocol.spec.McpSchema.CallToolResult;
+import org.modelcontextprotocol.spec.McpSchema.ClientCapabilities;
+import org.modelcontextprotocol.spec.McpSchema.CreateMessageRequest;
+import org.modelcontextprotocol.spec.McpSchema.CreateMessageResult;
+import org.modelcontextprotocol.spec.McpSchema.InitializeResult;
+import org.modelcontextprotocol.spec.McpSchema.Role;
+import org.modelcontextprotocol.spec.McpSchema.Root;
+import org.modelcontextprotocol.spec.McpSchema.ServerCapabilities;
+import org.modelcontextprotocol.spec.McpSchema.Tool;
import reactor.netty.DisposableServer;
import reactor.netty.http.server.HttpServer;
import reactor.test.StepVerifier;
-import org.springframework.ai.mcp.client.McpClient;
-import org.springframework.ai.mcp.client.transport.HttpClientSseClientTransport;
-import org.springframework.ai.mcp.client.transport.WebFluxSseClientTransport;
-import org.springframework.ai.mcp.server.McpServer;
-import org.springframework.ai.mcp.server.McpServerFeatures;
-import org.springframework.ai.mcp.server.transport.WebFluxSseServerTransport;
-import org.springframework.ai.mcp.spec.McpError;
-import org.springframework.ai.mcp.spec.McpSchema;
-import org.springframework.ai.mcp.spec.McpSchema.CallToolResult;
-import org.springframework.ai.mcp.spec.McpSchema.ClientCapabilities;
-import org.springframework.ai.mcp.spec.McpSchema.CreateMessageRequest;
-import org.springframework.ai.mcp.spec.McpSchema.CreateMessageResult;
-import org.springframework.ai.mcp.spec.McpSchema.InitializeResult;
-import org.springframework.ai.mcp.spec.McpSchema.Role;
-import org.springframework.ai.mcp.spec.McpSchema.Root;
-import org.springframework.ai.mcp.spec.McpSchema.ServerCapabilities;
-import org.springframework.ai.mcp.spec.McpSchema.Tool;
import org.springframework.http.server.reactive.HttpHandler;
import org.springframework.http.server.reactive.ReactorHttpHandlerAdapter;
import org.springframework.web.client.RestClient;
@@ -373,7 +373,7 @@ void testToolCallSuccess(String clientType) {
// perform a blocking call to a remote service
String response = RestClient.create()
.get()
- .uri("https://github.com/spring-projects-experimental/spring-ai-mcp/blob/main/README.md")
+ .uri("https://github.com/modelcontextprotocol/java-sdk/blob/main/README.md")
.retrieve()
.body(String.class);
assertThat(response).isNotBlank();
@@ -413,7 +413,7 @@ void testToolListChangeHandlingSuccess(String clientType) {
// perform a blocking call to a remote service
String response = RestClient.create()
.get()
- .uri("https://github.com/spring-projects-experimental/spring-ai-mcp/blob/main/README.md")
+ .uri("https://github.com/modelcontextprotocol/java-sdk/blob/main/README.md")
.retrieve()
.body(String.class);
assertThat(response).isNotBlank();
@@ -430,7 +430,7 @@ void testToolListChangeHandlingSuccess(String clientType) {
// perform a blocking call to a remote service
String response = RestClient.create()
.get()
- .uri("https://github.com/spring-projects-experimental/spring-ai-mcp/blob/main/README.md")
+ .uri("https://github.com/modelcontextprotocol/java-sdk/blob/main/README.md")
.retrieve()
.body(String.class);
assertThat(response).isNotBlank();
diff --git a/mcp-transport/mcp-webflux-sse-transport/src/test/java/org/springframework/ai/mcp/client/WebFluxSseMcpAsyncClientTests.java b/mcp-transport/mcp-webflux-sse-transport/src/test/java/org/modelcontextprotocol/client/WebFluxSseMcpAsyncClientTests.java
similarity index 91%
rename from mcp-transport/mcp-webflux-sse-transport/src/test/java/org/springframework/ai/mcp/client/WebFluxSseMcpAsyncClientTests.java
rename to mcp-transport/mcp-webflux-sse-transport/src/test/java/org/modelcontextprotocol/client/WebFluxSseMcpAsyncClientTests.java
index 761dd6ab..9f726c48 100644
--- a/mcp-transport/mcp-webflux-sse-transport/src/test/java/org/springframework/ai/mcp/client/WebFluxSseMcpAsyncClientTests.java
+++ b/mcp-transport/mcp-webflux-sse-transport/src/test/java/org/modelcontextprotocol/client/WebFluxSseMcpAsyncClientTests.java
@@ -14,14 +14,14 @@
* limitations under the License.
*/
-package org.springframework.ai.mcp.client;
+package org.modelcontextprotocol.client;
import org.junit.jupiter.api.Timeout;
+import org.modelcontextprotocol.client.transport.WebFluxSseClientTransport;
+import org.modelcontextprotocol.spec.ClientMcpTransport;
import org.testcontainers.containers.GenericContainer;
import org.testcontainers.containers.wait.strategy.Wait;
-import org.springframework.ai.mcp.client.transport.WebFluxSseClientTransport;
-import org.springframework.ai.mcp.spec.ClientMcpTransport;
import org.springframework.web.reactive.function.client.WebClient;
/**
diff --git a/mcp-transport/mcp-webflux-sse-transport/src/test/java/org/springframework/ai/mcp/client/WebFluxSseMcpSyncClientTests.java b/mcp-transport/mcp-webflux-sse-transport/src/test/java/org/modelcontextprotocol/client/WebFluxSseMcpSyncClientTests.java
similarity index 91%
rename from mcp-transport/mcp-webflux-sse-transport/src/test/java/org/springframework/ai/mcp/client/WebFluxSseMcpSyncClientTests.java
rename to mcp-transport/mcp-webflux-sse-transport/src/test/java/org/modelcontextprotocol/client/WebFluxSseMcpSyncClientTests.java
index 41153afd..4371bffa 100644
--- a/mcp-transport/mcp-webflux-sse-transport/src/test/java/org/springframework/ai/mcp/client/WebFluxSseMcpSyncClientTests.java
+++ b/mcp-transport/mcp-webflux-sse-transport/src/test/java/org/modelcontextprotocol/client/WebFluxSseMcpSyncClientTests.java
@@ -14,14 +14,14 @@
* limitations under the License.
*/
-package org.springframework.ai.mcp.client;
+package org.modelcontextprotocol.client;
import org.junit.jupiter.api.Timeout;
+import org.modelcontextprotocol.client.transport.WebFluxSseClientTransport;
+import org.modelcontextprotocol.spec.ClientMcpTransport;
import org.testcontainers.containers.GenericContainer;
import org.testcontainers.containers.wait.strategy.Wait;
-import org.springframework.ai.mcp.client.transport.WebFluxSseClientTransport;
-import org.springframework.ai.mcp.spec.ClientMcpTransport;
import org.springframework.web.reactive.function.client.WebClient;
/**
diff --git a/mcp-transport/mcp-webflux-sse-transport/src/test/java/org/springframework/ai/mcp/client/transport/WebFluxSseClientTransportTests.java b/mcp-transport/mcp-webflux-sse-transport/src/test/java/org/modelcontextprotocol/client/transport/WebFluxSseClientTransportTests.java
similarity index 98%
rename from mcp-transport/mcp-webflux-sse-transport/src/test/java/org/springframework/ai/mcp/client/transport/WebFluxSseClientTransportTests.java
rename to mcp-transport/mcp-webflux-sse-transport/src/test/java/org/modelcontextprotocol/client/transport/WebFluxSseClientTransportTests.java
index a75f851d..ec475298 100644
--- a/mcp-transport/mcp-webflux-sse-transport/src/test/java/org/springframework/ai/mcp/client/transport/WebFluxSseClientTransportTests.java
+++ b/mcp-transport/mcp-webflux-sse-transport/src/test/java/org/modelcontextprotocol/client/transport/WebFluxSseClientTransportTests.java
@@ -14,7 +14,7 @@
* limitations under the License.
*/
-package org.springframework.ai.mcp.client.transport;
+package org.modelcontextprotocol.client.transport;
import java.time.Duration;
import java.util.Map;
@@ -26,6 +26,8 @@
import org.junit.jupiter.api.BeforeEach;
import org.junit.jupiter.api.Test;
import org.junit.jupiter.api.Timeout;
+import org.modelcontextprotocol.spec.McpSchema;
+import org.modelcontextprotocol.spec.McpSchema.JSONRPCRequest;
import org.testcontainers.containers.GenericContainer;
import org.testcontainers.containers.wait.strategy.Wait;
import reactor.core.publisher.Flux;
@@ -33,8 +35,6 @@
import reactor.core.publisher.Sinks;
import reactor.test.StepVerifier;
-import org.springframework.ai.mcp.spec.McpSchema;
-import org.springframework.ai.mcp.spec.McpSchema.JSONRPCRequest;
import org.springframework.http.codec.ServerSentEvent;
import org.springframework.web.reactive.function.client.WebClient;
diff --git a/mcp-transport/mcp-webflux-sse-transport/src/test/java/org/springframework/ai/mcp/server/WebFluxSseMcpAsyncServerTests.java b/mcp-transport/mcp-webflux-sse-transport/src/test/java/org/modelcontextprotocol/server/WebFluxSseMcpAsyncServerTests.java
similarity index 91%
rename from mcp-transport/mcp-webflux-sse-transport/src/test/java/org/springframework/ai/mcp/server/WebFluxSseMcpAsyncServerTests.java
rename to mcp-transport/mcp-webflux-sse-transport/src/test/java/org/modelcontextprotocol/server/WebFluxSseMcpAsyncServerTests.java
index b90c9a51..b149fa02 100644
--- a/mcp-transport/mcp-webflux-sse-transport/src/test/java/org/springframework/ai/mcp/server/WebFluxSseMcpAsyncServerTests.java
+++ b/mcp-transport/mcp-webflux-sse-transport/src/test/java/org/modelcontextprotocol/server/WebFluxSseMcpAsyncServerTests.java
@@ -14,15 +14,15 @@
* limitations under the License.
*/
-package org.springframework.ai.mcp.server;
+package org.modelcontextprotocol.server;
import com.fasterxml.jackson.databind.ObjectMapper;
import org.junit.jupiter.api.Timeout;
+import org.modelcontextprotocol.server.transport.WebFluxSseServerTransport;
+import org.modelcontextprotocol.spec.ServerMcpTransport;
import reactor.netty.DisposableServer;
import reactor.netty.http.server.HttpServer;
-import org.springframework.ai.mcp.server.transport.WebFluxSseServerTransport;
-import org.springframework.ai.mcp.spec.ServerMcpTransport;
import org.springframework.http.server.reactive.HttpHandler;
import org.springframework.http.server.reactive.ReactorHttpHandlerAdapter;
import org.springframework.web.reactive.function.server.RouterFunctions;
diff --git a/mcp-transport/mcp-webflux-sse-transport/src/test/java/org/springframework/ai/mcp/server/WebFluxSseMcpSyncServerTests.java b/mcp-transport/mcp-webflux-sse-transport/src/test/java/org/modelcontextprotocol/server/WebFluxSseMcpSyncServerTests.java
similarity index 91%
rename from mcp-transport/mcp-webflux-sse-transport/src/test/java/org/springframework/ai/mcp/server/WebFluxSseMcpSyncServerTests.java
rename to mcp-transport/mcp-webflux-sse-transport/src/test/java/org/modelcontextprotocol/server/WebFluxSseMcpSyncServerTests.java
index 048d6398..6d00edcc 100644
--- a/mcp-transport/mcp-webflux-sse-transport/src/test/java/org/springframework/ai/mcp/server/WebFluxSseMcpSyncServerTests.java
+++ b/mcp-transport/mcp-webflux-sse-transport/src/test/java/org/modelcontextprotocol/server/WebFluxSseMcpSyncServerTests.java
@@ -14,15 +14,15 @@
* limitations under the License.
*/
-package org.springframework.ai.mcp.server;
+package org.modelcontextprotocol.server;
import com.fasterxml.jackson.databind.ObjectMapper;
import org.junit.jupiter.api.Timeout;
+import org.modelcontextprotocol.server.transport.WebFluxSseServerTransport;
+import org.modelcontextprotocol.spec.ServerMcpTransport;
import reactor.netty.DisposableServer;
import reactor.netty.http.server.HttpServer;
-import org.springframework.ai.mcp.server.transport.WebFluxSseServerTransport;
-import org.springframework.ai.mcp.spec.ServerMcpTransport;
import org.springframework.http.server.reactive.HttpHandler;
import org.springframework.http.server.reactive.ReactorHttpHandlerAdapter;
import org.springframework.web.reactive.function.server.RouterFunctions;
diff --git a/mcp/src/test/java/org/springframework/ai/mcp/server/transport/BlockingInputStream.java b/mcp-transport/mcp-webflux-sse-transport/src/test/java/org/modelcontextprotocol/server/transport/BlockingInputStream.java
similarity index 97%
rename from mcp/src/test/java/org/springframework/ai/mcp/server/transport/BlockingInputStream.java
rename to mcp-transport/mcp-webflux-sse-transport/src/test/java/org/modelcontextprotocol/server/transport/BlockingInputStream.java
index 96690dbd..b7de2b99 100644
--- a/mcp/src/test/java/org/springframework/ai/mcp/server/transport/BlockingInputStream.java
+++ b/mcp-transport/mcp-webflux-sse-transport/src/test/java/org/modelcontextprotocol/server/transport/BlockingInputStream.java
@@ -13,7 +13,7 @@
* See the License for the specific language governing permissions and
* limitations under the License.
*/
-package org.springframework.ai.mcp.server.transport;
+package org.modelcontextprotocol.server.transport;
import java.io.IOException;
import java.io.InputStream;
diff --git a/mcp-transport/mcp-webflux-sse-transport/src/test/java/org/springframework/ai/mcp/server/transport/_SseServerTransportTests.java_ b/mcp-transport/mcp-webflux-sse-transport/src/test/java/org/modelcontextprotocol/server/transport/_SseServerTransportTests.java_
similarity index 100%
rename from mcp-transport/mcp-webflux-sse-transport/src/test/java/org/springframework/ai/mcp/server/transport/_SseServerTransportTests.java_
rename to mcp-transport/mcp-webflux-sse-transport/src/test/java/org/modelcontextprotocol/server/transport/_SseServerTransportTests.java_
diff --git a/mcp-transport/mcp-webmvc-sse-transport/README.md b/mcp-transport/mcp-webmvc-sse-transport/README.md
index 0b73e73c..22ed7e43 100644
--- a/mcp-transport/mcp-webmvc-sse-transport/README.md
+++ b/mcp-transport/mcp-webmvc-sse-transport/README.md
@@ -2,7 +2,7 @@
```xml
- org.springframework.experimental
+ org.modelcontextprotocol.sdk
mcp-webmvc-sse-transport
```
diff --git a/mcp-transport/mcp-webmvc-sse-transport/pom.xml b/mcp-transport/mcp-webmvc-sse-transport/pom.xml
index 7957e60e..7dcb1693 100644
--- a/mcp-transport/mcp-webmvc-sse-transport/pom.xml
+++ b/mcp-transport/mcp-webmvc-sse-transport/pom.xml
@@ -4,7 +4,7 @@
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd">
4.0.0
- org.springframework.experimental
+ org.modelcontextprotocol.sdk
mcp-parent
0.7.0-SNAPSHOT
../../pom.xml
@@ -13,23 +13,23 @@
jar
Spring Web MVC implementation of the Java MCP SSE transport
- https://github.com/spring-projects-experimental/spring-ai-mcp
+ https://github.com/modelcontextprotocol/java-sdk
- https://github.com/spring-projects-experimental/spring-ai-mcp
- git://github.com/spring-projects-experimental/spring-ai-mcp.git
- git@github.com:spring-projects-experimental/spring-ai-mcp.git
+ https://github.com/modelcontextprotocol/java-sdk
+ git://github.com/modelcontextprotocol/java-sdk.git
+ git@github.com/modelcontextprotocol/java-sdk.git
- org.springframework.experimental
+ org.modelcontextprotocol.sdk
mcp
0.7.0-SNAPSHOT
- org.springframework.experimental
+ org.modelcontextprotocol.sdk
mcp-test
0.7.0-SNAPSHOT
test
diff --git a/mcp-transport/mcp-webmvc-sse-transport/src/main/java/org/springframework/ai/mcp/server/transport/WebMvcSseServerTransport.java b/mcp-transport/mcp-webmvc-sse-transport/src/main/java/org/modelcontextprotocol/server/transport/WebMvcSseServerTransport.java
similarity index 98%
rename from mcp-transport/mcp-webmvc-sse-transport/src/main/java/org/springframework/ai/mcp/server/transport/WebMvcSseServerTransport.java
rename to mcp-transport/mcp-webmvc-sse-transport/src/main/java/org/modelcontextprotocol/server/transport/WebMvcSseServerTransport.java
index cee0b48c..cfbc4676 100644
--- a/mcp-transport/mcp-webmvc-sse-transport/src/main/java/org/springframework/ai/mcp/server/transport/WebMvcSseServerTransport.java
+++ b/mcp-transport/mcp-webmvc-sse-transport/src/main/java/org/modelcontextprotocol/server/transport/WebMvcSseServerTransport.java
@@ -14,7 +14,7 @@
* limitations under the License.
*/
-package org.springframework.ai.mcp.server.transport;
+package org.modelcontextprotocol.server.transport;
import java.io.IOException;
import java.util.UUID;
@@ -23,14 +23,14 @@
import com.fasterxml.jackson.core.type.TypeReference;
import com.fasterxml.jackson.databind.ObjectMapper;
+import org.modelcontextprotocol.spec.McpError;
+import org.modelcontextprotocol.spec.McpSchema;
+import org.modelcontextprotocol.spec.ServerMcpTransport;
+import org.modelcontextprotocol.util.Assert;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import reactor.core.publisher.Mono;
-import org.springframework.ai.mcp.spec.McpError;
-import org.springframework.ai.mcp.spec.McpSchema;
-import org.springframework.ai.mcp.spec.ServerMcpTransport;
-import org.springframework.ai.mcp.util.Assert;
import org.springframework.http.HttpStatus;
import org.springframework.web.servlet.function.RouterFunction;
import org.springframework.web.servlet.function.RouterFunctions;
@@ -271,6 +271,7 @@ private ServerResponse handleMessage(ServerRequest request) {
// Convert the message to a Mono, apply the handler, and block for the
// response
+ @SuppressWarnings("unused")
McpSchema.JSONRPCMessage response = Mono.just(message).transform(connectHandler).block();
return ServerResponse.ok().build();
diff --git a/mcp-transport/mcp-webmvc-sse-transport/src/test/java/org/springframework/ai/mcp/server/WebMvcSseAsyncServerTransportTests.java b/mcp-transport/mcp-webmvc-sse-transport/src/test/java/org/modelcontextprotocol/server/WebMvcSseAsyncServerTransportTests.java
similarity index 95%
rename from mcp-transport/mcp-webmvc-sse-transport/src/test/java/org/springframework/ai/mcp/server/WebMvcSseAsyncServerTransportTests.java
rename to mcp-transport/mcp-webmvc-sse-transport/src/test/java/org/modelcontextprotocol/server/WebMvcSseAsyncServerTransportTests.java
index 374a5c59..aad11c57 100644
--- a/mcp-transport/mcp-webmvc-sse-transport/src/test/java/org/springframework/ai/mcp/server/WebMvcSseAsyncServerTransportTests.java
+++ b/mcp-transport/mcp-webmvc-sse-transport/src/test/java/org/modelcontextprotocol/server/WebMvcSseAsyncServerTransportTests.java
@@ -14,16 +14,16 @@
* limitations under the License.
*/
-package org.springframework.ai.mcp.server;
+package org.modelcontextprotocol.server;
import com.fasterxml.jackson.databind.ObjectMapper;
import org.apache.catalina.Context;
import org.apache.catalina.LifecycleException;
import org.apache.catalina.startup.Tomcat;
import org.junit.jupiter.api.Timeout;
+import org.modelcontextprotocol.server.transport.WebMvcSseServerTransport;
+import org.modelcontextprotocol.spec.ServerMcpTransport;
-import org.springframework.ai.mcp.server.transport.WebMvcSseServerTransport;
-import org.springframework.ai.mcp.spec.ServerMcpTransport;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.web.context.support.AnnotationConfigWebApplicationContext;
diff --git a/mcp-transport/mcp-webmvc-sse-transport/src/test/java/org/springframework/ai/mcp/server/WebMvcSseIntegrationTests.java b/mcp-transport/mcp-webmvc-sse-transport/src/test/java/org/modelcontextprotocol/server/WebMvcSseIntegrationTests.java
similarity index 92%
rename from mcp-transport/mcp-webmvc-sse-transport/src/test/java/org/springframework/ai/mcp/server/WebMvcSseIntegrationTests.java
rename to mcp-transport/mcp-webmvc-sse-transport/src/test/java/org/modelcontextprotocol/server/WebMvcSseIntegrationTests.java
index 308be78f..0c9f629f 100644
--- a/mcp-transport/mcp-webmvc-sse-transport/src/test/java/org/springframework/ai/mcp/server/WebMvcSseIntegrationTests.java
+++ b/mcp-transport/mcp-webmvc-sse-transport/src/test/java/org/modelcontextprotocol/server/WebMvcSseIntegrationTests.java
@@ -13,7 +13,7 @@
* See the License for the specific language governing permissions and
* limitations under the License.
*/
-package org.springframework.ai.mcp.server;
+package org.modelcontextprotocol.server;
import java.time.Duration;
import java.util.List;
@@ -29,24 +29,22 @@
import org.junit.jupiter.api.AfterEach;
import org.junit.jupiter.api.BeforeEach;
import org.junit.jupiter.api.Test;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
+import org.modelcontextprotocol.client.McpClient;
+import org.modelcontextprotocol.client.transport.HttpClientSseClientTransport;
+import org.modelcontextprotocol.server.transport.WebMvcSseServerTransport;
+import org.modelcontextprotocol.spec.McpError;
+import org.modelcontextprotocol.spec.McpSchema;
+import org.modelcontextprotocol.spec.McpSchema.CallToolResult;
+import org.modelcontextprotocol.spec.McpSchema.ClientCapabilities;
+import org.modelcontextprotocol.spec.McpSchema.CreateMessageRequest;
+import org.modelcontextprotocol.spec.McpSchema.CreateMessageResult;
+import org.modelcontextprotocol.spec.McpSchema.InitializeResult;
+import org.modelcontextprotocol.spec.McpSchema.Role;
+import org.modelcontextprotocol.spec.McpSchema.Root;
+import org.modelcontextprotocol.spec.McpSchema.ServerCapabilities;
+import org.modelcontextprotocol.spec.McpSchema.Tool;
import reactor.test.StepVerifier;
-import org.springframework.ai.mcp.client.McpClient;
-import org.springframework.ai.mcp.client.transport.HttpClientSseClientTransport;
-import org.springframework.ai.mcp.server.transport.WebMvcSseServerTransport;
-import org.springframework.ai.mcp.spec.McpError;
-import org.springframework.ai.mcp.spec.McpSchema;
-import org.springframework.ai.mcp.spec.McpSchema.CallToolResult;
-import org.springframework.ai.mcp.spec.McpSchema.ClientCapabilities;
-import org.springframework.ai.mcp.spec.McpSchema.CreateMessageRequest;
-import org.springframework.ai.mcp.spec.McpSchema.CreateMessageResult;
-import org.springframework.ai.mcp.spec.McpSchema.InitializeResult;
-import org.springframework.ai.mcp.spec.McpSchema.Role;
-import org.springframework.ai.mcp.spec.McpSchema.Root;
-import org.springframework.ai.mcp.spec.McpSchema.ServerCapabilities;
-import org.springframework.ai.mcp.spec.McpSchema.Tool;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.web.client.RestClient;
@@ -62,8 +60,6 @@
public class WebMvcSseIntegrationTests {
- private static final Logger logger = LoggerFactory.getLogger(WebMvcSseIntegrationTests.class);
-
private static final int PORT = 8183;
private static final String MESSAGE_ENDPOINT = "/mcp/message";
@@ -411,7 +407,7 @@ void testToolCallSuccess() {
// perform a blocking call to a remote service
String response = RestClient.create()
.get()
- .uri("https://github.com/spring-projects-experimental/spring-ai-mcp/blob/main/README.md")
+ .uri("https://github.com/modelcontextprotocol/java-sdk/blob/main/README.md")
.retrieve()
.body(String.class);
assertThat(response).isNotBlank();
@@ -448,7 +444,7 @@ void testToolListChangeHandlingSuccess() {
// perform a blocking call to a remote service
String response = RestClient.create()
.get()
- .uri("https://github.com/spring-projects-experimental/spring-ai-mcp/blob/main/README.md")
+ .uri("https://github.com/modelcontextprotocol/java-sdk/blob/main/README.md")
.retrieve()
.body(String.class);
assertThat(response).isNotBlank();
@@ -465,7 +461,7 @@ void testToolListChangeHandlingSuccess() {
// perform a blocking call to a remote service
String response = RestClient.create()
.get()
- .uri("https://github.com/spring-projects-experimental/spring-ai-mcp/blob/main/README.md")
+ .uri("https://github.com/modelcontextprotocol/java-sdk/blob/main/README.md")
.retrieve()
.body(String.class);
assertThat(response).isNotBlank();
diff --git a/mcp-transport/mcp-webmvc-sse-transport/src/test/java/org/springframework/ai/mcp/server/WebMvcSseSyncServerTransportTests.java b/mcp-transport/mcp-webmvc-sse-transport/src/test/java/org/modelcontextprotocol/server/WebMvcSseSyncServerTransportTests.java
similarity index 95%
rename from mcp-transport/mcp-webmvc-sse-transport/src/test/java/org/springframework/ai/mcp/server/WebMvcSseSyncServerTransportTests.java
rename to mcp-transport/mcp-webmvc-sse-transport/src/test/java/org/modelcontextprotocol/server/WebMvcSseSyncServerTransportTests.java
index 2c44c570..545ec013 100644
--- a/mcp-transport/mcp-webmvc-sse-transport/src/test/java/org/springframework/ai/mcp/server/WebMvcSseSyncServerTransportTests.java
+++ b/mcp-transport/mcp-webmvc-sse-transport/src/test/java/org/modelcontextprotocol/server/WebMvcSseSyncServerTransportTests.java
@@ -14,16 +14,16 @@
* limitations under the License.
*/
-package org.springframework.ai.mcp.server;
+package org.modelcontextprotocol.server;
import com.fasterxml.jackson.databind.ObjectMapper;
import org.apache.catalina.Context;
import org.apache.catalina.LifecycleException;
import org.apache.catalina.startup.Tomcat;
import org.junit.jupiter.api.Timeout;
+import org.modelcontextprotocol.server.transport.WebMvcSseServerTransport;
+import org.modelcontextprotocol.spec.ServerMcpTransport;
-import org.springframework.ai.mcp.server.transport.WebMvcSseServerTransport;
-import org.springframework.ai.mcp.spec.ServerMcpTransport;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.web.context.support.AnnotationConfigWebApplicationContext;
diff --git a/mcp-transport/mcp-webmvc-sse-transport/src/test/resources/logback.xml b/mcp-transport/mcp-webmvc-sse-transport/src/test/resources/logback.xml
index 517af52f..e300a15c 100644
--- a/mcp-transport/mcp-webmvc-sse-transport/src/test/resources/logback.xml
+++ b/mcp-transport/mcp-webmvc-sse-transport/src/test/resources/logback.xml
@@ -9,16 +9,16 @@
-
+
-
+
-
+
-
+
diff --git a/mcp/pom.xml b/mcp/pom.xml
index 6a81ca30..d727c55b 100644
--- a/mcp/pom.xml
+++ b/mcp/pom.xml
@@ -4,20 +4,20 @@
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd">
4.0.0
- org.springframework.experimental
+ org.modelcontextprotocol.sdk
mcp-parent
0.7.0-SNAPSHOT
mcp
jar
Java MCP SDK
- Java SDK implementation of the Model Context Protocol, enabling seamless integration with language models and AI tools
- https://github.com/spring-projects-experimental/spring-ai-mcp
+ Java SDK implementation of the Model Context Protocol, enabling seamless integration with language models and AI tools
+ https://github.com/modelcontextprotocol/java-sdk
- https://github.com/spring-projects-experimental/spring-ai-mcp
- git://github.com/spring-projects-experimental/spring-ai-mcp.git
- git@github.com:spring-projects-experimental/spring-ai-mcp.git
+ https://github.com/modelcontextprotocol/java-sdk
+ git://github.com/modelcontextprotocol/java-sdk.git
+ git@github.com/modelcontextprotocol/java-sdk.git
diff --git a/mcp/src/main/java/org/springframework/ai/mcp/client/McpAsyncClient.java b/mcp/src/main/java/org/modelcontextprotocol/client/McpAsyncClient.java
similarity index 96%
rename from mcp/src/main/java/org/springframework/ai/mcp/client/McpAsyncClient.java
rename to mcp/src/main/java/org/modelcontextprotocol/client/McpAsyncClient.java
index 7f6ccc12..8ec3f9cc 100644
--- a/mcp/src/main/java/org/springframework/ai/mcp/client/McpAsyncClient.java
+++ b/mcp/src/main/java/org/modelcontextprotocol/client/McpAsyncClient.java
@@ -13,7 +13,7 @@
* See the License for the specific language governing permissions and
* limitations under the License.
*/
-package org.springframework.ai.mcp.client;
+package org.modelcontextprotocol.client;
import java.time.Duration;
import java.util.ArrayList;
@@ -25,35 +25,34 @@
import java.util.function.Function;
import com.fasterxml.jackson.core.type.TypeReference;
+import org.modelcontextprotocol.spec.ClientMcpTransport;
+import org.modelcontextprotocol.spec.DefaultMcpSession;
+import org.modelcontextprotocol.spec.McpError;
+import org.modelcontextprotocol.spec.McpSchema;
+import org.modelcontextprotocol.spec.McpTransport;
+import org.modelcontextprotocol.spec.DefaultMcpSession.NotificationHandler;
+import org.modelcontextprotocol.spec.DefaultMcpSession.RequestHandler;
+import org.modelcontextprotocol.spec.McpSchema.ClientCapabilities;
+import org.modelcontextprotocol.spec.McpSchema.CreateMessageRequest;
+import org.modelcontextprotocol.spec.McpSchema.CreateMessageResult;
+import org.modelcontextprotocol.spec.McpSchema.GetPromptRequest;
+import org.modelcontextprotocol.spec.McpSchema.GetPromptResult;
+import org.modelcontextprotocol.spec.McpSchema.Implementation;
+import org.modelcontextprotocol.spec.McpSchema.ListPromptsResult;
+import org.modelcontextprotocol.spec.McpSchema.LoggingLevel;
+import org.modelcontextprotocol.spec.McpSchema.LoggingMessageNotification;
+import org.modelcontextprotocol.spec.McpSchema.PaginatedRequest;
+import org.modelcontextprotocol.spec.McpSchema.Root;
+import org.modelcontextprotocol.spec.McpSchema.ClientCapabilities.RootCapabilities;
+import org.modelcontextprotocol.spec.McpSchema.ClientCapabilities.Sampling;
+import org.modelcontextprotocol.util.Assert;
+import org.modelcontextprotocol.util.Utils;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import reactor.core.publisher.Flux;
import reactor.core.publisher.Mono;
import reactor.core.scheduler.Schedulers;
-import org.springframework.ai.mcp.spec.ClientMcpTransport;
-import org.springframework.ai.mcp.spec.DefaultMcpSession;
-import org.springframework.ai.mcp.spec.DefaultMcpSession.NotificationHandler;
-import org.springframework.ai.mcp.spec.DefaultMcpSession.RequestHandler;
-import org.springframework.ai.mcp.spec.McpError;
-import org.springframework.ai.mcp.spec.McpSchema;
-import org.springframework.ai.mcp.spec.McpSchema.ClientCapabilities;
-import org.springframework.ai.mcp.spec.McpSchema.ClientCapabilities.RootCapabilities;
-import org.springframework.ai.mcp.spec.McpSchema.ClientCapabilities.Sampling;
-import org.springframework.ai.mcp.spec.McpSchema.CreateMessageRequest;
-import org.springframework.ai.mcp.spec.McpSchema.CreateMessageResult;
-import org.springframework.ai.mcp.spec.McpSchema.GetPromptRequest;
-import org.springframework.ai.mcp.spec.McpSchema.GetPromptResult;
-import org.springframework.ai.mcp.spec.McpSchema.Implementation;
-import org.springframework.ai.mcp.spec.McpSchema.ListPromptsResult;
-import org.springframework.ai.mcp.spec.McpSchema.LoggingLevel;
-import org.springframework.ai.mcp.spec.McpSchema.LoggingMessageNotification;
-import org.springframework.ai.mcp.spec.McpSchema.PaginatedRequest;
-import org.springframework.ai.mcp.spec.McpSchema.Root;
-import org.springframework.ai.mcp.spec.McpTransport;
-import org.springframework.ai.mcp.util.Assert;
-import org.springframework.ai.mcp.util.Utils;
-
/**
* The Model Context Protocol (MCP) client implementation that provides asynchronous
* communication with MCP servers using Project Reactor's Mono and Flux types.
@@ -529,6 +528,7 @@ public Mono rootsListChangedNotification() {
private RequestHandler rootsListRequestHandler() {
return params -> {
+ @SuppressWarnings("unused")
McpSchema.PaginatedRequest request = transport.unmarshalFrom(params,
new TypeReference() {
});
diff --git a/mcp/src/main/java/org/springframework/ai/mcp/client/McpClient.java b/mcp/src/main/java/org/modelcontextprotocol/client/McpClient.java
similarity index 98%
rename from mcp/src/main/java/org/springframework/ai/mcp/client/McpClient.java
rename to mcp/src/main/java/org/modelcontextprotocol/client/McpClient.java
index e11a9a71..83801c99 100644
--- a/mcp/src/main/java/org/springframework/ai/mcp/client/McpClient.java
+++ b/mcp/src/main/java/org/modelcontextprotocol/client/McpClient.java
@@ -14,7 +14,7 @@
* limitations under the License.
*/
-package org.springframework.ai.mcp.client;
+package org.modelcontextprotocol.client;
import java.time.Duration;
import java.util.ArrayList;
@@ -24,18 +24,17 @@
import java.util.function.Consumer;
import java.util.function.Function;
+import org.modelcontextprotocol.spec.ClientMcpTransport;
+import org.modelcontextprotocol.spec.McpSchema;
+import org.modelcontextprotocol.spec.McpTransport;
+import org.modelcontextprotocol.spec.McpSchema.ClientCapabilities;
+import org.modelcontextprotocol.spec.McpSchema.CreateMessageRequest;
+import org.modelcontextprotocol.spec.McpSchema.CreateMessageResult;
+import org.modelcontextprotocol.spec.McpSchema.Implementation;
+import org.modelcontextprotocol.spec.McpSchema.Root;
+import org.modelcontextprotocol.util.Assert;
import reactor.core.publisher.Mono;
-import org.springframework.ai.mcp.spec.ClientMcpTransport;
-import org.springframework.ai.mcp.spec.McpSchema;
-import org.springframework.ai.mcp.spec.McpSchema.ClientCapabilities;
-import org.springframework.ai.mcp.spec.McpSchema.CreateMessageRequest;
-import org.springframework.ai.mcp.spec.McpSchema.CreateMessageResult;
-import org.springframework.ai.mcp.spec.McpSchema.Implementation;
-import org.springframework.ai.mcp.spec.McpSchema.Root;
-import org.springframework.ai.mcp.spec.McpTransport;
-import org.springframework.ai.mcp.util.Assert;
-
/**
* Factory class for creating Model Context Protocol (MCP) clients. MCP is a protocol that
* enables AI models to interact with external tools and resources through a standardized
diff --git a/mcp/src/main/java/org/springframework/ai/mcp/client/McpClientFeatures.java b/mcp/src/main/java/org/modelcontextprotocol/client/McpClientFeatures.java
similarity index 98%
rename from mcp/src/main/java/org/springframework/ai/mcp/client/McpClientFeatures.java
rename to mcp/src/main/java/org/modelcontextprotocol/client/McpClientFeatures.java
index 05be98de..9733b861 100644
--- a/mcp/src/main/java/org/springframework/ai/mcp/client/McpClientFeatures.java
+++ b/mcp/src/main/java/org/modelcontextprotocol/client/McpClientFeatures.java
@@ -1,4 +1,4 @@
-package org.springframework.ai.mcp.client;
+package org.modelcontextprotocol.client;
import java.util.ArrayList;
import java.util.HashMap;
@@ -8,13 +8,12 @@
import java.util.function.Consumer;
import java.util.function.Function;
+import org.modelcontextprotocol.spec.McpSchema;
+import org.modelcontextprotocol.util.Assert;
+import org.modelcontextprotocol.util.Utils;
import reactor.core.publisher.Mono;
import reactor.core.scheduler.Schedulers;
-import org.springframework.ai.mcp.spec.McpSchema;
-import org.springframework.ai.mcp.util.Assert;
-import org.springframework.ai.mcp.util.Utils;
-
/**
* Representation of features and capabilities for Model Context Protocol (MCP) clients.
* This class provides two record types for managing client features:
diff --git a/mcp/src/main/java/org/springframework/ai/mcp/client/McpSyncClient.java b/mcp/src/main/java/org/modelcontextprotocol/client/McpSyncClient.java
similarity index 96%
rename from mcp/src/main/java/org/springframework/ai/mcp/client/McpSyncClient.java
rename to mcp/src/main/java/org/modelcontextprotocol/client/McpSyncClient.java
index 1d008ab9..fa464a78 100644
--- a/mcp/src/main/java/org/springframework/ai/mcp/client/McpSyncClient.java
+++ b/mcp/src/main/java/org/modelcontextprotocol/client/McpSyncClient.java
@@ -14,21 +14,20 @@
* limitations under the License.
*/
-package org.springframework.ai.mcp.client;
+package org.modelcontextprotocol.client;
import java.time.Duration;
+import org.modelcontextprotocol.spec.ClientMcpTransport;
+import org.modelcontextprotocol.spec.McpSchema;
+import org.modelcontextprotocol.spec.McpSchema.ClientCapabilities;
+import org.modelcontextprotocol.spec.McpSchema.GetPromptRequest;
+import org.modelcontextprotocol.spec.McpSchema.GetPromptResult;
+import org.modelcontextprotocol.spec.McpSchema.ListPromptsResult;
+import org.modelcontextprotocol.util.Assert;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
-import org.springframework.ai.mcp.spec.ClientMcpTransport;
-import org.springframework.ai.mcp.spec.McpSchema;
-import org.springframework.ai.mcp.spec.McpSchema.ClientCapabilities;
-import org.springframework.ai.mcp.spec.McpSchema.GetPromptRequest;
-import org.springframework.ai.mcp.spec.McpSchema.GetPromptResult;
-import org.springframework.ai.mcp.spec.McpSchema.ListPromptsResult;
-import org.springframework.ai.mcp.util.Assert;
-
/**
* A synchronous client implementation for the Model Context Protocol (MCP) that wraps an
* {@link McpAsyncClient} to provide blocking operations.
diff --git a/mcp/src/main/java/org/springframework/ai/mcp/client/transport/FlowSseClient.java b/mcp/src/main/java/org/modelcontextprotocol/client/transport/FlowSseClient.java
similarity index 99%
rename from mcp/src/main/java/org/springframework/ai/mcp/client/transport/FlowSseClient.java
rename to mcp/src/main/java/org/modelcontextprotocol/client/transport/FlowSseClient.java
index 4b6191d9..2f6d7984 100644
--- a/mcp/src/main/java/org/springframework/ai/mcp/client/transport/FlowSseClient.java
+++ b/mcp/src/main/java/org/modelcontextprotocol/client/transport/FlowSseClient.java
@@ -13,7 +13,7 @@
* See the License for the specific language governing permissions and
* limitations under the License.
*/
-package org.springframework.ai.mcp.client.transport;
+package org.modelcontextprotocol.client.transport;
import java.net.URI;
import java.net.http.HttpClient;
diff --git a/mcp/src/main/java/org/springframework/ai/mcp/client/transport/HttpClientSseClientTransport.java b/mcp/src/main/java/org/modelcontextprotocol/client/transport/HttpClientSseClientTransport.java
similarity index 93%
rename from mcp/src/main/java/org/springframework/ai/mcp/client/transport/HttpClientSseClientTransport.java
rename to mcp/src/main/java/org/modelcontextprotocol/client/transport/HttpClientSseClientTransport.java
index 68f10328..4a48d7c5 100644
--- a/mcp/src/main/java/org/springframework/ai/mcp/client/transport/HttpClientSseClientTransport.java
+++ b/mcp/src/main/java/org/modelcontextprotocol/client/transport/HttpClientSseClientTransport.java
@@ -13,20 +13,18 @@
* See the License for the specific language governing permissions and
* limitations under the License.
*/
-package org.springframework.ai.mcp.client.transport;
+package org.modelcontextprotocol.client.transport;
import com.fasterxml.jackson.core.type.TypeReference;
import com.fasterxml.jackson.databind.ObjectMapper;
+import org.modelcontextprotocol.client.transport.FlowSseClient.SseEvent;
+import org.modelcontextprotocol.spec.ClientMcpTransport;
+import org.modelcontextprotocol.spec.McpError;
+import org.modelcontextprotocol.spec.McpSchema;
+import org.modelcontextprotocol.spec.McpSchema.JSONRPCMessage;
+import org.modelcontextprotocol.util.Assert;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
-
-import org.springframework.ai.mcp.client.transport.FlowSseClient.SseEvent;
-import org.springframework.ai.mcp.spec.ClientMcpTransport;
-import org.springframework.ai.mcp.spec.McpError;
-import org.springframework.ai.mcp.spec.McpSchema;
-import org.springframework.ai.mcp.spec.McpSchema.JSONRPCMessage;
-import org.springframework.ai.mcp.util.Assert;
-
import reactor.core.publisher.Mono;
import java.io.IOException;
@@ -43,7 +41,7 @@
/**
* Server-Sent Events (SSE) implementation of the
- * {@link org.springframework.ai.mcp.spec.McpTransport} that follows the MCP HTTP with SSE
+ * {@link org.modelcontextprotocol.spec.McpTransport} that follows the MCP HTTP with SSE
* transport specification, using Java's HttpClient.
*
*
@@ -65,8 +63,8 @@
*
*
* @author Christian Tzolov
- * @see org.springframework.ai.mcp.spec.McpTransport
- * @see org.springframework.ai.mcp.spec.ClientMcpTransport
+ * @see org.modelcontextprotocol.spec.McpTransport
+ * @see org.modelcontextprotocol.spec.ClientMcpTransport
*/
public class HttpClientSseClientTransport implements ClientMcpTransport {
diff --git a/mcp/src/main/java/org/springframework/ai/mcp/client/transport/ServerParameters.java b/mcp/src/main/java/org/modelcontextprotocol/client/transport/ServerParameters.java
similarity index 97%
rename from mcp/src/main/java/org/springframework/ai/mcp/client/transport/ServerParameters.java
rename to mcp/src/main/java/org/modelcontextprotocol/client/transport/ServerParameters.java
index a5c68581..9a0e5748 100644
--- a/mcp/src/main/java/org/springframework/ai/mcp/client/transport/ServerParameters.java
+++ b/mcp/src/main/java/org/modelcontextprotocol/client/transport/ServerParameters.java
@@ -14,7 +14,7 @@
* limitations under the License.
*/
-package org.springframework.ai.mcp.client.transport;
+package org.modelcontextprotocol.client.transport;
import java.util.ArrayList;
import java.util.Arrays;
@@ -25,8 +25,7 @@
import com.fasterxml.jackson.annotation.JsonInclude;
import com.fasterxml.jackson.annotation.JsonProperty;
-
-import org.springframework.ai.mcp.util.Assert;
+import org.modelcontextprotocol.util.Assert;
/**
* Server parameters for stdio client.
diff --git a/mcp/src/main/java/org/springframework/ai/mcp/client/transport/StdioClientTransport.java b/mcp/src/main/java/org/modelcontextprotocol/client/transport/StdioClientTransport.java
similarity index 97%
rename from mcp/src/main/java/org/springframework/ai/mcp/client/transport/StdioClientTransport.java
rename to mcp/src/main/java/org/modelcontextprotocol/client/transport/StdioClientTransport.java
index 74d001a5..b30eb593 100644
--- a/mcp/src/main/java/org/springframework/ai/mcp/client/transport/StdioClientTransport.java
+++ b/mcp/src/main/java/org/modelcontextprotocol/client/transport/StdioClientTransport.java
@@ -14,7 +14,7 @@
* limitations under the License.
*/
-package org.springframework.ai.mcp.client.transport;
+package org.modelcontextprotocol.client.transport;
import java.io.BufferedReader;
import java.io.IOException;
@@ -30,6 +30,10 @@
import com.fasterxml.jackson.core.type.TypeReference;
import com.fasterxml.jackson.databind.ObjectMapper;
+import org.modelcontextprotocol.spec.ClientMcpTransport;
+import org.modelcontextprotocol.spec.McpSchema;
+import org.modelcontextprotocol.spec.McpSchema.JSONRPCMessage;
+import org.modelcontextprotocol.util.Assert;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import reactor.core.publisher.Flux;
@@ -38,11 +42,6 @@
import reactor.core.scheduler.Scheduler;
import reactor.core.scheduler.Schedulers;
-import org.springframework.ai.mcp.spec.ClientMcpTransport;
-import org.springframework.ai.mcp.spec.McpSchema;
-import org.springframework.ai.mcp.spec.McpSchema.JSONRPCMessage;
-import org.springframework.ai.mcp.util.Assert;
-
/**
* Implementation of the MCP Stdio transport that communicates with a server process using
* standard input/output streams. Messages are exchanged as newline-delimited JSON-RPC
diff --git a/mcp/src/main/java/org/springframework/ai/mcp/server/McpAsyncServer.java b/mcp/src/main/java/org/modelcontextprotocol/server/McpAsyncServer.java
similarity index 97%
rename from mcp/src/main/java/org/springframework/ai/mcp/server/McpAsyncServer.java
rename to mcp/src/main/java/org/modelcontextprotocol/server/McpAsyncServer.java
index 00971b7c..131d42a2 100644
--- a/mcp/src/main/java/org/springframework/ai/mcp/server/McpAsyncServer.java
+++ b/mcp/src/main/java/org/modelcontextprotocol/server/McpAsyncServer.java
@@ -14,7 +14,7 @@
* limitations under the License.
*/
-package org.springframework.ai.mcp.server;
+package org.modelcontextprotocol.server;
import java.time.Duration;
import java.util.HashMap;
@@ -27,27 +27,26 @@
import java.util.function.Function;
import com.fasterxml.jackson.core.type.TypeReference;
+import org.modelcontextprotocol.server.McpServer.PromptRegistration;
+import org.modelcontextprotocol.server.McpServer.ResourceRegistration;
+import org.modelcontextprotocol.server.McpServer.ToolRegistration;
+import org.modelcontextprotocol.spec.DefaultMcpSession;
+import org.modelcontextprotocol.spec.McpError;
+import org.modelcontextprotocol.spec.McpSchema;
+import org.modelcontextprotocol.spec.ServerMcpTransport;
+import org.modelcontextprotocol.spec.DefaultMcpSession.NotificationHandler;
+import org.modelcontextprotocol.spec.McpSchema.CallToolResult;
+import org.modelcontextprotocol.spec.McpSchema.ClientCapabilities;
+import org.modelcontextprotocol.spec.McpSchema.LoggingLevel;
+import org.modelcontextprotocol.spec.McpSchema.LoggingMessageNotification;
+import org.modelcontextprotocol.spec.McpSchema.Tool;
+import org.modelcontextprotocol.util.Utils;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import reactor.core.publisher.Flux;
import reactor.core.publisher.Mono;
import reactor.core.scheduler.Schedulers;
-import org.springframework.ai.mcp.server.McpServer.PromptRegistration;
-import org.springframework.ai.mcp.server.McpServer.ResourceRegistration;
-import org.springframework.ai.mcp.server.McpServer.ToolRegistration;
-import org.springframework.ai.mcp.spec.DefaultMcpSession;
-import org.springframework.ai.mcp.spec.DefaultMcpSession.NotificationHandler;
-import org.springframework.ai.mcp.spec.McpError;
-import org.springframework.ai.mcp.spec.McpSchema;
-import org.springframework.ai.mcp.spec.McpSchema.CallToolResult;
-import org.springframework.ai.mcp.spec.McpSchema.ClientCapabilities;
-import org.springframework.ai.mcp.spec.McpSchema.LoggingLevel;
-import org.springframework.ai.mcp.spec.McpSchema.LoggingMessageNotification;
-import org.springframework.ai.mcp.spec.McpSchema.Tool;
-import org.springframework.ai.mcp.spec.ServerMcpTransport;
-import org.springframework.ai.mcp.util.Utils;
-
/**
* The Model Context Protocol (MCP) server implementation that provides asynchronous
* communication using Project Reactor's Mono and Flux types.
diff --git a/mcp/src/main/java/org/springframework/ai/mcp/server/McpServer.java b/mcp/src/main/java/org/modelcontextprotocol/server/McpServer.java
similarity index 99%
rename from mcp/src/main/java/org/springframework/ai/mcp/server/McpServer.java
rename to mcp/src/main/java/org/modelcontextprotocol/server/McpServer.java
index 615fd515..3e28c3c1 100644
--- a/mcp/src/main/java/org/springframework/ai/mcp/server/McpServer.java
+++ b/mcp/src/main/java/org/modelcontextprotocol/server/McpServer.java
@@ -14,7 +14,7 @@
* limitations under the License.
*/
-package org.springframework.ai.mcp.server;
+package org.modelcontextprotocol.server;
import java.util.ArrayList;
import java.util.HashMap;
@@ -24,16 +24,15 @@
import java.util.function.Function;
import java.util.stream.Collectors;
+import org.modelcontextprotocol.spec.McpSchema;
+import org.modelcontextprotocol.spec.McpTransport;
+import org.modelcontextprotocol.spec.ServerMcpTransport;
+import org.modelcontextprotocol.spec.McpSchema.CallToolResult;
+import org.modelcontextprotocol.spec.McpSchema.ResourceTemplate;
+import org.modelcontextprotocol.util.Assert;
import reactor.core.publisher.Mono;
import reactor.core.scheduler.Schedulers;
-import org.springframework.ai.mcp.spec.McpSchema;
-import org.springframework.ai.mcp.spec.McpSchema.CallToolResult;
-import org.springframework.ai.mcp.spec.McpSchema.ResourceTemplate;
-import org.springframework.ai.mcp.spec.McpTransport;
-import org.springframework.ai.mcp.spec.ServerMcpTransport;
-import org.springframework.ai.mcp.util.Assert;
-
/**
* Factory class for creating Model Context Protocol (MCP) servers. MCP servers expose
* tools, resources, and prompts to AI models through a standardized interface.
@@ -520,7 +519,8 @@ public AsyncSpec rootsChangeConsumers(List, Mono, Mono>... consumers) {
+ public AsyncSpec rootsChangeConsumers(
+ @SuppressWarnings("unchecked") Function, Mono>... consumers) {
for (Function, Mono> consumer : consumers) {
this.rootsChangeConsumers.add(consumer);
}
diff --git a/mcp/src/main/java/org/springframework/ai/mcp/server/McpServerFeatures.java b/mcp/src/main/java/org/modelcontextprotocol/server/McpServerFeatures.java
similarity index 98%
rename from mcp/src/main/java/org/springframework/ai/mcp/server/McpServerFeatures.java
rename to mcp/src/main/java/org/modelcontextprotocol/server/McpServerFeatures.java
index 2dd4e66e..b97794d6 100644
--- a/mcp/src/main/java/org/springframework/ai/mcp/server/McpServerFeatures.java
+++ b/mcp/src/main/java/org/modelcontextprotocol/server/McpServerFeatures.java
@@ -1,4 +1,4 @@
-package org.springframework.ai.mcp.server;
+package org.modelcontextprotocol.server;
import java.util.ArrayList;
import java.util.HashMap;
@@ -7,13 +7,12 @@
import java.util.function.Consumer;
import java.util.function.Function;
+import org.modelcontextprotocol.spec.McpSchema;
+import org.modelcontextprotocol.util.Assert;
+import org.modelcontextprotocol.util.Utils;
import reactor.core.publisher.Mono;
import reactor.core.scheduler.Schedulers;
-import org.springframework.ai.mcp.spec.McpSchema;
-import org.springframework.ai.mcp.util.Assert;
-import org.springframework.ai.mcp.util.Utils;
-
/**
* MCP server features specification that a particular server can choose to support.
*
diff --git a/mcp/src/main/java/org/springframework/ai/mcp/server/McpSyncServer.java b/mcp/src/main/java/org/modelcontextprotocol/server/McpSyncServer.java
similarity index 94%
rename from mcp/src/main/java/org/springframework/ai/mcp/server/McpSyncServer.java
rename to mcp/src/main/java/org/modelcontextprotocol/server/McpSyncServer.java
index 004f7a3d..1233f3aa 100644
--- a/mcp/src/main/java/org/springframework/ai/mcp/server/McpSyncServer.java
+++ b/mcp/src/main/java/org/modelcontextprotocol/server/McpSyncServer.java
@@ -14,16 +14,16 @@
* limitations under the License.
*/
-package org.springframework.ai.mcp.server;
+package org.modelcontextprotocol.server;
-import org.springframework.ai.mcp.server.McpServer.PromptRegistration;
-import org.springframework.ai.mcp.server.McpServer.ResourceRegistration;
-import org.springframework.ai.mcp.server.McpServer.ToolRegistration;
-import org.springframework.ai.mcp.spec.McpError;
-import org.springframework.ai.mcp.spec.McpSchema;
-import org.springframework.ai.mcp.spec.McpSchema.ClientCapabilities;
-import org.springframework.ai.mcp.spec.McpSchema.LoggingMessageNotification;
-import org.springframework.ai.mcp.util.Assert;
+import org.modelcontextprotocol.server.McpServer.PromptRegistration;
+import org.modelcontextprotocol.server.McpServer.ResourceRegistration;
+import org.modelcontextprotocol.server.McpServer.ToolRegistration;
+import org.modelcontextprotocol.spec.McpError;
+import org.modelcontextprotocol.spec.McpSchema;
+import org.modelcontextprotocol.spec.McpSchema.ClientCapabilities;
+import org.modelcontextprotocol.spec.McpSchema.LoggingMessageNotification;
+import org.modelcontextprotocol.util.Assert;
/**
* A synchronous implementation of the Model Context Protocol (MCP) server that wraps
diff --git a/mcp/src/main/java/org/springframework/ai/mcp/server/transport/HttpServletSseServerTransport.java b/mcp/src/main/java/org/modelcontextprotocol/server/transport/HttpServletSseServerTransport.java
similarity index 98%
rename from mcp/src/main/java/org/springframework/ai/mcp/server/transport/HttpServletSseServerTransport.java
rename to mcp/src/main/java/org/modelcontextprotocol/server/transport/HttpServletSseServerTransport.java
index d5ae27bd..37529d82 100644
--- a/mcp/src/main/java/org/springframework/ai/mcp/server/transport/HttpServletSseServerTransport.java
+++ b/mcp/src/main/java/org/modelcontextprotocol/server/transport/HttpServletSseServerTransport.java
@@ -13,7 +13,7 @@
* See the License for the specific language governing permissions and
* limitations under the License.
*/
-package org.springframework.ai.mcp.server.transport;
+package org.modelcontextprotocol.server.transport;
import java.io.BufferedReader;
import java.io.IOException;
@@ -32,14 +32,13 @@
import jakarta.servlet.http.HttpServlet;
import jakarta.servlet.http.HttpServletRequest;
import jakarta.servlet.http.HttpServletResponse;
+import org.modelcontextprotocol.spec.McpError;
+import org.modelcontextprotocol.spec.McpSchema;
+import org.modelcontextprotocol.spec.ServerMcpTransport;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import reactor.core.publisher.Mono;
-import org.springframework.ai.mcp.spec.McpError;
-import org.springframework.ai.mcp.spec.McpSchema;
-import org.springframework.ai.mcp.spec.ServerMcpTransport;
-
/**
* A Servlet-based implementation of the MCP HTTP with Server-Sent Events (SSE) transport
* specification. This implementation provides similar functionality to
diff --git a/mcp/src/main/java/org/springframework/ai/mcp/server/transport/StdioServerTransport.java b/mcp/src/main/java/org/modelcontextprotocol/server/transport/StdioServerTransport.java
similarity index 96%
rename from mcp/src/main/java/org/springframework/ai/mcp/server/transport/StdioServerTransport.java
rename to mcp/src/main/java/org/modelcontextprotocol/server/transport/StdioServerTransport.java
index e9b88d24..cf54cb02 100644
--- a/mcp/src/main/java/org/springframework/ai/mcp/server/transport/StdioServerTransport.java
+++ b/mcp/src/main/java/org/modelcontextprotocol/server/transport/StdioServerTransport.java
@@ -14,7 +14,7 @@
* limitations under the License.
*/
-package org.springframework.ai.mcp.server.transport;
+package org.modelcontextprotocol.server.transport;
import java.io.BufferedReader;
import java.io.IOException;
@@ -28,6 +28,10 @@
import com.fasterxml.jackson.core.type.TypeReference;
import com.fasterxml.jackson.databind.ObjectMapper;
+import org.modelcontextprotocol.spec.McpSchema;
+import org.modelcontextprotocol.spec.ServerMcpTransport;
+import org.modelcontextprotocol.spec.McpSchema.JSONRPCMessage;
+import org.modelcontextprotocol.util.Assert;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import reactor.core.publisher.Flux;
@@ -36,11 +40,6 @@
import reactor.core.scheduler.Scheduler;
import reactor.core.scheduler.Schedulers;
-import org.springframework.ai.mcp.spec.McpSchema;
-import org.springframework.ai.mcp.spec.McpSchema.JSONRPCMessage;
-import org.springframework.ai.mcp.spec.ServerMcpTransport;
-import org.springframework.ai.mcp.util.Assert;
-
/**
* Implementation of the MCP Stdio transport for servers that communicates using standard
* input/output streams. Messages are exchanged as newline-delimited JSON-RPC messages
diff --git a/mcp/src/main/java/org/springframework/ai/mcp/spec/ClientMcpTransport.java b/mcp/src/main/java/org/modelcontextprotocol/spec/ClientMcpTransport.java
similarity index 94%
rename from mcp/src/main/java/org/springframework/ai/mcp/spec/ClientMcpTransport.java
rename to mcp/src/main/java/org/modelcontextprotocol/spec/ClientMcpTransport.java
index 4b5af3b1..92c09737 100644
--- a/mcp/src/main/java/org/springframework/ai/mcp/spec/ClientMcpTransport.java
+++ b/mcp/src/main/java/org/modelcontextprotocol/spec/ClientMcpTransport.java
@@ -13,7 +13,7 @@
* See the License for the specific language governing permissions and
* limitations under the License.
*/
-package org.springframework.ai.mcp.spec;
+package org.modelcontextprotocol.spec;
/**
* Marker interface for the client-side MCP transport.
diff --git a/mcp/src/main/java/org/springframework/ai/mcp/spec/DefaultMcpSession.java b/mcp/src/main/java/org/modelcontextprotocol/spec/DefaultMcpSession.java
similarity index 99%
rename from mcp/src/main/java/org/springframework/ai/mcp/spec/DefaultMcpSession.java
rename to mcp/src/main/java/org/modelcontextprotocol/spec/DefaultMcpSession.java
index fffd710b..efddf807 100644
--- a/mcp/src/main/java/org/springframework/ai/mcp/spec/DefaultMcpSession.java
+++ b/mcp/src/main/java/org/modelcontextprotocol/spec/DefaultMcpSession.java
@@ -14,7 +14,7 @@
* limitations under the License.
*/
-package org.springframework.ai.mcp.spec;
+package org.modelcontextprotocol.spec;
import java.time.Duration;
import java.util.Map;
@@ -23,14 +23,13 @@
import java.util.concurrent.atomic.AtomicLong;
import com.fasterxml.jackson.core.type.TypeReference;
+import org.modelcontextprotocol.util.Assert;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import reactor.core.Disposable;
import reactor.core.publisher.Mono;
import reactor.core.publisher.MonoSink;
-import org.springframework.ai.mcp.util.Assert;
-
/**
* Default implementation of the MCP (Model Context Protocol) session that manages
* bidirectional JSON-RPC communication between clients and servers. This implementation
diff --git a/mcp/src/main/java/org/springframework/ai/mcp/spec/McpError.java b/mcp/src/main/java/org/modelcontextprotocol/spec/McpError.java
similarity index 88%
rename from mcp/src/main/java/org/springframework/ai/mcp/spec/McpError.java
rename to mcp/src/main/java/org/modelcontextprotocol/spec/McpError.java
index 94170ff0..d12c87e3 100644
--- a/mcp/src/main/java/org/springframework/ai/mcp/spec/McpError.java
+++ b/mcp/src/main/java/org/modelcontextprotocol/spec/McpError.java
@@ -13,9 +13,9 @@
* See the License for the specific language governing permissions and
* limitations under the License.
*/
-package org.springframework.ai.mcp.spec;
+package org.modelcontextprotocol.spec;
-import org.springframework.ai.mcp.spec.McpSchema.JSONRPCResponse.JSONRPCError;
+import org.modelcontextprotocol.spec.McpSchema.JSONRPCResponse.JSONRPCError;
public class McpError extends RuntimeException {
diff --git a/mcp/src/main/java/org/springframework/ai/mcp/spec/McpSchema.java b/mcp/src/main/java/org/modelcontextprotocol/spec/McpSchema.java
similarity index 99%
rename from mcp/src/main/java/org/springframework/ai/mcp/spec/McpSchema.java
rename to mcp/src/main/java/org/modelcontextprotocol/spec/McpSchema.java
index e107fb6b..e2d49c36 100644
--- a/mcp/src/main/java/org/springframework/ai/mcp/spec/McpSchema.java
+++ b/mcp/src/main/java/org/modelcontextprotocol/spec/McpSchema.java
@@ -14,7 +14,7 @@
* limitations under the License.
*/
-package org.springframework.ai.mcp.spec;
+package org.modelcontextprotocol.spec;
import java.io.IOException;
import java.util.HashMap;
diff --git a/mcp/src/main/java/org/springframework/ai/mcp/spec/McpSession.java b/mcp/src/main/java/org/modelcontextprotocol/spec/McpSession.java
similarity index 98%
rename from mcp/src/main/java/org/springframework/ai/mcp/spec/McpSession.java
rename to mcp/src/main/java/org/modelcontextprotocol/spec/McpSession.java
index 533baa8d..e53f7c8a 100644
--- a/mcp/src/main/java/org/springframework/ai/mcp/spec/McpSession.java
+++ b/mcp/src/main/java/org/modelcontextprotocol/spec/McpSession.java
@@ -14,7 +14,7 @@
* limitations under the License.
*/
-package org.springframework.ai.mcp.spec;
+package org.modelcontextprotocol.spec;
import java.util.Map;
diff --git a/mcp/src/main/java/org/springframework/ai/mcp/spec/McpTransport.java b/mcp/src/main/java/org/modelcontextprotocol/spec/McpTransport.java
similarity index 96%
rename from mcp/src/main/java/org/springframework/ai/mcp/spec/McpTransport.java
rename to mcp/src/main/java/org/modelcontextprotocol/spec/McpTransport.java
index 48c69656..7d9e30c5 100644
--- a/mcp/src/main/java/org/springframework/ai/mcp/spec/McpTransport.java
+++ b/mcp/src/main/java/org/modelcontextprotocol/spec/McpTransport.java
@@ -14,15 +14,14 @@
* limitations under the License.
*/
-package org.springframework.ai.mcp.spec;
+package org.modelcontextprotocol.spec;
import java.util.function.Function;
import com.fasterxml.jackson.core.type.TypeReference;
+import org.modelcontextprotocol.spec.McpSchema.JSONRPCMessage;
import reactor.core.publisher.Mono;
-import org.springframework.ai.mcp.spec.McpSchema.JSONRPCMessage;
-
/**
* Defines the asynchronous transport layer for the Model Context Protocol (MCP).
*
diff --git a/mcp/src/main/java/org/springframework/ai/mcp/spec/ServerMcpTransport.java b/mcp/src/main/java/org/modelcontextprotocol/spec/ServerMcpTransport.java
similarity index 94%
rename from mcp/src/main/java/org/springframework/ai/mcp/spec/ServerMcpTransport.java
rename to mcp/src/main/java/org/modelcontextprotocol/spec/ServerMcpTransport.java
index bb3d829d..2b7f5848 100644
--- a/mcp/src/main/java/org/springframework/ai/mcp/spec/ServerMcpTransport.java
+++ b/mcp/src/main/java/org/modelcontextprotocol/spec/ServerMcpTransport.java
@@ -13,7 +13,7 @@
* See the License for the specific language governing permissions and
* limitations under the License.
*/
-package org.springframework.ai.mcp.spec;
+package org.modelcontextprotocol.spec;
/**
* Marker interface for the server-side MCP transport.
diff --git a/mcp/src/main/java/org/springframework/ai/mcp/util/Assert.java b/mcp/src/main/java/org/modelcontextprotocol/util/Assert.java
similarity index 98%
rename from mcp/src/main/java/org/springframework/ai/mcp/util/Assert.java
rename to mcp/src/main/java/org/modelcontextprotocol/util/Assert.java
index 0dc1fc10..90e6b61c 100644
--- a/mcp/src/main/java/org/springframework/ai/mcp/util/Assert.java
+++ b/mcp/src/main/java/org/modelcontextprotocol/util/Assert.java
@@ -14,7 +14,7 @@
* limitations under the License.
*/
-package org.springframework.ai.mcp.util;
+package org.modelcontextprotocol.util;
import java.util.Collection;
diff --git a/mcp/src/main/java/org/springframework/ai/mcp/util/Utils.java b/mcp/src/main/java/org/modelcontextprotocol/util/Utils.java
similarity index 98%
rename from mcp/src/main/java/org/springframework/ai/mcp/util/Utils.java
rename to mcp/src/main/java/org/modelcontextprotocol/util/Utils.java
index 622ad269..9ba3ac12 100644
--- a/mcp/src/main/java/org/springframework/ai/mcp/util/Utils.java
+++ b/mcp/src/main/java/org/modelcontextprotocol/util/Utils.java
@@ -14,7 +14,7 @@
* limitations under the License.
*/
-package org.springframework.ai.mcp.util;
+package org.modelcontextprotocol.util;
import java.util.Collection;
import java.util.Map;
diff --git a/mcp/src/test/java/org/springframework/ai/mcp/MockMcpTransport.java b/mcp/src/test/java/org/modelcontextprotocol/MockMcpTransport.java
similarity index 90%
rename from mcp/src/test/java/org/springframework/ai/mcp/MockMcpTransport.java
rename to mcp/src/test/java/org/modelcontextprotocol/MockMcpTransport.java
index 1622418e..ccbc228f 100644
--- a/mcp/src/test/java/org/springframework/ai/mcp/MockMcpTransport.java
+++ b/mcp/src/test/java/org/modelcontextprotocol/MockMcpTransport.java
@@ -14,24 +14,23 @@
* limitations under the License.
*/
-package org.springframework.ai.mcp;
+package org.modelcontextprotocol;
import java.util.concurrent.atomic.AtomicInteger;
import java.util.function.Function;
import com.fasterxml.jackson.core.type.TypeReference;
import com.fasterxml.jackson.databind.ObjectMapper;
+import org.modelcontextprotocol.spec.ClientMcpTransport;
+import org.modelcontextprotocol.spec.McpSchema;
+import org.modelcontextprotocol.spec.ServerMcpTransport;
+import org.modelcontextprotocol.spec.McpSchema.JSONRPCNotification;
+import org.modelcontextprotocol.spec.McpSchema.JSONRPCRequest;
import reactor.core.publisher.Flux;
import reactor.core.publisher.Mono;
import reactor.core.publisher.Sinks;
import reactor.core.scheduler.Schedulers;
-import org.springframework.ai.mcp.spec.ClientMcpTransport;
-import org.springframework.ai.mcp.spec.McpSchema;
-import org.springframework.ai.mcp.spec.McpSchema.JSONRPCNotification;
-import org.springframework.ai.mcp.spec.McpSchema.JSONRPCRequest;
-import org.springframework.ai.mcp.spec.ServerMcpTransport;
-
/**
* A mock implementation of the {@link ClientMcpTransport} and {@link ServerMcpTransport}
* interfaces.
diff --git a/mcp/src/test/java/org/springframework/ai/mcp/client/AbstractMcpAsyncClientTests.java b/mcp/src/test/java/org/modelcontextprotocol/client/AbstractMcpAsyncClientTests.java
similarity index 92%
rename from mcp/src/test/java/org/springframework/ai/mcp/client/AbstractMcpAsyncClientTests.java
rename to mcp/src/test/java/org/modelcontextprotocol/client/AbstractMcpAsyncClientTests.java
index 0d7fd0bd..8deb544d 100644
--- a/mcp/src/test/java/org/springframework/ai/mcp/client/AbstractMcpAsyncClientTests.java
+++ b/mcp/src/test/java/org/modelcontextprotocol/client/AbstractMcpAsyncClientTests.java
@@ -14,7 +14,7 @@
* limitations under the License.
*/
-package org.springframework.ai.mcp.client;
+package org.modelcontextprotocol.client;
import java.time.Duration;
import java.util.Map;
@@ -25,24 +25,23 @@
import org.junit.jupiter.api.BeforeEach;
import org.junit.jupiter.api.Disabled;
import org.junit.jupiter.api.Test;
+import org.modelcontextprotocol.spec.ClientMcpTransport;
+import org.modelcontextprotocol.spec.McpSchema;
+import org.modelcontextprotocol.spec.McpSchema.CallToolRequest;
+import org.modelcontextprotocol.spec.McpSchema.ClientCapabilities;
+import org.modelcontextprotocol.spec.McpSchema.CreateMessageRequest;
+import org.modelcontextprotocol.spec.McpSchema.CreateMessageResult;
+import org.modelcontextprotocol.spec.McpSchema.GetPromptRequest;
+import org.modelcontextprotocol.spec.McpSchema.Prompt;
+import org.modelcontextprotocol.spec.McpSchema.Resource;
+import org.modelcontextprotocol.spec.McpSchema.Root;
+import org.modelcontextprotocol.spec.McpSchema.SubscribeRequest;
+import org.modelcontextprotocol.spec.McpSchema.Tool;
+import org.modelcontextprotocol.spec.McpSchema.UnsubscribeRequest;
+import org.modelcontextprotocol.spec.McpTransport;
import reactor.core.publisher.Mono;
import reactor.test.StepVerifier;
-import org.springframework.ai.mcp.spec.ClientMcpTransport;
-import org.springframework.ai.mcp.spec.McpSchema;
-import org.springframework.ai.mcp.spec.McpSchema.CallToolRequest;
-import org.springframework.ai.mcp.spec.McpSchema.ClientCapabilities;
-import org.springframework.ai.mcp.spec.McpSchema.CreateMessageRequest;
-import org.springframework.ai.mcp.spec.McpSchema.CreateMessageResult;
-import org.springframework.ai.mcp.spec.McpSchema.GetPromptRequest;
-import org.springframework.ai.mcp.spec.McpSchema.Prompt;
-import org.springframework.ai.mcp.spec.McpSchema.Resource;
-import org.springframework.ai.mcp.spec.McpSchema.Root;
-import org.springframework.ai.mcp.spec.McpSchema.SubscribeRequest;
-import org.springframework.ai.mcp.spec.McpSchema.Tool;
-import org.springframework.ai.mcp.spec.McpSchema.UnsubscribeRequest;
-import org.springframework.ai.mcp.spec.McpTransport;
-
import static org.assertj.core.api.Assertions.assertThat;
import static org.assertj.core.api.Assertions.assertThatCode;
import static org.assertj.core.api.Assertions.assertThatThrownBy;
diff --git a/mcp/src/test/java/org/springframework/ai/mcp/client/AbstractMcpSyncClientTests.java b/mcp/src/test/java/org/modelcontextprotocol/client/AbstractMcpSyncClientTests.java
similarity index 89%
rename from mcp/src/test/java/org/springframework/ai/mcp/client/AbstractMcpSyncClientTests.java
rename to mcp/src/test/java/org/modelcontextprotocol/client/AbstractMcpSyncClientTests.java
index c046b9eb..6dd181cf 100644
--- a/mcp/src/test/java/org/springframework/ai/mcp/client/AbstractMcpSyncClientTests.java
+++ b/mcp/src/test/java/org/modelcontextprotocol/client/AbstractMcpSyncClientTests.java
@@ -14,7 +14,7 @@
* limitations under the License.
*/
-package org.springframework.ai.mcp.client;
+package org.modelcontextprotocol.client;
import java.time.Duration;
import java.util.Map;
@@ -23,22 +23,21 @@
import org.junit.jupiter.api.AfterEach;
import org.junit.jupiter.api.BeforeEach;
import org.junit.jupiter.api.Test;
-
-import org.springframework.ai.mcp.spec.ClientMcpTransport;
-import org.springframework.ai.mcp.spec.McpSchema;
-import org.springframework.ai.mcp.spec.McpSchema.CallToolRequest;
-import org.springframework.ai.mcp.spec.McpSchema.CallToolResult;
-import org.springframework.ai.mcp.spec.McpSchema.ClientCapabilities;
-import org.springframework.ai.mcp.spec.McpSchema.ListResourceTemplatesResult;
-import org.springframework.ai.mcp.spec.McpSchema.ListResourcesResult;
-import org.springframework.ai.mcp.spec.McpSchema.ListToolsResult;
-import org.springframework.ai.mcp.spec.McpSchema.ReadResourceResult;
-import org.springframework.ai.mcp.spec.McpSchema.Resource;
-import org.springframework.ai.mcp.spec.McpSchema.Root;
-import org.springframework.ai.mcp.spec.McpSchema.SubscribeRequest;
-import org.springframework.ai.mcp.spec.McpSchema.TextContent;
-import org.springframework.ai.mcp.spec.McpSchema.Tool;
-import org.springframework.ai.mcp.spec.McpSchema.UnsubscribeRequest;
+import org.modelcontextprotocol.spec.ClientMcpTransport;
+import org.modelcontextprotocol.spec.McpSchema;
+import org.modelcontextprotocol.spec.McpSchema.CallToolRequest;
+import org.modelcontextprotocol.spec.McpSchema.CallToolResult;
+import org.modelcontextprotocol.spec.McpSchema.ClientCapabilities;
+import org.modelcontextprotocol.spec.McpSchema.ListResourceTemplatesResult;
+import org.modelcontextprotocol.spec.McpSchema.ListResourcesResult;
+import org.modelcontextprotocol.spec.McpSchema.ListToolsResult;
+import org.modelcontextprotocol.spec.McpSchema.ReadResourceResult;
+import org.modelcontextprotocol.spec.McpSchema.Resource;
+import org.modelcontextprotocol.spec.McpSchema.Root;
+import org.modelcontextprotocol.spec.McpSchema.SubscribeRequest;
+import org.modelcontextprotocol.spec.McpSchema.TextContent;
+import org.modelcontextprotocol.spec.McpSchema.Tool;
+import org.modelcontextprotocol.spec.McpSchema.UnsubscribeRequest;
import static org.assertj.core.api.Assertions.assertThat;
import static org.assertj.core.api.Assertions.assertThatCode;
diff --git a/mcp/src/test/java/org/springframework/ai/mcp/client/McpAsyncClientResponseHandlerTests.java b/mcp/src/test/java/org/modelcontextprotocol/client/McpAsyncClientResponseHandlerTests.java
similarity index 97%
rename from mcp/src/test/java/org/springframework/ai/mcp/client/McpAsyncClientResponseHandlerTests.java
rename to mcp/src/test/java/org/modelcontextprotocol/client/McpAsyncClientResponseHandlerTests.java
index c5b0ec8e..59eb6322 100644
--- a/mcp/src/test/java/org/springframework/ai/mcp/client/McpAsyncClientResponseHandlerTests.java
+++ b/mcp/src/test/java/org/modelcontextprotocol/client/McpAsyncClientResponseHandlerTests.java
@@ -14,7 +14,7 @@
* limitations under the License.
*/
-package org.springframework.ai.mcp.client;
+package org.modelcontextprotocol.client;
import java.time.Duration;
import java.util.ArrayList;
@@ -26,14 +26,13 @@
import com.fasterxml.jackson.core.type.TypeReference;
import com.fasterxml.jackson.databind.ObjectMapper;
import org.junit.jupiter.api.Test;
+import org.modelcontextprotocol.MockMcpTransport;
+import org.modelcontextprotocol.spec.McpError;
+import org.modelcontextprotocol.spec.McpSchema;
+import org.modelcontextprotocol.spec.McpSchema.ClientCapabilities;
+import org.modelcontextprotocol.spec.McpSchema.Root;
import reactor.core.publisher.Mono;
-import org.springframework.ai.mcp.MockMcpTransport;
-import org.springframework.ai.mcp.spec.McpError;
-import org.springframework.ai.mcp.spec.McpSchema;
-import org.springframework.ai.mcp.spec.McpSchema.ClientCapabilities;
-import org.springframework.ai.mcp.spec.McpSchema.Root;
-
import static org.assertj.core.api.Assertions.assertThat;
import static org.assertj.core.api.Assertions.assertThatThrownBy;
import static org.awaitility.Awaitility.await;
diff --git a/mcp/src/test/java/org/springframework/ai/mcp/client/McpClientProtocolVersionTests.java b/mcp/src/test/java/org/modelcontextprotocol/client/McpClientProtocolVersionTests.java
similarity index 95%
rename from mcp/src/test/java/org/springframework/ai/mcp/client/McpClientProtocolVersionTests.java
rename to mcp/src/test/java/org/modelcontextprotocol/client/McpClientProtocolVersionTests.java
index 7a0be90e..f67a375b 100644
--- a/mcp/src/test/java/org/springframework/ai/mcp/client/McpClientProtocolVersionTests.java
+++ b/mcp/src/test/java/org/modelcontextprotocol/client/McpClientProtocolVersionTests.java
@@ -14,20 +14,19 @@
* limitations under the License.
*/
-package org.springframework.ai.mcp.client;
+package org.modelcontextprotocol.client;
import java.time.Duration;
import java.util.List;
import org.junit.jupiter.api.Test;
+import org.modelcontextprotocol.MockMcpTransport;
+import org.modelcontextprotocol.spec.McpError;
+import org.modelcontextprotocol.spec.McpSchema;
+import org.modelcontextprotocol.spec.McpSchema.InitializeResult;
import reactor.core.publisher.Mono;
import reactor.test.StepVerifier;
-import org.springframework.ai.mcp.MockMcpTransport;
-import org.springframework.ai.mcp.spec.McpError;
-import org.springframework.ai.mcp.spec.McpSchema;
-import org.springframework.ai.mcp.spec.McpSchema.InitializeResult;
-
import static org.assertj.core.api.Assertions.assertThat;
/**
diff --git a/mcp/src/test/java/org/springframework/ai/mcp/client/ServletSseMcpAsyncClientTests.java b/mcp/src/test/java/org/modelcontextprotocol/client/ServletSseMcpAsyncClientTests.java
similarity index 90%
rename from mcp/src/test/java/org/springframework/ai/mcp/client/ServletSseMcpAsyncClientTests.java
rename to mcp/src/test/java/org/modelcontextprotocol/client/ServletSseMcpAsyncClientTests.java
index 86e6976f..1e9000ea 100644
--- a/mcp/src/test/java/org/springframework/ai/mcp/client/ServletSseMcpAsyncClientTests.java
+++ b/mcp/src/test/java/org/modelcontextprotocol/client/ServletSseMcpAsyncClientTests.java
@@ -14,15 +14,14 @@
* limitations under the License.
*/
-package org.springframework.ai.mcp.client;
+package org.modelcontextprotocol.client;
import org.junit.jupiter.api.Timeout;
+import org.modelcontextprotocol.client.transport.HttpClientSseClientTransport;
+import org.modelcontextprotocol.spec.ClientMcpTransport;
import org.testcontainers.containers.GenericContainer;
import org.testcontainers.containers.wait.strategy.Wait;
-import org.springframework.ai.mcp.client.transport.HttpClientSseClientTransport;
-import org.springframework.ai.mcp.spec.ClientMcpTransport;
-
/**
* Tests for the {@link McpSyncClient} with {@link HttpClientSseClientTransport}.
*
diff --git a/mcp/src/test/java/org/springframework/ai/mcp/client/ServletSseMcpSyncClientTests.java b/mcp/src/test/java/org/modelcontextprotocol/client/ServletSseMcpSyncClientTests.java
similarity index 90%
rename from mcp/src/test/java/org/springframework/ai/mcp/client/ServletSseMcpSyncClientTests.java
rename to mcp/src/test/java/org/modelcontextprotocol/client/ServletSseMcpSyncClientTests.java
index f33bc976..428df4b9 100644
--- a/mcp/src/test/java/org/springframework/ai/mcp/client/ServletSseMcpSyncClientTests.java
+++ b/mcp/src/test/java/org/modelcontextprotocol/client/ServletSseMcpSyncClientTests.java
@@ -14,15 +14,14 @@
* limitations under the License.
*/
-package org.springframework.ai.mcp.client;
+package org.modelcontextprotocol.client;
import org.junit.jupiter.api.Timeout;
+import org.modelcontextprotocol.client.transport.HttpClientSseClientTransport;
+import org.modelcontextprotocol.spec.ClientMcpTransport;
import org.testcontainers.containers.GenericContainer;
import org.testcontainers.containers.wait.strategy.Wait;
-import org.springframework.ai.mcp.client.transport.HttpClientSseClientTransport;
-import org.springframework.ai.mcp.spec.ClientMcpTransport;
-
/**
* Tests for the {@link McpSyncClient} with {@link HttpClientSseClientTransport}.
*
diff --git a/mcp/src/test/java/org/springframework/ai/mcp/client/StdioMcpAsyncClientTests.java b/mcp/src/test/java/org/modelcontextprotocol/client/StdioMcpAsyncClientTests.java
similarity index 83%
rename from mcp/src/test/java/org/springframework/ai/mcp/client/StdioMcpAsyncClientTests.java
rename to mcp/src/test/java/org/modelcontextprotocol/client/StdioMcpAsyncClientTests.java
index 94c9b41c..0ff41ed7 100644
--- a/mcp/src/test/java/org/springframework/ai/mcp/client/StdioMcpAsyncClientTests.java
+++ b/mcp/src/test/java/org/modelcontextprotocol/client/StdioMcpAsyncClientTests.java
@@ -14,13 +14,12 @@
* limitations under the License.
*/
-package org.springframework.ai.mcp.client;
+package org.modelcontextprotocol.client;
import org.junit.jupiter.api.Timeout;
-
-import org.springframework.ai.mcp.client.transport.ServerParameters;
-import org.springframework.ai.mcp.client.transport.StdioClientTransport;
-import org.springframework.ai.mcp.spec.ClientMcpTransport;
+import org.modelcontextprotocol.client.transport.ServerParameters;
+import org.modelcontextprotocol.client.transport.StdioClientTransport;
+import org.modelcontextprotocol.spec.ClientMcpTransport;
/**
* Tests for the {@link McpAsyncClient} with {@link StdioClientTransport}.
diff --git a/mcp/src/test/java/org/springframework/ai/mcp/client/StdioMcpSyncClientTests.java b/mcp/src/test/java/org/modelcontextprotocol/client/StdioMcpSyncClientTests.java
similarity index 88%
rename from mcp/src/test/java/org/springframework/ai/mcp/client/StdioMcpSyncClientTests.java
rename to mcp/src/test/java/org/modelcontextprotocol/client/StdioMcpSyncClientTests.java
index 962bc2ac..9b80223c 100644
--- a/mcp/src/test/java/org/springframework/ai/mcp/client/StdioMcpSyncClientTests.java
+++ b/mcp/src/test/java/org/modelcontextprotocol/client/StdioMcpSyncClientTests.java
@@ -14,16 +14,15 @@
* limitations under the License.
*/
-package org.springframework.ai.mcp.client;
+package org.modelcontextprotocol.client;
import java.util.concurrent.atomic.AtomicReference;
import org.junit.jupiter.api.Test;
import org.junit.jupiter.api.Timeout;
-
-import org.springframework.ai.mcp.client.transport.ServerParameters;
-import org.springframework.ai.mcp.client.transport.StdioClientTransport;
-import org.springframework.ai.mcp.spec.ClientMcpTransport;
+import org.modelcontextprotocol.client.transport.ServerParameters;
+import org.modelcontextprotocol.client.transport.StdioClientTransport;
+import org.modelcontextprotocol.spec.ClientMcpTransport;
import static org.assertj.core.api.Assertions.assertThat;
diff --git a/mcp/src/test/java/org/springframework/ai/mcp/client/transport/HttpClientSseClientTransportTests.java b/mcp/src/test/java/org/modelcontextprotocol/client/transport/HttpClientSseClientTransportTests.java
similarity index 97%
rename from mcp/src/test/java/org/springframework/ai/mcp/client/transport/HttpClientSseClientTransportTests.java
rename to mcp/src/test/java/org/modelcontextprotocol/client/transport/HttpClientSseClientTransportTests.java
index f50aeb35..fa99b4a7 100644
--- a/mcp/src/test/java/org/springframework/ai/mcp/client/transport/HttpClientSseClientTransportTests.java
+++ b/mcp/src/test/java/org/modelcontextprotocol/client/transport/HttpClientSseClientTransportTests.java
@@ -14,7 +14,7 @@
* limitations under the License.
*/
-package org.springframework.ai.mcp.client.transport;
+package org.modelcontextprotocol.client.transport;
import java.time.Duration;
import java.util.Map;
@@ -25,14 +25,14 @@
import org.junit.jupiter.api.BeforeEach;
import org.junit.jupiter.api.Test;
import org.junit.jupiter.api.Timeout;
+import org.modelcontextprotocol.spec.McpSchema;
+import org.modelcontextprotocol.spec.McpSchema.JSONRPCRequest;
import org.testcontainers.containers.GenericContainer;
import org.testcontainers.containers.wait.strategy.Wait;
import reactor.core.publisher.Mono;
import reactor.core.publisher.Sinks;
import reactor.test.StepVerifier;
-import org.springframework.ai.mcp.spec.McpSchema;
-import org.springframework.ai.mcp.spec.McpSchema.JSONRPCRequest;
import org.springframework.http.codec.ServerSentEvent;
import static org.assertj.core.api.Assertions.assertThat;
diff --git a/mcp/src/test/java/org/springframework/ai/mcp/server/AbstractMcpAsyncServerTests.java b/mcp/src/test/java/org/modelcontextprotocol/server/AbstractMcpAsyncServerTests.java
similarity index 95%
rename from mcp/src/test/java/org/springframework/ai/mcp/server/AbstractMcpAsyncServerTests.java
rename to mcp/src/test/java/org/modelcontextprotocol/server/AbstractMcpAsyncServerTests.java
index 869d34a4..7c262783 100644
--- a/mcp/src/test/java/org/springframework/ai/mcp/server/AbstractMcpAsyncServerTests.java
+++ b/mcp/src/test/java/org/modelcontextprotocol/server/AbstractMcpAsyncServerTests.java
@@ -14,7 +14,7 @@
* limitations under the License.
*/
-package org.springframework.ai.mcp.server;
+package org.modelcontextprotocol.server;
import java.time.Duration;
import java.util.List;
@@ -22,22 +22,21 @@
import org.junit.jupiter.api.AfterEach;
import org.junit.jupiter.api.BeforeEach;
import org.junit.jupiter.api.Test;
+import org.modelcontextprotocol.spec.McpError;
+import org.modelcontextprotocol.spec.McpSchema;
+import org.modelcontextprotocol.spec.McpSchema.CallToolResult;
+import org.modelcontextprotocol.spec.McpSchema.GetPromptResult;
+import org.modelcontextprotocol.spec.McpSchema.Prompt;
+import org.modelcontextprotocol.spec.McpSchema.PromptMessage;
+import org.modelcontextprotocol.spec.McpSchema.ReadResourceResult;
+import org.modelcontextprotocol.spec.McpSchema.Resource;
+import org.modelcontextprotocol.spec.McpSchema.ServerCapabilities;
+import org.modelcontextprotocol.spec.McpSchema.Tool;
+import org.modelcontextprotocol.spec.McpTransport;
+import org.modelcontextprotocol.spec.ServerMcpTransport;
import reactor.core.publisher.Mono;
import reactor.test.StepVerifier;
-import org.springframework.ai.mcp.spec.McpError;
-import org.springframework.ai.mcp.spec.McpSchema;
-import org.springframework.ai.mcp.spec.McpSchema.CallToolResult;
-import org.springframework.ai.mcp.spec.McpSchema.GetPromptResult;
-import org.springframework.ai.mcp.spec.McpSchema.Prompt;
-import org.springframework.ai.mcp.spec.McpSchema.PromptMessage;
-import org.springframework.ai.mcp.spec.McpSchema.ReadResourceResult;
-import org.springframework.ai.mcp.spec.McpSchema.Resource;
-import org.springframework.ai.mcp.spec.McpSchema.ServerCapabilities;
-import org.springframework.ai.mcp.spec.McpSchema.Tool;
-import org.springframework.ai.mcp.spec.McpTransport;
-import org.springframework.ai.mcp.spec.ServerMcpTransport;
-
import static org.assertj.core.api.Assertions.assertThat;
import static org.assertj.core.api.Assertions.assertThatCode;
import static org.assertj.core.api.Assertions.assertThatThrownBy;
diff --git a/mcp/src/test/java/org/springframework/ai/mcp/server/AbstractMcpSyncServerTests.java b/mcp/src/test/java/org/modelcontextprotocol/server/AbstractMcpSyncServerTests.java
similarity index 95%
rename from mcp/src/test/java/org/springframework/ai/mcp/server/AbstractMcpSyncServerTests.java
rename to mcp/src/test/java/org/modelcontextprotocol/server/AbstractMcpSyncServerTests.java
index f627bdcc..2d3b1637 100644
--- a/mcp/src/test/java/org/springframework/ai/mcp/server/AbstractMcpSyncServerTests.java
+++ b/mcp/src/test/java/org/modelcontextprotocol/server/AbstractMcpSyncServerTests.java
@@ -14,26 +14,25 @@
* limitations under the License.
*/
-package org.springframework.ai.mcp.server;
+package org.modelcontextprotocol.server;
import java.util.List;
import org.junit.jupiter.api.AfterEach;
import org.junit.jupiter.api.BeforeEach;
import org.junit.jupiter.api.Test;
-
-import org.springframework.ai.mcp.spec.McpError;
-import org.springframework.ai.mcp.spec.McpSchema;
-import org.springframework.ai.mcp.spec.McpSchema.CallToolResult;
-import org.springframework.ai.mcp.spec.McpSchema.GetPromptResult;
-import org.springframework.ai.mcp.spec.McpSchema.Prompt;
-import org.springframework.ai.mcp.spec.McpSchema.PromptMessage;
-import org.springframework.ai.mcp.spec.McpSchema.ReadResourceResult;
-import org.springframework.ai.mcp.spec.McpSchema.Resource;
-import org.springframework.ai.mcp.spec.McpSchema.ServerCapabilities;
-import org.springframework.ai.mcp.spec.McpSchema.Tool;
-import org.springframework.ai.mcp.spec.McpTransport;
-import org.springframework.ai.mcp.spec.ServerMcpTransport;
+import org.modelcontextprotocol.spec.McpError;
+import org.modelcontextprotocol.spec.McpSchema;
+import org.modelcontextprotocol.spec.McpSchema.CallToolResult;
+import org.modelcontextprotocol.spec.McpSchema.GetPromptResult;
+import org.modelcontextprotocol.spec.McpSchema.Prompt;
+import org.modelcontextprotocol.spec.McpSchema.PromptMessage;
+import org.modelcontextprotocol.spec.McpSchema.ReadResourceResult;
+import org.modelcontextprotocol.spec.McpSchema.Resource;
+import org.modelcontextprotocol.spec.McpSchema.ServerCapabilities;
+import org.modelcontextprotocol.spec.McpSchema.Tool;
+import org.modelcontextprotocol.spec.McpTransport;
+import org.modelcontextprotocol.spec.ServerMcpTransport;
import static org.assertj.core.api.Assertions.assertThat;
import static org.assertj.core.api.Assertions.assertThatCode;
diff --git a/mcp/src/test/java/org/springframework/ai/mcp/server/McpServerProtocolVersionTests.java b/mcp/src/test/java/org/modelcontextprotocol/server/McpServerProtocolVersionTests.java
similarity index 97%
rename from mcp/src/test/java/org/springframework/ai/mcp/server/McpServerProtocolVersionTests.java
rename to mcp/src/test/java/org/modelcontextprotocol/server/McpServerProtocolVersionTests.java
index f557921d..7e0f63d6 100644
--- a/mcp/src/test/java/org/springframework/ai/mcp/server/McpServerProtocolVersionTests.java
+++ b/mcp/src/test/java/org/modelcontextprotocol/server/McpServerProtocolVersionTests.java
@@ -14,15 +14,14 @@
* limitations under the License.
*/
-package org.springframework.ai.mcp.server;
+package org.modelcontextprotocol.server;
import java.util.List;
import java.util.UUID;
import org.junit.jupiter.api.Test;
-
-import org.springframework.ai.mcp.MockMcpTransport;
-import org.springframework.ai.mcp.spec.McpSchema;
+import org.modelcontextprotocol.MockMcpTransport;
+import org.modelcontextprotocol.spec.McpSchema;
import static org.assertj.core.api.Assertions.assertThat;
diff --git a/mcp/src/test/java/org/springframework/ai/mcp/server/ServletSseMcpAsyncServerTests.java b/mcp/src/test/java/org/modelcontextprotocol/server/ServletSseMcpAsyncServerTests.java
similarity index 85%
rename from mcp/src/test/java/org/springframework/ai/mcp/server/ServletSseMcpAsyncServerTests.java
rename to mcp/src/test/java/org/modelcontextprotocol/server/ServletSseMcpAsyncServerTests.java
index 584938be..3a29dbfc 100644
--- a/mcp/src/test/java/org/springframework/ai/mcp/server/ServletSseMcpAsyncServerTests.java
+++ b/mcp/src/test/java/org/modelcontextprotocol/server/ServletSseMcpAsyncServerTests.java
@@ -14,13 +14,12 @@
* limitations under the License.
*/
-package org.springframework.ai.mcp.server;
+package org.modelcontextprotocol.server;
import com.fasterxml.jackson.databind.ObjectMapper;
import org.junit.jupiter.api.Timeout;
-
-import org.springframework.ai.mcp.server.transport.HttpServletSseServerTransport;
-import org.springframework.ai.mcp.spec.ServerMcpTransport;
+import org.modelcontextprotocol.server.transport.HttpServletSseServerTransport;
+import org.modelcontextprotocol.spec.ServerMcpTransport;
/**
* Tests for {@link McpAsyncServer} using {@link HttpServletSseServerTransport}.
diff --git a/mcp/src/test/java/org/springframework/ai/mcp/server/ServletSseMcpSyncServerTests.java b/mcp/src/test/java/org/modelcontextprotocol/server/ServletSseMcpSyncServerTests.java
similarity index 85%
rename from mcp/src/test/java/org/springframework/ai/mcp/server/ServletSseMcpSyncServerTests.java
rename to mcp/src/test/java/org/modelcontextprotocol/server/ServletSseMcpSyncServerTests.java
index 2d3390de..7f0d1c6b 100644
--- a/mcp/src/test/java/org/springframework/ai/mcp/server/ServletSseMcpSyncServerTests.java
+++ b/mcp/src/test/java/org/modelcontextprotocol/server/ServletSseMcpSyncServerTests.java
@@ -14,13 +14,12 @@
* limitations under the License.
*/
-package org.springframework.ai.mcp.server;
+package org.modelcontextprotocol.server;
import com.fasterxml.jackson.databind.ObjectMapper;
import org.junit.jupiter.api.Timeout;
-
-import org.springframework.ai.mcp.server.transport.HttpServletSseServerTransport;
-import org.springframework.ai.mcp.spec.ServerMcpTransport;
+import org.modelcontextprotocol.server.transport.HttpServletSseServerTransport;
+import org.modelcontextprotocol.spec.ServerMcpTransport;
/**
* Tests for {@link McpSyncServer} using {@link HttpServletSseServerTransport}.
diff --git a/mcp/src/test/java/org/springframework/ai/mcp/server/StdioMcpAsyncServerTests.java b/mcp/src/test/java/org/modelcontextprotocol/server/StdioMcpAsyncServerTests.java
similarity index 85%
rename from mcp/src/test/java/org/springframework/ai/mcp/server/StdioMcpAsyncServerTests.java
rename to mcp/src/test/java/org/modelcontextprotocol/server/StdioMcpAsyncServerTests.java
index 9f15658b..9ad20ebf 100644
--- a/mcp/src/test/java/org/springframework/ai/mcp/server/StdioMcpAsyncServerTests.java
+++ b/mcp/src/test/java/org/modelcontextprotocol/server/StdioMcpAsyncServerTests.java
@@ -14,12 +14,11 @@
* limitations under the License.
*/
-package org.springframework.ai.mcp.server;
+package org.modelcontextprotocol.server;
import org.junit.jupiter.api.Timeout;
-
-import org.springframework.ai.mcp.server.transport.StdioServerTransport;
-import org.springframework.ai.mcp.spec.ServerMcpTransport;
+import org.modelcontextprotocol.server.transport.StdioServerTransport;
+import org.modelcontextprotocol.spec.ServerMcpTransport;
/**
* Tests for {@link McpAsyncServer} using {@link StdioServerTransport}.
diff --git a/mcp/src/test/java/org/springframework/ai/mcp/server/StdioMcpSyncServerTests.java b/mcp/src/test/java/org/modelcontextprotocol/server/StdioMcpSyncServerTests.java
similarity index 85%
rename from mcp/src/test/java/org/springframework/ai/mcp/server/StdioMcpSyncServerTests.java
rename to mcp/src/test/java/org/modelcontextprotocol/server/StdioMcpSyncServerTests.java
index 6bcc4bed..26fbaaf2 100644
--- a/mcp/src/test/java/org/springframework/ai/mcp/server/StdioMcpSyncServerTests.java
+++ b/mcp/src/test/java/org/modelcontextprotocol/server/StdioMcpSyncServerTests.java
@@ -14,12 +14,11 @@
* limitations under the License.
*/
-package org.springframework.ai.mcp.server;
+package org.modelcontextprotocol.server;
import org.junit.jupiter.api.Timeout;
-
-import org.springframework.ai.mcp.server.transport.StdioServerTransport;
-import org.springframework.ai.mcp.spec.ServerMcpTransport;
+import org.modelcontextprotocol.server.transport.StdioServerTransport;
+import org.modelcontextprotocol.spec.ServerMcpTransport;
/**
* Tests for {@link McpSyncServer} using {@link StdioServerTransport}.
diff --git a/mcp-transport/mcp-webflux-sse-transport/src/test/java/org/springframework/ai/mcp/server/transport/BlockingInputStream.java b/mcp/src/test/java/org/modelcontextprotocol/server/transport/BlockingInputStream.java
similarity index 97%
rename from mcp-transport/mcp-webflux-sse-transport/src/test/java/org/springframework/ai/mcp/server/transport/BlockingInputStream.java
rename to mcp/src/test/java/org/modelcontextprotocol/server/transport/BlockingInputStream.java
index 96690dbd..b7de2b99 100644
--- a/mcp-transport/mcp-webflux-sse-transport/src/test/java/org/springframework/ai/mcp/server/transport/BlockingInputStream.java
+++ b/mcp/src/test/java/org/modelcontextprotocol/server/transport/BlockingInputStream.java
@@ -13,7 +13,7 @@
* See the License for the specific language governing permissions and
* limitations under the License.
*/
-package org.springframework.ai.mcp.server.transport;
+package org.modelcontextprotocol.server.transport;
import java.io.IOException;
import java.io.InputStream;
diff --git a/mcp/src/test/java/org/springframework/ai/mcp/server/transport/HttpServletSseServerTransportIntegrationTests.java b/mcp/src/test/java/org/modelcontextprotocol/server/transport/HttpServletSseServerTransportIntegrationTests.java
similarity index 88%
rename from mcp/src/test/java/org/springframework/ai/mcp/server/transport/HttpServletSseServerTransportIntegrationTests.java
rename to mcp/src/test/java/org/modelcontextprotocol/server/transport/HttpServletSseServerTransportIntegrationTests.java
index bc6bc06d..3ebf857c 100644
--- a/mcp/src/test/java/org/springframework/ai/mcp/server/transport/HttpServletSseServerTransportIntegrationTests.java
+++ b/mcp/src/test/java/org/modelcontextprotocol/server/transport/HttpServletSseServerTransportIntegrationTests.java
@@ -13,7 +13,7 @@
* See the License for the specific language governing permissions and
* limitations under the License.
*/
-package org.springframework.ai.mcp.server.transport;
+package org.modelcontextprotocol.server.transport;
import java.time.Duration;
import java.util.List;
@@ -29,25 +29,23 @@
import org.junit.jupiter.api.AfterEach;
import org.junit.jupiter.api.BeforeEach;
import org.junit.jupiter.api.Test;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
+import org.modelcontextprotocol.client.McpClient;
+import org.modelcontextprotocol.client.transport.HttpClientSseClientTransport;
+import org.modelcontextprotocol.server.McpServer;
+import org.modelcontextprotocol.server.McpServerFeatures;
+import org.modelcontextprotocol.spec.McpError;
+import org.modelcontextprotocol.spec.McpSchema;
+import org.modelcontextprotocol.spec.McpSchema.CallToolResult;
+import org.modelcontextprotocol.spec.McpSchema.ClientCapabilities;
+import org.modelcontextprotocol.spec.McpSchema.CreateMessageRequest;
+import org.modelcontextprotocol.spec.McpSchema.CreateMessageResult;
+import org.modelcontextprotocol.spec.McpSchema.InitializeResult;
+import org.modelcontextprotocol.spec.McpSchema.Role;
+import org.modelcontextprotocol.spec.McpSchema.Root;
+import org.modelcontextprotocol.spec.McpSchema.ServerCapabilities;
+import org.modelcontextprotocol.spec.McpSchema.Tool;
import reactor.test.StepVerifier;
-import org.springframework.ai.mcp.client.McpClient;
-import org.springframework.ai.mcp.client.transport.HttpClientSseClientTransport;
-import org.springframework.ai.mcp.server.McpServer;
-import org.springframework.ai.mcp.server.McpServerFeatures;
-import org.springframework.ai.mcp.spec.McpError;
-import org.springframework.ai.mcp.spec.McpSchema;
-import org.springframework.ai.mcp.spec.McpSchema.CallToolResult;
-import org.springframework.ai.mcp.spec.McpSchema.ClientCapabilities;
-import org.springframework.ai.mcp.spec.McpSchema.CreateMessageRequest;
-import org.springframework.ai.mcp.spec.McpSchema.CreateMessageResult;
-import org.springframework.ai.mcp.spec.McpSchema.InitializeResult;
-import org.springframework.ai.mcp.spec.McpSchema.Role;
-import org.springframework.ai.mcp.spec.McpSchema.Root;
-import org.springframework.ai.mcp.spec.McpSchema.ServerCapabilities;
-import org.springframework.ai.mcp.spec.McpSchema.Tool;
import org.springframework.web.client.RestClient;
import static org.assertj.core.api.Assertions.assertThat;
@@ -55,8 +53,6 @@
public class HttpServletSseServerTransportIntegrationTests {
- private static final Logger logger = LoggerFactory.getLogger(HttpServletSseServerTransportIntegrationTests.class);
-
private static final int PORT = 8184;
private static final String MESSAGE_ENDPOINT = "/mcp/message";
@@ -239,7 +235,7 @@ void testToolCallSuccess() {
new McpSchema.Tool("tool1", "tool1 description", emptyJsonSchema), request -> {
String response = RestClient.create()
.get()
- .uri("https://github.com/spring-projects-experimental/spring-ai-mcp/blob/main/README.md")
+ .uri("https://github.com/modelcontextprotocol/java-sdk/blob/main/README.md")
.retrieve()
.body(String.class);
assertThat(response).isNotBlank();
@@ -274,7 +270,7 @@ void testToolListChangeHandlingSuccess() {
new McpSchema.Tool("tool1", "tool1 description", emptyJsonSchema), request -> {
String response = RestClient.create()
.get()
- .uri("https://github.com/spring-projects-experimental/spring-ai-mcp/blob/main/README.md")
+ .uri("https://github.com/modelcontextprotocol/java-sdk/blob/main/README.md")
.retrieve()
.body(String.class);
assertThat(response).isNotBlank();
@@ -290,7 +286,7 @@ void testToolListChangeHandlingSuccess() {
var mcpClient = clientBuilder.toolsChangeConsumer(toolsUpdate -> {
String response = RestClient.create()
.get()
- .uri("https://github.com/spring-projects-experimental/spring-ai-mcp/blob/main/README.md")
+ .uri("https://github.com/modelcontextprotocol/java-sdk/blob/main/README.md")
.retrieve()
.body(String.class);
assertThat(response).isNotBlank();
diff --git a/mcp/src/test/java/org/springframework/ai/mcp/server/transport/StdioServerTransportTests.java b/mcp/src/test/java/org/modelcontextprotocol/server/transport/StdioServerTransportTests.java
similarity index 96%
rename from mcp/src/test/java/org/springframework/ai/mcp/server/transport/StdioServerTransportTests.java
rename to mcp/src/test/java/org/modelcontextprotocol/server/transport/StdioServerTransportTests.java
index c6ce443b..0dd790b6 100644
--- a/mcp/src/test/java/org/springframework/ai/mcp/server/transport/StdioServerTransportTests.java
+++ b/mcp/src/test/java/org/modelcontextprotocol/server/transport/StdioServerTransportTests.java
@@ -14,7 +14,7 @@
* limitations under the License.
*/
-package org.springframework.ai.mcp.server.transport;
+package org.modelcontextprotocol.server.transport;
import java.io.ByteArrayOutputStream;
import java.io.InputStream;
@@ -27,12 +27,11 @@
import org.junit.jupiter.api.BeforeEach;
import org.junit.jupiter.api.Disabled;
import org.junit.jupiter.api.Test;
+import org.modelcontextprotocol.spec.McpSchema;
+import org.modelcontextprotocol.spec.McpSchema.JSONRPCRequest;
import reactor.core.publisher.Mono;
import reactor.test.StepVerifier;
-import org.springframework.ai.mcp.spec.McpSchema;
-import org.springframework.ai.mcp.spec.McpSchema.JSONRPCRequest;
-
import static org.assertj.core.api.Assertions.assertThat;
/**
diff --git a/mcp/src/test/java/org/springframework/ai/mcp/spec/DefaultMcpSessionTests.java b/mcp/src/test/java/org/modelcontextprotocol/spec/DefaultMcpSessionTests.java
similarity index 98%
rename from mcp/src/test/java/org/springframework/ai/mcp/spec/DefaultMcpSessionTests.java
rename to mcp/src/test/java/org/modelcontextprotocol/spec/DefaultMcpSessionTests.java
index 9af6513e..0dcd1d48 100644
--- a/mcp/src/test/java/org/springframework/ai/mcp/spec/DefaultMcpSessionTests.java
+++ b/mcp/src/test/java/org/modelcontextprotocol/spec/DefaultMcpSessionTests.java
@@ -14,7 +14,7 @@
* limitations under the License.
*/
-package org.springframework.ai.mcp.spec;
+package org.modelcontextprotocol.spec;
import java.time.Duration;
import java.util.Map;
@@ -23,14 +23,13 @@
import org.junit.jupiter.api.AfterEach;
import org.junit.jupiter.api.BeforeEach;
import org.junit.jupiter.api.Test;
+import org.modelcontextprotocol.MockMcpTransport;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import reactor.core.publisher.Mono;
import reactor.core.publisher.Sinks;
import reactor.test.StepVerifier;
-import org.springframework.ai.mcp.MockMcpTransport;
-
import static org.assertj.core.api.Assertions.assertThat;
import static org.assertj.core.api.Assertions.assertThatThrownBy;
diff --git a/mcp/src/test/java/org/springframework/ai/mcp/attic/ClientSessionTests2.java b/mcp/src/test/java/org/springframework/ai/mcp/attic/ClientSessionTests2.java
deleted file mode 100644
index 47e6e733..00000000
--- a/mcp/src/test/java/org/springframework/ai/mcp/attic/ClientSessionTests2.java
+++ /dev/null
@@ -1,79 +0,0 @@
-/*
- * Copyright 2024-2024 the original author or authors.
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * https://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package org.springframework.ai.mcp.attic;
-
-import java.time.Duration;
-
-import org.springframework.ai.mcp.client.McpClient;
-import org.springframework.ai.mcp.client.McpSyncClient;
-import org.springframework.ai.mcp.client.transport.ServerParameters;
-import org.springframework.ai.mcp.client.transport.StdioClientTransport;
-import org.springframework.ai.mcp.spec.McpSchema.ListResourcesResult;
-import org.springframework.ai.mcp.spec.McpSchema.ListToolsResult;
-import org.springframework.ai.mcp.spec.McpSchema.Resource;
-
-/**
- * @author Christian Tzolov
- * @since 1.0.0
- */
-public class ClientSessionTests2 {
-
- public static void main(String[] args) {
-
- var stdioParams = ServerParameters.builder("uv")
- .args("--directory", "dir", "run", "mcp-server-sqlite", "--db-path", "~/test.db")
- .build();
-
- try (McpSyncClient clientSession = McpClient.using(new StdioClientTransport(stdioParams))
- .requestTimeout(Duration.ofSeconds(10))
- .sync()) {
-
- clientSession.initialize();
-
- ListToolsResult tools = clientSession.listTools(null);
- System.out.println("Tools: " + tools);
-
- clientSession.ping();
-
- // CallToolRequest callToolRequest = new CallToolRequest("echo",
- // Map.of("message", "Hello MCP Spring AI!"));
- // CallToolResult callToolResult =
- // clientSession.callTool(callToolRequest);
- // System.out.println("Call Tool Result: " + callToolResult);
- // //
- // clientSession.sendRootsListChanged();
-
- // Resources
- ListResourcesResult resources = clientSession.listResources(null);
- System.out.println("Resources Size: " + resources.resources().size());
- System.out.println("Resources: " + resources);
- for (Resource resource : resources.resources()) {
- System.out.println(clientSession.readResource(resource));
-
- }
-
- // var resourceTemplate = clientSession.listResourceTemplates(null);
- // System.out.println("Resource Templates: " + resourceTemplate);
-
- // stdioClient.awaitForExit();
- }
- catch (Exception e) {
- e.printStackTrace();
- }
- }
-
-}
diff --git a/mcp/src/test/java/org/springframework/ai/mcp/attic/ClientSessionTests3.java b/mcp/src/test/java/org/springframework/ai/mcp/attic/ClientSessionTests3.java
deleted file mode 100644
index f147aa56..00000000
--- a/mcp/src/test/java/org/springframework/ai/mcp/attic/ClientSessionTests3.java
+++ /dev/null
@@ -1,74 +0,0 @@
-/*
- * Copyright 2024-2024 the original author or authors.
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * https://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package org.springframework.ai.mcp.attic;
-
-import java.time.Duration;
-
-import org.springframework.ai.mcp.client.McpClient;
-import org.springframework.ai.mcp.client.McpSyncClient;
-import org.springframework.ai.mcp.client.transport.ServerParameters;
-import org.springframework.ai.mcp.client.transport.StdioClientTransport;
-import org.springframework.ai.mcp.spec.McpSchema.ListResourcesResult;
-import org.springframework.ai.mcp.spec.McpSchema.ListToolsResult;
-import org.springframework.ai.mcp.spec.McpSchema.Resource;
-
-/**
- * @author Christian Tzolov
- * @since 1.0.0
- */
-public class ClientSessionTests3 {
-
- public static void main(String[] args) {
-
- var stdioParams = ServerParameters.builder("uv")
- .args("--directory", "dir", "run", "mcp-server-sqlite", "--db-path", "~/test.db")
- .build();
-
- McpSyncClient clientSession = null;
- try {
-
- clientSession = McpClient.using(new StdioClientTransport(stdioParams))
- .requestTimeout(Duration.ofSeconds(10))
- .sync();
-
- clientSession.initialize();
-
- ListToolsResult tools = clientSession.listTools(null);
- System.out.println("Tools: " + tools);
-
- clientSession.ping();
-
- // Resources
- ListResourcesResult resources = clientSession.listResources(null);
- System.out.println("Resources Size: " + resources.resources().size());
- System.out.println("Resources: " + resources);
- for (Resource resource : resources.resources()) {
- System.out.println(clientSession.readResource(resource));
-
- }
- }
- catch (Exception e) {
- e.printStackTrace();
- }
- finally {
- if (clientSession != null) {
- clientSession.close();
- }
- }
- }
-
-}
diff --git a/mcp/src/test/java/org/springframework/ai/mcp/attic/SSEClient.java b/mcp/src/test/java/org/springframework/ai/mcp/attic/SSEClient.java
deleted file mode 100644
index 3b759992..00000000
--- a/mcp/src/test/java/org/springframework/ai/mcp/attic/SSEClient.java
+++ /dev/null
@@ -1,183 +0,0 @@
-/*
-* Copyright 2024 - 2024 the original author or authors.
-*
-* Licensed under the Apache License, Version 2.0 (the "License");
-* you may not use this file except in compliance with the License.
-* You may obtain a copy of the License at
-*
-* https://www.apache.org/licenses/LICENSE-2.0
-*
-* Unless required by applicable law or agreed to in writing, software
-* distributed under the License is distributed on an "AS IS" BASIS,
-* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-* See the License for the specific language governing permissions and
-* limitations under the License.
-*/
-package org.springframework.ai.mcp.attic;
-
-/**
- * @author Christian Tzolov
- * @since 1.0.0
- */
-
-import java.net.URI;
-import java.net.http.HttpClient;
-import java.net.http.HttpRequest;
-import java.net.http.HttpResponse;
-import java.time.Duration;
-import java.util.concurrent.CompletableFuture;
-import java.util.concurrent.atomic.AtomicReference;
-import java.util.regex.Pattern;
-import java.util.stream.Stream;
-
-public class SSEClient {
-
- private final HttpClient httpClient;
-
- private static final Pattern EVENT_DATA_PATTERN = Pattern.compile("^data:(.+)$", Pattern.MULTILINE);
-
- private static final Pattern EVENT_ID_PATTERN = Pattern.compile("^id:(.+)$", Pattern.MULTILINE);
-
- private static final Pattern EVENT_TYPE_PATTERN = Pattern.compile("^event:(.+)$", Pattern.MULTILINE);
-
- public SSEClient() {
- this.httpClient = HttpClient.newBuilder().connectTimeout(Duration.ofSeconds(10)).build();
- }
-
- public void subscribe(String url, SSEEventHandler eventHandler) {
- HttpRequest request = HttpRequest.newBuilder()
- .uri(URI.create(url))
- .header("Accept", "text/event-stream")
- .header("Cache-Control", "no-cache")
- .GET()
- .build();
-
- CompletableFuture future = httpClient.sendAsync(request, HttpResponse.BodyHandlers.ofLines())
- .thenAccept(response -> {
- if (response.statusCode() == 200) {
- processSSEStream(response, eventHandler);
- }
- else {
- throw new RuntimeException("Failed to connect to SSE stream: " + response.statusCode());
- }
- });
-
- // Handle errors
- future.exceptionally(throwable -> {
- eventHandler.onError(throwable);
- return null;
- });
- }
-
- private void processSSEStream(HttpResponse> response, SSEEventHandler eventHandler) {
- StringBuilder eventBuilder = new StringBuilder();
- AtomicReference currentEventId = new AtomicReference<>();
- AtomicReference currentEventType = new AtomicReference<>("message"); // default
- // event
- // type
-
- response.body().forEach(line -> {
- if (line.isEmpty()) {
- // Empty line means end of event
- if (eventBuilder.length() > 0) {
- String eventData = eventBuilder.toString();
- SSEEvent event = parseEvent(eventData, currentEventId.get(), currentEventType.get());
- eventHandler.onEvent(event);
- eventBuilder.setLength(0);
- }
- }
- else {
- if (line.startsWith("data:")) {
- var matcher = EVENT_DATA_PATTERN.matcher(line);
- if (matcher.find()) {
- eventBuilder.append(matcher.group(1).trim()).append("\n");
- }
- }
- else if (line.startsWith("id:")) {
- var matcher = EVENT_ID_PATTERN.matcher(line);
- if (matcher.find()) {
- currentEventId.set(matcher.group(1).trim());
- }
- }
- else if (line.startsWith("event:")) {
- var matcher = EVENT_TYPE_PATTERN.matcher(line);
- if (matcher.find()) {
- currentEventType.set(matcher.group(1).trim());
- }
- }
- }
- });
- }
-
- private SSEEvent parseEvent(String eventData, String eventId, String eventType) {
- return new SSEEvent(eventId, eventType, eventData.trim());
- }
-
- // Event handler interface
- public interface SSEEventHandler {
-
- void onEvent(SSEEvent event);
-
- void onError(Throwable error);
-
- }
-
- // SSE Event class
- public static class SSEEvent {
-
- private final String id;
-
- private final String type;
-
- private final String data;
-
- public SSEEvent(String id, String type, String data) {
- this.id = id;
- this.type = type;
- this.data = data;
- }
-
- public String getId() {
- return id;
- }
-
- public String getType() {
- return type;
- }
-
- public String getData() {
- return data;
- }
-
- @Override
- public String toString() {
- return "SSEEvent{" + "id='" + id + '\'' + ", type='" + type + '\'' + ", data='" + data + '\'' + '}';
- }
-
- }
-
- public static void main(String[] args) {
- SSEClient sseClient = new SSEClient();
-
- var eventHandler = new SSEEventHandler() {
- @Override
- public void onEvent(SSEEvent event) {
- System.out.println("Received event: " + event);
- }
-
- @Override
- public void onError(Throwable error) {
- System.out.println("Error: " + error);
- }
- };
- sseClient.subscribe("http://localhost:8080/sse", eventHandler);
-
- try {
- Thread.sleep(100000);
- }
- catch (InterruptedException e) {
- e.printStackTrace();
- }
- }
-
-}
\ No newline at end of file
diff --git a/mcp/src/test/java/org/springframework/ai/mcp/attic/ServerParametersParser.java b/mcp/src/test/java/org/springframework/ai/mcp/attic/ServerParametersParser.java
deleted file mode 100644
index e093723f..00000000
--- a/mcp/src/test/java/org/springframework/ai/mcp/attic/ServerParametersParser.java
+++ /dev/null
@@ -1,90 +0,0 @@
-/*
- * Copyright 2024-2024 the original author or authors.
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * https://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package org.springframework.ai.mcp.attic;
-
-import java.util.List;
-import java.util.Map;
-
-import com.fasterxml.jackson.annotation.JsonInclude;
-import com.fasterxml.jackson.annotation.JsonProperty;
-import com.fasterxml.jackson.databind.ObjectMapper;
-
-import org.springframework.ai.mcp.attic.ServerParametersParser.McpServerConfigurations.McpServerConfiguration;
-
-/**
- * @author Christian Tzolov
- * @author Dariusz Jędrzejczyk
- */
-
-public class ServerParametersParser {
-
- @JsonInclude(JsonInclude.Include.NON_ABSENT)
- public record McpServerConfigurations(// @formatter:off
- @JsonProperty("mcpServers") Map mcpServers) {
-
- @JsonInclude(JsonInclude.Include.NON_ABSENT)
- public record McpServerConfiguration(
- @JsonProperty("command") String command,
- @JsonProperty("args") List args,
- @JsonProperty("env") Map env) {
- }
- } // @formatter:on
-
- public static void main(String[] args) throws Exception {
- ObjectMapper objectMapper = new ObjectMapper();
-
- // Assuming the JSON is in a file named "servers.json"
- String jsonInput = """
- {
- "mcpServers": {
- "filesystem": {
- "command": "npx",
- "args": ["-y", "@modelcontextprotocol/server-filesystem", "/path/to/allowed/files"]
- },
- "git": {
- "command": "uvx",
- "args": ["mcp-server-git", "--repository", "path/to/git/repo"]
- },
- "github": {
- "command": "npx",
- "args": ["-y", "@modelcontextprotocol/server-github"],
- "env": {
- "GITHUB_PERSONAL_ACCESS_TOKEN": ""
- }
- },
- "postgres": {
- "command": "npx",
- "args": ["-y", "@modelcontextprotocol/server-postgres", "postgresql://localhost/mydb"]
- }
- }
- }
- """;
-
- // Deserialize JSON into McpServers
- McpServerConfigurations servers = objectMapper.readValue(jsonInput, McpServerConfigurations.class);
-
- // Access individual servers
- for (Map.Entry entry : servers.mcpServers().entrySet()) {
- System.out.println("Key: " + entry.getKey());
- System.out.println("Command: " + entry.getValue().command());
- System.out.println("Arguments: " + String.join(", ", entry.getValue().args()));
- System.out.println("Environment Variables: " + entry.getValue().env());
- System.out.println("-----------");
- }
- }
-
-}
diff --git a/mcp/src/test/java/org/springframework/ai/mcp/attic/_DemoServer.java_ b/mcp/src/test/java/org/springframework/ai/mcp/attic/_DemoServer.java_
deleted file mode 100644
index df1fc0b6..00000000
--- a/mcp/src/test/java/org/springframework/ai/mcp/attic/_DemoServer.java_
+++ /dev/null
@@ -1,61 +0,0 @@
-/*
-* Copyright 2024 - 2024 the original author or authors.
-*
-* Licensed under the Apache License, Version 2.0 (the "License");
-* you may not use this file except in compliance with the License.
-* You may obtain a copy of the License at
-*
-* https://www.apache.org/licenses/LICENSE-2.0
-*
-* Unless required by applicable law or agreed to in writing, software
-* distributed under the License is distributed on an "AS IS" BASIS,
-* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-* See the License for the specific language governing permissions and
-* limitations under the License.
-*/
-package org.springframework.ai.mcp.attic;
-
-import java.util.List;
-import java.util.Map;
-
-import com.fasterxml.jackson.databind.ObjectMapper;
-import reactor.netty.http.server.HttpServer;
-
-import org.springframework.ai.mcp.server.McpServer;
-import org.springframework.ai.mcp.server.transport.SseServerTransport;
-import org.springframework.ai.mcp.spec.McpSchema;
-import org.springframework.ai.mcp.spec.McpSchema.CallToolResult;
-import org.springframework.http.server.reactive.HttpHandler;
-import org.springframework.http.server.reactive.ReactorHttpHandlerAdapter;
-import org.springframework.web.reactive.function.server.RouterFunctions;
-
-/**
- *
- * https://docs.spring.io/spring-framework/reference/web/webflux-functional.html#webflux-fn-running
- * https://docs.spring.io/spring-framework/reference/web/webflux/reactive-spring.html#webflux-httphandler
- *
- * @author Christian Tzolov
- */
-
-public class DemoServer {
-
- public static void main(String[] args) {
- SseServerTransport transport = new SseServerTransport(new ObjectMapper(), "/mcp/message");
-
- var mcpServer = McpServer.using(transport)
- .serverInfo("Weather Forecast", "1.0.0")
- .tool(new McpSchema.Tool("weather", "Weather forecast tool by location", "{ \"type\": \"object\" }"),
- (arguments) -> {
- String city = (String) arguments.get("city");
- return new CallToolResult(List.of(), false);
- })
- .async();
-
- HttpHandler httpHandler = RouterFunctions.toHttpHandler(transport.getRouterFunction());
- ReactorHttpHandlerAdapter adapter = new ReactorHttpHandlerAdapter(httpHandler);
- HttpServer httpServer = HttpServer.create().port(8080).handle(adapter);
- httpServer.bindNow().onDispose().block();
-
- }
-
-}
diff --git a/mcp/src/test/java/org/springframework/ai/mcp/attic/_MainSSE.java_ b/mcp/src/test/java/org/springframework/ai/mcp/attic/_MainSSE.java_
deleted file mode 100644
index e4c3004a..00000000
--- a/mcp/src/test/java/org/springframework/ai/mcp/attic/_MainSSE.java_
+++ /dev/null
@@ -1,81 +0,0 @@
-/*
-* Copyright 2024 - 2024 the original author or authors.
-*
-* Licensed under the Apache License, Version 2.0 (the "License");
-* you may not use this file except in compliance with the License.
-* You may obtain a copy of the License at
-*
-* https://www.apache.org/licenses/LICENSE-2.0
-*
-* Unless required by applicable law or agreed to in writing, software
-* distributed under the License is distributed on an "AS IS" BASIS,
-* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-* See the License for the specific language governing permissions and
-* limitations under the License.
-*/
-package org.springframework.ai.mcp.attic;
-
-import java.time.Duration;
-import java.util.Map;
-
-import org.springframework.ai.mcp.client.McpClient;
-import org.springframework.ai.mcp.client.McpSyncClient;
-import org.springframework.ai.mcp.client.transport.SseClientTransport;
-import org.springframework.ai.mcp.spec.McpSchema.CallToolRequest;
-import org.springframework.ai.mcp.spec.McpSchema.CallToolResult;
-import org.springframework.ai.mcp.spec.McpSchema.ListPromptsResult;
-import org.springframework.ai.mcp.spec.McpSchema.ListResourcesResult;
-import org.springframework.ai.mcp.spec.McpSchema.ListToolsResult;
-import org.springframework.ai.mcp.spec.McpSchema.Resource;
-import org.springframework.web.reactive.function.client.WebClient;
-
-/**
- * @author Christian Tzolov
- * @since 1.0.0
- */
-
-public class MainSSE {
-
- public static void main(String[] args) {
-
- try (McpSyncClient mcpClient = McpClient
- .using(new SseClientTransport(WebClient.builder().baseUrl("http://localhost:3001")))
- .requestTimeout(Duration.ofSeconds(1000))
- .sync()) {
-
- mcpClient.initialize();
-
- ListToolsResult tools = mcpClient.listTools();
- System.out.println("Tools: " + tools);
-
- mcpClient.ping();
-
- CallToolRequest callToolRequest = new CallToolRequest("echo", Map.of("message", "Hello MCP Spring AI!"));
- CallToolResult callToolResult = mcpClient.callTool(callToolRequest);
- System.out.println("Call Tool Result: " + callToolResult);
-
- // mcpClient.sendRootsListChanged();
-
- // Resources
- ListResourcesResult resources = mcpClient.listResources();
- System.out.println("Resources Size: " + resources.resources().size());
- System.out.println("Resources: " + resources);
- for (Resource resource : resources.resources()) {
- System.out.println(mcpClient.readResource(resource));
- }
-
- var resourceTemplate = mcpClient.listResourceTemplates();
- System.out.println("Resource Templates: " + resourceTemplate);
-
- ListPromptsResult prompts = mcpClient.listPrompts();
- for (var prompt : prompts.prompts()) {
- System.out.println("Prompt: " + prompt);
- }
-
- }
- catch (Exception e) {
- e.printStackTrace();
- }
- }
-
-}
diff --git a/pom.xml b/pom.xml
index 2092d7d2..c30f00b2 100644
--- a/pom.xml
+++ b/pom.xml
@@ -4,12 +4,18 @@
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd">
4.0.0
- org.springframework.experimental
+ org.modelcontextprotocol.sdk
mcp-parent
0.7.0-SNAPSHOT
pom
- https://github.com/spring-projects-experimental/spring-ai-mcp
+ https://github.com/modelcontextprotocol/java-sdk
+
+
+ https://github.com/modelcontextprotocol/java-sdk
+ git://github.com/modelcontextprotocol/java-sdk.git
+ git@github.com/modelcontextprotocol/java-sdk.git
+
Spring AI MCP Parent
Java SDK and Spring Framework integration for the Model Context Protocol (MCP), enabling interaction with AI models and tools through a standardized interface
@@ -36,18 +42,14 @@
Dariusz Jędrzejczyk
-
- https://github.com/spring-projects-experimental/spring-ai-mcp
- git://github.com/spring-projects-experimental/spring-ai-mcp.git
- git@github.com:spring-projects-experimental/spring-ai-mcp.git
-
+
Github Issues
- https://github.com/spring-projects-experimental/spring-ai-mcp/issues
+ https://github.com/modelcontextprotocol/java-sdk/issues
Github Actions
- https://github.com/spring-projects-experimental/spring-ai-mcp/actions
+ https://github.com/modelcontextprotocol/java-sdk/actions