@@ -3,12 +3,14 @@ package main
33import (
44 "context"
55 "fmt"
6+ "io"
67 stdlog "log"
78 "os"
89 "os/signal"
910 "syscall"
1011
1112 "github.com/github/github-mcp-server/pkg/github"
13+ iolog "github.com/github/github-mcp-server/pkg/log"
1214 gogithub "github.com/google/go-github/v69/github"
1315 "github.com/mark3labs/mcp-go/server"
1416 log "github.com/sirupsen/logrus"
3335 if err != nil {
3436 stdlog .Fatal ("Failed to initialize logger:" , err )
3537 }
36- if err := runStdioServer (logger ); err != nil {
38+ logCommands := viper .GetBool ("enable-command-logging" )
39+ if err := runStdioServer (logger , logCommands ); err != nil {
3740 stdlog .Fatal ("failed to run stdio server:" , err )
3841 }
3942 },
@@ -45,9 +48,11 @@ func init() {
4548
4649 // Add global flags that will be shared by all commands
4750 rootCmd .PersistentFlags ().String ("log-file" , "" , "Path to log file" )
51+ rootCmd .PersistentFlags ().Bool ("enable-command-logging" , false , "When enabled, the server will log all command requests and responses to the log file" )
4852
4953 // Bind flag to viper
5054 viper .BindPFlag ("log-file" , rootCmd .PersistentFlags ().Lookup ("log-file" ))
55+ viper .BindPFlag ("enable-command-logging" , rootCmd .PersistentFlags ().Lookup ("enable-command-logging" ))
5156
5257 // Add subcommands
5358 rootCmd .AddCommand (stdioCmd )
@@ -70,12 +75,13 @@ func initLogger(outPath string) (*log.Logger, error) {
7075 }
7176
7277 logger := log .New ()
78+ logger .SetLevel (log .DebugLevel )
7379 logger .SetOutput (file )
7480
7581 return logger , nil
7682}
7783
78- func runStdioServer (logger * log.Logger ) error {
84+ func runStdioServer (logger * log.Logger , logCommands bool ) error {
7985 // Create app context
8086 ctx , stop := signal .NotifyContext (context .Background (), os .Interrupt , syscall .SIGTERM )
8187 defer stop ()
@@ -97,7 +103,14 @@ func runStdioServer(logger *log.Logger) error {
97103 // Start listening for messages
98104 errC := make (chan error , 1 )
99105 go func () {
100- errC <- stdioServer .Listen (ctx , os .Stdin , os .Stdout )
106+ in , out := io .Reader (os .Stdin ), io .Writer (os .Stdout )
107+
108+ if logCommands {
109+ loggedIO := iolog .NewIOLogger (in , out , logger )
110+ in , out = loggedIO , loggedIO
111+ }
112+
113+ errC <- stdioServer .Listen (ctx , in , out )
101114 }()
102115
103116 // Output github-mcp-server string
0 commit comments