mcp: set default logging level to info (#411)

During initialization, the default logging level is set to info allowing
servers to emit logs immediately without waiting for a client to set a
log level.
The updated example shows how to send a notification in the context of
the request.

Fixes #387
This commit is contained in:
ln-12 2025-09-04 17:10:39 +02:00 • committed by GitHub
commit 4257528dde
No known key found for this signature in database
GPG key ID: B5690EEEBB952194
2 changed files with 5 additions and 1 deletions

View file

@ -144,7 +144,7 @@ func parent() {
}
func child(port string) {
// Create a server with a single tool that increments a counter.
// Create a server with a single tool that increments a counter and sends a notification.
server := mcp.NewServer(&mcp.Implementation{Name: "counter"}, nil)
var count atomic.Int64
@ -153,6 +153,9 @@ func child(port string) {
if *verbose {
log.Printf("request %d (session %s)", n, req.Session.ID())
}
// Send a notification in the context of the request
// Hint: in stateless mode, at least log level 'info' is required to send notifications
req.Session.Log(ctx, &mcp.LoggingMessageParams{Data: fmt.Sprintf("request %d (session %s)", n, req.Session.ID()), Level: "info"})
return nil, struct{ Count int64 }{n}, nil
}
mcp.AddTool(server, &mcp.Tool{Name: "inc"}, inc)

View file

@ -282,6 +282,7 @@ func (h *StreamableHTTPHandler) ServeHTTP(w http.ResponseWriter, req *http.Reque
if !hasInitialized {
state.InitializedParams = new(InitializedParams)
}
state.LogLevel = "info"
connectOpts = &ServerSessionOptions{
State: state,
}