
    k7inF                    z   S r SSKJr  SSKrSSKJr  SSKJr  SSK	J
r
JrJr  SSKrSSKJr  SSKrSSKJr  SSKJr  \ " S	 S
5      5       r\ " S S5      5       r\ " S S5      5       r\ " S S5      5       r\ " S S5      5       rSS jrSS jrSS jr " S S\\5      rSS jrSS jr S        S!S jjr g)"z+Utilities for inspecting FastMCP instances.    )annotationsN)	dataclass)Enum)AnyLiteralcast)FastMCP)Clientc                      \ rS rSr% SrS\S'   S\S'   S\S'   S\S	'   S
rS\S'   S
rS\S'   S
rS\S'   S
r	S\S'   S
r
S\S'   S
rS\S'   S
rS\S'   Srg
)ToolInfo   zInformation about a tool.strkeyname
str | Nonedescriptiondict[str, Any]input_schemaNdict[str, Any] | Noneoutput_schemar   list[str] | Nonetagsbool | Noneenabledtitlelist[dict[str, Any]] | Noneiconsmeta )__name__
__module____qualname____firstlineno____doc____annotations__r   r   r   r   r   r   r   __static_attributes__r       S/home/james-whalen/.local/lib/python3.13/site-packages/fastmcp/utilities/inspect.pyr   r      sf    #	H
I  +/M(/)-K&-!D
!G[E:)-E&-"&D
&r'   r   c                      \ rS rSr% SrS\S'   S\S'   S\S'   SrS	\S
'   SrS\S'   SrS\S'   Sr	S\S'   Sr
S	\S'   SrS\S'   Srg)
PromptInfo#   zInformation about a prompt.r   r   r   r   r   Nr   	argumentsr   r   r   r   r   r   r   r   r   )r    r!   r"   r#   r$   r%   r,   r   r   r   r   r   r&   r   r'   r(   r*   r*   #   sU    %	H
I-1I*1!D
!G[E:)-E&-"&D
&r'   r*   c                      \ rS rSr% SrS\S'   S\S'   S\S'   S\S'   S	rS\S
'   S	rS\S'   S	rS\S'   S	r	S\S'   S	r
S\S'   S	rS\S'   S	rS\S'   Srg	)ResourceInfo2   zInformation about a resource.r   r   urir   r   r   N	mime_typer   r   r   r   r   r   r   r   r   r   r   )r    r!   r"   r#   r$   r%   r1   r   r   r   r   r   r   r&   r   r'   r(   r.   r.   2   se    '	H	H
 Iz )-K&-!D
!G[E:)-E&-"&D
&r'   r.   c                      \ rS rSr% SrS\S'   S\S'   S\S'   S\S'   S	rS\S
'   S	rS\S'   S	rS\S'   S	r	S\S'   S	r
S\S'   S	rS\S'   S	rS\S'   S	rS\S'   Srg	)TemplateInfoC   z&Information about a resource template.r   r   uri_templater   r   r   Nr1   r   
parametersr   r   r   r   r   r   r   r   r   r   )r    r!   r"   r#   r$   r%   r1   r6   r   r   r   r   r   r   r&   r   r'   r(   r3   r3   C   sq    0	H
 Iz (,J%,)-K&-!D
