UptimeEye MCP-Server

Verbinde Claude, Cursor oder einen anderen MCP-Client und richte dein Monitoring ein, indem du es beschreibst: „prüfe unsere Checkout-API alle 30 Sekunden aus Europa und den USA und schick Alerts an den Bereitschaftskanal“, oder frag, was deine Services geloggt haben, als ein Monitor ausfiel. Gleiche API, gleiche Rechte wie in der App, und kein Server, den du betreiben musst: Die meisten Clients verbinden sich direkt mit dem Endpoint, Clients ohne Remote-MCP-Support (wie Claude Desktop) über die mcp-remote-Bridge, die Node.js braucht.

Schnellstart

1. Management-Key erstellen

Öffne in der App API-Keys → Neuer API-Key, wähle den Typ „Management“ und kopiere den Key. Er beginnt mit ue_live_ und wird nur einmal angezeigt. Log-Ingest-Keys (ue_ingest_) funktionieren hier nicht.

2. Server im Client eintragen

Endpoint: https://api.uptimeeye.com/mcp (Streamable HTTP), authentifiziert mit Authorization: Bearer ue_live_…. In Claude Code ist das ein Befehl:

shell
claude mcp add --transport http uptimeeye https://api.uptimeeye.com/mcp \
  --header "Authorization: Bearer ue_live_XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX"

3. Fragen

Probier „Liste meine UptimeEye-Monitore auf“ – und beschreib dann, was überwacht werden soll. Der Assistent schaut zuerst deine Benachrichtigungskanäle nach, weil jeder Monitor einen braucht.

Client verbinden

Claude Code

Der Befehl aus dem Schnellstart richtet den Server nur für dich ein. Mit --scope project teilst du ihn über .mcp.json mit deinem Team, und der Key landet nicht in dieser Datei: In einfachen Anführungszeichen steht ${UPTIMEEYE_API_KEY} unverändert in der Datei, und Claude Code liest den Key beim Start aus dieser Umgebungsvariable.

shell
claude mcp add --transport http --scope project uptimeeye https://api.uptimeeye.com/mcp \
  --header 'Authorization: Bearer ${UPTIMEEYE_API_KEY}'

Cursor

Global in ~/.cursor/mcp.json oder pro Projekt in .cursor/mcp.json:

.cursor/mcp.json
{
  "mcpServers": {
    "uptimeeye": {
      "url": "https://api.uptimeeye.com/mcp",
      "headers": { "Authorization": "Bearer ue_live_XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX" }
    }
  }
}

VS Code (GitHub Copilot im Agent-Modus)

VS Code fragt einmal nach dem Key und speichert ihn sicher:

.vscode/mcp.json
{
  "inputs": [
    { "type": "promptString", "id": "uptimeeye-key", "description": "UptimeEye API key (ue_live_…)", "password": true }
  ],
  "servers": {
    "uptimeeye": {
      "type": "http",
      "url": "https://api.uptimeeye.com/mcp",
      "headers": { "Authorization": "Bearer ${input:uptimeeye-key}" }
    }
  }
}

Claude Desktop

Claude Desktop startet nur lokale Server und verbindet sich deshalb über die mcp-remote-Bridge (braucht Node.js). Trag das in claude_desktop_config.json ein und starte die App neu:

claude_desktop_config.json
{
  "mcpServers": {
    "uptimeeye": {
      "command": "npx",
      "args": ["-y", "mcp-remote", "https://api.uptimeeye.com/mcp", "--header", "Authorization:${UPTIMEEYE_AUTH}"],
      "env": { "UPTIMEEYE_AUTH": "Bearer ue_live_XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX" }
    }
  }
}

Andere Clients: Alles, was Remote-MCP-Server über Streamable HTTP mit einem eigenen Header unterstützt, funktioniert mit dem Endpoint und Header oben.

Verfügbare Tools

Die Tools tragen MCP-Annotationen: Lesende Tools sind als read-only markiert, Lösch-Tools als destruktiv, sodass gut gebaute Clients vor dem Ausführen nachfragen.

