xjTdZddlmZddlZddlZddlZddlmZmZm Z m Z ddl m Z m Z ddlmZmZmZddlmZmZmZmZddlZddlZddlZddlmZmZmZmZmZm Z m!Z!m"Z"m#Z#m$Z$m%Z%m&Z&m'Z'm(Z(m)Z)m*Z*m+Z+m,Z,m-Z-m.Z.m/Z/m0Z0m1Z1m2Z2dd l3m4Z4m5Z5dd l6m7Z7dd l8m9Z9m:Z:dd l;mZ>ddl?m@Z@ddlAmBZBmCZCmDZDmEZEddlFmGZGmHZHmIZImJZJddlKmLZLmMZMmNZNmOZOmPZPmQZQmRZRmSZSddlTmUZUddlVmWZWmXZXddlVmYZZddl[m\Z\ddl]m^Z^ddl_m`Z`ddlambZbddlcmdZdmeZeddlfmgZgmhZhddlimjZjddlkmlZlddlmmnZnejepZqederzZs edZted Zued!e"Zvee esewged#fZx d2d$Zyd3d%Zzd4d&Z{d5d'Z|d6d(Z}d7d)Z~d8d*Zed+,Gd-d.Zd9d/ZeGd0d1Zy):zFUnified MCP Client that wraps ClientSession with transport management.) annotationsN) AwaitableCallableMappingSequence)AbstractAsyncContextManagerAsyncExitStack)KW_ONLY dataclassfield)AnyLiteralTypeVarcast)INVALID_PARAMSCacheableResultCallToolResultCompleteResult EmptyResult ErrorDataGetPromptResultImplementation InputRequestInputRequiredResult InputResponseInputResponsesListPromptsResultListResourcesResultListResourceTemplatesResultListToolsResult LoggingLevelPaginatedRequestParamsPromptReferenceReadResourceResultRequestParamsMetaResourceTemplateReferenceResultServerCapabilities)HANDSHAKE_PROTOCOL_VERSIONSMODERN_PROTOCOL_VERSIONS) deprecated)!DEFAULT_INPUT_REQUIRED_MAX_ROUNDSrun_input_required_driver)InMemoryTransport)negotiate_auto) Transport) CacheConfig CacheModeClientResponseCacheInMemoryResponseCacheStore) ClaimContextClientExtensionNotificationBinding ResultClaim)ClientRequestContext ClientSessionElicitationFnTIncomingMessage ListRootsFnT LoggingFnTMessageHandlerFnT SamplingFnT)streamable_http_client) ServerEvent Subscription)listen)Server) MCPServer)modern_on_request)create_direct_dispatcher_pair) Dispatcher ProgressFnT)MCPDeprecationWarningMCPError)validate_extension_identifier)JSONRPCDispatcher)event_to_notificationlegacyauto_T_ResultT _CacheableT)boundDispatcher[Any]cdfd }|S)zIConnector for the stream-backed paths (URL, user-supplied ``Transport``).c`K|jd{\}}t||S7wN)enter_async_contextrN) exit_stack_mode_raise_exceptions read_stream write_stream transports e/mnt/ssd/data/Dropbox/adrian/sandbox/mcp-query/venv/lib/python3.12/site-packages/mcp/client/client.pyconnectz#_connect_transport..connect_s2*4*H*H*S$S! \ l;;%Ts .,.)r\r r] ConnectModer^boolreturnrW)rarcs` rb_connect_transportrh\s< Ncdfd }|S)aConnector for an in-process ``Server``: legacy mode drives the stream loop via ``InMemoryTransport``; any other mode drives the modern per-request path through a ``DirectDispatcher`` peer pair (no streams, no JSON-RPC framing, no initialize handshake).cK|dk(r5t |}|j|d{\}}t||S|j j d{}t |\}}|jt j d{} |j|jt |} | j|j| td{|S777Z7 w)NrQ)raise_exceptions)raise_handler_exceptions) r.r[rNlifespanrHanyiocreate_task_groupcallbackcloserGstartrun _no_inbound_client_notifications) r\moderlrar_r`lifespan_state client_disp server_disptg on_requestservers rbrcz _connect_inproc..connectks 8 )&CSTI.8.L.LY.W(W %K$[,? ?)==foof>UVV#@Zj#k [11%2I2I2KL LK--.&v~> hh{ 4TUUU)XV L VsF'C:C26C:!C4"9C:C6AC:+C8,C:4C:6C:8C:)r\r rvrdrlrerfrWrg)r|rcs` rb_connect_inprocr}fs  Nric | td|S)a[Narrow a post-handshake session attribute from ``T | None`` to ``T``. ``Client.__aenter__`` only assigns ``_session`` after the handshake succeeds, so inside ``async with Client(...)`` these attributes are always populated; the ``.session`` gate raises before this is reached otherwise. The guard exists for pyright, not runtime. 3Client must be used within an async context manager) RuntimeError)values rb _connectedr{s }PQQ Lric|jd}|dk(r|S|dz}t|}dD]&}|j||x}dk7st||}(|||}d|vr|S|d||jddz||dzS)zDrop any userinfo from the URL's authority component; byte-exact otherwise. Credentials must not enter cache-key material; any further normalization could merge distinct servers. z//z/?#@N)findlenmin rpartition)urlseprsend delimiterfound authoritys rb_strip_userinfors ((4.C by !GE c(C" XXi/ /EB 6c5/C"E#I ) v;--c215 5CD AAricdfd }|S)zMWrap the session message handler with cache eviction on server notifications.c<Kt|tjr j|d{|d{ytjjd{y7>#t$rt j dY\wxYw7R7-w)NzCResponse cache eviction failed; the notification is still delivered) isinstancetypesServerNotificationevict_for_notification Exceptionlogger exceptionrolowlevel checkpoint)messagecache user_handlers rbhandlerz*_evicting_message_handler..handlers gu77 8 h227;;;  #w' ' '..++- - -< h  !fg h ( .sUBA4A2A4 BB&B,B-B2A44BBBBB)rr<rfNonerg)rrrs`` rb_evicting_message_handlerrs . Nric\tj|gtjdddS)Ncompleterpublic)supported_versions capabilities result_typettl_ms cache_scope)rDiscoverResultr()protocol_versions rb_synthesize_discoverrs0   ,---/  ric Kyw)uServer-side inbound ``OnNotify`` for the modern in-process path — receives nothing. At 2026-07-28 the spec defines no client→server notifications: ``initialized`` and ``roots/list_changed`` are removed, and cancellation is structural (anyio scope cancel through the direct await, not a notify). Server→client notifications (progress, log messages) flow the other way via the per-request ``DispatchContext`` into the client's callbacks, and are not seen here. Nrg)_dctx_method_paramss rbrurussT)frozenc:eZdZUdZded<ded<ded<ded <y ) _FoldedExtensionszN`Client.extensions` instances folded into the shapes `ClientSession` consumes.z dict[str, dict[str, Any]] | Noneadz.dict[str, tuple[ResultClaim[Any], ...]] | Noneclaimsz+tuple[NotificationBinding[Any], ...] | Nonebindingsz'Mapping[type[Result], ResultClaim[Any]]by_modelN)__name__ __module__ __qualname____doc____annotations__rgrirbrrsX(( ::9955rirct|tr td|stdddiSi}i}g}i}i}i}|D]o}t |dd}|!t t |jdt|t |j||vrt d|d|j||<t|j} | D]P} | j} | |vr*|| } | |k(rd |d nd | d |d } t | d| d||| <| || j<R| r| ||<|jD]n}|j|vr>||j} | |k(rd |dnd | d |d} t | d|jd|||j<|j!|prt||xsdt|xsd|S)z^Fold extension contributions at construction, naming both owners on duplicate tags or methods.zextensions= takes a sequence of ClientExtension instances. The mapping form was replaced: use advertise(identifier, settings) for advertise-only entriesN)rrrr identifierz has no `identifier`; a ClientExtension must set the `identifier` class attribute (or assign one in `__init__`) before it can be used)ownerzextension identifier z is passed more than oncez extension z claimsz extensions z and z both claimz resultType z'; a wire tag can have only one resolverz bindsz both bindz notification method z%; a method can have only one observer)rr TypeErrorrgetattr ValueErrortyperrMsettingstuplerrmodel notificationsmethodappend) extensionsrrrr claim_ownersbinding_owners extensionrextension_claimsclaimtagrbothbindings rb_fold_extensionsrsU*g& W    DrRR$&B68F/1H57H#%L%'N%% Y d;   ?++,-cc  &jY8P8PQ  4ZNB[\] ]"++-: !1!1!34% *E##Cl"$S) *!g6'yj^;O !D6cWw~~>PPu!vww-7N7>> * OOG $ %7%%L 6>TE(OD[W[fn ooriceZdZUdZded< ded<dZded< d Zd ed < d Zd ed < d Zded< d Z ded< d Z ded< d Z ded< d Z ded< d Z ded< dZded< d Zded< d Zded < eZd!ed"< d Zd#ed$< ee%Zd&ed'< edd(Zded)<edd (Zd*ed+<edd (Zd,ed-<eddd.Zd/ed0<edd dd1Zd2ed3<eddd.Zd4ed5<d`d6Zdad7Zdbd8Zdcd9Z e!ddd:Z"e!ded;Z#e!dfd<Z$e!dgd=Z%e!dhd>Z&e'd?e(@d dAdidBZ)e'dCe(@ dj dkdDZ*e'dEe(@d dAdldFZ+d dG dmdHZ,d d dIdJ dndKZ-d d dIdJ dodLZ.d d d dIdM dpdNZ/ddddOdP dqdQZ0drdRZ1e'dSe(@d dAdsdTZ2e'dUe(@d dAdsdVZ3 dtd d d dW dudXZ4d d dIdJ dvdYZ5 dwd d d dW dxdZZ6 dyd[Z7 dw dzd\Z8d d dIdJ d{d]Z9e'd^e(@d`d_Z:y )|ClientaA high-level MCP client for connecting to MCP servers. Supports in-memory transport for testing (pass a Server or MCPServer instance), Streamable HTTP transport (pass a URL string), or a custom Transport instance. Example: ```python from mcp.client import Client from mcp.server.mcpserver import MCPServer server = MCPServer("test") @server.tool() def add(a: int, b: int) -> int: return a + b async def main(): async with Client(server) as client: result = await client.call_tool("add", {"a": 1, "b": 2}) asyncio.run(main()) ``` z)Server[Any] | MCPServer | Transport | strr|r _FrerlN float | Noneread_timeout_secondszSamplingFnT | Nonesampling_callbackztypes.SamplingCapability | Nonesampling_capabilitieszListRootsFnT | Nonelist_roots_callbackzLoggingFnT | Nonelogging_callbackzLoggingLevel | None log_levelMessageHandlerFnT | Nonemessage_handlerImplementation | None client_inforRrdrvztypes.DiscoverResult | Noneprior_discoverzElicitationFnT | Noneelicitation_callbackintinput_required_max_rounds Sequence[ClientExtension] | Noner)default_factoryzCacheConfig | Noner)initdefault_enteredzClientSession | None_sessionzAsyncExitStack | None _exit_stack)rreprcompare _Connector_connect)rrrrzClientResponseCache | None_response_cacher_folded_extensionsc Zjdvr`jtvrNjtvrdjdnd}tdt tdj|t j _j}t|tr |j}t|trt|_n:t|trt!t#|_nt!|_j$j$}|j&}|/tjtrt)j}|5|j* tdt-j.j0}t3|j* |j*n t5|j6t9j:|j=j?|j@|jB|jDfd _#yy) NrPz (z/ is a handshake-era version; use mode='legacy')z)mode must be 'legacy', 'auto', or one of z; got za custom cache store requires CacheConfig.target_id when the server is not a URL: in-process servers and Transport instances get a random per-client identity, so their entries in a shared store could never be served to another clientcLjjjSdSrZ)rrselfsrbz&Client.__post_init__..sT]]Mf4==+I+Ilpri)store partitionarm_iddefault_ttl_msclock share_publicnegotiated_version)$rvr*r)rlistrrrr|rrF_lowlevel_serverrEr}rstrrhrAr target_idrruuiduuid4hexr3r4rhashlibsha256encode hexdigestrrrr)rhintsrvconfigrs` rb __post_init__zClient.__post_init__ys 99. .499D\3\99 ;;TYYM!PQ  ;DAYfllD^D` **~~i&6&6&89CCE%44ll#00#p $D  "ric$K|j||j|jd{}|j}|j t |j|j}t ||j|j|j|j|j|j||j|j|jj |jj"|jj$ S7w)zDEnter the resolved connector and return an un-entered ClientSession.N) dispatcherrrrrrrrrrr result_claimsnotification_bindings)rrvrlrrrr:rrrrrrrrrrrr)rr\rrs rb_build_sessionzClient._build_sessions==TYY@U@UVV ..    +78L8LdNbNbcO!!%!:!:"44"&"<"< $ 8 8!22nn+((!%!:!:..111188"&"9"9"B"B  Ws+DDC!DcjK|jr tdd|_t4d{}|j|d{}|j |d{}|j dk(r|j d{nU|j dk(rt|d{n2|j|jxst|j ||_ |j|_ |cdddd{S77777n7#1d{7swYyxYww)z Enter the async context manager.z)Client is already entered; cannot reenterTNrQrR)rrr rr[rv initializer/adoptrrrpop_allr)rr\sessions rb __aenter__zClient.__aenter__s ==JK K !#  z // ;;G&::7CCGyyH$((***f$$W--- d11T5I$))5TU $DM)113D #   ;C+-    s-D3DD3DD D!D"&DD "D+D,AD D3 D D3DDDDD3D0$D' %D0,D3cK|jr%|jj|||d{d|_y7 w)zExit the async context manager.N)r __aexit__r)rexc_typeexc_valexc_tbs rbrzClient.__aexit__s:   "",,XwG G G  Hs ->< >cH|j td|jS)zGet the underlying ClientSession. This provides access to the full ClientSession API for advanced use cases. Raises: RuntimeError: If accessed before entering the context manager. r)rrrs rbrzClient.sessions$ == TU U}}ric@t|jjS)zUNegotiated protocol version (set by initialize/discover/adopt during ``__aenter__``).)rrrrs rbrzClient.protocol_versions$,,7788ric.|jjS)a%Server name/version, or `None` when the server did not identify itself. Legacy connections always carry it (`InitializeResult.serverInfo` is required); on 2026-era connections the `_meta` `serverInfo` stamp is optional, so an anonymous server reads as `None`. )r server_infors rbr#zClient.server_infos||'''ric@t|jjS)zMServer capabilities (set by initialize/discover/adopt during ``__aenter__``).)rrserver_capabilitiesrs rbr%zClient.server_capabilitiess$,,::;;ric.|jjS)z*Server-provided instructions text, if any.)r instructionsrs rbr'zClient.instructionss||(((rizLping is removed as of 2026-07-28; the method only works under mode='legacy'.)categorymetacVK|jj|d{S7w)z"Send a ping request to the server.r)N)r send_ping)rr*s rbr,zClient.send_ping s& \\+++6666s )')z\Client-to-server progress is deprecated as of 2026-07-28; progress is server-to-client only.c^K|jj||||d{y7w)z+Send a progress notification to the server.)progress_tokenprogresstotalrN)rsend_progress_notification)rr.r/r0rs rbr1z!Client.send_progress_notifications5ll55) 6   s #-+-zAThe logging capability is deprecated as of 2026-07-28 (SEP-2577).cXK|jj||d{S7w)z$Set the logging level on the server.)levelr*N)rset_logging_level)rr3r*s rbr4zClient.set_logging_level$s(\\33%d3KKKK !*(*)absorbc(K|j}||dk(r|d{S|j}||dk(rd}| |d{S|dk(r8|j |dd{x} tt| } || S|| S|j|d} |d{} |j|d| | |d{| S77#t$r3} | jtk(r|j |d{7d} ~ wwxYw77h7Mw)zServe one of the four list verbs through the response cache. `absorb` (tools/list only) re-applies session-side derived state to a served cache hit. Nbypassuserefreshr) rrrLcoder evict_methodreadrrUcapturewrite)rrcursorr* cache_modesendr6rrehitservedgenresults rb _cached_fetchzClient._cached_fetch)s $$ =J(2<  LL   e 3"J   !V|#  FB1G+G$GC#T+s+F#^6 ? ?mmFB'vkk&"fc:>>> + $ 66^+,,V444 ,H >sDC D C C C D&D '>D%D&DDD C D 'D=D>DD  DDDr9)r@r*rAc ZKjd|fdd{S7w)z)List available resources from the server.zresources/listcRjjtSN)r@_meta)params)rlist_resourcesr"r@r*rsrbrz'Client.list_resources..]s#44.ms#==E[ciquEv=wrirPNrQrRs``` rbrVzClient.list_resource_templates`s:'' &!w (    rS)input_responses request_stater*rAcpKdfd }|duxs|du}|rdn j}||dk(r)j|||d{|d{Sj} |dk(rd}|dk(r,|jdd{x} t t | S|j d} |ddd{} t| ts|jd| | |d{n|dk(r|jdd{j| |d{S7777q7F7(7w)aRead a resource from the server. If the server returns an `InputRequiredResult`, the embedded input requests are dispatched to this client's sampling / elicitation / roots callbacks and the read is retried automatically (up to `input_required_max_rounds`). Args: uri: The URI of the resource to read. input_responses: Responses to seed the first call with (e.g. when resuming from a persisted `InputRequiredResult`). request_state: Opaque state to seed the first call with. meta: Additional metadata for the request. cache_mode: Cache behavior for this call (see `CacheMode`); seeded calls (`input_responses` or `request_state` set) ignore it. Returns: The resource content. Raises: InputRequiredRoundsExceededError: `input_required_max_rounds` exhausted. MCPError: A callback returned `ErrorData` for an embedded input request. pydantic.ValidationError: The server returned a result that does not conform to the negotiated protocol version. c`Kjj||dd{S7wNT)rWrXr*allow_input_required)r read_resource)rsr*ruris rbretryz#Client.read_resource..retrys933QadY]4 s $.,.Nr8r9r:zresources/read)r^InputResponses | Noner_ str | Nonerfz(ReadResourceResult | InputRequiredResult) r_drive_input_requiredrr=rr$r>rrr? evict_key) rr`rWrXr*rAraseededrrrDrFfirsts `` ` rbr]zClient.read_resourcepsJF  !,I T0ID$8$8 =J(233%Q^:_4_afgg g LL   e 3"J  .retrysH//%9"3 !%)"0    s (202N)r tool_namer)r^rbr_rcrfz-CallToolResult | InputRequiredResult | Result) rdrrrrrresolver5ris_errorvalidate_tool_result) rr}r|rryrWrXr*rarGrfinals ````` ` rbr{zClient.call_tools^  11o}8]2]_dee fn -M''00f>mm  Th i  ~~,,33D%@ @ @ 3^e  AsD#CC CCA#CC/C C CCCCc ZKjd|fdd{S7w)z'List available prompts from the server.z prompts/listcRjjtSrK)r list_promptsr"rOsrbrz%Client.list_prompts..Gs#22:PX^fj:k2lrirPNrQrRs``` rbrzClient.list_prompts:s:'' !l (    rSc~Kdfd }j|||d{|d{S77w)aGet a prompt from the server. If the server returns an `InputRequiredResult`, the embedded input requests are dispatched to this client's sampling / elicitation / roots callbacks and the get is retried automatically (up to `input_required_max_rounds`). Args: name: The name of the prompt. arguments: Arguments to pass to the prompt. input_responses: Responses to seed the first call with (e.g. when resuming from a persisted `InputRequiredResult`). request_state: Opaque state to seed the first call with. meta: Additional metadata for the request. Returns: The prompt content. Raises: InputRequiredRoundsExceededError: `input_required_max_rounds` exhausted. MCPError: A callback returned `ErrorData` for an embedded input request. pydantic.ValidationError: The server returned a result that does not conform to the negotiated protocol version. cbKjj||dd{S7wr[)r get_prompt)r^r_r|r*r}rs rbraz Client.get_prompt..retryls;00i!$ei1 s %/-/N)r^rbr_rcrfz%GetPromptResult | InputRequiredResult)rd)rr}r|rWrXr*ras``` ` rbrzClient.get_promptJs<D   //eO]6[0[]bccc0[cs!=9 =;==cKt|ts|S|jdfd }t||||jd{S7w)u*Hand an `InputRequiredResult` to the SEP-2322 driver, or pass a terminal result through. `dispatch` routes each embedded request through the same callback table that serves legacy server→client RPCs, so the two paths stay behaviourally identical by construction. cKt||jr|jjnd}j||d{S7w)N)r request_idr*)r9rMr*dispatch_input_request)keyreqctxrs rbdispatchz.Client._drive_input_required..dispatchsB&w3`c`j`jSZZ__ptuC 77SAA AAsAA A A)rra max_roundsN)rrrrrfzInputResponse | ErrorData)rrrr-r)rrgrarrs @rbrdzClient._drive_input_requiredssP%!45L,, B/ HEd>\>\    sAA A A cZK|jj|||d{S7w)a2Get completions for a prompt or resource template argument. Args: ref: Reference to the prompt or resource template argument: The argument to complete context_arguments: Additional context arguments Returns: Completion suggestions. )refargumentcontext_argumentsN)rr)rrrrs rbrzClient.completes+ \\**sXYj*kkkks "+)+c bKjd|fdfdd{S7w)z%List available tools from the server.z tools/listcRjjtSrK)r list_toolsr"rOsrbrz#Client.list_tools..s#008NV\dh8i0jricVjj||jduS)N)r)r_absorb_tool_listing next_cursor)rDrs rbrz#Client.list_tools..s*t||@@coo5 A ri)r@r*rArBr6NrQrRs``` rbrzClient.list_toolss?'' !j(    s #/-/z?The roots capability is deprecated as of 2026-07-28 (SEP-2577).cTK|jjd{y7w)z4Send a notification that the roots list has changed.N)rsend_roots_list_changedrs rbrzClient.send_roots_list_changedsll22444s (&()rfr)r\r rfr:)rfr)rztype[BaseException] | NonerzBaseException | Nonerr rfr)rfr:)rfr)rfr)rfr()rfrc)r*RequestParamsMeta | Nonerfr)NN) r.z str | intr/floatr0rrrcrfr)r3r!r*rrfr)rrr@rcr*rrAr2rBz$Callable[[], Awaitable[_CacheableT]]r6z+Callable[[_CacheableT], _CacheableT] | NonerfrU)r@rcr*rrAr2rfr)r@rcr*rrAr2rfr) r`rrWrbrXrcr*rrAr2rfr$) rhrerirerjrerkz Sequence[str]rfz)AbstractAsyncContextManager[Subscription])rqrBrfr)r`rr*rrfr)NNN)r}rr|zdict[str, Any] | NonerrryzProgressFnT | NonerWrbrXrcr*rrfr)r@rcr*rrAr2rfrrZ) r}rr|dict[str, str] | NonerWrbrXrcr*rrfr)rgz_ResultT | InputRequiredResultrazXCallable[[InputResponses | None, str | None], Awaitable[_ResultT | InputRequiredResult]]rfrT)rz+ResourceTemplateReference | PromptReferencerzdict[str, str]rrrfr)r@rcr*rrAr2rfr );rrrrrrlrrrrrrrrrvrrr,rrr r1rrrrrrrrrrrpropertyrrr#r%r'r+rKr,r1r4rHrNrVr]rDrorsrvr{rrrdrrrrgrirbrrs0 65J#d"6)-,-&,0)02=A:An/3,34*.'.6%)I")K15O-4-)-K&-7D+,37N/6#37/65%FsF+48J07G !&k BE Bu5Hd5%*t%DH"D).E4)HK&H e%GHjG27UDW\fk2lO/l,1u5RW,X)X.` ,2   "99((<<))V&CG7 7f&#"  !            S^st_cLuL?C%% % ' %  %3%<% %T")- %   '      &")- %   '    %  (26$()- %>> >>/ >> " >> ' >>>> >>F$)%*',02  ! #  !%  !.   3 B ]W&VZE EY&X\G G,0-104 I26$()-II)I+ I . I/I"I'I I\")- %   '      &,0'd 26$()-'d'd)'d / 'd " 'd''d 'dR - h    648 l 8l!l1 l  l*")- %   '      ,Q\qr5s5rir)rar0rfr)r|z Server[Any]rfr)rz _T | NonerfrS)rrrfr)rr3rrrfr?)rrrfztypes.DiscoverResult)rr rrrzMapping[str, Any] | Nonerfr)rrrfr)r __future__rrloggingrcollections.abcrrrr contextlibrr dataclassesr r r typingr rrrroanyio.lowlevel mcp_typesrrrrrrrrrrrrrrrrr r!r"r#r$r%r&r'r(mcp_types.versionr)r*typing_extensionsr+mcp.client._input_requiredr,r-mcp.client._memoryr.mcp.client._prober/mcp.client._transportr0mcp.client.cachingr1r2r3r4mcp.client.extensionr5r6r7r8mcp.client.sessionr9r:r;r<r=r>r?r@mcp.client.streamable_httprAmcp.client.subscriptionsrBrCrDrn mcp.serverrEmcp.server.mcpserverrFmcp.server.runnerrGmcp.shared.direct_dispatcherrHmcp.shared.dispatcherrIrJmcp.shared.exceptionsrKrLmcp.shared.extensionrMmcp.shared.jsonrpc_dispatcherrNmcp.shared.subscriptionsrO getLoggerrrrrdrSrTrUrerrhr}rrrrrurrrrgrirbrszL" BBB11.. 4T(c0,+ff``   >>6*/F9A>;:   8 $&'#- _ T] : m?; ~{D99EV;WW X 5 * B($ $6665pp q 5q 5 q 5ri