WatchFor
WatchFor — uptime & infrastructure monitoring for AI agents.
What it can do
- Get Summary: One-call organization snapshot: monitor status counts (up/down/paused/unknown + health score), active incident counts and open maintenance windows. Start here for 'how is my infrastructur
- Get Incident Stats: Aggregate incident statistics over a period: totals by severity, MTTR (mean time to resolve), MTBF and the five most unstable monitors.
- Get Plan: Current subscription plan with limits (-1 = unlimited, 0 = feature off) and live usage counts.
What data it sees
Do you need an account
No: the server works without sign-in
WatchFor — uptime & infrastructure monitoring for AI agents. Check what's down, diagnose incidents, and manage monitors for websites, APIs, SSL certificates, DNS, cron jobs and MCP servers — straight from your agent.
37 tools over the WatchFor monitoring platform:
- 📊 Status & health —
get_summaryanswers "is everything up?" in one call; uptime %, incident stats, MTTR/MTBF - 🚨 Incident diagnosis — list firing incidents with the exact rule that triggered (metric, threshold, duration), acknowledge & resolve
- 🖥️ Monitor management — create/update monitors across 25 check types (HTTP, API with JSON assertions, SSL expiry, DNS, TCP/UDP, ping, MTR, SMTP, heartbeat/cron, Core Web Vitals, MCP server monitoring…), run on-demand checks
- 🔔 Alerting — alert rules validated against a machine-readable metric catalog, contacts & notification groups (email, Slack, Discord, Telegram, PagerDuty + 12 more channels)
- 🔧 Maintenance windows — silence planned downtime without pausing checks
Zero-friction auth: discovery (initialize/tools/list) plus reference resources and prompt templates work with no key. Tool calls use OAuth 2.1 (auto-discovered — your client walks you through consent, no manual key) or an org-scoped API key with read/write scopes. Free plan available, no credit card.
Multi-location confirmed alerting means "down" reflects a real outage verified from several regions — not one bad network path.
Docs: watchfor.io/docs/api/mcp · Quickstart: watchfor.io/agents.md
How to connect
How to connect WatchFor to Claude
The server address to paste into Claude settings:
https://watchfor--hello-65wl.run.tools
- Open Claude (claude.ai or the desktop app).
- Go to Settings → Connectors.
- Click Add custom connector.
- Paste the server address copied below into Remote MCP server URL and click Add.
- In a chat, click + → Connectors and switch the new connector on.
Custom connectors are available on Free, Pro, Max, Team and Enterprise plans (Free is limited to one). On Team and Enterprise an organization Owner adds the connector first under Organization settings → Connectors.
Authorization
After you click Add, a sign-in window for the service opens. Sign in with your own account and approve access. Claude never sees your password.
How to connect WatchFor to ChatGPT
The server address to paste into ChatGPT settings:
https://watchfor--hello-65wl.run.tools
- Open ChatGPT in a browser (chatgpt.com). A Plus, Pro, Business, Enterprise or Edu plan is required.
- Turn on developer mode once: Settings → Apps → Advanced settings → Developer mode.
- Open Settings → Connectors and click Create.
- Fill in the form: Name (anything), Description (one line about what the service does), MCP server URL (copy it below).
- Under Authentication choose OAuth if the service requires sign-in, otherwise None. Click Create.
- In a new chat open + → Apps/Connectors and enable the connector.
OpenAI has renamed this section before (Connectors → Apps/Plugins). If the label differs, search settings for "developer mode". On Business/Enterprise workspaces an admin must allow custom connectors first.
Authorization
On first use ChatGPT opens the service's sign-in window. Sign in and approve access.
How to connect WatchFor to Cursor
The server address to paste into Cursor settings:
https://watchfor--hello-65wl.run.tools
Fastest: click Open in Cursor below and confirm the prompt.
Manually:
- In Cursor open Settings → Cursor Settings → MCP and click Add new global MCP server.
- Paste the JSON copied below into
~/.cursor/mcp.json(per project:.cursor/mcp.jsonin the repo root). - Save the file. The server appears in the MCP list; authorize it there if asked.
Authorization
If the service needs sign-in, an authorize button appears next to the server in the MCP list.
Server tool list (37)
Raw names from tools/list. Only developers need these.
| get_summary | One-call organization snapshot: monitor status counts (up/down/paused/unknown + health score), active incident counts and open maintenance windows. Start here for 'how is my infrastructure right now?'. |
| get_incident_stats | Aggregate incident statistics over a period: totals by severity, MTTR (mean time to resolve), MTBF and the five most unstable monitors. |
| get_plan | Current subscription plan with limits (-1 = unlimited, 0 = feature off) and live usage counts. |
| list_monitors | List monitors (cursor-paginated, slim items: id/name/type/target/status/tags — use get_monitor for full detail). Filter by type, status, tag, or search by name/target with q. |
| get_monitor | Get one monitor by id — includes config and available_metrics (the alert metrics valid for its type). |
| get_monitor_types | Discovery catalog of all 25 monitor types: target format, default alert rules, per-type alert metrics (exact `metric` strings, operators, value types) and config fields. Consult this BEFORE creating monitors or alert rules. |
| create_monitor | Create a monitor (write scope). Location ids come from list_locations; check get_monitor_types for the target format and config fields of the chosen type. Interval is seconds and is validated against the plan's per-type minimum. |
| update_monitor | Update monitor fields (write scope). Send only what changes. In config, a key set to null is removed; omitted alerting-owned keys are preserved. |
| set_monitor_paused | Pause or resume a monitor (write scope). Idempotent. |
| delete_monitor | Permanently delete a monitor (write scope). Removes its scheduler job, alert rules and open incidents. This cannot be undone — confirm with the user before calling unless they explicitly asked for deletion. |
| run_check_now | Dispatch an immediate on-demand check for a monitor (write scope, plan-limited per hour). The result lands in get_monitor_checks within ~a minute. |
| get_monitor_uptime | Uptime percentage and check totals for a monitor over a period (scheduled maintenance excluded). |
| get_monitor_checks | Recent check results for a monitor (status, latency, per-location performance). Pass success=false to fetch only FAILED checks — one-call failure forensics. hours widens the window (up to 720). |
| list_locations | Probe locations available for monitors — use these ids in create_monitor's locations array. |
| list_alert_rules | List a monitor's alert rules (system defaults + custom). Rules define when incidents fire. |
| create_alert_rule | Create an alert rule on a monitor (write scope). `metric` must come from the monitor type's alert metrics (see get_monitor_types or get_monitor.available_metrics); value is always a string. At most one rule per metric per severity — a duplicate returns the existing rule's id, PATCH via the REST API instead. |
| update_alert_rule | Update an alert rule (write scope) — fix a noisy threshold, change severity, or enable/disable. Send only the fields that change; metric/operator/value are validated against the monitor type's catalog. |
| delete_alert_rule | Delete a custom alert rule (write scope). System default rules cannot be deleted (403) — disable them with update_alert_rule enabled=false instead. |
| list_contacts | Alert recipients (people) with their group memberships — answers 'who gets notified?'. Cursor-paginated. |
| get_contact | One contact's detail: name, email, phone, group memberships. |
| create_contact | Create an alert recipient (write scope). Optionally place them straight into notification groups (ids from list_contact_groups). Duplicate email (case-insensitive) returns the existing-contact conflict. |
| update_contact | Update a contact (write scope). Send only what changes; group_ids replaces ALL memberships ([] removes from every group, omitted keeps them). |
| delete_contact | Delete a contact (write scope) — removes them from all notification groups. Irreversible; confirm with the user unless they explicitly asked. |
| list_contact_groups | Notification groups (contact groups) — where alerts are delivered. Use these ids to answer 'where do alerts for this monitor go?' (monitor config's notificationGroupIds) or when wiring alert rules to a specific audience. |
| get_contact_group | One notification group's detail INCLUDING its member list (who exactly gets paged). |
| create_contact_group | Create a notification group (write scope), optionally with initial members (contact ids from list_contacts). |
| update_contact_group | Update a notification group (write scope). contact_ids replaces the FULL member list ([] empties the group, omitted keeps it). |
| delete_contact_group | Delete a notification group (write scope). The org's default group cannot be deleted (conflict). Monitors routed to it stop notifying through it — confirm with the user first. |
| list_incidents | List incidents newest first (cursor-paginated). Filter by status (firing/acknowledged/resolved), severity, a single monitor (monitor_id) and a started_at time range (since/until). Each incident carries the rule that fired (name/metric/operator/value) and duration_seconds. |
| get_incident | Full detail of one incident: what fired, trigger values, confirmations, timeline. |
| acknowledge_incident | Acknowledge a firing incident (write scope) — pauses repeat notifications while someone investigates. |
| resolve_incident | Manually resolve an incident (write scope). Accepted asynchronously — the alerting engine's failure state is reset; if the underlying problem persists the incident will re-fire. |
| list_notifications | Alerting delivery history — every notification attempt with channel, delivery status (sent/failed/silenced), severity, incident and monitor. Answers 'did the Slack alert actually go out?' and 'which deliveries are failing?'. Filter by status/channel_type/monitor_id/incident_id/time. |
| list_activity | The organization's audit trail — who changed what and when (monitors, alert rules, contacts, maintenance, channels; dashboard AND API actions). Great for correlating incidents with recent config changes. Filter by entity_type/entity_id or a time range. |
| list_maintenance_windows | List scheduled maintenance windows, most recent first. |
| create_maintenance_window | Schedule a maintenance window (write scope): alerts are suppressed and downtime excluded from uptime for the covered monitors during the window. Times are ISO 8601; duration in minutes. |
| delete_maintenance_window | Cancel a maintenance window (write scope) — removes future occurrences and lifts any active silences. Use when a window was scheduled with a wrong time or is no longer needed. |