{"record":{"id":"8702484ae488cad5","repo":"rohitg00/ai-engineering-from-scratch","slug":"peer-name-unsupported-legacy-protocol-revision","errorCode":null,"errorMessage":"{peer.name}: unsupported legacy protocol revision","messagePattern":"(.+?): unsupported legacy protocol revision","errorType":"exception","errorClass":"RuntimeError","httpStatus":null,"severity":"error","filePath":"phases/13-tools-and-protocols/08-building-an-mcp-client/code/main.py","lineNumber":389,"sourceCode":"            raise RuntimeError(f\"{peer.name}: bounded legacy probe failed closed\") from exc\n        if not isinstance(response, dict):\n            raise RuntimeError(f\"{peer.name}: bounded legacy probe returned no result\")\n        kind, payload = decode_rpc_response(response, request_id)\n        if kind != \"result\":\n            raise RuntimeError(f\"{peer.name}: legacy initialize returned an error\")\n        result = payload\n        version = result.get(\"protocolVersion\")\n        capabilities = result.get(\"capabilities\")\n        server_info = result.get(\"serverInfo\")\n        valid_server_info = (\n            isinstance(server_info, dict)\n            and isinstance(server_info.get(\"name\"), str)\n            and bool(server_info[\"name\"])\n            and isinstance(server_info.get(\"version\"), str)\n            and bool(server_info[\"version\"])\n        )\n        if version not in self.supported_legacy:\n            raise RuntimeError(f\"{peer.name}: unsupported legacy protocol revision\")\n        if not isinstance(capabilities, dict) or not valid_server_info:\n            raise RuntimeError(f\"{peer.name}: malformed legacy initialize result\")\n        peer.era = \"legacy\"\n        peer.protocol_version = version\n        peer.capabilities = capabilities\n        peer.server_info = server_info\n        peer.available = True\n        self._send(\n            peer,\n            {\"jsonrpc\": \"2.0\", \"method\": \"notifications/initialized\", \"params\": {}}\n        )\n\n    def _connect_peer(self, peer: Peer) -> None:\n        if peer.available and peer.era in {\"modern\", \"legacy\"}:\n            return\n        request_id = self._new_id()\n        probe = modern_request(\n            request_id,","sourceCodeStart":371,"sourceCodeEnd":407,"githubUrl":"https://github.com/rohitg00/ai-engineering-from-scratch/blob/39ea8a1c6d0b61f071226eff7ede4d4105fed820/phases/13-tools-and-protocols/08-building-an-mcp-client/code/main.py#L371-L407","documentation":"The legacy initialize succeeded but the protocolVersion in the result is not in the client's supported_legacy set. The client only speaks an explicit allowlist of legacy revisions and refuses to proceed with one it has not been configured to accept.","triggerScenarios":"result.get('protocolVersion') from a successful legacy initialize returns a version string absent from self.supported_legacy.","commonSituations":"Server running a much older or newer legacy revision than the client anticipates; client's supported_legacy not updated after a server upgrade; server reporting an ad-hoc version string.","solutions":["Check what protocolVersion the server returned and compare with client.supported_legacy","Add the server's revision to supported_legacy if it is actually safe to use","Upgrade the server to a revision the client already allows","Disable legacy for this peer and require a modern handshake"],"exampleFix":"// before\nclient = McpClient(..., supported_legacy={\"2024-11-05\"})\n\n// after\nclient = McpClient(..., supported_legacy={\"2024-11-05\", \"2025-03-26\"})","handlingStrategy":"validation","validationCode":"advertised = probe_server_protocol_version(peer)\nif advertised not in client.supported_legacy:\n    align_versions(client, peer)  # widen set or upgrade server before connect","typeGuard":"null","tryCatchPattern":"try:\n    client.connect_all()\nexcept RuntimeError as e:\n    if \"unsupported legacy protocol revision\" in str(e):\n        client.supported_legacy.add(reported_version(peer))","preventionTips":["Pin supported_legacy explicitly and review it at every server upgrade","Alert when a server's reported revision drifts"],"tags":["mcp","version-mismatch","legacy","handshake"],"backgroundTag":"unsupported-protocol-version","analyzedSha":"39ea8a1c6d0b61f071226eff7ede4d4105fed820","analyzedAt":"2026-08-26T03:13:46.626Z","schemaVersion":2},"datasetVersion":"2026-08-26T07:17:17.940Z"}