MCP fuer IT + Betrieb

Zielpublikum

Administrator oder Betriebs-Verantwortliche. Aufgaben:

  • ForgeIEC Studio auf Workstations installieren + ausrollen
  • Netzwerk-Anbindung absichern
  • Identitaeten + Trust-Store verwalten
  • Logs auswerten, Monitoring anbinden
  • Probleme im laufenden Betrieb diagnostizieren

Netzwerk

AspektWert
Default-Port7531 (TCP)
Override per QSettingsmcp/bind_port
Bind-Adresse127.0.0.1 ohne Inbound-Profile; 0.0.0.0 mit
Endpoints/mcp/v1/info, /mcp/v1/manifest, /mcp/v1/rpc, /mcp/v1/events
TLSaktiv bei 0.0.0.0-Bind, optional bei 127.0.0.1
Long-lived ConnectionsSSE-Streams pro aktivem Watch (auf /mcp/v1/events)

Firewall-Regeln pro Workstation:

# eingehend: 7531/tcp von definierten Peer-IPs
iptables -A INPUT -p tcp --dport 7531 -s <peer-cidr> -j ACCEPT
iptables -A INPUT -p tcp --dport 7531 -j REJECT

Zertifikate

Server-Cert

PfadInhalt
~/.config/ForgeIEC/mcp/server.crtRSA-4096, SAN-bound, 10 Jahre
~/.config/ForgeIEC/mcp/server.keyRSA-4096 Private Key, 600
~/.config/ForgeIEC/mcp/server.sanSAN-Manifest (regeneriert Cert bei Aenderung)

Auto-Generation beim ersten Server-Start. Regeneration bei Bind-Adress-Aenderung (RFC-6125-SAN-Compliance).

Trust-Store (mTLS-Modus)

