Skip to content

Commit bc1a18a

Browse files
authored
feat(server): add graceful shutdown handling for SIGTERM and SIGINT
feat(server): add graceful shutdown handling for SIGTERM and SIGINT
2 parents 73a95bc + 67350fe commit bc1a18a

File tree

1 file changed

+28
-3
lines changed

1 file changed

+28
-3
lines changed

main.go

Lines changed: 28 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,8 @@ import (
99
"log"
1010
"log/slog"
1111
"os"
12+
"os/signal"
13+
"syscall"
1214

1315
"github.com/mark3labs/mcp-go/mcp"
1416
"github.com/mark3labs/mcp-go/server"
@@ -700,15 +702,38 @@ func main() {
700702

701703
registerAllTools(s, appInstance, debugLogger)
702704

703-
// Cleanup on exit
704-
defer func() {
705+
// Cleanup function
706+
cleanup := func() {
707+
debugLogger.Info("Starting cleanup...")
705708
if err := appInstance.Disconnect(); err != nil {
706709
debugLogger.Error("Failed to disconnect from database", "error", err)
710+
} else {
711+
debugLogger.Info("Database connection closed successfully")
707712
}
713+
debugLogger.Info("Server shutdown complete")
714+
}
715+
defer cleanup()
716+
717+
// Set up signal handling for graceful shutdown
718+
ctx, cancel := context.WithCancel(context.Background())
719+
defer cancel()
720+
721+
sigChan := make(chan os.Signal, 1)
722+
signal.Notify(sigChan, syscall.SIGTERM, syscall.SIGINT)
723+
724+
go func() {
725+
sig := <-sigChan
726+
debugLogger.Info("Received shutdown signal", "signal", sig.String())
727+
cancel()
708728
}()
709729

710730
// Start the stdio server
711-
if err := server.ServeStdio(s); err != nil {
731+
debugLogger.Info("Starting PostgreSQL MCP Server", "version", version)
732+
733+
// Create a custom StdioServer with context support
734+
stdioServer := server.NewStdioServer(s)
735+
if err := stdioServer.Listen(ctx, os.Stdin, os.Stdout); err != nil && err != context.Canceled {
736+
debugLogger.Error("Server error", "error", err)
712737
fmt.Fprintf(os.Stderr, "Server error: %v\n", err)
713738
return
714739
}

0 commit comments

Comments
 (0)