httpmcp_rust/handlers/
lifecycle.rs1use crate::error::{McpError, Result};
2use crate::jsonrpc::{JsonRpcRequest, JsonRpcResponse};
3use crate::protocol::{Implementation, InitializeParams, InitializeResult, ServerCapabilities};
4use serde_json::Value;
5
6pub fn handle_initialize(
8 req: &JsonRpcRequest,
9 server_info: Implementation,
10 capabilities: ServerCapabilities,
11) -> Result<JsonRpcResponse> {
12 let params: InitializeParams =
13 serde_json::from_value(req.params.clone().unwrap_or(Value::Null))
14 .map_err(|e| McpError::InvalidParams(format!("Invalid initialize params: {}", e)))?;
15
16 if !params.protocol_version.starts_with("2024-")
18 && !params.protocol_version.starts_with("2025-")
19 {
20 return Err(McpError::InvalidRequest(format!(
21 "Unsupported protocol version: {}",
22 params.protocol_version
23 )));
24 }
25
26 let result = InitializeResult {
27 protocol_version: params.protocol_version,
28 capabilities,
29 server_info,
30 };
31
32 Ok(JsonRpcResponse::success(
33 serde_json::to_value(result)?,
34 req.id.clone(),
35 ))
36}
37
38pub fn handle_ping(req: &JsonRpcRequest) -> Result<JsonRpcResponse> {
40 Ok(JsonRpcResponse::success(
41 serde_json::json!({}),
42 req.id.clone(),
43 ))
44}