§
    xÅjM�  ã                   ó�  — d Z ddl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mZ dd	lmZmZ dd
lmZ ddl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$  ed¦  «        Z%e%re%dk     rddl&m'Z' n# e($ r  ed¦  «        ‚w xY w	 ddl)m*Z* n# e($ r dZ*Y nw xY we%re%dk    r	 ddl+m,Z, n# e($ r dZ,Y nw xY wdZ,e	r8ddlm-Z-m.Z.m/Z/m0Z0m1Z1 ddl+m2Z2m3Z3 ddl4m5Z5m6Z6m7Z7m8Z8 ddl9m:Z:m;Z;m<Z< ddlmZ ddl=m>Z>  G d„ de¦  «        Z?dUd „Z@e	 	 	 	 dVd#„¦   «         ZA	 	 	 	 dWd%„ZBd&d'd(eCd)eCd*eCd+d,d-d.d/d.d0eCddfd1„ZDdXd3„ZEdYd5„ZF	 	 	 dZd7d8d9d:d;d<d=d>d?eGdd@fdA„ZH	 	 	 	 	 	 d[dF„ZI	 	 	 dZd7dGd9d:d;d<d=d>d?eGddHfdI„ZJ	 	 	 	 	 	 d[dJ„ZK	 	 	 dZd7dKd9d:d;d<d=d>d?eGddLfdM„ZL	 	 	 	 	 	 d[dN„ZMd\dO„ZNd\dP„ZO	 	 	 	 	 	 d[dQ„ZPd\dR„ZQd\dS„ZRd\dT„ZSdS )]a  
Sentry integration for MCP (Model Context Protocol) servers.

This integration instruments MCP servers to create spans for tool, prompt,
and resource handler execution, and captures errors that occur during execution.

Supports the low-level `mcp.server.lowlevel.Server` API.
é    N)ÚIterator)Úcontextmanager©Úwraps)ÚTYPE_CHECKING)Ú_set_span_data_attributeÚget_start_span_function)ÚOPÚSPANDATA)ÚDidNotEnableÚIntegration)Úshould_send_default_pii)ÚStreamedSpan)Úhas_span_streaming_enabled)Úcapture_internal_exceptionsÚevent_from_exceptionÚhas_data_collection_enabledÚnullcontextÚpackage_versionÚsafe_serialize)ÚServer)ÚStreamableHTTPServerTransportÚmcp©é   r   r   )Úrequest_ctxzMCP SDK not installed)ÚFastMCP)ÚServerRequestContext)ÚAnyÚ	AwaitableÚCallableÚOptionalÚUnion)ÚCallNextÚHandlerResult)ÚCallToolResultÚGetPromptResultÚInputRequiredResultÚReadResourceResult)ÚReceiveÚScopeÚSend)ÚSpanc                   ó@   — e Zd ZdZdZd	deddfd„Zed
d„¦   «         ZdS )ÚMCPIntegrationr   zauto.ai.mcpTÚinclude_promptsÚreturnNc                 ó   — || _         dS )zö
        Initialize the MCP integration.

        Args:
            include_prompts: Whether to include prompts (tool results and prompt content)
                             in span data. Requires send_default_pii=True. Default is True.
        N)r0   )Úselfr0   s     úLC:\Projects\Historical\venv\Lib\site-packages\sentry_sdk/integrations/mcp.pyÚ__init__zMCPIntegration.__init__S   s   € ð  /ˆÔÐÐó    c                  ól   — t          ¦   «          t          ¦   «          t          �t          ¦   «          dS dS )zM
        Patches MCP server classes to instrument handler execution.
        N)Ú_patch_lowlevel_serverÚ_patch_handle_requestr   Ú_patch_fastmcp© r6   r4   Ú
setup_oncezMCPIntegration.setup_once]   s<   € õ
 	Ñ Ô Ð ÝÑÔÐåÐÝÑÔÐÐÐð Ðr6   )T©r1   N)	Ú__name__Ú
__module__Ú__qualname__Ú
identifierÚoriginÚboolr5   Ústaticmethodr<   r;   r6   r4   r/   r/   O   se   € € € € € Ø€JØ€Fð/ð /¨ð /¸ð /ð /ð /ð /ð ðð ð ñ „\ðð ð r6   r/   Úexcr   r1   c                 óŽ   — t          | t          j        ¦   «         j        dddœ¬¦  «        \  }}t          j        ||¬¦  «         d S )Nr   F)ÚtypeÚhandled)Úclient_optionsÚ	mechanism)Úhint)r   Ú
sentry_sdkÚ
get_clientÚoptionsÚcapture_event)rE   ÚeventrK   s      r4   Ú_capture_exceptionrQ   i   sU   € Ý&ØÝ!Ô,Ñ.Ô.Ô6Ø ¨UÐ3Ð3ðñ ô �K€Eˆ4õ
 Ô˜U¨Ð.Ñ.Ô.Ð.Ð.Ð.r6   ÚctxúIterator[None]c              #   ó&  K  — | �%t          | d¦  «        r| j        �d| j        j        vrdV — dS | j        j        d                              d¦  «        }| j        j        d                              d¦  «        }|€t	          ¦   «         nt
          j                             |¦  «        }|€t	          ¦   «         nt
          j                             |¦  «        }|5  |5  dV — ddd¦  «         n# 1 swxY w Y   ddd¦  «         dS # 1 swxY w Y   dS )zÓ
    Use isolation and current scopes that were stored before the in-memory MCP request queue.
    This ensures that MCP spans are nested under the HTTP server span when using the Streamable HTTP transport.
    NÚrequestÚstateúsentry_sdk.isolation_scopeúsentry_sdk.current_scope)ÚhasattrrU   ÚscopeÚgetr   rL   Úuse_isolation_scopeÚ	use_scope)rR   Úisolation_scopeÚcurrent_scopeÚisolation_scope_contextÚcurrent_scope_contexts        r4   Ú_active_http_scopesrb   r   s©  è è € ð 	ˆÝ�s˜IÑ&Ô&ð 	àŒ;ÐØ˜#œ+Ô+Ð+Ð+àˆˆˆØˆà”kÔ'¨Ô0×4Ò4Ð5QÑRÔR€OØ”KÔ% gÔ.×2Ò2Ð3MÑNÔN€Mð Ð"õ 	‰ŒˆåÔ×1Ò1°/ÑBÔBð ð Ð õ 	‰ŒˆåÔ×'Ò'¨Ñ6Ô6ð ð 
!ð ð Ð"7ð ð Øˆˆˆðð ð ñ ô ð ð ð ð ð ð øøøð ð ð ð ð ð ð ñ ô ð ð ð ð ð ð ð øøøð ð ð ð ð ð s6   ÃDÃC.Ã"DÃ.C2	Ã2DÃ5C2	Ã6DÄD
ÄD
ú(tuple[Optional[str], Optional[str], str]c                 óL  — d}d}d}| �˜| j         }t          | d¦  «        r�| j        �z| j        }t          |d¦  «        r7|j                             d¦  «        rd}|j                             d¦  «        }n,t          |d¦  «        rd}|j                             d	¦  «        }|||fS )
a8  
    Extract request ID, session ID, and MCP transport type from the request context.

    Returns:
        Tuple of (request_id, session_id, mcp_transport).
        - request_id: May be None if not available
        - session_id: May be None if not available
        - mcp_transport: "http", "sse", "stdio"
    NÚstdiorU   Úquery_paramsÚ
