44import logging
55
66import click
7- from rich .console import Console
87
98from mcpm .fastmcp_integration .proxy import create_mcpm_proxy
109from mcpm .profile .profile_config import ProfileConfigManager
1110from mcpm .utils .config import DEFAULT_PORT
1211
13- console = Console ()
1412profile_config_manager = ProfileConfigManager ()
1513logger = logging .getLogger (__name__ )
1614
@@ -37,10 +35,8 @@ async def find_available_port(preferred_port, max_attempts=10):
3735async def run_profile_fastmcp (profile_servers , profile_name , debug = False , http_mode = False , port = DEFAULT_PORT ):
3836 """Run profile servers using FastMCP proxy for proper aggregation."""
3937 server_count = len (profile_servers )
40- if debug :
41- debug_console = Console (stderr = True )
42- debug_console .print (f"[dim]Using FastMCP proxy to aggregate { server_count } server(s)[/]" )
43- debug_console .print (f"[dim]Mode: { 'HTTP' if http_mode else 'stdio' } [/]" )
38+ logger .debug (f"Using FastMCP proxy to aggregate { server_count } server(s)" )
39+ logger .debug (f"Mode: { 'HTTP' if http_mode else 'stdio' } " )
4440
4541 try :
4642 # Create FastMCP proxy for profile servers
@@ -50,9 +46,7 @@ async def run_profile_fastmcp(profile_servers, profile_name, debug=False, http_m
5046 stdio_mode = not http_mode , # stdio_mode=False for HTTP
5147 )
5248
53- if debug :
54- debug_console = Console (stderr = True )
55- debug_console .print (f"[dim]FastMCP proxy initialized with: { [s .name for s in profile_servers ]} [/]" )
49+ logger .debug (f"FastMCP proxy initialized with: { [s .name for s in profile_servers ]} " )
5650
5751 # Record profile usage
5852 from mcpm .commands .usage import record_profile_usage
@@ -64,15 +58,9 @@ async def run_profile_fastmcp(profile_servers, profile_name, debug=False, http_m
6458 actual_port = await find_available_port (port )
6559 if actual_port != port :
6660 logger .warning (f"Port { port } is busy, using port { actual_port } instead" )
67- if debug :
68- debug_console = Console (stderr = True )
69- debug_console .print (f"[yellow]Port { port } is busy, using port { actual_port } instead[/]" )
7061
7162 logger .info (f"Starting profile '{ profile_name } ' on HTTP port { actual_port } " )
72- if debug :
73- debug_console = Console (stderr = True )
74- debug_console .print (f"[cyan]Starting profile '{ profile_name } ' on HTTP port { actual_port } ...[/]" )
75- debug_console .print ("[yellow]Press Ctrl+C to stop the profile.[/]" )
63+ logger .info ("Press Ctrl+C to stop the profile." )
7664
7765 # Run the aggregated proxy over HTTP
7866 await proxy .run_streamable_http_async (host = "127.0.0.1" , port = actual_port )
@@ -85,14 +73,9 @@ async def run_profile_fastmcp(profile_servers, profile_name, debug=False, http_m
8573
8674 except KeyboardInterrupt :
8775 logger .info ("Profile execution interrupted" )
88- if debug :
89- debug_console = Console (stderr = True )
90- debug_console .print ("\n [yellow]Profile execution interrupted[/]" )
9176 return 130
9277 except Exception as e :
9378 logger .error (f"Error running profile '{ profile_name } ': { e } " )
94- # For errors, still use console.print as we need to show the error to user
95- console .print (f"[red]Error running profile '{ profile_name } ': { e } [/]" )
9679 return 1
9780
9881
@@ -110,15 +93,15 @@ def run(profile_name, debug, http, port):
11093
11194 Examples:
11295
113- \\ b
96+ \b
11497 mcpm profile run web-dev # Run over stdio (default)
11598 mcpm profile run --http web-dev # Run over HTTP on port 8000
11699 mcpm profile run --http --port 9000 ai # Run over HTTP on port 9000
117100 mcpm profile run --debug --http web-dev # Debug + HTTP mode
118101 """
119102 # Validate profile name
120103 if not profile_name or not profile_name .strip ():
121- console . print ( "[red]Error: Profile name cannot be empty[/] " )
104+ logger . error ( " Profile name cannot be empty" )
122105 return 1
123106
124107 profile_name = profile_name .strip ()
@@ -127,41 +110,39 @@ def run(profile_name, debug, http, port):
127110 try :
128111 profile_servers = profile_config_manager .get_profile (profile_name )
129112 if profile_servers is None :
130- console .print (f"[red]Error: Profile '[bold]{ profile_name } [/]' not found[/]" )
131- console .print ()
132- console .print ("[yellow]Available options:[/]" )
133- console .print (" • Run 'mcpm profile ls' to see available profiles" )
134- console .print (" • Run 'mcpm profile create {name}' to create a profile" )
113+ logger .error (f"Profile '{ profile_name } ' not found" )
114+ logger .info ("Available options:" )
115+ logger .info (" • Run 'mcpm profile ls' to see available profiles" )
116+ logger .info (" • Run 'mcpm profile create {name}' to create a profile" )
135117 return 1
136118 except Exception as e :
137- console . print (f"[red] Error accessing profile '{ profile_name } ': { e } [/] " )
119+ logger . error (f"Error accessing profile '{ profile_name } ': { e } " )
138120 return 1
139121
140122 if not profile_servers :
141- console .print (f"[yellow]Profile '[bold]{ profile_name } [/]' has no servers configured[/]" )
142- console .print ()
143- console .print ("[dim]Add servers to this profile with:[/]" )
144- console .print (f" mcpm profile edit { profile_name } " )
123+ logger .warning (f"Profile '{ profile_name } ' has no servers configured" )
124+ logger .info ("Add servers to this profile with:" )
125+ logger .info (f" mcpm profile edit { profile_name } " )
145126 return 0
146127
147128 logger .info (f"Running profile '{ profile_name } ' with { len (profile_servers )} server(s)" )
148129
130+ if debug :
131+ logging .basicConfig (level = logging .DEBUG )
132+
149133 # Only show visual output in debug mode or HTTP mode
150134 if debug or http :
151- debug_console = Console (stderr = True )
152- debug_console .print (f"[bold green]Running profile '[cyan]{ profile_name } [/]' with { len (profile_servers )} server(s)[/]" )
135+ logger .info (f"Running profile '{ profile_name } ' with { len (profile_servers )} server(s)" )
153136
154137 if debug :
155- debug_console . print ( "[dim] Servers to run:[/] " )
138+ logger . debug ( " Servers to run:" )
156139 for server_config in profile_servers :
157- debug_console . print (f" - { server_config .name } : { server_config } " )
140+ logger . debug (f" - { server_config .name } : { server_config } " )
158141
159142 # Use FastMCP proxy for all cases (single or multiple servers)
160- if debug :
161- debug_console = Console (stderr = True )
162- debug_console .print (f"[dim]Using FastMCP proxy for { len (profile_servers )} server(s)[/]" )
163- if http :
164- debug_console .print (f"[dim]HTTP mode on port { port } [/]" )
143+ logger .debug (f"Using FastMCP proxy for { len (profile_servers )} server(s)" )
144+ if http :
145+ logger .debug (f"HTTP mode on port { port } " )
165146
166147 # Run the async function
167148 return asyncio .run (run_profile_fastmcp (profile_servers , profile_name , debug , http_mode = http , port = port ))
0 commit comments