@@ -43,17 +43,33 @@ type ConnectionOutcome =
4343 | 'cancelled'
4444 | 'error'
4545
46- function classifyConnectionOutcome ( error : unknown ) : ConnectionOutcome {
47- if ( error instanceof McpOauthRedirectRequired || error instanceof UnauthorizedError ) {
46+ function classifyConnectionOutcome (
47+ error : unknown ,
48+ authType : McpServerConfig [ 'authType' ]
49+ ) : ConnectionOutcome {
50+ if ( error instanceof McpOauthRedirectRequired ) {
4851 return 'authorization_required'
4952 }
53+ if ( error instanceof UnauthorizedError ) {
54+ return authType === 'oauth' ? 'authorization_required' : 'unauthorized'
55+ }
5056 const message = getErrorMessage ( error , '' ) . toLowerCase ( )
5157 if ( message . includes ( 'connection attempt cancelled' ) ) return 'cancelled'
5258 if ( message . includes ( 'timeout' ) || message . includes ( 'timed out' ) ) return 'timeout'
5359 if ( message . includes ( '401' ) || message . includes ( 'unauthorized' ) ) return 'unauthorized'
5460 return 'error'
5561}
5662
63+ function getSafeErrorDiagnostics ( error : unknown ) {
64+ const describedError = describeError ( error )
65+ return {
66+ name : sanitizeForLogging ( describedError . name , 100 ) ,
67+ code : describedError . code ? sanitizeForLogging ( describedError . code , 100 ) : undefined ,
68+ errno : describedError . errno ? sanitizeForLogging ( describedError . errno , 100 ) : undefined ,
69+ syscall : describedError . syscall ? sanitizeForLogging ( describedError . syscall , 100 ) : undefined ,
70+ }
71+ }
72+
5773interface McpClientConnectOptions {
5874 isCancelled ?: ( ) => boolean
5975}
@@ -109,7 +125,9 @@ export class McpClient {
109125 this . client . onerror = ( error ) => {
110126 logger . warn ( `MCP transport error for ${ this . config . name } ` , {
111127 serverId : this . config . id ,
112- error : sanitizeForLogging ( getErrorMessage ( error , 'Unknown transport error' ) , 200 ) ,
128+ phase : 'transport' ,
129+ sessionIdPresent : Boolean ( this . transport . sessionId ) ,
130+ error : getSafeErrorDiagnostics ( error ) ,
113131 } )
114132 }
115133 }
@@ -178,19 +196,11 @@ export class McpClient {
178196 } catch ( error ) {
179197 this . isConnected = false
180198 const errorMessage = getErrorMessage ( error , 'Unknown error' )
181- const describedError = describeError ( error )
182- const outcome = classifyConnectionOutcome ( error )
199+ const outcome = classifyConnectionOutcome ( error , this . config . authType )
183200 logger . error ( `Failed to connect to MCP server ${ this . config . name } ` , {
184201 ...diagnostics ,
185202 durationMs : Date . now ( ) - startedAt ,
186- error : {
187- name : sanitizeForLogging ( describedError . name , 100 ) ,
188- code : describedError . code ? sanitizeForLogging ( describedError . code , 100 ) : undefined ,
189- errno : describedError . errno ? sanitizeForLogging ( describedError . errno , 100 ) : undefined ,
190- syscall : describedError . syscall
191- ? sanitizeForLogging ( describedError . syscall , 100 )
192- : undefined ,
193- } ,
203+ error : getSafeErrorDiagnostics ( error ) ,
194204 outcome,
195205 } )
196206 if ( outcome === 'authorization_required' ) {
@@ -236,6 +246,7 @@ export class McpClient {
236246 MCP_CLIENT_CONSTANTS . LIST_TOOLS_MAX_TOTAL_TIMEOUT_MS
237247 )
238248 const maxTotalTimeoutMs = MCP_CLIENT_CONSTANTS . LIST_TOOLS_MAX_TOTAL_TIMEOUT_MS
249+ const startedAt = Date . now ( )
239250
240251 try {
241252 const result : ListToolsResult = await this . client . listTools ( undefined , {
@@ -265,7 +276,15 @@ export class McpClient {
265276 serverName : this . config . name ,
266277 } ) )
267278 } catch ( error ) {
268- logger . error ( `Failed to list tools from server ${ this . config . name } :` , error )
279+ logger . error ( `Failed to list tools from server ${ this . config . name } ` , {
280+ serverId : this . config . id ,
281+ phase : 'tools/list' ,
282+ durationMs : Date . now ( ) - startedAt ,
283+ idleTimeoutMs,
284+ maxTotalTimeoutMs,
285+ sessionIdPresent : Boolean ( this . transport . sessionId ) ,
286+ error : getSafeErrorDiagnostics ( error ) ,
287+ } )
269288 throw error
270289 }
271290 }
0 commit comments