Skip to main content
Glama

Quick Start

# docker-compose.yml
services:
  maintenant:
    image: ghcr.io/kolapsis/maintenant:latest
    ports:
      # ⚠️  SECURITY: publishes the UI/API (no authentication of their own) on
      # every interface; put an auth reverse proxy in front, or bind "127.0.0.1:8080:8080". See https://docs.maintenant.dev/security/#reverse-proxy-setup.
      - "8080:8080"
    read_only: true
    security_opt:
      - no-new-privileges:true
    tmpfs:
      - /tmp:noexec,nosuid,size=64m
    volumes:
      - /var/run/docker.sock:/var/run/docker.sock:ro
      - /proc:/host/proc:ro
      - /etc/os-release:/host/etc/os-release:ro
      - maintenant-data:/data
    environment:
      MAINTENANT_ADDR: "0.0.0.0:8080"
      MAINTENANT_DB: "/data/maintenant.db"
    restart: unless-stopped

volumes:
  maintenant-data:
docker compose up -d

Open http://localhost:8080. Your containers are already there, with their health, restart loops, resources and logs. Nothing to configure.

Docker socket access is automatic: the entrypoint reads the mounted socket's group and grants it to the unprivileged user, on Compose and on Swarm (where docker stack deploy silently ignores group_add). A socket owned by group root needs DOCKER_GID=0. If containers do not show up, see Troubleshooting.

Kubernetes

kubectl create namespace maintenant
kubectl apply -f deploy/kubernetes/

In-cluster API auto-detected, read-only RBAC, namespace filtering, workloads (Deployments, DaemonSets, StatefulSets) as first-class citizens. Kubernetes guide.

Bare Linux, no Docker at all (systemd, amd64 and arm64, statically linked)

curl -fsSL https://install.maintenant.dev | sudo bash

Endpoints, certificates and heartbeats work without any container runtime. Container monitoring switches on by itself the moment a runtime shows up. Install documentation for pinned versions, air-gapped installs and supply-chain verification.

Cloud: one cloud-init file boots a hardened host with maintenant running on Hetzner Cloud, DigitalOcean, Scaleway, OVHcloud or Vultr.


Related MCP server: K8s Observability MCP

Why maintenant?

Monitoring your own infrastructure with the standard stack means running Prometheus, Grafana, Alertmanager, node-exporter, cAdvisor, blackbox-exporter, a certificate exporter, Loki, Promtail, Trivy and something for image updates. Ten-odd components, each with its own config, upgrades and dashboards, to answer one question: is my stack up, and what is burning?

maintenant answers that question with one container.

Built into maintenant

What you would assemble instead

Container state, health checks, restart loops

cAdvisor + node-exporter + alert rules you write

CPU, memory, network and disk, per container and per host

cAdvisor + node-exporter + Grafana dashboards you build

HTTP / TCP endpoint checks, declared as Docker labels

blackbox-exporter + a config file per target

TLS certificate expiry and chain validation

ssl_exporter

Cron and heartbeat deadlines

Pushgateway + alert rules you write

Live container logs, stdout/stderr demuxed

Dozzle, or Loki + Promtail

Image update detection, with compose-aware update and rollback commands

Diun or Watchtower

Network exposure audit: 0.0.0.0 binds, exposed database ports, host network, privileged containers

nothing standard

CVE enrichment and per-container risk score (Personal)

Trivy + its exporter

Alerts routed to Discord, webhooks, email, Telegram, Slack and Teams, with escalation (Pro)

Alertmanager

Public status page with incidents and subscribers

Cachet, Uptime Kuma, or a SaaS

One real-time dashboard for all of the above

Grafana + dashboards you build and maintain

Do I still need Prometheus? maintenant monitors your infrastructure. Prometheus monitors your application. There is no PromQL here, no custom exporters, no panels to design: maintenant already knows what a container, a certificate, an endpoint, a cron job and a CVE are, and starts watching them the moment they appear. If you ship business metrics and write your own queries, keep Prometheus for that. The two answer different questions, and plenty of people run both.

Against the tools usually stacked up next to it:

maintenant

Uptime Kuma

Portainer

