Neue CompetencyTools.cs: create/update/delete_subject, create/update/delete_competency_domain, add/update/remove_competency_item, get_subjects, get_competency_catalog. delete_subject und delete_competency_domain als weitere Destructive-Ausnahmen neben delete_lesson (kein Papierkorb). Lesson bekommt ein neues Competencies-Feld (analog zu Unit.Competencies) sowie add_lesson_competency/remove_lesson_competency in LessonPlanTools.cs. ICompetencyDomainRepository um GetBySubject() erweitert, um den Katalog eines Fachs ohne bekannte Klassenstufe abzufragen. Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
71 lines
3.0 KiB
C#
71 lines
3.0 KiB
C#
namespace LehrerApp.Desktop.Services.Mcp;
|
|
|
|
/// <summary>
|
|
/// Allowlist der über MCP exponierten Tool-Namen. Dieselbe Absicherung wie
|
|
/// LehrerApp.Api/PlainEventStore.cs (dort für den Klartext-Sync-Kanal): Gesprächsnotizen, Vorfälle
|
|
/// und Förderpläne (Documentation/Vorgang) sind hier bewusst nie aufgeführt und werden von keiner
|
|
/// Tool-Klasse referenziert — ein KI-Client kann diese Daten technisch nicht erreichen, unabhängig
|
|
/// davon, wie vertrauenswürdig der lokale Modell-Client erscheint oder wie die Tool-Liste künftig
|
|
/// wächst. <see cref="McpServerHostedService"/> registriert nur exakt diese Namen.
|
|
/// </summary>
|
|
public static class McpToolScope
|
|
{
|
|
public static readonly IReadOnlyCollection<string> AllowedReadTools =
|
|
[
|
|
"get_students",
|
|
"get_exams",
|
|
"get_grades",
|
|
"get_schedule",
|
|
"get_time_entries",
|
|
"get_lesson_plans",
|
|
"download_lesson_attachment",
|
|
"list_letter_templates",
|
|
"render_letter",
|
|
"get_subjects",
|
|
"get_competency_catalog",
|
|
];
|
|
|
|
/// <summary>Write-Tools (Phase 2+3) — jeder Aufruf läuft über <see cref="IMcpConfirmationService"/>,
|
|
/// bevor irgendetwas geschrieben wird (siehe die jeweilige Tool-Klasse). Absichtlich kleinteilig
|
|
/// bei Unit/Lesson (create/update_unit, create/update_lesson, add/update/remove_lesson_phase)
|
|
/// statt eines einzelnen "update_lesson" für die ganze Stunde inkl. Verlaufsplan — siehe
|
|
/// Begründung in LessonPlanTools.</summary>
|
|
public static readonly IReadOnlyCollection<string> AllowedWriteTools =
|
|
[
|
|
"create_time_entry",
|
|
"create_grade_entry",
|
|
"update_student_group_assignment",
|
|
"create_unit",
|
|
"update_unit",
|
|
"create_lesson",
|
|
"update_lesson",
|
|
"add_lesson_phase",
|
|
"update_lesson_phase",
|
|
"remove_lesson_phase",
|
|
"add_lesson_attachment",
|
|
"move_lesson",
|
|
"add_lesson_competency",
|
|
"remove_lesson_competency",
|
|
"create_subject",
|
|
"update_subject",
|
|
"create_competency_domain",
|
|
"update_competency_domain",
|
|
"add_competency_item",
|
|
"update_competency_item",
|
|
"remove_competency_item",
|
|
];
|
|
|
|
/// <summary>Löschende Write-Tools — ursprünglich eine bewusste, gezielte Ausnahme von der sonst
|
|
/// geltenden "v1 ohne Lösch-Tools"-Regel für "delete_lesson" (siehe Planungsdokument), inzwischen
|
|
/// (Nutzer-Nachtrag) um die endgültigen Löschungen für Fächer/Kompetenzbereiche erweitert — beide
|
|
/// ohne Papierkorb, wie delete_lesson. Getrennt von <see cref="AllowedWriteTools"/> aufgeführt,
|
|
/// damit diese Ausnahme beim Lesen sofort auffällt. <see cref="McpServerHostedService"/>
|
|
/// registriert diese Tools zusätzlich mit <c>Destructive = true</c>.</summary>
|
|
public static readonly IReadOnlyCollection<string> AllowedDestructiveWriteTools =
|
|
[
|
|
"delete_lesson",
|
|
"delete_subject",
|
|
"delete_competency_domain",
|
|
];
|
|
}
|