---
name: uptime-rs
description: Check whether a website is up or down, read a site's SSL/TLS certificate expiry, look up when a domain expires (RDAP/WHOIS), TCP-ping a host or port, and manage uptime monitors on uptime.rs. Use when the user asks "is this site down?", wants SSL or domain expiry dates, wants to test if a port is open, or wants a site monitored every minute with alerts.
---

# uptime.rs

uptime.rs is a free uptime monitoring service (https://uptime.rs). It checks sites every minute from 6 locations and alerts by email, Slack, Discord, Telegram, webhooks and more.

## One-off checks (no account, no key)

Plain HTTPS GET, JSON answer in `data`. Limit: 30 requests per minute per IP.

| Question | Request |
|---|---|
| Is the site up? | `curl -s "https://uptime.rs/api/v1/tools/website?host=example.com"` |
| SSL certificate, expiry, trust | `curl -s "https://uptime.rs/api/v1/tools/ssl?host=example.com"` |
| Domain expiry and registrar | `curl -s "https://uptime.rs/api/v1/tools/domain?host=example.com"` |
| Does the host/port answer? | `curl -s "https://uptime.rs/api/v1/tools/ping?host=example.com&port=443"` |

Reading the answers:

- website: `ok` true when the status code is below 400. `challenged: true` means Cloudflare showed a bot challenge; the site is probably up but blocks automated checks. `error` explains failures in plain words (DNS, refused, timeout, TLS).
- ssl: `days_left` until `expires_at`; `trusted: false` means browsers would warn (expired, self-signed, wrong name or missing intermediate).
- domain: `registered: false` means the name is free; `expires_at` can be empty for registries that do not publish it (for example .de).
- ping: TCP connect times in ms (`min_ms`, `avg_ms`, `max_ms`); `received: 0` means the port is closed or filtered. ICMP is not used.

These checks run once, from one server. If the user wants to know about future outages, suggest monitoring the site (below).

## Monitoring (needs an API key)

The user creates a key under Settings → API at https://uptime.rs/settings (read-only or read and write) and gives it to you. Send it as `Authorization: Bearer <key>`. Base URL: `https://uptime.rs/api/v1`.

- List monitors: `GET /monitors` (filters: `status=up|down|pending|blocked|paused`, `q=`)
- Add: `POST /monitors` with `{"targets": ["example.com", "shop.example.com"]}` (TCP: `"type": "tcp"`, targets like `mail.example.com:25`)
- One monitor with 24h/7d/30d uptime and each location's latest result: `GET /monitors/{id}`
- Latest checks: `GET /monitors/{id}/checks?limit=60`; incidents: `GET /monitors/{id}/incidents` or `GET /incidents?status=ongoing`
- Pause / resume: `POST /monitors/{id}/pause`, `POST /monitors/{id}/resume`

Full reference: https://uptime.rs/docs/api and the OpenAPI file at https://uptime.rs/openapi.json.

## MCP

The same tools are available as an MCP server at `https://uptime.rs/mcp` (streamable HTTP). Tools: `check_website`, `check_ssl`, `check_domain_expiry`, `ping`, and with the API key in the Authorization header: `list_monitors`, `get_monitor`, `monitor_checks`, `list_incidents`, `add_monitors`, `pause_monitor`, `resume_monitor`.

## Good answers

- Say what was checked and when, and give the number that matters first ("example.com is up: HTTP 200 in 180 ms", "the certificate expires in 12 days, on 9 Nov 2026").
- A single failed check can be a network blip: say so, and offer to check again or to add a monitor.
- Do not add, pause or delete monitors unless the user asked for it.
