uptimepage

uptimepage

MCP server for Uptimepage uptime monitoring. An LLM client can read your monitors and incidents, run a check on demand, and post incident updates. Writes need an OAuth login and a scoped token, and each one is logged.

Category
访问服务器

README

<div align="center">

<img src="static/marketing/og.png" alt="uptimepage" width="640">

uptimepage

Status pages + uptime monitoring. Free forever. Live in 5 minutes.

Monitor HTTP, TCP, DNS, TLS-certificate and domain expiry from multiple regions — then turn green and red into a polished public status page your customers can subscribe to. Drive it by click, REST API, or Terraform. Self-host the single binary or use the hosted service.

docs Terraform Registry License: AGPL-3.0

Try it free →  ·  Docs  ·  Self-host  ·  Terraform  ·  MCP

<img src="docs/img/screenshot-dashboard.png" alt="uptimepage dashboard — uptime, response time, and per-monitor status" width="900">

</div>

Why uptimepage

Monitoring with a built-in status page isn't new — the bet here is doing it free, self-hostable, and fully as code:

  • Free hosted tier, no card — and AGPL if you'd rather run it yourself.
  • One self-contained binarydocker compose up and you're live, not a Kubernetes platform to operate.
  • Everything as code — REST API, scoped tokens, an official Terraform provider, and an MCP server your LLM can query.
  • Probes you own — run multi-region agents wherever your users are, on your own boxes.
  • Status page + incidents + alerting in one — components, subscribers, and multi-channel paging that repeats until acknowledged, no second tool.
  • No per-seat or feature-gated tiers — checks, status pages, and subscribers aren't paywalled.

Who it's for

  • Founders / small SaaS — a professional status page in minutes, free, no self-host headache.
  • Platform / SRE leads — monitors as code, multi-region probes, incident paging to your on-call channels, without vendor sprawl.
  • Self-hosters — one binary plus two databases, no SaaS lock-in.

Live status

uptimepage monitors itself. These badges are served by the running app from a public status page — no third-party service, no cron job updating a JSON file.

uptimepage status

Surface HTTP DNS TLS cert
uptimepage.dev (website) http dns tls
app.uptimepage.dev (dashboard) http
mcp.uptimepage.dev (MCP) http

Embed your own with the snippet in Settings → Pages → your page → Badge.

Features

Checks HTTP, TCP, DNS, TLS-cert expiry, domain expiry — per-host circuit breaking, designed for ~50k concurrent in-flight
Public status page HTML + JSON + RSS, per-component opt-in, incident narration, maintenance windows, email + webhook subscribers
Alerting Slack, webhook, Telegram, WhatsApp, SMS, PagerDuty, ntfy, Pushover, Discord, … — per-org channels, sealed secrets, fire-once + recovery, repeat until acknowledged
Incidents Internal incident state ⊥ public phase, acknowledge to silence paging, per-monitor reminder cadence
Multi-region Regional probe agents, per-region views, run your own agent anywhere
Automation REST API, scoped API tokens, Terraform provider, MCP server for LLM clients
Built on Rust 1.95 / Tokio / Axum, Postgres + ClickHouse, one ~23 MB self-contained binary

Live service: https://uptimepage.dev — hosted, free, sign in with GitHub. Full docs: https://uptimepage.github.io/uptimepage/

<div align="center">

<img src="docs/img/screenshot-monitors.png" alt="uptimepage monitors list — grouped, Terraform-managed checks" width="900">

</div>

Check types

Type Purpose Default interval Floor
http request a URL, match status / body / latency 60 s max(plan_min, 10 s)
tcp open a TCP socket within a timeout 60 s max(plan_min, 10 s)
dns resolve a record, optionally match a value 60 s max(plan_min, 10 s)
tls_cert open TLS, parse leaf cert, alert before notAfter 86 400 s (daily) max(plan_min, 3600 s)
domain_expiry query RDAP, alert before the domain's expiration event 86 400 s (daily) max(plan_min, 3600 s)

tls_cert and domain_expiry use warn_days / critical_days thresholds and surface days_remaining plus registrar / cert subject in the result payload. Their floor is 1 hour regardless of plan — these probes track values that change on a scale of days, not minutes. See docs/api.md for the full payload shapes.

Public status page

A customer-facing /status page (HTML + JSON + RSS 2.0) is built into the binary. Per-target opt-in via public_status; the page bypasses basic auth at the Caddy layer with a per-IP rate limit, caches for 10 s in-process, and degrades gracefully if ClickHouse is unreachable. Operators narrate incidents (PATCH /api/v1/incidents/{id}, POST /api/v1/incidents/{id}/updates) and schedule maintenance windows (POST /api/v1/maintenance). Visitors subscribe for email or webhook updates. See docs/public-status.md.

