Zum Inhalt springen

Einen Assistant verbinden

DumbMonit hat einen eingebauten MCP- Server: das Model Context Protocol, der Weg, auf dem Assistants wie Claude, ChatGPT, Cursor oder der Agent von VS Code externe Werkzeuge aufrufen. Verbinden Sie einen, und fragen Sie dann Dinge wie:

  • “Ist alles in Ordnung?”
  • “Schalte das NAS für zwei Stunden stumm, ich tausche eine Platte.”
  • “Was ist letzte Nacht passiert?”
  • “Wie voll ist der Backup-Server, und wird es schlimmer?”
  • “Poste ein Update auf der Statusseite: der Mailserver ist zurück.”

Der Assistant sieht, was die Oberfläche sieht — Monitore, Alarme, Historie, Metriken, Agents, Statusseiten — und nutzt dieselben Worte: reporting, unreachable, waiting, advisory, warning, suppressed by parent. Er läuft innerhalb des Servers: nichts neben DumbMonit zu installieren, und die Werkzeuge rufen denselben Code wie die Web-UI auf.

Settings → API & assistants (/settings#assistant). Benennen Sie das Token nach dem Assistant oder der Maschine, auf der er läuft (“Claude on my laptop”), wählen Sie dann:

EinstellungWahlmöglichkeiten
ScopeRead: nachsehen — Status, Monitore, Alarme, Historie, Metriken, Regeln, Agents, Statusseiten. Kann nie etwas ändern. Read and write: auch handeln — stummschalten, bestätigen, abfragen, einen Monitor hinzufügen, einen Container neu starten, einen Vorfall posten… (die Schreibwerkzeuge).
Expires30 Tage, 90 Tage (der Standard), 1 Jahr oder nie. Ein abgelaufenes Token funktioniert nicht mehr; erstellen Sie ein neues.
Allowed networksOptional. Adressen oder CIDR-Bereiche, aus denen das Token genutzt werden darf (192.168.1.0/24, 10.8.0.5). Leer: überall.

Das Token sieht aus wie dmt_ gefolgt von 32 hexadezimalen Zeichen. Es wird einmal direkt nach der Erstellung angezeigt; DumbMonit behält nur einen Hash. Verloren? Widerrufen und ein neues erstellen.

Bevorzugen Sie ein Read-Token, sofern Sie den Assistant nicht tatsächlich handeln lassen wollen.

Dasselbe Token öffnet auch die REST-API für Skripte und Dashboards — curl -H "Authorization: Bearer dmt_…" https://monit.example.lan/api/targets — wo read sieht, was ein Viewer sieht, und write tut, was ein Administrator tut, Konten, Tokens und Backups ausgenommen.

Die Settings-Seite füllt diese mit der Adresse Ihres Servers und dem neuen Token. Unten steht https://monit.example.lan für Ihren Server.

Terminal-Fenster
claude mcp add --transport http dumbmonit https://monit.example.lan/api/mcp \
--header "Authorization: Bearer dmt_…"

Fügen Sie --scope user hinzu, um es in jedem Projekt zu haben, nicht nur im aktuellen.

Claude Desktop startet lokale Server aus seiner Konfigurationsdatei; mcp-remote überbrückt zu DumbMonits HTTP-Endpunkt (benötigt Node.js). DumbMonit authentifiziert mit einem Bearer-Header statt OAuth, fügen Sie es also über diese Datei hinzu, statt über den Connectors-Bildschirm. Settings → Developer → Edit Config, dann zu claude_desktop_config.json hinzufügen und Claude Desktop neu starten:

{
"mcpServers": {
"dumbmonit": {
"command": "npx",
"args": [
"-y", "mcp-remote", "https://monit.example.lan/api/mcp",
"--header", "Authorization:${DUMBMONIT_AUTH}"
],
"env": { "DUMBMONIT_AUTH": "Bearer dmt_…" }
}
}
}

Der Header läuft über eine Umgebungsvariable, ohne Leerzeichen nach dem Doppelpunkt, weil manche Plattformen Argumente an Leerzeichen aufteilen. Für einen Server, der über einfaches HTTP in Ihrem Netzwerk erreicht wird, fügen Sie "--allow-http" zu args hinzu — die Settings-Seite tut das für Sie, wenn sie selbst über HTTP bedient wird.

.vscode/mcp.json in einem Workspace (oder der Befehl MCP: Add Server → HTTP):

{
"servers": {
"dumbmonit": {
"type": "http",
"url": "https://monit.example.lan/api/mcp",
"headers": { "Authorization": "Bearer dmt_…" }
}
}
}

.cursor/mcp.json, und dieselbe Form für die meisten Clients, die Streamable-HTTP-Server mit benutzerdefinierten Headern unterstützen:

{
"mcpServers": {
"dumbmonit": {
"url": "https://monit.example.lan/api/mcp",
"headers": { "Authorization": "Bearer dmt_…" }
}
}
}

Ein Client, der nur lokale (stdio-)Server startet, kann die oben für Claude Desktop gezeigte mcp-remote-Brücke nutzen.

Settings → Connectors → Create (Developer-Modus). MCP-Server-URL: https://monit.example.lan/api/mcp, Autorisierungs-Header: Bearer dmt_….

ChatGPT verbindet sich von OpenAIs Servern aus, nicht von Ihrem Browser: DumbMonit muss aus dem Internet über HTTPS erreichbar sein. Siehe die Sicherheitshinweise, bevor Sie das tun.

Was ein Client wissen muss: der Endpunkt ist https://<server>/api/mcp, der Transport ist Streamable HTTP, und jeder Request trägt Authorization: Bearer dmt_…. Ein roher Aufruf, um das Token und den Netzwerkpfad von einem Terminal zu prüfen:

Terminal-Fenster
curl -s https://monit.example.lan/api/mcp \
-H 'Authorization: Bearer dmt_…' \
-H 'Content-Type: application/json' \
-H 'Accept: application/json, text/event-stream' \
-H 'MCP-Protocol-Version: 2026-07-28' \
-H 'Mcp-Method: tools/call' -H 'Mcp-Name: get_status' \
-d '{"jsonrpc":"2.0","id":1,"method":"tools/call","params":{"name":"get_status","arguments":{},
"_meta":{"io.modelcontextprotocol/protocolVersion":"2026-07-28",
"io.modelcontextprotocol/clientCapabilities":{}}}}'

