Skip to main content

objectiveai_cli/command/agents/mcp/
mod.rs

1//! `agents mcp` — CLI-side dispatch for a live agent's aggregated MCP
2//! surface. Sub-groups: `resources` (`list`, `read`), `servers` (`list`),
3//! and `tools` (`call`, `list`). Each leaf does one socket round-trip to the
4//! agent's per-`response_id` MCP listener and returns the MCP result.
5
6use 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}