@@ -1008,6 +1008,30 @@ def test_serialize_server_result_drops_top_level_server_info_on_discover_but_kee
10081008 assert sieved ["_meta" ] == {types .SERVER_INFO_META_KEY : stamp }
10091009
10101010
1011+ def test_discover_round_trips_unknown_server_capabilities ():
1012+ capabilities = types .ServerCapabilities .model_validate ({"tools" : {}, "events" : {"listChanged" : False }})
1013+ result = types .DiscoverResult (supported_versions = ["2026-07-28" ], capabilities = capabilities )
1014+ dumped = result .model_dump (by_alias = True , mode = "json" , exclude_none = True )
1015+ sieved = methods .serialize_server_result ("server/discover" , "2026-07-28" , dumped )
1016+ assert sieved ["capabilities" ] == {"tools" : {}, "events" : {"listChanged" : False }}
1017+ parsed = methods .parse_server_result ("server/discover" , "2026-07-28" , sieved )
1018+ assert isinstance (parsed , types .DiscoverResult )
1019+ assert parsed .capabilities .model_dump (by_alias = True , exclude_none = True ) == sieved ["capabilities" ]
1020+
1021+
1022+ @pytest .mark .parametrize ("version" , PRE_2026 )
1023+ def test_initialize_round_trips_unknown_capabilities_at_pre_2026_versions (version : str ):
1024+ capabilities : dict [str , Any ] = {"tools" : {}, "events" : {}}
1025+ result = {"protocolVersion" : version , "capabilities" : capabilities , "serverInfo" : {"name" : "S" , "version" : "1" }}
1026+ sieved = methods .serialize_server_result ("initialize" , version , result )
1027+ assert sieved ["capabilities" ] == capabilities
1028+ client_info = {"name" : "C" , "version" : "1" }
1029+ params = {"protocolVersion" : version , "capabilities" : {"events" : {"enabled" : True }}, "clientInfo" : client_info }
1030+ request = methods .parse_client_request ("initialize" , version , params )
1031+ assert isinstance (request , types .InitializeRequest )
1032+ assert request .params .capabilities .model_dump (exclude_none = True ) == {"events" : {"enabled" : True }}
1033+
1034+
10111035def test_serialize_server_result_drops_an_unknown_nested_tool_field ():
10121036 tool = {"name" : "echo" , "inputSchema" : {"type" : "object" }, "unknownField" : 1 }
10131037 sieved = methods .serialize_server_result ("tools/list" , "2025-11-25" , {"tools" : [tool ], "resultType" : "complete" })
0 commit comments