Claude in Chrome: read_network_requests fabricates HTTP 503 for cancelled/failed requests (Network.loadingFailed)
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:
- An Angular SPA fires an XHR on full page load, then cancels it because SSR TransferState already hydrated the data (perfectly benign).
read_network_requestsshowsGET /api/... 503. - The backend logs show the request either never arrived or was served 200;
curlof the same URL returns 200/401 as expected; the browser console shows no error. - 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 +
doneevent 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
- 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. - Call
read_network_requestsfor that tab. - The aborted request is listed with
statusCode: 503.