Maintenant
Summary: Maintenant's MCP server lets an AI agent observe a monitored stack (containers, endpoints, certificates, heartbeats, Kubernetes/Swarm, resources, security) and operate its alerting layer (alerts, channels, triggers, escalations, status-page incidents).
Containers: list containers and fetch one container's state, health, image, labels and recent transitions; pull recent stdout/stderr log lines (up to 1000, optional timestamps).
Endpoints & heartbeats: list HTTP/TCP endpoints with status and uptime, retrieve an endpoint's check history (response times, status codes, errors); list heartbeat/cron monitors; pause and resume heartbeat monitors.
Certificates & updates: list TLS certificates with issuer, chain validity and days to expiry; list available image updates and each host's OS end-of-support status.
Resources: get host CPU/memory/network/disk summary; rank containers by CPU or memory over live or historical windows (1h–90d, edition-dependent).
Security: list security insights (dangerous runtime configs) globally or per container; get infrastructure or per-container posture score (Personal); list CVEs by severity/container (Personal); list per-container risk scores (Personal).
Kubernetes: list namespaces, nodes, pods (filterable by namespace, workload, node, status) and workloads by namespace with replica counts.
Docker Swarm: cluster info, nodes, services, and tasks (filterable by service).
Multi-host: list registered remote agents with connection state, runtime, hostname and label (Personal).
Alerts: list alerts (active/unacknowledged by default, or the last 100 including resolved/silenced); acknowledge an alert so it stops escalating.
Notification channels: list and get channels (secrets never returned, headers masked); create, update, delete; send a test notification; types gated by edition (webhook/Discord open, email/Telegram Personal, Slack/Teams Pro).
Alert triggers: list, get, create, update (last-write-wins) and delete trigger rules with severity/source/scope CSV filters, channel destinations and resolve notifications.
Escalation policies (Pro): list, get, create, update, delete policies with up to five levels and scope/severity filters; activate/deactivate (halting running escalations); list escalation runs for an alert and inspect a run's deliveries.
Status page: create and update incidents with severity, status and affected components (Personal); schedule maintenance windows with start/end times (Pro).
Meta: check maintenant's own health, version and runtime; query the running edition, per-edition capabilities, quota usage and history windows before offering a gated feature.
Routes monitoring alerts to Discord channels, including escalation support.
Monitors Docker containers through the Docker socket, auto-discovering container state, health checks, restart loops, resource usage, live logs, image updates, and network exposure for agent investigation.
Connects to the Kubernetes API with read-only RBAC to monitor namespaces, Deployments, DaemonSets, StatefulSets, workload health, resources, logs, and image updates.
Routes monitoring alerts to Slack, including escalation support.
Routes monitoring alerts to Telegram, including escalation support.
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 -dOpen 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 bashEndpoints, 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: | 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:
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.
Push. The alert leaves as a webhook:
alert.firedwhen it starts,alert.resolvedwhen it recovers, with the host it belongs to (agent_id) and a link back to it.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 --> MWith 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_resourcesmcp.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_onlyroot 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=1turns 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 runsembedded(single host, default),server(central ingestion) andagent(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, doneSupport 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:
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 →
Sponsor. Any amount, one-off or monthly, credited below. GitHub Sponsors →
Spread the word. Star the repo, share on HN, Lobsters, Reddit or LinkedIn. Discoverability is oxygen for indie projects.
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 toolsacknowledge_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_channelARead-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_containerARead-only
Get detailed information about a specific container including state, health, image, labels, and recent state transitions.
Inputs: container_id (required).
get_container_logsBRead-only
Get recent log lines from a container's stdout/stderr output.
Inputs: container_id (required), lines, timestamps.
get_editionARead-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_historyARead-only
Get detailed check history for a specific endpoint, including response times, status codes, and error messages.
Inputs: endpoint_id (required), limit.
get_escalation_policyARead-only
Get a single escalation policy by ID. Requires the Pro edition.
Inputs: id (required).
get_escalation_runARead-only
Get full detail of an escalation run including all deliveries. Requires the Pro edition.
Inputs: id (required).
get_healthARead-only
Check maintenant's own health status, version, and runtime information.
get_resourcesARead-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_insightsARead-only
List security insights (dangerous runtime configurations) across containers, or for a single container. Includes a severity summary.
Inputs: container_id.
get_security_postureARead-only
Get the infrastructure security posture score, or the posture of a single container. Requires the Personal edition.
Inputs: container_id.
get_swarm_infoARead-only
Get Docker Swarm cluster info (manager/worker counts, whether this node is a manager). Reports inactive when Swarm is not detected.
get_top_consumersBRead-only
Get containers ranked by resource consumption (CPU or memory), useful for identifying resource-heavy containers.
Inputs: metric (required), limit, period.
get_triggerARead-only
Get a single alert trigger by ID.
Inputs: id (required).
get_updatesARead-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_agentsARead-only
List all registered remote agents with their connection state, runtime type, hostname, and label. Requires the Personal edition.
list_alert_escalation_runsARead-only
List escalation runs attached to a specific alert. Requires the Pro edition.
Inputs: alert_id (required).
list_alertsARead-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_certificatesARead-only
List all monitored TLS certificates with expiration dates, issuer, chain validity, and days until expiry.
Inputs: agent_id.
list_channelsARead-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_containersBRead-only
List all monitored containers with their current state (running, stopped, restarting), health status, and basic metadata.
Inputs: agent_id.
list_cveARead-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_endpointsARead-only
List all monitored HTTP/TCP endpoints with their current status (up/down), response time, and uptime percentage.
Inputs: agent_id.
list_escalation_policiesARead-only
List all escalation policies with their filters and levels. Requires the Pro edition.
Inputs: active_only (required).
list_heartbeatsARead-only
List all heartbeat/cron monitors with their current status, last ping time, expected period, and grace period.
Inputs: agent_id.
list_kubernetes_namespacesARead-only
List Kubernetes namespaces known to maintenant across monitored clusters.
Inputs: agent_id.
list_kubernetes_nodesARead-only
List Kubernetes nodes with their roles, conditions, capacity and running pod counts.
Inputs: agent_id.
list_kubernetes_podsARead-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_workloadsARead-only
List Kubernetes workloads (Deployments, StatefulSets, DaemonSets...) grouped by namespace, with ready/desired replica counts and status.
Inputs: agent_id, namespaces.
list_risk_scoresARead-only
List image update risk scores per container (0-100) with their risk level. Requires the Personal edition.
Inputs: container_id.
list_swarm_nodesARead-only
List Docker Swarm nodes with their role, status, availability and task count.
Inputs: agent_id.
list_swarm_servicesBRead-only
List Docker Swarm services with their image, mode, and desired/running replica counts.
Inputs: agent_id.
list_swarm_tasksARead-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_triggersARead-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
Scored across 51 tools
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.
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.
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.
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
Related MCP Connectors
Kafka and Postgres Monitoring Stack
Monitoring for small teams. Logs, traces, metrics, live issue tracking, API/MCP uptime.
Real-time infrastructure monitoring with metrics, logs, alerts, and ML-based anomaly detection.
Read-only server insight: why a Linux server or K8s cluster is slow, failing or changed.
Related MCP Servers
- AlicenseAqualityDmaintenanceA 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.2321 npm4MIT
- FlicenseNot gradedqualityBmaintenanceEnables exploration of Kubernetes metrics, logs, traces, and service graph data via simple tools.1-
- AlicenseAqualityDmaintenanceEnables AI agents to monitor Docker containers, system resources, ports, and logs in real-time.5MIT
- FlicenseNot gradedqualityBmaintenanceServer 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.-