{"record":{"id":"435464f8a465e667","repo":"rohitg00/ai-engineering-from-scratch","slug":"peer-name-correct-modern-request-error-code-b","errorCode":null,"errorMessage":"{peer.name}: correct modern request error {code} before retrying","messagePattern":"(.+?): correct modern request error (.+?) before retrying","errorType":"exception","errorClass":"RuntimeError","httpStatus":null,"severity":"error","filePath":"phases/13-tools-and-protocols/08-building-an-mcp-client/code/main.py","lineNumber":440,"sourceCode":"        if not isinstance(response, dict):\n            raise RuntimeError(f\"{peer.name}: malformed discovery response\")\n        kind, payload = decode_rpc_response(response, request_id)\n        if kind == \"result\":\n            advertised = payload.get(\"supportedVersions\", [])\n            if not isinstance(advertised, list) or not all(\n                isinstance(version, str) for version in advertised\n            ):\n                raise RuntimeError(f\"{peer.name}: malformed modern discovery result\")\n            selected = self._mutual_version(advertised)\n            if selected is None:\n                raise RuntimeError(f\"{peer.name}: no mutually supported modern version\")\n            self._activate_modern(peer, payload, selected)\n            return\n\n        code = payload[\"code\"]\n        if code in RECOGNIZED_MODERN_ERRORS:\n            if code != -32022:\n                raise RuntimeError(f\"{peer.name}: correct modern request error {code} before retrying\")\n            data = payload.get(\"data\")\n            advertised = data.get(\"supported\", []) if isinstance(data, dict) else []\n            selected = self._mutual_version(advertised)\n            if selected is None:\n                raise RuntimeError(f\"{peer.name}: no mutually supported modern version\")\n            retry_id = self._new_id()\n            retry = modern_request(\n                retry_id,\n                \"server/discover\",\n                {},\n                selected,\n                self.client_capabilities,\n            )\n            try:\n                retried = self._send(peer, retry, self.discovery_timeout_ms)\n            except (TimeoutError, ConnectionError) as exc:\n                raise RuntimeError(f\"{peer.name}: proven-modern discovery retry failed\") from exc\n            if not isinstance(retried, dict):","sourceCodeStart":422,"sourceCodeEnd":458,"githubUrl":"https://github.com/rohitg00/ai-engineering-from-scratch/blob/39ea8a1c6d0b61f071226eff7ede4d4105fed820/phases/13-tools-and-protocols/08-building-an-mcp-client/code/main.py#L422-L458","documentation":"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.","triggerScenarios":"decode_rpc_response yields kind='error' with payload['code'] in RECOGNIZED_MODERN_ERRORS and code != -32022.","commonSituations":"Server rejecting discovery for auth, capability, or state reasons; misconfigured client capabilities; server bug returning a reserved error code for an unrelated failure.","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"],"exampleFix":null,"handlingStrategy":"try-catch","validationCode":"null","typeGuard":"null","tryCatchPattern":"try:\n    client.connect_all()\nexcept RuntimeError as e:\n    if \"correct modern request error\" in str(e):\n        handle_recognized_error_code(extract_code(str(e)), peer)","preventionTips":["Map RECOGNIZED_MODERN_ERRORS codes to runbooks","Never auto-retry recognized errors other than -32022"],"tags":["mcp","rpc-error","discovery","fail-closed"],"backgroundTag":"json-rpc-error-response","analyzedSha":"39ea8a1c6d0b61f071226eff7ede4d4105fed820","analyzedAt":"2026-08-26T03:13:46.626Z","schemaVersion":2},"datasetVersion":"2026-08-26T07:17:17.940Z"}