logging.go (view raw)
1// Copyright 2025 The Go MCP SDK Authors. All rights reserved.
2// Use of this source code is governed by an MIT-style
3// license that can be found in the LICENSE file.
4
5package main
6
7import (
8 "context"
9 "log"
10 "time"
11
12 "github.com/modelcontextprotocol/go-sdk/mcp"
13)
14
15// createLoggingMiddleware creates an MCP middleware that logs method calls.
16func createLoggingMiddleware() mcp.Middleware {
17 return func(next mcp.MethodHandler) mcp.MethodHandler {
18 return func(
19 ctx context.Context,
20 method string,
21 req mcp.Request,
22 ) (mcp.Result, error) {
23 start := time.Now()
24 sessionID := req.GetSession().ID()
25
26 // Log request details.
27 log.Printf("[REQUEST] Session: %s | Method: %s",
28 sessionID,
29 method)
30
31 // Call the actual handler.
32 result, err := next(ctx, method, req)
33
34 // Log response details.
35 duration := time.Since(start)
36
37 if err != nil {
38 log.Printf("[RESPONSE] Session: %s | Method: %s | Status: ERROR | Duration: %v | Error: %v",
39 sessionID,
40 method,
41 duration,
42 err)
43 } else {
44 log.Printf("[RESPONSE] Session: %s | Method: %s | Status: OK | Duration: %v",
45 sessionID,
46 method,
47 duration)
48 }
49
50 return result, err
51 }
52 }
53}