1+ use std:: cmp:: Ordering ;
2+
13use crate :: cli:: CommandArguments ;
24use crate :: error:: ServiceError ;
35use crate :: { error:: ServiceResult , fs_service:: FileSystemService , tools:: * } ;
@@ -6,6 +8,7 @@ use rust_mcp_schema::{
68 schema_utils:: CallToolError , CallToolRequest , CallToolResult , ListToolsRequest ,
79 ListToolsResult , RpcError ,
810} ;
11+ use rust_mcp_schema:: { InitializeRequest , InitializeResult } ;
912use rust_mcp_sdk:: mcp_server:: ServerHandler ;
1013use rust_mcp_sdk:: McpServer ;
1114
@@ -68,6 +71,27 @@ impl ServerHandler for MyServerHandler {
6871 } )
6972 }
7073
74+ async fn handle_initialize_request (
75+ & self ,
76+ initialize_request : InitializeRequest ,
77+ runtime : & dyn McpServer ,
78+ ) -> std:: result:: Result < InitializeResult , RpcError > {
79+ runtime
80+ . set_client_details ( initialize_request. params . clone ( ) )
81+ . map_err ( |err| RpcError :: internal_error ( ) . with_message ( format ! ( "{}" , err) ) ) ?;
82+
83+ let mut server_info = runtime. server_info ( ) . to_owned ( ) ;
84+ // Provide compatibility for clients using older MCP protocol versions.
85+ if server_info
86+ . protocol_version
87+ . cmp ( & initialize_request. params . protocol_version )
88+ == Ordering :: Greater
89+ {
90+ server_info. protocol_version = initialize_request. params . protocol_version ;
91+ }
92+ Ok ( server_info)
93+ }
94+
7195 async fn handle_call_tool_request (
7296 & self ,
7397 request : CallToolRequest ,
0 commit comments