session_idÚsseÚheadersÚhttpzmcp-session-id)Ú
request_idrY   rU   rf   r[   ri   )rR   rk   rg   Úmcp_transportrU   s        r4   Ú_get_request_context_datarm   •   sË   € ð #'€JØ"&€JØ €Mà
€Ø”^ˆ
Ý�3˜	Ñ"Ô"ð 	C s¤{Ð'>Ø”kˆGå�w Ñ/Ô/ð 	C°GÔ4H×4LÒ4LØñ5ô 5ð 	Cð !&�Ø$Ô1×5Ò5°lÑCÔC�
�
Ý˜ )Ñ,Ô,ð Cà &�Ø$œ_×0Ò0Ð1AÑBÔB�
à�z =Ð0Ð0r6   ÚspanzUnion[StreamedSpan, Span]Úhandler_nameÚspan_data_keyÚmcp_method_nameÚ	argumentszdict[str, Any]rk   zOptional[str]rg   rl   c                 óÄ  — t          | ||¦  «         t          | t          j        |¦  «         t          | t          j        |dk    rdnd¦  «         t          | t          j        |¦  «         |rt          | t          j        |¦  «         |rt          | t          j        |¦  «         |                     ¦   «         D ]&\  }}	t          | d|› �t          |	¦  «        ¦  «         Œ'dS )z%Set input span data for MCP handlers.re   ÚpipeÚtcpzmcp.request.argument.N)	r   r   ÚMCP_METHOD_NAMEÚNETWORK_TRANSPORTÚMCP_TRANSPORTÚMCP_REQUEST_IDÚMCP_SESSION_IDÚitemsr   )
rn   ro   rp   rq   rr   rk   rg   rl   ÚkÚvs
             r4   Ú_set_span_input_datar~   ¸   s  € õ ˜T =°,Ñ?Ô?Ð?Ý˜T¥8Ô#;¸_ÑMÔMÐMõ ØÝÔ"Ø 7Ò*Ð*ˆˆ°ñô ð õ
 ˜T¥8Ô#9¸=ÑIÔIÐIð ð LÝ  ¥xÔ'>À
ÑKÔKÐKð ð LÝ  ¥xÔ'>À
ÑKÔKÐKð —’Ñ!Ô!ð Wð W‰ˆˆ1Ý  Ð'B¸qÐ'BÐ'BÅNÐSTÑDUÔDUÑVÔVÐVÐVðWð Wr6   Úresultc                 óØ  — | €dS t          | d¦  «        rMt          t          | dd¦  «        t          ¦  «        r)t          | dd¦  «        }|�|S t	          | j        ¦  «        S t          | t          ¦  «        rt          | ¦  «        dk    r| d         S t          | t          ¦  «        r| S t          | d¦  «        r1t          | t          t          t          f¦  «        st	          | ¦  «        S | S )a€  
    Extract meaningful content from MCP tool result.

    Tool handlers can return:
    - CallToolResult (mcp v2+): Has .content list and optional .structured_content
    - tuple (UnstructuredContent, StructuredContent): Return the structured content (dict)
    - dict (StructuredContent): Return as-is
    - list/Iterable (UnstructuredContent): Extract text from content blocks
    NÚcontentÚstructured_contentr   é   Ú__iter__)rY   Ú
isinstanceÚgetattrÚlistÚ!_extract_text_from_content_blocksr�   ÚtupleÚlenÚdictÚstrÚbytes)r   Ú
structureds     r4   Ú_extract_tool_result_contentr�   Ý   sü   € ð €~Øˆtõ ˆv�yÑ!Ô!ð A¥jÝ�˜	 4Ñ(Ô(­$ñ'ô 'ð Aõ ˜VÐ%9¸4Ñ@Ô@ˆ
ØÐ!ØÐÝ0°´Ñ@Ô@Ð@õ �&�%Ñ Ô ð ¥S¨¡[¤[°AÒ%5Ð%5à�aŒyÐõ �&�$ÑÔð Øˆõ ˆv�zÑ"Ô"ð 9­:°f½sÅEÍ4Ð>PÑ+QÔ+Qð 9Ý0°Ñ8Ô8Ð8à€Mr6   Úcontent_blocksc                 ó(  — g }	 | D ]a}t          |d¦  «        r|                     |j        ¦  «         Œ-t          |t          ¦  «        rd|v r|                     |d         ¦  «         Œbn# t
          $ r | cY S w xY w|rd                     |¦  «        n| S )NÚtextú )rY   Úappendr’   r…   r‹   Ú	ExceptionÚjoin)r�   ÚtextsÚitems      r4   rˆ   rˆ     s¼   € Ø€EðØ"ð 	+ð 	+ˆDÝ�t˜VÑ$Ô$ð +Ø—’˜TœYÑ'Ô'Ð'Ð'Ý˜D¥$Ñ'Ô'ð +¨F°d¨N¨NØ—’˜T &œ\Ñ*Ô*Ð*øð		+øõ
 ð ð ð ØÐÐÐðøøøà#Ð7ˆ3�8Š8�E‰?Œ?ˆ?¨Ð7s   „A$A) Á)A8Á7A8TÚfunczDCallable[..., Awaitable[Union[CallToolResult, InputRequiredResult]]]Úoriginal_argsztuple[Any, ...]Úoriginal_kwargszOptional[dict[str, Any]]r3   zOptional[Any]Úforce_awaitz*Union[CallToolResult, InputRequiredResult]c              ƒ   óä  K  — t          j        ¦   «         }|pi }|r	|d         }n|                     d¦  «        r|d         }i }t          |¦  «        dk    r|d         �	|d         }n|                     d¦  «        r|d         }t	          |j        ¦  «        r|j        d         d         d         si }d}	 t          j        ¦   «         }n# t          $ r Y nw xY wt          |¬	¦  «        \  }	}
}t          t          j        ¦   «         j        ¦  «        }t          |¬	¦  «        5  |r<t           j                             d
|› �t          j        t          j        dœ¬¦  «        }n1 t#          ¦   «         t          j        d
|› �t          j        ¬¦  «        }|5 }t%          ||t&          j        d||	|
|¦  «         	 |�|g|¢R } | |i |¤Ž}|st+          j        |¦  «        r|ƒ d{V —†}nH# t.          $ r;}t1          ¦   «         5  t3          |¦  «         ddd¦  «         n# 1 swxY w Y   ‚ d}~ww xY w|€|cddd¦  «         cddd¦  «         S |                     t          ¦  «        }|€|cddd¦  «         cddd¦  «         S d}t	          |j        ¦  «        r|j        d         d         d         rd}nt7          ¦   «         r	|j        rd}t;          |¦  «        }|�g|ret=          |t&          j        tA          |¦  «        ¦  «         tC          |tD          ¦  «        r(t=          |t&          j#        t          |¦  «        ¦  «         ddd¦  «         n# 1 swxY w Y   ddd¦  «         n# 1 swxY w Y   |S )ah  
    Wrapper for MCP tool handlers.
    Creates and manages the MCP span and attaches all attributes on the span.

    Args:
        func: The handler function to wrap
        original_args: Original arguments passed to the handler
        original_kwargs: Original keyword arguments passed to the handler
        self: Optional instance for bound methods
    r   Únamerƒ   Nrr   Údata_collectionÚgen_aiÚinputs©rR   útools/call ©z	sentry.opzsentry.origin©rž   Ú
