diff --git a/internal/version/VERSION b/internal/version/VERSION index adc20cc6..bdbae5a5 100644 --- a/internal/version/VERSION +++ b/internal/version/VERSION @@ -1 +1 @@ -v5.0.0-beta-2506021152 +v5.0.0-beta-2506031321 diff --git a/mcphost/config.go b/mcphost/config.go index f5db1ceb..4037ca22 100644 --- a/mcphost/config.go +++ b/mcphost/config.go @@ -5,6 +5,8 @@ import ( "fmt" "os" "path/filepath" + + "github.com/rs/zerolog/log" ) const ( @@ -93,6 +95,7 @@ func (w ServerConfigWrapper) MarshalJSON() ([]byte, error) { // LoadMCPConfig loads the MCP configuration from the specified path or default location func LoadMCPConfig(configPath string) (*MCPConfig, error) { + log.Debug().Str("configPath", configPath).Msg("Loading MCP config") if configPath == "" { homeDir, err := os.UserHomeDir() if err != nil { @@ -122,6 +125,7 @@ func LoadMCPConfig(configPath string) (*MCPConfig, error) { return nil, fmt.Errorf("error parsing config file: %w", err) } config.ConfigPath = configPath - + log.Debug().Str("configPath", configPath). + Interface("config", config).Msg("Loaded MCP config") return &config, nil } diff --git a/mcphost/host.go b/mcphost/host.go index f2b8ec98..b7c453c9 100644 --- a/mcphost/host.go +++ b/mcphost/host.go @@ -228,6 +228,7 @@ func isSignalError(err error) bool { strings.Contains(errStr, "signal: terminated") || strings.Contains(errStr, "exit status 120") || strings.Contains(errStr, "exit status 130") || + strings.Contains(errStr, "exit status 143") || // SIGTERM (15) strings.Contains(errStr, "broken pipe") || strings.Contains(errStr, "connection reset") } @@ -472,7 +473,12 @@ func startStdioLog(stderr io.Reader, serverName string, ctx context.Context) { } else { // Scanner finished or encountered error if err := scanner.Err(); err != nil { - log.Debug().Str("server", serverName).Err(err).Msg("stdio log scanner error") + // Check if it's a normal shutdown error (pipe closed) + if isNormalShutdownError(err) { + log.Debug().Str("server", serverName).Msg("stdio log stopped due to normal shutdown") + } else { + log.Debug().Str("server", serverName).Err(err).Msg("stdio log scanner error") + } } return } @@ -481,6 +487,16 @@ func startStdioLog(stderr io.Reader, serverName string, ctx context.Context) { }() } +// isNormalShutdownError checks if the error is caused by normal shutdown (pipe closed) +func isNormalShutdownError(err error) bool { + errStr := err.Error() + // Common pipe closed error patterns during normal shutdown + return strings.Contains(errStr, "file already closed") || + strings.Contains(errStr, "broken pipe") || + strings.Contains(errStr, "use of closed file") || + strings.Contains(errStr, "read/write on closed pipe") +} + // prepareClientInitRequest creates a standard initialization request func prepareClientInitRequest() mcp.InitializeRequest { return mcp.InitializeRequest{