converge_knowledge/mcp/
server.rs1use super::handlers::KnowledgeHandler;
4use crate::core::KnowledgeBase;
5use crate::error::Result;
6
7use converge_mcp::server::McpServer as GenericMcpServer;
8use std::sync::Arc;
9use tokio::sync::RwLock;
10use tracing::info;
11
12pub struct McpServer {
16 inner: GenericMcpServer<KnowledgeHandler>,
17}
18
19impl McpServer {
20 pub fn new(kb: Arc<RwLock<KnowledgeBase>>) -> Self {
22 let handler = KnowledgeHandler::new(kb);
23 Self {
24 inner: GenericMcpServer::new(handler),
25 }
26 }
27
28 pub async fn run_stdio(&self) -> Result<()> {
30 info!("Starting Knowledge MCP server on stdio");
31 self.inner
32 .run_stdio()
33 .await
34 .map_err(|e| crate::error::Error::storage(e.to_string()))
35 }
36
37 pub async fn run_http(&self, addr: &str) -> Result<()> {
39 info!("Starting Knowledge MCP HTTP server on {addr}");
40 self.inner
41 .run_http(addr)
42 .await
43 .map_err(|e| crate::error::Error::storage(e.to_string()))
44 }
45}