using System.Text.Json; using ModelContextProtocol.Protocol; using ModelContextProtocol.Server; namespace LehrerApp.McpBridge; /// /// Einziges Werkzeug, das die Bridge anbietet, solange keine Verbindung zu LehrerApp besteht (siehe /// ). Ohne dieses Werkzeug hätte ein KI-Client keine Möglichkeit zu /// erfahren, WARUM gerade keine LehrerApp-Werkzeuge da sind, sondern sähe nur eine leere /// Werkzeugliste - der Assistent könnte dem Nutzer dann nicht erklären, dass LehrerApp erst /// gestartet werden muss. Versucht bei jedem Aufruf aktiv erneut zu verbinden; klappt das, ersetzt /// dieses Werkzeug automatisch durch die echte Werkzeugliste, und der /// Client wird per "notifications/tools/list_changed" benachrichtigt (siehe /// ). /// internal sealed class StatusMcpServerTool(RealServerBridge bridge) : McpServerTool { public override Tool ProtocolTool { get; } = new() { Name = "lehrerapp_status", Description = "Prüft, ob LehrerApp erreichbar ist, und versucht bei Bedarf erneut zu " + "verbinden. Solange keine Verbindung besteht, sind alle anderen LehrerApp-Werkzeuge " + "(Schüler, Noten, Stundenplanung, Kompetenzen, ...) nicht verfügbar - sie erscheinen erst " + "nach einer erfolgreichen Verbindung in der Werkzeugliste. Bei einer Fehlermeldung eines " + "anderen LehrerApp-Werkzeugs, die auf eine fehlende Verbindung hindeutet, dieses Werkzeug " + "aufrufen, um den Grund zu klären, statt den Nutzer ohne Erklärung zu vertrösten.", InputSchema = JsonDocument.Parse("""{"type":"object","properties":{}}""").RootElement, }; public override IReadOnlyList Metadata { get; } = []; public override async ValueTask InvokeAsync( RequestContext request, CancellationToken cancellationToken) { var connected = await bridge.TryReconnectAsync(cancellationToken); return new CallToolResult { Content = [ new TextContentBlock { Text = connected ? "Verbindung zu LehrerApp hergestellt. Die eigentlichen LehrerApp-Werkzeuge " + "sind jetzt verfügbar." : "LehrerApp läuft nicht oder der MCP-Server ist in den Einstellungen nicht " + "aktiviert. Bitte den Nutzer bitten, LehrerApp zu starten und den " + "MCP-Server in den Einstellungen zu aktivieren - dieses Werkzeug danach " + "erneut aufrufen, um zu prüfen, ob die Verbindung jetzt klappt.", }, ], }; } }