From c0bb8e3a355a3ec2083e8c0c84ba3c2a3a685e96 Mon Sep 17 00:00:00 2001 From: Stephen Halter Date: Wed, 26 Mar 2025 11:41:54 -0700 Subject: [PATCH 1/2] Use different logger categories for client and server in McpJsonRpcEndpoint --- src/ModelContextProtocol/Client/McpClient.cs | 4 +--- src/ModelContextProtocol/Server/McpServer.cs | 4 +--- src/ModelContextProtocol/Shared/McpJsonRpcEndpoint.cs | 11 +++++------ 3 files changed, 7 insertions(+), 12 deletions(-) diff --git a/src/ModelContextProtocol/Client/McpClient.cs b/src/ModelContextProtocol/Client/McpClient.cs index 244522a67..e7f60c974 100644 --- a/src/ModelContextProtocol/Client/McpClient.cs +++ b/src/ModelContextProtocol/Client/McpClient.cs @@ -15,7 +15,6 @@ namespace ModelContextProtocol.Client; internal sealed class McpClient : McpJsonRpcEndpoint, IMcpClient { private readonly McpClientOptions _options; - private readonly ILogger _logger; private readonly IClientTransport _clientTransport; private volatile bool _isInitializing; @@ -28,10 +27,9 @@ internal sealed class McpClient : McpJsonRpcEndpoint, IMcpClient /// The server configuration. /// The logger factory. public McpClient(IClientTransport transport, McpClientOptions options, McpServerConfig serverConfig, ILoggerFactory? loggerFactory) - : base(transport, loggerFactory) + : base(transport, loggerFactory?.CreateLogger()) { _options = options; - _logger = (ILogger?)loggerFactory?.CreateLogger() ?? NullLogger.Instance; _clientTransport = transport; EndpointName = $"Client ({serverConfig.Id}: {serverConfig.Name})"; diff --git a/src/ModelContextProtocol/Server/McpServer.cs b/src/ModelContextProtocol/Server/McpServer.cs index 64e332d25..184688ba2 100644 --- a/src/ModelContextProtocol/Server/McpServer.cs +++ b/src/ModelContextProtocol/Server/McpServer.cs @@ -14,7 +14,6 @@ namespace ModelContextProtocol.Server; internal sealed class McpServer : McpJsonRpcEndpoint, IMcpServer { private readonly IServerTransport? _serverTransport; - private readonly ILogger _logger; private readonly string _serverDescription; private volatile bool _isInitializing; @@ -28,12 +27,11 @@ internal sealed class McpServer : McpJsonRpcEndpoint, IMcpServer /// Optional service provider to use for dependency injection /// public McpServer(ITransport transport, McpServerOptions options, ILoggerFactory? loggerFactory, IServiceProvider? serviceProvider) - : base(transport, loggerFactory) + : base(transport, loggerFactory?.CreateLogger()) { Throw.IfNull(options); _serverTransport = transport as IServerTransport; - _logger = (ILogger?)loggerFactory?.CreateLogger() ?? NullLogger.Instance; ServerInstructions = options.ServerInstructions; Services = serviceProvider; _serverDescription = $"{options.ServerInfo.Name} {options.ServerInfo.Version}"; diff --git a/src/ModelContextProtocol/Shared/McpJsonRpcEndpoint.cs b/src/ModelContextProtocol/Shared/McpJsonRpcEndpoint.cs index caf2fd0bf..5358d2178 100644 --- a/src/ModelContextProtocol/Shared/McpJsonRpcEndpoint.cs +++ b/src/ModelContextProtocol/Shared/McpJsonRpcEndpoint.cs @@ -28,26 +28,25 @@ internal abstract class McpJsonRpcEndpoint : IAsyncDisposable private readonly Dictionary>> _requestHandlers = []; private int _nextRequestId; private readonly JsonSerializerOptions _jsonOptions; - private readonly ILogger _logger; private bool _isDisposed; + protected readonly ILogger _logger; + /// /// Initializes a new instance of the class. /// /// An MCP transport implementation. - /// The logger factory. - protected McpJsonRpcEndpoint(ITransport transport, ILoggerFactory? loggerFactory = null) + /// The logger. + protected McpJsonRpcEndpoint(ITransport transport, ILogger? logger = null) { Throw.IfNull(transport); - loggerFactory ??= NullLoggerFactory.Instance; - _transport = transport; _pendingRequests = new(); _notificationHandlers = new(); _nextRequestId = 1; _jsonOptions = McpJsonUtilities.DefaultOptions; - _logger = (ILogger?)loggerFactory?.CreateLogger() ?? NullLogger.Instance; + _logger = logger ?? NullLogger.Instance; } /// From 3ceaf16715939793fe79837fe4b98a634df3650a Mon Sep 17 00:00:00 2001 From: Stephen Halter Date: Wed, 26 Mar 2025 18:38:35 -0700 Subject: [PATCH 2/2] Address PR feedback --- src/ModelContextProtocol/Client/McpClient.cs | 2 +- src/ModelContextProtocol/Server/McpServer.cs | 2 +- src/ModelContextProtocol/Shared/McpJsonRpcEndpoint.cs | 6 +++--- 3 files changed, 5 insertions(+), 5 deletions(-) diff --git a/src/ModelContextProtocol/Client/McpClient.cs b/src/ModelContextProtocol/Client/McpClient.cs index e7f60c974..1ae358ef4 100644 --- a/src/ModelContextProtocol/Client/McpClient.cs +++ b/src/ModelContextProtocol/Client/McpClient.cs @@ -27,7 +27,7 @@ internal sealed class McpClient : McpJsonRpcEndpoint, IMcpClient /// The server configuration. /// The logger factory. public McpClient(IClientTransport transport, McpClientOptions options, McpServerConfig serverConfig, ILoggerFactory? loggerFactory) - : base(transport, loggerFactory?.CreateLogger()) + : base(transport, loggerFactory) { _options = options; _clientTransport = transport; diff --git a/src/ModelContextProtocol/Server/McpServer.cs b/src/ModelContextProtocol/Server/McpServer.cs index 184688ba2..4c0c6b564 100644 --- a/src/ModelContextProtocol/Server/McpServer.cs +++ b/src/ModelContextProtocol/Server/McpServer.cs @@ -27,7 +27,7 @@ internal sealed class McpServer : McpJsonRpcEndpoint, IMcpServer /// Optional service provider to use for dependency injection /// public McpServer(ITransport transport, McpServerOptions options, ILoggerFactory? loggerFactory, IServiceProvider? serviceProvider) - : base(transport, loggerFactory?.CreateLogger()) + : base(transport, loggerFactory) { Throw.IfNull(options); diff --git a/src/ModelContextProtocol/Shared/McpJsonRpcEndpoint.cs b/src/ModelContextProtocol/Shared/McpJsonRpcEndpoint.cs index 5358d2178..175a60be3 100644 --- a/src/ModelContextProtocol/Shared/McpJsonRpcEndpoint.cs +++ b/src/ModelContextProtocol/Shared/McpJsonRpcEndpoint.cs @@ -36,8 +36,8 @@ internal abstract class McpJsonRpcEndpoint : IAsyncDisposable /// Initializes a new instance of the class. /// /// An MCP transport implementation. - /// The logger. - protected McpJsonRpcEndpoint(ITransport transport, ILogger? logger = null) + /// The logger factory. + protected McpJsonRpcEndpoint(ITransport transport, ILoggerFactory? loggerFactory = null) { Throw.IfNull(transport); @@ -46,7 +46,7 @@ protected McpJsonRpcEndpoint(ITransport transport, ILogger? logger = null) _notificationHandlers = new(); _nextRequestId = 1; _jsonOptions = McpJsonUtilities.DefaultOptions; - _logger = logger ?? NullLogger.Instance; + _logger = loggerFactory?.CreateLogger(GetType()) ?? NullLogger.Instance; } ///