1
+ use std:: cmp:: Ordering ;
2
+
1
3
use crate :: cli:: CommandArguments ;
2
4
use crate :: error:: ServiceError ;
3
5
use crate :: { error:: ServiceResult , fs_service:: FileSystemService , tools:: * } ;
@@ -6,6 +8,7 @@ use rust_mcp_schema::{
6
8
schema_utils:: CallToolError , CallToolRequest , CallToolResult , ListToolsRequest ,
7
9
ListToolsResult , RpcError ,
8
10
} ;
11
+ use rust_mcp_schema:: { InitializeRequest , InitializeResult } ;
9
12
use rust_mcp_sdk:: mcp_server:: ServerHandler ;
10
13
use rust_mcp_sdk:: McpServer ;
11
14
@@ -68,6 +71,27 @@ impl ServerHandler for MyServerHandler {
68
71
} )
69
72
}
70
73
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
+
71
95
async fn handle_call_tool_request (
72
96
& self ,
73
97
request : CallToolRequest ,
0 commit comments