Skip to content

Commit 4c14bde

Browse files
authored
fix: support clients with older versions of mcp protocol (#17)
1 parent 8753533 commit 4c14bde

File tree

1 file changed

+24
-0
lines changed

1 file changed

+24
-0
lines changed

src/handler.rs

Lines changed: 24 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,5 @@
1+
use std::cmp::Ordering;
2+
13
use crate::cli::CommandArguments;
24
use crate::error::ServiceError;
35
use 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};
912
use rust_mcp_sdk::mcp_server::ServerHandler;
1013
use 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

Comments
 (0)