ToolWas es tut
list_monitorsAlle Uptime-Monitore mit ID, Name, URL, Status und Prüfintervall.
get_monitorVollständige Konfiguration eines Monitors.
create_monitorHTTP-, TCP-Port- (host:port), DNS- oder ICMP-Check mit Intervall, Timeout, erwartetem Statuscode, maximaler Antwortzeit, Regionen und Tags.
update_monitorÄndert beliebige der Felder oben; weggelassene Felder bleiben, wie sie sind.
pause_monitor / resume_monitorStoppt und startet Checks und Alerts wieder.
delete_monitorDestruktiv – der Assistent fragt, bevor er es aufruft.
list_scheduled_tasksAlle Cron-Job- und Heartbeat-Monitore.
get_scheduled_taskDetails eines Tasks, inklusive der URL, die dein Job aufruft.
create_scheduled_taskHeartbeat-Monitor mit einfachem Intervall (alle 5 Minuten) oder Cron-Ausdruck mit Zeitzone, plus Karenzzeit.
update_scheduled_taskÄndert Zeitplan, Karenzzeit, Channel oder Tags.
pause_scheduled_task / resume_scheduled_taskKeine Alerts, solange pausiert.
delete_scheduled_taskDestruktiv – der Assistent fragt, bevor er es aufruft.
list_notification_channelsAlert-Ziele. Monitore und Tasks verweisen per ID auf einen Channel.
create_notification_channelChannel mit E-Mail-Empfängern und/oder einer Webhook-URL.
delete_notification_channelDestruktiv; schlägt fehl, solange Monitore den Channel noch nutzen.
list_locationsRegionen, aus denen ein Monitor prüfen kann, z. B. eu-central-1, und ob sie gerade bedient werden.
list_status_pagesDeine Status Pages (nur lesend).
list_incidentsIncidents, optional nach Status gefiltert (nur lesend).

Dein Job schickt einem Scheduled Task seine Heartbeats: GET https://api.uptimeeye.com/v1/beat/{taskId} bei Erfolg. Optional: /start zu Beginn des Laufs und /fail, um einen fehlgeschlagenen Lauf zu melden und sofort einen Alert auszulösen. GET, POST und HEAD werden alle akzeptiert.

Logs-Tools

Fünf lesende Tools durchsuchen die Logs, die deine Services an UptimeEye Logs senden. Abfragen sind LogsQL, z. B. service:api level:error. Der Zeitraum wird mit start und end (RFC 3339) gesetzt und ist standardmäßig die letzte Stunde; jedes Ergebnis nennt den tatsächlich durchsuchten Zeitraum, den die Aufbewahrungsdauer deines Plans verkürzen kann.

ToolWas es tut
query_logsDurchsucht die Logs mit einer LogsQL-query, neueste zuerst. Optional start, end und limit (Standard 50, höchstens 200). Lange Werte werden gekürzt, und das Ergebnis sagt, ob Zeilen oder Werte gekürzt wurden.
logs_histogramLog-Volumen über die Zeit für eine query (etwa 48 Intervalle), um zu sehen, wann Fehler begannen oder sprunghaft anstiegen.
logs_fieldsWelche Felder es in den passenden Logs gibt und wie viele Einträge jedes davon tragen, damit Abfragen existierende Feldnamen nutzen.
logs_facetsDie häufigsten Werte eines field (z. B. service, level, host), optional eingeschränkt durch eine query. limit Standard 10, höchstens 50.
get_log_contextKontext zu einem entry aus einem query_logs-Ergebnis: seine Fehlersignatur, wie oft er in den letzten 24 Stunden auftrat, und zugehörige Einträge (gleicher Trace oder Request, sonst die vorangehenden Zeilen desselben Service).
Hinweis: Die Logs-Tools brauchen einen Plan mit Logs. Hat der Plan keine Logs oder sind noch keine Logs angekommen, sagt das Tool das und was zu tun ist. Ein Management-Key kann alle Logs der Organisation lesen: Wer den Key hat, kann die Logs jedes Service innerhalb der Aufbewahrungsdauer deines Plans durchsuchen.

Beispiel-Prompts

  • „Überwache https://shop.example.com jede Minute aus eu-central-1 und us-east-1 und schick mir eine E-Mail an ops@example.com, wenn die Seite down oder langsamer als 2 Sekunden ist.“
  • „Leg einen Heartbeat für unser nächtliches Backup um 02:30 Europe/Berlin mit 30 Minuten Karenzzeit an und gib mir die curl-Zeile für die Crontab.“
  • „Schick mir einen Alert, wenn unser Postgres auf db.example.com:5432 keine Verbindungen mehr annimmt – prüfe jede Minute.“
  • „Welche Monitore sind gerade down, und gibt es offene Incidents?“
  • „Der Checkout-Monitor ist um 14:05 ausgefallen. Was hat der Checkout-Service um diese Zeit geloggt, und ist der Fehler neu?“
  • „Tagge jeden Monitor, dessen URL staging enthält, mit staging und pausiere sie.“
  • „Verschiebe alle Monitore vom Channel ‚Old alerts‘ nach ‚On-call‘ und lösche dann ‚Old alerts‘.“

Ein Projekt mit einem AI-Agent einrichten

Coding-Agents (Claude Code, Cursor, Copilot) können dein Repository und die UptimeEye-Doku gleichzeitig lesen. Füge einen dieser Prompts in den Agent in deinem Projekt ein; Endpoints, Jobs und Stack findet er selbst.

