npm package discovery and stats viewer.

Discover Tips

  • General search

    [free text search, go nuts!]

  • Package details

    pkg:[package-name]

  • User packages

    @[username]

Sponsor

Optimize Toolset

I’ve always been into building performant and accessible sites, but lately I’ve been taking it extremely seriously. So much so that I’ve been building a tool to help me optimize and monitor the sites that I build to make sure that I’m making an attempt to offer the best experience to those who visit them. If you’re into performant, accessible and SEO friendly sites, you might like it too! You can check it out at Optimize Toolset.

About

Hi, 👋, I’m Ryan Hefner  and I built this site for me, and you! The goal of this site was to provide an easy way for me to check the stats on my npm packages, both for prioritizing issues and updates, and to give me a little kick in the pants to keep up on stuff.

As I was building it, I realized that I was actually using the tool to build the tool, and figured I might as well put this out there and hopefully others will find it to be a fast and useful way to search and browse npm packages as I have.

If you’re interested in other things I’m working on, follow me on Twitter or check out the open source projects I’ve been publishing on GitHub.

I am also working on a Twitter bot for this site to tweet the most popular, newest, random packages from npm. Please follow that account now and it will start sending out packages soon–ish.

Open Software & Tools

This site wouldn’t be possible without the immense generosity and tireless efforts from the people who make contributions to the world and share their work via open source initiatives. Thank you 🙏

© 2026 – Pkg Stats / Ryan Hefner

@burg_dal/mcp-uptime-kuma

v0.0.5

Published

A Model Context Protocol (MCP) server for Uptime Kuma version 2, supporting both stdio and streamable HTTP transports.

Readme

mcp-uptime-kuma

This is a fork of DavidFuchs/mcp-uptime-kuma. For the original project please refer to the upstream repository. This fork is published under @burg_dal/mcp-uptime-kuma and contains the following changes not yet merged upstream:

  • important filter for getHeartbeats / listHeartbeats — filters results to status-change events only (UP↔DOWN transitions), making outage analysis practical within the 100-entry cache window
  • HeartbeatSchema.passthrough() — preserves unknown fields from the Uptime Kuma API instead of silently dropping them

A Model Context Protocol (MCP) server for Uptime Kuma version 2. Supports stdio and streamable HTTP transports.

GitHub Stars GitHub Last Commit GitHub Repo Size

GitHub Actions - npmjs npmjs Version npmjs Downloads

GitHub Actions - DockerHub Docker Version Docker Pulls

Features

  • Real-time Monitoring: Access monitors, heartbeats, uptime, and responsiveness metrics via Socket.IO with instant status change notifications.
  • Context-Friendly: Returns only essential data by default to avoid overwhelming LLM context windows.
  • Multiple Transports: Supports stdio (local) and streamable HTTP (remote) transports.

Quick Start

Using npx (stdio transport)

Add this to your MCP client configuration:

{
  "mcpServers": {
    "uptime-kuma": {
      "command": "npx",
      "args": ["-y", "@davidfuchs/mcp-uptime-kuma"],
      "env": {
        "UPTIME_KUMA_URL": "http://your-uptime-kuma-instance:3001",
        "UPTIME_KUMA_USERNAME": "your_username",
        "UPTIME_KUMA_PASSWORD": "your_password"
      }
    }
  }
}

Using Docker (streamable HTTP transport)

Option 1: Docker Run

docker run -d \
  --name mcp-uptime-kuma \
  -p 3000:3000 \
  -e UPTIME_KUMA_URL=http://your-uptime-kuma-instance:3001 \
  -e UPTIME_KUMA_USERNAME=your_username \
  -e UPTIME_KUMA_PASSWORD=your_password \
  davidfuchs/mcp-uptime-kuma:latest \
  -t streamable-http

Option 2: Docker Compose

A docker-compose.yml file is provided in the repository. Download it, configure your environment variables, and run:

docker compose up -d

Then configure your MCP client to connect to the endpoint:

{
  "mcpServers": {
    "uptime-kuma": {
      "url": "http://localhost:3000/mcp"
    }
  }
}

See Authentication Methods for JWT token and anonymous authentication options.

Example Conversation

MCP server answering questions about Uptime Kuma monitors Conversation in LibreChat where the mcp-uptime-kuma server is providing real-time information from Uptime Kuma.

Available Tools

Monitors

| Tool | Purpose | |------|---------| | getMonitorSummary | Get a quick overview of all monitors with their current status. Supports filtering. | | listMonitors | Get the full list of all monitors with configurations. Supports filtering. | | listMonitorTypes | Get all available monitor types supported by Uptime Kuma. | | getMonitor | Get detailed configuration for a specific monitor by ID. | | createMonitor | Create a new monitor (requires name and type at minimum). | | updateMonitor | Update an existing monitor's configuration. | | deleteMonitor | Permanently delete a monitor and all its heartbeat history. | | pauseMonitor | Pause a monitor to stop performing checks. | | resumeMonitor | Resume a paused monitor to restart checks. |

