@@ -43,6 +43,10 @@ export async function* runMcpFlow({
4343> {
4444 // Start from env-configured servers
4545 let servers = getMcpServers ( ) ;
46+ logger . debug (
47+ { servers : servers . map ( ( s ) => ( { name : s . name , url : s . url } ) ) } ,
48+ "[mcp] loaded servers from env"
49+ ) ;
4650
4751 // Merge in request-provided custom servers (if any)
4852 try {
@@ -68,27 +72,53 @@ export async function* runMcpFlow({
6872 servers = [ ...byName . values ( ) ] ;
6973 }
7074
71- // If the client specified a selection by name, filter to those
75+ // If the client specified a non-empty selection by name, filter to those
7276 const names = Array . isArray ( reqMcp ?. selectedServerNames )
7377 ? reqMcp ?. selectedServerNames
7478 : undefined ;
75- if ( Array . isArray ( names ) ) {
79+ if ( Array . isArray ( names ) && names . length > 0 ) {
80+ logger . debug (
81+ { selectedNames : names , beforeFilter : servers . length } ,
82+ "[mcp] filtering servers by name"
83+ ) ;
7684 servers = servers . filter ( ( s ) => names . includes ( s . name ) ) ;
85+ logger . debug ( { afterFilter : servers . length } , "[mcp] servers after name filter" ) ;
86+ } else if ( Array . isArray ( names ) && names . length === 0 ) {
87+ // Be resilient: an empty array means "no explicit selection"; do not filter.
88+ logger . debug ( "[mcp] empty selectedServerNames provided; skipping name filter" ) ;
7789 }
7890 } catch {
7991 // ignore selection merge errors and proceed with env servers
8092 }
8193
94+ // If no servers remain after selection/merge, exit early with an accurate message
95+ if ( servers . length === 0 ) {
96+ logger . warn ( "[mcp] no MCP servers available after selection; skipping MCP flow" ) ;
97+ return false ;
98+ }
99+
82100 // Enforce server-side safety (public HTTPS only, no private ranges)
101+ const beforeFilter = servers . length ;
83102 servers = servers . filter ( ( s ) => {
84103 try {
85- return isValidUrl ( s . url ) ;
86- } catch {
104+ const isValid = isValidUrl ( s . url ) ;
105+ if ( ! isValid ) {
106+ logger . warn ( { name : s . name , url : s . url } , "[mcp] server rejected by URL safety" ) ;
107+ }
108+ return isValid ;
109+ } catch ( err ) {
110+ logger . warn (
111+ { name : s . name , url : s . url , error : String ( err ) } ,
112+ "[mcp] server URL validation error"
113+ ) ;
87114 return false ;
88115 }
89116 } ) ;
90117 if ( servers . length === 0 ) {
91- logger . warn ( "[mcp] all selected servers rejected by URL safety guard" ) ;
118+ logger . warn (
119+ { beforeFilter, afterFilter : servers . length } ,
120+ "[mcp] all servers rejected by URL safety guard"
121+ ) ;
92122 return false ;
93123 }
94124
0 commit comments