Dozzle

Container auto-discovery

Yes

No

Yes

Yes

MCP server, agent-ready

Built in

Third-party

Separate

No

Live container logs

Yes

No

Yes

Yes

HTTP/TCP endpoint checks

Yes

Yes

No

No

Cron/heartbeat monitoring

Yes

Yes

No

No

SSL certificate tracking

Yes

Yes

No

No

CPU/memory/network metrics

Yes

No

Limited

No

Image update detection

Yes

No

Yes

No

Network security insights

Yes

No

No

No

CVE enrichment, risk scoring

Personal

No

No

No

Public status page

Yes

Yes

No

No

Alerting with routing

Yes

Yes

Limited

No

Kubernetes native

Yes

No

Yes

No

Single binary, zero deps

Yes

Node.js

Docker API

Docker API

Runs without a runtime

Yes

No

No

No

One container. One dashboard. Everything monitored.


Screenshots


Agents

maintenant watches, your AI agent investigates. The loop has three steps:

  1. Detect. Fixed rules decide that something is down: consecutive failures, thresholds, missed deadlines, restart loops. No model is involved, so an alert is never invented and nothing is spent while everything is fine.

  2. Push. The alert leaves as a webhook: alert.fired when it starts, alert.resolved when it recovers, with the host it belongs to (agent_id) and a link back to it.

  3. Investigate. Your agent receives the alert and queries maintenant's built-in MCP server: the container's logs, the endpoint's check history, CPU and memory, the other active alerts on the same host. You get a diagnosis, not just a red light.

flowchart LR
    S[containers, endpoints,<br>certificates, cron jobs, hosts] --> M[maintenant<br>rules fire an alert]
    M -- webhook --> A[your agent<br>Claude Code, OpenCode, n8n]
    A -- MCP: logs, history,<br>active alerts --> M

With Claude Code. A small receiver (Python, standard library only) runs on the host next to maintenant. Each fired alert starts a headless Claude Code session that can only call maintenant's read-only MCP tools, and the diagnosis lands in reports/<alert-id>.md:

export RECEIVER_TOKEN=$(openssl rand -hex 32)
python3 examples/agent-webhook/receiver.py      # listens on 127.0.0.1:9099
# what the receiver runs for each alert
claude -p "maintenant just fired this alert: {...} Investigate it read-only." \
  --setting-sources project --mcp-config mcp.json --strict-mcp-config --tools "" \
  --allowedTools mcp__maintenant__list_alerts mcp__maintenant__get_container_logs \
                 mcp__maintenant__get_endpoint_history mcp__maintenant__get_resources

mcp.json reaches maintenant over stdio with docker exec -i maintenant /app/maintenant --mcp-stdio, so no MCP port is opened: start maintenant with MAINTENANT_MCP_SOCKET=true to serve the local socket it relays to. Point a webhook channel at the receiver with an Authorization: Bearer <token> header and route alerts to it with a trigger. The AI agents guide walks through the setup.

With OpenCode, the same receiver calls opencode run instead of claude -p, with maintenant declared as a local MCP server in opencode.json. With n8n, a Webhook trigger feeds an AI Agent node whose MCP Client tool points at your instance's /mcp endpoint.

MCP server

Built-in Model Context Protocol server with 51 tools. Ask your AI assistant what is burning, read a container's logs, check the alert queue, acknowledge an alert, open an incident. stdio and Streamable HTTP transports, OAuth2 with a client id and secret for remote clients (Claude web, mobile and Desktop).


Features

Every section links to its full documentation.

Container monitoring

Zero-config auto-discovery for Docker, Docker Swarm and Kubernetes. Every container is tracked the moment it starts: state changes, health checks, restart loops, live log streaming with stdout/stderr demux. Compose projects are grouped automatically. Read-only: maintenant observes, it never touches your containers.

Multi-host monitoring

One central server, lightweight read-only agents on your other hosts, a persistent mutually-authenticated gRPC stream between them. No shared database, no message queue, no PKI to run: an agent enrolls with a one-time token and an Ed25519 keypair generated locally, and every stream is challenge-response authenticated. Revoke it from the UI at any time.