Siebenundzwanzig Werkzeuge. Jedes hat einen Titel, eine Beschreibung, ein Input-Schema, ein Output-Schema und Anmerkungen (readOnlyHint, destructiveHint, idempotentHint), sodass ein Client erkennen kann, welche nur nachsehen, und Sie fragen kann, bevor er die anderen ausführt.

WerkzeugScopeTut
get_statusreadDas Bulletin, die Antwort auf “ist alles in Ordnung?”: Monitorzahlen, feuernde und sich aufbauende Alarme, ein Satz (“2 advisories, 1 unreachable.”).
list_devicesreadMonitore und Services mit Zustand, übergeordnetem Monitor und Tags; filterbar nach Teilstring oder Zustand.
get_devicereadEin Monitor: Konfiguration, Zustand, aktive Alarme, 24-Stunden-Zusammenfassung CPU/Speicher/vollste Platte (Verfügbarkeit und Latenz für einen Service-Check).
list_alertsreadAktive Alarme mit Schweregrad-Worten, seit wann, Wert, Unterdrückung, Bestätigung.
alert_historyreadAlarm-Übergänge, neueste zuerst (since oder hours, optionaler Monitor, Limit).
query_metricsreadEine MetricsQL-Range-Abfrage, höchstens 60 Punkte pro Zeitreihe.
list_silencesreadWartungsfenster und ob sie jetzt aktiv sind.
list_rulesreadAlarmregeln mit Art, Schweregrad, Schwellenwert, aktiviert.
list_device_typesreadDie Monitorarten, die dieser Server überwachen kann, mit den Optionen und Credentials, die jede erwartet — was add_device braucht.
list_agentsreadMaschinen mit laufendem Agent: OS, Agent-Version, Relay-Modus, Site, relayte Monitore, letzter Kontakt, Bindung.
list_containersreadDie Docker-Container einer Maschine mit laufendem Agent: Zustand, Gesundheit, Neustarts, verfügbares Update, letzter Befehl.
list_heartbeatsreadHeartbeat-Monitore: erwartetes Intervall, letzter Aufruf, Urteil (waiting, on time, missed, reported down). Die geheime URL wird nie angezeigt.
list_status_pagesreadStatusseiten, veröffentlicht oder nicht, mit ihrem öffentlichen Pfad (/s/<slug>), den gezeigten Monitoren und ihren offenen Vorfällen.
list_channelsreadBenachrichtigungskanäle: Art, aktiviert, letzter Fehler, letzte gesendete Nachricht. Nie ihre Secrets.
list_packsreadInstallierte Integrationspakete: Version, Monitorart, aktiviert, nutzende Monitore, Fehler.
silence_devicewriteEin einmaliges Wartungsfenster auf einem Monitor, jetzt beginnend (standardmäßig 1 Stunde, höchstens eine Woche).
remove_silencewriteEntfernt ein Wartungsfenster.
schedule_maintenancewriteEin einmaliges Wartungsfenster zu einem gegebenen Datum, auf einem Monitor oder der gesamten Instanz, höchstens eine Woche.
acknowledge_alertwriteBestätigt einen Alarm per Fingerprint für eine Anzahl Stunden (standardmäßig 4): Erinnerungen pausieren, die Behebung wird trotzdem gemeldet. hours: 0 hebt es auf.
probe_devicewriteFragt einen Monitor sofort ab und meldet, was gemessen wurde.
set_device_enabledwriteAktiviert oder deaktiviert die Überwachung eines Monitors.
set_rule_enabledwriteAktiviert oder deaktiviert eine Alarmregel.
add_devicewriteFügt einen Monitor hinzu: Name, Art, Adresse, Intervall, übergeordneter Monitor, Optionen, Credentials, Relay-Agent.
discover_networkwriteScannt ein Netzwerk (CIDR, höchstens 4096 Adressen) nach SNMP-Geräten und schlägt für jedes ein Profil vor.
restart_containerwriteBittet den Agent einer Maschine, einen ihrer Container neu zu starten.
test_channelwriteSendet eine Testnachricht über einen Benachrichtigungskanal.
post_incidentwriteÖffnet einen Vorfall auf einer Statusseite, oder postet ein Update zu einem bestehenden.

