use crate::mcp::{ClientCapabilities, GenericMeta, Implementation, IntoMcpRequest, RequestMeta, ServerCapabilities};
use serde::{Deserialize, Serialize};
#[serde_with::skip_serializing_none]
#[derive(Debug, Clone, Serialize, Deserialize)]
#[serde(rename_all = "camelCase")] pub struct InitializeParams {
#[serde(rename = "_meta")]
pub meta: Option<RequestMeta>,
pub protocol_version: String,
pub capabilities: ClientCapabilities,
pub client_info: Implementation,
}
impl IntoMcpRequest<InitializeParams> for InitializeParams {
const METHOD: &'static str = "initialize";
type McpResult = InitializeResult;
}
impl InitializeParams {
pub fn from_client_info(name: impl Into<String>, version: impl Into<String>) -> Self {
Self {
meta: None,
protocol_version: crate::mcp::LATEST_PROTOCOL_VERSION.to_string(),
capabilities: ClientCapabilities::default(),
client_info: Implementation {
name: name.into(),
version: version.into(),
},
}
}
}
impl InitializeParams {
pub fn with_meta(mut self, meta: RequestMeta) -> Self {
self.meta = Some(meta);
self
}
pub fn with_capabilities(mut self, capabilities: ClientCapabilities) -> Self {
self.capabilities = capabilities;
self
}
pub fn with_client_info(mut self, client_info: Implementation) -> Self {
self.client_info = client_info;
self
}
}
#[serde_with::skip_serializing_none]
#[derive(Debug, Clone, Serialize, Deserialize)]
#[serde(rename_all = "camelCase")] pub struct InitializeResult {
#[serde(rename = "_meta")]
pub meta: Option<GenericMeta>,
pub protocol_version: String,
pub capabilities: ServerCapabilities,
pub server_info: Implementation,
pub instructions: Option<String>,
}
#[serde_with::skip_serializing_none]
#[derive(Debug, Clone, Serialize, Deserialize, Default)] #[serde(rename_all = "camelCase")]
pub struct PingParams {
#[serde(rename = "_meta")]
pub meta: Option<RequestMeta>,
}
impl IntoMcpRequest<PingParams> for PingParams {
const METHOD: &'static str = "ping";
type McpResult = ();
}