diff --git a/mcp-spring/mcp-spring-webmvc/src/main/java/io/modelcontextprotocol/server/transport/WebMvcStreamableServerTransportProvider.java b/mcp-spring/mcp-spring-webmvc/src/main/java/io/modelcontextprotocol/server/transport/WebMvcStreamableServerTransportProvider.java index fa51a013..df5babae 100644 --- a/mcp-spring/mcp-spring-webmvc/src/main/java/io/modelcontextprotocol/server/transport/WebMvcStreamableServerTransportProvider.java +++ b/mcp-spring/mcp-spring-webmvc/src/main/java/io/modelcontextprotocol/server/transport/WebMvcStreamableServerTransportProvider.java @@ -90,7 +90,7 @@ public class WebMvcStreamableServerTransportProvider implements McpStreamableSer private McpStreamableServerSession.Factory sessionFactory; /** - * Map of active client sessions, keyed by mcp-session-id. + * Map of active client sessions, keyed by Mcp-Session-Id. */ private final ConcurrentHashMap sessions = new ConcurrentHashMap<>(); @@ -241,7 +241,7 @@ private ServerResponse handleGet(ServerRequest request) { McpTransportContext transportContext = this.contextExtractor.extract(request, new DefaultMcpTransportContext()); if (!request.headers().asHttpHeaders().containsKey(HttpHeaders.MCP_SESSION_ID)) { - return ServerResponse.badRequest().body("Session ID required in mcp-session-id header"); + return ServerResponse.badRequest().body("Session ID required in " + HttpHeaders.MCP_SESSION_ID + " header"); } String sessionId = request.headers().asHttpHeaders().getFirst(HttpHeaders.MCP_SESSION_ID); @@ -434,7 +434,7 @@ private ServerResponse handleDelete(ServerRequest request) { McpTransportContext transportContext = this.contextExtractor.extract(request, new DefaultMcpTransportContext()); if (!request.headers().asHttpHeaders().containsKey(HttpHeaders.MCP_SESSION_ID)) { - return ServerResponse.badRequest().body("Session ID required in mcp-session-id header"); + return ServerResponse.badRequest().body("Session ID required in " + HttpHeaders.MCP_SESSION_ID + " header"); } String sessionId = request.headers().asHttpHeaders().getFirst(HttpHeaders.MCP_SESSION_ID); diff --git a/mcp/src/main/java/io/modelcontextprotocol/client/transport/HttpClientStreamableHttpTransport.java b/mcp/src/main/java/io/modelcontextprotocol/client/transport/HttpClientStreamableHttpTransport.java index 3cfa7359..f61ba139 100644 --- a/mcp/src/main/java/io/modelcontextprotocol/client/transport/HttpClientStreamableHttpTransport.java +++ b/mcp/src/main/java/io/modelcontextprotocol/client/transport/HttpClientStreamableHttpTransport.java @@ -416,8 +416,10 @@ public Mono sendMessage(McpSchema.JSONRPCMessage sentMessage) { })).onErrorMap(CompletionException.class, t -> t.getCause()).onErrorComplete().subscribe(); })).flatMap(responseEvent -> { - if (transportSession.markInitialized( - responseEvent.responseInfo().headers().firstValue("mcp-session-id").orElseGet(() -> null))) { + if (transportSession.markInitialized(responseEvent.responseInfo() + .headers() + .firstValue(HttpHeaders.MCP_SESSION_ID) + .orElseGet(() -> null))) { // Once we have a session, we try to open an async stream for // the server to send notifications and requests out-of-band. diff --git a/mcp/src/main/java/io/modelcontextprotocol/server/transport/HttpServletStreamableServerTransportProvider.java b/mcp/src/main/java/io/modelcontextprotocol/server/transport/HttpServletStreamableServerTransportProvider.java index 8b95ec60..419238d1 100644 --- a/mcp/src/main/java/io/modelcontextprotocol/server/transport/HttpServletStreamableServerTransportProvider.java +++ b/mcp/src/main/java/io/modelcontextprotocol/server/transport/HttpServletStreamableServerTransportProvider.java @@ -103,7 +103,7 @@ public class HttpServletStreamableServerTransportProvider extends HttpServlet private McpStreamableServerSession.Factory sessionFactory; /** - * Map of active client sessions, keyed by mcp-session-id. + * Map of active client sessions, keyed by Mcp-Session-Id. */ private final ConcurrentHashMap sessions = new ConcurrentHashMap<>(); @@ -256,7 +256,7 @@ protected void doGet(HttpServletRequest request, HttpServletResponse response) String sessionId = request.getHeader(HttpHeaders.MCP_SESSION_ID); if (sessionId == null || sessionId.isBlank()) { - badRequestErrors.add("Session ID required in mcp-session-id header"); + badRequestErrors.add("Session ID required in " + HttpHeaders.MCP_SESSION_ID + " header"); } if (!badRequestErrors.isEmpty()) { @@ -438,7 +438,7 @@ protected void doPost(HttpServletRequest request, HttpServletResponse response) String sessionId = request.getHeader(HttpHeaders.MCP_SESSION_ID); if (sessionId == null || sessionId.isBlank()) { - badRequestErrors.add("Session ID required in mcp-session-id header"); + badRequestErrors.add("Session ID required in " + HttpHeaders.MCP_SESSION_ID + " header"); } if (!badRequestErrors.isEmpty()) { @@ -545,7 +545,7 @@ protected void doDelete(HttpServletRequest request, HttpServletResponse response if (request.getHeader(HttpHeaders.MCP_SESSION_ID) == null) { this.responseError(response, HttpServletResponse.SC_BAD_REQUEST, - new McpError("Session ID required in mcp-session-id header")); + new McpError("Session ID required in " + HttpHeaders.MCP_SESSION_ID + " header")); return; } diff --git a/mcp/src/main/java/io/modelcontextprotocol/spec/HttpHeaders.java b/mcp/src/main/java/io/modelcontextprotocol/spec/HttpHeaders.java index 65b80957..370b4707 100644 --- a/mcp/src/main/java/io/modelcontextprotocol/spec/HttpHeaders.java +++ b/mcp/src/main/java/io/modelcontextprotocol/spec/HttpHeaders.java @@ -14,7 +14,7 @@ public interface HttpHeaders { /** * Identifies individual MCP sessions. */ - String MCP_SESSION_ID = "mcp-session-id"; + String MCP_SESSION_ID = "Mcp-Session-Id"; /** * Identifies events within an SSE Stream.