# On each remote host, one command, generated for you in the UI
docker run -d --name maintenant-agent --restart unless-stopped \
  -v /var/run/docker.sock:/var/run/docker.sock:ro \
  -v /proc:/host/proc:ro \
  -v /etc/os-release:/host/etc/os-release:ro \
  -v maintenant-agent-data:/var/lib/maintenant \
  ghcr.io/kolapsis/maintenant:latest \
  --mode=agent --server=grpcs://monitoring.example.com \
  --enrollment-token=mnt_enr_XXXXXXXXXXXXXXXX --label="prod-worker-01"

Agents detect their local runtime (Docker, Swarm or Kubernetes), stream container state, endpoints, certificates, host CPU/memory/disk, and reconnect on their own, replaying what they saw while disconnected as history. Every entity is attributed to its host, so nothing gets mixed across machines. Personal: up to 20 remote machines. Pro: unlimited.

Update intelligence

Scans OCI registries: newer versions for fixed tags, and for floating tags like latest a comparison between the digest your container runs and the one the tag points at now. You know which images have an update before you docker pull blindly. Update and rollback commands for Compose, plain Docker, Swarm and Kubernetes, with the right cd into the Compose project. No Diun, no Watchtower, no extra container: it is part of the monitor.

Host OS end-of-support

Every monitored host reports its distribution and version; maintenant checks it against the support cycles of Debian, Ubuntu, RHEL, Rocky, Alma, Alpine and SLES and alerts 30 days before the free security support ends, then again once it has. Dates ship with the binary and refresh daily from endoflife.date when the network allows.

Endpoint monitoring

HTTP and TCP checks declared as Docker labels, picked up when the container starts, or added by hand. Endpoints can also be derived from Traefik and Caddy labels (opt-in). Response times, uptime history, 90-day sparklines, failure and recovery thresholds.

labels:
  maintenant.endpoint.http: "https://api:3000/health"
  maintenant.endpoint.interval: "15s"
  maintenant.endpoint.failure-threshold: "3"

Heartbeat and cron monitoring

Create a monitor, get a URL, add one curl to the job. maintenant tracks start and finish, duration, exit code, and alerts when the deadline is missed. Outbound heartbeats let two maintenant instances watch each other, so a dead monitor does not go unnoticed.

curl -fsS -o /dev/null https://now.example.com/ping/{token}/$?

TLS certificate monitoring

Auto-detected from your HTTPS endpoints, plus standalone monitors for any domain. Full chain validation, alerts at 30, 14, 7, 3 and 1 day before expiry, OCSP stapling checks (Personal).

Resource metrics

Real-time CPU, memory, network and disk I/O per container and per host, top-consumers view for instant triage, per-container thresholds with debounce. History: 7 days on Community, 30 on Personal, 90 on Pro.

Network security insights

Flags what should not be there: ports bound to 0.0.0.0, exposed database ports, host-network mode, privileged containers, Kubernetes Services of type NodePort or LoadBalancer, and database ports exposed through them. Personal adds CVE enrichment (each image is mapped to its software ecosystem through OCI manifest inspection), a risk score per container and a unified security posture dashboard.

Alert engine

One alert pipeline for every source: container restart loops, unhealthy checks and stopped containers, endpoint failures, missed heartbeats, expiring or invalid certificates, CPU and memory thresholds, available updates, Swarm and Kubernetes health, agents going offline, hosts whose OS loses support. Channels are silent by default and routed through triggers (severity, source, scope). Alerts can be acknowledged. Silence rules for planned maintenance, three delivery attempts per notification.

Channels: Discord and webhooks (Community), email and Telegram (Personal), Slack and Microsoft Teams (Pro). Pro adds escalation policies of up to five levels that page the on-call, then the backup, then the lead, plus maintenance windows.

Public status page

Real-time status page with severity aggregation across every monitor, live over SSE. Personal adds incident timelines, Pro adds email subscribers (double opt-in, through your own SMTP server), maintenance windows and branding.


Configuration