Ein Read-Token, das ein Write-Werkzeug aufruft, erhält eine klare Ablehnung als Werkzeugergebnis (isError: true); der Assistant erklärt es, und nichts ändert sich. Dasselbe gilt für alles, was das Werkzeug nicht kann — ein unbekannter Monitor, ein mehrdeutiger Name, ein Fenster länger als eine Woche: die Meldung sagt, was zu beheben ist.

POST /api/mcp implementiert MCP über den Streamable-HTTP- Transport: JSON-RPC 2.0, ein Request pro POST, mit einfachem JSON beantwortet (keine Server-Sent-Events). Es ist zustandslos: Keine Mcp-Session-Id wird ausgestellt, eine von einem Client gesendete wird ignoriert, und GET oder DELETE auf dem Endpunkt antworten mit 405. Nur die tools-Fähigkeit wird angeboten — keine Resources, Prompts, Sampling oder OAuth.

Zwei Generationen des Protokolls werden auf demselben Endpunkt bedient:

VersionenWie ein Client es spricht
2026-07-28Zustandslos. Jeder Request trägt io.modelcontextprotocol/protocolVersion und io.modelcontextprotocol/clientCapabilities in params._meta, und die Header MCP-Protocol-Version, Mcp-Method und, für tools/call, Mcp-Name, das mit dem Body übereinstimmen muss. Methoden: server/discover, tools/list, tools/call. Ergebnisse tragen resultType: "complete" und die Identität des Servers in _meta (io.modelcontextprotocol/serverInfo); tools/list trägt auch ttlMs und cacheScope.
2025-11-25, 2025-06-18, 2025-03-26Der initialize-Handshake wählt die Version (eine unbekannte erhält die neueste dieser drei); notifications/initialized wird mit 202 bestätigt; dann ping, tools/list, tools/call.

