undownable

Using the MCP server

Undownable has a first-party MCP server, so AI agents like Claude can run your monitoring for you: create monitors, check what's up and what's down, review incidents, and publish status pages. Everything an agent does is scoped to your team and governed by the same permissions as the dashboard.

Not an agent? Everything below is also available over plain HTTP: see the REST API docs for cron jobs, deploy scripts, and dashboards.

Server address

https://undownable.com/mcp

Streamable HTTP transport, authenticated with an Authorization: Bearer <token> header.

1. Create an API token

  1. Log in and open API tokens in the dashboard sidebar.
  2. Name the token after the agent that will use it (for example claude-code) and create it.
  3. Copy the token immediately: it is shown exactly once.

Tokens act as you, on your current team. Revoke one from the same page at any time and the agent loses access instantly.

2. Add the server to your client

Claude Code

One command in your terminal:

claude mcp add --transport http undownable https://undownable.com/mcp \
  --header "Authorization: Bearer YOUR_TOKEN"

Claude Desktop

Add this to the mcpServers section of your claude_desktop_config.json (Settings, Developer, Edit Config):

"undownable": {
  "command": "npx",
  "args": [
    "mcp-remote", "https://undownable.com/mcp",
    "--header", "Authorization: Bearer YOUR_TOKEN"
  ]
}

Any other MCP client

Point it at https://undownable.com/mcp using the HTTP (streamable) transport and send Authorization: Bearer YOUR_TOKEN with every request. Most clients accept a config shaped like:

{
  "url": "https://undownable.com/mcp",
  "headers": { "Authorization": "Bearer YOUR_TOKEN" }
}

3. Ask your agent

That's the whole setup. Your agent discovers the tools on its own; you just talk to it:

What agents can do

Tool What it does
list-teamsThe teams your token can operate on and which one it targets by default
list-monitorsEvery monitor with its current status, check interval, and ID
create-monitorCreate HTTP, keyword, JSON, SSL, TCP, DNS, ping, or heartbeat monitors; checks start within a minute
update-monitorEdit a monitor in place: name, tag, target, interval, thresholds, or config, with history kept
get-monitorOne monitor in detail: 24h, 7d, and 30d uptime plus recent incidents
pause-monitor / resume-monitorSilence checks and alerts indefinitely, then bring them back
delete-monitorRemove a monitor and stop collecting its history
get-meYour name, email, and readable teams with membership roles
get-incidentIncident payload and deliveries, given incident_id and optional team. Delivery rows contain channel_label, type, transition, alert_sequence, status, and sent_at
list-incidentsRecent outages across the team, filterable to one monitor or only ongoing ones
acknowledge-incidentRecord the token owner as the acknowledger and stop repeat alerts. Retries preserve the original person, time, and source
list-status-pagesYour status pages with their public URLs and overall status
create-status-pagePublish a public status page with chosen monitors, in display order
list-maintenance-windowsYour maintenance windows: active, scheduled, and recently ended
create-maintenance-windowSchedule planned downtime for chosen monitors, a tag, or the whole team; checks resume automatically when it ends
end-maintenance-window / delete-maintenance-windowEnd an active window early, or cancel one entirely
list-event-sourcesList source prefixes, counts and token-free ingest URLs
create-event-sourceCreate a native or alertmanager source; save its returned token immediately
update-event-sourceChange a source's name, kind, stale window or default level using source_id
rotate-event-source-tokenReplace a source token; the old one stops working, save the new one immediately
delete-event-sourceDelete a source; its event monitors are deleted and their open incidents resolve
list-channelsList channel routing, verification and health with secrets masked
create-channelCreate an email, slack, discord, webhook, ntfy, telegram or push channel
update-channelUpdate a channel using channel_id; masked secrets sent back unchanged are kept
delete-channelDelete a channel using channel_id
resolve-incidentResolve an incident with incident_id; idempotent, recorded as mcp
send-test-pageSend a real page using channel_id; returns delivery id and status_url
get-deliveryRead a delivery (such as a test page) and its push receipts using delivery_id

Paging settings

Pass these optional fields to create-monitor or update-monitor. Available on every plan, including Free. Repeats continue while an incident is open and unacknowledged, up to the chosen maximum. Omitted fields stay unchanged on update. Create, update, get, and list responses include both settings.

ParameterValues
realert_interval_minutes5, 10, 15, 30, or 60 minutes. Null disables repeats (the default).
realert_maxInteger from 1 to 24. Default: 6 repeat alerts per incident.

Incident payloads include acknowledged, acknowledged_at (ISO 8601 or null), acknowledged_by ({name} of the account, or null), acknowledged_via (panel, api, mcp, link, or null), and realert_count. A signed link can acknowledge without an account. Acknowledgement stops repeats; recovery resolves the incident.

Acknowledge an incident

acknowledge-incident returns acknowledged, team, and the incident payload. An incident outside the selected team returns an error.

ParameterValue
incident_idRequired public incident ULID from list-incidents.
teamOptional team identifier. Defaults to the token's pinned or current team.

History and pagination

list-incidents accepts cursor from meta.next_cursor and limit (default 20, maximum 100). Results are ordered by started_at descending, then ID descending. meta.open_count and meta.unacknowledged_count count ongoing and ongoing unacknowledged incidents before pagination. get-incident returns the same detail payload as REST, including the team and delivery history.

list-monitors includes 30 days of history on each monitor; get-monitor includes 90 days and a four-hour heatmap on its monitor object, matching REST. History rows contain day, uptime, and level (up at 99.95%, dip at 95%, down below 95%, none without data). Heatmap cells contain start, end, level, checks, and ratio; levels are up-1 through up-4, dip, partial, down, and empty.

Good to know

Scoped to your team

A token only ever sees the team it belongs to, and destructive actions respect your team role.

Plan limits apply

Monitor count, fastest check interval, and status page count follow your plan. When a limit is hit, the agent gets a clear message saying so.

Rate limited

60 requests per minute per token, plenty for interactive agent sessions.

Revoke any time

Revoking a token on the API tokens page cuts the agent off immediately. Nothing else about your account changes.

Give your agent a job

Free includes 10 monitors, every alert channel, and a public status page. No card required.

Start monitoring free