Class StreamableHttpMcpTransport
java.lang.Object
dev.langchain4j.mcp.client.transport.http.StreamableHttpMcpTransport
- All Implemented Interfaces:
McpTransport, Closeable, AutoCloseable
-
Nested Class Summary
Nested Classes -
Constructor Summary
Constructors -
Method Summary
Modifier and TypeMethodDescriptionbuilder()voidPerforms transport-specific health checks, if applicable.voidclose()voidSends a message that does not expect a response from the server - either a client-initiated notification or a response to a server-initiated request.voidexecuteOperationWithoutResponse(McpClientMessage operation) Sends a message that does not expect a response from the server - either a client-initiated notification or a response to a server-initiated request.CompletableFuture<com.fasterxml.jackson.databind.JsonNode> Executes an operation that expects a response from the server.CompletableFuture<com.fasterxml.jackson.databind.JsonNode> executeOperationWithResponse(McpClientMessage operation) Executes an operation that expects a response from the server.Returns the MCP session ID assigned by the server, ornullif no session has been established yet (or the server does not use sessions).CompletableFuture<com.fasterxml.jackson.databind.JsonNode> initialize(McpInitializeRequest operation) Sends the "initialize" message to the MCP server to negotiate capabilities, supported protocol version etc.voidbooleanReturns whether this transport requires an explicitnotifications/cancelledmessage to cancel an in-progress request.voidsetMcpSessionId(String mcpSessionId) Sets the MCP session ID to be sent on subsequent requests via theMcp-Session-Idheader.voidsetModernProtocol(boolean modernProtocol) Enables or disables modern protocol mode.voidsetProtocolVersion(String protocolVersion) Sets the protocol version to be sent in theMCP-Protocol-Versionheader when modern protocol mode is enabled.voidstart(McpOperationHandler operationHandler) Creates a connection to the MCP server (runs the server as a subprocess if needed).
-
Constructor Details
-
StreamableHttpMcpTransport
-
-
Method Details
-
start
Description copied from interface:McpTransportCreates a connection to the MCP server (runs the server as a subprocess if needed). This does NOT yet send the "initialize" message to negotiate capabilities.- Specified by:
startin interfaceMcpTransport
-
initialize
public CompletableFuture<com.fasterxml.jackson.databind.JsonNode> initialize(McpInitializeRequest operation) Description copied from interface:McpTransportSends the "initialize" message to the MCP server to negotiate capabilities, supported protocol version etc. When this method returns successfully, the transport is fully initialized and ready to be used. This has to be called AFTER the "start" method. Only used with the legacy MCP protocol (versions up to 2025-11-25). Modern protocol usesserver/discoverinstead.- Specified by:
initializein interfaceMcpTransport
-
executeOperationWithResponse
public CompletableFuture<com.fasterxml.jackson.databind.JsonNode> executeOperationWithResponse(McpClientMessage operation) Description copied from interface:McpTransportExecutes an operation that expects a response from the server.- Specified by:
executeOperationWithResponsein interfaceMcpTransport
-
executeOperationWithResponse
public CompletableFuture<com.fasterxml.jackson.databind.JsonNode> executeOperationWithResponse(McpCallContext context) Description copied from interface:McpTransportExecutes an operation that expects a response from the server.- Specified by:
executeOperationWithResponsein interfaceMcpTransport
-
executeOperationWithoutResponse
Description copied from interface:McpTransportSends a message that does not expect a response from the server - either a client-initiated notification or a response to a server-initiated request.- Specified by:
executeOperationWithoutResponsein interfaceMcpTransport
-
executeOperationWithoutResponse
Description copied from interface:McpTransportSends a message that does not expect a response from the server - either a client-initiated notification or a response to a server-initiated request.- Specified by:
executeOperationWithoutResponsein interfaceMcpTransport
-
checkHealth
public void checkHealth()Description copied from interface:McpTransportPerforms transport-specific health checks, if applicable. This is called by `McpClient.checkHealth()` as the first check before performing a check by sending a 'ping' over the MCP protocol. The purpose is that the transport may have some specific and faster ways to detect that it is broken, like for example, the STDIO transport can fail the check if it detects that the server subprocess isn't alive anymore.- Specified by:
checkHealthin interfaceMcpTransport
-
onFailure
- Specified by:
onFailurein interfaceMcpTransport
-
getMcpSessionId
Returns the MCP session ID assigned by the server, ornullif no session has been established yet (or the server does not use sessions). The session ID is captured from theMcp-Session-Idresponse header during initialization and reused on subsequent requests via the same header. This only applies to the legacy protocol (before 2026-07-28). -
setMcpSessionId
Sets the MCP session ID to be sent on subsequent requests via theMcp-Session-Idheader. This is intended for scenarios where a session obtained elsewhere (for example, in another process or pod) needs to be resumed by this transport, allowing stateless deployments without sticky sessions. This only applies to the legacy protocol (before 2026-07-28). -
setModernProtocol
public void setModernProtocol(boolean modernProtocol) Enables or disables modern protocol mode. When enabled, the transport sends modern protocol headers (MCP-Protocol-Version,Mcp-Method,Mcp-Name) and skips legacy session management (Mcp-Session-Idheader and 404-triggered reinitialization).- Specified by:
setModernProtocolin interfaceMcpTransport
-
setProtocolVersion
Sets the protocol version to be sent in theMCP-Protocol-Versionheader when modern protocol mode is enabled.- Specified by:
setProtocolVersionin interfaceMcpTransport
-
requiresCancellationNotification
public boolean requiresCancellationNotification()Description copied from interface:McpTransportReturns whether this transport requires an explicitnotifications/cancelledmessage to cancel an in-progress request. Transports that use per-request SSE streams (like Streamable HTTP) cancel by closing the stream and should returnfalse. Transports that share a single channel (like stdio) must returntrueso the server knows which request to cancel.Note: when using the legacy protocol (2025-11-25), the client always sends
notifications/cancelledregardless of this value, because the legacy spec states that disconnection should not be interpreted as cancellation.Defaults to
true, which is the safe answer for a transport that shares a single channel; per-request-stream transports override it.- Specified by:
requiresCancellationNotificationin interfaceMcpTransport
-
close
- Specified by:
closein interfaceAutoCloseable- Specified by:
closein interfaceCloseable- Throws:
IOException
-
builder
-