Fehler, neben dem 401, 403 und 429 der Token-Prüfungen, die vor jedem JSON-RPC kommen:

HTTPJSON-RPC-CodeWann
400-32020 (Header-Diskrepanz)Ein 2026-07-28-Request ohne MCP-Protocol-Version, Mcp-Method oder Mcp-Name, oder mit Werten, die vom Body abweichen.
400-32022 (nicht unterstützte Protokollversion)Eine Version, die dieser Server nicht spricht; error.data listet die supported und die requested.
400-32602 (ungültige Parameter)Ein 2026-07-28-Request ohne die erforderlichen _meta-Felder.
404-32601 (Methode nicht gefunden)Ein 2026-07-28-Request für eine von diesem Server nicht implementierte Methode.
200-32602Ein unbekanntes Werkzeug, oder arguments, das kein Objekt ist.
-32700, -32600Unlesbares JSON; kein JSON-RPC-2.0-Request (Batches werden nicht unterstützt).
202—Eine Notification: akzeptiert, kein Body.

Ein Werkzeug, das läuft, aber fehlschlägt — fehlender Scope, unbekannter Monitor — ist kein Protokollfehler: Es antwortet normal mit isError: true und einem Satz, den der Assistant weitergeben kann.

  • Ein Token ist ein Passwort. Wer es besitzt, liest alles, was die Oberfläche zeigt — und, mit einem Write-Token, ändert alles, was ein Administrator über die REST-API ändern kann (Monitore, Regeln, Kanäle), Konten, Tokens und Backups ausgenommen. Halten Sie es aus geteilten Chats, Screenshots und Repositories fern. Widerrufen Sie ein Token, bei dem Sie unsicher sind; erstellen Sie in einer Minute ein neues.
  • Bevorzugen Sie Read. Die meisten Fragen (“ist alles in Ordnung?”) brauchen keinen Write-Scope. Erstellen Sie ein Write-Token nur für einen Assistant, den Sie tatsächlich handeln lassen wollen, und benennen Sie es so, dass Sie es in der Liste erkennen. Die meisten Clients fragen, bevor sie ein nicht als nur-lesend markiertes Werkzeug ausführen; lassen Sie diese Bestätigung an.
  • Geben Sie ihm eine Lebensdauer und ein Netzwerk. Ein Token, das in 90 Tagen abläuft und nur aus Ihrem LAN oder VPN funktioniert (192.168.1.0/24), ist für jeden, der es findet, wenig wert. Hinter einem Reverse Proxy erklären Sie den Proxy in DUMBMONIT_TRUSTED_PROXIES, sonst scheint jeder Aufruf vom Proxy zu kommen, und eine Netzwerkbeschränkung lehnt sie alle ab.
  • An seinen Ersteller gebunden. Ein Token funktioniert nicht mehr, wenn das Konto, das es erstellt hat, deaktiviert wird, verliert seine Schreibkraft, wenn dieses Konto kein Admin mehr ist, und wird widerrufen, wenn dieses Konto gelöscht wird.
  • Nichts Geheimes kommt zurück. Die Werkzeuge geben nie Monitor-Zugangsdaten zurück (nur ihre Art), Kanal-Secrets, Heartbeat-URLs oder Tokens. add_device nimmt zwar Zugangsdaten entgegen: Sie reisen durch die Konversation Ihres Assistants, und so durch dessen Anbieter. Für einen Monitor mit sensiblen Zugangsdaten bevorzugen Sie die Web-Oberfläche.
  • Browser und Origin. Ein Request mit einem Origin-Header (ein browserbasierter Client) wird mit 403 abgelehnt, sofern diese Origin nicht die eigene des Servers ist oder von DUMBMONIT_API_CORS_ORIGINS erlaubt wird (standardmäßig jede Origin, da das Token ohnehin erforderlich ist). Listen Sie dort Ihre Origins, um es einzugrenzen; siehe Cross-Origin-Requests.
  • Ratenlimit. Jedes Token ist auf 120 Aufrufe pro Minute begrenzt, REST und MCP zusammen: Ein in einer Schleife festsitzender Assistant erhält 429 mit Retry-After, nicht die volle Aufmerksamkeit Ihres Servers.
  • HTTPS vor dem Internet. ChatGPTs Connectors brauchen eine öffentliche URL. Stellen Sie DumbMonit hinter einen Reverse Proxy mit TLS (Caddy, Traefik, nginx…) und setzen Sie DUMBMONIT_COOKIE_SECURE=1. Exponieren Sie nie den einfachen HTTP-Port. Claude Desktop, Claude Code, VS Code und Cursor laufen auf Ihrer Maschine und können eine LAN-Adresse direkt erreichen, brauchen also überhaupt keine Exposition.
  • Beobachten Sie “last used”. Die Token-Liste zeigt, wann jedes Token zuletzt genutzt wurde und von welcher Adresse. Ein Token, das zu einer Zeit genutzt wurde, als Sie nicht mit Ihrem Assistant sprachen, oder von einer Adresse, die Sie nicht kennen, verdient einen Widerruf.
  • Logs. Jeder Werkzeugaufruf wird auf info-Ebene mit dem Token-Namen und dem Werkzeug protokolliert, nie den Argumenten; jeder Schreibvorgang über die REST-API mit dem Token-Namen, der Methode, dem Pfad und dem Status, nie dem Body. Das Erstellen und Widerrufen von Tokens steht im Audit-Log (Settings → Security).