PfadInhalt
~/.config/ForgeIEC/mcp/trust/*.pemTeam-CA-Cert(s) — als Trust-Anker
~/.config/ForgeIEC/mcp/trust/peers.tomlsignierte Member-Liste
~/.config/ForgeIEC/mcp/trust/revoked.tomlsignierte Revocations-Liste

Hot-Reload beim Drop/Modify dieser Dateien (QFileSystemWatcher, 200 ms Debounce).

Caretaker-CA (nur falls Caretaker-Rolle aktiv)

PfadInhalt
~/.config/ForgeIEC/mcp/ca-team/ca.crtTeam-CA-Cert
~/.config/ForgeIEC/mcp/ca-team/ca.keyTeam-CA-Private-Key, 600

Backup-relevant. Verlust = Team kann keine neuen Member mehr ausstellen + keine bestehenden mehr widerrufen.


Identitaeten + Tokens

QuelleInhalt
Bearer-Token pro ProfilQSettings mcp/profiles/<name>/bearer_token
Inbound-Allow-ListQSettings mcp/profiles/<name>/accepts_inbound_mcp
Member-Certvon Caretaker signiertes Cert in peers.toml

Token-Rotation:

  1. Preferences → AI → Profile, Token regenerieren
  2. Neuen Token an Clients ausgeben
  3. Editor neustarten

Log-Dateien

PfadFormatRotation
~/.config/ForgeIEC/mcp_audit.logJSONL append-onlykeine (manuelles Trim bei Bedarf)
journalctl -u anvildsystemd-Journalsystemd-Defaults
journalctl -u bellowsdsystemd-Journalsystemd-Defaults
Editor-Logsstderr + editor.recent_logs MCP-Tool (500-Eintraege Ring)flüchtig

Audit-Log-Format

JSON-Objekt pro Zeile:

{"ts":"2026-05-12T20:13:05Z",
 "tool":"project.write.add_variable",
 "args":{"name":"LED_00","iec_type":"BOOL","address":"%MX0.0"},
 "choice":"yes",
 "caller":"local"}

Empfohlene Auswertung: jq oder Loki/Promtail mit JSON-Parser.


Backup

Datei/VerzeichnisKategorie
~/.config/ForgeIEC/mcp/ca-team/kritisch (Caretaker-Workstation)
~/.config/ForgeIEC/mcp/trust/wichtig (Trust-Store + Roster)
~/.config/ForgeIEC/mcp/server.keyregenerierbar (auto bei Start)
~/.config/ForgeIEC/mcp_audit.logje nach Compliance-Anforderung
/var/lib/anvil/enthaelt Projekt-Store + Config
/etc/forgeiec/bellows/bellowsd-Konfig

Caretaker-Workstation: ca-team/ca.key ist die einzige nicht- regenerierbare Datei. Verlust = Team-CA-Recovery noetig.


Monitoring

Health-Check

curl -k -s -H "Authorization: Bearer $TOKEN" \
     https://forgeiec-ws.local:7531/mcp/v1/info

200 OK + JSON-Body → Server lebt. Erweiterter Check via server_info-Tool:

curl -k -s -X POST -H "Authorization: Bearer $TOKEN" \
     -H "Content-Type: application/json" \
     https://forgeiec-ws.local:7531/mcp/v1/rpc \
     -d '{"jsonrpc":"2.0","id":1,"method":"tools/call",
          "params":{"name":"server_info","arguments":{}}}' \
     | jq -r '.result.content[0].text | fromjson'

Liefert u.a.:

FeldNutzung im Monitoring
editor_build.build_timeDrift zur erwarteten Version
editor_build.git_dirtySollte in Production false sein
editor_build.mcp_override_securitiesSollte in Production false sein
mtls_activeTrust-Store geladen?
trust_store_sizeAnzahl Team-CAs
has_projectHat ein Projekt offen
tls_activeTLS active

anvild Health

systemctl is-active anvild
systemctl is-active bellowsd

Variable-Monitor

Pro Variable + Stream-Subscription steigt der Watch-Verkehr. Per monitor.is_running:

{ "connected": true, "watch_active": true, "host": "localhost",
  "user": "admin", "authenticated": true }

Anbindung an Prometheus/Grafana: per Cron-Skript server_info + monitor.is_running abfragen, in textfile-collector schreiben.


Troubleshooting

MCP-Server reagiert nicht

SymptomDiagnose
Connection refusedEditor nicht gestartet oder anderer Port — ss -tlnp
TLS handshake failedServer-Cert abgelaufen oder Hostname-Mismatch — Cert neu generieren (Bind-Adress-Aenderung triggert das auto)
401 UnauthorizedToken falsch oder Profil deaktiviert — Preferences pruefen
FORGE_ERR_NO_PROJECTProjekt nicht offen — project.open zuerst

Variable bleibt “haengen”

Siehe FAQ. Stale iceoryx2-SHM. Fix: systemctl restart anvild (seit v0.1.0+ Auto-Cleanup beim Startup).

Build-Mismatch

Wenn server_info.editor_build.mcp_override_securities=true auf einer Produktiv-Workstation: Editor mit Override-Version installiert. Sicherheits-Risiko. Korrektur:

sudo apt install --reinstall forgeiec
sudo systemctl restart anvild

Deploy schlaegt fehl

codegen.deploy_status.build_log_tail liefert den g++-stderr-Tail (letzte 16 KB). Wenn Auto-start failed: Runtime binary not found:

journalctl -u anvild -n 50 --no-pager

In der Regel fehlende C-Toolchain auf dem PLC-Target oder disk-full.

Audit-Log waechst unbegrenzt

# Rotation manuell
mv ~/.config/ForgeIEC/mcp_audit.log \
   ~/.config/ForgeIEC/mcp_audit.log.$(date +%Y%m%d)
# Editor kreiert die Datei neu beim naechsten Schreib-Event

Logrotate-Config:

/home/*/.config/ForgeIEC/mcp_audit.log {
    weekly
    rotate 12
    compress
    missingok
    notifempty
    copytruncate
}

Deployment-Pattern

Single-Workstation

Default. Editor + anvild + bellowsd auf einem Host. Bind 127.0.0.1. Kein Trust-Store. Bearer optional.

Team-Setup (mehrere Workstations)

Pro Workstation: Editor + lokaler anvild. Trust-Store geteilt (USB, Git-Repo, geteiltes Laufwerk).

Caretaker auf einer Workstation. Andere als Member.

Peers.toml + revoked.toml zentral pflegen, signiert verteilen.

Build-Server-Setup

Headless-Workstation ohne GUI nutzt CLI / MCP zur Build-Pipeline:

ForgeIEC Studio (headless --no-gui) --mcp-bind 0.0.0.0:7531
   ↓ Bearer-Auth
CI-Runner (curl + jq)
   ↓ ruft project.open, codegen.compile, codegen.deploy
PLC-Target

Vorteile: zentrale Build-Logs, gleiche Build-Umgebung, kein Workstation-Drift.


Weiter