org_mcp_server/
core.rs

1use std::{error, sync::Arc};
2use tokio::sync::Mutex;
3
4use org_core::{Config, OrgMode};
5use rmcp::handler::server::tool::ToolRouter;
6
7pub struct OrgModeRouter {
8    pub(crate) org_mode: Arc<Mutex<OrgMode>>,
9    pub(crate) tool_router: ToolRouter<Self>,
10}
11
12impl OrgModeRouter {
13    pub fn with_config(config: Config) -> Result<Self, Box<dyn error::Error>> {
14        let org_mode = OrgMode::new(config)?;
15        Ok(Self {
16            org_mode: Arc::new(Mutex::new(org_mode)),
17            tool_router: Self::tool_router(),
18        })
19    }
20
21    pub fn with_directory(org_dir: &str) -> Result<Self, Box<dyn error::Error>> {
22        let mut config = Config::default();
23        config.org.org_directory = org_dir.to_string();
24        let config = config.validate()?;
25        Self::with_config(config)
26    }
27
28    fn tool_router() -> ToolRouter<Self> {
29        Self::tool_router_list_files() + Self::tool_router_search()
30    }
31}