Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
5 changes: 5 additions & 0 deletions .changeset/mcp-cli-parity.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
---
'@smooai/smooth': minor
---

MCP→CLI parity batch: the ~35 hosted-MCP tools that had no `smoo` verb now do. New command groups `smoo analytics` (catalog / org-scoped validated query / GA4 reports), `smoo campaigns` (list / analytics / preview-first send — a real send requires `--confirm`, and per-recipient suppression stays server-side), `smoo drip` (sequences / enrollments / enroll / cancel / test-send), `smoo audiences` (list / create / members / add-members / resolve), `smoo forms`, `smoo gbp reviews`, `smoo search-console queries`, `smoo sheets snapshots`, and `smoo workforce` (bare command = the directory). Extended: `smoo files search|summarize`, `smoo heypage versions|rollback|source get|set|content get|set`, and `smoo api observability metrics list|query|attributes` + `web-vitals`. Every verb mirrors the exact route its mcp.smoo.ai twin calls, takes `--json`, reports empty results as answers, and always reports truncation.
1 change: 1 addition & 0 deletions CLAUDE.md
Original file line number Diff line number Diff line change
Expand Up @@ -95,6 +95,7 @@ smooth/
# Smoo platform — replaces every curl to api.smoo.ai (smoo == th smoo)
smoo api orgs|agents|smooth-operator|knowledge|jobs|members|config|keys|observability|profile|testing
smoo auth login|whoami|logout|profile · smoo agents|crm|config|orgs|knowledge|files|testing|branding
smoo analytics|campaigns|drip|audiences|forms|gbp|search-console|sheets|workforce # MCP-parity batch (th-739bb1…)

# White-label an org — theme + logos (logo re-hosted from a path OR a remote URL).
# `enable` is the live switch and refuses a theme that fails WCAG AA contrast.
Expand Down
72 changes: 72 additions & 0 deletions crates/smooth-cli/src/main.rs
Original file line number Diff line number Diff line change
Expand Up @@ -884,6 +884,61 @@ enum SmooCommands {
#[command(subcommand)]
cmd: smooai::crm::Cmd,
},
/// Smoo AI analytics — the catalog of queryable tables, ad-hoc SQL
/// (org-scoped, server-validated), and rendered reports. CLI twin of the
/// hosted MCP analytics_* tools.
Analytics {
#[command(subcommand)]
cmd: smooai::analytics::Cmd,
},
/// Smoo AI campaigns — list, per-campaign analytics, and (preview-first)
/// send. CLI twin of the hosted MCP campaign_* tools.
#[command(visible_alias = "campaign")]
Campaigns {
#[command(subcommand)]
cmd: smooai::campaigns::Cmd,
},
/// Smoo AI drip sequences — sequences, enrollments, test sends. CLI twin
/// of the hosted MCP drip_* tools.
Drip {
#[command(subcommand)]
cmd: smooai::drip::Cmd,
},
/// Smoo AI audiences — saved segments: list / create / members / resolve.
/// CLI twin of the hosted MCP audience_* tools.
#[command(visible_alias = "audience")]
Audiences {
#[command(subcommand)]
cmd: smooai::audiences::Cmd,
},
/// Smoo AI forms — list the org's forms and their submission counts.
#[command(visible_alias = "form")]
Forms {
#[command(subcommand)]
cmd: smooai::forms::Cmd,
},
/// Google Business Profile — reviews for the org's GBP location.
Gbp {
#[command(subcommand)]
cmd: smooai::gbp::Cmd,
},
/// Google Search Console — top queries for the org's property.
#[command(name = "search-console")]
SearchConsole {
#[command(subcommand)]
cmd: smooai::search_console::Cmd,
},
/// Smoo AI sheets — snapshots of connected spreadsheets.
#[command(visible_alias = "sheet")]
Sheets {
#[command(subcommand)]
cmd: smooai::sheets::Cmd,
},
/// Smoo AI workforce — the org's AI + human workforce directory.
Workforce {
#[command(subcommand)]
cmd: Option<smooai::workforce::Cmd>,
},
/// Smoo AI agents — list / show / create / update / delete, the
/// regenerate-* and per-agent knowledge endpoints, and `tools` (which
/// tools each agent may actually use).
Expand Down Expand Up @@ -1763,6 +1818,23 @@ async fn run_smoo(cmd: SmooCommands) -> Result<()> {
SmooCommands::Search { args } => smooai::websearch::run(args).await,
SmooCommands::Knowledge { cmd } => smooai::knowledge::cmd(cmd).await,
SmooCommands::Crm { cmd } => smooai::crm::cmd(cmd).await,
SmooCommands::Analytics { cmd } => smooai::analytics::cmd(cmd).await,
SmooCommands::Campaigns { cmd } => smooai::campaigns::cmd(cmd).await,
SmooCommands::Drip { cmd } => smooai::drip::cmd(cmd).await,
SmooCommands::Audiences { cmd } => smooai::audiences::cmd(cmd).await,
SmooCommands::Forms { cmd } => smooai::forms::cmd(cmd).await,
SmooCommands::Gbp { cmd } => smooai::gbp::cmd(cmd).await,
SmooCommands::SearchConsole { cmd } => smooai::search_console::cmd(cmd).await,
SmooCommands::Sheets { cmd } => smooai::sheets::cmd(cmd).await,
SmooCommands::Workforce { cmd } => {
// Bare `smoo workforce` reads as "show me the directory".
smooai::workforce::cmd(cmd.unwrap_or(smooai::workforce::Cmd::Directory {
view: Default::default(),
json: false,
org: None,
}))
.await
}
SmooCommands::Agents { cmd } => smooai::agents::cmd(cmd).await,
SmooCommands::Branding { cmd } => smooai::branding::cmd(cmd).await,
SmooCommands::Llm { cmd } => smooai::llm_gateway::cmd(cmd).await,
Expand Down
Loading
Loading