objectiveai_cli/command/agents/mcp/
mod.rs1use std::pin::Pin;
7
8use futures::{Stream, StreamExt};
9use objectiveai_sdk::cli::command::agents::mcp::{Request, ResponseItem};
10
11use crate::context::Context;
12use crate::error::Error;
13
14pub mod resources;
15pub mod servers;
16pub mod tools;
17
18type ItemStream = Pin<Box<dyn Stream<Item = Result<ResponseItem, Error>> + Send>>;
19
20pub async fn execute(ctx: &Context, request: Request) -> Result<ItemStream, Error> {
21 let stream: ItemStream = match request {
22 Request::Resources(req) => {
23 let inner = resources::execute(ctx, req).await?;
24 Box::pin(inner.map(|r| r.map(ResponseItem::Resources)))
25 }
26 Request::Servers(req) => {
27 let inner = servers::execute(ctx, req).await?;
28 Box::pin(inner.map(|r| r.map(ResponseItem::Servers)))
29 }
30 Request::Tools(req) => {
31 let inner = tools::execute(ctx, req).await?;
32 Box::pin(inner.map(|r| r.map(ResponseItem::Tools)))
33 }
34 };
35 Ok(stream)
36}