Skip to main content

aether_core/testing/
fake_mcp.rs

1use crate::mcp::{McpBuilder, ServerFactory};
2use futures::FutureExt;
3use mcp_utils::client::{InMemoryServerSpec, McpServer, McpTransport, ToolExposure};
4use rmcp::{RoleServer, service::DynService};
5
6pub use mcp_utils::testing::{
7    CapturedTaskUpdate, CapturedToolCall, FakeMcpServer, FakeMcpState, FakeTool, FakeToolResponse, fake_mcp,
8};
9
10pub trait McpBuilderTestExt {
11    fn with_fake_mcp(self, name: impl Into<String>, server: FakeMcpServer) -> Self;
12}
13
14impl McpBuilderTestExt for McpBuilder {
15    fn with_fake_mcp(self, name: impl Into<String>, server: FakeMcpServer) -> Self {
16        let name = name.into();
17        let factory_name = name.clone();
18        let factory: ServerFactory = Box::new(move |_spec, _services| {
19            let server = server.clone();
20            async move { Box::new(server) as Box<dyn DynService<RoleServer>> }.boxed()
21        });
22        self.register_in_memory_server(factory_name.clone(), factory).with_servers(vec![McpServer::new(
23            name,
24            McpTransport::InMemory {
25                spec: InMemoryServerSpec { factory: factory_name, args: Vec::new(), input: None },
26            },
27            ToolExposure::ModelVisible,
28        )])
29    }
30}