Everything is driven by Docker labels and a handful of environment variables. No YAML to maintain.

  • Environment variables: bind address, database, base URL, PostgreSQL DSN, MCP, Kubernetes namespaces, license key, telemetry.

  • Docker labels reference: endpoints, TLS, alert severity, restart thresholds, update tracking, grouping, ignore.

  • REST API under /api/v1/, plus an SSE event stream.

services:
  maintenant:
    image: ghcr.io/kolapsis/maintenant:latest
    ports:
      # ⚠️  SECURITY: publishes the UI/API (no authentication of their own) on
      # every interface; put an auth reverse proxy in front, or bind "127.0.0.1:8080:8080". See https://docs.maintenant.dev/security/#reverse-proxy-setup.
      - "8080:8080"
    read_only: true
    security_opt:
      - no-new-privileges:true
    tmpfs:
      - /tmp:noexec,nosuid,size=64m
    volumes:
      - /var/run/docker.sock:/var/run/docker.sock:ro
      - /proc:/host/proc:ro
      - /etc/os-release:/host/etc/os-release:ro
      - maintenant-data:/data
    environment:
      MAINTENANT_ADDR: "0.0.0.0:8080"
      MAINTENANT_DB: "/data/maintenant.db"

  api:
    image: myapp:latest
    labels:
      maintenant.group: "production"
      maintenant.endpoint.http: "http://api:3000/health"
      maintenant.endpoint.interval: "15s"
      maintenant.alert.severity: "critical"

  postgres:
    image: postgres:16
    labels:
      maintenant.endpoint.tcp: "postgres:5432"
      maintenant.alert.severity: "critical"

  redis:
    image: redis:7-alpine
    labels:
      maintenant.endpoint.tcp: "redis:6379"

volumes:
  maintenant-data:

Security model

  • No built-in authentication, by design. Like Dozzle and Prometheus, maintenant sits behind your reverse proxy and auth middleware (Traefik or Caddy, Authelia or Authentik). /ping/{token} and /status/ are meant to stay public. Reverse proxy setup.

  • Read-only everywhere. Docker socket mounted :ro, read-only RBAC on Kubernetes, read-only agents. maintenant never starts, stops or modifies a container. A socket proxy is supported if you would rather not mount the socket at all.

  • Hardened container. Drops to nobody (uid 65534) once it has fixed the ownership of its volume, read_only root filesystem, no-new-privileges.

  • Anonymous, opt-out telemetry. One snapshot per hour: counts of monitored objects, edition, storage engine, version and runtime figures (OS, architecture, CPU cores, memory). No hostnames, IPs, names, URLs or keys, ever. MAINTENANT_DISABLE_TELEMETRY=1 turns it off with no background goroutine and no outbound packet. Exact payload and details.


Architecture

  • One binary, three modes. Go backend, Vue 3 frontend embedded via embed.FS, SQLite inside. The same file runs embedded (single host, default), server (central ingestion) and agent (remote host).

  • Zero dependencies. SQLite is the only datastore. No Redis, no queue, nothing to administer. A fleet operator may back the server on a PostgreSQL they already run; agents always stay on SQLite.

  • Runtime optional. Endpoints, certificates and heartbeats run without any Docker socket or Kubernetes API. Container monitoring resumes on its own when a runtime becomes reachable.

  • Real-time. SSE pushes every state change to the browser and to the status page instantly.

  • Light on memory. A freshly started instance fits in a few tens of MB; plan on about 100 MB after several days on a busy host. Runs on a Raspberry Pi, a €4 VPS or a NAS.

Full write-up in the architecture documentation.


Editions

Community is free forever and runs production infrastructure every day: it is the full product on a single host, not a crippled trial. Personal is bought once. Pro is what a team needs.

Community

Personal

Pro

Price

Free, Apache-2.0

€149 once, for life

€29/mo or €290/yr, 14-day trial

Hosts

1

up to 20 remote machines

unlimited

Endpoints

10

unlimited

unlimited

Heartbeats

5

unlimited

unlimited

Certificates

5

unlimited

unlimited

Resource history

7 days

30 days

90 days

Alert channels

Discord, webhooks

+ email, Telegram, advanced filters

+ Slack, Teams, escalation, maintenance windows

Security

network insights

+ CVE enrichment, risk scoring, security posture, OCSP

