Claude in Chrome: read_network_requests fabricates HTTP 503 for cancelled/failed requests (Network.loadingFailed)

Open 💬 0 comments Opened Jul 15, 2026 by romain-rossi

Summary

The Claude in Chrome extension's read_network_requests MCP tool reports a fabricated statusCode: 503 for any request that ends with the CDP event Network.loadingFailed (request cancelled by the page, interrupted SSE/stream, generic load failure). The tool output presents it exactly like a real HTTP status code, so Claude (and the user) read "HTTP 503 Service Unavailable" for requests the server never answered with 503 — or never even failed.

Evidence

In the extension bundle (assets/mcpPermissions-*.js, observed in v1.0.80):

if ("Network.responseReceived" === t) { ... r.status = t.status }  // real status
if ("Network.loadingFailed"  === t) { ... r.status = 503 }         // fabricated

In-flight requests are correctly displayed as pending, but failed/cancelled ones get the hard-coded 503 instead of a similar non-HTTP marker.

Real-world impact

Two debugging incidents on our side (2026-07-09 and 2026-07-15), same pattern each time:

  1. An Angular SPA fires an XHR on full page load, then cancels it because SSR TransferState already hydrated the data (perfectly benign). read_network_requests shows GET /api/... 503.
  2. The backend logs show the request either never arrived or was served 200; curl of the same URL returns 200/401 as expected; the browser console shows no error.
  3. Hours were spent chasing a "503" that no server ever emitted — including a phantom bug filed against a backend service, and a decommissioning batch blocked for a day. A completed SSE DELETE (HTTP 200 + done event received) interrupted at stream close was also read as "503".

The signature is always: 503, empty body, no response headers, no console error, backend healthy — visible only in this tool.

Expected behavior

Report failures the way pending is reported — as a state, not a status code, e.g.:

statusCode: failed (net::ERR_ABORTED)

using the CDP errorText/canceled fields from Network.loadingFailed, and never synthesize a plausible HTTP status code the server did not send.

Environment

  • Claude in Chrome extension v1.0.80 (behavior first analyzed there; still reproducible as of 2026-07-15)
  • Chrome stable & beta, Windows 11
  • Claude Code CLI with mcp__claude-in-chrome__read_network_requests

Repro

  1. On any page, run fetch('/some-endpoint', {signal}) and abort it (AbortController.abort()), or hard-reload an SSR-hydrated SPA that cancels its initial data XHR.
  2. Call read_network_requests for that tab.
  3. The aborted request is listed with statusCode: 503.

View original on GitHub ↗