
    k7i/                       S SK Jr  S SKrS SKrS SKJr  S SKJrJrJ	r	  S SK
Jr  S SKJr  S SKJrJr  S SKJr  S S	KJ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  S SKJr  \(       a  S SKJ r   \" S5      r!SS jr"    SS jr#SRI                  S5      r%SRM                  5       r'Sr(Sr)SSSS.           SS jjr*g)    )annotationsN)Path)TYPE_CHECKINGAnyLiteral)ValidationError)Align)ConsoleGroup)Panel)Table)Text)
get_logger)MCPServerConfig)FileSystemSource)get_cached_typeadapter)FastMCPz
cli.configc                 R    [        [        R                  R                  S5      5      $ )z:Check if we're already running in a FastMCP uv subprocess.FASTMCP_UV_SPAWNED)boolosenvironget     O/home/james-whalen/.local/lib/python3.13/site-packages/fastmcp/utilities/cli.pyis_already_in_uv_subprocessr      s    

3455r   c                   SnSnU c  [        S5      nUR                  5       (       d?  [        R                  " 5       nU(       a  UnO [        R                  S5        [        S5      e[        U5      n[        R                  SU 35        OU nUR                  S5      (       a  [        U5      nUR                  5       (       a   [        U5       n[        R                  " U5      nSSS5        SW;   a  OM [        [        5      nUR                  U5      nUR                  (       a  UR                  R!                  U5        Uc  ['        US9n	[        U	S	9nUR)                  5       n
UR+                  S
5      =n(       a  XS   S
'   UR+                  S5      =n(       a'  U
S   R+                  S5      =(       d    / nX-   U
S   S'   UR+                  S5      =n(       a  [        U5      U
S   S'   UR+                  S5      =n(       a  [        U5      U
S   S'   UR+                  S5      =n(       a  UU
S   S'   UR+                  S5      =n(       a  UU
S   S'   UR+                  S5      =n(       a  UU
S   S'   UR+                  S5      =n(       a  UU
S   S'   UR+                  S5      =n(       a  UU
S   S'   UR+                  S5      =n(       a  UU
S   S'   UR+                  S5      =n(       a  UU
S   S'   [        S0 U
D6nUU4$ ! , (       d  f       GN'= f! ["         a     GNf = f! [        R$                  [        4 a     GNf = f)ag  Load config from server_spec and apply CLI overrides.

This consolidates the config parsing logic that was duplicated across
run, inspect, and dev commands.

Args:
    server_spec: Python file, config file, URL, or None to auto-detect
    cli_overrides: CLI arguments that override config values

Returns:
    Tuple of (MCPServerConfig, resolved_server_spec)
Nzfastmcp.jsonzNo server specification provided and no fastmcp.json found in current directory.
Please specify a server file or create a fastmcp.json configuration.z-No server specification or fastmcp.json foundzUsing configuration from z.json
mcpServers)path)sourcepythonenvironmentwith_packagesdependencieswith_requirementsrequirementsprojecteditable	transport
deploymenthostportr    	log_levelserver_argsargsr   )r   existsr   find_configloggererrorFileNotFoundErrorstrinfoendswithopenjsonloadr   validate_pythonr+   apply_runtime_settingsr   JSONDecodeErrorr   
model_dumpr   )server_speccli_overridesconfigconfig_pathfound_configresolved_specfdataadapterr!   config_dictpython_overridepackages_overrideexistingrequirements_overrideproject_overrideeditable_overridetransport_overridehost_overrideport_overridepath_overridelog_level_overrideserver_args_override
new_configs                           r   load_and_merge_configrW       sk     FK >*!!##*668L*[ ((WXXK(/}=># g&&=)+&!99Q<D '  4'
"8"I!(!8!8!> ",,"--DD[Q ~!}5 / ##%K (++H555/>M"8,)--o>>>}-11.AGR5F5QM">2 - 1 12E FFF589N5OM">2(,,Y777034D0EM"9-)--j9991BM":. +..{;;;1CL!+.%))&11}1,9L!&)%))&11}1,9L!&)%))&11}1,9L!&)*..{;;;1CL!+.,00???,@L!&) !/;/J}$$} '&" +  ((*;< sI   L) L&L) 6AL 
LL) 
L&"L) %L&&L) )MMa[  
    _ __ ___  _____           __  __  _____________    ____    ____ 
   _ __ ___ .'____/___ ______/ /_/  |/  / ____/ __ \  |___ \  / __ \
  _ __ ___ / /_  / __ `/ ___/ __/ /|_/ / /   / /_/ /  ___/ / / / / /
 _ __ ___ / __/ / /_/ (__  ) /_/ /  / / /___/ ____/  /  __/_/ /_/ / 
_ __ ___ /_/    \____/____/\__/_/  /_/\____/_/      /_____(*)____/  


u  [38;2;0;198;255m [38;2;0;195;255m█[38;2;0;192;255m▀[38;2;0;189;255m▀[38;2;0;186;255m [38;2;0;184;255m▄[38;2;0;181;255m▀[38;2;0;178;255m█[38;2;0;175;255m [38;2;0;172;255m█[38;2;0;169;255m▀[38;2;0;166;255m▀[38;2;0;163;255m [38;2;0;160;255m▀[38;2;0;157;255m█[38;2;0;155;255m▀[38;2;0;152;255m [38;2;0;149;255m█[38;2;0;146;255m▀[38;2;0;143;255m▄[38;2;0;140;255m▀[38;2;0;137;255m█[38;2;0;134;255m [38;2;0;131;255m█[38;2;0;128;255m▀[38;2;0;126;255m▀[38;2;0;123;255m [38;2;0;120;255m█[38;2;0;117;255m▀[38;2;0;114;255m█[39m
[38;2;0;198;255m [38;2;0;195;255m█[38;2;0;192;255m▀[38;2;0;189;255m [38;2;0;186;255m [38;2;0;184;255m█[38;2;0;181;255m▀[38;2;0;178;255m█[38;2;0;175;255m [38;2;0;172;255m▄[38;2;0;169;255m▄[38;2;0;166;255m█[38;2;0;163;255m [38;2;0;160;255m [38;2;0;157;255m█[38;2;0;155;255m [38;2;0;152;255m [38;2;0;149;255m█[38;2;0;146;255m [38;2;0;143;255m▀[38;2;0;140;255m [38;2;0;137;255m█[38;2;0;134;255m [38;2;0;131;255m█[38;2;0;128;255m▄[38;2;0;126;255m▄[38;2;0;123;255m [38;2;0;120;255m█[38;2;0;117;255m▀[38;2;0;114;255m▀[39mu    [38;2;0;170;255m▄[38;2;0;142;255m▀[38;2;0;114;255m▀[38;2;0;86;255m▀[39m
 [38;2;0;170;255m█[38;2;0;142;255m▀[38;2;0;114;255m▀[39m
[38;2;0;170;255m▀[39m
[0mu  [38;2;0;198;255m [38;2;0;195;255m▄[38;2;0;192;255m▀[38;2;0;189;255m▀[38;2;0;186;255m [38;2;0;184;255m▄[38;2;0;181;255m▀[38;2;0;178;255m█[38;2;0;175;255m [38;2;0;172;255m█[38;2;0;169;255m▀[38;2;0;166;255m▀[38;2;0;163;255m [38;2;0;160;255m▀[38;2;0;157;255m█[38;2;0;155;255m▀[38;2;0;152;255m [38;2;0;149;255m█[38;2;0;146;255m▀[38;2;0;143;255m▄[38;2;0;140;255m▀[38;2;0;137;255m█[38;2;0;134;255m [38;2;0;131;255m█[38;2;0;128;255m▀[38;2;0;126;255m▀[38;2;0;123;255m [38;2;0;120;255m█[38;2;0;117;255m▀[38;2;0;114;255m█[39m
[38;2;0;198;255m [38;2;0;195;255m█[38;2;0;192;255m▀[38;2;0;189;255m [38;2;0;186;255m [38;2;0;184;255m█[38;2;0;181;255m▀[38;2;0;178;255m█[38;2;0;175;255m [38;2;0;172;255m▄[38;2;0;169;255m▄[38;2;0;166;255m█[38;2;0;163;255m [38;2;0;160;255m [38;2;0;157;255m█[38;2;0;155;255m [38;2;0;152;255m [38;2;0;149;255m█[38;2;0;146;255m [38;2;0;143;255m▀[38;2;0;140;255m [38;2;0;137;255m█[38;2;0;134;255m [38;2;0;131;255m█[38;2;0;128;255m▄[38;2;0;126;255m▄[38;2;0;123;255m [38;2;0;120;255m█[38;2;0;117;255m▀[38;2;0;114;255m▀[39m
)r,   r-   r    c          
        [         R                  " [        SS9n[        S[        R                   3SS9n[
        R                  " SS9nUR                  SS	S
9  UR                  SSS
9  UR                  SSS
9  U==S:X  a  O	=S:X  a  O  O    SnO=S:X  a    SnOS:X  a  SnUR                  SS[        U R                  S-   SS95        UR                  SSW5        US;   aG  U(       a@  U(       a9  SU SU 3n	U(       a  U	SUR                  S5       3-  n	UR                  SSU	5        UR                  S S S 5        UR                  S!S"S#5        UR                  S$S%S&5        [        [        R                  " U5      S [        R                  " U5      S S [        R                  " U5      5      n
[        U
SS'S(S)9n[        SS*9nUR!                  [        S[        R                  " U5      S5      5        g+),a4  Creates and logs a formatted banner with server information and logo.

Args:
    transport: The transport protocol being used
    server_name: Optional server name to display
    host: Host address (for HTTP transports)
    port: Port number (for HTTP transports)
    path: Server path (for HTTP transports)
T)no_wrapzFastMCP z	bold blue)style)r      )paddingboldcenter)r[   justifycyanleftdimhttpstreamable-httpHTTPsseSSEstdioSTDIOu   🖥zServer name:rX   u   📦z
Transport:)rd   re   rg   zhttp://:/u   🔗zServer URL: u   📚zDocs:zhttps://gofastmcp.comu   🚀zHosting:zhttps://fastmcp.cloud)r\      P   )border_styler]   width)stderrN)r   	from_ansiLOGO_ASCII_4fastmcp__version__r   grid
add_columnadd_rownamelstripr   r	   r_   r   r
   print)serverr*   r,   r-   r    	logo_text
title_text
info_tabledisplay_transport
server_urlpanel_contentpanelconsoles                r   log_server_bannerr      s   ( |T:I !4!4 56kJJ F+J97v6
'V'' & % 'v~tFKK$4Fk/Z[v|->? 664DtfAdV,
Adkk#./00J6=*= r2r"vw(?@vz+BC Y
Z 

Z M E T"GMM%ell51489r   )returnr   )r@   
str | Noner   ztuple[MCPServerConfig, str])r}   zFastMCP[Any]r*   z2Literal['stdio', 'http', 'sse', 'streamable-http']r,   r   r-   z
int | Noner    r   r   None)+
__future__r   r:   r   pathlibr   typingr   r   r   pydanticr   
rich.alignr	   rich.consoler
   r   
rich.panelr   
rich.tabler   	rich.textr   ru   fastmcp.utilities.loggingr   #fastmcp.utilities.mcp_server_configr   9fastmcp.utilities.mcp_server_config.v1.sources.filesystemr   fastmcp.utilities.typesr   r   r3   r   rW   r{   LOGO_ASCII_1stripLOGO_ASCII_2LOGO_ASCII_3rt   r   r   r   r   <module>r      s    "  	  . . $  '     0 ? V :	L	!6
i%i% !i%X F4L T %' , V ( J:J:AJ: 	J:
 J: J: 
J:r   