Alerting

Notification channels are per-org resources (Slack incoming webhook, generic HTTP webhook, Telegram bot, SMS gateway, …) created via /api/v1/notification-channels. Transport secrets are sealed at rest and never echoed back. A target opts in by binding one or more channels in its alerts array:

"alerts": [
  { "channel_id": "0192…", "after_failures": 3 },
  { "channel_id": "0193…", "after_failures": 6, "notify_recovery": false }
]

Fire-once + recovery semantics. Channels are tenant-isolated — a target can only bind a channel its own org owns. See docs/api.md for the full contract.

Multi-region

Run probe agents in the regions your users live in; the control plane assigns checks per region and the dashboard and status page can be viewed per-region. Bring your own agent anywhere — a single binary with an org-scoped token. See docs/multi-region.md.

Terraform

Manage targets and notification channels as code with the official provider uptimepage/uptimepage (source):

terraform {
  required_providers {
    uptimepage = {
      source = "uptimepage/uptimepage"
    }
  }
}

provider "uptimepage" {
  token = var.uptimepage_token # or set UPTIMEPAGE_TOKEN
  org   = "your-org-slug"      # required for managed resources; or UPTIMEPAGE_ORG
  # endpoint defaults to https://app.uptimepage.dev; set it for a self-hosted instance
}

resource "uptimepage_target" "api" {
  name     = "api prod"
  interval = 60
  check = {
    type = "http"
    http = {
      url             = "https://example.com/healthz"
      expected_status = { kind = "exact", exact = 200 }
    }
  }
}

MCP server

An MCP server lets an LLM client (the claude.ai connector, Claude Desktop, an IDE) answer questions about one org's monitors and take a few guarded actions, over Streamable HTTP at /mcp. Seven read-only tools plus four write tools (each scope-gated, confirmed per action, and audited). Auth is an org-bound scoped token — paste one by hand, or use the one-click OAuth 2.1 connector. Off by default; enable with UPTIMEPAGE_MCP_ENABLED=true (+ MCP_OAUTH_ENABLED for the connector). See docs/mcp.md.

Self-host

Docker (recommended)

docker compose up -d

Brings up Postgres 18, ClickHouse 26.3, and the monitor. Migrations for both databases run at process startup — no init-script wiring, no external migrator.

Create the first owner account (the sign-in providers all assume an account already exists, so seed one out of band):

docker compose exec uptimepage uptimepage bootstrap-owner --email you@example.com

It prints, shown only once: a one-time link that signs you straight into the web dashboard, and a full-access API token plus the org slug. Open the link to reach the dashboard; use the token for the API. Create a target:

curl -X POST http://127.0.0.1:8080/api/v1/targets \
  -H 'authorization: Bearer <token>' \
  -H 'x-uptimepage-org: <org-slug>' \
  -H 'content-type: application/json' \
  -d '{
    "name": "example",
    "check": {
      "type": "http",
      "url": "https://example.com/",
      "method": "GET",
      "timeout": 5000,
      "follow_redirects": false,
      "max_redirects": 0,
      "expected_status": { "kind": "exact", "value": 200 },
      "headers": {},
      "verify_tls": true
    },
    "interval": 60,
    "enabled": true,
    "tags": []
  }'

Read uptime, scrape metrics:

curl -H 'authorization: Bearer <token>' -H 'x-uptimepage-org: <org-slug>' \
  http://127.0.0.1:8080/api/v1/targets/<id>/uptime
curl http://127.0.0.1:9090/metrics

The bootstrap link signs you in once. For ongoing sign-in — and for inviting a team — configure a sign-in provider: GitHub or Google OAuth, or a real email provider for magic links ([auth.github] / [auth.google] / [email] in config/default.toml, or the matching env vars). See docs/authentication.md.

Production deployment

For a production deployment with TLS, basic auth, and proper hardening (Caddy edge, Postgres + ClickHouse internal-only, ClickHouse memory cap), see deployment/README.md or docs/deployment.md. The local dev stack above is fine for evaluation; do not expose it to the internet.

Local build

cargo build --release
./target/release/uptimepage

Requires Postgres and ClickHouse reachable at the URLs in config/default.toml, plus a non-empty fingerprint salt (the app refuses to boot without one):

export UPTIMEPAGE_AUTH__FINGERPRINT_SALT=$(openssl rand -base64 32)

