systemprompt-cli 0.14.2

Unified CLI for systemprompt.io AI governance: agent orchestration, MCP governance, analytics, profiles, cloud deploy, and self-hosted operations.
Documentation
use anyhow::{Context, Result};
use clap::Args;
use std::sync::Arc;

use systemprompt_agent::AgentState;
use systemprompt_agent::services::a2a_server::run_standalone;
use systemprompt_ai::AiService;
use systemprompt_loader::ConfigLoader;
use systemprompt_mcp::McpToolProvider;
use systemprompt_oauth::JwtValidationProviderImpl;
use systemprompt_runtime::AppContext;

#[derive(Debug, Clone, Args)]
pub struct RunArgs {
    #[arg(long, help = "Agent name to run")]
    pub agent_name: String,

    #[arg(long, help = "Port to listen on")]
    pub port: u16,
}

pub(super) async fn execute(args: RunArgs) -> Result<()> {
    let ctx = AppContext::new()
        .await
        .context("Failed to bootstrap AppContext for agent subprocess")?;

    let services_config = ConfigLoader::load().context("Failed to load services configuration")?;
    let profile = systemprompt_config::ProfileBootstrap::get()
        .context("Failed to access bootstrapped profile for provider registry")?;
    let db_pool = Arc::clone(ctx.db_pool());

    let jwt_provider = Arc::new(
        JwtValidationProviderImpl::from_config().context("Failed to create JWT provider")?,
    );

    let agent_state = Arc::new(AgentState::new(
        Arc::clone(&db_pool),
        Arc::new(ctx.config().clone()),
        jwt_provider,
    ));

    let tool_provider = Arc::new(McpToolProvider::new(
        Arc::clone(&db_pool),
        ctx.mcp_registry().clone(),
        &services_config.ai.mcp.resilience,
    ));
    let ai_service = Arc::new(
        AiService::new(
            &db_pool,
            &profile.providers,
            &services_config.ai,
            tool_provider,
            None,
        )
        .context("Failed to create AI service")?,
    );

    run_standalone(agent_state, ai_service, &args.agent_name, args.port)
        .await
        .context("Failed to run agent server")
}