mcp_streamable_proxy/proxy_handler/
backend_bridge.rs1use super::*;
2
3impl mcp_common::BackendBridge for ProxyHandler {
4 fn mcp_id(&self) -> &str {
5 self.mcp_id()
6 }
7
8 fn get_server_info_json(&self) -> serde_json::Value {
9 self.get_server_info_json()
10 }
11
12 fn is_backend_available(&self) -> bool {
13 self.is_backend_available()
14 }
15
16 fn is_mcp_server_ready(
17 &self,
18 ) -> std::pin::Pin<Box<dyn std::future::Future<Output = bool> + Send + '_>> {
19 Box::pin(self.is_mcp_server_ready())
20 }
21
22 fn is_terminated_async(
23 &self,
24 ) -> std::pin::Pin<Box<dyn std::future::Future<Output = bool> + Send + '_>> {
25 Box::pin(self.is_terminated_async())
26 }
27
28 fn call_peer_method(
29 &self,
30 method: &str,
31 params: serde_json::Value,
32 ) -> std::pin::Pin<
33 Box<dyn std::future::Future<Output = Result<serde_json::Value, String>> + Send + '_>,
34 > {
35 let method = method.to_string();
36 Box::pin(async move { ProxyHandler::call_peer_method(self, &method, params).await })
37 }
38}
39
40#[cfg(test)]
41mod meta_merge_tests {
42 use super::merge_context_meta_into_params;
43 use rmcp::model::{
44 CallToolRequestParams, NumberOrString, ProgressToken, RequestMetaObject, RequestParamsMeta,
45 };
46
47 #[test]
48 fn merge_copies_progress_token_from_context() {
49 let mut params = CallToolRequestParams::new("echo");
50 assert!(params.meta.is_none());
51
52 let mut context_meta = RequestMetaObject::new();
53 context_meta.set_progress_token(ProgressToken(NumberOrString::Number(42)));
54
55 merge_context_meta_into_params(&mut params, &context_meta);
56
57 assert_eq!(
58 params.progress_token(),
59 Some(ProgressToken(NumberOrString::Number(42)))
60 );
61 }
62
63 #[test]
64 fn merge_keeps_existing_params_meta_keys() {
65 let mut params = CallToolRequestParams::new("echo");
66 params.set_progress_token(ProgressToken(NumberOrString::Number(1)));
67
68 let mut context_meta = RequestMetaObject::new();
69 context_meta.set_progress_token(ProgressToken(NumberOrString::Number(99)));
70 context_meta.insert("traceId".to_string(), serde_json::json!("abc"));
71
72 merge_context_meta_into_params(&mut params, &context_meta);
73
74 assert_eq!(
75 params.progress_token(),
76 Some(ProgressToken(NumberOrString::Number(1))),
77 "params win on conflict"
78 );
79 assert_eq!(
80 params.meta.as_ref().and_then(|m| m.get("traceId")),
81 Some(&serde_json::json!("abc"))
82 );
83 }
84}