---
name: istheinternetok
description: Live status of the whole internet (outages of Cloudflare, AWS, Gmail, Discord, PlayStation Network, OpenAI, GitHub... and critical security flaws), an "am I affected?" check for a project's dependencies or a person's apps, and a check of any public GitHub repo (every lockfile, 30+ formats in 14 ecosystems, from npm and PyPI to Cargo, Go, Maven and NuGet). Use it when someone asks if the internet, a big service, their stack or a GitHub repo is OK, or to watch for new vulnerabilities in their projects.
metadata:
  homepage: https://istheinternetok.com
  version: "1"
---

# Is the internet OK?

Public, read-only, no key. Data refreshed every 5 minutes; incidents written from official sources only (vendor, project, CISA, GitHub advisories).

## 1. What is going on

```bash
curl -s https://istheinternetok.com/status.json
```

- `summary`: one sentence you can repeat as it is.
- `answer`: yes | mostly | kind-of | no. `up`: up | shaky | down. `safe`: calm | caution | critical.
- `services[]`: id, name, group (social, mail, work, video, games, shopping, ai, backbone, dev), pillar (a backbone service: one in a major outage and the answer is no), state (operational, degraded, partial, major, maintenance, unknown), note, url of their status page. Trouble counts by group: several games down at once is not the internet down.
- `incidents[]`: the open incidents: title, summary, impact (what it changes for a person), severity, status, exploited, action.everyone, action.owners, affects[] (with `packages` ranges and `product` ids), sources, url.

## 2. Am I affected?

```bash
# a few packages and products
curl -s "https://istheinternetok.com/check.json?packages=npm:next@16.3.0,pypi:litellm@1.107.0&products=chrome,windows"
# a whole lockfile or manifest (package.json, package-lock.json, pnpm-lock.yaml, yarn.lock, requirements.txt, composer.lock)
curl -s -X POST --data-binary @pnpm-lock.yaml https://istheinternetok.com/check.json
```

Returns `affected` (true when a package version is inside a vulnerable range), `summary`, and `hits[]`: verdict (affected | check), name, installed, fix (the version to move to), incident (title, impact, action, url). Nothing sent is stored.

Ecosystems: npm, PyPI, Packagist, Maven, Go, crates.io, RubyGems, NuGet, Docker, GitHub Actions, ConanCenter, Hackage, Pub, SwiftURL, Hex, CRAN, Julia (lowercase works, pip and composer too). Product ids: chrome, firefox, safari, edge, windows, macos, ios, android, linux, office, whatsapp, zoom, plex, wordpress, php, nodejs, python, openssl, nginx, apache-httpd, ivanti-connect-secure, pan-os, fortios, cisco-asa, tidb-cloud.

A public GitHub repo, every package its lockfiles pin at its latest commit, checked against every known flaw (OSV and CISA's exploited list). Every lockfile in every folder, monorepos included: 30+ formats in 14 ecosystems (npm, PyPI, crates.io, Go, Maven, NuGet, RubyGems, Packagist, Pub, Swift, Hex, Hackage, CRAN, Julia), and the exact versions manifests pin where no lockfile does. A file it cannot read (Podfile.lock, conan.lock...) is named in `unread`, never skipped:

```bash
curl -s https://istheinternetok.com/v1/repos/vercel/next.js
```

Returns `answer` (yes | mostly | kind-of | no, the site's scale, or unknown when no lockfile could be read: `unread` names the ones found), `fixes[]` (what to update first: `update`, `to`, `impact` such as takeover or data-leak, `exploited`), `others[]` (advisories that do not count, each with `where`: users when it is in what the project ships, internal when only tests, examples, docs or dev tools hold it), `internal` (how many packages and flaws are only internal), `byPackage[]` (the same advisories, one entry per package version, worst first, with the version that fixes them all), `fixed[]` (what the latest commits fixed), the commit read and when. The page is https://istheinternetok.com/r/vercel/next.js/ and its README badge https://istheinternetok.com/r/vercel/next.js/badge.svg. A first look at a big repo takes a few seconds.

## 3. As MCP tools

The same answers as tools, over MCP (Streamable HTTP, read-only, no key): `https://istheinternetok.com/mcp`. Tools: `internet_status`, `list_incidents` (optional `severity`), `get_incident` (`id`), `check_stack` (`packages`, `products`, `lockfile`), `check_repo` (`repo`: owner/name or a GitHub URL).

- Claude: Settings > Connectors > Add custom connector, URL `https://istheinternetok.com/mcp`.
- ChatGPT, Grok and other clients: add a remote MCP server with that URL, no authentication.
- Server card: https://istheinternetok.com/mcp/server-card.

## 4. What changed, and alerts

```bash
# changes since a date (incidents created, updated, resolved; big services down or back); keep "next"
curl -s "https://istheinternetok.com/events.json?since=2026-10-20T00:00:00Z"
# be told instead: a webhook (public https, must answer 2xx to a signed test event) or an ntfy.sh topic for a phone
curl -s -X POST https://istheinternetok.com/subscriptions.json -H 'Content-Type: application/json' \
  -d '{"url":"https://example.com/hook","filter":{"packages":["npm:next"],"products":["chrome"],"minSeverity":"major"}}'
# an RSS feed narrowed to a stack
curl -s "https://istheinternetok.com/feed.xml?products=chrome,windows&packages=npm:next"
```

Webhooks carry `X-Itok-Signature: sha256=<HMAC-SHA256 of the body with the secret>`. `DELETE /subscriptions.json` with `{ "id", "secret" }` stops them.

## 5. Watching for someone

Poll `/status.json` (hourly is plenty). When an incident appears or changes, run the check on their projects. If affected and a fix exists, prepare the update as a pull request and tell them; never merge on your own. Link the incident page so they can read why.
