o
    io                     @  s   d Z ddlmZ ddlmZ ddlmZ ddlmZ ddl	m
Z
 ddlZddlmZmZ ddlmZ dd	lmZmZmZmZmZmZ dd
lmZ ddlmZ ddlmZ eeeeB  ee f Z ed'ddZ!e								d(d)d%d&Z"dS )*z
In-memory transports
    )annotations)AsyncGenerator)asynccontextmanager)	timedelta)AnyN)MemoryObjectReceiveStreamMemoryObjectSendStream)ClientSessionElicitationFnTListRootsFnT
LoggingFnTMessageHandlerFnTSamplingFnT)Server)FastMCP)SessionMessagereturn9AsyncGenerator[tuple[MessageStream, MessageStream], None]c                  C s.  t jttB  d\} }t jttB  d\}}||f}|| f}|4 I dH e |4 I dH H |4 I dH , | 4 I dH  ||fV  W d  I dH  n1 I dH sPw   Y  W d  I dH  n1 I dH sew   Y  W d  I dH  n1 I dH szw   Y  W d  I dH  dS 1 I dH sw   Y  dS )z
    Creates a pair of bidirectional memory streams for client-server communication.

    Returns:
        A tuple of (client_streams, server_streams) where each is a tuple of
        (read_stream, write_stream)
       N)anyioZcreate_memory_object_streamr   	Exception)Zserver_to_client_sendZserver_to_client_receiveZclient_to_server_sendZclient_to_server_receiveclient_streamsserver_streams r   H/home/app/Keep/.python/lib/python3.10/site-packages/mcp/shared/memory.py#create_client_server_memory_streams   s   
r   FserverServer[Any] | FastMCPread_timeout_secondstimedelta | Nonesampling_callbackSamplingFnT | Nonelist_roots_callbackListRootsFnT | Nonelogging_callbackLoggingFnT | Nonemessage_handlerMessageHandlerFnT | Noneclient_infotypes.Implementation | Noneraise_exceptionsboolelicitation_callbackElicitationFnT | None#AsyncGenerator[ClientSession, None]c	                  s8  t tr	jt 4 I dH \}	}
|	\}}|
\t 4 I dH V}| fdd z8t|||||||||d	4 I dH }| I dH  |V  W d  I dH  n1 I dH s]w   Y  W |j	
  n|j	
  w W d  I dH  n1 I dH sw   Y  W d  I dH  dS 1 I dH sw   Y  dS )zBCreates a ClientSession that is connected to a running MCP server.Nc                     s   j   dS )N)r*   )runZcreate_initialization_optionsr   r*   r   Zserver_readZserver_writer   r   <lambda>K   s    z<create_connected_server_and_client_session.<locals>.<lambda>)	read_streamZwrite_streamr   r    r"   r$   r&   r(   r,   )
isinstancer   Z_mcp_serverr   r   Zcreate_task_groupZ
start_soonr	   Z
initializeZcancel_scopecancel)r   r   r    r"   r$   r&   r(   r*   r,   r   r   Zclient_readZclient_writetgZclient_sessionr   r0   r   *create_connected_server_and_client_session1   s<   
	
(*.r6   )r   r   )NNNNNNFN)r   r   r   r   r    r!   r"   r#   r$   r%   r&   r'   r(   r)   r*   r+   r,   r-   r   r.   )#__doc__
__future__r   collections.abcr   
contextlibr   datetimer   typingr   r   Zanyio.streams.memoryr   r   Z	mcp.typestypesZmcp.client.sessionr	   r
   r   r   r   r   Z
mcp.serverr   Zmcp.server.fastmcpr   Zmcp.shared.messager   tupler   ZMessageStreamr   r6   r   r   r   r   <module>   s4     