79 lines
1.6 KiB
Rust
79 lines
1.6 KiB
Rust
use serde_json::Value;
|
|||
|
|
use serde::{Deserialize, Serialize};
|
||
|
|
|
||
|
|
#[derive(Debug, Clone, Serialize, Deserialize)]
|
||
|
|
pub enum McpTransport {
|
||
|
|
Stdio {
|
||
|
|
command: String,
|
||
|
|
args: Vec<String>,
|
||
|
|
},
|
||
|
|
StreamableHttp {
|
||
|
|
url: String,
|
||
|
|
},
|
||
|
|
}
|
||
|
|
|
||
|
|
#[derive(Debug, Clone, Serialize, Deserialize)]
|
||
|
|
pub struct McpToolInfo {
|
||
|
|
pub name: String,
|
||
|
|
pub description: String,
|
||
|
|
pub input_schema: Value,
|
||
|
|
}
|
||
|
|
|
||
|
|
#[derive(Debug, Clone, Serialize, Deserialize)]
|
||
|
|
pub struct McpServer {
|
||
|
|
pub name: String,
|
||
|
|
pub transport: McpTransport,
|
||
|
|
pub tools: Vec<McpToolInfo>,
|
||
|
|
}
|
||
|
|
|
||
|
|
impl McpServer {
|
||
|
|
pub fn new(name: String, transport: McpTransport) -> Self {
|
||
|
|
McpServer {
|
||
|
|
name,
|
||
|
|
transport,
|
||
|
|
tools: Vec::new(),
|
||
|
|
}
|
||
|
|
}
|
||
|
|
}
|
||
|
|
|
||
|
|
#[derive(Debug, Clone)]
|
||
|
|
pub struct McpManager {
|
||
|
|
pub servers: Vec<McpServer>,
|
||
|
|
pub running: bool,
|
||
|
|
}
|
||
|
|
|
||
|
|
impl McpManager {
|
||
|
|
pub fn new() -> Self {
|
||
|
|
McpManager {
|
||
|
|
servers: Vec::new(),
|
||
|
|
running: false,
|
||
|
|
}
|
||
|
|
}
|
||
|
|
|
||
|
|
pub fn add_server(&mut self, server: McpServer) {
|
||
|
|
self.servers.push(server);
|
||
|
|
}
|
||
|
|
|
||
|
|
pub fn remove_server(&mut self, name: &str) {
|
||
|
|
self.servers.retain(|s| s.name != name);
|
||
|
|
}
|
||
|
|
|
||
|
|
pub fn get_server(&self, name: &str) -> Option<&McpServer> {
|
||
|
|
self.servers.iter().find(|s| s.name == name)
|
||
|
|
}
|
||
|
|
|
||
|
|
pub fn all_tools(&self) -> Vec<&McpToolInfo> {
|
||
|
|
self.servers.iter().flat_map(|s| s.tools.iter()).collect()
|
||
|
|
}
|
||
|
|
|
||
|
|
pub fn start_all(&mut self) -> anyhow::Result<()> {
|
||
|
|
self.running = true;
|
||
|
|
Ok(())
|
||
|
|
}
|
||
|
|
|
||
|
|
pub fn stop_all(&mut self) -> anyhow::Result<()> {
|
||
|
|
self.running = false;
|
||
|
|
Ok(())
|
||
|
|
}
|
||
|
|
}
|