attributes©Úoprž   rB   ú
tools/callFÚoutputsT)$rL   rM   r[   rŠ   r   rN   r   ÚLookupErrorrm   r   rb   ÚtracesÚ
start_spanr
   Ú
MCP_SERVERr/   rB   r	   r~   r   ÚMCP_TOOL_NAMEÚinspectÚisawaitabler•   r   rQ   Úget_integrationr   r0   r�   r   ÚMCP_TOOL_RESULT_CONTENTr   r…   r‹   ÚMCP_TOOL_RESULT_CONTENT_COUNT)r™   rš   r›   r3   rœ   Úclientro   rr   rR   rk   rg   rl   Úspan_streamingÚspan_mgrrn   r   ÚeÚintegrationÚshould_include_dataÚ	extracteds                       r4   Ú_tool_handler_wrapperr¼     sO  è è € õ" Ô"Ñ$Ô$€Fà%Ð+¨€Oàð /Ø$ QÔ'ˆˆØ	×	Ò	˜VÑ	$Ô	$ð /Ø& vÔ.ˆà€IÝ
ˆ=ÑÔ˜AÒÐ -°Ô"2Ð">Ø! !Ô$ˆ	ˆ	Ø	×	Ò	˜[Ñ	)Ô	)ð 1Ø# KÔ0ˆ	å" 6¤>Ñ2Ô2ð ØŒ~Ð/Ô0°Ô:¸8ÔDð 	ð ˆIà
€CðÝŒoÑÔˆˆøÝð ð ð Øˆðøøøõ -FÈ#Ð,NÑ,NÔ,NÑ)€J�
˜Må/µ
Ô0EÑ0GÔ0GÔ0OÑPÔP€Nõ 
 Ð	%Ñ	%Ô	%ð Eð Eàð 	Ý!Ô(×3Ò3Ø1 <Ð1Ð1å!#¤Ý%3Ô%:ðð ð 4ñ ô ˆHˆHð 1Õ.Ñ0Ô0Ý”=Ø1 <Ð1Ð1Ý%Ô,ðñ ô ˆHð ð 4	˜å ØØÝÔ&ØØØØØñ	ô 	ð 	ðàÐ#Ø%)Ð$:¨MÐ$:Ð$:�Mà˜˜}Ð@°Ð@Ð@�Øð *¥'Ô"5°fÑ"=Ô"=ð *Ø#)˜\˜\˜\˜\˜\˜\�Føøåð ð ð Ý0Ñ2Ô2ð *ð *Ý& qÑ)Ô)Ð)ð*ð *ð *ñ *ô *ð *ð *ð *ð *ð *ð *øøøð *ð *ð *ð *àøøøøðøøøð
 ˆ~Øð94	ð 4	ð 4	ð 4	ñ 4	ô 4	ð 4	ð#Eð Eð Eð Eñ Eô Eð Eð Eð` !×0Ò0µÑ@Ô@ˆKØÐ"ØðC4	ð 4	ð 4	ð 4	ñ 4	ô 4	ð 4	ð#Eð Eð Eð Eñ Eô Eð Eð Eðj #(ÐÝ*¨6¬>Ñ:Ô:ð +Ø”>Ð"3Ô4°XÔ>¸yÔIð /Ø*.Ð'øÝ(Ñ*Ô*ð +¨{Ô/Jð +Ø&*Ð#å4°VÑ<Ô<ˆIØÐ$Ð)<Ð$Ý(Ø�(Ô:½NÈ9Ñ<UÔ<Uñô ð õ ˜i­Ñ.Ô.ð Ý,Ø�hÔDÅcÈ)ÁnÄnñô ð ðe4	ð 4	ð 4	ñ 4	ô 4	ð 4	ð 4	ð 4	ð 4	ð 4	ð 4	øøøð 4	ð 4	ð 4	ð 4	ð#Eð Eð Eñ Eô Eð Eð Eð Eð Eð Eð Eøøøð Eð Eð Eð EðN €Msª   Â7C Ã
CÃCÄ$A2M%Æ!MÆ8.G'Ç&MÇ'
H,Ç1H'Ç?H	ÈH'ÈHÈH'È"HÈ#H'È'H,È,MÈ2M%ÉMÉ(M%ÊCMÍM%ÍM	ÍM%ÍM	ÍM%Í%M)Í,M)úServerRequestContext[Any, Any]Ú	call_nextr$   r%   c              ƒ   ó¶  K  — | j         �| j                              d¦  «        € || ¦  «        ƒ d{V —†S t          j        ¦   «         }| j         d         }| j                              d¦  «        }|€i }t	          |j        ¦  «        r|j        d         d         d         si }t          | ¬¦  «        \  }}}t          |j        ¦  «        }t          | ¬¦  «        5  |r<t          j	         
                    d|› �t          j        t          j        d	œ¬
¦  «        }	n1 t          ¦   «         t          j        d|› �t          j        ¬¦  «        }	|	5 }
t!          |
|t"          j        d||||¦  «         	  || ¦  «        ƒ d{V —†}nH# t&          $ r;}t)          ¦   «         5  t+          |¦  «         ddd¦  «         n# 1 swxY w Y   ‚ d}~ww xY wt-          |t.          ¦  «        s|cddd¦  «         cddd¦  «         S |                     t          ¦  «        }|€|cddd¦  «         cddd¦  «         S d}t	          |j        ¦  «        r|j        d         d         d         rd}nt3          ¦   «         r	|j        rd}|}d|v r	|d         }n=t-          |                     d¦  «        t6          ¦  «        rt9          |d         ¦  «        }|�g|ret;          |
t"          j        t?          |¦  «        ¦  «         t-          |t.          ¦  «        r(t;          |
t"          j         tC          |¦  «        ¦  «         ddd¦  «         n# 1 swxY w Y   ddd¦  «         n# 1 swxY w Y   |S )z˜
    Instrument a tool call as observed by the MCP Server middleware.
    Creates and manages the MCP span and attaches all attributes on the span.
    Nrž   rr   rŸ   r    r¡   r¢   r£   r¤   r¥   r§   r©   Frª   TÚstructuredContentr�   )"Úparamsr[   rL   rM   r   rN   rm   r   rb   r¬   r­   r
   r®   r/   rB   r	   r~   r   r¯   r•   r   rQ   r…   r‹   r²   r   r0   r‡   rˆ   r   r³   r   r´   rŠ   )rR   r¾   rµ   ro   rr   rk   rg   rl   r¶   r·   rn   r   r¸   r¹   Úshould_include_result_dataÚresult_contents                   r4   Ú_instrument_v2_tool_callrÄ   �  s  è è € ð „zÐ˜SœZŸ^š^¨FÑ3Ô3Ð;Ø�Y˜s‘^”^Ð#Ð#Ð#Ð#Ð#Ð#Ð#åÔ"Ñ$Ô$€FØ”:˜fÔ%€LØ”
