5
5
"fmt"
6
6
"io"
7
7
"log"
8
+ "log/slog"
8
9
"net/http"
9
10
"net/url"
10
11
"os"
@@ -21,7 +22,6 @@ import (
21
22
"github.com/mark3labs/mcp-go/mcp"
22
23
"github.com/mark3labs/mcp-go/server"
23
24
"github.com/shurcooL/githubv4"
24
- "github.com/sirupsen/logrus"
25
25
)
26
26
27
27
type MCPServerConfig struct {
@@ -49,6 +49,8 @@ type MCPServerConfig struct {
49
49
Translator translations.TranslationHelperFunc
50
50
}
51
51
52
+ const stdioServerLogPrefix = "stdioserver"
53
+
52
54
func NewMCPServer (cfg MCPServerConfig ) (* server.MCPServer ,error ) {
53
55
apiHost ,err := parseAPIHost (cfg .Host )
54
56
if err != nil {
@@ -203,17 +205,22 @@ func RunStdioServer(cfg StdioServerConfig) error {
203
205
204
206
stdioServer := server .NewStdioServer (ghServer )
205
207
206
- logrusLogger := logrus .New ()
208
+ var slogHandler slog.Handler
209
+ var logOutput io.Writer
207
210
if cfg .LogFilePath != "" {
208
211
file ,err := os .OpenFile (cfg .LogFilePath ,os .O_CREATE | os .O_WRONLY | os .O_APPEND ,0600 )
209
212
if err != nil {
210
213
return fmt .Errorf ("failed to open log file: %w" ,err )
211
214
}
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 )
217
224
stdioServer .SetErrorLogger (stdLogger )
218
225
219
226
if cfg .ExportTranslations {
@@ -227,7 +234,7 @@ func RunStdioServer(cfg StdioServerConfig) error {
227
234
in ,out := io .Reader (os .Stdin ),io .Writer (os .Stdout )
228
235
229
236
if cfg .EnableCommandLogging {
230
- loggedIO := mcplog .NewIOLogger (in ,out ,logrusLogger )
237
+ loggedIO := mcplog .NewIOLogger (in ,out ,logger )
231
238
in ,out = loggedIO ,loggedIO
232
239
}
233
240
// enable GitHub errors in the context
@@ -241,9 +248,10 @@ func RunStdioServer(cfg StdioServerConfig) error {
241
248
// Wait for shutdown signal
242
249
select {
243
250
case <- ctx .Done ():
244
- logrusLogger . Infof ("shutting down server... " )
251
+ logger . Info ("shutting down server" , "signal" , "context done " )
245
252
case err := <- errC :
246
253
if err != nil {
254
+ logger .Error ("error running server" ,"error" ,err )
247
255
return fmt .Errorf ("error running server: %w" ,err )
248
256
}
249
257
}