Skip to content

Capabilities Reference

Capability reference

Generated from packages/core/src/lib/capabilities/catalog.ts. Do not hand-edit — run node scripts/gen-agent-docs.mjs.

Every row is one registry entry; the same entry drives the MCP tool, the /api/v1 request, the public mcp.json, the aicmo run <id> CLI dispatcher, and (where chat is a surface) the AI CMO runtime tool.

Legend — effect: read no state change · internal_write changes AICMOHQ state only · external_write posts/sends outside AICMOHQ · spend consumes credits · delete is irreversible. confirmation: approval = a human must approve before the effect lands, step_up = approval plus re-auth; the kernel enforces external_write ⇒ approval or step_up. * = required input.

Capability idMCP toolHTTP (/api/v1)ScopeEffectRiskConfirmationSurfacesInputsDescription
capabilities.listcapabilities_list— (local)nonereadlownonecli, mcp—List supported chatbot, CLI, and MCP capabilities with risk and confirmation metadata.
strategy.runstrategy_runPOST /strategy/runstrategy:runspendmediumapprovalcli, mcpkeywords, platform*Run the full strategy loop: extract git context and generate ICP-validated drafts into the queue (LinkedIn, X, Reddit).
scout.researchscoutPOST /scoutstrategy:runspendlownonechat, cli, mcpkeywordsFind marketing opportunities based on product and keywords.
writer.generatewritePOST /writestrategy:runspendmediumapprovalchat, cli, mcpplatform*, from_git, topic, enqueueDraft content from a topic or from recent git commits. Set enqueue=true to put the draft in the queue for LinkedIn/X publish.
docs.searchdocs_search— (local)nonereadlownonecli, mcpquery*, limitSearch tool docs: find which tool to call and its parameters. Pass a tool name for its full input schema. Local, read-only; no auth required.
connection.statusconnection_status— (local)nonereadlownonemcp—Auto-detect this MCP connection: whether a token is configured and valid, which API it targets, which platforms are connected, and the projects (products) reachable with it. One connection covers every project.
credits.costscredit_costs— (local)nonereadlownonecli, mcp—List the credit cost of each AICMOHQ agent action. Local, read-only; no auth required.
agents.listagents_listGET /agentsstrategy:runreadlownonecli, mcp—List the six marketed agents (Ved, Shravan, Chanakya, Kavi, Mitra, Agni) with their charter and live status: effective approval mode and drafts awaiting review.
agents.statusagents_statusGET /agents/{id}strategy:runreadlownonecli, mcpid*Read one marketed agent’s charter and live status (mode, pending approvals).
agents.runagents_runPOST /agents/{id}/runstrategy:runspendmediumapprovalcli, mcpid*, platform, keywords, topicRun one marketed agent’s entry capability now (Ved geo scan, Shravan mention scan, Chanakya strategy draft, Kavi draft, Mitra reply sweep, Agni autopilot cycle). Entry capabilities never publish externally — external_write/delete are refused — but may spend credits or write internal state (Agni’s autopilot cycle). Requires strategy:run plus the entry capability’s own scope (geo:run for Ved, autopilot:run for Agni; Shravan, Chanakya, Kavi, and Mitra entries already use strategy:run). Extra fields pass through as the entry capability’s input (e.g. platform, keywords, topic).
connections.listconnections_listGET /connectionsconnections:readreadlownonecli, mcp—List connected platforms (check LinkedIn before publishing).
queue.listqueue_listGET /queue?status={status}queue:readreadlownonecli, mcpstatusList content queue items for the authenticated AICMOHQ account.
queue.getqueue_getGET /queue/{id}queue:readreadlownonecli, mcpid*Fetch one content queue item by id.
queue.deletequeue_deleteDELETE /queue/{id}queue:writedeletemediumapprovalcli, mcpid*Permanently delete a queued draft.
queue.updatequeue_updatePATCH /queue/{id}queue:writeinternal_writelownonecli, mcpid*, content*Update the content of a queued draft.
queue.approvequeue_approvePOST /queue/{id}/approvequeue:writeinternal_writemediumstep_upcli, mcpid*Approve a draft queue item so it can be published. Human-only: the API rejects CLI/MCP tokens.
queue.publishqueue_publishPOST /queue/{id}/publishpublishexternal_writehighapprovalcli, mcpid*Publish an approved queue item (requires platform connection, e.g. LinkedIn).
queue.rejectqueue_rejectPATCH /queue/{id}queue:writeinternal_writelownonecli, mcpid*Reject a draft so it will not publish.
queue.best_timequeue_best_timeGET /queue/best-time?platform={platform}&tz={tz}queue:readreadlownonecli, mcpplatform*, tzSuggest the best publish time for a platform — the workspace’s measured engagement history when available, else the platform’s researched golden-hour window. Advisory only; scheduling still goes through queue_schedule.
queue.schedulequeue_schedulePATCH /queue/{id}queue:writeinternal_writemediumapprovalcli, mcpid*, scheduled_for*Schedule an approved queue item for cron publish (ISO timestamp).
queue.proofqueue_proofPOST /queue/{id}/proofqueue:writeinternal_writelownonecli, mcpid*, proofUrl*Save a live post URL for Hacker News or Product Hunt (no API). Then call queue_publish to mark the item published.
reddit.statusreddit_statusGET /reddit/statusconnections:readreadlownonecli, mcp—Inspect the connected Reddit account’s conservative warm-up stage and engagement limits.
reddit.warmupreddit_warmupPOST /reddit/warmupstrategy:runspendlownonechat, cli, mcpkeywords, subreddits, limit, productIdUse the connected Reddit OAuth account to find value-first threads. Saves opportunities only; never comments or publishes.
command.chatcommand_chatPOST /command/chatstrategy:runinternal_writelownonecli, mcpmessage*, sessionId, agentIdSend a natural-language mission to AICMOHQ Agent. Persists session memory and returns a proposed plan (approval-first; does not publish). When the response includes a plan, executionPolicy tells you the next step: call command_run with message.id to execute (auto=true only when auto_run_eligible), or command_status with runId to inspect a running one.
command.sessionscommand_sessionsGET /command/sessions?limit=20strategy:runreadlownonecli, mcplimitList recent AICMOHQ Agent chat sessions (shared memory with dashboard + CLI).
command.runcommand_runPOST /command/runstrategy:runinternal_writemediumapprovalcli, mcpmessageId*, autoExecute a proposed command plan by assistant message id. Rejects auto=true when approval is required. Streams NDJSON progress.
command.statuscommand_statusGET /command/run/{runId}strategy:runreadlownonecli, mcprunId*Inspect a durable command run and its approval-gated steps.
command.approve_stepcommand_approve_stepPOST /command/run/{runId}strategy:runinternal_writemediumapprovalcli, mcprunId*, stepId*Approve one bound CMO step so execution resumes (expires in 15 minutes).
workspace.contextworkspace_contextGET /workspace/contextstrategy:runreadlownonecli, mcp—Read the workspace strategy context (product, ICPs, positioning, brand voice) agents ground drafts on.
workspace.getworkspace_getGET /workspacestrategy:runreadlownonecli, mcp—Read the raw workspace record (company profile, positioning, ICPs) the agents ground on.
products.listproducts_listGET /productsstrategy:runreadlownonecli, mcp—List the products in the workspace. Most agent work needs a product_id from here first.
products.createproducts_createPOST /productsworkspace:writeinternal_writelownonecli, mcpname*, description, url, target_audience, competitorsAdd a product to the workspace so scans and drafts can be scoped to it.
products.updateproducts_updatePUT /products/{id}workspace:writeinternal_writelownonecli, mcpid*, name, tagline, description, urlUpdate a product’s name, tagline, description, or url.
products.archiveproducts_archiveDELETE /products/{id}workspace:writedeletemediumapprovalcli, mcpid*Delete a product. Its past artifacts stay, but new work can no longer target it.
artifacts.listartifacts_listGET /artifactsstrategy:runreadlownonecli, mcp—List agent artifacts (research briefs, drafts, reports) produced for this workspace.
listening.listlistening_listGET /listeningstrategy:runreadlownonecli, mcp—List captured listening mentions — places the product or its category was discussed.
listening.scanlistening_scanPOST /listening/scanstrategy:runspendlownonecli, mcpproduct_id, limitRun a listening scan for new mentions of the product. Costs credits.
signals.scansignals_scanPOST /signals/scanstrategy:runinternal_writelownonecli, mcpquery*, perSourceSearch external sources for demand signals matching a query.
trends.listtrends_listGET /trends?range={range}nonereadlownonecli, mcprangeRead trending topics for the day or week to ground timely content.
opportunities.listopportunities_listGET /opportunitiesstrategy:runreadlownonecli, mcp—List scored growth opportunities derived from listening and signals.
opportunities.draftopportunities_draftPOST /opportunities/{id}/draftstrategy:runspendlownonecli, mcpid*Draft content for an opportunity. Costs credits; the draft still needs human approval to publish.
opportunities.queueopportunities_queuePOST /opportunities/{id}/queuequeue:writeinternal_writelownonecli, mcpid*Move an opportunity’s draft into the content queue as a pending item.
geo.statusgeo_statusGET /geostrategy:runreadlownonecli, mcp—Read current GEO (AI-citation) status: which AI answers mention the product.
geo.scangeo_scanPOST /geo/scangeo:runspendlownonecli, mcpproduct_idRun a GEO scan to check whether AI assistants cite the product. Costs credits.
geo.checklistgeo_checklistGET /geo/checkliststrategy:runreadlownonecli, mcp—Read the GEO readiness checklist (signal, status) plus which sources already cite the product.
geo.competitorsgeo_competitorsGET /geo/competitorsstrategy:runreadlownonecli, mcp—List competitor citation share and latest GEO visibility data.
geo.uncitedgeo_uncitedGET /geo/uncitedstrategy:runreadlownonecli, mcp—List high-value GEO queries where the product is not cited.
echo.mentionsecho_mentionsGET /echo/mentionsanalytics:readreadlownonecli, mcp—List tracked brand and competitor mentions.
echo.scanecho_scanPOST /echo/scanstrategy:runspendmediumapprovalcli, mcp—Scan tracked sources for brand and competitor mentions.
listening.scorelistening_score— (local)nonereadlownonecli, mcpmentions, threshold, brand_terms, category_termsScore a mention feed for relevance, buying intent, and sentiment. Omit mentions to score the built-in demo. Local and read-only; nothing is sent or published.
listening.alert_previewlistening_alert_preview— (local)nonereadlownonecli, mcpkindPreview the email and Slack payload for a spike or high-intent alert. Local and read-only; never sends notifications.
listening.listenerslistening_listeners— (local)nonereadlownonecli, mcpaction, expression, negative, text, id, nameBoolean keyword listeners with negative keywords. Actions: list, add, remove, match.
listening.sovlistening_sov— (local)nonereadlownonecli, mcpmentionsBrand versus competitor mention counts for a weekly share-of-voice snapshot.
engage.high_intent_draftengage_high_intent_draft— (local)nonereadlownonecli, mcptext, brand, sourceTurn a high-intent mention into a Mitra reply draft for the approval queue. Returns the draft payload only. Nothing is sent.
geo.citationsgeo_citations— (local)nonereadlownonecli, mcpmode, prompts, brand, competitorsCitation check for a saved prompt set. The demo uses fixtures for ChatGPT, Perplexity, and Gemini. Other engines are stubs. mode=live uses configured API keys and does not invent results.
geo.gap_draftgeo_gap_draft— (local)nonereadlownonecli, mcpquery, brand, kind, missed_enginesBuild an FAQ, schema JSON-LD, or short outline for a citation miss. The result is a draft. Nothing is published.
geo.promptsgeo_prompts— (local)nonereadlownonecli, mcpaction, query, id, category, gsc_queries, activePrompt library for a category, with optional question-shaped Search Console queries. Actions: list, seed, add, update, remove, scan. Scan uses fixtures unless you run a live GEO scan.
geo.crawler_auditgeo_crawler_audit— (local)nonereadlownonecli, mcprobots_txtReport whether robots.txt allows GPTBot, ClaudeBot, PerplexityBot, and Google-Extended. Does not edit the file.
engage.reply_draftsengage_reply_draftsGET /engage/reply-draftsqueue:readreadlownonecli, mcp—List Mitra’s pending reply drafts — answers to new comments on your published posts and to negative brand mentions, waiting in the queue for approval.
engage.scanengage_scanPOST /engage/scanstrategy:runspendmediumapprovalcli, mcp—Run Mitra’s engagement sweep for your workspace: drafts replies to new comments on your published posts and answers negative brand mentions. Everything lands as queue drafts for approval — nothing posts.
voice.getvoice_getGET /settings/voicestrategy:runreadlownonecli, mcp—Read canonical workspace brand voice.
voice.setvoice_setPUT /settings/voicesettings:writeinternal_writemediumapprovalcli, mcpvoice, guidelines, revisionUpdate canonical workspace brand voice with optimistic revision control.
audience.importaudience_importPOST /audience/importworkspace:writeinternal_writemediumapprovalcli, mcpcsv*, consentSource*, source, enrollImport subscribers from CSV with a required consent source.
recommendations.listrecommendations_listGET /recommendationsstrategy:runreadlownonecli, mcp—List the CMO’s current recommendations for the workspace.
recommendations.generaterecommendations_generatePOST /recommendationsstrategy:runinternal_writelownonecli, mcp—Regenerate the recommendation set from the latest workspace data.
recommendations.deciderecommendations_decidePATCH /recommendations/{id}strategy:runinternal_writelownonecli, mcpid*, action*Accept or dismiss one recommendation. Accepting is what changes prioritization.
campaigns.listcampaigns_listGET /campaignsstrategy:runreadlownonecli, mcp—List campaigns (multi-step marketing graphs) in the workspace.
campaigns.createcampaigns_createPOST /campaignscampaigns:writeinternal_writelownonecli, mcpname*, graphCreate a campaign. Pass a node/edge graph to define its steps, or omit it for an empty draft.
campaigns.getcampaigns_getGET /campaigns/{id}strategy:runreadlownonecli, mcpid*Read one campaign including its full step graph.
campaigns.updatecampaigns_updatePATCH /campaigns/{id}campaigns:writeinternal_writelownonecli, mcpid*, name, status, graphUpdate a campaign’s name, status (draft/active/archived), or step graph.
campaigns.archivecampaigns_archiveDELETE /campaigns/{id}campaigns:writedeletemediumapprovalcli, mcpid*Delete a campaign.
workflows.startworkflows_startPOST /workflows/startstrategy:runspendlownonecli, mcpkind*, product_id*, limit, countStart a background workflow (e.g. reddit_scan, hn_scan, content drafts) for a product. Costs credits.
workflows.executeworkflows_executePOST /workflows/executestrategy:runspendlownonecli, mcpworkflowType*, inputExecute a named workflow synchronously with a small input map. Costs credits.
workflows.statusworkflows_statusGET /workflows/{id}strategy:runreadlownonecli, mcpid*Read a running workflow’s status and step results.
tasks.listtasks_listGET /tasks?status={status}&agent_id={agent_id}strategy:runreadlownonecli, mcpstatus, agent_idList agent tasks, optionally filtered by status or agent.
tasks.createtasks_createPOST /tasksstrategy:runinternal_writelownonecli, mcpagent_id*, type*, inputQueue a task for one of the agents (scout, writer, publisher, engage, analyst).
tasks.gettasks_getGET /tasks/{id}strategy:runreadlownonecli, mcpid*Read one task with its input, result, and error.
tasks.updatetasks_updatePATCH /tasks/{id}strategy:runinternal_writelownonecli, mcpid*, status, result, errorUpdate a task’s status, result, or error.
tasks.approvetasks_approvePOST /tasks/{id}/approvestrategy:runinternal_writemediumapprovalcli, mcpid*Approve a task that is waiting for a human decision. Never approve your own work.
tasks.executetasks_executePOST /tasks/{id}/executestrategy:runinternal_writemediumapprovalcli, mcpid*Run an approved task now instead of waiting for the scheduler.
approvals.listapprovals_listGET /approvalsqueue:readreadlownonecli, mcp—List items waiting for a human approval decision.
approvals.approveapprovals_approvePOST /approvals/{id}/approvepublishexternal_writehighstep_upcli, mcpid*Record a human approval, which releases the item to publish. Agents must not call this on their own drafts.
approvals.rejectapprovals_rejectPOST /approvals/{id}/rejectqueue:writeinternal_writemediumapprovalcli, mcpid*Reject a pending approval so the item is never published.
launch.preparelaunch_preparePOST /agents/launchstrategy:runinternal_writelownonecli, mcpproductIdPrepare launch assets (Product Hunt / Hacker News copy) for a product. Submission stays human-assisted.
listings.listlistings_listGET /listingsstrategy:runreadlownonecli, mcp—List directory launch listings (Product Hunt, Hacker News, directories) tracked for the workspace.
listings.createlistings_createPOST /listingsworkspace:writeinternal_writelownonecli, mcpname*, url, status, notesTrack a new directory launch listing. Records intent only; submission stays human-assisted.
listings.updatelistings_updatePATCH /listings/{id}workspace:writeinternal_writelownonecli, mcpid*, name, url, status, notesUpdate a tracked launch listing (status, URL, notes).
listings.archivelistings_archiveDELETE /listings/{id}workspace:writedeletemediumapprovalcli, mcpid*Remove a tracked launch listing.
prospects.scanprospects_scanPOST /prospect/scanstrategy:runspendlownonecli, mcpsources, keywordsScan for prospects matching the workspace ICP. Costs credits.
inbox.listinbox_listGET /inboxstrategy:runreadlownonecli, mcp—List inbox conversations with prospects across email and DMs.
inbox.getinbox_getGET /inbox/{contactId}strategy:runreadlownonecli, mcpcontactId*Read one contact’s full inbox thread.
outreach.draftoutreach_draftPOST /inbox/sendoutreach:writeinternal_writelownonecli, mcpcontactId*, channel*, subject, body*Draft an outreach message to a contact and queue it for human approval. Nothing is sent — approve and publish the queued item to actually deliver it.
crm.synccrm_syncPOST /integrations/hubspot/syncoutreach:writeexternal_writehighapprovalcli, mcpcontactIdPush a contact to the connected HubSpot CRM. Writes to an external system, so it needs approval.
analytics.overviewanalytics_overviewGET /analytics/overview?days=30analytics:readreadlownonecli, mcpdaysRead aggregate performance over the last N days: totals per metric, per platform, and queue status.
analytics.attributionanalytics_attributionGET /analytics/attributionanalytics:readreadlownonecli, mcp—Read attribution: which content and channels drove signups.
analytics.pagespeedanalytics_pagespeedGET /analytics/pagespeed?url={url}analytics:readreadlownonecli, mcpurl*Run a PageSpeed check on a public url and return its performance scores.
analytics.reportanalytics_reportGET /analytics/report?days=7analytics:readreadlownonecli, mcpdaysRead the rolled-up performance report for the last N days (default 7).
analytics.benchmarksanalytics_benchmarksGET /analytics/benchmarks?platform={platform}&days=30&industry={industry}&campaign_type={campaign_type}&objective={objective}&country={country}analytics:readreadlownonecli, mcpplatform*, industry, campaign_type, objective, country, daysRead ad benchmarks (beta): your CTR/CPC/CPA against the anonymized pool for a platform, optionally narrowed by industry, campaign type, objective and country. Returns status not_enough_data, with no numbers, until the pool has enough real contributors.
feed.listfeed_listGET /feedstrategy:runreadlownonecli, mcp—Read the agent activity feed — what the agents did and what needs attention.
feed.updatefeed_updatePATCH /feed/{id}strategy:runinternal_writelownonecli, mcpid*Mark one feed item as read or acted on.
ga4.pullga4_pullGET /integrations/ga4analytics:readreadlownonecli, mcp—Pull the latest metrics from the connected GA4 property.
github.reposgithub_reposGET /integrations/github/reposconnections:readreadlownonecli, mcp—List repos visible through the connected GitHub account, for shipping-log content.
connections.healthconnections_healthGET /integrations/healthconnections:readreadlownonecli, mcp—Check each connected platform’s token health before trying to publish.
agent_mode.getagent_mode_getGET /settings/agent-modestrategy:runreadlownoneui, cli, mcp—Read the publishing mode (approve or autonomous) plus any per-agent overrides.
agent_mode.setagent_mode_setPUT /settings/agent-modesettings:writeinternal_writehighstep_upui, cli, mcpglobal_mode, orchestrate_enabled, overridesChange the publishing mode. Switching to autonomous removes the human approval gate, so it needs a human.
email_prefs.getemail_prefs_getGET /settings/email-preferencesstrategy:runreadlownonecli, mcp—Read the account email preferences: onboarding emails and the daily brief.
email_prefs.setemail_prefs_setPUT /settings/email-preferencessettings:writeinternal_writemediumstep_upcli, mcponboarding_enabled, brief_enabledChange account email preferences. Agents may only opt OUT (false); opting in is consent and needs a human in the dashboard.
billing.statusbilling_statusGET /billing/statusbilling:readreadlownonecli, mcp—Read the active plan, credit balance, and renewal date.
me.getme_getGET /mebilling:readreadlownonecli, mcp—Read the authenticated identity: user id, token type, and granted scopes.
audience.listaudience_listGET /audience?status={status}&segment={segment}strategy:runreadlownonecli, mcpstatus, segmentList the email marketing audience for the workspace, with status and segment filters.
audience.createaudience_createPOST /audienceworkspace:writeinternal_writelownonecli, mcpemail*, consentSource, source, segmentsAdd one subscriber to the email audience. A consent source is recorded for compliance (defaults to manual).
brief.getbrief_getGET /briefqueue:readreadlownonecli, mcp—Read the most recent stored daily brief: yesterday’s shipped items, engagement, pending actions, and alerts.
creative.plancreative_planPOST /creative/runscreative:runspendmediumapprovalui, cli, mcpmode, prompt, productUrl, productName, productId, feature, aspectDerive a video storyboard: a launch video from productUrl (screen capture), or with mode “motion” a motion-graphics video from a prompt. Creates an approval; does not render or publish.
creative.rendercreative_renderPOST /creative/runs/{runId}/rendercreative:runspendmediumapprovalui, cli, mcprunId*Start rendering an approved storyboard. Heavy work runs on the media worker.
creative.statuscreative_statusGET /creative/runs/{runId}creative:readreadlownoneui, cli, mcprunId*Read a creative run, its stages, and signed preview URLs.
creative.reviewcreative_reviewGET /creative/runs/{runId}/reviewcreative:readreadlownoneui, cli, mcprunId*Read the storyboard awaiting approval for a run.
creative.assetscreative_assetsGET /creative/runs/{runId}/assetscreative:readreadlownoneui, cli, mcprunId*List signed output assets for a completed creative run.
creative.cancelcreative_cancelPOST /creative/runs/{runId}/cancelcreative:runinternal_writelownoneui, cli, mcprunId*Cancel a creative run and refund unstarted stages.
creative.queuecreative_queuePOST /creative/runs/{runId}/queuequeue:writeinternal_writemediumapprovalui, cli, mcprunId*, platformsCreate content_queue drafts from a completed creative run. Does not publish.
creative.modelscreative_modelsGET /creative/modelscreative:readreadlownoneui, cli, mcp—List the active Creative Studio generation models with their credit cost per billing unit.
creative.generatecreative_generatePOST /creative/generatecreative:runspendmediumapprovalui, cli, mcpprompt*, modelId*, kind, mode, duration, imageUrl, videoUrl, referenceUrls, targetPlatform, audio, slides, aspectRatioGenerate a Creative Studio image, video or carousel (pass slides 2-6 for a carousel — one render per slide, poll creative_job to see slides land). Debits credits and drafts the result into the content queue for approval; never publishes.
ugc.batchugc_batchPOST /ugc/batchcreative:runspendhighapprovalui, cli, mcpmodelId*, count*, durationSec, aspect, productId, productUrl, formats, targetPlatform, audio, consent*, batchIdGenerate a batch of UGC-style creator ad videos — one keyed job per deterministic hook angle. Whole-batch quota is reserved before any spend; per-angle failures return as data. Results land in the review gallery; never publishes.
ugc.batch_preflightugc_batch_preflightGET /ugc/batch/preflight?modelId={modelId}&count={count}&durationSec={durationSec}&productId={productId}&productUrl={productUrl}&platforms={platforms}&consent={consent}creative:readreadlownoneui, cli, mcpmodelId, count, durationSec, productId, productUrl, platforms, consentRead-only readiness check for a UGC batch: engine key, model, quota, credits, consent, product context and platform connections. Returns fixable blockers plus the server-computed credit total.
ugc.performanceugc_performanceGET /ugc/performanceanalytics:readreadlownoneui, cli, mcp—Rank UGC batch hook angles by attributed revenue (GA4 first-touch). Hooks without pulled metrics report null — never a fabricated zero.
ugc.scaleugc_scalePOST /ugc/scalecampaigns:writeexternal_writehighapprovalcli, mcphookId, jobId, platform*, dailyBudget, destinationUrl, dryRun, proposalHand a proven UGC hook to the paid lane — resolves the winning video and creates an ads.launch (creative_url = the video). Lands pending_approval or paused exactly like any launch.
creative.gallerycreative_galleryGET /creative/gallery?kind={kind}&status={status}&cursor={cursor}&limit={limit}creative:readreadlownoneui, cli, mcpkind, status, cursor, limitList Creative Studio generation jobs with signed output URLs, newest first.
creative.jobcreative_jobGET /creative/jobs/{jobId}creative:readreadlownoneui, cli, mcpjobId*Read one Creative Studio generation job and its signed output URL. Carousels list per-slide media_urls, filling toward slides while rendering.
creative.abortcreative_abortPOST /creative/jobs/{jobId}/abortcreative:runinternal_writelownoneui, cli, mcpjobId*Abort an in-flight Creative Studio generation job; credits are refunded when the provider had not yet spent them.
creative.revisecreative_revisePOST /creative/runs/{runId}/revisecreative:runspendmediumapprovalui, cli, mcprunId*, noteOpen a new storyboard revision that supersedes a previous run. Does not render or publish.
creative.variantscreative_variantsPOST /creative/runs/{runId}/variantscreative:runspendmediumapprovalui, cli, mcprunId*, sceneId*, countCreate up to 5 A/B copy variants of one motion scene as sibling runs, each needing its own approval. Does not render or publish.
creative.compositions_getcreative_compositions_getGET /creative/runs/{runId}/compositionscreative:readreadlownonecli, mcprunId*Read the latest motion composition (template, variables, version) for each scene of a creative run.
creative.compositions_setcreative_compositions_setPOST /creative/runs/{runId}/compositionscreative:runspendmediumapprovalcli, mcprunId*, sceneId*, templateId, variables, mode, engine, instructionEdit one motion scene: set template variables, or mode=freeform with an engine and instruction (LLM-written code, billed). Writes a new version and a fresh storyboard approval; nothing renders until a human approves.
creative.storyboard_editcreative_storyboard_editPOST /creative/runs/{runId}/storyboardcreative:runinternal_writemediumapprovalcli, mcprunId*, ops*Edit a run’s timeline with 1-20 ordered ops: reorder, trim, remove, add_upload, add_template. Free; the result needs a fresh storyboard approval before it renders.
scheduled_tasks.listscheduled_tasks_listGET /scheduled-tasksqueue:readreadlownonecli, mcp—List scheduled tasks (recurring agent prompts) and their recent runs.
scheduled_tasks.createscheduled_tasks_createPOST /scheduled-tasksworkspace:writeinternal_writemediumapprovalcli, mcptitle*, prompt, cadence, kind, product_idCreate a scheduled task: a prompt the agent runs on a cadence. Each run spends credits unattended.
scheduled_tasks.updatescheduled_tasks_updatePATCH /scheduled-tasks/{id}workspace:writeinternal_writemediumapprovalcli, mcpid*, title, prompt, cadence, statusUpdate a scheduled task’s title, prompt, cadence or status (pause/resume).
scheduled_tasks.deletescheduled_tasks_deleteDELETE /scheduled-tasks/{id}workspace:writedeletemediumapprovalcli, mcpid*Permanently delete a scheduled task.
scheduled_tasks.runscheduled_tasks_runPOST /scheduled-tasks/{id}/runworkspace:writespendmediumapprovalcli, mcpid*Run a scheduled task now. Spends credits; does not move its schedule.
strategy.docs_getstrategy_docs_getGET /strategy-docs?product_id={product_id}strategy:runreadlownonecli, mcpproduct_idRead the saved strategy documents and plan for a product (defaults to the primary product).
strategy.docs_savestrategy_docs_savePOST /strategy-docsstrategy:runspendmediumapprovalcli, mcpproduct_idGenerate the strategy documents for a product and save them. Spends credits.
adlib.searchadlib_searchPOST /command/chatdiscovery:runspendlowapprovalchat, cli, mcpquery, platforms, country, limitAgni AdKit: Collect competitor ads from the public ad libraries (Meta/Google/LinkedIn/TikTok/X) for a query, persist them, and return the scored page. Costs ad_library_scan credits; a live scan can take 15-40s. Proposes a command plan; execute only after human approval.
adlib.browseadlib_browseGET /ad-library?q={q}&platform={platform}&competitor={competitor}&tier={tier}&board={board}&sort={sort}&limit={limit}&offset={offset}&min_runtime_days={min_runtime_days}&min_score={min_score}&saved_only=1&active_only=1discovery:readreadlownonechat, cli, mcpq, platform, competitor, tier, board, saved_only, min_runtime_days, min_score, active_only, sort, limit, offsetAgni AdKit: Browse ads already stored in the workspace’s ad library. Sort by score for Ad Score (beta). Tiers are high_conf | winner | emerging | loser.
adlib.get_adadlib_get_adGET /ad-library/{ad_id}discovery:readreadlownonechat, cli, mcpad_id*Agni AdKit: Read one stored ad by its ad_id.
adlib.get_scoreadlib_get_scoreGET /ad-library/{ad_id}/scorediscovery:readreadlownonechat, cli, mcpad_id*Agni AdKit: Read Ad Score (beta) for one ad: overall 0-100 plus a transparent breakdown (run duration, variants, creative reuse, still active).
adlib.list_assetsadlib_list_assetsGET /ad-library/assetsdiscovery:readreadlownonechat, cli, mcpmin_reuse, limitAgni AdKit: List creative assets in the workspace ranked by reuse count (how many ads share the same primary creative).
adlib.savedadlib_savedGET /ad-library/saved?board={board}&platform={platform}&media_type={media_type}&delivery_status={delivery_status}discovery:readreadlownonechat, cli, mcpboard, limit, platform, media_type, delivery_status, min_spend, max_spendAgni AdKit: List saved ads with per-board counts and swipe-file filters.
adlib.boardsadlib_boardsGET /ad-library/boardsdiscovery:readreadlownonechat, cli, mcp—Agni AdKit: List swipe-file boards with save counts and public-share metadata.
adlib.create_boardadlib_create_boardPOST /command/chatdiscovery:runinternal_writelowapprovalchat, cli, mcpname*Agni AdKit: Create a named swipe-file board. Proposes a command plan; execute only after human approval.
adlib.set_board_publicadlib_set_board_publicPOST /command/chatdiscovery:runinternal_writelowapprovalchat, cli, mcpboard*, is_public*Agni AdKit: Enable or disable a read-only public link for a swipe-file board. Proposes a command plan; execute only after human approval.
adlib.save_adadlib_save_adPOST /command/chatdiscovery:runinternal_writelowapprovalchat, cli, mcpad_id*, board, noteAgni AdKit: Save an ad to a swipe-file board (Unsorted when omitted). Proposes a command plan; execute only after human approval.
adlib.unsave_adadlib_unsave_adPOST /command/chatdiscovery:runinternal_writelowapprovalchat, cli, mcpad_id*, boardAgni AdKit: Remove an ad from a board (default board when omitted). Proposes a command plan; execute only after human approval.
adlib.alertsadlib_alertsGET /ad-library/alerts?unread_only=truediscovery:readreadlownonechat, cli, mcpunread_only, limitAgni AdKit: Competitor ads seen for the first time — the launch-alert feed.
adlib.ack_alertsadlib_ack_alertsPOST /command/chatdiscovery:runinternal_writelowapprovalchat, cli, mcpad_idsAgni AdKit: Mark launch alerts read. Omit ad_ids to acknowledge everything unread. Proposes a command plan; execute only after human approval.
adlib.competitorsadlib_competitorsGET /ad-library/competitors?product_id={product_id}discovery:readreadlownonechat, cli, mcpproduct_idAgni AdKit: List the competitor watchlist merged with advertisers already seen in the library.
adlib.track_competitoradlib_track_competitorPOST /command/chatdiscovery:runinternal_writelowapprovalchat, cli, mcpname*, platform, domain, product_idAgni AdKit: Add a competitor name to the watchlist (idempotent). Proposes a command plan; execute only after human approval.
adlib.untrack_competitoradlib_untrack_competitorPOST /command/chatdiscovery:runinternal_writelowapprovalchat, cli, mcpname*, product_idAgni AdKit: Remove a competitor from the watchlist. Proposes a command plan; execute only after human approval.
adlib.sync_competitoradlib_sync_competitorPOST /command/chatdiscovery:runspendlowapprovalchat, cli, mcpname*, platform, domain, country, limitAgni AdKit: Track a competitor and refresh-pull its live ads now. Costs ad_library_scan credits; new ads raise alerts. Proposes a command plan; execute only after human approval.
adlib.cloneadlib_clonePOST /command/chatdiscovery:runinternal_writelowapprovalchat, cli, mcpad_id*, generate, variants, aspect_ratioAgni AdKit: Remix an ad’s hook into 3 deterministic variants for your own creatives. Proposes a command plan; execute only after human approval.
ads.launchads_launchPOST /command/chatcampaigns:writeexternal_writehighapprovalchat, cli, mcpplatform*, account_id, ad_id, name, hook, body, cta, creative_url, persona, daily_budget, draft_copy, dry_runAgni AdKit: Plan (dry_run=true, default) or execute an ad launch. Execution is policy-gated: winner score >= 60 creates a paused campaign draft, below that it lands pending_approval for human sign-off — nothing ever goes live directly. Proposes a command plan; execute only after human approval.
ads.launchesads_launchesGET /ads/launches?status={status}analytics:readreadlownonechat, cli, mcpstatus, limitAgni AdKit: List launched/paused/pending ad campaigns in the workspace.
ads.getads_getGET /ads/launches/{id}analytics:readreadlownonechat, cli, mcpid*Agni AdKit: Read one ad launch by id.
ads.manageads_managePOST /command/chatcampaigns:writeexternal_writehighapprovalchat, cli, mcpid*, action, daily_budgetAgni AdKit: Manage one launch: action approve|activate|pause|archive (approve pending_approval -> paused; activate paused -> active; pause active -> paused; archive any -> archived) and/or set daily_budget. Proposes a command plan; execute only after human approval.
ads.performanceads_performanceGET /ads/launches/{id}/performanceanalytics:readreadlownonechat, cli, mcpid*Agni AdKit: Performance for one launch: spend, impressions, clicks, conversions, CTR, CPA, ROAS. synced:false + zeros until a platform metrics sync has written data.
autopilot.statusautopilot_statusGET /autopilot/statusautopilot:readreadlownonecli, mcp—Autopilot rollup: active loops, cycles run, pending proposals, learnings this week, plus every loop’s last-run state.
autopilot.learningsautopilot_learningsGET /autopilot/learnings?channel={channel}&kind={kind}&limit={limit}autopilot:readreadlownonecli, mcpchannel, kind, limitThe readable learning files the loops append to each run — winner/miss/audit/digest lessons per channel with the rows that earned them.
autopilot.runautopilot_runPOST /autopilot/runautopilot:runinternal_writelownonecli, mcploopRun one autopilot cycle now (or the weekly audit with loop=audit). Deterministic — grades signals, writes learnings, proposes actions. No credits; proposals still need approval.
autopilot.actionsautopilot_actionsGET /autopilot/actions?status={status}autopilot:readreadlownonecli, mcpstatusList autopilot proposals — pending ones awaiting a decision, or applied/dismissed history.
autopilot.decideautopilot_decidePOST /autopilot/actionsautopilot:writeexternal_writehighapprovalcli, mcpid*, decision*Decide one autopilot proposal: apply executes it (scale budget / pause launch / pause loop), dismiss closes it without side effects.
advocacy.listadvocates_listGET /advocates?status={status}advocacy:readreadlownonecli, mcpstatusAdvocate leaderboard: repeat positive engagers scored on reach(momentum), loyalty, content and amplification, tiered micro_influencer/loyal_customer/ugc_creator/advocate.
advocacy.outreachadvocates_outreachGET /advocates/{id}/outreachadvocacy:readreadlownonecli, mcpid*Ready-to-send DM template for one advocate, worded per tier (micro-influencer affiliate offer, loyal-customer early access, UGC feature request).
advocacy.set_statusadvocates_set_statusPATCH /advocatesadvocacy:writeinternal_writelownonecli, mcpid*, status*Mark an advocate contacted / partner / dismissed once you’ve reached out.
sentiment.seriessentiment_seriesGET /sentiment?days={days}sentiment:readreadlownonecli, mcpdaysDaily per-platform sentiment rollup (positive/neutral/negative %) plus live anomalies vs the 7-day baseline — the crisis early-warning feed.
adlib.top_spendadlib_top_spendPOST /command/chatdiscovery:readreadlownonechat, cli, mcpcompetitor, platform, min_score, limitAgni AdKit: Find top stored ads ranked by estimated library spend; missing spend stays unknown.
adlib.weekly_digestadlib_weekly_digestPOST /command/chatdiscovery:readreadlownonechat, cli, mcp—Agni AdKit: Read the last seven days of competitor ad activity without sending email.
adlib.monitoringadlib_monitoringPOST /command/chatdiscovery:readreadlownonechat, cli, mcp—Agni AdKit: Read weekly digest and monitoring preferences.
adlib.set_digestadlib_set_digestPOST /command/chatdiscovery:runinternal_writelowapprovalchat, cli, mcpweekly_digest_enabled*Agni AdKit: Enable or disable the existing weekly competitor digest. Proposes a command plan; execute only after human approval.
adlib.create_alert_ruleadlib_create_alert_rulePOST /command/chatdiscovery:runinternal_writelowapprovalchat, cli, mcpkind*, competitor_name, min_scoreAgni AdKit: Create a competitor, new-ad, or score-threshold monitoring rule. Proposes a command plan; execute only after human approval.
ads.benchmarksads_benchmarksPOST /command/chatanalytics:readreadlownonechat, cli, mcpplatform, industry, campaign_type, objective, country, daysAgni AdKit: Read anonymized ad benchmarks with the existing contributor privacy floor.
ads.reportads_reportPOST /command/chatanalytics:readreadlownonechat, cli, mcpdaysAgni AdKit: Read ad spend and performance by platform and project.

