@@ -233,6 +233,67 @@ def get_session_state(self) -> SessionState:
233233 initialized_sent = self ._initialized_sent ,
234234 )
235235
236+ @classmethod
237+ def from_session_state (
238+ cls ,
239+ state : SessionState ,
240+ read_stream : MemoryObjectReceiveStream [SessionMessage | Exception ],
241+ write_stream : MemoryObjectSendStream [SessionMessage ],
242+ client_info : types .Implementation | None = None ,
243+ read_timeout_seconds : float | None = None ,
244+ sampling_callback : SamplingFnT | None = None ,
245+ elicitation_callback : ElicitationFnT | None = None ,
246+ list_roots_callback : ListRootsFnT | None = None ,
247+ logging_callback : LoggingFnT | None = None ,
248+ message_handler : MessageHandlerFnT | None = None ,
249+ * ,
250+ sampling_capabilities : types .SamplingCapability | None = None ,
251+ experimental_task_handlers : ExperimentalTaskHandlers | None = None ,
252+ ) -> ClientSession :
253+ """Create a new ClientSession from a previously saved SessionState.
254+
255+ This restores session context from external storage, allowing
256+ distributed instances to continue a session.
257+
258+ Args:
259+ state: The SessionState to restore from
260+ read_stream: The read stream for receiving messages
261+ write_stream: The write stream for sending messages
262+ client_info: Optional client info (defaults to DEFAULT_CLIENT_INFO)
263+ read_timeout_seconds: Optional read timeout for this session
264+
265+ Returns:
266+ A new ClientSession instance with the restored state
267+ """
268+ # Create session with default initialization
269+ session = cls (
270+ read_stream = read_stream ,
271+ write_stream = write_stream ,
272+ client_info = client_info ,
273+ read_timeout_seconds = read_timeout_seconds ,
274+ sampling_callback = sampling_callback ,
275+ elicitation_callback = elicitation_callback ,
276+ list_roots_callback = list_roots_callback ,
277+ logging_callback = logging_callback ,
278+ message_handler = message_handler ,
279+ sampling_capabilities = sampling_capabilities ,
280+ experimental_task_handlers = experimental_task_handlers ,
281+ )
282+
283+ # Restore the state
284+ session ._session_id = state .session_id
285+ session ._request_id = state .next_request_id
286+
287+ if state .server_capabilities :
288+ session ._server_capabilities = types .ServerCapabilities .model_validate (state .server_capabilities )
289+
290+ if state .server_info :
291+ session ._server_info = types .Implementation .model_validate (state .server_info )
292+
293+ session ._initialized_sent = state .initialized_sent
294+
295+ return session
296+
236297 @property
237298 def experimental (self ) -> ExperimentalClientFeatures :
238299 """Experimental APIs for tasks and other features.
0 commit comments