dd17c422 by Ean Schuessler

Fix MCP session header timing per HTTP protocol specification

Set Mcp-Session-Id header before writing response body to ensure proper
HTTP protocol compliance and MCP 2025-06-18 specification adherence.

Headers must be sent before any response data per HTTP standards.
1 parent 03f6064d
......@@ -724,6 +724,11 @@ logger.info("Handling Enhanced SSE connection from ${request.remoteAddr}")
// Process MCP method using Moqui services with session ID if available
def result = processMcpMethod(rpcRequest.method, rpcRequest.params, ec, sessionId)
// Set Mcp-Session-Id header BEFORE any response data (per MCP 2025-06-18 spec)
if (result?.sessionId) {
response.setHeader("Mcp-Session-Id", result.sessionId)
}
// Build JSON-RPC response
def rpcResponse = [
jsonrpc: "2.0",
......@@ -734,11 +739,6 @@ logger.info("Handling Enhanced SSE connection from ${request.remoteAddr}")
response.setContentType("application/json")
response.setCharacterEncoding("UTF-8")
// Set Mcp-Session-Id header if result contains sessionId (per MCP 2025-06-18 spec)
if (rpcResponse.result?.sessionId) {
response.setHeader("Mcp-Session-Id", rpcResponse.result.sessionId)
}
response.writer.write(groovy.json.JsonOutput.toJson(rpcResponse))
}
......