Skip to content

Commit 34b958c

Browse files
Copilotlpcox
andcommitted
Add logger integration to MCP SDK ClientOptions and ServerOptions
Co-authored-by: lpcox <15877973+lpcox@users.noreply.github.com>
1 parent c20be21 commit 34b958c

4 files changed

Lines changed: 32 additions & 12 deletions

File tree

internal/mcp/connection.go

Lines changed: 14 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,7 @@ import (
88
"fmt"
99
"io"
1010
"log"
11+
"log/slog"
1112
"net/http"
1213
"os"
1314
"os/exec"
@@ -158,11 +159,18 @@ type Connection struct {
158159
}
159160

160161
// newMCPClient creates a new MCP SDK client with standard implementation details
161-
func newMCPClient() *sdk.Client {
162+
// Pass nil for logger parameter to disable SDK logging (for tests)
163+
func newMCPClient(log *logger.Logger) *sdk.Client {
164+
var slogLogger *slog.Logger
165+
if log != nil {
166+
slogLogger = logger.NewSlogLoggerWithHandler(log)
167+
}
162168
return sdk.NewClient(&sdk.Implementation{
163169
Name: "awmg",
164170
Version: version.Get(),
165-
}, &sdk.ClientOptions{})
171+
}, &sdk.ClientOptions{
172+
Logger: slogLogger,
173+
})
166174
}
167175

168176
// newHTTPConnection creates a new HTTP Connection struct with common fields
@@ -300,8 +308,8 @@ func NewConnection(ctx context.Context, serverID, command string, args []string,
300308
logConn.Printf("Creating new MCP connection: command=%s, args=%v", command, sanitize.SanitizeArgs(args))
301309
ctx, cancel := context.WithCancel(ctx)
302310

303-
// Create MCP client
304-
client := newMCPClient()
311+
// Create MCP client with logger
312+
client := newMCPClient(logConn)
305313

306314
// Expand Docker -e flags that reference environment variables
307315
// Docker's `-e VAR_NAME` expects VAR_NAME to be in the environment
@@ -506,8 +514,8 @@ func trySDKTransport(
506514
transportName string,
507515
createTransport transportConnector,
508516
) (*Connection, error) {
509-
// Create MCP client
510-
client := newMCPClient()
517+
// Create MCP client with logger
518+
client := newMCPClient(logConn)
511519

512520
// Create transport using the provided connector
513521
transport := createTransport(url, httpClient)

internal/mcp/connection_test.go

Lines changed: 10 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -11,6 +11,7 @@ import (
1111
"strings"
1212
"testing"
1313

14+
"github.com/github/gh-aw-mcpg/internal/logger"
1415
"github.com/stretchr/testify/assert"
1516
"github.com/stretchr/testify/require"
1617
)
@@ -568,10 +569,17 @@ data: {"jsonrpc":"2.0","id":` + idStr + `,"result":{"tools":[]}}
568569

569570
// TestNewMCPClient tests the newMCPClient helper function
570571
func TestNewMCPClient(t *testing.T) {
571-
client := newMCPClient()
572+
client := newMCPClient(nil)
572573
require.NotNil(t, client, "newMCPClient should return a non-nil client")
573574
}
574575

576+
// TestNewMCPClientWithLogger tests that newMCPClient accepts a logger
577+
func TestNewMCPClientWithLogger(t *testing.T) {
578+
log := logger.New("test:client")
579+
client := newMCPClient(log)
580+
require.NotNil(t, client, "newMCPClient should return a non-nil client with logger")
581+
}
582+
575583
// TestCreateJSONRPCRequest tests the createJSONRPCRequest helper function
576584
func TestCreateJSONRPCRequest(t *testing.T) {
577585
tests := []struct {
@@ -687,7 +695,7 @@ func TestNewHTTPConnection(t *testing.T) {
687695
ctx, cancel := context.WithCancel(context.Background())
688696
defer cancel()
689697

690-
client := newMCPClient()
698+
client := newMCPClient(nil)
691699
url := "http://example.com/mcp"
692700
headers := map[string]string{"Authorization": "test"}
693701
httpClient := &http.Client{}

internal/server/routed.go

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -183,11 +183,13 @@ func CreateHTTPServerForRoutedMode(addr string, unifiedServer *UnifiedServer, ap
183183
func createFilteredServer(unifiedServer *UnifiedServer, backendID string) *sdk.Server {
184184
logRouted.Printf("Creating filtered server: backend=%s", backendID)
185185

186-
// Create a new SDK server for this route
186+
// Create a new SDK server for this route with logger
187187
server := sdk.NewServer(&sdk.Implementation{
188188
Name: fmt.Sprintf("awmg-%s", backendID),
189189
Version: "1.0.0",
190-
}, nil)
190+
}, &sdk.ServerOptions{
191+
Logger: logger.NewSlogLoggerWithHandler(logRouted),
192+
})
191193

192194
// Get tools for this backend from the unified server
193195
tools := unifiedServer.GetToolsForBackend(backendID)

internal/server/unified.go

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -132,11 +132,13 @@ func NewUnified(ctx context.Context, cfg *config.Config) (*UnifiedServer, error)
132132
enableDIFC: cfg.EnableDIFC,
133133
}
134134

135-
// Create MCP server
135+
// Create MCP server with logger
136136
server := sdk.NewServer(&sdk.Implementation{
137137
Name: "awmg-unified",
138138
Version: "1.0.0",
139-
}, nil)
139+
}, &sdk.ServerOptions{
140+
Logger: logger.NewSlogLoggerWithHandler(logUnified),
141+
})
140142

141143
us.server = server
142144

0 commit comments

Comments
 (0)