Heartbeats

| Tool | Purpose | |------|---------| | listHeartbeats | Get status check history for all monitors. | | getHeartbeats | Get status check history for a specific monitor. |

Both heartbeat tools support filtering by:

  • maxHeartbeats: Number of heartbeats to return per monitor (up to 100)
  • important: true = only status-change events (UP↔DOWN transitions), false = only non-status-change heartbeats

Examples:

getHeartbeats({ monitorID: 5, maxHeartbeats: 100, important: true })  // All status changes for monitor 5
listHeartbeats({ maxHeartbeats: 100, important: true })                // Status changes across all monitors

Note: The cache holds the last 100 heartbeats per monitor (Uptime Kuma's server limit). Using important: true is especially useful for outage analysis since status-change events are infrequent and cover a longer time window within that cache.

Notifications

| Tool | Purpose | |------|---------| | listNotifications | List all configured notification channels (Slack, Discord, email, webhooks, etc.). | | addNotification | Create a new notification channel. | | updateNotification | Update an existing notification channel. | | deleteNotification | Permanently delete a notification channel. |

Tags

| Tool | Purpose | |------|---------| | listTags | List all tags defined in Uptime Kuma. | | addTag | Create a new tag that can be assigned to monitors. | | deleteTag | Permanently delete a tag (removes it from all monitors). |

Maintenance

| Tool | Purpose | |------|---------| | getMaintenanceWindows | List all scheduled maintenance windows. | | createMaintenance | Schedule a new maintenance window. |

Status Pages & Settings

| Tool | Purpose | |------|---------| | listStatusPages | List all configured status pages. | | getSettings | Get Uptime Kuma server settings. |

Filtering

getMonitorSummary and listMonitors support filtering by:

  • keywords: Space-separated keywords for fuzzy matching against monitor pathNames
  • type: Monitor type(s), comma-separated (e.g., "http", "http,ping,dns")
  • active: Filter by active (true) or inactive (false) monitors
  • maintenance: Filter by maintenance mode status
  • tags: Tag name and optional value, comma-separated (e.g., "production", "env=staging")
  • status (getMonitorSummary only): Heartbeat status ("0"=DOWN, "1"=UP, "2"=PENDING, "3"=MAINTENANCE)

getHeartbeats and listHeartbeats support filtering by:

  • important: true = only status-change events (UP↔DOWN transitions), false = only non-status-change heartbeats

Examples:

getMonitorSummary({ status: "0" })                                     // All DOWN monitors
getMonitorSummary({ type: "http", maintenance: true })                 // HTTP monitors in maintenance
listMonitors({ tags: "production,region=us-east" })                    // Monitors with specific tags
getHeartbeats({ monitorID: 5, maxHeartbeats: 100, important: true })  // Status changes for monitor 5
listHeartbeats({ maxHeartbeats: 100, important: true })                // Status changes across all monitors

Authentication Methods

Anonymous Authentication

If authentication is disabled on your Uptime Kuma instance, only UPTIME_KUMA_URL is required.

Username/Password Authentication

UPTIME_KUMA_URL=http://your-instance:3001
UPTIME_KUMA_USERNAME=your_username
UPTIME_KUMA_PASSWORD=your_password
UPTIME_KUMA_2FA_TOKEN=123456  # Optional, only if 2FA is enabled

JWT Token Authentication

Recommended for 2FA users. Takes precedence over username/password if both are provided.

UPTIME_KUMA_URL=http://your-instance:3001
UPTIME_KUMA_JWT_TOKEN=your_jwt_token

Obtaining Your JWT Token

Using the CLI utility (recommended):

npx -p @davidfuchs/mcp-uptime-kuma mcp-uptime-kuma-get-jwt http://localhost:3001 admin mypassword

Using Docker:

docker run --rm davidfuchs/mcp-uptime-kuma:latest get-jwt http://host.docker.internal:3001 admin mypassword

From browser: Open Developer Tools → Storage/Application → Local Storage → find token key.

LibreChat Configuration

stdio transport:

mcpServers:
  uptime-kuma:
    command: npx
    args: ["-y", "@davidfuchs/mcp-uptime-kuma"]
    env:
      UPTIME_KUMA_URL: "http://your-instance:3001"
      UPTIME_KUMA_USERNAME: "your_username"
      UPTIME_KUMA_PASSWORD: "your_password"
    serverInstructions: true

streamable HTTP transport:

Update the allowed domains to whatever domain you're using in the URL (e.g., localhost or host.docker.internal for Docker setups):

mcpServers:
  uptime-kuma:
    type: streamable-http
    url: "http://mcp-uptime-kuma:3000/mcp"
    serverInstructions: true

mcpSettings:
  allowedDomains:
    - 'mcp-uptime-kuma'

Contributing

For development setup, building, testing, and project structure, see CONTRIBUTING.md.

Learn More