44import atexit
55import os
66import signal
7+ import logging
78from typing import Callable
89from mcp .server .fastmcp import FastMCP
910
3132from kicad_mcp .prompts .bom_prompts import register_bom_prompts
3233from kicad_mcp .prompts .pattern_prompts import register_pattern_prompts
3334
34- # Import utils
35- from kicad_mcp .utils .python_path import setup_kicad_python_path
36-
3735# Import context management
3836from kicad_mcp .context import kicad_lifespan
3937
@@ -56,7 +54,7 @@ def add_cleanup_handler(handler: Callable) -> None:
5654
5755def run_cleanup_handlers () -> None :
5856 """Run all registered cleanup handlers."""
59- print ( "Running cleanup handlers..." )
57+ logging . info ( f "Running cleanup handlers..." )
6058
6159 global _shutting_down
6260
@@ -65,28 +63,26 @@ def run_cleanup_handlers() -> None:
6563 return
6664
6765 _shutting_down = True
68- print ( "Running cleanup handlers..." )
66+ logging . info ( f "Running cleanup handlers..." )
6967
7068 for handler in cleanup_handlers :
7169 try :
7270 handler ()
73- print (f"Cleanup handler { handler .__name__ } completed successfully" )
71+ logging . info (f"Cleanup handler { handler .__name__ } completed successfully" )
7472 except Exception as e :
75- print (f"Error in cleanup handler { handler .__name__ } : { str (e )} " , exc_info = True )
73+ logging . error (f"Error in cleanup handler { handler .__name__ } : { str (e )} " , exc_info = True )
7674
7775def shutdown_server ():
7876 """Properly shutdown the server if it exists."""
7977 global _server_instance
8078
8179 if _server_instance :
8280 try :
83- print ("Shutting down KiCad MCP server" )
84- # The server should handle its own shutdown through its lifespan context
85- # This is mostly a placeholder for any additional server shutdown code
81+ logging .info (f"Shutting down KiCad MCP server" )
8682 _server_instance = None
87- print ( "KiCad MCP server shutdown complete" )
83+ logging . info ( f "KiCad MCP server shutdown complete" )
8884 except Exception as e :
89- print (f"Error shutting down server: { str (e )} " , exc_info = True )
85+ logging . error (f"Error shutting down server: { str (e )} " , exc_info = True )
9086
9187
9288def register_signal_handlers (server : FastMCP ) -> None :
@@ -96,7 +92,7 @@ def register_signal_handlers(server: FastMCP) -> None:
9692 server: The FastMCP server instance
9793 """
9894 def handle_exit_signal (signum , frame ):
99- print (f"Received signal { signum } , initiating shutdown..." )
95+ logging . info (f"Received signal { signum } , initiating shutdown..." )
10096
10197 # Run cleanup first
10298 run_cleanup_handlers ()
@@ -111,30 +107,33 @@ def handle_exit_signal(signum, frame):
111107 for sig in (signal .SIGINT , signal .SIGTERM ):
112108 try :
113109 signal .signal (sig , handle_exit_signal )
114- print (f"Registered handler for signal { sig } " )
110+ logging . info (f"Registered handler for signal { sig } " )
115111 except (ValueError , AttributeError ) as e :
116112 # Some signals may not be available on all platforms
117- print (f"Could not register handler for signal { sig } : { str (e )} " )
113+ logging . error (f"Could not register handler for signal { sig } : { str (e )} " )
118114
119115
120116def create_server () -> FastMCP :
121117 """Create and configure the KiCad MCP server."""
122- print ( "Initializing KiCad MCP server" )
118+ logging . info ( f "Initializing KiCad MCP server" )
123119
124- # Try to set up KiCad Python path
125- kicad_modules_available = setup_kicad_python_path ()
120+ # Try to set up KiCad Python path - Removed
121+ # kicad_modules_available = setup_kicad_python_path()
122+ kicad_modules_available = False # Set to False as we removed the setup logic
126123
127- if kicad_modules_available :
128- print ("KiCad Python modules successfully configured" )
129- else :
130- print ("KiCad Python modules not available - some features will be disabled" )
124+ # if kicad_modules_available:
125+ # print("KiCad Python modules successfully configured")
126+ # else:
127+ # Always print this now, as we rely on CLI
128+ logging .info (f"KiCad Python module setup removed; relying on kicad-cli for external operations." )
131129
132130 # Initialize FastMCP server
133- mcp = FastMCP ("KiCad" , lifespan = kicad_lifespan )
134- print ("Created FastMCP server instance with lifespan management" )
131+ # Pass the availability flag (always False now) to the lifespan context
132+ mcp = FastMCP ("KiCad" , lifespan = kicad_lifespan , lifespan_kwargs = {"kicad_modules_available" : kicad_modules_available })
133+ logging .info (f"Created FastMCP server instance with lifespan management" )
135134
136135 # Register resources
137- print ( "Registering resources..." )
136+ logging . info ( f "Registering resources..." )
138137 register_project_resources (mcp )
139138 register_file_resources (mcp )
140139 register_drc_resources (mcp )
@@ -143,7 +142,7 @@ def create_server() -> FastMCP:
143142 register_pattern_resources (mcp )
144143
145144 # Register tools
146- print ( "Registering tools..." )
145+ logging . info ( f "Registering tools..." )
147146 register_project_tools (mcp )
148147 register_analysis_tools (mcp )
149148 register_export_tools (mcp )
@@ -153,7 +152,7 @@ def create_server() -> FastMCP:
153152 register_pattern_tools (mcp )
154153
155154 # Register prompts
156- print ( "Registering prompts..." )
155+ logging . info ( f "Registering prompts..." )
157156 register_prompts (mcp )
158157 register_drc_prompts (mcp )
159158 register_bom_prompts (mcp )
@@ -164,7 +163,7 @@ def create_server() -> FastMCP:
164163 atexit .register (run_cleanup_handlers )
165164
166165 # Add specific cleanup handlers
167- add_cleanup_handler (lambda : print ( "KiCad MCP server shutdown complete" ))
166+ add_cleanup_handler (lambda : logging . info ( f "KiCad MCP server shutdown complete" ))
168167
169168 # Add temp directory cleanup
170169 def cleanup_temp_dirs ():
@@ -173,17 +172,17 @@ def cleanup_temp_dirs():
173172 from kicad_mcp .utils .temp_dir_manager import get_temp_dirs
174173
175174 temp_dirs = get_temp_dirs ()
176- print (f"Cleaning up { len (temp_dirs )} temporary directories" )
175+ logging . info (f"Cleaning up { len (temp_dirs )} temporary directories" )
177176
178177 for temp_dir in temp_dirs :
179178 try :
180179 if os .path .exists (temp_dir ):
181180 shutil .rmtree (temp_dir , ignore_errors = True )
182- print (f"Removed temporary directory: { temp_dir } " )
181+ logging . info (f"Removed temporary directory: { temp_dir } " )
183182 except Exception as e :
184- print (f"Error cleaning up temporary directory { temp_dir } : { str (e )} " )
183+ logging . error (f"Error cleaning up temporary directory { temp_dir } : { str (e )} " )
185184
186185 add_cleanup_handler (cleanup_temp_dirs )
187186
188- print ( "Server initialization complete" )
187+ logging . info ( f "Server initialization complete" )
189188 return mcp
0 commit comments