Agents
Everything on down.guide is free to read by machine: no key, no account. Be reasonable with request rates; responses are cached for a minute.
MCP
Add the MCP server
Streamable HTTP, no auth. Two tools: search finds an operation and execute runs it. The old tools (get_provider, list_feed and the rest) still answer; they are deprecated and leave these docs on 2027-01-10.
Set up the down.guide MCP server for me. down.guide is a free, public outage feed for 400 cloud and SaaS providers: no login, no API key. - Server name: down-guide - Transport: Streamable HTTP - URL: https://mcp.down.guide/mcp Add it the way you normally add MCP servers (your CLI command or your MCP config file), then confirm it connects and lists its two tools, search and execute. To finish, use them to run the stack.check operation on this project's package.json or lockfile and tell me which of my providers have a problem right now.
Paste this into any coding agent. It adds the server with its own MCP setup.
- incident.list
- The newest incidents across providers
- incident.get
- One incident by id: a down.guide id (DWN-…)
- provider.list
- The provider catalog with live state; q matches names and category narrows it
- provider.get
- One provider by id: the provider's slug or name, such as github or aws
- cascade.list
- Upstream outages and the providers that broke with them, newest first; provider names the upstream
- cascade.get
- One cascade by id: the cascade's slug, such as aws-2026-11-06
- entities.search
- Search incidents
- feed.read
- The items a /feed subscriber gets, as JSON Feed, newest first
- stack.check
- Which providers a project depends on, and whether any has a problem now
- dependency.check
- One dependency to the providers behind it and their live state
- leaderboard.get
- The Down Index
- feedback.send
- Send a note to the people who run down.guide
- report.outage
- Report that a provider isn't working for you (or for the agent's user) right now
- report.affected
- Say an existing incident affects you
REST
REST API
Every MCP operation has a REST twin returning the same JSON.
- Get provider
- GET /api/v1/providers/<slug>
- List feed
- GET /api/v1/incidents
- Get incident
- GET /api/v1/incidents/<id>
- Get cascade
- GET /api/v1/cascades/<slug>
- Search
- GET /api/v1/search
- Check stack
- POST /api/v1/check
- Check dependency
- GET /api/v1/dependency
- Get leaderboard
- GET /api/v1/leaderboard
- Send feedback
- POST /api/v1/feedback
- Report outage
- POST /api/v1/reports
- Report affected
- POST /api/v1/reports/affected
- Catalog
- GET /api/v1/providers
- Every provider, one line each
- GET /api/v1/status
curl https://down.guide/api/v1/providers/github
Feeds
Feeds and badges
RSS, Atom or JSON Feed: incidents by default, or cascades too, filtered by provider, category, impact or region. Badges show a provider's live state.
https://down.guide/feed?provider=github,vercel&filter=major&format=json
https://down.guide/feed?type=all&provider=aws
[](https://down.guide/providers/github)
Docs
Docs for agents
Every page also has a markdown copy: add .md to the URL.
Changelog
Changelog, 2026-11-10
Old names answer with Deprecation and Sunset headers until 2027-01-09, then stop.
The MCP server lists exactly two tools that never change: search finds an operation and execute runs one. Every capability is an operation (provider.get, incident.list, stack.check, entities.search, <type>.list and <type>.get, with a REST twin each), so a new one never changes the tool list. The old tools (get_provider, list_feed and the rest) stay callable and are no longer listed: deprecated since 2026-11-11, removed from these docs on 2027-01-10.
Every entity type has a REST list and get in one shape (https://down.guide/openapi.json lists them): /api/v1/incidents, /providers and /cascades answer { items, next_cursor, total? } and every object carries type (incident, provider or cascade), kind, id, url and title. /api/v1/cascades is new, with limit (1 to 200, default 30) and cursor, and a parameter that is unknown or does not apply is a 400. /api/v1/providers takes limit, cursor and q, and without a limit still returns the whole catalog in one answer, providers beside items.
Every incident carries confidence (confirmed or corroborated), confidenceLabel, acknowledged (true when the provider's own page posted it, from acknowledgedAt), providerStatus and cascade, in incident JSON, feeds, search and MCP results. The labels are the same words as cve.now: Confirmed and Corroborated.
confidence:, acknowledged: and cascade: are search keys, and confidence is a typed parameter of search, list_feed and /api/v1/incidents. confidence:unverified is valid and matches nothing: unverified evidence is never public.
The get_cascade MCP tool and GET /api/v1/cascades/<slug> return one cascade (an upstream outage and the providers that broke with it, with the incident behind each); an incident's cascade field is the slug. The CLI has the same as down.guide cascade <slug>.
Search is one search, the same on cve.now and down.guide. type: (and the type parameter) takes entity types: incident, provider and cascade, or all; date: is the shared name for started:, and filter:major is the priority slice /feed?filter=major reads. The response's items hold the matching incidents and the providers and cascades the query names, each tagged with its type and an exact name match first; results holds the incidents alone, as before. facets gains type.
Regions come at three levels: region: a cloud provider's own region, as the provider names it (us-east-1, europe-west4); area: a market area (us, eu, apac, latam, me); country: one country (au, ca, in, jp).
- level (each incident)
- Now confidence (confirmed or corroborated) and acknowledged; not_acknowledged is corroborated with acknowledged false, and signal is unverified and never served
- levelLabel (each incident)
- Now confidenceLabel (Confirmed or Corroborated)
- status (each incident)
- Now providerStatus (an update's own status keeps its name)
- event (each incident)
- Now cascade
- facets.level (search)
- Now facets.confidence
- level: (search)
- Now confidence: (confirmed, corroborated or unverified) and acknowledged: (true or false); level:not_acknowledged is acknowledged:false
- event: and has:event (search)
- Now cascade: and has:cascade
- level (search, list_feed and /api/v1/incidents (/feed?level= keeps working))
- Now the confidence parameter