AquaSynth/tools/AquaSynthDingsMcp/Program.cs
2026-08-21 21:18:45 +02:00

65 lines
2.6 KiB
C#

using Microsoft.Extensions.DependencyInjection;
using Microsoft.Extensions.Hosting;
using Microsoft.Extensions.Logging;
using Microsoft.AspNetCore.Builder;
using Microsoft.AspNetCore.Hosting;
using AquaSynthDingsMcp;
using AquaSynth.Dings;
if (args is ["--play", var eventId, var instrumentId])
{
var service = new DingService(new DingsHostClient());
await service.PlayAsync(eventId, instrumentId, .7f, CancellationToken.None);
return;
}
if (args is ["--get-volume"])
{
var state = await new DingService(new DingsHostClient()).GetVolumeAsync(CancellationToken.None);
Console.WriteLine($"volume={state.Volume:0.###} muted={state.Muted} hostPid={state.HostProcessId} session=\"{state.SessionName}\"");
return;
}
if (args is ["--set-volume", var volumeText] && float.TryParse(volumeText, System.Globalization.CultureInfo.InvariantCulture, out var volume))
{
var state = await new DingService(new DingsHostClient()).SetVolumeAsync(volume, CancellationToken.None);
Console.WriteLine($"volume={state.Volume:0.###} muted={state.Muted} hostPid={state.HostProcessId}");
return;
}
if (args is ["--mute", var muteText] && bool.TryParse(muteText, out var muted))
{
var state = await new DingService(new DingsHostClient()).SetMutedAsync(muted, CancellationToken.None);
Console.WriteLine($"volume={state.Volume:0.###} muted={state.Muted} hostPid={state.HostProcessId}");
return;
}
if (args is ["--http"] or ["--http", _])
{
var listenUrl = args.Length == 2 ? args[1] : "http://127.0.0.1:17878";
using var singleton = new Mutex(initiallyOwned: true, "Local\\GameCult.AquaSynthDings.McpHttp.v1", out var ownsMutex);
if (!ownsMutex) return;
var webBuilder = WebApplication.CreateBuilder([]);
webBuilder.Logging.ClearProviders();
webBuilder.WebHost.UseUrls(listenUrl);
webBuilder.Services.AddSingleton<IDingsHostClient, DingsHostClient>();
webBuilder.Services.AddSingleton<DingService>();
webBuilder.Services.AddSingleton<AgentInstrumentRegistry>();
webBuilder.Services.AddMcpServer()
.WithHttpTransport(options => options.Stateless = false)
.WithTools<DingTools>();
var app = webBuilder.Build();
app.MapMcp("/mcp");
await app.RunAsync();
return;
}
var builder = Host.CreateApplicationBuilder(args);
builder.Logging.ClearProviders();
builder.Services.AddSingleton<IDingsHostClient, DingsHostClient>();
builder.Services.AddSingleton<DingService>();
builder.Services.AddSingleton<AgentInstrumentRegistry>();
builder.Services.AddMcpServer()
.WithStdioServerTransport()
.WithTools<DingTools>();
await builder.Build().RunAsync();