Features Demo Pricing Guides Alternatives Blog Docs My account Français Buy a license GitHub

Built-in MCP server · Docker, Swarm, Kubernetes

Monitor your Docker servers from one container.

Containers, endpoints, TLS certificates, cron jobs, host resources and image updates. One tool instead of Uptime Kuma, Healthchecks, a certificate checker and a Grafana stack.

Read-only: it never starts, stops or changes a container. Under 30 MB of RAM at idle.

Free on one server. Personal 149 € incl. VAT once. Pro 29 €/month excl. VAT. See pricing

  • Under 30 MB of RAM at idle
  • Read-only access to the Docker socket
  • Docker · Swarm · Kubernetes
  • Apache 2.0 open source core

Five tools to watch one server.

Uptime Kuma for HTTP, Healthchecks for cron jobs, Prometheus, cAdvisor and Grafana for metrics, a script for certificates. Five things to install, update and secure, and none of them sees the whole stack.

Maintenant is one container that reads the Docker socket and finds what runs on its own. Endpoints and certificates are declared with Docker labels, next to the service they watch.

What it watches

Containers
Found on their own on Docker, Swarm and Kubernetes. States, health checks, restart loops, logs.
Endpoints
HTTP and TCP checks with latency and the status code you expect, declared as Docker labels.
Cron jobs
One ping URL per job. You get an alert when a run is late or fails.
TLS certificates
Found on your HTTPS endpoints. Alerts at 30, 14, 7, 3 and 1 day before expiry.
Image updates and CVEs
Which containers have a newer image, and Personal which known vulnerabilities they carry.
Exposure
Ports published on every interface, privileged and host-network containers, a host OS past its end of life.
Status page
Public and live, built from your monitors. Pro adds subscribers and branding.
Several servers
Personal Read-only agents on your other hosts, one dashboard for all of them. How it works
MCP server
Claude Code, OpenCode or n8n read your containers, logs and alerts, and nothing else.

Every feature, edition by edition

See it running before you install anything.

The demo runs the Pro edition with every feature unlocked, on real containers. No account, no install. Open the alerts, the status page, the security posture and the multi-server view.

Open the live demo
Multi-server agents: monitor your whole fleet from one server Security posture: vulnerability overview, risk scores Public status page: all systems operational

Maintenant watches. Your 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 the 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.

Show the setup

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.

# on the host, next to Maintenant
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." \
  --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. Point a webhook channel at the receiver with an Authorization: Bearer header and route alerts to it with a trigger.

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.

Read the AI agents guide

Install with one compose file.

# docker-compose.yml
services:
  maintenant:
    image: ghcr.io/kolapsis/maintenant:latest
    ports:
      - "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:
Before you put it on a network

This is a first run on your own machine. It publishes 8080 on every interface, which leaves the admin API open to whoever reaches the host, and mounting the socket read-only protects the file, not the Docker API behind it. Keep maintenant behind a reverse proxy that authenticates, and reach Docker through a socket proxy. Read the security guide

Containers show up on their own. Add a label to watch an endpoint. Bought a key later? Set MAINTENANT_LICENSE_KEY and restart: same container, same data.

Compatible with Docker Engine 19.03+ and Kubernetes · Linux amd64/arm64 · macOS · WSL2

How it compares

Honest comparisons, including what each of these tools does better.

See the paid editions running.

The demo has every Pro feature on. When you know which edition fits, the pricing page has the rest.

Or install it for free