rohitg00/ai-engineering-from-scratch · error · RuntimeError

{peer.name}: correct modern request error {code} before retr

Error message

{peer.name}: correct modern request error {code} before retrying

What it means

Discovery returned a recognized JSON-RPC error whose code is in RECOGNIZED_MODERN_ERRORS but is not the version-hint code -32022. Only -32022 carries a supported-versions hint that justifies an automatic retry; every other recognized error means a real defect the operator must fix before retrying.

Source

Thrown at phases/13-tools-and-protocols/08-building-an-mcp-client/code/main.py:440

        if not isinstance(response, dict):
            raise RuntimeError(f"{peer.name}: malformed discovery response")
        kind, payload = decode_rpc_response(response, request_id)
        if kind == "result":
            advertised = payload.get("supportedVersions", [])
            if not isinstance(advertised, list) or not all(
                isinstance(version, str) for version in advertised
            ):
                raise RuntimeError(f"{peer.name}: malformed modern discovery result")
            selected = self._mutual_version(advertised)
            if selected is None:
                raise RuntimeError(f"{peer.name}: no mutually supported modern version")
            self._activate_modern(peer, payload, selected)
            return

        code = payload["code"]
        if code in RECOGNIZED_MODERN_ERRORS:
            if code != -32022:
                raise RuntimeError(f"{peer.name}: correct modern request error {code} before retrying")
            data = payload.get("data")
            advertised = data.get("supported", []) if isinstance(data, dict) else []
            selected = self._mutual_version(advertised)
            if selected is None:
                raise RuntimeError(f"{peer.name}: no mutually supported modern version")
            retry_id = self._new_id()
            retry = modern_request(
                retry_id,
                "server/discover",
                {},
                selected,
                self.client_capabilities,
            )
            try:
                retried = self._send(peer, retry, self.discovery_timeout_ms)
            except (TimeoutError, ConnectionError) as exc:
                raise RuntimeError(f"{peer.name}: proven-modern discovery retry failed") from exc
            if not isinstance(retried, dict):

View on GitHub (pinned to 39ea8a1c6d)

Solutions

  1. Read payload['code'] and payload['message'] to identify which recognized failure fired
  2. Fix the underlying condition (auth, capabilities, server state) on the offending side
  3. Retry connect_all only after the cause is corrected
  4. If the server misuses a recognized code, file/fix the server
Defensive patterns

Strategy: try-catch

Validate before calling

null

Type guard

null

Try / catch

try:
    client.connect_all()
except RuntimeError as e:
    if "correct modern request error" in str(e):
        handle_recognized_error_code(extract_code(str(e)), peer)

Prevention

When it happens

Trigger: decode_rpc_response yields kind='error' with payload['code'] in RECOGNIZED_MODERN_ERRORS and code != -32022.

Common situations: Server rejecting discovery for auth, capability, or state reasons; misconfigured client capabilities; server bug returning a reserved error code for an unrelated failure.

Related errors


AI-assisted analysis of rohitg00/ai-engineering-from-scratch@39ea8a1c6d (2026-08-26). Data as JSON: /api/errors/435464f8a465e667. Report an issue: GitHub.