aion_server/mcp/
runtime.rs1use std::sync::Arc;
4use std::time::Duration;
5
6use aion_mcp::protocol::meta::Implementation;
7use aion_mcp::{McpServer, McpServerConfig};
8
9use crate::config::ResolvedMcpConfig;
10use crate::{ServerError, ServerState};
11
12use super::service::AionToolService;
13
14pub struct McpRuntime {
16 server: McpServer<AionToolService>,
17}
18
19impl McpRuntime {
20 pub fn build(state: ServerState, config: &ResolvedMcpConfig) -> Result<Self, ServerError> {
30 let service =
31 AionToolService::new(state, Duration::from_millis(config.await_poll_interval_ms))?;
32 let server = McpServer::new(
33 Arc::new(service),
34 McpServerConfig::new(
35 Implementation::new("aion", env!("CARGO_PKG_VERSION")),
36 config.discover_ttl_ms,
37 config.tools_list_ttl_ms,
38 config.task_ttl_ms,
39 config.task_poll_interval_ms,
40 config.allowed_origins.clone(),
41 ),
42 );
43 Ok(Self { server })
44 }
45
46 pub(crate) const fn server(&self) -> &McpServer<AionToolService> {
48 &self.server
49 }
50}