Scopes

ScopeCapabilities
advocacy:readadvocacy.list, advocacy.outreach
advocacy:writeadvocacy.set_status
analytics:readecho.mentions, analytics.overview, analytics.attribution, analytics.pagespeed, analytics.report, analytics.benchmarks, ga4.pull, ugc.performance, ads.launches, ads.get, ads.performance, ads.benchmarks, ads.report
autopilot:readautopilot.status, autopilot.learnings, autopilot.actions
autopilot:runautopilot.run
autopilot:writeautopilot.decide
billing:readbilling.status, me.get
campaigns:writecampaigns.create, campaigns.update, campaigns.archive, ugc.scale, ads.launch, ads.manage
connections:readconnections.list, reddit.status, github.repos, connections.health
creative:readcreative.status, creative.review, creative.assets, creative.models, ugc.batch_preflight, creative.gallery, creative.job, creative.compositions_get
creative:runcreative.plan, creative.render, creative.cancel, creative.generate, ugc.batch, creative.abort, creative.revise, creative.variants, creative.compositions_set, creative.storyboard_edit
discovery:readadlib.browse, adlib.get_ad, adlib.get_score, adlib.list_assets, adlib.saved, adlib.boards, adlib.alerts, adlib.competitors, adlib.top_spend, adlib.weekly_digest, adlib.monitoring
discovery:runadlib.search, adlib.create_board, adlib.set_board_public, adlib.save_ad, adlib.unsave_ad, adlib.ack_alerts, adlib.track_competitor, adlib.untrack_competitor, adlib.sync_competitor, adlib.clone, adlib.set_digest, adlib.create_alert_rule
geo:rungeo.scan
outreach:writeoutreach.draft, crm.sync
publishqueue.publish, approvals.approve
queue:readqueue.list, queue.get, queue.best_time, engage.reply_drafts, approvals.list, brief.get, scheduled_tasks.list
queue:writequeue.delete, queue.update, queue.approve, queue.reject, queue.schedule, queue.proof, opportunities.queue, approvals.reject, creative.queue
sentiment:readsentiment.series
settings:writevoice.set, agent_mode.set, email_prefs.set
strategy:runstrategy.run, scout.research, writer.generate, agents.list, agents.status, agents.run, reddit.warmup, command.chat, command.sessions, command.run, command.status, command.approve_step, workspace.context, workspace.get, products.list, artifacts.list, listening.list, listening.scan, signals.scan, opportunities.list, opportunities.draft, geo.status, geo.checklist, geo.competitors, geo.uncited, echo.scan, engage.scan, voice.get, recommendations.list, recommendations.generate, recommendations.decide, campaigns.list, campaigns.get, workflows.start, workflows.execute, workflows.status, tasks.list, tasks.create, tasks.get, tasks.update, tasks.approve, tasks.execute, launch.prepare, listings.list, prospects.scan, inbox.list, inbox.get, feed.list, feed.update, agent_mode.get, email_prefs.get, audience.list, strategy.docs_get, strategy.docs_save
workspace:writeproducts.create, products.update, products.archive, audience.import, listings.create, listings.update, listings.archive, audience.create, scheduled_tasks.create, scheduled_tasks.update, scheduled_tasks.delete, scheduled_tasks.run

