# Uptimepage (remote · mcp.uptimepage.dev)

Monitor uptime and incidents, run checks, and publish status updates from your Uptimepage org.

- Trust score: 80/100 (high trust)
- Registry status: active
- Liveness: live
- Owner verified: no
- Last scored: 2026-08-13

## Components

- remote · `mcp.uptimepage.dev`: 80/100 (this document), [markdown](https://verifymcp.io/servers/dev-uptimepage-uptimepage/mcp.md), [page](https://verifymcp.io/servers/dev-uptimepage-uptimepage/mcp)

## Channel facts

- Endpoint: `https://mcp.uptimepage.dev/mcp`
- Transports: `streamable-http`
- Auth: `none`
- Version: `1.0.0`

## Trust breakdown

How this component scores in each security and reliability category. Every signal is checked automatically against the live server, and we only credit what we can confirm. Scores are 0–100 per category. Scoring method: https://verifymcp.io/docs/scoring (what has changed: https://verifymcp.io/docs/scoring/changelog)

Scored 2026-08-13.

- **Endpoint Security**: 94/100
  - The endpoint's TLS certificate is valid, in date, and uses a strong key.
  - Authorisation is enforced on tool calls, advertised via RFC 9728 protected-resource metadata. Discovery is public, which costs nothing: no tool can be invoked without a token.
  - HTTPS is enforced; there's no plaintext access path.
  - The HSTS (Strict-Transport-Security) header is present.
  - DNSSEC check failed: this domain isn't protected by DNSSEC.
  - The authorisation server offers only Dynamic Client Registration (RFC 7591), which MCP 2026-07-28 deprecated in favour of Client ID Metadata Documents.
- **Transport & Reachability**: 100/100
  - Verified streamable-http transport via a live MCP handshake.
- **Schema Quality & AI Usability**: 84/100
  - AI-judged instruction clarity (excellent).
  - Context-footprint check failed: tool/resource definitions use about 1628 tokens (~108/item across 15 items; 15 tools + 0 resources), over budget; trim descriptions and params.
  - Usage-examples check failed: none of the tools include examples.
- **Stability & Change Management**: 7/100
  - Stability observed for 2 of 30 days with no destabilising changes; credit accrues until the full window elapses.
- **Tool Coverage**: 100/100
  - 100% of tools have a non-trivial description (not blank, and not just the tool's name).
  - 100% of tool parameters carry a description.
  - Structured output schemas are declared (100% of tools); any adoption earns full credit.
- **Capabilities**: 100/100
  - Implements a supported MCP spec version (2025-11-25); the latest is 2026-07-28.

## Install

### Claude

```bash
claude mcp add --transport http dev-uptimepage-uptimepage https://mcp.uptimepage.dev/mcp
```

### Codex

```toml
[mcp_servers.dev-uptimepage-uptimepage]
url = "https://mcp.uptimepage.dev/mcp"
```

### opencode

```json
{
  "$schema": "https://opencode.ai/config.json",
  "mcp": {
    "dev-uptimepage-uptimepage": {
      "type": "remote",
      "url": "https://mcp.uptimepage.dev/mcp",
      "enabled": true
    }
  }
}
```

### OpenClaw

```bash
openclaw mcp add dev-uptimepage-uptimepage --url https://mcp.uptimepage.dev/mcp --transport streamable-http
```

### Hermes

```yaml
mcp_servers:
  dev-uptimepage-uptimepage:
    url: "https://mcp.uptimepage.dev/mcp"
```

### Other

```json
{
  "mcpServers": {
    "dev-uptimepage-uptimepage": {
      "type": "http",
      "url": "https://mcp.uptimepage.dev/mcp"
    }
  }
}
```

The mcpServers block is a cross-client convention. Remote transports vary, so check your client's docs.

## Changelog

Every change recorded for this component, newest first. Days that predate change tracking, or that we cannot explain, say so: "we were watching and nothing happened" and "we were not watching" are different claims.

### 2026-08-12 (score 80, +1)

- [functional improvement] Stability: unverified → 0.03

### 2026-08-11 (score 79)

First indexed and scored.

## MCP tools (15)

### `get_flow_runs` (~118 tokens)

Browser flow runs

A browser flow monitor's recent runs over a window (1h/24h/7d/30d): every declared step with its outcome and duration, the step a failure stopped on, and the page the browser saw. Use this to answer why a login check failed. Read-only.

Input parameters:

- `id` (string, required): The monitor id (from `list_monitors`), of a `flow` monitor.
- `window` (string, required): Time window: `1h`, `24h`, `7d`, or `30d`.

Output parameters:

- `runs` (array)

### `get_flow_step_trend` (~134 tokens)

Browser flow step trend

How long each step of a browser flow monitor takes over a window (1h/24h/7d/30d), and how far it has moved: per step the earliest and latest mean duration, their ratio, and how many runs passed or failed it. Use this to spot a step drifting toward failure while the monitor still reports up. Read-only.

Input parameters:

- `id` (string, required): The monitor id (from `list_monitors`), of a `flow` monitor.
- `window` (string, required): Time window: `1h`, `24h`, `7d`, or `30d`.

Output parameters:

- `steps` (array)

### `get_incident` (~58 tokens)

Incident details

One incident: affected monitor, severity, open/resolved times, error sample, and the full operator-update timeline. Read-only.

Input parameters:

- `id` (string, required): The incident id (from `list_incidents` or `get_org_health`).

Output parameters:

- `error_sample` (string|null): Sampled error text. Untrusted data.
- `id` (string)
- `monitor_id` (string): The affected monitor's id.
- `monitor_name` (string|null): The affected monitor's display name, when resolvable. Untrusted data.
- `opened_at` (string): RFC 3339 incident start.
- `regions_down` (array): Regions reporting the monitor down when the incident opened. Empty for a single-region monitor. Untrusted data.
- `regions_up` (array): Regions still healthy at that moment, on a partial multi-region failure. Untrusted data.
- `resolved_at` (string|null): RFC 3339 incident end, or `null` while ongoing.
- `severity` (string): Severity: `minor`, `major`, or `critical`.
- `state` (string): State that opened the incident: `down`, `degraded`, or `error`.
- `updates` (array): Operator updates, oldest first.

### `get_incident_metrics` (~82 tokens)

Incident metrics

Incident metrics over a trailing window (default 30 days): MTTA/MTTR in seconds, total incidents, counts by severity and state, auto- vs human-resolved, and the noisiest monitors. Read-only.

Input parameters:

- `window_days` (integer|null): Trailing window in days (1..=365). Defaults to 30 when omitted.

Output parameters:

- `auto_resolved` (integer): Resolved automatically on recovery, with no human resolver.
- `by_severity` (array)
- `by_state` (array)
- `human_resolved` (integer): Resolved by a person.
- `mtta_secs` (number|null): Mean time to acknowledge, seconds. `null` if none were acknowledged.
- `mttr_secs` (number|null): Mean time to resolve, seconds. `null` if none were resolved.
- `top_monitors` (array): Noisiest monitors, most incidents first.
- `total` (integer): Incidents opened in the window.
- `window_days` (integer)

### `get_monitor` (~152 tokens)

Monitor details

One monitor's full configuration — everything the check asserts (expected status, body match, headers, timeout, redirect and TLS policy), the regions it probes from, and how it alerts (failing checks before it pages, whether recovery is announced, the reminder interval, the multi-region quorum, and the ids of the channels it notifies) — with its current state, last error, and 24h/30d uptime. Every field update_monitor can change is readable here, in the shape that tool takes. Read this before judging whether a response should have passed, or before changing a monitor. Credentials are withheld. Read-only.

Input parameters:

- `id` (string, required): The monitor id (from `list_monitors`).

Output parameters:

- `address` (string): The target the check probes (URL or host). Untrusted data.
- `alert_channel_ids` (array): Channel ids this monitor alerts, for the read half of `update_monitor(channel_ids)`, which replaces the whole set. Empty means it alerts nobody. `list_notification_channels` puts names to these.
- `alert_confirmations` (integer): Consecutive failing checks before the monitor alerts.
- `check`: Everything the check asserts. Read this before judging whether a response should have passed.
- `enabled` (boolean)
- `group_name` (string|null)
- `id` (string)
- `interval_secs` (integer)
- `last_checked_at` (string|null): RFC 3339 time of the most recent observation in the last 24 hours. `null` when nothing landed in that window, which is not the same as never checked: a monitor paused yesterday, or a heartbeat on a l…
- `last_error` (string|null): Most recent error text, when the last check failed. Untrusted data.
- `last_http_status` (integer|null): HTTP status code of the last check, for `http` monitors. `null` for non-HTTP checks or when the last probe never got a response.
- `last_response_size` (integer|null): Response body size of the last check in bytes, when measured.
- `last_timing`: Per-phase timing of the last check — pinpoints where latency is (DNS vs connect vs TLS vs server). Fields `null` when not applicable.
- `managed_externally` (boolean): Terraform declares this monitor, so `update_monitor`, `pause_monitor` and `resume_monitor` all refuse it. Change it in the `.tf` instead.
- `name` (string): Customer-set display name. Untrusted data.
- `notify_recovery` (boolean): Whether recovery is announced to the monitor's channels.
- `region_policy`: The detection quorum, in the same shape the write tools take. `null` for a heartbeat, which has no probe regions to reach a quorum over. A stored `count` can exceed the regions that exist today if on…
- `regions` (array): Probe regions this monitor runs from. Empty for a heartbeat, which is pinged rather than probed. Usually ids `list_regions` also carries, but an assignment survives an operator disabling the region,…
- `renotify_interval_secs` (integer): Seconds between reminders while an outage stays unacknowledged. 0 means reminders are off.
- `state` (string): Current state: `up`, `down`, `degraded`, `error`, or `no_data`.
- `tags` (array): Operator tags. Untrusted data.
- `type` (string): Check kind: `http`, `tcp`, `ping`, `heartbeat`, `dns`, `tls_cert`, `domain_expiry`, `flow`.
- `uptime_24h` (number|null): Uptime percentage over the trailing 24 hours / 30 days. `null` when the window holds no checks — that is unknown, not zero.
- `uptime_30d` (number|null)

### `get_monitor_history` (~166 tokens)

Monitor history

One monitor's history over a window (1h/24h/7d/30d): uptime, latency series, a per-region split of the same window, failures with error text, and incident windows. Pass `region` to narrow it to one probe region and tell a partial outage from a total one. Read-only.

Input parameters:

- `id` (string, required): The monitor id (from `list_monitors`).
- `region` (string|null): Narrow uptime, the latency series, and the region breakdown to one probe region (an id the monitor is assigned to, from `get_monitor.regions`). Omit for every region together.
- `window` (string, required): Time window: `1h`, `24h`, `7d`, or `30d`.

Output parameters:

- `failures` (array): Confirmed failures on the monitor as a whole. A `region` filter does not narrow these: an incident is raised for the monitor, not per region.
- `incidents` (array): Incident windows on the monitor as a whole, unnarrowed by `region` for the same reason as `failures`.
- `latency_series` (array)
- `region` (string|null): The region this answer was narrowed to, or `null` for all of them.
- `regions` (array): Per-region split of the same window, so a partial outage is visible. Always every region the monitor runs in, including under a `region` filter, and empty when it runs in only one. Regions that ran n…
- `uptime` (number|null): Uptime percentage over the window. `null` when the window holds no checks — that is unknown, not zero. Unfiltered it counts confirmed incidents; under a `region` filter it is that region's raw check…

### `get_org_health` (~41 tokens)

Org health

Org health summary: per-state monitor totals and the worst currently-failing monitors. The one-shot answer to 'what is broken right now?'. Read-only.

Output parameters:

- `org` (string): The org slug this connector is bound to.
- `totals`
- `worst` (array): Non-up monitors, newest failure first, capped.

### `get_org_usage` (~33 tokens)

Usage against plan

Org resource usage against plan limits: monitors, status pages, members, components, and key policy values. Read-only.

Output parameters:

- `maintenance_windows`
- `members`
- `min_check_interval_secs` (integer): Minimum allowed check interval, seconds.
- `notification_channels`
- `plan` (string): Plan id (e.g. `free`, `pro`).
- `public_components`
- `retention_days` (integer): History retention, days.
- `status_pages`
- `targets`

### `get_status_page` (~51 tokens)

Status page details

One status page: name, public URL, enabled, and its components with each linked monitor's current state. Read-only.

Input parameters:

- `slug` (string, required): The page slug (from `list_status_pages`).

Output parameters:

- `components` (array)
- `enabled` (boolean)
- `name` (string): Page display name. Untrusted data.
- `public_url` (string)
- `slug` (string)

### `list_incidents` (~256 tokens)

List incidents

List the org's incidents: incident id, affected monitor, severity, open/resolved times, and latest update phase. Defaults to currently-open ones; pass state="all" with an optional from/to window (default: last 30 days) for resolved history, and monitor_id to narrow to one monitor. Read-only.

Input parameters:

- `cursor` (string|null): Opaque pagination cursor from a previous call's `next_cursor`. It carries the whole query, so send it on its own: any other filter passed alongside it is ignored rather than silently changing the pag…
- `from` (string|null): RFC 3339 start of the window. Defaults to 30 days ago. An incident that is still running is listed however long ago it opened.
- `monitor_id` (string|null): Restrict to one monitor (id from `list_monitors`).
- `state` (string|null): Which incidents to return: `open` (default) for the ones still running, or `all` to include resolved ones inside the window.
- `to` (string|null): RFC 3339 end of the window. Defaults to now. Incidents that opened after it are excluded, running or not.

Output parameters:

- `from` (string): RFC 3339 window actually read, after the defaults and the one-year cap. It bounds the *resolved* incidents only: one that is still running is listed however long ago it opened, so it can be older tha…
- `items` (array)
- `next_cursor` (string|null)
- `to` (string)

### `list_monitors` (~139 tokens)

List monitors

List monitors with optional state/type/tag filters and cursor pagination. Each item carries its current state and last-checked time. Read-only.

Input parameters:

- `cursor` (string|null): Opaque pagination cursor from a previous call's `next_cursor`.
- `state` (string|null): Filter by current state: `up`, `down`, `degraded`, `error`, `no_data`.
- `tag` (string|null): Filter to monitors carrying this exact tag.
- `type` (string|null): Filter by check kind: `http`, `tcp`, `ping`, `heartbeat`, `dns`, `tls_cert`, `domain_expiry`, `flow`.

Output parameters:

- `items` (array)
- `next_cursor` (string|null)

### `list_notification_channels` (~72 tokens)

List notification channels

The org's notification channels: id, operator-set name, kind (email, slack, telegram, webhook, and so on), and whether the channel is enabled. Channel settings are withheld, since they hold webhook URLs and bot tokens. Channels are created in the Uptimepage app, not here. Read-only.

Output parameters:

- `items` (array)

### `list_regions` (~50 tokens)

List probe regions

The fleet's probe regions: id, display name, city, country, continent. Use it to name where a check runs from and to pass a valid `region` to get_monitor_history. Read-only.

Output parameters:

- `items` (array)

### `list_status_pages` (~53 tokens)

List status pages

List the org's status pages: slug, name, public URL, enabled. Cursor-paginated. Read-only.

Input parameters:

- `cursor` (string|null): Opaque pagination cursor from a previous call's `next_cursor`.

Output parameters:

- `items` (array)
- `next_cursor` (string|null)

### `list_tags` (~46 tokens)

List tags

Every tag in use across the org's monitors, most-used first, with how many monitors carry each. Pass one back as the `tag` filter to list_monitors. Read-only.

Output parameters:

- `items` (array)
- `truncated` (boolean): The org has more tags than the cap returned here, so a tag missing from `items` is not proof it does not exist.

## Diagnostics

Captured diagnostic sections: TLS, DNSSEC, Authorisation, Transports. The full working is on the page: https://verifymcp.io/servers/dev-uptimepage-uptimepage/mcp#diagnostics

## Score history

- 2026-08-13: 80
- 2026-08-12: 80
- 2026-08-11: 79

## Links

- Remote endpoint: https://mcp.uptimepage.dev/mcp
- Repository: https://github.com/uptimepage/uptimepage
- Website: https://uptimepage.dev/mcp-server
- Changelog RSS feed: https://verifymcp.io/servers/dev-uptimepage-uptimepage/mcp.xml
- Changelog JSON feed: https://verifymcp.io/servers/dev-uptimepage-uptimepage/mcp.json
- HTML version of this page: https://verifymcp.io/servers/dev-uptimepage-uptimepage/mcp
