This repo is UptimeRobot's single source of truth for AI agent integrations. It publishes:
- llms.txt and AGENTS.md β discovery and orientation for LLMs and coding agents.
- .claude-plugin, .cursor-plugin, and .codex-plugin folders β installable plugin manifests for Claude Code, Cursor, and Codex.
- skills folder β workflow skills (setup, no-account quick monitor, bulk pause, SLA reports, incident response, status pages) plus short per-tool reference pages that cover only what the MCP tool schemas don't say. See Skills.
- rules folder β Cursor rules (
.mdc). Claude Code gets the same rules from theconventionsskill. - mcp.json β Cursor-format MCP server config (dot-less filename).
- .mcp.json β Claude Code and Codex MCP server config (dot-prefixed so Claude Code auto-registers the server when the plugin loads; the Codex manifest references it explicitly, as OpenAI's plugin submission requires).
- .agents/plugins/marketplace.json β repo-scoped Codex marketplace for local install and testing; Codex auto-discovers this file when the repo is open.
- The assets folder β the marketplace logo, declared as the icon in the Cursor and Codex manifests (Claude Code's plugin manifest has no icon field; the directory listing supplies its icon at submission time).
The mcp.json and .mcp.json files both connect directly to the hosted server at https://mcp.uptimerobot.com/mcp over streamable HTTP. Nothing runs locally: the client discovers the server's OAuth endpoints and runs the browser login itself. Two filenames exist only because Cursor expects the dot-less name and Claude Code and Codex the dot-prefixed one.
The same content is mirrored under uptimerobot.com/ for crawler discovery (uptimerobot.com/llms.txt, uptimerobot.com/AGENTS.md, etc.).
UptimeRobot is being submitted to Anthropic's community plugin marketplace. Once accepted, add that marketplace once and install:
/plugin marketplace add anthropics/claude-plugins-community
/plugin install uptimerobot@claude-communityOr run /plugin, open the Discover tab, find UptimeRobot, and install it. (The community marketplace must be added first β it isn't built in. Only Anthropic's curated official marketplace shows up in /plugin with no setup.)
The MCP server auto-registers via .mcp.json as soon as the plugin loads. The first time it connects, a browser opens for you to log into UptimeRobot and authorize access (OAuth) β there's no API key to paste. Tokens are cached locally, so you only do this once.
To run the full plugin (skills and the auto-registered MCP server) straight from a local checkout β no marketplace required β clone the repo and load it with the --plugin-dir flag:
git clone https://github.com/uptimerobot/ai.git
claude --plugin-dir ./ai--plugin-dir <path> loads the plugin from a directory (the one containing .claude-plugin/plugin.json) for that session only. The flag is repeatable and also accepts a .zip. Use an absolute path if you launch Claude Code from elsewhere:
claude --plugin-dir /absolute/path/to/aiOn first connection a browser opens for the OAuth flow. Run /plugin to confirm the plugin is loaded and uptimerobot MCP Server shows β connected.
If you just want the MCP tools without the rest of the plugin (dotfiles, CI bootstrap), register the server yourself:
claude mcp add --transport http uptimerobot https://mcp.uptimerobot.com/mcpThen run /mcp, select uptimerobot, and choose Authenticate to complete the OAuth browser flow. Run /mcp (or claude mcp list in a terminal) to confirm uptimerobot shows β connected.
Browse the Cursor Marketplace, find UptimeRobot, and click Add to Cursor. Authorize through the OAuth browser flow when the MCP server first connects β no API key needed.
Follow Cursor's plugin docs:
# Clone or symlink this repo into Cursor's local plugin folder
git clone https://github.com/uptimerobot/ai.git ~/.cursor/plugins/local/uptimerobot-aiLaunch Cursor and run Developer: Reload Window from the command palette.
Verify the plugin is discovered:
- Settings β Rules, Skills, Subagents β the
uptimerobot.mdcrule and everyskills/*/SKILL.mdentry should be listed. - Settings β Tools & MCPs β
uptimerobotshould appear with up to 60 tools (fewer for read-only or team sessions) once the MCP server connects. Complete the OAuth browser flow on first connection.
Clone the repo and open it in Codex. The repo-scoped marketplace at .agents/plugins/marketplace.json is auto-discovered, so UptimeRobot (local) will appear in the Codex plugin directory without any extra setup. Install the plugin, then complete the OAuth browser flow on first MCP connection.
If you want Codex to track the source explicitly:
codex plugin marketplace add ./Verify the plugin is loaded: the UptimeRobot skills should be available and the uptimerobot MCP server should appear with up to 60 tools (fewer for read-only or team sessions) once connected.
The server is listed in the official MCP Registry as com.uptimerobot/uptimerobot, so any registry-aware client can discover and install it without a per-client plugin submission. Metadata lives in server.json:
curl -s "https://registry.modelcontextprotocol.io/v0.1/servers?search=com.uptimerobot/uptimerobot"Clients without registry support can connect to the same URL directly (OAuth on first use):
{
"mcpServers": {
"uptimerobot": {
"type": "http",
"url": "https://mcp.uptimerobot.com/mcp"
}
}
}Where the OAuth browser flow can't run, add the server to your own client config with an API key from the dashboard (Integrations & API) instead β a Read-only key unless the job needs to write. Keep the key in an environment variable, not in the file, and never commit it. This is a manual setup β the plugin itself never reads or sends an API key:
{
"mcpServers": {
"uptimerobot": {
"type": "http",
"url": "https://mcp.uptimerobot.com/mcp",
"headers": { "Authorization": "Bearer ${UPTIMEROBOT_API_KEY}" }
}
}
}Claude Code expands ${UPTIMEROBOT_API_KEY} from the environment; other clients have their own syntax (Cursor: ${env:UPTIMEROBOT_API_KEY}).
60 tools via MCP, grouped by resource β full list in AGENTS.md; each tool's own schema and description are the reference for its parameters:
| Tool | Purpose |
|---|---|
create-monitor |
Create HTTP, KEYWORD, PING, PORT, HEARTBEAT, DNS, API, or UDP monitors |
update-monitor |
Change name, URL, interval, alert contacts, tags, HTTP settings (list and map fields replace the whole value β see AGENTS.md) |
update-monitor-status |
Pause or resume a monitor |
list-monitors |
Paginated list filtered by name, URL, tags, group, custom field, or state |
get-monitor-details |
Full config + current state for one monitor |
get-monitor-stats |
Aggregated up/down/paused counts + uptime (a 0β1 fraction) |
get-response-times |
Time-series response-time data with buckets |
delete-monitor |
Permanently delete a monitor and its history |
| Tool | Purpose |
|---|---|
create-monitor-group |
Create a group and assign monitors to it |
update-monitor-group |
Rename an existing group |
delete-monitor-group |
Delete a group; its monitors move to another group or none |
get-monitor-group |
Fetch a single group by ID |
list-monitor-groups |
Paginated list of groups |
| Tool | Purpose |
|---|---|
create-psp |
Create a status page from monitors, groups, or tags (always created public; pause with update-psp) |
update-psp |
Change name, domain, sort order, visibility, publish status, or monitors (monitor lists replace the whole list) |
get-psp |
Fetch a single status page by ID |
list-psps |
Paginated list of status pages |
delete-psp |
Permanently delete a status page |
| Tool | Purpose |
|---|---|
create-psp-announcement |
Post an announcement (info/maintenance/issue) to a status page |
update-psp-announcement |
Edit title, content, dates, type, or publish status |
pin-psp-announcement |
Pin an announcement to the top of the page |
unpin-psp-announcement |
Unpin an announcement |
get-psp-announcement |
Fetch a single announcement by ID |
list-psp-announcements |
Paginated list of announcements for a status page |
delete-psp-announcement |
Permanently delete an announcement |
| Tool | Purpose |
|---|---|
create-maintenance-window |
Schedule a one-off or recurring window that suppresses alerts |
update-maintenance-window |
Change schedule, duration, monitors, or pause/resume the window |
get-maintenance-window |
Fetch a single window by ID |
list-maintenance-windows |
Paginated list of windows |
delete-maintenance-window |
Permanently delete a window |
| Tool | Purpose |
|---|---|
list-incidents |
Incidents across monitors, with time range, monitor, or open-only filter |
get-incident-details |
Per-incident request logs and cause |
get-incident-activity-log |
Incident timeline summary plus paginated entries |
get-incident-alerts |
Alerts sent during an incident, with delivery summary |
| Tool | Purpose |
|---|---|
create-incident-comment |
Add a comment to an incident |
update-incident-comment |
Edit an existing comment |
list-incident-comments |
Paginated list of comments on an incident |
delete-incident-comment |
Permanently delete a comment |
| Tool | Purpose |
|---|---|
search-third-party-providers |
Search the provider catalog by provider or component name |
get-third-party-provider |
Fetch one provider and its component tree by numeric ID |
list-third-party-services |
Paginated list of the third-party services the account tracks |
get-third-party-service |
Full state of one tracked service by monitor ID |
list-third-party-service-incidents |
Paginated provider incidents for tracked services, newest first |
get-third-party-service-incident |
One provider incident by monitor ID and incident ID, with its updates |
get-third-party-service-incident-activity-log |
Notifications the account was sent about one provider incident |
create-third-party-service |
Start tracking a provider, optionally limiting components and alerts |
update-third-party-service |
Change tracked components, notification sensitivity, maintenance alerts |
delete-third-party-service |
Permanently stop tracking a service |
| Tool | Purpose |
|---|---|
create-alert-contact |
Create a personal email contact |
update-alert-contact |
Rename, pause/activate, or change notification events |
get-alert-contact |
Fetch a single personal contact by ID |
list-alert-contacts |
Paginated list of email, SMS, voice, and push contacts |
delete-alert-contact |
Permanently delete a personal contact |
| Tool | Purpose |
|---|---|
list-integrations |
Slack, webhook, PagerDuty, etc. integrations (also lists personal contacts) |
delete-integration |
Permanently delete an integration (check type first β personal contacts (email, SMS, voice, push) are deleted with delete-alert-contact) |
list-tags |
Paginated list of tags on the account |
delete-tag |
Delete a tag and remove it from every monitor |
| Tool | Purpose |
|---|---|
get-user |
Session account, team, limits, and write permission |
get-storm-protection-settings |
Read account-wide alert grouping settings |
update-storm-protection-settings |
Change alert grouping (plan-gated: notification-grouping) |
Alert contact IDs for assignedAlertContacts come from list-alert-contacts (personal) and list-integrations (which also returns the account's personal contacts β dedupe by id, and tell them apart by type); each entry needs alertContactId, threshold, and recurrence. All delete-* tools are permanent β call get-user first to confirm which account the session acts on.
The quick-monitor-setup skill creates a free HTTPS monitor from just someone's email, no account, API key, or OAuth: the agent calls an unauthenticated proof-of-work API and the owner confirms by clicking a link in an activation email. Guide: https://uptimerobot.com/quick-monitor-setup/.
The tools' own schemas cover parameters, so the skills focus on multi-step workflows and on behaviour the schemas don't spell out.
Workflows
| Skill | Use it when |
|---|---|
setup |
Connecting the MCP server, or the UptimeRobot tools aren't showing up |
quick-monitor-setup |
Someone has no UptimeRobot account and wants a monitor from just an email |
conventions |
Always: discovery before writes, get-user before deletes, pagination, no secrets in replies β and error handling and write verification via errors |
bulk-pause |
Pausing and resuming many monitors around a deploy |
sla-report / monitor-health-summary |
Uptime/SLA reports and account health summaries |
incident-response |
Investigating a downtime, commenting on it, confirming recovery |
status-pages |
Creating a status page without exposing it early, and posting announcements |
Reference pages β short notes on non-obvious behaviour, verified against the live server: create-http-monitor, create-keyword-monitor, create-ping-monitor, create-port-monitor, create-heartbeat-monitor, create-dns-monitor, create-api-monitor, create-udp-monitor, update-monitor, manage-monitors, manage-monitor-groups, maintenance-windows, list-integrations, stats, incidents, errors.
Plan names change over time β read the active plan from get-user (activeSubscription.plan, e.g. Scale) instead of assuming a fixed list. Monitor-type availability, interval minimums, and monitor limits depend on the active plan β the MCP server enforces these and returns a plain-text error. Tool calls are rate-limited too (10 per minute on the free plan). See skills/errors/SKILL.md.
The MCP handshake sometimes completes after the client captures its tool list at session start, so the tools appear absent even though the server is connected. Fix in Claude Code: fully quit (close the terminal, not just /exit) and relaunch; run claude mcp list first to confirm uptimerobot shows β Connected. Fix in Cursor: reload the window or restart Cursor, and check Settings β Tools & MCPs.
| Symptom | Fix |
|---|---|
| OAuth browser didn't open | Run /mcp, select uptimerobot, choose Authenticate, and open the URL it shows manually if the browser still doesn't launch |
Tools return unauthorized or an invalid / expired token error |
Run /mcp, select uptimerobot, and choose Clear authentication, then Authenticate again |
Write tools return requires roles or Write operations not permitted |
Re-authenticate via /mcp with an account that has write permission. In a team account, delete-monitor, delete-tag and update-storm-protection-settings are admin-only |
Headless / CI session (API-key header) returns Invalid API key or Write operations not permitted |
/mcp re-authentication won't help β replace the key in the environment variable your config reads (a Main key if the job writes) |
Tool errors arrive as plain text whose wording varies by tool. What each message means and how to recover is in skills/errors/SKILL.md.
This repo is generated / curated. File issues at https://github.com/uptimerobot/ai/issues. For MCP server bugs, use https://uptimerobot.com/contact.
MIT. See LICENSE.