refactor: Add HttpServletSseServerTransport for generic Servlet integration
Introduces a new Server-Sent Events (SSE) Server transport implementation based on the Servlet API that enables MCP integration with any Java HTTP server application supporting Servlets. This implementation complements the existing WebFlux and WebMvc transports by providing a generic Servlet-based option that works with any Java web server, not just Spring applications. Key changes: - Add HttpServletSseServerTransport with async Servlet 6.0 support - Add integration tests with embedded Tomcat - Add servlet dependencies with externalized versions: - jakarta.servlet-api 6.1.0 (provided) - tomcat-embed-core 11.0.2 (test) - tomcat-embed-websocket 11.0.2 (test) Resolves #61
This commit is contained in:
parent
42b5931dd5
commit
0c8968044c
4 changed files with 273 additions and 206 deletions
|
|
@ -153,6 +153,10 @@ class StdioServerTransport implements ServerMcpTransport {
|
|||
}
|
||||
|
||||
|
||||
class HttpServletSseServerTransport implements ServerMcpTransport {
|
||||
}
|
||||
|
||||
|
||||
class HttpClientSseClientTransport implements ClientMcpTransport {
|
||||
}
|
||||
|
||||
|
|
|
|||
File diff suppressed because one or more lines are too long
|
Before Width: | Height: | Size: 65 KiB After Width: | Height: | Size: 67 KiB |
|
|
@ -15,7 +15,8 @@ Java SDK implementation of the link:https://modelcontextprotocol.io/introduction
|
|||
* Multiple transport implementations:
|
||||
** Core transports:
|
||||
*** Stdio-based transport for process-based communication
|
||||
*** Java HttpClient-based SSE transport for HTTP streaming
|
||||
*** Java HttpClient-based SSE client transport for HTTP SSE Client-side streaming
|
||||
*** Servlet-based SSE server transport for HTTP SSE Server streaming
|
||||
** Spring-based transports:
|
||||
*** WebFlux SSE transport for reactive HTTP streaming
|
||||
*** WebMVC SSE transport for servlet-based HTTP streaming
|
||||
|
|
@ -515,6 +516,41 @@ Implements the MCP HTTP with SSE transport specification, providing:
|
|||
* Message routing and session management
|
||||
* Graceful shutdown capabilities
|
||||
|
||||
SSE (Servlet)::
|
||||
+
|
||||
Creates a Servlet-based SSE server transport.
|
||||
Included in the core `mcp` module.
|
||||
The `HttpServletSseServerTransport` can be used with any Servlet container.
|
||||
To using it with a Spring Web application, you can register it as a Servlet bean:
|
||||
+
|
||||
[source,java]
|
||||
----
|
||||
@Configuration
|
||||
@EnableWebMvc
|
||||
public class McpServerConfig implements WebMvcConfigurer {
|
||||
|
||||
@Bean
|
||||
public HttpServletSseServerTransport servletSseServerTransport() {
|
||||
return new HttpServletSseServerTransport(new ObjectMapper(), "/mcp/message");
|
||||
}
|
||||
|
||||
@Bean
|
||||
public ServletRegistrationBean customServletBean(HttpServletSseServerTransport servlet) {
|
||||
return new ServletRegistrationBean(servlet);
|
||||
}
|
||||
}
|
||||
----
|
||||
+
|
||||
Implements the MCP HTTP with SSE transport specification using the traditional Servlet API, providing:
|
||||
+
|
||||
* Asynchronous message handling using Servlet 6.0 async support
|
||||
* Session management for multiple client connections
|
||||
* Two types of endpoints:
|
||||
** SSE endpoint (/sse) for server-to-client events
|
||||
** Message endpoint (configurable) for client-to-server requests
|
||||
* Error handling and response formatting
|
||||
* Graceful shutdown support
|
||||
|
||||
======
|
||||
|
||||
=== Server Capabilities
|
||||
|
|
|
|||
|
|
@ -20,7 +20,8 @@ Core implementation of the Model Context Protocol specification, providing:
|
|||
|
||||
* *Core Transports*
|
||||
** Stdio-based (`StdioClientTransport`, `StdioServerTransport`) for process-based communication
|
||||
** Java HttpClient-based SSE client (`HttpClientSseClientTransport`) for HTTP streaming
|
||||
** Java HttpClient-based SSE client (`HttpClientSseClientTransport`) for HTTP SSE Client-side streaming
|
||||
** Servlet-based SSE server (`HttpServletSseServerTransport`) for HTTP SSE Server streaming using traditional Servlet API
|
||||
|
||||
* *Optional SSE Transports*
|
||||
** link:https://github.com/spring-projects-experimental/spring-ai-mcp/tree/main/mcp-transport/mcp-webflux-sse-transport[WebFlux SSE Transport] - Reactive HTTP streaming with Spring WebFlux (Client & Server)
|
||||
|
|
@ -114,6 +115,7 @@ Reffer to the xref:dependency-management.adoc[Dependency Management] page for mo
|
|||
* link:https://github.com/habuma/spring-ai-examples/tree/main/spring-ai-mcp[Theme Park API] - MCP server/client with Theme Park API tools
|
||||
* link:https://github.com/spring-projects/spring-ai-examples/tree/main/model-context-protocol/mcp-webflux-server[WebFlux SSE] - WebFlux server/client implementation
|
||||
* link:https://github.com/spring-projects/spring-ai-examples/tree/main/model-context-protocol/mcp-webmvc-server[WebMvc SSE] - WebMvc server with HttpClient implementation
|
||||
* link:https://github.com/spring-projects/spring-ai-examples/tree/main/model-context-protocol/mcp-servlet-server[Servlet SSE] - SSE Servlet server with HttpClient implementation
|
||||
|
||||
== Documentation
|
||||
|
||||
|
|
|
|||
Loading…
Reference in a new issue