User tokens (aicmo_usr_…, from aicmo login) carry all scopes. Agent tokens (aicmo_agt_…, from aicmo token create) carry an explicit subset. Capabilities with scope none are local and need no token.

Agent tokens currently reach only the native /api/v1/* handlers (queue, connections, workspace context, me), where withAuth enforces the declared scope. Capabilities served by a legacy /api/* route through the /api/v1 rewrite need a user token: those routes declare no scope, so a scoped agent token cannot be checked against one and is refused rather than silently granted everything. Declaring scopes on those handlers is what lifts the restriction.

Surfaces

chat capabilities are also AI CMO runtime tools under the same id. Every capability with an HTTP transport is reachable from the CLI as aicmo run <capability.id> '<json>' (run aicmo run with no id to list them); hand-written commands like aicmo queue approve are ergonomic aliases over the same registry entries.

Error envelope (all surfaces)

{ "error": { "code": "stable_snake_case", "message": "human readable", "status": 409, "retryable": false } }

MCP wraps it as { isError: true, content: [{ type: "text", text: "<that JSON>" }] }. Codes you will see: missing_auth_token, invalid_arguments, unknown_tool, untrusted_auth_override, untrusted_api_base_url, invalid_api_response, http_<status>, plus server codes such as reddit_not_connected, publish_not_approved, insufficient_credits, assisted_publish.

Live discovery endpoint: GET https://app.aicmohq.com/api/v1/capabilities.