SymptomUrsache und Behebung
401 / “A valid API token is required.”Der Header fehlt oder ist falsch geschrieben (Authorization: Bearer dmt_…, ein Leerzeichen nach Bearer), oder das Token wurde widerrufen. Erstellen Sie ein neues.
401 / “The API token ”…” expired on …”Erstellen Sie ein neues Token; wählen Sie eine längere Lebensdauer, falls sie zu kurz war.
403 / “cannot be used from …”Das Token ist auf andere Netzwerke beschränkt. Die Adresse in der Meldung ist die, die der Server sieht: Erklären Sie hinter einem Reverse Proxy den Proxy in DUMBMONIT_TRUSTED_PROXIES.
403 bei jedem Aufruf von einem browserbasierten ClientDessen Origin ist nicht erlaubt: fügen Sie sie zu DUMBMONIT_API_CORS_ORIGINS hinzu.
Ein Werkzeug antwortet “needs a token with the “write” scope”Das Token ist nur-lesend, oder sein Ersteller ist kein Administrator mehr. Erstellen Sie ein Write-Token, wenn Sie den Assistant handeln lassen wollen.
429120 Aufrufe in einer Minute: Der Assistant loopt wahrscheinlich. Warten Sie auf Retry-After, stellen Sie dann eine engere Frage.
“Unsupported protocol version”Der Client spricht eine Version, die DumbMonit nicht hat; aktualisieren Sie den Client.
Claude Desktop zeigt den Server als fehlgeschlagenNode.js muss für npx installiert sein; über einfaches HTTP muss --allow-http in args stehen.
ChatGPT kann sich nicht verbindenEs braucht eine öffentliche HTTPS-URL; eine LAN-Adresse oder einfaches HTTP funktioniert von OpenAIs Servern aus nicht.