—’˜{Ñ+Ô+€IØÐØˆ	å" 6¤>Ñ2Ô2ð ØŒ~Ð/Ô0°Ô:¸8ÔDð 	ð ˆIõ -FÈ#Ð,NÑ,NÔ,NÑ)€J�
˜Må/°´Ñ?Ô?€Nõ 
 Ð	%Ñ	%Ô	%ð Hð Hàð 	Ý!Ô(×3Ò3Ø1 <Ð1Ð1å!#¤Ý%3Ô%:ðð ð 4ñ ô ˆHˆHð 1Õ.Ñ0Ô0Ý”=Ø1 <Ð1Ð1Ý%Ô,ðñ ô ˆHð ð 7	˜å ØØÝÔ&ØØØØØñ	ô 	ð 	ðØ(˜y¨™~œ~Ð-Ð-Ð-Ð-Ð-Ð-��øåð ð ð Ý0Ñ2Ô2ð *ð *Ý& qÑ)Ô)Ð)ð*ð *ð *ñ *ô *ð *ð *ð *ð *ð *ð *øøøð *ð *ð *ð *àøøøøðøøøõ
 ˜f¥dÑ+Ô+ð Øð-7	ð 7	ð 7	ð 7	ñ 7	ô 7	ð 7	ð#Hð Hð Hð Hñ Hô Hð Hð HðT !×0Ò0µÑ@Ô@ˆKØÐ"Øð77	ð 7	ð 7	ð 7	ñ 7	ô 7	ð 7	ð#Hð Hð Hð Hñ Hô Hð Hð Hð^ */Ð&Ý*¨6¬>Ñ:Ô:ð 2Ø”>Ð"3Ô4°XÔ>¸yÔIð 6Ø15Ð.øÝ(Ñ*Ô*ð 2¨{Ô/Jð 2Ø-1Ð*à#ˆNØ" fÐ,Ð,Ø!'Ð(;Ô!<��Ý˜FŸJšJ yÑ1Ô1µ4Ñ8Ô8ð VÝ!BÀ6È)ÔCTÑ!UÔ!U�àÐ)Ð.HÐ)Ý(ØÝÔ4Ý" >Ñ2Ô2ñô ð õ ˜n­dÑ3Ô3ð Ý,ØÝ Ô>Ý˜NÑ+Ô+ñô ð ðg7	ð 7	ð 7	ñ 7	ô 7	ð 7	ð 7	ð 7	ð 7	ð 7	ð 7	øøøð 7	ð 7	ð 7	ð 7	ð#Hð Hð Hñ Hô Hð Hð Hð Hð Hð Hð Høøøð Hð Hð Hð HðT €Ms˜   ÃA2MÅ!L7Å.F Å?L7Æ 
GÆ
G ÆF4	Æ(G Æ4F8Æ8G Æ;F8Æ<G Ç GÇL7ÇMÇ7L7ÈMÈ-C>L7Ì+MÌ7L;	Ì;MÌ>L;	Ì?MÍMÍMzECallable[..., Awaitable[Union[GetPromptResult, InputRequiredResult]]]z+Union[GetPromptResult, InputRequiredResult]c              ƒ   ó¼	  K  — t          j        ¦   «         }|pi }|r	|d         }n|                     d¦  «        r|d         }i }t          |¦  «        dk    r|d         �	|d         }n|                     d¦  «        r|d         }t	          |j        ¦  «        r|j        d         d         d         si }d}	 t          j        ¦   «         }n# t          $ r Y nw xY wt          |¬	¦  «        \  }	}
}t          |j        ¦  «        }t          |¬	¦  «        5  |r<t           j                             d
|› �t          j        t          j        dœ¬¦  «        }n1 t#          ¦   «         t          j        d
|› �t          j        ¬¦  «        }|5 }t%          ||t&          j        d||	|
|¦  «         	 |�|g|¢R } | |i |¤Ž}|st+          j        |¦  «        r|ƒ d{V —†}nH# t.          $ r;}t1          ¦   «         5  t3          |¦  «         ddd¦  «         n# 1 swxY w Y   ‚ d}~ww xY w|€|cddd¦  «         cddd¦  «         S |                     t          ¦  «        }|€|cddd¦  «         cddd¦  «         S d}t	          |j        ¦  «        r|j        d         d         d         rd}nt7          ¦   «         r	|j        rd}	 d}d}t;          |d¦  «        r|j        r|j        }t          |¦  «        }nAt?          |t@          ¦  «        r,|                     d¦  «        r|d         }t          |¦  «        }|dk    rtC          |t&          j"        |¦  «         |dk    �rH|�rE|�rB|d         }d}t;          |d¦  «        r|j#        }n!t?          |t@          ¦  «        rd|v r|d         }|rtC          |t&          j$        |¦  «         d}t;          |d¦  «        rY|j%        }t;          |d¦  «        r|j&        }n”t?          |t@          ¦  «        rd|v r	|d         }nrt?          |tN          ¦  «        r|}nZt?          |t@          ¦  «        rEd|v rA|d         }t?          |t@          ¦  «        rd|v r	|d         }nt?          |tN          ¦  «        r|}|rtC          |t&          j(        |¦  «         n# t.          $ r Y nw xY wddd¦  «         n# 1 swxY w Y   ddd¦  «         n# 1 swxY w Y   |S )aj  
    Wrapper for MCP prompt handlers.
    Creates and manages the MCP span and attaches all attributes on the span.

    Args:
        func: The handler function to wrap
        original_args: Original arguments passed to the handler
        original_kwargs: Original keyword arguments passed to the handler
        self: Optional instance for bound methods
    r   rž   rƒ   Nrr   rŸ   r    r¡   r¢   úprompts/get r¤   r¥   r§   úprompts/getFTÚmessagesÚroler�   r’   ))rL   rM   r[   rŠ   r   rN   r   r«   rm   r   rb   r¬   r­   r
   r®   r/   rB   r	   r~   r   ÚMCP_PROMPT_NAMEr°   r±   r•   r   rQ   r²   r   r0   rY   rÈ   r…   r‹   r   ÚMCP_PROMPT_RESULT_MESSAGE_COUNTrÉ   ÚMCP_PROMPT_RESULT_MESSAGE_ROLEr�   r’   rŒ   Ú!MCP_PROMPT_RESULT_MESSAGE_CONTENT)r™   rš   r›   r3   rœ   rµ   ro   rr   rR   rk   rg   rl   r¶   r·   rn   r   r¸   r¹   rÂ   rÈ   Úmessage_countÚfirst_messagerÉ   Úcontent_textÚmsg_contents                            r4   Ú_prompt_handler_wrapperrÒ   ÷  sJ  è è € õ" Ô"Ñ$Ô$€Fà%Ð+¨€Oàð /Ø$ QÔ'ˆˆØ	×	Ò	˜VÑ	$Ô	$ð /Ø& vÔ.ˆà€IÝ
ˆ=ÑÔ˜AÒÐ -°Ô"2Ð">Ø! !Ô$ˆ	ˆ	Ø	×	Ò	˜[Ñ	)Ô	)ð 1Ø# KÔ0ˆ	å" 6¤>Ñ2Ô2ð ØŒ~Ð/Ô0°Ô:¸8ÔDð 	ð ˆIà
€CðÝŒoÑÔˆˆøÝð ð ð Øˆðøøøõ -FÈ#Ð,NÑ,NÔ,NÑ)€J�
˜Må/°´Ñ?Ô?€Nõ 
 Ð	%Ñ	%Ô	%ð yð yàð 	Ý!Ô(×3Ò3Ø2 LÐ2Ð2å!#¤Ý%3Ô%:ðð ð 4ñ ô ˆHˆHð 1Õ.Ñ0Ô0Ý”=Ø2 LÐ2Ð2Ý%Ô,ðñ ô ˆHð ð h	˜å ØØÝÔ(ØØØØØñ	ô 	ð 	ðàÐ#Ø%)Ð$:¨MÐ$:Ð$:�Mà˜˜}Ð@°Ð@Ð@�Øð *¥'Ô"5°fÑ"=Ô"=ð *Ø#)˜\˜\˜\˜\˜\˜\�Føøåð ð ð Ý0Ñ2Ô2ð *ð *Ý& qÑ)Ô)Ð)ð*ð *ð *ñ *ô *ð *ð *ð *ð *ð *ð *øøøð *ð *ð *ð *àøøøøðøøøð
 ˆ~Øð9h	ð h	ð h	ð h	ñ h	ô h	ð h	ð#yð yð yð yñ yô yð yð yð` !×0Ò0µÑ@Ô@ˆKØÐ"ØðCh	ð h	ð h	ð h	ñ h	ô h	ð h	ð#yð yð yð yñ yô yð yð yðj */Ð&Ý*¨6¬>Ñ:Ô:ð 2Ø”>Ð"3Ô4°XÔ>¸xÔHð 6Ø15Ð.øÝ(Ñ*Ô*ð 2¨{Ô/Jð 2Ø-1Ð*ð<Ø26�Ø !�õ ˜6 :Ñ.Ô.ð 2°6´?ð 2Ø%œ�HÝ$'¨¡M¤M�M�Må ­Ñ-Ô-ð 2°&·*²*¸ZÑ2HÔ2Hð 2Ø% jÔ1�HÝ$'¨¡M¤M�Mð ! 1Ò$Ð$Ý,Ø�hÔFÈñô ð ð
 ! AÒ%Ñ%Ð*DÑ%ÈÑ%Ø$,¨Q¤K�Mà�DÝ˜}¨fÑ5Ô5ð 5Ø,Ô1˜˜Ý# Mµ4Ñ8Ô8ð 5¸VÀ}Ð=TÐ=TØ,¨VÔ4˜àð Ý0Ø ¥(Ô"IÈ4ñô ð ð
 $(�LÝ˜}¨iÑ8Ô8ð 7Ø&3Ô&;˜å" ;°Ñ7Ô7ð 7Ø+6Ô+;˜L˜LÝ'¨µTÑ:Ô:ð 7¸vÈÐ?TÐ?TØ+6°vÔ+>˜L˜LÝ'¨µSÑ9Ô9ð 7Ø+6˜LøÝ# Mµ4Ñ8Ô8ð 7¸YÈ-Ð=WÐ=WØ&3°IÔ&>˜Ý% kµ4Ñ8Ô8ð 7¸VÀ{Ð=RÐ=RØ+6°vÔ+>˜L˜LÝ'¨µSÑ9Ô9ð 7Ø+6˜Là#ð Ý0Ø Ý$ÔFØ(ñô ð øøõ
 ð ð ð à�ðøøøðMh	ð h	ð h	ñ h	ô h	ð h	ð h	ð h	ð h	ð h	ð h	øøøð h	ð h	ð h	ð h	ð#yð yð yñ yô yð yð yð yð yð yð yøøøð yð yð yð yðv €MsÏ   Â7C Ã