To run against the compose stack without rebuilding the container:

docker compose up -d postgres clickhouse
cargo run --release

Docs

Hosted: https://uptimepage.github.io/uptimepage/

Sources under docs/ — readable directly on GitHub too:

File Covers
docs/architecture.md goals, module layout, data flow, key design choices, concurrency model
docs/api.md REST endpoints, check-spec payload shapes, result + uptime queries
docs/public-status.md operator guide to the public /status page: components, incidents, maintenance
docs/authentication.md sign-in, sessions, scoped API tokens, org binding
docs/multi-region.md regional probe agents, the operator surface, running an agent, per-region views
docs/mcp.md MCP server for LLM clients: tools, scopes, OAuth connector, enabling, examples
docs/configuration.md default.toml reference, env override scheme, tuning notes
docs/metrics.md Prometheus series (incl. connect / TLS / pool gauges), OpenTelemetry tracing
docs/deployment.md Docker, bind addresses, migrations, sizing, graceful shutdown
docs/development.md local dev workflow, the web UI (stack, routes, adding a page, tests), faster builds
docs/loadtest.md bin/loadtest envs, macOS gotchas, HTTP/1 vs h2c trade-off, Linux container path
docs/benchmarks.md Criterion micro-benchmarks, single-core throughput, profile breakdown
docs/troubleshooting.md common failures and how to read them off metrics

Web UI

The single binary serves both the /api/v1/* JSON surface and a server-rendered HTML UI at / — askama compile-time templates, HTMX for partial swaps and JSON forms (no SPA framework), Tailwind CSS 4, and lazy-loaded ECharts. Every UI mutation hits an existing /api/v1/* endpoint, so the API stays the single source of truth. Stack, routes, the add-a-page recipe, and UI tests are in docs/development.md.

Legal

A running instance serves its policies at /terms, /privacy, /cookies, /impressum, /abuse-policy, /security-policy, and an RFC 9116 /.well-known/security.txt. The source documents are in docs/legal/. GDPR self-service (data export, account deletion, recovery) lives under /settings/account.

License

uptimepage is licensed under AGPL-3.0. See LICENSING.md for what this means in practice.

If you'd like to contribute, see CONTRIBUTING.md. For security disclosures, see SECURITY.md. </content> </invoke>

推荐服务器

Baidu Map

Baidu Map

百度地图核心API现已全面兼容MCP协议,是国内首家兼容MCP协议的地图服务商。

官方
精选
JavaScript
Playwright MCP Server

Playwright MCP Server

一个模型上下文协议服务器,它使大型语言模型能够通过结构化的可访问性快照与网页进行交互,而无需视觉模型或屏幕截图。

官方
精选
TypeScript
Magic Component Platform (MCP)

Magic Component Platform (MCP)

一个由人工智能驱动的工具,可以从自然语言描述生成现代化的用户界面组件,并与流行的集成开发环境(IDE)集成,从而简化用户界面开发流程。

官方
精选
本地
TypeScript
Audiense Insights MCP Server

Audiense Insights MCP Server

通过模型上下文协议启用与 Audiense Insights 账户的交互,从而促进营销洞察和受众数据的提取和分析,包括人口统计信息、行为和影响者互动。

官方
精选
本地
TypeScript
VeyraX

VeyraX

一个单一的 MCP 工具,连接你所有喜爱的工具:Gmail、日历以及其他 40 多个工具。

官方
精选
本地
graphlit-mcp-server

graphlit-mcp-server

模型上下文协议 (MCP) 服务器实现了 MCP 客户端与 Graphlit 服务之间的集成。 除了网络爬取之外,还可以将任何内容(从 Slack 到 Gmail 再到播客订阅源)导入到 Graphlit 项目中,然后从 MCP 客户端检索相关内容。

官方
精选
TypeScript
Kagi MCP Server

Kagi MCP Server

一个 MCP 服务器,集成了 Kagi 搜索功能和 Claude AI,使 Claude 能够在回答需要最新信息的问题时执行实时网络搜索。

官方
精选
Python
e2b-mcp-server

e2b-mcp-server

使用 MCP 通过 e2b 运行代码。

官方
精选
Neon MCP Server

Neon MCP Server

用于与 Neon 管理 API 和数据库交互的 MCP 服务器

官方
精选
Exa MCP Server

Exa MCP Server

模型上下文协议(MCP)服务器允许像 Claude 这样的 AI 助手使用 Exa AI 搜索 API 进行网络搜索。这种设置允许 AI 模型以安全和受控的方式获取实时的网络信息。

官方
精选