same

Status page

3 components

unlimited, incident timelines

+ subscriber notifications, branding

Use

anything

your own infrastructure

+ running it for others, email support

The Community caps on endpoints and certificates count every one of them, whether it was added by hand or declared by container labels. Those that exist when you upgrade keep running, and any beyond a cap show as "Not monitored: Community limit".

Personal covers one person on infrastructure they own or run for themselves, freelancers included, and ships with one year of updates (then €59 per extra year; every version released inside a paid year stays licensed for life). Pro adds the right to monitor other people's infrastructure. Volume pricing and custom agreements: license@maintenant.dev.

Paid editions are the same binary, self-hosted the same way. The key is verified against the license server and the signed answer is cached: the instance falls back to Community only after 60 days without reaching the server, so a few weeks offline change nothing. Your monitoring data never leaves your infrastructure.

MAINTENANT_LICENSE_KEY=your-license-key   # Personal or Pro, restart, done

Support the project

maintenant is built by one developer in Bordeaux, France. No VC, no ads, no acquisition exit. 100% of revenue funds full-time development. Ranked by impact:

  1. Buy a licence. Personal if the infrastructure is yours, Pro if you run it for others. Unlocks features and pays for the roadmap. See editions →

  2. Sponsor. Any amount, one-off or monthly, credited below. GitHub Sponsors →

  3. Spread the word. Star the repo, share on HN, Lobsters, Reddit or LinkedIn. Discoverability is oxygen for indie projects.

  4. Tell me how you use it. Two minutes, read by the developer, quoted only with your permission. Give feedback →

Backers

Every Personal owner, Pro subscriber and GitHub sponsor keeps this project independent. Thank you.

Want your company logo here? Become a corporate sponsor: visibility for you, runway for the project.


Contributing

Code contributions are welcome. Open an issue first for bigger changes; small fixes, typos and docs, just send the PR.


License

Copyright 2025-2026 Benjamin Touchard / kOlapsis, Bordeaux, France.

The core is licensed under the Apache License 2.0. The code that Personal and Pro keys unlock, under internal/commercial/ and frontend/src/commercial/, is source-available under the Maintenant Commercial Source License: free to read and contribute to, production use requires a matching licence key. See NOTICE and COMMERCIAL-LICENSE.md.


Available Tools

51 tools
acknowledge_alertA

Acknowledge an active alert so it stops escalating.

Inputs: alert_id (required), acknowledged_by.

create_channelA

Create a notification channel. The webhook type is open in every edition; email needs Personal, slack needs Pro, teams needs Pro, telegram needs Personal.

Inputs: url (required), name (required), type (required), config, +3 more.

create_escalation_policyC

Create a new escalation policy. Requires the Pro edition.

Inputs: name (required), active (required), levels (required), filters (required).

create_incidentB

Create a new incident on the status page. Requires the Personal edition.

Inputs: title (required), severity (required), status, message, +1 more.

create_maintenanceA

Schedule a maintenance window on the status page. Requires the Pro edition.

Inputs: title (required), end_time (required), start_time (required), message, +1 more.

create_triggerB

Create a new alert trigger, notifying recoveries by default. Scope filters require the Personal edition.

Inputs: name (required), channel_ids (required), filter_scopes (required), filter_sources (required), +3 more.

delete_channelB

Delete a notification channel. Triggers and escalation levels pointing at it lose that destination.

Inputs: id (required).

delete_escalation_policyA

Delete an escalation policy and stop any active runs. Requires the Pro edition.

Inputs: id (required).

delete_triggerB

Delete an alert trigger. The linked channels are not deleted.

Inputs: id (required).

get_channelA
Read-only

Get a single notification channel by ID, with its delivery health and the triggers routing to it. Header values are masked as *** and Slack, Discord and Teams webhook URLs are cut after the host; the secret is never returned.

Inputs: id (required).

get_containerA
Read-only

Get detailed information about a specific container including state, health, image, labels, and recent state transitions.

Inputs: container_id (required).

get_container_logsB
Read-only

Get recent log lines from a container's stdout/stderr output.

Inputs: container_id (required), lines, timestamps.

