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
- Read payload['code'] and payload['message'] to identify which recognized failure fired
- Fix the underlying condition (auth, capabilities, server state) on the offending side
- Retry connect_all only after the cause is corrected
- 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
- Map RECOGNIZED_MODERN_ERRORS codes to runbooks
- Never auto-retry recognized errors other than -32022
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
- {peer.name}: proven-modern discovery retry returned an error
- server/discover accepts no params beyond _meta
- {peer.name}: legacy initialize returned an error
- {peer.name}: malformed discovery response
- {peer.name}: malformed modern discovery result
AI-assisted analysis of rohitg00/ai-engineering-from-scratch@39ea8a1c6d (2026-08-26).
Data as JSON: /api/errors/435464f8a465e667.
Report an issue: GitHub.