rust_mcp_sdk/mcp_traits/
mcp_handler.rs

1use 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}