ACMP MCP Server
Máy chủ MCP cho quản lý máy khách Aagon ACMP: máy khách, kiểm kê, CVE, bản cập nhật còn thiếu, công việc, lệnh máy khách, phiếu trợ giúp, tài sản và kiosk. Đọc dữ liệu chạy ngay lập tức; ghi, chạy tập lệnh và xóa chờ phê duyệt bốn mắt bởi con người. Một tệp EXE Windows duy nhất trên máy chủ ACMP.
Tài liệu
ACMP-MCP-Server
Aagon ACMP für jede KI – mit Aktivitätsprotokoll und Notbremse, direkt auf eurem ACMP-Server.
Schnellstart · Client anbinden · Tools · Sicherheit · Dokumentation
[!NOTE] English: MCP server for Aagon ACMP's Public API, with an activity log of every write/execute/delete action and an emergency brake that blocks them all (the four-eyes approval of version 1 is gone). Runs as a single Windows EXE on the ACMP server and works with any MCP client. Docs are in German because ACMP's user base is mostly DACH; issues in English are welcome.
Ein MCP-Server für die ACMP Public API (Aagon Client Management Platform). Ihr fragt in normaler Sprache, zum Beispiel „Welche Rechner waren seit 30 Tagen offline?“, und die KI holt sich die Antwort direkt aus ACMP.
Auf einen Blick
- Jeder MCP-Client: Claude, ChatGPT/Codex, GitHub Copilot, Gemini, Cursor …
- Breite Abdeckung: Clients, Container, Jobs/Client Commands, Tickets, Assets, Inventar, Schwachstellen und Stammdaten.
- Aktivitätsprotokoll und Notbremse: Alles wirkt sofort, vorher zeigt
dryRuneine Vorschau. Jede Schreib-, Ausführ- und Löschaktion steht mit Bediener, Ziel, Absicht und Ergebnis im Protokoll, und die Notbremse auf der Weboberfläche sperrt sie alle auf einen Klick. Die Vier-Augen-Freigabe von Version 1 gibt es nicht mehr (warum). - Pro Bediener: eigener API-Key und optional eigene ACMP-Identität. ACMP prüft dann die echten Rechte der Person.
- Eine EXE, keine Cloud: läuft direkt auf dem ACMP-Server. Kein IIS, kein .NET-SDK.
- Optional: Client Commands anlegen, freigeben, einsortieren und mit Parametern versehen, den Kiosk pflegen, Windows-Updates ablehnen, Unix Scripts schreiben, individuelle Felder anlegen und Jobs schalten, direkt in der ACMP-Datenbank. Standardmäßig aus.
- Fertige Vorlagen: In der ACMP CTL (Community Template Library) liegen Client-Command-Vorlagen mit jedem Schritt im Klartext.
acmp_lib_installlegt sie als Entwurf in eurer Console an.
Kompatibilität
| Getestet bzw. vorausgesetzt | |
|---|---|
| ACMP | 6.9 und 6.10, mit AESB/SICS und freigeschalteter Public API |
| Schreib-Tools an der Datenbank (CC-, Kiosk-, WUM-, Unix-Script-, Feld- und Job-Writer) | ACMP 6.10 (Unix Scripts gibt es erst ab 6.10). Bei Abweichungen, etwa nach einem ACMP-Update, sperrt die Vorprüfung das Schreiben |
| Server | Windows Server mit .NET Framework 4.8, Admin-Rechte auf dem ACMP-Server |
| MCP | Streamable HTTP (JSON-RPC 2.0), Protokollversion 2025-06-18 |
| KI-Clients | Vorlagen für Claude Code, Claude Desktop (auch als Erweiterung .mcpb), Codex CLI, VS Code/GitHub Copilot, Cursor und Gemini CLI in docs/CLIENTS.md |
Schnellstart
A) Von eurer KI einrichten lassen
Auf dem ACMP-Server das Repo klonen oder als ZIP entpacken. Dort einen KI-Agenten starten, der Befehle ausführen kann (Claude Code, Codex CLI, GitHub Copilot im Agent-Modus, Gemini CLI, Cursor o. Ä.), und eingeben:
Richte diesen ACMP-MCP-Server auf diesem Rechner ein. Folge AGENTS.md Schritt für Schritt,
erkläre mir jeden Admin-Schritt, bevor ich ihn ausführe, und frag mich nie nach Passwörtern
oder API-Keys im Chat.
AGENTS.md enthält den kompletten Ablauf: Prüfung, Installation, Ersteinrichtung, LAN-Freigabe, Client-Anbindung und Fehlersuche. Die meisten Agenten lesen die Datei von selbst. Für Claude Code (CLAUDE.md), Gemini CLI (GEMINI.md) und GitHub Copilot (.github/copilot-instructions.md) liegen Verweise bei.
B) Von Hand: der Assistent im Terminal
Auf dem ACMP-Server eine PowerShell öffnen, ins Repo wechseln und starten. Fehlen Admin-Rechte, startet sich das Skript nach einer Windows-Abfrage (UAC) selbst neu:
.\install.ps1
Zum Schluss zeigt der Assistent euren API-Key und euren Web-Login (Kurzname + Web-Token für Übersicht, Aktivität, Notbremse und Onboarding), auf Wunsch kopiert er den Key in die Zwischenablage. Danach fragt er nach eurem KI-Client und zeigt die fertige Konfiguration dafür.
Was der Assistent in 9 Schritten macht
Bei jedem Schritt erklärt er, was passiert, und schlägt Werte vor (Enter übernimmt):
- Prüft die Voraussetzungen (AESB SICS, Port 3950, .NET, freier Port). Bei einem Fehler sagt er, was zu tun ist.
- Fragt nach der Public API in der ACMP-Konsole und zeigt den Klickpfad.
- Installiert und baut nach
C:\ProgramData\AcmpMcp. Config, Secrets und Logs sind nur für Administratoren und SYSTEM lesbar. - Fragt den SICS-Benutzer ab. Das Passwort wird verdeckt eingegeben.
- Richtet den Dienst ein und prüft die Anmeldung an ACMP. Klappt sie nicht, fragt er die Zugangsdaten erneut ab.
- Legt dich als ersten Administrator an (MCP-API-Key und Web-Login).
- Verknüpft deine eigene ACMP-Identität, wenn du das möchtest. Dann prüft ACMP deine echten Rechte.
- Optionale Funktionen: Ad-hoc-PowerShell, DB-Reports, die Schreib-Tools an der Datenbank.
- Netzwerk: schlägt LAN-IP und Subnetz vor und gibt den Server für die Admin-PCs frei.
Die Klicks in der ACMP-Konsole beschreibt docs/ACMP-VORBEREITUNG.md, zum Beispiel für die Client-Command-Vorlage der Ad-hoc-PowerShell.
Weitere Befehle: Kolleg:innen anlegen, aktualisieren, deinstallieren
Weitere Kolleg:innen legt ihr im Terminal an oder im Browser über /onboarding:
cd C:\ProgramData\AcmpMcp
.\add-user.ps1
| Befehl | Zweck |
|---|---|
.\install.ps1 -CheckOnly | nur prüfen, nichts verändern (kein Admin nötig) |
.\install.ps1 | erneut ausführen = aktualisieren. Konfiguration und Bediener bleiben erhalten, Erledigtes wird übersprungen. Eine Config von Version 1 wird dabei umgestellt (approval → web) |
.\install.ps1 -NonInteractive -SicsUser … -AdminName … | ohne Rückfragen, z. B. für Skripte. Das Passwort kommt aus $env:ACMP_SICS_PASSWORD |
.\set-network-admin.ps1 -BindAddress <IP> | Netzwerk später ändern |
.\renew-web-tokens.ps1 | Web-Tokens erneuern (alle oder -Name …). Die alten gelten danach nicht mehr, die neuen zeigt das Skript nur einmal im Fenster |
.\uninstall-admin.ps1 | Dienst und Firewall-Regel entfernen |
Client anbinden
Jeder MCP-Client, der Streamable HTTP mit eigenem Header kann, verbindet sich direkt:
| URL | http://<HOST>:8765/ |
| Header | Authorization: Bearer <KEY> (persönlicher API-Key von der Setup- bzw. Onboarding-Seite) |
Zum Beispiel Claude Code:
claude mcp add --transport http acmp http://<HOST>:8765/ --header "Authorization: Bearer <KEY>" --scope user
Claude Desktop: acmp-mcp-<version>.mcpb aus den Releases per Doppelklick installieren, dann Server-Adresse und API-Key in den Einstellungen der Erweiterung eintragen.
Fertige Konfigurationen für alle gängigen Clients stehen in docs/CLIENTS.md. Clients, die nur lokale (stdio) Server kennen, binden ihr über die Brücke mcp-remote an.
Funktionsweise
flowchart TB
KI["KI-Client<br/>Claude · Codex · Copilot · Gemini · Cursor"]
subgraph SRV["ACMP-Server"]
MCP["ACMP-MCP-Server<br/>(Windows-EXE)"]
LOG[("Aktivitätsprotokoll<br/>+ Notbremse")]
ACMP[("ACMP<br/>Public API über SICS/AESB")]
DB[("ACMP-Datenbank")]
end
TEAM(["IT im Browser<br/>Weboberfläche"])
KI -->|"MCP · HTTP + API-Key"| MCP
MCP -->|"lesen · schreiben · ausführen"| ACMP
MCP -->|"jede Schreibaktion"| LOG
TEAM -->|"Aktivität ansehen · Notbremse ziehen"| LOG
MCP -.->|"optional: DB-Reports, Writer"| DB
Technische Details
- Der Server verbindet sich über Aagons eigene Client-DLLs (
Aagon.Sis.Sics.*, sind im ACMP-Setup schon vorhanden) mit SICS/AESB (wss://127.0.0.1:3950). Protokoll, Verschlüsselung und Anmeldung sind dadurch dieselben wie in Aagons eigenen Werkzeugen. - Er sendet ICQL-Kommandos an ACMP. Den Routing-Key ermittelt er selbst, den Virtual Router liest er aus der Config (Standard
VCMN). - Die Kommandos stehen als MCP-Tools über JSON-RPC 2.0/HTTP bereit (eigener
TcpListener, keine URL-ACL nötig). - Pro-User: Jeder Bediener hat einen eigenen API-Key und optional eine eigene ACMP-Identität. ACMP prüft dann dessen echte Rechte (
GetOwnUserRights). - Aktivitätsprotokoll und Notbremse: Vor jeder Schreib-, Ausführ- oder Löschaktion schreibt der Server einen Eintrag nach
activity-JJJJ-MM.jsonl. Lässt er sich nicht schreiben, läuft die Aktion nicht. Danach folgt das Ergebnis. Die Notbremse (notbremse.json) sperrt alle diese Tools serverseitig, bis ein Mensch sie auf der Weboberfläche löst. Ob ein Aufruf schreibt, entscheidet der Server (Tool-Liste bzw. Kommandoname), nicht das LLM.dryRungilt nur bei Tools, die ihn wirklich auswerten.
Version 2: ohne Vier-Augen-Freigabe
Bis Version 1 landeten Schreib-, Ausführ- und Löschbefehle als Antrag auf einer Freigabe-Seite und liefen erst nach Zustimmung. In unserer Praxis wurde nie ein Antrag aus Sicherheitsgründen abgelehnt, die Klicks bremsten nur. Seit Version 2 wirken diese Tools sofort. Dafür gibt es:
- Vorschau: Fast alle Schreib-Tools kennen
dryRun: true. Die Hinweise des Servers weisen die KI an, erst die Vorschau zu zeigen und das OK des Menschen im Chat abzuwarten, bei PowerShell und Löschen immer. - Aktivitätsprotokoll: wer wann was auf welchem Ziel getan hat, mit Absicht und Ergebnis. Kennwörter werden maskiert.
- Notbremse: ein Schalter auf der Weboberfläche, der sofort alle Schreib-Tools für alle Bediener sperrt. Lesen und
dryRunlaufen weiter.
Ein Beispiel im Ablauf:
- Ihr schreibt: „Auf PC-0815 ist die Platte voll, räum den Windows-Temp-Ordner auf.“
- Die KI sucht den Rechner (
acmp_get_client_id), prüft die Laufwerke (acmp_low_disk_space) und zeigt euch das PowerShell-Skript. - Nach eurem OK startet sie es (
acmp_run_powershell). Der Aufruf steht sofort im Aktivitätsprotokoll. - Die KI meldet das Ergebnis.
Update von Version 1: git pull und .\install.ps1. Der Assistent stellt die Config um (approval → web, mit Sicherung). Eure bisherigen Freigabe-Tokens sind danach die Web-Logins. Sie standen aber in den Links der Freigabe-Mails: Erneuert sie danach mit .\renew-web-tokens.ps1 (als Administrator im Installationsordner). Auch ohne erneute Installation liest der Server eine alte approval-Section weiter (nur publicUrl, requester und approvers). Offene Freigabe-Anträge werden nicht mehr ausgeführt.
[!IMPORTANT] Ohne Freigabe hängt die Sicherheit an euren Bedienern und daran, wem ihr API-Keys gebt. Behandelt jeden Key wie ein Domänen-Admin-Passwort, lasst die KI keine Anweisungen aus Tickets, Dateien oder Webseiten ausführen und zieht im Zweifel die Notbremse.
Tools
139 Tools in 11 Bereichen. Ein Klick auf einen Bereich zeigt alle Tools mit ihrer Wirkung:
🟢 liest · 🟡 schreibt (wirkt sofort, steht im Protokoll) · 🔴 führt aus oder löscht (kritisch). 🟡 und 🔴 sperrt die Notbremse.
Welche Tools etwas ändern, zeigt auch /settings. Manche Tools brauchen eine optionale Funktion: (DB) die Datenbank-Anbindung (db.connectionString, nur lesend), (PS) die Client-Command-Vorlage (runPowershell.clientCommandId), (CW) den CC-Writer (ccWriter), (KW) den Kiosk-Writer (kioskWriter), (WW) den WUM-Writer (wumWriter), (UW) den Unix-Script-Writer (unixWriter), (FW) den Feld-Writer (cfWriter), (JW) den Job-Writer (jobWriter). Die aktuelle Liste liefert tools/list. Jedes Tool akzeptiert optional format: "json".
System & Allgemein · 10 Tools · Server-Info, eigene Rechte, acmp_call für jedes der 167 API-Kommandos
| Tool | Zweck | |
|---|---|---|
| 🟢 | acmp_server_info | ACMP-Version und Serverdaten |
| 🟢 | acmp_whoami | mit welchem ACMP-Benutzer und welchen Rechten man arbeitet |
| 🟢 | acmp_logout | Verbindung neu aufbauen, z. B. nach einem Token-Wechsel |
| 🟢 | acmp_list_commands, acmp_describe | alle 167 Public-API-Kommandos auflisten und mit Parametern erklären |
| 🟡 | acmp_call | jedes API-Kommando ohne eigenes Tool. Ob es schreibt, entscheidet der Kommandoname (Get…/List… lesen, Delete…/Remove… löschen, sonst schreiben) |
| 🟢 | acmp_discover_tables (DB) | Tabellen in der ACMP-Datenbank suchen („Was hat mit BitLocker zu tun?“) |
| 🟢 | acmp_db_columns (DB) | Spalten einer Tabelle oder View |
| 🟢 | acmp_db_script_rows, acmp_db_script_blob (beide DB) | Zeilen und Binärspalten der Client-Command-, Kiosk-, Unix-Script- und File-Repository-Tabellen (nur diese) |
Clients & Inventar · 14 Tools · „Wer war zuletzt an PC-0815?“, Hardware, Offline-Rechner, individuelle Felder
| Tool | Zweck | |
|---|---|---|
| 🟢 | acmp_get_clients, acmp_get_client_id, acmp_client_info (DB) | Rechner auflisten, ClientId per Computername (über die DB) oder per MachineId und MAC finden, Steckbrief mit IP, MAC und Agent-Version |
| 🟢 | acmp_get_os_info | Betriebssystem und zuletzt angemeldeter Benutzer („Wer war zuletzt an PC-0815?“) |
| 🟢 | acmp_get_hardware, acmp_hardware_profile (DB) | CPU, RAM, Platten, Dienste, Hersteller, Modell, Seriennummer |
| 🟢 | acmp_offline_clients (DB) | Rechner ohne Kontakt seit X Tagen |
| 🟢 | acmp_agent_versions (DB) | Verteilung der Agent-Versionen |
| 🟢 | acmp_low_disk_space (DB) | Laufwerke mit wenig freiem Platz |
| 🟡 | acmp_read_registry, acmp_read_registry_result (beide PS) | einen Registry-Wert vom Client lesen (festes Lese-Skript; läuft als Job auf dem Client, deshalb im Protokoll und bei Notbremse gesperrt) |
| 🟢 | acmp_db_client_attributes (DB) | benutzerdefinierte Felder eines Clients |
| 🟢 | acmp_cf_list (DB) | individuelle Felder mit Tabelle, Spalte und Typ, auf Wunsch die Werte je Client |
| 🟡 | acmp_cf_create (FW) | individuelle Felder für Clients anlegen wie in der Konsole (Ganzzahl oder Text, optional neue Tabelle) |
Software & Sicherheit · 16 Tools · CVEs, fehlende Updates, Updates ablehnen, Defender, BitLocker, Lizenzen
| Tool | Zweck | |
|---|---|---|
| 🟢 | acmp_get_software, acmp_software_inventory (DB), acmp_software_search (DB) | installierte Software je Rechner und Suche („Wo ist 7-Zip drauf?“) |
| 🟢 | acmp_outdated_software (DB) | veraltete Software |
| 🟢 | acmp_missing_updates, acmp_failed_updates (beide DB) | fehlende und fehlgeschlagene Windows-Updates |
| 🟢 | acmp_wum_declined (DB) | abgelehnte Windows-Updates mit Kommentar und betroffenen Clients, mit scope: "open" die offenen Kandidaten |
| 🟡 | acmp_wum_decline, acmp_wum_restore (WW) | Windows-Updates ablehnen wie in der Konsole bzw. die Ablehnung aufheben, höchstens 10 je Auftrag, mit Pflicht-Kommentar |
| 🟢 | acmp_vulnerabilities, acmp_oval_scan_status (beide DB) | Schwachstellen (CVEs) mit Score und Zeitpunkt des letzten Scans |
| 🟢 | acmp_oval_definitions (DB) | flottenweite Suche in den OVAL-Definitionen nach CVE oder Produkt („Kennt ACMP die CVE schon, und wer ist betroffen?“), mit Hinweis, wie viele Clients seit Veröffentlichung gescannt wurden |
| 🟢 | acmp_defender_health (DB) | Defender-Status („Wo ist der Echtzeitschutz aus?“) |
| 🟢 | acmp_bitlocker_status (DB) | BitLocker-Status je Laufwerk |
| 🟢 | acmp_get_licenses, acmp_license_compliance (DB) | Lizenzen mit Über- und Unterdeckung |
Jobs & Ausführen · 14 Tools · Daueraufträge prüfen und schalten, Agentenplaner, Client Command starten, PowerShell als SYSTEM 🔴
| Tool | Zweck | |
|---|---|---|
| 🟢 | acmp_get_client_commands | verfügbare Client Commands |
| 🟢 | acmp_get_jobs, acmp_job_results, acmp_script_history (alle DB) | welche Jobs ein Rechner hat, was auf ihm gelaufen ist und mit welchem Ergebnis |
| 🟢 | acmp_jobs (DB) | Daueraufträge (Jobs an Containern) mit Ziel, Startbedingung im Klartext, Läufen und Fehlern der letzten 7 und 30 Tage und Hinweisen („Welche Jobs laufen stündlich ohne ‚einmalig‘?“) |
| 🟢 | acmp_agent_tasks, acmp_scanner_status, acmp_maintenance_windows (alle DB) | Agentenplaner-Aufgaben (Scanner) mit Startbedingung und Containern, letzte Daten je Client und Scanner, Wartungsfenster |
| 🟡 | acmp_job_set_enabled, acmp_job_restore (JW) | Daueraufträge ab- und wieder einschalten wie in der Konsole, jede Job-Änderung aus der Sicherung zurücknehmen |
| 🔴 | acmp_job_set_condition (JW) | Startbedingung eines Containers setzen (einmalig, beim Agentenstart, täglich, stündlich, im Wartungsfenster). Gilt für alle seine Daueraufträge |
| 🔴 | acmp_job_delete (JW) | Daueraufträge löschen wie in der Konsole, Job-Historie und Job-Vorlage bleiben |
| 🔴 | acmp_enqueue_client_command | einen vorhandenen Client Command starten |
| 🔴 | acmp_run_powershell (PS) | beliebiges PowerShell als SYSTEM auf einem Client |
Jobs ändern kann die Public API nicht. Die Job-Schreib-Tools schreiben deshalb direkt in die ACMP-Datenbank und sind standardmäßig aus. Höchstens 10 Jobs je Auftrag, vorher wird gesichert. Einrichtung: docs/ACMP-VORBEREITUNG.md → „Weitere Schreib-Tools“.
Client Commands · 17 Tools · optional · Entwurf anlegen, neue Version, Parameter, freigeben, einsortieren
Die Public API kann Client Commands nur starten, nicht anlegen. Diese Tools lesen sie deshalb direkt aus der ACMP-Datenbank, legen auf Wunsch Entwürfe an, geben eigene Entwürfe frei und sortieren Commands in Ordner. Das Schreiben ist von Aagon nicht vorgesehen und deshalb standardmäßig aus. Einrichtung: docs/ACMP-VORBEREITUNG.md → „Client Commands direkt schreiben“.
| Tool | Zweck | |
|---|---|---|
| 🟢 | acmp_cc_decode (DB) | Schritte eines Client Commands im Klartext, als Eingabe für einen neuen Entwurf verwendbar. Kennwörter werden maskiert |
| 🟢 | acmp_cc_catalog (DB) | welche Schrittarten in euren Commands vorkommen, mit Feldern und Beispielen |
| 🟢 | acmp_cc_folders (DB) | Ordnerbaum der Client Commands, auf Wunsch mit den Commands je Ordner |
| 🟢 | acmp_cc_writer_status (DB) | Stand des Writers und Ergebnis der Kompatibilitätsprüfung |
| 🟡 | acmp_cc_create_draft, acmp_cc_update_draft (CW) | Entwurf anlegen oder seine Schritte ersetzen (vorher automatische Sicherung) |
| 🟡 | acmp_cc_restore_draft (CW) | Entwurf auf eine Sicherung zurücksetzen |
| 🟡 | acmp_cc_add_file, acmp_cc_remove_file (CW) | Installationsdatei an einen Entwurf hängen oder entfernen (File Repository, mit SHA-256) |
| 🟡 | acmp_cc_new_version (CW) | neue Version eines vorhandenen Commands als Entwurf, auch von freigegebenen und fremden (wie „Speichern“ in der Konsole). Die freigegebene Version läuft weiter, bis die neue freigegeben ist (acmp_cc_release oder Konsole). Die Vorschau (dryRun) zeigt die Änderungen gegenüber der freigegebenen Version |
| 🟡 | acmp_cc_release (CW) | Entwürfe freigeben wie in der Konsole, mehrere in einem Auftrag: eigene neue Commands und neue Versionen aus acmp_cc_new_version (die bisher freigegebene Version wird dabei abgelöst). Erst dryRun, die Vorschau zeigt jeden Command |
| 🟢 | acmp_cc_parameters (DB) | Parameter eines Commands (Text, Auswahl, Kontrollkästchen), die ACMP beim Job und im Kiosk abfragt |
| 🟡 | acmp_cc_set_parameters (CW) | Parameter setzen wie der Dialog in der Konsole, wirkt ohne neue Version |
| 🟡 | acmp_cc_move (CW) | viele Commands in einem Auftrag in andere Ordner verschieben, mit undo |
| 🟡 | acmp_cc_add_folder, acmp_cc_update_folder (CW) | Ordner anlegen (Rechte wie der Elternordner), umbenennen oder verschieben |
| 🟡 | acmp_lib_install (DB, CW) | Vorlage aus der ACMP CTL (Community Template Library) oder einem eigenen Vorlagen-Ordner als Entwurf installieren. Mit dryRun 🟢 auch ohne Writer |
Der Writer ändert nur eigene Entwürfe im erlaubten Ordner und nur für erlaubte Bediener. Vorhandene Commands fasst er nur über acmp_cc_new_version an: als neue Version, nie in Aagon-Standardordnern, Schritt-IDs und gespeicherte Kennwörter bleiben erhalten, einen fremden Entwurf überschreibt er nur auf ausdrücklichen Wunsch (mit Sicherung). Die Vorschau (dryRun) zeigt jeden Schritt mit seinen Feldern.
Vor dem Schreiben prüft der Server die ACMP-Version, Tabellen, Trigger und Rechte des Schreib-Logins. Er packt außerdem die 50 neuesten Commands probeweise aus und wieder ein. Weicht etwas ab, etwa nach einem ACMP-Update, schreibt er nichts. Freigeben geht für eigene Entwürfe und für Versionen, die zuletzt der MCP gespeichert hat. Folgeversionen mit geänderten Dateien gibt er nicht frei, die bleiben Sache der Konsole. Platzhalter wie „HIER … EINTRAGEN“ sperren die Freigabe. Getestet mit ACMP 6.10.
Kiosk · 12 Tools · optional · Einträge, Ordner, Sichtbarkeit, Icons
Auch den ACMP-Kiosk kann die Public API nicht pflegen. Diese Tools lesen und schreiben ihn deshalb direkt in der ACMP-Datenbank. Auch das ist standardmäßig aus. Einrichtung: docs/ACMP-VORBEREITUNG.md → „Kiosk pflegen“.
| Tool | Zweck | |
|---|---|---|
| 🟢 | acmp_kiosk_tree (DB) | Kiosk-Ordner, Einträge und Sichtbarkeitsfilter im Klartext; mit status: true das Ergebnis der Vorprüfung |
| 🟢 | acmp_kiosk_images (DB) | vorhandene Icons und Bilddateien in den erlaubten Quellen, mit Vorschau im Chat |
| 🟡 | acmp_kiosk_add_item (KW) | Client Command oder Managed Software als Kiosk-Eintrag anlegen, mit Icon und Sichtbarkeitsfilter (AD-Gruppe, OU, Benutzer, Container, Stammdaten …) |
| 🟡 | acmp_kiosk_update_items (KW) | viele Einträge in einem Auftrag verschieben, umbenennen, Beschreibung, Icon oder Filter ändern |
| 🟡 | acmp_kiosk_set_filter, acmp_kiosk_remove_item (KW) | Sichtbarkeit eines Eintrags ändern, Eintrag entfernen |
| 🟡 | acmp_kiosk_add_group, acmp_kiosk_update_group (KW) | Kiosk-Ordner anlegen, umbenennen (DE/EN), Icon und Filter ändern |
| 🟡 | acmp_kiosk_add_image, acmp_kiosk_set_image, acmp_kiosk_remove_image (KW) | Icon hochladen (PNG, JPG, ICO, SVG), setzen, ungenutztes eigenes Icon entfernen |
| 🟡 | acmp_kiosk_restore (KW) | eine Kiosk-Änderung aus der automatischen Sicherung zurückholen |
Geschrieben wird nur in Kiosk-Ordnern, die ihr freigebt, und in Ordnern, die der MCP selbst angelegt hat. Vor jeder Änderung sichert der Server den alten Stand. Die Anwender sehen Änderungen nach „Aktualisieren“ im Kiosk.
Unix Scripts · 5 Tools · optional · Bash/Zsh für Linux und macOS, Ausgaben je Client
Unix Scripts (ACMP 6.10, Desktop Automation) laufen über den ACMP Unix Agent als root auf Linux- und macOS-Clients. Auch sie kann die Public API nicht anlegen. Das Schreiben ist standardmäßig aus. Einrichtung: docs/ACMP-VORBEREITUNG.md → „Weitere Schreib-Tools“.
| Tool | Zweck | |
|---|---|---|
| 🟢 | acmp_unix_scripts (DB) | Skripte mit Ordner, Interpreter und freigegebener Version, auf Wunsch alle Versionen mit Verteilungsring und Inhalt |
| 🟢 | acmp_unix_results (DB) | Läufe je Client aus dem Job-Monitor mit der vollständigen Ausgabe (StdOut/StdErr) |
| 🟡 | acmp_unix_script_create (UW) | neues Skript anlegen, Version 1 in Testring 1 |
| 🟡 | acmp_unix_script_new_version (UW) | neue Version anlegen, die Vorschau zeigt die geänderten Zeilen |
| 🟡 | acmp_unix_script_set_ring (UW) | Verteilungsring einer Version ändern, ring: 255 gibt sie frei |
Vorhandene Versionen ändert und löscht der MCP nicht. Einen Unix-Job starten kann er nicht, weil ACMP dafür weder API noch Job Collection hat: Das macht ihr in der Konsole (Container oder Abfrage → „Unix-Jobs ausführen“), das Ergebnis liest danach acmp_unix_results. Ohne freie Unix-Script-Lizenz meldet ACMP den Job als „Erfolg“, das Skript läuft aber nicht. acmp_unix_results weist darauf hin.
Container · 6 Tools · Mitglieder lesen, anlegen, ändern, löschen 🔴
| Tool | Zweck | |
|---|---|---|
| 🟢 | acmp_container_members, acmp_client_containers (beide DB) | Rechner in einem Container und Container eines Rechners |
| 🟡 | acmp_create_container, acmp_save_containers | Container anlegen oder ändern |
| 🟡 | acmp_container_set_restriction (JW) | Client-Beschränkung eines Containers: nur Clients seiner Betriebssystemfamilie oder alle |
| 🔴 | acmp_delete_containers | Container löschen |
Assets & Stammdaten · 25 Tools · Assets verleihen, Kontakte, Standorte, Verträge
| Tool | Zweck | |
|---|---|---|
| 🟢 | acmp_get_asset_list, acmp_get_asset_types | Assets und Asset-Typen |
| 🟡 | acmp_create_asset, acmp_update_asset | Asset anlegen oder ändern |
| 🟡 | acmp_lend_asset, acmp_return_asset | Asset verleihen oder zurücknehmen |
| 🟢 | acmp_get_contacts, _companies, _locations, _departments, _cost_centers | Stammdaten lesen |
| 🟡 | acmp_create_*, acmp_update_* für contact, company, location, department | Stammdaten anlegen oder ändern |
| 🟢 | acmp_get_contracts, acmp_contracts_expiring (DB) | Verträge und bald auslaufende Verträge |
| 🟢 | acmp_get_custom_fields, _custom_field_list, _master_data_settings, _app_settings | Zusatzfelder und Einstellungen lesen |
Helpdesk · 18 Tools · „Mach ein Ticket: Drucker 2. OG druckt nicht.“
| Tool | Zweck | |
|---|---|---|
| 🟢 | acmp_get_tickets, acmp_get_ticket, acmp_tickets_by_query | Tickets lesen, auch über gespeicherte Abfragen |
| 🟢 | acmp_get_ticket_comments, _worktime, _costs, acmp_get_linked_tickets | Verlauf, Zeiten, Kosten, Verknüpfungen |
| 🟢 | acmp_helpdesk_settings, acmp_get_assignees, _ticket_templates, _ticket_categories, _ticket_resolutions, _queries | Helpdesk-Einstellungen |
| 🟡 | acmp_create_ticket | Ticket anlegen („Mach ein Ticket: Drucker 2. OG druckt nicht.“) |
| 🟡 | acmp_update_ticket | Bearbeiter oder Priorität ändern |
| 🟡 | acmp_close_ticket, acmp_reopen_ticket | Ticket schließen oder wieder öffnen |
| 🟡 | acmp_add_ticket_comment | Kommentar ergänzen |
Fernwartung · 2 Tools · TeamViewer-ID und Verbindungslink
| Tool | Zweck | |
|---|---|---|
| 🟢 | acmp_teamviewer_ids (DB) | TeamViewer-IDs aller Clients |
| 🟢 | acmp_teamviewer_connect (DB) | TeamViewer-Link zu einem Rechner, Suche auch per Benutzername |
Beispiel-Prompts stehen in docs/USAGE.md. Neue native Kommandos ergänzt ihr deklarativ in api-tools.json, neue SQL-Reports in db-tools.json. Beides braucht kein Neu-Kompilieren.
Weboberfläche
| Seite | Zweck |
|---|---|
/dashboard | Übersicht: Notbremse, Schreibaktionen heute und in 7 Tagen, letzte Aktivität |
/activity | Aktivitätsprotokoll mit Filter nach Bediener, Tool und Fehlern |
/settings | Notbremse ziehen und lösen, Bediener mit Web-Zugang, alle Tools, die etwas ändern |
/onboarding | weitere Bediener anlegen |
/changelog | Patchverlauf des Servers |
/setup | Ersteinrichtung, nur aktiv, solange es keinen Bediener mit Web-Zugang gibt |
Die Anmeldung (/login) läuft über Kurzname und ein eigenes Web-Token pro Bediener, danach über ein Sitzungs-Cookie (HttpOnly, SameSite=Strict, 12 Stunden). Das Web-Token ist unabhängig vom ACMP- oder MCP-Key: Mit einem abgeflossenen API-Key lässt sich die Notbremse nicht lösen. Alte Links aus Version 1 (?approver=…&token=…) melden nicht mehr an, denn ein Token in der Adresse landet in Mails, Browserverlauf und Proxy-Logs. renew-web-tokens.ps1 erneuert die Web-Tokens.
Konfiguration
config.example.json ist kommentiert (_hinweis-Felder). install.ps1 erzeugt daraus config.local.json.
Wichtige Schlüssel
| Schlüssel | Bedeutung |
|---|---|
sics.username / password | SICS-/AESB-Basisverbindung |
sics.virtualRouter / wssPort | Standard VCMN / 3950 |
mcp.bindAddress / httpPort | Standard 127.0.0.1 / 8765. LAN-Zugriff über set-network-admin.ps1 |
web.publicUrl / web.users | Adresse der Weboberfläche (auch für den Rückkanal von acmp_read_registry) und Bediener mit Web-Zugang |
runPowershell.clientCommandId | optional, aktiviert acmp_run_powershell / acmp_read_registry |
runPowershell.protectedClients / protectedClientIds | optional: weitere Rechner (Computernamen bzw. ClientIds), auf denen der MCP keine Jobs startet. Der ACMP-/MCP-Server selbst ist immer dabei. Ohne DB-Anbindung setzt ihr protectedClientIds (ClientId des ACMP-Servers), sonst lehnt der Server Jobs auf Clients ab |
db.connectionString | optional, aktiviert die DB-Report-Tools |
helpdesk.createdStateId | optional, Ticketstatus für neue Tickets |
ccWriter.* | optional, standardmäßig aus: Client Commands als Entwurf schreiben, freigeben, einsortieren. Einrichten mit setup-cc-writer.ps1, weitere Bediener mit setup-cc-writer.ps1 -AddRequester <name> |
kioskWriter.* | optional, standardmäßig aus: Kiosk pflegen. Setzt den CC-Writer voraus (gleicher SQL-Login). Einrichten mit setup-kiosk-writer.ps1 |
wumWriter.*, unixWriter.*, cfWriter.*, jobWriter.* | optional, standardmäßig aus: Windows-Updates ablehnen, Unix Scripts schreiben, individuelle Felder anlegen, Jobs schalten. Setzen den CC-Writer voraus (gleicher SQL-Login und Bediener). Einrichten mit setup-extra-writers.ps1 |
ctl.sources | optional, Quellen für acmp_lib_install. Standard: Ordner ctl im Installationsordner, dann das Repo Herzog-GmbH/acmp-ctl |
Sicherheit
[!WARNING] Der Server gewährt vollen ACMP-Zugriff bis hin zur Befehlsausführung auf allen Endgeräten. Behandelt jeden API-Key wie ein Admin-Passwort.
- Kein TLS eingebaut. Der Server lauscht standardmäßig nur auf
127.0.0.1und verweigert LAN-Betrieb ohne API-Key. Im LAN beschränkt ihr per Firewall die Quell-Subnetze. Über Netzgrenzen hinweg gehört ein TLS-Proxy oder VPN davor. install.ps1beschränkt den Installationsordner auf Administratoren und SYSTEM, denn dort liegen Zugangsdaten.- Notbremse und Protokoll liegen im Installationsordner (
notbremse.json,activity-*.jsonl). Wer dort schreiben kann, kann beides umgehen, deshalb nur Administratoren und SYSTEM. Auf dem ACMP-/MCP-Server selbst startet der MCP keine Jobs (acmp_run_powershell,acmp_enqueue_client_command,acmp_read_registry,acmp_call), denn ein Skript als SYSTEM könnte dortconfig.local.jsonmit allen Keys lesen. Weitere Rechner, etwa den SQL-Server, schützt ihr mitrunPowershell.protectedClients. - Bediener-Passwörter werden nie gespeichert:
acmp-token-setup.exespeichert nur einen DPAPI-verschlüsselten Token (LocalMachine). /regresult(Rückkanal füracmp_read_registry) ist bewusst ohne Key erreichbar, weil der Client den Key nicht kennt. Er nimmt nur Ergebnisse zu offenen, nicht ratbaren Tokens an.- Sicherheitslücken bitte nicht als öffentliches Issue melden, sondern wie in
SECURITY.mdbeschrieben.
Schreib-Tools an der Datenbank
- Der optionale CC-Writer schreibt mit einem eigenen SQL-Login mit genau den nötigen Rechten (
grant-cc-writer.sql), nie mit dem Lese-Zugang. InSYS_SCRIPTSdarf er nichts löschen. Er legt nur Entwürfe an, sichert vor jeder Änderung und ändert oder gibt nur Commands frei, die er selbst angelegt hat. Fremde Commands ändert er nur als neue Version (acmp_cc_new_version) und verschiebt sie auf Wunsch. Löschen darf er nichts. - Der optionale Kiosk-Writer nutzt denselben Login mit den Rechten aus
grant-kiosk-writer.sql. Ordner löschen darf er nicht, und er schreibt nur in freigegebene Kiosk-Ordner. - WUM-, Unix-Script-, Feld- und Job-Writer nutzen ebenfalls diesen Login (
grant-wum-writer.sql,grant-unix-writer.sql,grant-cf-params.sql,grant-jobs-writer.sql). Updates lehnt der Server nur über die ACMP-eigene Prozedur ab. Unix Scripts und Versionen legt er nur neu an, ändern oder löschen darf er sie nicht. Für individuelle Felder bekommt der Login keine DDL-Rechte: Tabellen und Spalten legen zwei Prozeduren an, die nur genau das Muster des ACMP-Servers bauen. InSYS_Jobsdarf der Login nur Startbedingung und Prüfsumme ändern; Jobs löscht er über die Verknüpfung zur Job-Vorlage, den Rest erledigt der ACMP-Trigger. - Wichtig für das Onboarding: Der SQL-Login gehört dem Server, nicht den Bedienern. Wer die Schreib-Tools nutzen darf, steht in
ccWriter.allowedRequesters(add-user.ps1fragt danach, für Bediener aus/onboarding:setup-cc-writer.ps1 -AddRequester <name>). Die ACMP-Rechte der Person prüft ACMP bei diesen Tools nicht, weil sie an der Public API vorbei in die Datenbank schreiben.
Dokumentation
| Datei | Inhalt |
|---|---|
AGENTS.md | Einrichtungs-Ablauf für KI-Agenten, inkl. Fehlersuche |
docs/ACMP-VORBEREITUNG.md | Klicks in der ACMP-Konsole: Public API, SICS-Benutzer, optionale Funktionen |
docs/CLIENTS.md | Konfiguration für alle gängigen MCP-Clients |
docs/USAGE.md | Cheat-Sheet mit Beispiel-Prompts für Anwender |
config.example.json | kommentierte Beispiel-Konfiguration |
SECURITY.md | Sicherheitslücken vertraulich melden |
Mitmachen
Issues und Pull Requests sind willkommen. Bitte in Issues keine Logs mit Hostnamen, IPs, Benutzernamen, Keys oder Tokens posten, sondern vorher schwärzen.
Lizenz
MIT. Kein offizielles Produkt der Aagon GmbH. ACMP und AESB sind Marken der Aagon GmbH.