
    k7i                        S r SSKrSSKrSSK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  \" \5      rS
\S-  4S jrS
\4S jrSSSSSSS.S\S\S-  S\S\\   S-  S\\   S-  S\\\4   S-  S\S-  S\S-  S\S-  S
\4S jjrSSSSSSSSS.S\S\\S-  \R4                  " SS/SS94   S\\\   S-  \R4                  " SS S!S"94   S\\\   S-  \R4                  " S#S$S!S"94   S\\\   S-  \R4                  " S%S&S!S"94   S'\\S-  \R4                  " S(S)S*94   S+\\S-  \R4                  " S,S-S*94   S\\S-  \R4                  " S.S/S*94   S\\S-  \R4                  " S0S1S*94   S
S4S2 jjrg)3z;Claude Code integration for FastMCP install using Cyclopts.    N)Path)	Annotated)print)
get_logger)UVEnvironment   )process_common_argsreturnc                  f   [         R                  " S5      n U (       a-   [        R                  " U S/SSSS9nSUR                  ;   a  U $  [        R                  " 5       S-  S-  S-  [        S5      [        R                  " 5       S	-  S
-  S-  /nU HZ  nUR                  5       (       d  M   [        R                  " [        U5      S/SSSS9nSUR                  ;   a  [        U5      s  $ M\     g! [        R
                  [        4 a     Nf = f! [        R
                  [        4 a     M  f = f)zFind the Claude Code CLI command.

Checks common installation locations since 'claude' is often a shell alias
that doesn't work with subprocess calls.
claudez	--versionTcheckcapture_outputtextzClaude Codez.claudelocalz/usr/local/bin/claudez.npm-globalbinN)shutilwhich
subprocessrunstdoutCalledProcessErrorFileNotFoundErrorr   homeexistsstr)claude_in_pathresultpotential_pathspaths       Y/home/james-whalen/.local/lib/python3.13/site-packages/fastmcp/cli/install/claude_code.pyfind_claude_commandr"      s4    \\(+N
	^^-#	F -%% . 			i')H4$%		m#e+h6O  ;;==
#Y,#'	 !FMM1t9$ 2   7 --/@A 		0 113DE s#   *C2 .<D2DDD0/D0c                      [        5       SL$ )z&Check if Claude Code CLI is available.N)r"        r!   check_claude_code_availabler&   D   s     ,,r%   )with_editablewith_packagesenv_varspython_versionwith_requirementsprojectfileserver_objectnamer'   r(   r)   r*   r+   r,   c          	         [        5       n	U	(       d  [        S5        g[        UU=(       d    / S/-   UUUS9n
U(       a  U R                  5        SU 3nO[	        U R                  5       5      nU
R                  SSU/5      nU	SSU/nU(       a1  UR                  5        H  u  pUR                  S	U S
U 3/5        M     UR                  S5        UR                  U5         [        R                  " USSSS9  g! [        R                   aP  n[        SU SUR                  (       a  UR                  R                  5       O
[	        U5       S35         SnAgSnAf[         a  n[        SU SU S35         SnAgSnAff = f)ay  Install FastMCP server in Claude Code.

Args:
    file: Path to the server file
    server_object: Optional server object name (for :object suffix)
    name: Name for the server in Claude Code
    with_editable: Optional list of directories to install in editable mode
    with_packages: Optional list of additional packages to install
    env_vars: Optional dictionary of environment variables
    python_version: Optional Python version to use
    with_requirements: Optional requirements file to install from
    project: Optional project directory to run within

Returns:
    True if installation was successful, False otherwise
z[red]Claude Code CLI not found.[/red]
[blue]Please ensure Claude Code is installed. Try running 'claude --version' to verify.[/blue]Ffastmcp)pythondependenciesrequirementsr,   editable:r   mcpaddz-e=z--Tr   z[red]Failed to install '[bold]z[/bold]' in Claude Code: z[/red]N)r"   r   r   resolver   build_commanditemsextendappendr   r   r   stderrstrip	Exception)r-   r.   r/   r'   r(   r)   r*   r+   r,   
claude_cmd
env_configserver_specfull_command	cmd_partskeyvaluees                    r!   install_claude_coderJ   I   s   : %&Jm	
 #)ri[8&J (-9$,,.) ++Y{,KLL UE40I "..*JCdse1UG$456 + T\"yTM(( ,TF2K`a`h`hAHHNNL\nqrsntKuu{|	
  .tf4MaSPVWXs%   #C; ;FAEF'E>>F)server_namer'   r(   r)   env_filer2   r+   r,   rD   rK   z--namez-nz)Custom name for the server in Claude Code)r/   helpz--with-editablezVDirectory with pyproject.toml to install in editable mode (can be used multiple times) )rM   negativez--withz;Additional packages to install (can be used multiple times)z--envzFEnvironment variables in KEY=VALUE format (can be used multiple times)rL   z
--env-filez)Load environment variables from .env file)rM   r2   z--pythonz(Python version to use (e.g., 3.10, 3.11)z--with-requirementsz.Requirements file to install dependencies fromz	--projectz2Run the command within the given project directoryc                   #    U=(       d    / nU=(       d    / nU=(       d    / n[        XX4U5      I Sh  vN u  ppn[        U	U
UUUUUUUS9	nU(       a  [        SU S35        g[        R                  " S5        g NG7f)zuInstall an MCP server in Claude Code.

Args:
    server_spec: Python file to install, optionally with :object suffix
N)	r-   r.   r/   r'   r(   r)   r*   r+   r,   z[green]Successfully installed 'z' in Claude Code[/green]r   )r	   rJ   r   sysexit)rD   rK   r'   r(   r)   rL   r2   r+   r,   r-   r.   r/   packagesenv_dictsuccesss                  r!   claude_code_commandrV      s     J "'RM!'RM~2H:M-8; 51D "##+
G /v5MNO'5s   2A>A<AA>)__doc__r   r   rQ   pathlibr   typingr   cycloptsrichr   fastmcp.utilities.loggingr   6fastmcp.utilities.mcp_server_config.v1.environments.uvr   sharedr	   __name__loggerr   r"   boolr&   listdictrJ   	ParameterrV   r$   r%   r!   <module>re      s   A   
     0 P '	H	-S4Z -`-T - (,&*&*!%%)M
M:M M
 :$M 9t#M 38nt#M $JM d{M D[M 
Mr 	 	 	 	 	 	 	 	{[[ d
D!<	
	[ T
Ti	
	[$ S	DN	
	%[4 S	DY	
	5[D t<	
	E[R d
;	
	S[` !t!A	
	a[n tE	
	o[| 
}[r%   