Skip to content

Commit 729c8b5

Browse files
authored
Make logging optional in all public APIs (#72)
1 parent 2c852f0 commit 729c8b5

File tree

4 files changed

+36
-13
lines changed

4 files changed

+36
-13
lines changed

src/mcpdotnet/Client/McpClientFactory.cs

Lines changed: 14 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@
44
using McpDotNet.Logging;
55
using McpDotNet.Protocol.Transport;
66
using Microsoft.Extensions.Logging;
7+
using Microsoft.Extensions.Logging.Abstractions;
78

89
namespace McpDotNet.Client;
910
/// <summary>
@@ -43,10 +44,22 @@ public class McpClientFactory : IDisposable
4344
public McpClientFactory(
4445
IEnumerable<McpServerConfig> serverConfigs,
4546
McpClientOptions clientOptions,
46-
ILoggerFactory loggerFactory,
47+
ILoggerFactory? loggerFactory = null,
4748
Func<McpServerConfig, IClientTransport>? transportFactoryMethod = null,
4849
Func<IClientTransport, McpServerConfig, McpClientOptions, IMcpClient>? clientFactoryMethod = null)
4950
{
51+
if (serverConfigs is null)
52+
{
53+
throw new ArgumentNullException(nameof(serverConfigs));
54+
}
55+
56+
if (clientOptions is null)
57+
{
58+
throw new ArgumentNullException(nameof(clientOptions));
59+
}
60+
61+
loggerFactory ??= NullLoggerFactory.Instance;
62+
5063
_serverConfigs = serverConfigs.ToDictionary(c => c.Id);
5164
_clientOptions = clientOptions;
5265
_loggerFactory = loggerFactory;

src/mcpdotnet/Protocol/Transport/StdioClientTransport.cs

Lines changed: 14 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,7 @@
88
using McpDotNet.Utils;
99
using McpDotNet.Utils.Json;
1010
using Microsoft.Extensions.Logging;
11+
using Microsoft.Extensions.Logging.Abstractions;
1112

1213
namespace McpDotNet.Protocol.Transport;
1314

@@ -18,7 +19,7 @@ public sealed class StdioClientTransport : TransportBase, IClientTransport
1819
{
1920
private readonly StdioClientTransportOptions _options;
2021
private readonly McpServerConfig _serverConfig;
21-
private readonly ILogger<StdioClientTransport> _logger;
22+
private readonly ILogger _logger;
2223
private readonly JsonSerializerOptions _jsonOptions;
2324
private Process? _process;
2425
private Task? _readTask;
@@ -33,12 +34,22 @@ public sealed class StdioClientTransport : TransportBase, IClientTransport
3334
/// <param name="options">Configuration options for the transport.</param>
3435
/// <param name="serverConfig">The server configuration for the transport.</param>
3536
/// <param name="loggerFactory">A logger factory for creating loggers.</param>
36-
public StdioClientTransport(StdioClientTransportOptions options, McpServerConfig serverConfig, ILoggerFactory loggerFactory)
37+
public StdioClientTransport(StdioClientTransportOptions options, McpServerConfig serverConfig, ILoggerFactory? loggerFactory = null)
3738
: base(loggerFactory)
3839
{
40+
if (options is null)
41+
{
42+
throw new ArgumentNullException(nameof(options));
43+
}
44+
45+
if (serverConfig is null)
46+
{
47+
throw new ArgumentNullException(nameof(serverConfig));
48+
}
49+
3950
_options = options;
4051
_serverConfig = serverConfig;
41-
_logger = loggerFactory.CreateLogger<StdioClientTransport>();
52+
_logger = (ILogger?)loggerFactory?.CreateLogger<StdioClientTransport>() ?? NullLogger.Instance;
4253
_jsonOptions = JsonSerializerOptionsExtensions.DefaultOptions;
4354
}
4455

src/mcpdotnet/Server/McpServerFactory.cs

Lines changed: 8 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
11
using McpDotNet.Protocol.Transport;
22
using Microsoft.Extensions.Logging;
3+
using Microsoft.Extensions.Logging.Abstractions;
34
using Microsoft.Extensions.Options;
45

56
namespace McpDotNet.Server;
@@ -31,11 +32,16 @@ public class McpServerFactory : IMcpServerFactory
3132
/// <param name="serviceProvider">Optional service provider to create new instances.</param>
3233
/// <param name="loggerFactory">Logger factory to use for logging</param>
3334
/// <param name="serverDelegates"></param>
34-
public McpServerFactory(IServerTransport serverTransport, McpServerOptions options, ILoggerFactory loggerFactory, IOptions<McpServerDelegates>? serverDelegates = null, IServiceProvider? serviceProvider = null)
35+
public McpServerFactory(
36+
IServerTransport serverTransport,
37+
McpServerOptions options,
38+
ILoggerFactory? loggerFactory = null,
39+
IOptions<McpServerDelegates>? serverDelegates = null,
40+
IServiceProvider? serviceProvider = null)
3541
{
3642
_serverTransport = serverTransport ?? throw new ArgumentNullException(nameof(serverTransport));
3743
_options = options ?? throw new ArgumentNullException(nameof(options));
38-
_loggerFactory = loggerFactory ?? throw new ArgumentNullException(nameof(loggerFactory));
44+
_loggerFactory = loggerFactory ?? NullLoggerFactory.Instance;
3945
_serverDelegates = serverDelegates?.Value;
4046
_serviceProvider = serviceProvider;
4147
}

tests/mcpdotnet.Tests/Server/McpServerFactoryTests.cs

Lines changed: 0 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -53,13 +53,6 @@ public void Constructor_Throws_For_Null_Options()
5353
Assert.Throws<ArgumentNullException>(() => new McpServerFactory(_serverTransport.Object, null!, _loggerFactory.Object, _serverDelegates.Object, _serviceProvider));
5454
}
5555

56-
[Fact]
57-
public void Constructor_Throws_For_Null_Logger()
58-
{
59-
// Arrange, Act & Assert
60-
Assert.Throws<ArgumentNullException>(() => new McpServerFactory(_serverTransport.Object, _options, null!, _serverDelegates.Object, _serviceProvider));
61-
}
62-
6356
[Fact]
6457
public void Constructor_Does_Not_Throw_For_Null_ServerDelegates()
6558
{

0 commit comments

Comments
 (0)