get_editionA
Read-only

Report the running edition, which capability each edition opens, the quota usage of capped resources, and the resource-history windows. Call this before offering a feature that may be gated, instead of asking the operator which edition they run.

get_endpoint_historyA
Read-only

Get detailed check history for a specific endpoint, including response times, status codes, and error messages.

Inputs: endpoint_id (required), limit.

get_escalation_policyA
Read-only

Get a single escalation policy by ID. Requires the Pro edition.

Inputs: id (required).

get_escalation_runA
Read-only

Get full detail of an escalation run including all deliveries. Requires the Pro edition.

Inputs: id (required).

get_healthA
Read-only

Check maintenant's own health status, version, and runtime information.

get_resourcesA
Read-only

Get current host resource metrics summary including CPU usage, memory usage, network throughput in bytes per second (net_rx_rate, net_tx_rate), and disk usage.

get_security_insightsA
Read-only

List security insights (dangerous runtime configurations) across containers, or for a single container. Includes a severity summary.

Inputs: container_id.

get_security_postureA
Read-only

Get the infrastructure security posture score, or the posture of a single container. Requires the Personal edition.

Inputs: container_id.

get_swarm_infoA
Read-only

Get Docker Swarm cluster info (manager/worker counts, whether this node is a manager). Reports inactive when Swarm is not detected.

get_top_consumersB
Read-only

Get containers ranked by resource consumption (CPU or memory), useful for identifying resource-heavy containers.

Inputs: metric (required), limit, period.

get_triggerA
Read-only

Get a single alert trigger by ID.

Inputs: id (required).

get_updatesA
Read-only

List available image updates for monitored containers, and the operating system of every monitored host with its end-of-support status (supported, ending_soon, ended, unknown, untracked) and dates.

list_agentsA
Read-only

List all registered remote agents with their connection state, runtime type, hostname, and label. Requires the Personal edition.

list_alert_escalation_runsA
Read-only

List escalation runs attached to a specific alert. Requires the Pro edition.

Inputs: alert_id (required).

list_alertsA
Read-only

List alerts. By default returns only active (unresolved) alerts that are not yet acknowledged. Set active_only to false to return the last 100 alerts instead, acknowledged, resolved and silenced ones included.

Inputs: active_only.

list_certificatesA
Read-only

List all monitored TLS certificates with expiration dates, issuer, chain validity, and days until expiry.

Inputs: agent_id.

list_channelsA
Read-only

List notification channels. Channels are silent on their own: an alert reaches one only through an alert trigger or an escalation level. Header values are masked as *** and Slack, Discord and Teams webhook URLs are cut after the host; the secret is never returned.

list_containersB
Read-only

List all monitored containers with their current state (running, stopped, restarting), health status, and basic metadata.

Inputs: agent_id.

list_cveA
Read-only

List active CVE vulnerabilities detected in container images, optionally filtered by container or minimum severity. For a single container the response carries the CVE evaluation state: an empty list only means "no known CVEs" when the state is "evaluated". Requires the Personal edition.

Inputs: severity, container_id.

list_endpointsA
Read-only

List all monitored HTTP/TCP endpoints with their current status (up/down), response time, and uptime percentage.

Inputs: agent_id.

list_escalation_policiesA
Read-only

List all escalation policies with their filters and levels. Requires the Pro edition.

Inputs: active_only (required).

list_heartbeatsA
Read-only

List all heartbeat/cron monitors with their current status, last ping time, expected period, and grace period.

Inputs: agent_id.

list_kubernetes_namespacesA
Read-only

List Kubernetes namespaces known to maintenant across monitored clusters.

Inputs: agent_id.

list_kubernetes_nodesA
Read-only

List Kubernetes nodes with their roles, conditions, capacity and running pod counts.

Inputs: agent_id.

list_kubernetes_podsA
Read-only

List Kubernetes pods with their status, restart count and node, optionally filtered by namespace, workload, node or status.

Inputs: node, status, agent_id, workload, +1 more.

list_kubernetes_workloadsA
Read-only

List Kubernetes workloads (Deployments, StatefulSets, DaemonSets...) grouped by namespace, with ready/desired replica counts and status.