Jeden öffentlichen Endpoint überwachen

Read https://uptimeeye.com/llms.txt. Find the public URLs and health endpoints of this project (routes, deployment config, README). Using the UptimeEye MCP server, create one monitor per endpoint: 30 s interval if my plan allows it, expected status 200, attached to the notification channel I pick. Show me the list before you create anything.

Heartbeats für Cron-Jobs ergänzen

Find every cron job, scheduled worker and CI schedule in this repository. For each one, create an UptimeEye scheduled task via MCP with the matching schedule and a sensible grace period. Then change the job so it calls https://api.uptimeeye.com/v1/beat/<taskId> on success and https://api.uptimeeye.com/v1/beat/<taskId>/fail on error.

Logs senden

Add UptimeEye log shipping to this project. Follow https://uptimeeye.com/docs/logs/ingest and pick the integration guide that matches our stack (Kubernetes, Docker, OpenTelemetry, Node.js, Python, Go, Spring Boot, .NET, …). Read the ingest key from the environment variable UPTIMEEYE_INGEST_KEY and use service and env as stream fields.
Hinweis: Den Log-Ingest-Key (ue_ingest_…) erstellst du in der App unter API-Keys – der MCP-Server kann keine Keys anlegen.

Rechte & Sicherheit

  • Ein Management-Key handelt für eine Organisation mit denselben Rechten wie die REST-API. Erstelle einen Key pro Client, damit du sie einzeln widerrufen kannst.
  • Ein Management-Key kann alle Logs der Organisation lesen, innerhalb der Aufbewahrungsdauer deines Plans, über die Logs-Tools und die REST-API. Eine engere Log-Berechtigung gibt es nicht, behandle den Key also wie die Logs selbst.
  • Lösch-Tools sind als destruktiv annotiert, und der Server weist den Assistenten an, vorher ausdrücklich nachzufragen.
  • Plan-Limits gelten genau wie in der App – der Assistent kann deine Monitor-Anzahl oder dein Mindestintervall nicht überschreiten.
  • Keys werden gehasht gespeichert; der Klartext-Key wird nur einmal beim Erstellen angezeigt. Anfragen werden in der EU (Deutschland) verarbeitet.

Lieber Infrastructure as Code? Dieselben Operationen gibt es über den Terraform-Provider.

FAQ

Was ist der UptimeEye MCP-Server?

Ein Model-Context-Protocol-Endpoint unter https://api.uptimeeye.com/mcp (Streamable HTTP). AI-Assistenten, die MCP sprechen, können Monitore, Scheduled Tasks und Benachrichtigungskanäle deiner Organisation auflisten, anlegen und ändern – dieselben Operationen wie über die REST-API und den Terraform-Provider – und die Logs der Organisation durchsuchen.

Welchen Plan brauche ich?

Jeden Plan, auch Free. Der Assistent arbeitet innerhalb der Limits deines Plans: Fragst du nach mehr Monitoren oder einem kürzeren Intervall, als der Plan erlaubt, liefert das Tool das Limit zurück und der Assistent sagt es dir. Die Logs-Tools brauchen einen Plan mit Logs.

Welche Clients funktionieren?

Jeder MCP-Client, der über Streamable HTTP einen Authorization-Header senden kann: Claude Code, Cursor, VS Code, Windsurf und weitere. Clients, die nur lokale stdio-Server unterstützen (wie Claude Desktop), verbinden sich über die mcp-remote-Bridge, die Node.js braucht. Web-Connectoren, die OAuth verlangen, werden noch nicht unterstützt.

Kann der Assistent Slack-, Teams- oder PagerDuty-Alerts einrichten?

Nicht über MCP – diese Integrationen brauchen eine interaktive Autorisierung in der App. Leg den Channel einmal in der App an, dann kann der Assistent jeden Monitor per ID damit verknüpfen. E-Mail- und Webhook-Channels lassen sich direkt über MCP anlegen.

Kann der Assistent meine Logs lesen?

Ja, wenn dein Plan Logs enthält. Die lesenden Tools query_logs, logs_histogram, logs_fields, logs_facets und get_log_context durchsuchen deine Logs mit LogsQL, zeigen ihr Volumen über die Zeit und ordnen einen einzelnen Fehlereintrag ein. Ein Management-Key kann alle Logs der Organisation lesen. Um zuerst Logs zu senden, folge der Logs-Doku – ein Coding-Agent kann das für dich einrichten (siehe die Prompts oben).

Wie widerrufe ich den Zugriff?

Lösch den Key in der App unter API-Keys. Jeder Client, der ihn nutzt, verliert sofort den Zugriff.