Skip to content
Merged
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
34 changes: 33 additions & 1 deletion src/Smith/App.cs
Original file line number Diff line number Diff line change
@@ -1,5 +1,8 @@
using Microsoft.Extensions.DependencyInjection;
using Microsoft.Extensions.Hosting;
using Microsoft.Extensions.Logging;
using Microsoft.Extensions.Options;
using ModelContextProtocol.Server;

namespace Smith;

Expand All @@ -8,6 +11,30 @@ namespace Smith;
/// </summary>
public static class App
{
class AppBuilder(IServiceCollection services)
{
public IServiceCollection Services => services;
}

class AppServiceFactory(HostApplicationBuilder host) : IServiceProviderFactory<AppBuilder>
{
public AppBuilder CreateBuilder(IServiceCollection services) => new(services);

public IServiceProvider CreateServiceProvider(AppBuilder builder)
{
// If MCP server was registered with AddMcpServer, then tune logging to prevent
// stdio noise from breaking the protocol.
if (host.Services.AsEnumerable().Any(x => x.ServiceType == typeof(IConfigureOptions<McpServerOptions>)))
{
host.Logging.AddConsole(consoleLogOptions =>
{
consoleLogOptions.LogToStandardErrorThreshold = LogLevel.Trace;
});
}
return builder.Services.BuildServiceProvider();
}
}

/// <summary>
/// Invokes the <see cref="Host.CreateApplicationBuilder(string[]?)"/> with additional pre-configured defaults.
/// </summary>
Expand All @@ -19,7 +46,12 @@ public static class App
/// </remarks>
/// <param name="args">The command line args.</param>
/// <returns>The initialized <see cref="HostApplicationBuilder"/>.</returns>
public static HostApplicationBuilder CreateBuilder(string[]? args) => Host.CreateApplicationBuilder(args);
public static HostApplicationBuilder CreateBuilder(string[]? args)
{
var host = Host.CreateApplicationBuilder(args);
host.ConfigureContainer(new AppServiceFactory(host));
return host;
}

/// <summary>
/// Builds the host app and registers the provided <paramref name="main"/> function as a hosted service to be
Expand Down
Loading