@@ -110,7 +110,7 @@ async fn create_sse_server(
110110 address : SocketAddr ,
111111) -> Result < ( tokio:: process:: Child , String ) > {
112112 let url = if server_name == "echo_streamable" {
113- format ! ( "http://{}" , address)
113+ format ! ( "http://{}/mcp " , address)
114114 } else {
115115 format ! ( "http://{}/sse" , address)
116116 } ;
@@ -348,7 +348,7 @@ async fn initial_connection_retry(server_name: &str) -> Result<()> {
348348
349349 const BIND_ADDRESS : & str = "127.0.0.1:8184" ;
350350 let server_url = if server_name == "echo_streamable" {
351- format ! ( "http://{}" , BIND_ADDRESS )
351+ format ! ( "http://{}/mcp " , BIND_ADDRESS )
352352 } else {
353353 format ! ( "http://{}/sse" , BIND_ADDRESS )
354354 } ;
@@ -545,3 +545,98 @@ async fn test_ping_when_disconnected() -> Result<()> {
545545
546546 Ok ( ( ) )
547547}
548+
549+ async fn protocol_version_override ( server_name : & str ) -> Result < ( ) > {
550+ const BIND_ADDRESS : & str = "127.0.0.1:8186" ;
551+
552+ // Phase 1: Test normal behavior (no override)
553+ {
554+ let ( server_handle, server_url) =
555+ create_sse_server ( server_name, BIND_ADDRESS . parse ( ) ?) . await ?;
556+ let ( child, mut reader, stderr_reader, mut stdin) =
557+ spawn_proxy ( & server_url, vec ! [ ] ) . await ?;
558+ let stderr_buffer = collect_stderr ( stderr_reader) ;
559+ let _guard = TestGuard :: new ( child, server_handle, stderr_buffer) ;
560+
561+ // Send initialization message with 2025-03-26
562+ let init_message = r#"{"jsonrpc":"2.0","id":"init-normal","method":"initialize","params":{"protocolVersion":"2025-03-26","capabilities":{},"clientInfo":{"name":"test","version":"0.1.0"}}}"# ;
563+ stdin. write_all ( init_message. as_bytes ( ) ) . await ?;
564+ stdin. write_all ( b"\n " ) . await ?;
565+
566+ // Read the initialization response
567+ let mut response = String :: new ( ) ;
568+ timeout ( Duration :: from_secs ( 10 ) , reader. read_line ( & mut response) ) . await ??;
569+
570+ // Verify the response contains the original protocol version
571+ assert ! (
572+ response. contains( "\" protocolVersion\" :\" 2025-03-26\" " ) ,
573+ "Expected server to respond with 2025-03-26 protocol version, got: {}" ,
574+ response
575+ ) ;
576+
577+ // Send initialized notification
578+ let initialized_message = r#"{"jsonrpc":"2.0","method":"notifications/initialized"}"# ;
579+ stdin. write_all ( initialized_message. as_bytes ( ) ) . await ?;
580+ stdin. write_all ( b"\n " ) . await ?;
581+
582+ // Clean shutdown
583+ drop ( stdin) ;
584+ }
585+
586+ // Give a moment for cleanup
587+ sleep ( Duration :: from_millis ( 500 ) ) . await ;
588+
589+ // Phase 2: Test with protocol version override
590+ {
591+ let ( server_handle, server_url) =
592+ create_sse_server ( server_name, BIND_ADDRESS . parse ( ) ?) . await ?;
593+ let ( child, mut reader, stderr_reader, mut stdin) = spawn_proxy (
594+ & server_url,
595+ vec ! [ "--override-protocol-version" , "2024-11-05" ] ,
596+ )
597+ . await ?;
598+ let stderr_buffer = collect_stderr ( stderr_reader) ;
599+ let _guard = TestGuard :: new ( child, server_handle, stderr_buffer) ;
600+
601+ // Send initialization message with 2025-03-26 (same as phase 1)
602+ let init_message = r#"{"jsonrpc":"2.0","id":"init-override","method":"initialize","params":{"protocolVersion":"2025-03-26","capabilities":{},"clientInfo":{"name":"test","version":"0.1.0"}}}"# ;
603+ stdin. write_all ( init_message. as_bytes ( ) ) . await ?;
604+ stdin. write_all ( b"\n " ) . await ?;
605+
606+ // Read the initialization response
607+ let mut response = String :: new ( ) ;
608+ timeout ( Duration :: from_secs ( 10 ) , reader. read_line ( & mut response) ) . await ??;
609+
610+ // Verify the response contains the overridden protocol version
611+ assert ! (
612+ response. contains( "\" protocolVersion\" :\" 2024-11-05\" " ) ,
613+ "Expected proxy to override protocol version to 2024-11-05, got: {}" ,
614+ response
615+ ) ;
616+
617+ // Verify it does NOT contain the original version
618+ assert ! (
619+ !response. contains( "\" protocolVersion\" :\" 2025-03-26\" " ) ,
620+ "Protocol version should have been overridden from 2025-03-26 to 2024-11-05, got: {}" ,
621+ response
622+ ) ;
623+
624+ // Send initialized notification
625+ let initialized_message = r#"{"jsonrpc":"2.0","method":"notifications/initialized"}"# ;
626+ stdin. write_all ( initialized_message. as_bytes ( ) ) . await ?;
627+ stdin. write_all ( b"\n " ) . await ?;
628+
629+ // Clean shutdown
630+ drop ( stdin) ;
631+ }
632+
633+ Ok ( ( ) )
634+ }
635+
636+ #[ tokio:: test]
637+ async fn test_protocol_version_override ( ) -> Result < ( ) > {
638+ protocol_version_override ( "echo" ) . await ?;
639+ protocol_version_override ( "echo_streamable" ) . await ?;
640+
641+ Ok ( ( ) )
642+ }
0 commit comments