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
- Log in and open API tokens in the dashboard sidebar.
- Name the token after the agent that will use it (for example
claude-code) and create it. - 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:
- "Monitor https://example.com every 5 minutes and alert me if it goes down."
- "Is anything down right now? Show me this week's incidents."
- "Add an SSL check for example.com and a TCP check for db.example.com:5432."
- "Create a heartbeat monitor for my nightly backup job and give me the ping URL."
- "Set up a public status page with my production monitors on it."
- "Pause the staging monitors while we deploy, then resume them."
What agents can do
| Tool | What it does |
|---|---|
list-teams | The teams your token can operate on and which one it targets by default |
list-monitors | Every monitor with its current status, check interval, and ID |
create-monitor | Create HTTP, keyword, JSON, SSL, TCP, DNS, ping, or heartbeat monitors; checks start within a minute |
update-monitor | Edit a monitor in place: name, tag, target, interval, thresholds, or config, with history kept |
get-monitor | One monitor in detail: 24h, 7d, and 30d uptime plus recent incidents |
pause-monitor / resume-monitor | Silence checks and alerts indefinitely, then bring them back |
delete-monitor | Remove a monitor and stop collecting its history |
get-me | Your name, email, and readable teams with membership roles |
get-incident | Incident payload and deliveries, given incident_id and optional team. Delivery rows contain channel_label, type, transition, alert_sequence, status, and sent_at |
list-incidents | Recent outages across the team, filterable to one monitor or only ongoing ones |
acknowledge-incident | Record the token owner as the acknowledger and stop repeat alerts. Retries preserve the original person, time, and source |
list-status-pages | Your status pages with their public URLs and overall status |
create-status-page | Publish a public status page with chosen monitors, in display order |
list-maintenance-windows | Your maintenance windows: active, scheduled, and recently ended |
create-maintenance-window | Schedule planned downtime for chosen monitors, a tag, or the whole team; checks resume automatically when it ends |
end-maintenance-window / delete-maintenance-window | End an active window early, or cancel one entirely |
list-event-sources | List source prefixes, counts and token-free ingest URLs |
create-event-source | Create a native or alertmanager source; save its returned token immediately |
update-event-source | Change a source's name, kind, stale window or default level using source_id |
rotate-event-source-token | Replace a source token; the old one stops working, save the new one immediately |
delete-event-source | Delete a source; its event monitors are deleted and their open incidents resolve |
list-channels | List channel routing, verification and health with secrets masked |
create-channel | Create an email, slack, discord, webhook, ntfy, telegram or push channel |
update-channel | Update a channel using channel_id; masked secrets sent back unchanged are kept |
delete-channel | Delete a channel using channel_id |
resolve-incident | Resolve an incident with incident_id; idempotent, recorded as mcp |
send-test-page | Send a real page using channel_id; returns delivery id and status_url |
get-delivery | Read 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.
| Parameter | Values |
|---|---|
realert_interval_minutes | 5, 10, 15, 30, or 60 minutes. Null disables repeats (the default). |
realert_max | Integer 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.
| Parameter | Value |
|---|---|
incident_id | Required public incident ULID from list-incidents. |
team | Optional 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