55 "fmt"
66 "io"
77 "log"
8+ "log/slog"
89 "net/http"
910 "net/url"
1011 "os"
@@ -21,7 +22,6 @@ import (
2122 "github.com/mark3labs/mcp-go/mcp"
2223 "github.com/mark3labs/mcp-go/server"
2324 "github.com/shurcooL/githubv4"
24- "github.com/sirupsen/logrus"
2525)
2626
2727type MCPServerConfig struct {
@@ -49,6 +49,8 @@ type MCPServerConfig struct {
4949 Translator translations.TranslationHelperFunc
5050}
5151
52+ const stdioServerLogPrefix = "stdioserver"
53+
5254func NewMCPServer (cfg MCPServerConfig ) (* server.MCPServer , error ) {
5355 apiHost , err := parseAPIHost (cfg .Host )
5456 if err != nil {
@@ -203,17 +205,22 @@ func RunStdioServer(cfg StdioServerConfig) error {
203205
204206 stdioServer := server .NewStdioServer (ghServer )
205207
206- logrusLogger := logrus .New ()
208+ var slogHandler slog.Handler
209+ var logOutput io.Writer
207210 if cfg .LogFilePath != "" {
208211 file , err := os .OpenFile (cfg .LogFilePath , os .O_CREATE | os .O_WRONLY | os .O_APPEND , 0600 )
209212 if err != nil {
210213 return fmt .Errorf ("failed to open log file: %w" , err )
211214 }
212-
213- logrusLogger .SetLevel (logrus .DebugLevel )
214- logrusLogger .SetOutput (file )
215- }
216- stdLogger := log .New (logrusLogger .Writer (), "stdioserver" , 0 )
215+ logOutput = file
216+ slogHandler = slog .NewTextHandler (logOutput , & slog.HandlerOptions {Level : slog .LevelDebug })
217+ } else {
218+ logOutput = os .Stderr
219+ slogHandler = slog .NewTextHandler (logOutput , & slog.HandlerOptions {Level : slog .LevelInfo })
220+ }
221+ logger := slog .New (slogHandler )
222+ logger .Info ("starting server" , "version" , cfg .Version , "host" , cfg .Host , "dynamicToolsets" , cfg .DynamicToolsets , "readOnly" , cfg .ReadOnly )
223+ stdLogger := log .New (logOutput , stdioServerLogPrefix , 0 )
217224 stdioServer .SetErrorLogger (stdLogger )
218225
219226 if cfg .ExportTranslations {
@@ -227,7 +234,7 @@ func RunStdioServer(cfg StdioServerConfig) error {
227234 in , out := io .Reader (os .Stdin ), io .Writer (os .Stdout )
228235
229236 if cfg .EnableCommandLogging {
230- loggedIO := mcplog .NewIOLogger (in , out , logrusLogger )
237+ loggedIO := mcplog .NewIOLogger (in , out , logger )
231238 in , out = loggedIO , loggedIO
232239 }
233240 // enable GitHub errors in the context
@@ -241,9 +248,10 @@ func RunStdioServer(cfg StdioServerConfig) error {
241248 // Wait for shutdown signal
242249 select {
243250 case <- ctx .Done ():
244- logrusLogger . Infof ("shutting down server... " )
251+ logger . Info ("shutting down server" , "signal" , "context done " )
245252 case err := <- errC :
246253 if err != nil {
254+ logger .Error ("error running server" , "error" , err )
247255 return fmt .Errorf ("error running server: %w" , err )
248256 }
249257 }
0 commit comments