rust_mcp_sdk/mcp_traits/
mcp_handler.rs1use async_trait::async_trait;
2
3#[cfg(feature = "server")]
4use crate::schema::schema_utils::{NotificationFromClient, RequestFromClient, ResultFromServer};
5
6#[cfg(feature = "client")]
7use crate::schema::schema_utils::{NotificationFromServer, RequestFromServer, ResultFromClient};
8
9use crate::error::SdkResult;
10use crate::schema::RpcError;
11use std::sync::Arc;
12
13#[cfg(feature = "client")]
14use super::mcp_client::McpClient;
15#[cfg(feature = "server")]
16use super::mcp_server::McpServer;
17
18#[cfg(feature = "server")]
19#[async_trait]
20pub trait McpServerHandler: Send + Sync {
21 async fn handle_request(
22 &self,
23 client_jsonrpc_request: RequestFromClient,
24 runtime: Arc<dyn McpServer>,
25 ) -> std::result::Result<ResultFromServer, RpcError>;
26 async fn handle_error(
27 &self,
28 jsonrpc_error: &RpcError,
29 runtime: Arc<dyn McpServer>,
30 ) -> SdkResult<()>;
31 async fn handle_notification(
32 &self,
33 client_jsonrpc_notification: NotificationFromClient,
34 runtime: Arc<dyn McpServer>,
35 ) -> SdkResult<()>;
36}
37
38#[cfg(feature = "client")]
39#[async_trait]
40pub trait McpClientHandler: Send + Sync {
41 async fn handle_request(
42 &self,
43 server_jsonrpc_request: RequestFromServer,
44 runtime: &dyn McpClient,
45 ) -> std::result::Result<ResultFromClient, RpcError>;
46 async fn handle_error(
47 &self,
48 jsonrpc_error: &RpcError,
49 runtime: &dyn McpClient,
50 ) -> SdkResult<()>;
51 async fn handle_notification(
52 &self,
53 server_jsonrpc_notification: NotificationFromServer,
54 runtime: &dyn McpClient,
55 ) -> SdkResult<()>;
56
57 async fn handle_process_error(
58 &self,
59 error_message: String,
60 runtime: &dyn McpClient,
61 ) -> SdkResult<()>;
62}