aether_core/testing/
fake_mcp.rs1use 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}