!G[E:)-E&-"&D
&r'   r3   c                      \ rS rSr% SrS\S'   S\S'   S\S'   S\S'   S	\S
'   S\S'   S\S'   S\S'   S\S'   S\S'   S\S'   S\S'   S\S'   Srg)FastMCPInfoU   z.Information extracted from a FastMCP instance.r   r   r   instructionsversionwebsite_urlr   r   fastmcp_versionmcp_versionintserver_generationzlist[ToolInfo]toolszlist[PromptInfo]promptszlist[ResourceInfo]	resourceszlist[TemplateInfo]	templatesr   capabilitiesr   N)r    r!   r"   r#   r$   r%   r&   r   r'   r(   r8   r8   U   sR    8
I&&!!!!  r'   r8   c                  #    U R                  5       I Sh  vN nU R                  5       I Sh  vN nU R                  5       I Sh  vN nU R                  5       I Sh  vN n/ nU GHA  nUR	                  UR
                  S9nUR                  [        UR
                  UR                  =(       d    UR
                  UR                  UR                  (       a  UR                  O0 UR                  UR                  (       a  UR                  R                  5       OSUR                  (       a  [        UR                  5      OSUR                   UR"                  UR$                  (       a*  UR$                   Vs/ s H  oR                  5       PM     snOSUR&                  S95        GMD     / n	U GH  n
U	R                  [)        U
R
                  U
R                  =(       d    U
R
                  U
R                  U
R*                  (       a*  U
R*                   Vs/ s H  oR                  5       PM     snOSU
R                  (       a  [        U
R                  5      OSU
R                   U
R"                  U
R$                  (       a*  U
R$                   Vs/ s H  oR                  5       PM     snOSU
R&                  S9	5        GM     / nU GH  nUR                  [-        UR
                  UR
                  UR                  UR                  UR.                  UR                  (       a  UR                  R                  5       OSUR                  (       a  [        UR                  5      OSUR                   UR"                  UR$                  (       a*  UR$                   Vs/ s H  oR                  5       PM     snOSUR&                  S95        GM     / nU GH  nUR                  [1        UR
                  UR
                  UR                  UR                  UR.                  UR2                  UR                  (       a  UR                  R                  5       OSUR                  (       a  [        UR                  5      OSUR                   UR"                  UR$                  (       a*  UR$                   Vs/ s H  oR                  5       PM     snOSUR&                  S95        GM     SS0S	S	S
.SS	00 S.n[5        U R6                  S5      (       aO  U R6                  R$                  (       a4  U R6                  R$                   Vs/ s H  oR                  5       PM     snOSn[5        U R6                  S5      (       a  U R6                  R8                  OSn[;        U R                  U R<                  [5        U S5      (       a  U R>                  OU R6                  R>                  UU[@        RB                  [D        RF                  R?                  S5      SUU	UUUS9$  GN GN GN GNs  snf s  snf s  snf s  snf s  snf s  snf 7f)zExtract information from a FastMCP v2.x instance.

Args:
    mcp: The FastMCP v2.x instance to inspect

Returns:
    FastMCPInfo dataclass containing the extracted information
N)r   r   r   r   r   r   r   r   r   r   r   r   	r   r   r   r,   r   r   r   r   r   r   r0   r   r   r1   r   r   r   r   r   r   r   r5   r   r   r1   r6   r   r   r   r   r   r   listChangedTF	subscriberK   rA   rC   rB   loggingr   r<   r;   mcp   r   r:   r;   r<   r   r=   r>   r@   rA   rB   rC   rD   rE   )$_list_tools_middleware_list_prompts_middleware_list_resources_middleware#_list_resource_templates_middlewareto_mcp_toolr   appendr   r   r   inputSchemar   r   
model_dumpr   listr   r   r   r   r*   r,   r.   r1   r3   r6   hasattr_mcp_serverr<   r8   r:   r;   fastmcp__version__	importlibmetadata)rP   
tools_listprompts_listresources_listtemplates_list
tool_infostoolmcp_tooliconprompt_infospromptargresource_infosresourcetemplate_infostemplaterE   server_iconsserver_website_urls                      r(   inspect_fastmcp_v2rs   h   s     1133J5577L99;;NBBDDN J###2HHYY*$(( ,,5=5I5IX11r"00=A=M=MD,,779SW(,		T$))_tjj:: 6:ZZ@ZT(Z@YY	
 * LJJ[[.FJJ"..## 8>7G7GH7G>>+7GH*0++T&++&4ll<< 6<\\B\T(\B[[	
 ( N"LLLL]]$00",,'' %00;;=,4MMT(--(t ((nn>> 6>^^D^T(^D]]	
 #, N"LL%\\]]$00",,#..'' %00;;=,4MMT(--(t ((nn>> 6>^^D^T(^D]]!	
 #0  &#(?!5)	L 3??G,,1F1F (+'<'<='<t	'<=  (/s'N'N##TX  XX%% 'Y 7 7S__=T=T&++&&..u5  ! c 47;D" A I C. E0 E" 	>s   YXYXYXYX!DY9X$ BYX)1A YX.*C2YX3 5C=Y2X8"A7YX=B>YYY!Y$Yc                

  #    [        U 5       ISh  vN nUR                  5       I Sh  vN nUR                  5       I Sh  vN nUR                  5       I Sh  vN n UR	                  5       I Sh  vN n/ nU H  nUR                  [        UR                  UR                  UR                  UR                  (       a  UR                  O0 SSSSS[        US5      (       a;  UR                  (       a*  UR                   Vs/ s H  oR                  5       PM     snOSSS95        M     / n	U H  n
Sn[        U
S5      (       a:  U
R                  (       a)  U
R                   Vs/ s H  oR                  5       PM     nnU	R                  [        U
R                  U
R                  U
R                  USSS[        U
S5      (       a;  U
R                  (       a*  U
R                   Vs/ s H  oR                  5       PM     snOSSS9	5        M     / nU H  nUR                  [!        [#        UR$                  5      [#        UR$                  5      UR                  UR                  UR&                  SSSS[        US5      (       a;  UR                  (       a*  UR                   Vs/ s H  oR                  5       PM     snOSSS95        M     / nU H  nUR                  [)        [#        UR*                  5      [#        UR*                  5      UR                  UR                  UR&                  SSSSS[        US5      (       a;  UR                  (       a*  UR                   Vs/ s H  oR                  5       PM     snOSSS95        M     SS	0S
S
S.SS
00 S.nUR,                  R.                  n[        US5      (       a;  UR                  (       a*  UR                   Vs/ s H  oR                  5       PM     snOSn[        US5      (       a  UR0                  OSn[3        U R4                  R                  U R4                  R6                  U R4                  R8                  UU[:        R<                  [>        R@                  R9                  S5      SUU	UUUS9sSSS5      ISh  vN   $  GN GN GNk GNV GN@! [
         a    / n GNMf = fs  snf s  snf s  snf s  snf s  snf s  snf  NE! , ISh  vN  (       d  f       g= f7f)zExtract information from a FastMCP v1.x instance using a Client.

Args:
    mcp: The FastMCP v1.x instance to inspect

Returns:
    FastMCPInfo dataclass containing the extracted information
Nr   rG   r,   rH   rI   rJ   rK   TFrL   rN   
websiteUrlrP      rR   )!r
   
list_toolslist_promptslist_resourceslist_resource_templates	ExceptionrX   r   r   r   rY   r\   r   rZ   r,   r*   r.   r   r0   mimeTyper3   uriTemplateinitialize_result
serverInforu   r8   r]   r:   r;   r^   r_   r`   ra   )rP   client	mcp_toolsmcp_promptsmcp_resourcesmcp_templatesrf   rh   ri   rj   
mcp_promptr,   rl   rm   mcp_resourcero   mcp_templaterE   server_inforq   rr   s                        r(   inspect_fastmcp_v1r      s\     c{{f ++--	"//11$3355	"("@"@"BBM
 
!H ! ( 4 49A9M9M!5!5SU"& $ x11hnn :BH??,H "( %JIz;//J4H4H9C9M9MN9M#^^-9M	N"# * 6 6' z733
8H8H :D9I9IJ9I??,9IJ &. )L!!L,,-L,,-%** , 8 8*33 $ |W55,:L:L :F9K9KL9K??,9KL *( )L!!L445!$\%=%=!>%** , 8 8*33# $ |W55,:L:L :F9K9KL9K??,9KL *, $T*',UC%u-	
 ..99 {G,,1B1B ,7+<+<=+<4__+<= 	 '.k<&H&HK""d 	 %%55OO++*#//!**2259 $$%
o {{-15 C 	M	" I O K* M, M$ >_ {{{s   TR'TS)R*S)R-S)R0S) R63R34R68BS)S	"A	S)%S>A'S)%S>B$S)"S";B%S) S$9A$S)S"6BS)T!S'"T*S)-S)0S)3R66SS)S!S)'T)T /S20T <Tc                   #    [        U [        5      (       a  [        U 5      I Sh  vN $ [        [	        [
        [           U 5      5      I Sh  vN $  N, N7f)aD  Extract information from a FastMCP instance into a dataclass.

This function automatically detects whether the instance is FastMCP v1.x or v2.x
and uses the appropriate extraction method.

Args:
    mcp: The FastMCP instance to inspect (v1.x or v2.x)

Returns:
    FastMCPInfo dataclass containing the extracted information
N)
isinstance	FastMCP1xr   rs   r   r	   r   )rP   s    r(   inspect_fastmcpr     sC      #y!!',,,'WS\3(?@@@ -@s!   $AA'AAAAc                       \ rS rSrSrSrSrSrg)InspectFormati  z"Output format for inspect command.r^   rP   r   N)r    r!   r"   r#   r$   FASTMCPMCPr&   r   r'   r(   r   r     s    ,G
Cr'   r   c                X   U R                   U R                  U R                  U R                  U R                  U R
                  U R                  S.U R                  U R                  S.U R                  U R                  U R                  U R                  S.n[        R                  " USS9$ )zzFormat FastMCPInfo as FastMCP-specific JSON.

This includes FastMCP-specific fields like tags, enabled, annotations, etc.
)r   r:   r;   r<   r   
generationrE   r^   rP   )serverenvironmentrA   rB   rC   rD   rQ   indent)r   r:   r;   r<   r   r@   rE   r=   r>   rA   rB   rC   rD   pydantic_coreto_json)inforesults     r(   format_fastmcp_infor     s     II --||++ZZ00 --
 ++##
 <<^^^^#F(   22r'   c           	     x  #    [        U 5       ISh  vN nUR                  5       I Sh  vN nUR                  5       I Sh  vN nUR                  5       I Sh  vN nUR	                  5       I Sh  vN nUR
                  R                  n[        R                  [        R                  R                  S5      S.U0 UR                  UR                  UR                  UR                  S.n[         R"                  " USS9sSSS5      ISh  vN   $  GN N N N N N! , ISh  vN  (       d  f       g= f7f)zFormat server info as standard MCP protocol JSON.

Uses Client to get the standard MCP protocol format with camelCase fields.
Includes version metadata at the top level.
NrP   r   )r   r   rE   rA   rB   rC   resourceTemplatesrQ   r   )r
   list_tools_mcplist_prompts_mcplist_resources_mcplist_resource_templates_mcpr~   r   r^   r_   r`   ra   r;   rA   rB   rC   r   r   r   )rP   r   tools_resultprompts_resultresources_resulttemplates_resultr   r   s           r(   format_mcp_infor     s      c{{f#2244%6688!'!:!:!<<!'!C!C!EE ..99
 #.. ))11%8 &!''%--)33!1!C!C
 $$VA61 {{48<E {{{s   D:DD:D DD DD DD 2D3BD D:DD:D D D D D: D7&D)'D73D:c                &  #    [        U[        5      (       a  [        U5      nU[        R                  :X  a  [	        U 5      I Sh  vN $ U[        R
                  :X  a!  Uc  [        U 5      I Sh  vN n[        U5      $ [        SU 35      e NG N7f)a  Format server information according to the specified format.

Args:
    mcp: The FastMCP instance
    format: Output format ("fastmcp" or "mcp")
    info: Pre-extracted FastMCPInfo (optional, will be extracted if not provided)

Returns:
    JSON bytes in the requested format
NzUnknown format: )	r   r   r   r   r   r   r   r   
ValueError)rP   formatr   s      r(   format_infor     s       &#v&"""$S)))	=((	( <(--D"4((+F8455 *
 .s$   ABB)B/B0BB)rP   zFastMCP[Any]returnr8   )rP   r   r   r8   )rP   FastMCP[Any] | FastMCP1xr   r8   )r   r8   r   bytes)rP   r   r   r   )N)rP   r   r   z)InspectFormat | Literal['fastmcp', 'mcp']r   zFastMCPInfo | Noner   r   )!r$   
__future__r   importlib.metadatar`   dataclassesr   enumr   typingr   r   r   r   mcp.server.fastmcpr	   r   r^   r
   fastmcp.server.serverr   r*   r.   r3   r8   rs   r   r   r   r   r   r   r   r   r'   r(   <module>r      s   1 "  !  % %  3   ) ' ' '  ' ' ' ' ' '  ' ' '" ! ! !$IXO
dA$C 3:7H  $6	!656 6 	6r'   