diff --git a/internal/mcp/connection.go b/internal/mcp/connection.go index 567573cc..6ecd706b 100644 --- a/internal/mcp/connection.go +++ b/internal/mcp/connection.go @@ -8,6 +8,7 @@ import ( "fmt" "io" "log" + "log/slog" "net/http" "os" "os/exec" @@ -158,11 +159,18 @@ type Connection struct { } // newMCPClient creates a new MCP SDK client with standard implementation details -func newMCPClient() *sdk.Client { +// Pass nil for logger parameter to disable SDK logging (for tests) +func newMCPClient(log *logger.Logger) *sdk.Client { + var slogLogger *slog.Logger + if log != nil { + slogLogger = logger.NewSlogLoggerWithHandler(log) + } return sdk.NewClient(&sdk.Implementation{ Name: "awmg", Version: version.Get(), - }, &sdk.ClientOptions{}) + }, &sdk.ClientOptions{ + Logger: slogLogger, + }) } // newHTTPConnection creates a new HTTP Connection struct with common fields @@ -300,8 +308,8 @@ func NewConnection(ctx context.Context, serverID, command string, args []string, logConn.Printf("Creating new MCP connection: command=%s, args=%v", command, sanitize.SanitizeArgs(args)) ctx, cancel := context.WithCancel(ctx) - // Create MCP client - client := newMCPClient() + // Create MCP client with logger + client := newMCPClient(logConn) // Expand Docker -e flags that reference environment variables // Docker's `-e VAR_NAME` expects VAR_NAME to be in the environment @@ -506,8 +514,8 @@ func trySDKTransport( transportName string, createTransport transportConnector, ) (*Connection, error) { - // Create MCP client - client := newMCPClient() + // Create MCP client with logger + client := newMCPClient(logConn) // Create transport using the provided connector transport := createTransport(url, httpClient) diff --git a/internal/mcp/connection_test.go b/internal/mcp/connection_test.go index 41944d49..5d18bca9 100644 --- a/internal/mcp/connection_test.go +++ b/internal/mcp/connection_test.go @@ -11,6 +11,7 @@ import ( "strings" "testing" + "github.com/github/gh-aw-mcpg/internal/logger" "github.com/stretchr/testify/assert" "github.com/stretchr/testify/require" ) @@ -568,10 +569,17 @@ data: {"jsonrpc":"2.0","id":` + idStr + `,"result":{"tools":[]}} // TestNewMCPClient tests the newMCPClient helper function func TestNewMCPClient(t *testing.T) { - client := newMCPClient() + client := newMCPClient(nil) require.NotNil(t, client, "newMCPClient should return a non-nil client") } +// TestNewMCPClientWithLogger tests that newMCPClient accepts a logger +func TestNewMCPClientWithLogger(t *testing.T) { + log := logger.New("test:client") + client := newMCPClient(log) + require.NotNil(t, client, "newMCPClient should return a non-nil client with logger") +} + // TestCreateJSONRPCRequest tests the createJSONRPCRequest helper function func TestCreateJSONRPCRequest(t *testing.T) { tests := []struct { @@ -687,7 +695,7 @@ func TestNewHTTPConnection(t *testing.T) { ctx, cancel := context.WithCancel(context.Background()) defer cancel() - client := newMCPClient() + client := newMCPClient(nil) url := "http://example.com/mcp" headers := map[string]string{"Authorization": "test"} httpClient := &http.Client{} diff --git a/internal/server/routed.go b/internal/server/routed.go index 8ae94602..0ed2d069 100644 --- a/internal/server/routed.go +++ b/internal/server/routed.go @@ -183,11 +183,13 @@ func CreateHTTPServerForRoutedMode(addr string, unifiedServer *UnifiedServer, ap func createFilteredServer(unifiedServer *UnifiedServer, backendID string) *sdk.Server { logRouted.Printf("Creating filtered server: backend=%s", backendID) - // Create a new SDK server for this route + // Create a new SDK server for this route with logger server := sdk.NewServer(&sdk.Implementation{ Name: fmt.Sprintf("awmg-%s", backendID), Version: "1.0.0", - }, nil) + }, &sdk.ServerOptions{ + Logger: logger.NewSlogLoggerWithHandler(logRouted), + }) // Get tools for this backend from the unified server tools := unifiedServer.GetToolsForBackend(backendID) diff --git a/internal/server/unified.go b/internal/server/unified.go index dba7f19c..4a1f94c0 100644 --- a/internal/server/unified.go +++ b/internal/server/unified.go @@ -132,11 +132,13 @@ func NewUnified(ctx context.Context, cfg *config.Config) (*UnifiedServer, error) enableDIFC: cfg.EnableDIFC, } - // Create MCP server + // Create MCP server with logger server := sdk.NewServer(&sdk.Implementation{ Name: "awmg-unified", Version: "1.0.0", - }, nil) + }, &sdk.ServerOptions{ + Logger: logger.NewSlogLoggerWithHandler(logUnified), + }) us.server = server