{"protocolVersion":"0.3.0","name":"WatchFor","description":"Uptime and infrastructure monitoring for agents: check current status, diagnose what is broken and why, explain monitors, report on incidents and reliability, and take operator actions (create monitors, acknowledge/resolve incidents, schedule maintenance).","url":"https://0.0.0.0:3000/api/a2a","preferredTransport":"JSONRPC","provider":{"organization":"WatchFor","url":"https://watchfor.io"},"version":"1.0.0","documentationUrl":"https://watchfor.io/docs/api/a2a","iconUrl":"https://watchfor.io/icon.png","capabilities":{"streaming":false,"pushNotifications":false,"stateTransitionHistory":false},"defaultInputModes":["application/json","text/plain"],"defaultOutputModes":["application/json","text/plain"],"securitySchemes":{"apiKey":{"type":"http","scheme":"bearer","description":"WatchFor API key (Settings → API keys): Authorization: Bearer wf_live_…"},"oauth2":{"type":"oauth2","description":"OAuth 2.1 (dynamic client registration + PKCE). Discovery: /.well-known/oauth-authorization-server","flows":{"authorizationCode":{"authorizationUrl":"https://0.0.0.0:3000/api/auth/mcp/authorize","tokenUrl":"https://0.0.0.0:3000/api/auth/mcp/token","scopes":{"read":"Read monitors, incidents, uptime and activity","write":"Create and change monitors, incidents and maintenance"}}}}},"security":[{"apiKey":[]},{"oauth2":["read","write"]}],"skills":[{"id":"check-status","name":"Check current status","description":"Answer 'is it up right now?' for a single monitor or the whole organization: current up/down/degraded status, and the health-score snapshot across everything being watched.","tags":["monitoring","status","health","uptime"],"examples":["Is watchfor.io up right now?","What's the overall status of my monitors?","Check the status of monitor <id>"],"inputModes":["application/json","text/plain"],"outputModes":["application/json","text/plain"]},{"id":"list-monitors","name":"List monitors","description":"Enumerate what the organization is watching — id, name, type, target and current status — so an agent starting cold can discover monitors before checking or explaining one. Optionally filter by a search term, type or status.","tags":["monitoring","discovery","inventory","list"],"examples":["What are you monitoring?","List all down monitors","Show my SSL monitors"],"inputModes":["application/json","text/plain"],"outputModes":["application/json","text/plain"]},{"id":"diagnose-incidents","name":"Diagnose what's wrong","description":"Explain what is currently broken and WHY. Returns every active incident with what failed (the exact alert rule and trigger value), a plain-language category (TLS certificate, HTTP 5xx, DNS, latency, reachability…), which monitor, how long it has been down, and whether it has been acknowledged — everything needed to describe the problem to a human.","tags":["monitoring","incidents","diagnosis","root-cause","troubleshooting"],"examples":["What's wrong with my infrastructure right now?","Why is my site down?","Diagnose active incidents for monitor <id>"],"inputModes":["application/json","text/plain"],"outputModes":["application/json","text/plain"]},{"id":"explain-monitor","name":"Explain a monitor","description":"Describe one monitor end to end so an agent can explain it: what it watches (type + target), its current status, recent uptime, its alert rules, and its recent incident history.","tags":["monitoring","explain","configuration","uptime"],"examples":["What does monitor <id> check and how healthy is it?","Explain the monitoring set up for api.example.com"],"inputModes":["application/json","text/plain"],"outputModes":["application/json","text/plain"]},{"id":"incident-report","name":"Report on an incident","description":"Reconstruct one incident after (or during) the fact: what fired, the trigger values, the full timeline (detected → acknowledged → resolved) with durations, and which monitor it affected. Use it to answer 'what happened?'.","tags":["monitoring","incidents","post-mortem","timeline"],"examples":["What happened in incident 4210?","Give me a timeline for incident <id>"],"inputModes":["application/json","text/plain"],"outputModes":["application/json","text/plain"]},{"id":"reliability-report","name":"Reliability report","description":"Summarise how reliable things have been over a period: incident counts by severity and mean time to resolution, plus the current health snapshot. Optionally scope to one monitor.","tags":["monitoring","uptime","reliability","reporting","mttr"],"examples":["How reliable was my infrastructure this week?","Give me a 30-day reliability report"],"inputModes":["application/json","text/plain"],"outputModes":["application/json","text/plain"]},{"id":"describe-monitor-types","name":"Describe monitor types","description":"Discover what WatchFor can monitor and how to configure it: every monitor type (http, ssl, dns, tcp, ping, api, browser/Core Web Vitals, heartbeat, …) with its target format and example, its config fields, and the exact alert metrics you can build rules from. Call this BEFORE create-monitor to choose a type and build a valid config. Optionally pass one type to get just its details.","tags":["monitoring","discovery","catalog","configuration","capabilities"],"examples":["What can WatchFor monitor?","What monitor types are available?","What config fields does the ssl monitor take?"],"inputModes":["application/json","text/plain"],"outputModes":["application/json","text/plain"]},{"id":"list-locations","name":"List probe locations","description":"List the probe locations (cities/regions) a monitor can run from — their ids are what create-monitor's `locations` expects. Call this to pick where to check from.","tags":["monitoring","discovery","locations","regions"],"examples":["Where can WatchFor check from?","List the available monitoring locations"],"inputModes":["application/json","text/plain"],"outputModes":["application/json","text/plain"]},{"id":"create-monitor","name":"Create a monitor","description":"Start watching something on the user's behalf. Provide the target and monitor type — call describe-monitor-types first for exact type ids, target formats and config fields, and list-locations for location ids. Requires the write scope.","tags":["monitoring","provisioning","setup"],"examples":["Monitor https://api.example.com every minute from Europe","Watch the SSL certificate on example.com"],"inputModes":["application/json","text/plain"],"outputModes":["application/json","text/plain"]},{"id":"manage-incident","name":"Acknowledge or resolve an incident","description":"Take ownership of an active incident: acknowledge it (I'm on it — pauses repeat notifications) or resolve it. Requires the write scope. Resolve is accepted asynchronously; if the underlying problem persists the incident re-fires.","tags":["monitoring","incidents","on-call","operations"],"examples":["Acknowledge incident 4210","Resolve incident 4210 — the deploy fixed it"],"inputModes":["application/json","text/plain"],"outputModes":["application/json","text/plain"]},{"id":"manage-maintenance","name":"Schedule or manage maintenance windows","description":"Suppress alerts and exclude downtime during planned work — useful for an agent doing a deploy that would otherwise trip monitoring. action: create (default), list or cancel. Requires the write scope for create/cancel. Times are ISO 8601; duration in minutes.","tags":["monitoring","maintenance","deployments","operations"],"examples":["Silence alerts on my API for the next 30 minutes while I deploy","List scheduled maintenance windows","Cancel maintenance window <id>"],"inputModes":["application/json","text/plain"],"outputModes":["application/json","text/plain"]},{"id":"list-incidents","name":"List incidents","description":"List incidents newest first with filters — status (firing/acknowledged/resolved), severity, a single monitor, and a started-at time range. Use this for history and reporting; use diagnose-incidents for what is broken right now.","tags":["monitoring","incidents","history","reporting"],"examples":["Show resolved incidents from the last week","List all critical incidents"],"inputModes":["application/json","text/plain"],"outputModes":["application/json","text/plain"]},{"id":"manage-monitor","name":"Manage a monitor","description":"Operate on an existing monitor: pause, resume, run an immediate check, update its fields (name/target/interval/config/tags) or delete it. Requires the write scope. Delete is permanent — confirm with the user first unless they explicitly asked.","tags":["monitoring","operations","lifecycle"],"examples":["Pause monitor <id>","Change monitor <id> to check every 60 seconds","Run a check on <id> now","Delete monitor <id>"],"inputModes":["application/json","text/plain"],"outputModes":["application/json","text/plain"]}]}