Skip to content

Commit f394f40

Browse files
address review comments
1 parent 6b09469 commit f394f40

File tree

3 files changed

+21
-25
lines changed

3 files changed

+21
-25
lines changed

mcp/logging.go

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -89,7 +89,7 @@ type LoggingHandler struct {
8989
}
9090

9191
// discardHandler is a slog.Handler that drops all logs.
92-
// TODO: use slog.NewNopHandler when we require Go 1.24+.
92+
// TODO: use slog.DiscardHandler when we require Go 1.24+.
9393
type discardHandler struct{}
9494

9595
func (discardHandler) Enabled(context.Context, slog.Level) bool { return false }

mcp/server.go

Lines changed: 20 additions & 22 deletions
Original file line numberDiff line numberDiff line change
@@ -36,9 +36,8 @@ const DefaultPageSize = 1000
3636
// sessions by using [Server.Run].
3737
type Server struct {
3838
// fixed at creation
39-
impl *Implementation
40-
opts ServerOptions
41-
logger *slog.Logger
39+
impl *Implementation
40+
opts ServerOptions
4241

4342
mu sync.Mutex
4443
prompts *featureSet[*serverPrompt]
@@ -55,7 +54,7 @@ type Server struct {
5554
type ServerOptions struct {
5655
// Optional instructions for connected clients.
5756
Instructions string
58-
// Logger is used for server-side logging. If nil, disable logging.
57+
// If non-nil, log server activity.
5958
Logger *slog.Logger
6059
// If non-nil, called when "notifications/initialized" is received.
6160
InitializedHandler func(context.Context, *InitializedRequest)
@@ -136,7 +135,6 @@ func NewServer(impl *Implementation, options *ServerOptions) *Server {
136135
return &Server{
137136
impl: impl,
138137
opts: opts,
139-
logger: ensureLogger(opts.Logger),
140138
prompts: newFeatureSet(func(p *serverPrompt) string { return p.prompt.Name }),
141139
tools: newFeatureSet(func(t *serverTool) string { return t.tool.Name }),
142140
resources: newFeatureSet(func(r *serverResource) string { return r.resource.URI }),
@@ -664,7 +662,7 @@ func (s *Server) ResourceUpdated(ctx context.Context, params *ResourceUpdatedNot
664662
sessions := slices.Collect(maps.Keys(subscribedSessions))
665663
s.mu.Unlock()
666664
notifySessions(sessions, notificationResourceUpdated, params)
667-
s.logger.Info("resource updated notification sent", "uri", params.URI, "subscriber_count", len(sessions))
665+
s.opts.Logger.Info("resource updated notification sent", "uri", params.URI, "subscriber_count", len(sessions))
668666
return nil
669667
}
670668

@@ -682,7 +680,7 @@ func (s *Server) subscribe(ctx context.Context, req *SubscribeRequest) (*emptyRe
682680
s.resourceSubscriptions[req.Params.URI] = make(map[*ServerSession]bool)
683681
}
684682
s.resourceSubscriptions[req.Params.URI][req.Session] = true
685-
s.logger.Info("resource subscribed", "uri", req.Params.URI, "session_id", req.Session.ID())
683+
s.opts.Logger.Info("resource subscribed", "uri", req.Params.URI, "session_id", req.Session.ID())
686684

687685
return &emptyResult{}, nil
688686
}
@@ -704,7 +702,7 @@ func (s *Server) unsubscribe(ctx context.Context, req *UnsubscribeRequest) (*emp
704702
delete(s.resourceSubscriptions, req.Params.URI)
705703
}
706704
}
707-
s.logger.Info("resource unsubscribed", "uri", req.Params.URI, "session_id", req.Session.ID())
705+
s.opts.Logger.Info("resource unsubscribed", "uri", req.Params.URI, "session_id", req.Session.ID())
708706

709707
return &emptyResult{}, nil
710708
}
@@ -723,10 +721,10 @@ func (s *Server) unsubscribe(ctx context.Context, req *UnsubscribeRequest) (*emp
723721
// It need not be called on servers that are used for multiple concurrent connections,
724722
// as with [StreamableHTTPHandler].
725723
func (s *Server) Run(ctx context.Context, t Transport) error {
726-
s.logger.Info("server run start")
724+
s.opts.Logger.Info("server run start")
727725
ss, err := s.Connect(ctx, t, nil)
728726
if err != nil {
729-
s.logger.Error("server connect failed", "error", err)
727+
s.opts.Logger.Error("server connect failed", "error", err)
730728
return err
731729
}
732730

@@ -738,13 +736,13 @@ func (s *Server) Run(ctx context.Context, t Transport) error {
738736
select {
739737
case <-ctx.Done():
740738
ss.Close()
741-
s.logger.Info("server run cancelled", "error", ctx.Err())
739+
s.opts.Logger.Error("server run cancelled", "error", ctx.Err())
742740
return ctx.Err()
743741
case err := <-ssClosed:
744742
if err != nil {
745-
s.logger.Error("server session ended with error", "error", err)
743+
s.opts.Logger.Error("server session ended with error", "error", err)
746744
} else {
747-
s.logger.Info("server session ended")
745+
s.opts.Logger.Info("server session ended")
748746
}
749747
return err
750748
}
@@ -761,7 +759,7 @@ func (s *Server) bind(mcpConn Connection, conn *jsonrpc2.Connection, state *Serv
761759
s.mu.Lock()
762760
s.sessions = append(s.sessions, ss)
763761
s.mu.Unlock()
764-
s.logger.Info("server session connected", "session_id", ss.ID())
762+
s.opts.Logger.Info("server session connected", "session_id", ss.ID())
765763
return ss
766764
}
767765

@@ -777,7 +775,7 @@ func (s *Server) disconnect(cc *ServerSession) {
777775
for _, subscribedSessions := range s.resourceSubscriptions {
778776
delete(subscribedSessions, cc)
779777
}
780-
s.logger.Info("server session disconnected", "session_id", cc.ID())
778+
s.opts.Logger.Info("server session disconnected", "session_id", cc.ID())
781779
}
782780

783781
// ServerSessionOptions configures the server session.
@@ -803,10 +801,10 @@ func (s *Server) Connect(ctx context.Context, t Transport, opts *ServerSessionOp
803801
onClose = opts.onClose
804802
}
805803

806-
s.logger.Info("server connecting")
804+
s.opts.Logger.Info("server connecting")
807805
ss, err := connect(ctx, t, s, state, onClose)
808806
if err != nil {
809-
s.logger.Error("server connect error", "error", err)
807+
s.opts.Logger.Error("server connect error", "error", err)
810808
return nil, err
811809
}
812810
return ss, nil
@@ -829,11 +827,11 @@ func (ss *ServerSession) initialized(ctx context.Context, params *InitializedPar
829827
})
830828

831829
if !wasInit {
832-
ss.server.logger.Warn("initialized before initialize")
830+
ss.server.opts.Logger.Error("initialized before initialize")
833831
return nil, fmt.Errorf("%q before %q", notificationInitialized, methodInitialize)
834832
}
835833
if wasInitd {
836-
ss.server.logger.Warn("duplicate initialized notification")
834+
ss.server.opts.Logger.Error("duplicate initialized notification")
837835
return nil, fmt.Errorf("duplicate %q received", notificationInitialized)
838836
}
839837
if ss.server.opts.KeepAlive > 0 {
@@ -842,7 +840,7 @@ func (ss *ServerSession) initialized(ctx context.Context, params *InitializedPar
842840
if h := ss.server.opts.InitializedHandler; h != nil {
843841
h(ctx, serverRequestFor(ss, params))
844842
}
845-
ss.server.logger.Info("session initialized")
843+
ss.server.opts.Logger.Info("session initialized")
846844
return nil, nil
847845
}
848846

@@ -1080,7 +1078,7 @@ func (ss *ServerSession) handle(ctx context.Context, req *jsonrpc.Request) (any,
10801078
case methodInitialize, methodPing, notificationInitialized:
10811079
default:
10821080
if !initialized {
1083-
ss.server.logger.Warn("method invalid during initialization", "method", req.Method)
1081+
ss.server.opts.Logger.Error("method invalid during initialization", "method", req.Method)
10841082
return nil, fmt.Errorf("method %q is invalid during session initialization", req.Method)
10851083
}
10861084
}
@@ -1137,7 +1135,7 @@ func (ss *ServerSession) setLevel(_ context.Context, params *SetLoggingLevelPara
11371135
ss.updateState(func(state *ServerSessionState) {
11381136
state.LogLevel = params.Level
11391137
})
1140-
ss.server.logger.Info("client log level set", "level", params.Level)
1138+
ss.server.opts.Logger.Info("client log level set", "level", params.Level)
11411139
return &emptyResult{}, nil
11421140
}
11431141

mcp/streamable.go

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -40,7 +40,6 @@ const (
4040
type StreamableHTTPHandler struct {
4141
getServer func(*http.Request) *Server
4242
opts StreamableHTTPOptions
43-
logger *slog.Logger
4443

4544
onTransportDeletion func(sessionID string) // for testing only
4645

@@ -92,7 +91,6 @@ func NewStreamableHTTPHandler(getServer func(*http.Request) *Server, opts *Strea
9291
if h.opts.Logger == nil { // ensure we have a logger
9392
h.opts.Logger = ensureLogger(nil)
9493
}
95-
h.logger = h.opts.Logger
9694

9795
return h
9896
}

0 commit comments

Comments
 (0)