Schließt die MCP-Server-Spec ab. "Worksheets" aus der Spec entsprechen im tatsächlichen Datenmodell den .lavorlage-Elternbrief-Vorlagen (LehrerApp.Templating) - es gibt kein separates Arbeitsblatt-Konzept mit Fach/Klassenstufe-Metadaten. Neue Tools list_letter_templates (Read) und render_letter (Read, liefert Base64-PDF, kein DB-Schreibzugriff). upload_worksheet/update_worksheet bewusst nicht umgesetzt: das Seitenlayout ist eine eigene positionsbasierte DSL mit eigenem visuellen Editor (LehrerApp.TemplateDesigner) - ein LLM müsste sie blind erzeugen, mit hohem Risiko für kaputte Layouts. Platzhalter-Logik aus CreateLetterDialogViewModel nach LetterPlaceholderBuilder extrahiert, damit Dialog und MCP-Tool nicht auseinanderdriften. Neuer McpClientRegistrationService trägt den Bridge-Pfad in Claude Desktops claude_desktop_config.json ein (Button in den Einstellungen, nie automatisch), ohne bestehende Fremdeinträge zu verlieren und ohne eine nicht lesbare Konfigurationsdatei zu überschreiben. Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
43 lines
1.7 KiB
C#
43 lines
1.7 KiB
C#
using CommunityToolkit.Mvvm.ComponentModel;
|
|
using CommunityToolkit.Mvvm.Input;
|
|
using LehrerApp.Desktop.Services;
|
|
using LehrerApp.Desktop.Services.Mcp;
|
|
|
|
namespace LehrerApp.Desktop.ViewModels.Settings;
|
|
|
|
public partial class SettingsViewModel
|
|
{
|
|
// ── MCP-Server (lokal, Phase 1) ──────────────────────────────────────────
|
|
|
|
[ObservableProperty] private bool _mcpEnabled;
|
|
|
|
private void LoadMcpSettings() => McpEnabled = _mcpSettings.Enabled;
|
|
|
|
// Kein Live-Reload (siehe McpServerHostedService/Planungsdokument) - der Pipe-Listener wird
|
|
// nur beim App-Start eingerichtet, deshalb wirkt eine Änderung hier erst nach Neustart.
|
|
partial void OnMcpEnabledChanged(bool value) => _mcpSettings.SetEnabled(value);
|
|
|
|
// ── MCP: Registrierung bei Claude Desktop ─────────────────────────────────
|
|
|
|
[ObservableProperty] private string _mcpRegistrationStatus = "";
|
|
[ObservableProperty] private bool _mcpIsRegisteredWithClaude;
|
|
|
|
private void LoadMcpRegistrationStatus() => McpIsRegisteredWithClaude = _mcpRegistration.IsRegistered();
|
|
|
|
[RelayCommand]
|
|
private void RegisterWithClaudeDesktop()
|
|
{
|
|
var result = _mcpRegistration.Register();
|
|
McpRegistrationStatus = result.Message;
|
|
McpIsRegisteredWithClaude = _mcpRegistration.IsRegistered();
|
|
}
|
|
|
|
[RelayCommand]
|
|
private void UnregisterFromClaudeDesktop()
|
|
{
|
|
var result = _mcpRegistration.Unregister();
|
|
McpRegistrationStatus = result.Message;
|
|
McpIsRegisteredWithClaude = _mcpRegistration.IsRegistered();
|
|
}
|
|
}
|