CÃCÄA2SÆ!R:Æ'.GÇR:Ç
HÇ HÇ.H
	Ç>HÈ
HÈHÈHÈHÈHÈR:È!SÈ:R:ÉSÉ0A	R:Ê:G#RÒR:Ò
R+Ò(R:Ò*R+Ò+R:Ò.SÒ:R>	Ò>SÓR>	ÓSÓSÓSc              ƒ   óú  K  — | j         �| j                              d¦  «        € || ¦  «        ƒ d{V —†S t          j        ¦   «         }| j         d         }| j                              d¦  «        }|€i }t	          |j        ¦  «        r|j        d         d         d         si }t          | ¬¦  «        \  }}}t          |j        ¦  «        }t          | ¬¦  «        5  |r<t          j	         
                    d|› �t          j        t          j        d	œ¬
¦  «        }	n1 t          ¦   «         t          j        d|› �t          j        ¬¦  «        }	|	5 }
t!          |
|t"          j        d||||¦  «         	  || ¦  «        ƒ d{V —†}nH# t&          $ r;}t)          ¦   «         5  t+          |¦  «         ddd¦  «         n# 1 swxY w Y   ‚ d}~ww xY wt-          |t.          ¦  «        s|cddd¦  «         cddd¦  «         S |                     t          ¦  «        }|€|cddd¦  «         cddd¦  «         S d}t	          |j        ¦  «        r|j        d         d         d         rd}nt3          ¦   «         r	|j        rd}	 d}d}|                     d¦  «        r|d         }t7          |¦  «        }|dk    rt9          |
t"          j        |¦  «         |dk    rn|rl|rj|d         }d}d|v r|d         }|rt9          |
t"          j        |¦  «         d}d|v r|d         }d|v r|d         }|rt9          |
t"          j        |¦  «         n# t&          $ r Y nw xY wddd¦  «         n# 1 swxY w Y   ddd¦  «         n# 1 swxY w Y   |S )zŸ
    Instrument a prompt retrieval as observed by the MCP Server middleware.
    Creates and manages the MCP span and attaches all attributes on the span.
    Nrž   rr   rŸ   r    r¡   r¢   rÆ   r¤   r¥   r§   rÇ   FTr   rÈ   rƒ   rÉ   r�   r’   ) rÁ   r[   rL   rM   r   rN   rm   r   rb   r¬   r­   r
   r®   r/   rB   r	   r~   r   rÊ   r•   r   rQ   r…   r‹   r²   r   r0   rŠ   r   rË   rÌ   rÍ   )rR   r¾   rµ   ro   rr   rk   rg   rl   r¶   r·   rn   r   r¸   r¹   rÂ   rÈ   rÎ   rÏ   rÉ   rÐ   rÑ   s                        r4   Ú_instrument_v2_prompt_getrÔ   §  s¡  è è € ð „zÐ˜SœZŸ^š^¨FÑ3Ô3Ð;Ø�Y˜s‘^”^Ð#Ð#Ð#Ð#Ð#Ð#Ð#åÔ"Ñ$Ô$€FØ”:˜fÔ%€Là”
—’˜{Ñ+Ô+€IàÐØˆ	å" 6¤>Ñ2Ô2ð ØŒ~Ð/Ô0°Ô:¸8ÔDð 	ð ˆIõ -FÈ#Ð,NÑ,NÔ,NÑ)€J�
˜Må/°´Ñ?Ô?€Nõ 
 Ð	%Ñ	%Ô	%ð _ð _àð 	Ý!Ô(×3Ò3Ø2 LÐ2Ð2å!#¤Ý%3Ô%:ðð ð 4ñ ô ˆHˆHð 1Õ.Ñ0Ô0Ý”=Ø2 LÐ2Ð2Ý%Ô,ðñ ô ˆHð ð N	˜å ØØÝÔ(ØØØØØñ	ô 	ð 	ðØ(˜y¨™~œ~Ð-Ð-Ð-Ð-Ð-Ð-��øÝð ð ð Ý0Ñ2Ô2ð *ð *Ý& qÑ)Ô)Ð)ð*ð *ð *ñ *ô *ð *ð *ð *ð *ð *ð *øøøð *ð *ð *ð *àøøøøðøøøõ
 ˜f¥dÑ+Ô+ð Øð+N	ð N	ð N	ð N	ñ N	ô N	ð N	ð#_ð _ð _ð _ñ _ô _ð _ð _ðR !×0Ò0µÑ@Ô@ˆKØÐ"Øð5N	ð N	ð N	ð N	ñ N	ô N	ð N	ð#_ð _ð _ð _ñ _ô _ð _ð _ð\ */Ð&Ý*¨6¬>Ñ:Ô:ð 2Ø”>Ð"3Ô4°XÔ>¸xÔHð 6Ø15Ð.øÝ(Ñ*Ô*ð 2¨{Ô/Jð 2Ø-1Ð*ð)Ø=A�Ø !�à—:’:˜jÑ)Ô)ð 2Ø% jÔ1�HÝ$'¨¡M¤M�Mð ! 1Ò$Ð$Ý,Ø�hÔFÈñô ð ð
 ! AÒ%Ð%Ð*DÐ%ÈÐ%Ø$,¨Q¤K�Mà�DØ Ð.Ð.Ø,¨VÔ4˜àð Ý0Ø ¥(Ô"IÈ4ñô ð ð $(�LØ  MÐ1Ð1Ø&3°IÔ&>˜Ø! [Ð0Ð0Ø+6°vÔ+>˜Là#ð Ý0Ø Ý$ÔFØ(ñô ð øøõ
 ð ð ð à�ðøøøðYN	ð N	ð N	ñ N	ô N	ð N	ð N	ð N	ð N	ð N	ð N	øøøð N	ð N	ð N	ð N	ð#_ð _ð _ñ _ô _ð _ð _ð _ð _ð _ð _øøøð _ð _ð _ð _ðB €Ms½   ÃA2M0Å!MÅ.F Å?MÆ 
GÆ
G ÆF4	Æ(G Æ4F8Æ8G Æ;F8Æ<G Ç GÇMÇM0Ç7MÈM0È-A	MÉ7CL=Ì<MÌ=
M
ÍMÍ	M
Í
MÍM0ÍM	ÍM0Í M	Í!M0Í0M4Í7M4zHCallable[..., Awaitable[Union[ReadResourceResult, InputRequiredResult]]]z.Union[ReadResourceResult, InputRequiredResult]c              ƒ   óä  K  — |pi }d}|rt          |d         ¦  «        }n*|                     d¦  «        rt          |d         ¦  «        }i }d}	 t          j        ¦   «         }n# t          $ r Y nw xY wt	          |¬¦  «        \  }}	}
t          t          j        ¦   «         j        ¦  «        }t          |¬¦  «        5  |r<t          j
                             d|› �t          j        t          j        dœ¬¦  «        }n1 t!          ¦   «         t          j        d|› �t          j        ¬	¦  «        }|5 }t#          ||t$          j        d
