using ModelContextProtocol.Configuration;
using ModelContextProtocol.Protocol.Transport;
using ModelContextProtocol.Server;
using Microsoft.Extensions.DependencyInjection;
using Microsoft.Extensions.Logging;
using Microsoft.Extensions.Options;
namespace ModelContextProtocol;
///
/// Extension to host the MCP server
///
public static class McpServerServiceCollectionExtension
{
///
/// Adds the MCP server to the service collection with default options.
///
///
///
///
public static IMcpServerBuilder AddMcpServer(this IServiceCollection services, Action? configureOptions = null)
{
services.AddSingleton(services =>
{
IServerTransport serverTransport = services.GetRequiredService();
IOptions options = services.GetRequiredService>();
ILoggerFactory? loggerFactory = services.GetService();
return McpServerFactory.Create(serverTransport, options.Value, loggerFactory, services);
});
services.AddOptions();
services.AddTransient, McpServerOptionsSetup>();
if (configureOptions is not null)
{
services.Configure(configureOptions);
}
return new DefaultMcpServerBuilder(services);
}
}