Inputs: agent_id, namespaces.

list_risk_scoresA
Read-only

List image update risk scores per container (0-100) with their risk level. Requires the Personal edition.

Inputs: container_id.

list_swarm_nodesA
Read-only

List Docker Swarm nodes with their role, status, availability and task count.

Inputs: agent_id.

list_swarm_servicesB
Read-only

List Docker Swarm services with their image, mode, and desired/running replica counts.

Inputs: agent_id.

list_swarm_tasksA
Read-only

List Docker Swarm tasks (the running units of a service), optionally filtered by service, with their state and node.

Inputs: agent_id, service_id.

list_triggersA
Read-only

List all alert triggers (filter rules + channel destinations).

pause_monitorA

Pause a heartbeat monitor to temporarily stop alerting. Only heartbeat monitors are supported.

Inputs: monitor_id (required), monitor_type (required).

resume_monitorA

Resume a paused heartbeat monitor. Only heartbeat monitors are supported.

Inputs: monitor_id (required), monitor_type (required).

set_escalation_policy_activeA

Activate or deactivate an escalation policy; deactivating it stops its running escalations. Requires the Pro edition.

Inputs: id (required), active (required).

test_channelA

Send a test notification through a channel and report whether it was delivered.

Inputs: id (required).

update_channelA

Update a notification channel. Omitted fields keep their stored value; a stored secret is never cleared this way.

Inputs: id (required), url, name, type, +4 more.

update_escalation_policyB

Update an existing escalation policy (name, filters, levels, active). Requires the Pro edition.

Inputs: id (required), name (required), active (required), levels (required), +1 more.

update_incidentA

Post a status update to an existing status page incident. Requires the Personal edition.

Inputs: status (required), message (required), incident_id (required).

update_triggerB

Update an existing alert trigger (last-write-wins). Scope filters require the Personal edition.

Inputs: id (required), name (required), channel_ids (required), filter_scopes (required), +4 more.

Tool Schema Changelog

Recent tool additions, removals, and schema changes observed during successful MCP inspections.

Loading tool schema changelog…

    TDQS

    B3.4/5.0

    Scored across 51 tools

    Disambiguation4/5

    Most tools are cleanly separated by resource + action (list_containers/get_container/get_container_logs, swarm vs kubernetes vs endpoint resources). A few clusters come close: get_security_insights vs get_security_posture, and get_updates vs list_cve vs list_risk_scores all touch image risk from different angles. Descriptions disambiguate these well, so collisions should be rare.

    Naming Consistency5/5

    Every tool follows a strict snake_case verb_noun pattern (list_*, get_*, create_*, update_*, delete_*, plus set_/pause_/resume_/acknowledge_/test_ verbs used deliberately). No camelCase or stylistic drift anywhere in the 51 names.

    Tool Count2/5

    51 tools is heavy even for a multi-domain monitoring platform, and several families could be consolidated (six escalation-policy tools, three swarm list tools, four kubernetes list tools, four image-risk tools). Many tools also differ only by a boolean filter that could be a parameter, inflating the surface an agent must scan.

    Completeness3/5

    Full lifecycle exists for channels, triggers, and escalation policies, but there are notable dead ends: alerts can be listed and acknowledged but not resolved or silenced despite silenced state existing; heartbeats and endpoints can be listed/paused but not created; incidents and maintenance can be created but not listed, resolved, or cancelled.

    Maintenance

    ActivityActive
    ResponsivenessUsually handled

    Related MCP Connectors

    Related MCP Servers

    • A
      license
      A
      quality
      D
      maintenance
      A comprehensive Model Context Protocol (MCP) server for Grafana, Prometheus, Kafka UI, and Datadog. Features a secure "Bring Your Own Key" (BYOK) architecture where credentials stay local. Provides tools for metrics querying, dashboard inspection, Kafka lag monitoring, and unified health checks.
      23
      21 npm
      4
      MIT
    • F
      license
      Not graded
      quality
      B
      maintenance
      Server Monitor MCP is a Linux server inspection service with web backend and MCP interface. It allows you to manage SSH hosts and query server metrics via natural language.
      -