|||	|
¦  «         |r	|d         }n|                     d¦  «        }d}|�t)          |d¦  «        r|j        }n!|rd|v r|                     d¦  «        d         }|rt/          |t$          j        |¦  «         	 |�|g|¢R } | |i |¤Ž}|st3          j        |¦  «        r|ƒ d{V —†}nH# t6          $ r;}t9          ¦   «         5  t;          |¦  «         ddd¦  «         n# 1 swxY w Y   ‚ d}~ww xY wddd¦  «         n# 1 swxY w Y   ddd¦  «         n# 1 swxY w Y   |S )al  
    Wrapper for MCP resource handlers.
    Creates and manages the MCP span and attaches all attributes on the span.

    Args:
        func: The handler function to wrap
        original_args: Original arguments passed to the handler
        original_kwargs: Original keyword arguments passed to the handler
        self: Optional instance for bound methods
    Úunknownr   ÚuriNr¢   úresources/read r¤   r¥   r§   úresources/readÚschemeú://)rŒ   r[   r   r«   rm   r   rL   rM   rN   rb   r¬   r­   r
   r®   r/   rB   r	   r~   r   ÚMCP_RESOURCE_URIrY   rÚ   Úsplitr   ÚMCP_RESOURCE_PROTOCOLr°   r±   r•   r   rQ   )r™   rš   r›   r3   rœ   ro   rr   rR   rk   rg   rl   r¶   r·   rn   r×   Úprotocolr   r¸   s                     r4   Ú_resource_handler_wrapperrà   *  s¾  è è € ð" &Ð+¨€Oà€LØð 3Ý˜=¨Ô+Ñ,Ô,ˆˆØ	×	Ò	˜UÑ	#Ô	#ð 3Ý˜?¨5Ô1Ñ2Ô2ˆà"$€Ià
€CðÝŒoÑÔˆˆøÝð ð ð Øˆðøøøõ -FÈ#Ð,NÑ,NÔ,NÑ)€J�
˜Må/µ
Ô0EÑ0GÔ0GÔ0OÑPÔP€Nõ 
 Ð	%Ñ	%Ô	%ð 7ð 7àð 	Ý!Ô(×3Ò3Ø5 |Ð5Ð5å!#¤Ý%3Ô%:ðð ð 4ñ ô ˆHˆHð 1Õ.Ñ0Ô0Ý”=Ø5 |Ð5Ð5Ý%Ô,ðñ ô ˆHð ð &	˜å ØØÝÔ)Ø ØØØØñ	ô 	ð 	ð ð 1Ø# AÔ&��à%×)Ò)¨%Ñ0Ô0�àˆHØˆ¥7¨3°Ñ#9Ô#9ˆØœ:��Øð 8 %¨<Ð"7Ð"7Ø'×-Ò-¨eÑ4Ô4°QÔ7�Øð YÝ(¨­xÔ/MÈxÑXÔXÐXðàÐ#Ø%)Ð$:¨MÐ$:Ð$:�Mà˜˜}Ð@°Ð@Ð@�Øð *¥'Ô"5°fÑ"=Ô"=ð *Ø#)˜\˜\˜\˜\˜\˜\�Føøåð ð ð Ý0Ñ2Ô2ð *ð *Ý& qÑ)Ô)Ð)ð*ð *ð *ñ *ô *ð *ð *ð *ð *ð *ð *øøøð *ð *ð *ð *àøøøøðøøøðG&	ð &	ð &	ñ &	ô &	ð &	ð &	ð &	ð &	ð &	ð &	øøøð &	ð &	ð &	ð &	ð#7ð 7ð 7ñ 7ô 7ð 7ð 7ð 7ð 7ð 7ð 7øøøð 7ð 7ð 7ð 7ðr €Ms’   ÁA$ Á$
A1Á0A1Â=A2I%Ä/BIÇ.G:Ç9IÇ:
H?ÈH:ÈH.	È"H:È.H2È2H:È5H2È6H:È:H?È?IÉI%ÉI	ÉI%ÉI	ÉI%É%I)É,I)c              ƒ   óÔ  K  — | j         �| j                              d¦  «        € || ¦  «        ƒ d{V —†S | j         d         }t          | ¬¦  «        \  }}}t          t	          j        ¦   «         j        ¦  «        }t          | ¬¦  «        5  |r<t          j         	                    d|› �t          j        t          j        dœ¬¦  «        }n1 t          ¦   «         t          j        d|› �t          j        ¬¦  «        }|5 }t          ||t           j        di |||¦  «         d}	|rd	|v r|                     d	¦  «        d
         }	|	rt'          |t           j        |	¦  «         	  || ¦  «        ƒ d{V —†}
nH# t*          $ r;}t-          ¦   «         5  t/          |¦  «         ddd¦  «         n# 1 swxY w Y   ‚ d}~ww xY w	 ddd¦  «         n# 1 swxY w Y   ddd¦  «         n# 1 swxY w Y   |
S )zŸ
    Instrument getting a resource as observed by the MCP Server middleware.
    Creates and manages the MCP span and attaches all attributes on the span.
    Nr×   r¢   rØ   r¤   r¥   r§   rÙ   rÛ   r   )rÁ   r[   rm   r   rL   rM   rN   rb   r¬   r­   r
   r®   r/   rB   r	   r~   r   rÜ   rÝ   r   rÞ   r•   r   rQ   )rR   r¾   ro   rk   rg   rl   r¶   r·   rn   rß   r   r¸   s               r4   Ú_instrument_v2_resource_readrâ   �  s   è è € ð „zÐ˜SœZŸ^š^¨EÑ2Ô2Ð:Ø�Y˜s‘^”^Ð#Ð#Ð#Ð#Ð#Ð#Ð#à”:˜eÔ$€Lõ -FÈ#Ð,NÑ,NÔ,NÑ)€J�
˜Må/µ
Ô0EÑ0GÔ0GÔ0OÑPÔP€Nõ 
 Ð	%Ñ	%Ô	%ð *ð *àð 	Ý!Ô(×3Ò3Ø5 |Ð5Ð5å!#¤Ý%3Ô%:ðð ð 4ñ ô ˆHˆHð 1Õ.Ñ0Ô0Ý”=Ø5 |Ð5Ð5Ý%Ô,ðñ ô ˆHð ð 	˜å ØØÝÔ)Ø ØØØØñ	ô 	ð 	ð ˆHØð 8 ¨Ð 5Ð 5Ø'×-Ò-¨eÑ4Ô4°QÔ7�Øð YÝ(¨­xÔ/MÈxÑXÔXÐXðØ(˜y¨™~œ~Ð-Ð-Ð-Ð-Ð-Ð-��øåð ð ð Ý0Ñ2Ô2ð *ð *Ý& qÑ)Ô)Ð)ð*ð *ð *ñ *ô *ð *ð *ð *ð *ð *ð *øøøð *ð *ð *ð *àøøøøðøøøð ð)	ð 	ð 	ñ 	ô 	ð 	ð 	ð 	ð 	ð 	ð 	øøøð 	ð 	ð 	ð 	ð#*ð *ð *ñ *ô *ð *ð *ð *ð *ð *ð *øøøð *ð *ð *ð *ðX €Ms€   ÂA2GÃ=A!GÅE1Å0GÅ1
F6Å;F1Æ	F%	ÆF1Æ%F)Æ)F1Æ,F)Æ-F1Æ1F6Æ6GÆ:GÇG
	Ç
GÇG
	ÇGÇG!Ç$G!c                  óf   — t           rt           dk    rt          ¦   «          dS t          ¦   «          dS )zW
    Patches the mcp.server.lowlevel.Server class to instrument handler execution.
    r   N)ÚMCP_PACKAGE_VERSIONÚ_patch_lowlevel_server_v2Ú_patch_lowlevel_server_v1r;   r6   r4   r8   r8   Ï  s;   € õ ð $Õ2°iÒ?Ð?Ý!Ñ#Ô#Ð#Ð#Ð#å!Ñ#Ô#Ð#Ð#Ð#r6   c                  óÜ   ‡‡‡— t           j        Š	 	 	 	 	 	 dˆfd„} | t           _        t           j        Š	 	 	 	 dˆfd„}|t           _        t           j        Š	 	 	 	 dˆfd	„}|t           _        d
