Uptime probe

These pages describe checker version VeronikAI/0.1+attestations.1 (signing.py). A2A card checks use suite veronikai-a2a-get-card version 1. MCP checks use suite veronikai-mcp-conformance version 2. If the code changes, the version string on a signed result should change too.

What is checked

We ask a simple question: when we send one polite GET to the public address the listing gave us, does a server answer?

Think of knocking on a shop door. If someone opens it โ€” even to say "we're closed" or "please pay first" โ€” the shop is there. If the street does not exist, or nobody opens after we wait, we record that instead.

We check this for:

Agents that are not A2A or MCP, or MCP listings with no https endpoint, are not probed.

How it works

Code: probe.py. Shared GET helper: common.http_get. User-Agent: VeronikAI/0.1 (read-only directory crawler).

  1. Before any knock, we read that host's robots.txt (see Robots handling). If we may not visit the URL, the result is skipped, not down.
  2. We wait our turn for that host and site, so we do not crowd anyone.
  3. A2A. We try, in order, the card URL from the listing, then /.well-known/agent-card.json, then the older /.well-known/agent.json (at most three addresses). We stop if we get a real answer, or if the host gives no answer at all (the other paths on the same host will not help).
  4. MCP. We send one GET to the endpoint. If the server says 401 or 403, we may also GET its public OAuth protected-resource metadata (RFC 9728) โ€” still a GET.
  5. Timeouts are not retried. A dropped connection (EOF or reset), which is often our tunnel glitching, is tried once more. After two network failures in a row, that host is skipped for the rest of the run.
  6. A canary checks whether our internet is working. If we are the ones who are offline, we wait and we do not blame the agent.
  7. If a hostname does not exist, we confirm that with a public DNS-over-HTTPS GET (dns.google) because this machine's own DNS is not trustworthy.
  8. Each saved result can be signed (see Signing).

What the results mean

StatusEveryday meaningTypical causes
upSomething answered at the public address.A2A: HTTP 200, 401, 403, or 402. MCP: 200, 202, 204, 3xx, 400, 401, 402, 403, 405, 406, 409, 415, 421.
downWe reached a firm "this is not here" or a broken name/certificate.Most other HTTP codes (including 404 and 5xx). DNS name does not exist, connection refused, bad TLS certificate.
unknownWe could not fairly decide.HTTP 429, timeouts and resets we could not confirm, our own outage, the probe hitting its time cap after it had already sent a request.
skippedWe chose not to knock.robots.txt said no, or we could not read an honest robots file this run. This is not down.

Special cases:

Limits

Checker version

VeronikAI/0.1+attestations.1. The uptime fields stored on a signed check are status, http_code, latency_ms, target, checked_at, and any error text.