# Browser solver verification Verification date: 2026-07-30 | Provider | Version | Pinned multi-architecture manifest | Tested architecture | Timeout wire unit | Result | |---|---:|---|---|---|---| | FlareSolverr | 3.5.0 | `ghcr.io/flaresolverr/flaresolverr:v3.5.0@sha256:139dfee1c6f89249c8d665d1333a42e8ec74ec0a86bc6bb1c8461e10d3a66a47` | `linux/amd64` (`sha256:258523d25e4e07028c3a206f0e03ae807b26a50a201dd320f09a18464ecf86fa`) | milliseconds | verified | | Byparr | 2.1.0 | `ghcr.io/thephaseless/byparr:2.1.0@sha256:01a46a2865d9a6db5eb8ead04ec0dd33b8fbe233e8565ae70b50d4cc0af4cfb0` | `linux/amd64` (`sha256:5e41fe2278f187bfafc762fee822c0678deb49e229171c89a116e56820ca7278`) | whole seconds | verified | These results are verification by this project, not an upstream compatibility claim. Both providers were exercised through the same `/v1` request/response adapter and authoritative target replay. FlareSolverr returns a cookie-only response when requested. Byparr 2.1.0 ignores `returnOnlyCookies`, so the client accepts a bounded 5 MiB envelope and discards rendered content after parsing. When both providers are configured, FlareSolverr is always attempted first. Byparr is attempted only after a busy or transient-unavailable acquisition; persistent 4xx, cancellation, solution-integrity failure, and solved non-2xx target status stop the chain. There is no automatic reverse failover. Provider timeouts and concurrency remain independent. The real-container gate requires a directly observed anti-bot response no more than 30 minutes before each solved request. Record the UTC timestamp, public target, direct HTTP status or bounded anti-bot marker name, elapsed time, container digest, and final content assertion. Never record cookies, credentials, endpoint userinfo, or response bodies containing secrets. The E2E runner enforces the two-provider matrix in one invocation when `BROWSER_SOLVER_REAL_MATRIX=true`, `VERIFY_FLARESOLVERR_URL`, and `VERIFY_BYPARR_URL` are set. Missing either verification endpoint makes the matrix test fail; the runner starts one provider-specific MCP child process per matrix row so each adapter is verified independently. Preferred deployment keeps the selected solver on the same private container network as `mcp-searxng` with no published host port. A loopback-only port may be used temporarily for diagnostics. Never expose a solver API publicly. HTTP-client cancellation is propagated immediately, but the remote browser process may continue until the provider's configured internal timeout after a client disconnect. The provider timeout therefore remains the remote hard bound. ## 2026-07-30 real-container result At `2026-07-30T21:12:40Z`, a direct `HEAD` request to `https://eprint.iacr.org/2025/858.pdf` returned HTTP 403 with the bounded `Cf-Mitigated: challenge` marker. Within the following five minutes, the built MCP server completed the same protected-PDF assertion through each pinned container without a provider skip: | Provider | Local endpoint exposure | Suite elapsed | Assertion | |---|---|---:|---| | FlareSolverr 3.5.0 | loopback-only diagnostic port | verified in the shared matrix run | extracted `Encrypted Matrix-Vector Products` and `Abstract` | | Byparr 2.1.0 | loopback-only diagnostic port | verified in the shared matrix run | extracted `Encrypted Matrix-Vector Products` and `Abstract` | The disposable diagnostic containers were removed after verification. No cookie, solver response body, credential, or endpoint userinfo was retained. ## Dual-provider failover gate The real failover check starts both pinned images and confirms they are ready. It then stops the FlareSolverr container while leaving its loopback endpoint configured, producing a bounded connection-refused `unavailable` outcome. A single built-MCP request with both endpoints must extract the freshly challenge-confirmed PDF through Byparr with no provider skip. Disposable containers are removed afterward. The runner itself fails unless the configured FlareSolverr endpoint is unreachable and a fresh direct HEAD returns HTTP 403 with `Cf-Mitigated: challenge` before the solved request. At `2026-07-30T22:00:41Z`, a direct `HEAD` request to the protected PDF returned HTTP 403 with `Cf-Mitigated: challenge`. The FlareSolverr 3.5.0 container was then stopped while its loopback endpoint remained configured. The same built-MCP request contacted that unavailable primary, failed over to the pinned Byparr 2.1.0 container, and extracted `Encrypted Matrix-Vector Products` and `Abstract`. The E2E suite reported 16 passed and 0 failed, and both disposable containers were verified absent afterward.