S )zKPatches v1 Server decorator methods (call_tool, get_prompt, read_resource).r3   r   Úkwargsr   r1   ú2Callable[[Callable[..., Any]], Callable[..., Any]]c                 ó   •‡ ‡— dˆˆˆ fd„}|S )zEPatched version of Server.call_tool that adds Sentry instrumentation.r™   úCallable[..., Any]r1   c                 ó`   •‡ — t          ‰ ¦  «        dˆ fd„¦   «         }  ‰‰fi ‰¤Ž|¦  «        S )NÚargsr   r1   c               —   ó8   •K  — t          ‰| d¬¦  «        ƒ d {V —†S ©NF)rœ   )r¼   ©rí   r™   s    €r4   Úwrapperze_patch_lowlevel_server_v1.<locals>.patched_call_tool.<locals>.instrumented_decorator.<locals>.wrapperä  s.   øè è € å2°4¸È5ÐQÑQÔQÐQÐQÐQÐQÐQÐQÐQr6   ©rí   r   r1   r   r   )r™   rñ   rè   Úoriginal_call_toolr3   s   ` €€€r4   Úinstrumented_decoratorzT_patch_lowlevel_server_v1.<locals>.patched_call_tool.<locals>.instrumented_decoratorã  s^   øø€ Ý�4‰[Œ[ðRð Rð Rð Rð Rñ Œ[ðRð 6Ð%Ð% dÐ5Ð5¨fÐ5Ð5°gÑ>Ô>Ð>r6   ©r™   rë   r1   rë   r;   )r3   rè   rô   ró   s   `` €r4   Úpatched_call_toolz4_patch_lowlevel_server_v1.<locals>.patched_call_toolÞ  s5   øøø€ ð
	?ð 	?ð 	?ð 	?ð 	?ð 	?ð 	?ð 	?ð &Ð%r6   c                 ó   •‡ — dˆˆ fd„}|S )zFPatched version of Server.get_prompt that adds Sentry instrumentation.r™   rë   r1   c                 ód   •‡ — t          ‰ ¦  «        dˆ fd„¦   «         }  ‰‰¦  «        |¦  «        S )Nrí   r   r1   c               —   ó8   •K  — t          ‰| d¬¦  «        ƒ d {V —†S rï   ©rÒ   rð   s    €r4   rñ   zf_patch_lowlevel_server_v1.<locals>.patched_get_prompt.<locals>.instrumented_decorator.<locals>.wrapperø  s.   øè è € å4°T¸4ÈUÐSÑSÔSÐSÐSÐSÐSÐSÐSÐSr6   rò   r   )r™   rñ   Úoriginal_get_promptr3   s   ` €€r4   rô   zU_patch_lowlevel_server_v1.<locals>.patched_get_prompt.<locals>.instrumented_decorator÷  sV   øø€ Ý�4‰[Œ[ðTð Tð Tð Tð Tñ Œ[ðTð -Ð&Ð& tÑ,Ô,¨WÑ5Ô5Ð5r6   rõ   r;   )r3   rô   rû   s   ` €r4   Úpatched_get_promptz5_patch_lowlevel_server_v1.<locals>.patched_get_promptò  s/   øø€ ð
	6ð 	6ð 	6ð 	6ð 	6ð 	6ð 	6ð &Ð%r6   c                 ó   •‡ — dˆˆ fd„}|S )zIPatched version of Server.read_resource that adds Sentry instrumentation.r™   rë   r1   c                 ód   •‡ — t          ‰ ¦  «        dˆ fd„¦   «         }  ‰‰¦  «        |¦  «        S )Nrí   r   r1   c               —   ó8   •K  — t          ‰| d¬¦  «        ƒ d {V —†S rï   ©rà   rð   s    €r4   rñ   zi_patch_lowlevel_server_v1.<locals>.patched_read_resource.<locals>.instrumented_decorator.<locals>.wrapper  s.   øè è € å6°t¸TÈuÐUÑUÔUÐUÐUÐUÐUÐUÐUÐUr6   rò   r   )r™   rñ   Úoriginal_read_resourcer3   s   ` €€r4   rô   zX_patch_lowlevel_server_v1.<locals>.patched_read_resource.<locals>.instrumented_decorator  sV   øø€ Ý�4‰[Œ[ðVð Vð Vð Vð Vñ Œ[ðVð 0Ð)Ð)¨$Ñ/Ô/°Ñ8Ô8Ð8r6   rõ   r;   )r3   rô   r  s   ` €r4   Úpatched_read_resourcez8_patch_lowlevel_server_v1.<locals>.patched_read_resource  s/   øø€ ð
	9ð 	9ð 	9ð 	9ð 	9ð 	9ð 	9ð &Ð%r6   N)r3   r   rè   r   r1   ré   )r3   r   r1   ré   )r   Ú	call_toolÚ
get_promptÚread_resource)rö   rü   r  ró   rû   r  s      @@@r4   ræ   ræ   Ù  sÜ   øøø€ õ  Ô)Ðð&Øð&Ø"'ð&à	=ð&ð &ð &ð &ð &ð &ð )…FÔõ !Ô+Ðð&Øð&à	=ð&ð &ð &ð &ð &ð &ð +…FÔõ $Ô1Ðð&Øð&à	=ð&ð &ð &ð &ð &ð &ð 1…FÔÐÐr6   c              ƒ   óî   K  — | j         dk    rt          | |¦  «        ƒ d {V —†S | j         dk    rt          | |¦  «        ƒ d {V —†S | j         dk    rt          | |¦  «        ƒ d {V —†S  || ¦  «        ƒ d {V —†S )Nr©   rÇ   rÙ   )ÚmethodrÄ   rÔ   râ   )rR   r¾   s     r4   Ú_sentry_middlewarer    s¶   è è € ð „z�\Ò!Ð!Ý-¨c°9Ñ=Ô=Ð=Ð=Ð=Ð=Ð=Ð=Ð=à
„z�]Ò"Ð"Ý.¨s°IÑ>Ô>Ð>Ð>Ð>Ð>Ð>Ð>Ð>à
„zÐ%Ò%Ð%Ý1°#°yÑAÔAÐAÐAÐAÐAÐAÐAÐAà�˜3‘”ÐÐÐÐÐÐÐr6   c                  ón   ‡— t           j        Št          ‰¦  «        d	ˆfd„¦   «         } | t           _        dS )
u=  Patches the v2 Server to wrap tool/prompt/resource handlers.

    Handlers can be registered either via the Server(...) constructor kwargs
    (on_call_tool/on_get_prompt/on_read_resource) â€” the path the in-tree
    MCPServer and most lowlevel examples use â€” or via add_request_handler.
    Both are patched.
    r3   r   rí   r   rè   r1   Nc                 ó^   •—  ‰| g|¢R i |¤Ž | j                              t          ¦  «         d S ©N)Ú
middlewarer”   r  )r3   rí   rè   Úoriginal_inits      €r4   Úpatched_initz/_patch_lowlevel_server_v2.<locals>.patched_init1  s@   ø€ àˆ�dÐ,˜TÐ,Ð,Ð, VÐ,Ð,Ð,ØŒ×ÒÕ1Ñ2Ô2Ð2Ð2Ð2r6   )r3   r   rí   r   rè   r   r1   N)r   r5   r   )r  r  s    @r4   rå   rå   '  sJ   ø€ õ ”O€Må
ˆ=ÑÔð3ð 3ð 3ð 3ð 3ñ Ôð3ð #…F„O€O€Or6   c                  ó‚   ‡— t           j        Št          ‰¦  «        	 	 	 	 	 	 	 	 	 	 dˆfd
„¦   «         } | t           _        d S )Nr3   r   rZ   r+   Úreceiver*   Úsendr,   r1   c              “   óÀ   •K  — t          j        ¦   «         |                     di ¦  «        d<   t          j        ¦   «         |d         d<    ‰| |||¦  «        ƒ d {V —† d S )NrV   rW   rX   )rL   Úget_isolation_scopeÚ
setdefaultÚget_current_scope)r3   rZ   r  r  Úoriginal_handle_requests       €r4   Úpatched_handle_requestz5_patch_handle_request.<locals>.patched_handle_request<  sz   øè è € õ Ô*Ñ,Ô,ð 	×Ò˜ "Ñ%Ô%Ð&BÑCõ 6@Ô5QÑ5SÔ5SˆˆgŒÐ1Ñ2Ø%Ð% d¨E°7¸DÑAÔAÐAÐAÐAÐAÐAÐAÐAÐAÐAr6   )
r3   r   rZ   r+   r  r*   r  r,   r1   N)r   Úhandle_requestr   )r  r  s    @r4   r9   r9   9  s‰   ø€ Ý;ÔJÐå
Ð"Ñ#Ô#ð
BØ-ð
Bàð
Bð ð
Bð ð	
Bð
 
