pub struct ProxyHandler { /* private fields */ }Expand description
A proxy handler that forwards requests to a client based on the server’s capabilities
Isolation:
BackendIsolation::Shared: one backend, clones share Arcs (stdio).BackendIsolation::PerSession: factory creates a disconnected handler; backend is opened duringinitialize(so capabilities are real) and dropped with the session.
Implementations§
Source§impl ProxyHandler
impl ProxyHandler
Sourcepub fn swap_backend_from_connection(&self, conn: Option<StreamClientConnection>)
pub fn swap_backend_from_connection(&self, conn: Option<StreamClientConnection>)
Update the backend from a high-level client connection.
Source§impl ProxyHandler
impl ProxyHandler
Sourcepub fn upstream_peers(&self) -> Arc<UpstreamPeerRegistry>
pub fn upstream_peers(&self) -> Arc<UpstreamPeerRegistry>
Shared upstream peer registry used across reconnects.
Sourcepub fn new_disconnected(
mcp_id: String,
tool_filter: ToolFilter,
default_info: ServerInfo,
) -> Self
pub fn new_disconnected( mcp_id: String, tool_filter: ToolFilter, default_info: ServerInfo, ) -> Self
创建断开状态的 handler(用于初始化) 后续通过 swap_backend() 注入实际的后端连接
pub fn new_disconnected_with_fallback( mcp_id: String, tool_filter: ToolFilter, default_info: ServerInfo, fallback_tools: Option<ListToolsResult>, ) -> Self
Sourcepub fn new_per_session(
connector: Arc<dyn BackendConnector>,
mcp_id: String,
tool_filter: ToolFilter,
) -> Self
pub fn new_per_session( connector: Arc<dyn BackendConnector>, mcp_id: String, tool_filter: ToolFilter, ) -> Self
Create a disconnected per-session handler (URL isolation).
Backend is opened during ServerHandler::initialize so the initialize
response carries real backend capabilities.
Sourcepub fn isolation(&self) -> BackendIsolation
pub fn isolation(&self) -> BackendIsolation
Isolation mode for this handler.
pub fn new(client: BackendRunningService) -> Self
pub fn with_mcp_id(client: BackendRunningService, mcp_id: String) -> Self
Sourcepub fn with_tool_filter(
client: BackendRunningService,
mcp_id: String,
tool_filter: ToolFilter,
) -> Self
pub fn with_tool_filter( client: BackendRunningService, mcp_id: String, tool_filter: ToolFilter, ) -> Self
创建带工具过滤器的 ProxyHandler(带初始后端连接,shared 隔离)
Sourcepub fn swap_backend(&self, new_client: Option<BackendRunningService>)
pub fn swap_backend(&self, new_client: Option<BackendRunningService>)
原子性替换后端连接
- Some(client): 设置新的后端连接
- None: 标记后端断开
版本控制:每次调用都会递增 backend_version,使旧 session 失效
注意:
- 新 client 应使用与本 handler 相同的
UpstreamPeerRegistry(见StreamClientConnection::connect_with_peers)。 - 对
BackendIsolation::PerSession的 management stub(builder 返回值) 调用此方法没有运维意义:真实后端由各 session handler 持有。
pub fn swap_backend_with_discovery( &self, new_client: Option<BackendRunningService>, complete_tools: Option<ListToolsResult>, )
Sourcepub fn is_backend_available(&self) -> bool
pub fn is_backend_available(&self) -> bool
检查后端是否可用(快速检查,不发送请求)
Sourcepub async fn is_mcp_server_ready(&self) -> bool
pub async fn is_mcp_server_ready(&self) -> bool
检查 mcp 服务是否正常(异步版本,会发送验证请求)
Sourcepub fn is_terminated(&self) -> bool
pub fn is_terminated(&self) -> bool
检查后端连接是否已关闭(同步版本,仅检查 transport 状态)
Sourcepub async fn is_terminated_async(&self) -> bool
pub async fn is_terminated_async(&self) -> bool
异步检查后端连接是否已断开(会发送验证请求)
Sourcepub fn get_server_info_json(&self) -> Value
pub fn get_server_info_json(&self) -> Value
获取后端 ServerInfo 的 JSON 表示
用于跨 rmcp 版本桥接:将 rmcp 1.4.0 的 ServerInfo 序列化为 JSON, 供 rmcp 0.10 侧反序列化使用。
Sourcepub fn get_backend_version(&self) -> u64
pub fn get_backend_version(&self) -> u64
获取当前后端版本号
版本号用于跟踪后端连接变化:
- 0: 断开状态
- 1+: 已连接,每次 swap_backend 递增
用途:配合 ProxyAwareSessionManager 实现 session 版本控制
Source§impl ProxyHandler
impl ProxyHandler
Trait Implementations§
Source§impl BackendBridge for ProxyHandler
impl BackendBridge for ProxyHandler
Source§fn get_server_info_json(&self) -> Value
fn get_server_info_json(&self) -> Value
Source§fn is_backend_available(&self) -> bool
fn is_backend_available(&self) -> bool
Source§fn is_mcp_server_ready(&self) -> Pin<Box<dyn Future<Output = bool> + Send + '_>>
fn is_mcp_server_ready(&self) -> Pin<Box<dyn Future<Output = bool> + Send + '_>>
Source§impl Clone for ProxyHandler
impl Clone for ProxyHandler
Source§fn clone(&self) -> ProxyHandler
fn clone(&self) -> ProxyHandler
1.0.0 (const: unstable) · Source§fn clone_from(&mut self, source: &Self)
fn clone_from(&mut self, source: &Self)
source. Read moreSource§impl Debug for ProxyHandler
impl Debug for ProxyHandler
Source§impl ServerHandler for ProxyHandler
impl ServerHandler for ProxyHandler
Source§async fn initialize(
&self,
request: InitializeRequestParams,
context: RequestContext<RoleServer>,
) -> Result<InitializeResult, ErrorData>
async fn initialize( &self, request: InitializeRequestParams, context: RequestContext<RoleServer>, ) -> Result<InitializeResult, ErrorData>
Connect per-session backends before returning capabilities.
fn get_info(&self) -> ServerInfo
async fn list_tools( &self, request: Option<PaginatedRequestParams>, context: RequestContext<RoleServer>, ) -> Result<ListToolsResult, ErrorData>
Source§async fn call_tool(
&self,
request: CallToolRequestParams,
context: RequestContext<RoleServer>,
) -> Result<CallToolResponse, ErrorData>
async fn call_tool( &self, request: CallToolRequestParams, context: RequestContext<RoleServer>, ) -> Result<CallToolResponse, ErrorData>
tools/call request from a client. Read more