oxios_kernel/kernel_handle/
mcp_api.rs1use crate::mcp::{self, McpBridge, McpServer, McpToolCallResult};
4use crate::program::ToolDef;
5use std::sync::Arc;
6
7pub struct McpApi {
9 pub(crate) mcp_bridge: Arc<McpBridge>,
10}
11
12impl McpApi {
13 pub fn new(mcp_bridge: Arc<McpBridge>) -> Self {
15 Self { mcp_bridge }
16 }
17 pub fn list_servers(&self) -> Vec<String> {
19 self.mcp_bridge.servers()
20 }
21
22 pub fn get_server(&self, name: &str) -> Option<McpServer> {
24 self.mcp_bridge.get_server(name)
25 }
26
27 pub fn register_server(&self, server: McpServer) {
29 self.mcp_bridge.register_server(server);
30 }
31
32 pub async fn init_server(&self, name: &str) -> anyhow::Result<()> {
34 self.mcp_bridge.initialize_server(name).await
35 }
36
37 pub async fn client_status(&self, name: &str) -> Option<bool> {
39 if let Some(client) = self.mcp_bridge.client(name).await {
40 Some(client.is_initialized().await)
41 } else {
42 None
43 }
44 }
45
46 pub async fn list_tools(&self) -> anyhow::Result<Vec<ToolDef>> {
48 mcp::list_tool_defs(&self.mcp_bridge).await
49 }
50
51 pub async fn cached_tools(&self, server_name: &str) -> Option<Vec<ToolDef>> {
53 mcp::cached_tool_defs(&self.mcp_bridge, server_name).await
54 }
55
56 pub async fn call_tool(
58 &self,
59 server: &str,
60 tool: &str,
61 arguments: serde_json::Value,
62 ) -> anyhow::Result<McpToolCallResult> {
63 self.mcp_bridge.call_tool(server, tool, arguments).await
64 }
65
66 pub fn bridge(&self) -> &Arc<McpBridge> {
68 &self.mcp_bridge
69 }
70
71 pub fn server_count(&self) -> usize {
73 self.mcp_bridge.servers().len()
74 }
75
76 pub async fn shutdown_all(&self) -> anyhow::Result<()> {
78 self.mcp_bridge.shutdown_all().await
79 }
80}