use std::sync::Arc;
use std::time::Duration;
use aion_mcp::protocol::meta::Implementation;
use aion_mcp::{McpServer, McpServerConfig};
use crate::config::ResolvedMcpConfig;
use crate::{ServerError, ServerState};
use super::service::AionToolService;
pub struct McpRuntime {
server: McpServer<AionToolService>,
}
impl McpRuntime {
pub fn build(state: ServerState, config: &ResolvedMcpConfig) -> Result<Self, ServerError> {
let service =
AionToolService::new(state, Duration::from_millis(config.await_poll_interval_ms))?;
let server = McpServer::new(
Arc::new(service),
McpServerConfig::new(
Implementation::new("aion", env!("CARGO_PKG_VERSION")),
config.discover_ttl_ms,
config.tools_list_ttl_ms,
config.task_ttl_ms,
config.task_poll_interval_ms,
config.allowed_origins.clone(),
),
);
Ok(Self { server })
}
pub(crate) const fn server(&self) -> &McpServer<AionToolService> {
&self.server
}
}