ð
Bð 
Bð 
Bð 
Bð 
Bñ $Ô#ð
Bð 4JÕ!Ô0Ð0Ð0r6   c                  ón  ‡‡— t           �Pt          t           d¦  «        r;t           j        Št          ‰¦  «        	 	 	 	 	 	 	 	 dˆfd„¦   «         } | t           _        t           �Rt          t           d	¦  «        r?t           j        Št          ‰¦  «        	 	 	 	 	 	 	 	 dˆfd
„¦   «         }|t           _        dS dS dS )aY  
    Patches the standalone fastmcp package's FastMCP class.

    The standalone fastmcp package (v2.14.0+) registers its own handlers for
    prompts and resources directly, bypassing the Server decorators we patch.
    This function patches the _get_prompt_mcp and _read_resource_mcp methods
    to add instrumentation for those handlers.
    NÚ_get_prompt_mcpr3   r   rí   rè   r1   c              Ÿ   ó8   •K  — t          ‰||| ¦  «        ƒ d {V —†S r  rú   )r3   rí   rè   Úoriginal_get_prompt_mcps      €r4   Úpatched_get_prompt_mcpz._patch_fastmcp.<locals>.patched_get_prompt_mcpX  sE   øè è € õ 1Ø'ØØØñ	ô ð ð ð ð ð ð ð r6   Ú_read_resource_mcpc              Ÿ   ó8   •K  — t          ‰||| ¦  «        ƒ d {V —†S r  r   )r3   rí   rè   Úoriginal_read_resource_mcps      €r4   Úpatched_read_resource_mcpz1_patch_fastmcp.<locals>.patched_read_resource_mcph  sE   øè è € õ 3Ø*ØØØñ	ô ð ð ð ð ð ð ð r6   )r3   r   rí   r   rè   r   r1   r   )r   rY   r  r   r  )r  r!  r  r   s     @@r4   r:   r:   L  s  øø€ õ Ð�w¥wÐ0AÑBÔBÐÝ")Ô"9Ðå	Ð&Ñ	'Ô	'ð	Øð	Ø %ð	Ø16ð	àð	ð 	ð 	ð 	ð 	ñ 
(Ô	'ð	ð #9�ÔåÐ�w¥wÐ0DÑEÔEÐÝ%,Ô%?Ð"å	Ð)Ñ	*Ô	*ð	Øð	Ø %ð	Ø16ð	àð	ð 	ð 	ð 	ð 	ñ 
+Ô	*ð	ð &?�Ô"Ð"Ð"ð ÐÐÐr6   )rE   r   r1   N)rR   r   r1   rS   )rR   r   r1   rc   )r   r   r1   r   )r�   r   r1   r   )NNT)rR   r½   r¾   r$   r1   r%   r=   )TÚ__doc__r°   Úcollections.abcr   Ú
contextlibr   Ú	functoolsr   Útypingr   rL   Úsentry_sdk.ai.utilsr   r	   Úsentry_sdk.constsr
   r   Úsentry_sdk.integrationsr   r   Úsentry_sdk.scoper   Úsentry_sdk.tracesr   Úsentry_sdk.tracing_utilsr   Úsentry_sdk.utilsr   r   r   r   r   r   Úmcp.server.lowlevelr   Úmcp.server.streamable_httpr   rä   Úmcp.server.lowlevel.serverr   ÚImportErrorÚfastmcpr   Úmcp.server.contextr   r   r    r!   r"   r#   r$   r%   Ú	mcp_typesr&   r'   r(   r)   Ústarlette.typesr*   r+   r,   Úsentry_sdk.tracingr-   r/   rQ   rb   rm   rŒ   r~   r�   rˆ   rC   r¼   rÄ   rÒ   rÔ   rà   râ   r8   ræ   r  rå   r9   r:   r;   r6   r4   ú<module>r7     s  ððð ð €€€Ø $Ð $Ð $Ð $Ð $Ð $Ø %Ð %Ð %Ð %Ð %Ð %Ø Ð Ð Ð Ð Ð Ø  Ð  Ð  Ð  Ð  Ð  à Ð Ð Ð Ø QÐ QÐ QÐ QÐ QÐ QÐ QÐ QØ *Ð *Ð *Ð *Ð *Ð *Ð *Ð *Ø =Ð =Ð =Ð =Ð =Ð =Ð =Ð =Ø 4Ð 4Ð 4Ð 4Ð 4Ð 4Ø *Ð *Ð *Ð *Ð *Ð *Ø ?Ð ?Ð ?Ð ?Ð ?Ð ?ðð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð0Ø*Ð*Ð*Ð*Ð*Ð*ðð ð ð ð ð ð *˜/¨%Ñ0Ô0Ðàð 
Ð2°YÒ>Ð>ð	
ð 	
ð 	
ð 	
ð 	
ð 	
øøð ð 0ð 0ð 0Ø
ˆ,Ð.Ñ
/Ô
/Ð/ð0øøøðØÐÐÐÐÐÐøØð ð ð Ø€G€G€Gðøøøð ð  Ð.°)Ò;Ð;ð$ð	
ð 	
ð 	
ð 	
ð 	
ð 	
ð 	
øð ð $ð $ð $Ø#ÐÐÐð$øøøð  Ðð ð (Ø@Ð@Ð@Ð@Ð@Ð@Ð@Ð@Ð@Ð@Ð@Ð@Ð@Ð@à:Ð:Ð:Ð:Ð:Ð:Ð:Ð:ðð ð ð ð ð ð ð ð ð ð ð ð 5Ð4Ð4Ð4Ð4Ð4Ð4Ð4Ð4Ð4à.Ð.Ð.Ð.Ð.Ð.Ø'Ð'Ð'Ð'Ð'Ð'ðð ð ð ð �[ñ ô ð ð4/ð /ð /ð /ð ðØ	ðàðð ð ñ „ððD 1Ø	ð 1à/ð 1ð  1ð  1ð  1ðF"WØ
%ð"Wàð"Wð ð"Wð ð	"Wð
  ð"Wð  ð"Wð  ð"Wð ð"Wð 
ð"Wð "Wð "Wð "WðJ$ð $ð $ð $ðN
8ð 
8ð 
8ð 
8ð  37Ø Øðyð yØ
Pðyà$ðyð 0ðyð ð	yð
 ðyð 2ðyð yð yð yðxgØ	)ðgàðgð ðgð gð gð gðZ 37Ø Øðmð mØ
Qðmà$ðmð 0ðmð ð	mð
 ðmð 3ðmð mð mð mð`@Ø	)ð@àð@ð ð@ð @ð @ð @ðL 37Ø Øð`ð `Ø
Tð`à$ð`ð 0ð`ð ð	`ð
 ð`ð 6ð`ð `ð `ð `ðF?Ø	)ð?àð?ð ð?ð ?ð ?ð ?ðD$ð $ð $ð $ð<1ð <1ð <1ð <1ð~ Ø	)ð Ø6@ð àð ð  ð  ð  ð#ð #ð #ð #ð$Jð Jð Jð Jð&'?ð '?ð '?ð '?ð '?ð '?s0   Á%B ÂBÂB  Â B*Â)B*Â6B= Â=CÃC