add-ads
ChatGPTCreate one or many ads under ad sets. Pass an ads: [...] array — each entry targets its own adsetNodeId and may attach creativeId and/or copyGenerationId in the same call, avoiding follow-up update-node. Unknown adsetIds return in notFound, per-ad create errors in failed; the rest are created (partial success is fine). When the user provided explicit per-ad names in their message, pass each literal name verbatim per ads[].name — naming convention applies only when the user did not specify names.
add-adset
ChatGPTAdd a new ad set to a campaign — and optionally apply targeting/budget/schedule/goal settings AT CREATE time via the settings map (dot-notation paths, same shape as update-settings). The response reports appliedSettings (paths whose stored value matches the request) and notApplied (paths that did NOT land — e.g. invalid value, schema mismatch, or coupling guard). NEVER confirm a setting to the user unless it appears in appliedSettings.
add-campaign
ChatGPTAdd a new campaign node to the campaign tree. Each batch holds AT MOST ONE campaign — if one already exists in this launch, the tool will refuse. Use only when the user is explicitly creating the first campaign in a fresh batch. Canonical objective values are 'website-conversions' | 'lead-form' | 'traffic' — Meta's internal enums (OUTCOME_SALES, OUTCOME_LEADS, OUTCOME_TRAFFIC, etc.) are NOT accepted. If the user provided an explicit name in their message ('called X', 'named Y', 'name it Z'), pass that literal string as name — do NOT modify it to match the brand's naming convention. The naming convention is the DEFAULT pattern when the user did NOT specify a name; it is never an override of explicit user intent.
apply-snapshot-template
ChatGPTApply a saved CAMPAIGN-SNAPSHOT template to the current campaign launch. It copies the snapshot's CAMPAIGN SETTINGS onto the campaign(s) already in the launch — it does not create ad sets or ads, and it refuses on a launch that has no campaign yet. For rule-based structure templates that do build ad sets and ads, use applyStructureTemplate instead.
apply-structure-template
ChatGPTApply a structure template to a pipeline card — POPULATES the card (an existing PENDING draft batch) with the template's campaign/ad set/ad structure. Never creates a launch and never publishes. Re-applying an already-populated card needs overwrite=true (hard overwrite — confirm with the user first). WRITE.
attach-lead-form
ChatGPTAttach a Meta instant lead form to a lead-generation ad set so the campaign can launch. Turns on instant forms and sets the chosen form on the ad set's campaign, which owns the lead form for all of its ad sets. Get the leadFormId from list-lead-forms(never invent one). Works on DRAFT ad sets — a live ad set returns a 409 (live entities are edited in Meta Ads Manager). Use this instead of telling the user to attach the form themselves.
author-structure-template
ChatGPTCreate a new structure template from an engine StructureState you constructed for the user. Validates the rules against the engine before saving and requires at least one audience. Use after translating the user's natural-language description into a representable StructureState (validate it first). WRITE.
clone-live-campaign
ChatGPTClone a live campaign into one or more fresh Koast batches as editable DRAFTS — a full deep-copy of the campaign tree (ad sets, ads, copy, re-imported creatives) with all ad-platform IDs stripped, so each clone is a brand-new launchable draft. This is the correct path for "make a new campaign just like this one / keep everything the same / launch this N more times": clone first, then vary copy or settings on the cloned DRAFT ads (no live-edit needed). Because each batch holds AT MOST ONE campaign, N clones create N separate batches — pass count. Pass the campaign id on the ad platform (from list-account-campaigns), NOT a Koast nodeId. Use this instead of rebuilding from scratch (which drags in stale account defaults) and instead of duplicate-node (which can't duplicate a whole campaign).
compute-creative-fatigue
ChatGPTCanonical deterministic creative fatigue score for a single ad (or aggregated set) on a campaign launch. The daily series is fetched server-side from the ad platform's live insights — you Do NOT pass it. Pass adId to score one ad; omit to score the whole launch at the chosen level. It is the source for fatigue, creative decline and refresh candidates. Do NOT use get-campaign-tree or other metrics tools for fatigue — this is the canonical fatigue signal.
configure-pipeline-column
ChatGPTConfigure a fixed system column's SETTINGS: rename it, hide/show it, and/or bind a structure template to auto-apply on card entry. Org-admin only. Cannot create or delete columns. WRITE. Get the columnId from list-pipeline-columns first.
create-campaign-launch
ChatGPTCreate an empty campaign launch (batch) under a specific brand/ad account. Returns the new launch id. Use this WHEN the user explicitly asks to create a new batch / launch / campaign group AND you already know which brand to use (from list-my-ad-accounts, then whichever row the user picks). NEVER guess brandId. After creation, surface the new id to the user and immediately switch context to that launch for any follow-up structure work (add-campaign, add-adset, etc.).
create-notification
ChatGPTCreate a notification in the user's Home inbox — a sign-off request, a to-do, or a deferred-work item. Use SIGN_OFF when you have prepared a workflow execution that needs the user's approval before it runs: pass its workflowExecutionId, and approving the notification RUNS that execution. Use TODO for a task you want the user to remember, and DEFERRED for work you have parked for later. NEVER pass brandId/organizationId — the notification is scoped automatically to the current account context. The notification lands PENDING in the user's queue.
create-pipeline-ticket
ChatGPTCreate a new pipeline card (ticket/batch) on the board. WRITE. Optionally set the starting stage, attach creatives, and assign teammates.
delete-automation
ChatGPTPermanently delete a monitoring automation by automationId. WRITE — destructive.
delete-batch
ChatGPTPermanently delete a Koast batch (campaign launch) or pipeline card, together with the campaigns, ad sets and ads it holds in the Koast tree. A pipeline card IS a batch, so this removes either. This does NOT touch anything on the ad platform: already-published campaigns keep running and keep spending — pause them with update-node first if that is the intent. Irreversible. WRITE — destructive.
delete-snapshot-template
ChatGPTDelete a saved CAMPAIGN-SNAPSHOT template. This cannot be undone. Does not affect structure templates.
delete-structure-template
ChatGPTPermanently delete a saved STRUCTURE template by templateId. Cards already populated from it are not affected. Irreversible. WRITE — destructive.
delete-workflow
ChatGPTPermanently delete a workflow by workflowId. WRITE — destructive.
distribute-creative
ChatGPTDistribute a single creative across multiple ad sets or campaigns. Either creates a new ad per target (newAdPerTarget) or replaces the first existing ad (replaceFirstAd).
duplicate-and-vary
ChatGPTDuplicate a campaign/ad set/ad N times, varying ONE specific settings path across the copies. vary.path is a dotted path into the settings schema — call get-settings-schema first to confirm the path is valid. Common paths: 'targeting.ageRange', 'targeting.locations', 'targeting.interests', 'optimization.bidAmount', 'optimization.bidStrategy', 'budget.dailyAmount', 'budget.lifetimeAmount'. vary.values must be the list of variant values (one per copy, length must equal count).
duplicate-node
ChatGPTDuplicate an ad set or ad, including all its settings and children. Supports batch duplication with count parameter — use count instead of calling this tool multiple times.
edit-structure-template-rules
ChatGPTUpdate an existing structure template's rules/audiences/settings. Pass the full new StructureState in config (validated before save). Omit templateId to edit the template open in the builder. WRITE.
generate-copy
ChatGPTGenerate ad copy (headlines, primary text, descriptions) and store it as a copyGenerationId. The id is what the user later approves and attaches via update-node — generation alone does not change any ad. Brand context (name, URL, business type, voice) is auto-loaded server-side — never ask the user for any of that.
get-account-naming-convention
ChatGPTConfigured naming convention templates for an account (campaign/adset/ad). It is the source for how campaigns, ad sets and ads in that account are named. Pass accountId explicitly when account scope was resolved via list-my-ad-accounts (multi-account / all-accounts dashboard); omit only when a single account is already locked-in by the dashboard context. Do NOT infer the convention from campaign/adset/ad names in get-campaign-tree — the real convention lives here and may differ from historical names.
get-account-overview
ChatGPTRoll up spend and results across the Koast batches on an ad account — NOT the whole ad account: campaigns that were never launched through Koast are not counted, and at most 10 batches are sampled (the payload reports batchesSampled). For a true account-wide figure, or for campaigns launched outside Koast, use list-account-campaigns. Pass accountId explicitly when account scope was resolved via list-my-ad-accounts (multi-account / all-accounts dashboard); omit only when a single account is already locked-in by the dashboard context.
get-ad-account-request
ChatGPTReads one ad account request by its id or its Koast reference (KST-…): its status, the six-stage timeline with when each stage was reached, the ad accounts it produced and every top-up.
get-ad-delivery-status
ChatGPTCheck ad review and delivery status on the ad platform for the current campaign launch. Surfaces disapprovals, limited delivery, and ads still in review — the silent killers of delivery. One call covers all three levels at once: issues holds one entry per ad that has a review or delivery problem (ads with none are absent), and adsetStatuses and campaignStatuses hold the status of every live ad set and campaign. There is no level parameter — review issues only ever attach at the ad level on the platform.
get-ad-details
ChatGPTFull ad details: creative, copy, links, CTA, tracking. Use when the user asks about a specific ad.
get-adset-details
ChatGPTFull adset details: settings, targeting, budget, schedule, placements, optimization, assets, links. Use when the user asks about a specific adset by ID, name, or 'this ad set'. Do NOT use get-campaign-tree for adset details — it returns only names and IDs.
get-automation
ChatGPTGet one monitoring automation (rules + actions + frequency + scope) by automationId. Read-only.
get-available-options
ChatGPTLook up available options for any asset or targeting type. Use this when the user wants to select a pixel, facebook page, audience, interest, location, or conversion event. Types: pixels, facebookPages, instagramAccounts, audiences, interests, locations, conversionEvents.
get-campaign-tree
ChatGPTReturns the Koast-tracked campaign STRUCTURE (campaign → adset → ad tree with IDs and names only) for a given campaign launch. Use ONLY to discover IDs or verify what's in Koast. Do NOT use for: ad/adset details (use get-adset-details / get-ad-details), campaigns not yet in Koast (use list-account-campaigns), naming conventions (use get-account-naming-convention), or creative fatigue (use compute-creative-fatigue). Does NOT include settings, metrics, or creative data. campaignLaunchId is required on every call.
get-copy
ChatGPTGet a previously generated copy by its ID. Shows headlines, primary text, descriptions, and variations.
get-insights-daily
ChatGPTFetch daily-breakdown insights (time_increment=1) for the current campaign launch at campaign/adset/ad level. Returns ONE ROW PER DAY, not one row per entity: level chooses which entities are read, then every entity for a date is added together, and entities on each day says how many were. There are no per-entity ids in the response, so do NOT report a day as belonging to a single ad. reach is null whenever entities > 1, because reach counts unique people and cannot be summed across entities. Each day carries spend, impressions, clicks, reach, entities, frequency, hook_rate, hold_rate, results, resultActionType, cpa (cost per result), ctr, cpm.
get-metrics
ChatGPTGet performance metrics at campaign / adset / ad level for the current launch. Pass level to scope the request; optionally pass id to scope to a specific entity or omit for all. Returns impressions, clicks, spend, CTR, CPC, conversions and per-level collections.
get-settings
ChatGPTGet current settings (budget, targeting, schedule, placements, optimization) for one or MANY nodes. To read several nodes, pass them all in nodes in a SINGLE call — do NOT call this tool once per node. One call with nodes: [{nodeId, nodeType}, …] returns every node's settings at once and is dramatically faster than repeated single-node calls. Use nodeId+nodeType only for a single node.
get-settings-schema
ChatGPTGet the configurable settings for a given section and node type. Returns setting paths, types, valid values, and example update payloads. Use this BEFORE updating settings to know the exact format. Every path is owned by one level (campaign, ad set or ad) and is written on that level only: nothing cascades, so a value meant for every ad set is written to each ad set. Sections: budget, targeting, schedule, placements, optimization, links, assets, conversion, enhancements, naming, adCategory, leadForm, shop.
get-structure-template
ChatGPTGet one structure template (config + settings + audiences + accounts) by templateId. Omit templateId to read the template open in the builder (Current Context). Read-only.
get-structure-template-rules
ChatGPTReturn a human-readable summary of a structure template's engine rules (creative count, ad sets, placement/split, custom-rule flags, ops) and the distribution it will produce (sets x creatives). Use this to explain what a template does before applying. Read-only.
get-targeting-options
ChatGPTGet available targeting options including audiences, locations, demographics, interests, and behaviors. Use this to help users configure targeting.
get-team-activity-log
ChatGPTFetch the team activity log — who changed what and when — for an account or brand. Use for Team Report workflow. Pass accountId explicitly when account scope was resolved via list-my-ad-accounts (multi-account / all-accounts dashboard). brandId is also accepted when only the brand is known (e.g. legacy locked-in callers). Omit both only when a single brand is already locked-in by the dashboard context.
get-workflow
ChatGPTGet one workflow (spec + nodes + trigger + status) by workflowId. Read-only.
get-workflow-execution
ChatGPTGet the status and per-node results of a single workflow execution. Read-only.
import-campaigns
ChatGPTImport existing campaigns from the ad platform into the current campaign launch. Pulls campaign structure including ad sets and ads. Pass sourceAdAccountId to pull from a DIFFERENT ad account than the batch's own — resolve that account with list-my-ad-accounts, list its campaigns with list-account-campaigns({ accountId }), then import the chosen ids. The import runs in the BACKGROUND — large campaigns may still be syncing when this tool returns; in that case it reports "still importing", which is NOT a failure.
import-live-campaign
ChatGPTImport a live campaign (one that exists in the ad account on the ad platform but NOT yet in Koast) into a Koast batch, so it becomes both reportable AND extendable. Idempotent — if a Koast batch already wraps this providerCampaignId, returns its campaignLaunchId and alreadyExisted: true instead of duplicating. For metrics, fatigue or details on a campaign from list-account-campaigns that has no Koast batch yet, call this FIRST to obtain a campaignLaunchId, then run normal launch-scoped reporting tools against it. THIS IS ALSO HOW YOU ADD TO A LIVE CAMPAIGN: import it, then add-adset / add-ads against the returned campaignLaunchId and launch-campaign, and the new ad sets and ads are published INTO the existing campaign rather than into a new one. Never tell a user that adding an ad set to a live campaign has to be done in the ad platform's own manager — it does not.
list-account-campaigns
ChatGPTLists ALL campaigns in the brand's ad account on its ad platform, including those NOT imported to Koast. It is the source for what exists in the ad account itself, as opposed to what Koast tracks. Do NOT use get-campaign-tree — that returns only Koast-tracked data. Pass accountId explicitly when account scope was resolved via list-my-ad-accounts (multi-account / all-accounts dashboard); omit only when a single account is already locked-in by the dashboard context.
list-ad-account-requests
ChatGPTLists the organization's requests for new Meta ad accounts made through Koast: each request's status and stage, the ad accounts it produced with their act ids, and the funds added to them.
list-automations
ChatGPTList monitoring automations (rule-based per-brand watchers that run actions like pause/notify on live campaigns). Read-only. Optionally filter by brandId and status.
list-brands
ChatGPTLists the brands this connection can work on, with each brand's ad provider and which brand is active. Most tools operate on the active brand; templates, workflows and pipeline columns are shared across the whole organisation.
list-creatives
ChatGPTBrowse the active brand's creative library — the images and videos available to put in ads. Returns a creativeId for each, which is the id add-ads, distribute-creative and swap-creatives take. Newest first; filter with search and kind, or pass creativeIds to look up an explicit set. Read-only: listing changes nothing. To add a creative that is not here yet, use upload-creative.
list-koast-batches
ChatGPTList Koast batches (campaign launches) — these are the user's drafts and in-progress launches stored in the Koast DB, separate from live campaigns on the ad platform. It is the source for the user's work in Koast, not for what runs on the ad platform. Pass accountId to scope to one ad account; otherwise uses the current page/account context. Status filter accepts: PENDING, RUNNING, COMPLETED, COMPLETED_WITH_ISSUES, ACTION_REQUIRED, FAILED, CANCELLED. Read-only.
list-lead-forms
ChatGPTList the instant lead forms that already exist on a Page, so you can attach one to a lead-generation ad set. Pass the Page id (pageId) — read it from the ad set's assets.facebookPage.id via get-settings, or from get-available-options. Returns { id, name } per form. Use this BEFORE attach-lead-form whenever a lead-form campaign needs a form and the user hasn't given an exact id — never tell the user to go create one on the ad platform without first listing what they already have.
list-my-ad-accounts
ChatGPTReal list of ad accounts the current user can access (one per brand). It is the source for which ad account to act on when the user has not named one, typically on the all-accounts dashboard, or when a named account cannot be matched. NEVER invent account names; always call this first and then ask the user to choose from the real options it returns. Read-only. Output is keyed by brandId; connected: false means the brand has no ad account attached.
list-pipeline-columns
ChatGPTList the pipeline board columns (the 6 fixed system stages) for the org, with their ids, names, hidden flag, and bound settings. Read-only. Call before configure-pipeline-column to get the columnId.
list-snapshot-templates
ChatGPTList the user's saved CAMPAIGN-SNAPSHOT templates (full campaign-tree snapshots of an existing launch). These are NOT structure templates (rule-based blueprints) — for those use listStructureTemplates.
list-structure-templates
ChatGPTList the user's saved STRUCTURE templates (rule-based campaign blueprints applied to pipeline cards). Distinct from the old campaign-snapshot templates. Read-only. Call before apply-structure-template / edit-structure-template-rules when you need the templateId.
list-workflows
ChatGPTList the org's saved Workflows (multi-step automations that chain nodes like apply_template, launch, attach_monitor, slack_notify, review_gate, agent_prompt). Read-only. Call before getWorkflow / runWorkflow to resolve a workflowId.
move-pipeline-card
ChatGPTMove a pipeline card (batch) between the columns you can set by hand: REQUESTED, ASSETS_UPLOADED, IN_REVIEW, APPROVED and FAILED. PUBLISHED is NOT settable — a card reaches it by actually publishing, so asking for it is refused; launch the batch instead. FAILED is settable but it is an outcome, so only move a card there to record a launch that really failed, and the Failed column only appears on the board once a card is in it. WRITE. Cannot create or delete columns.
preview-ads
ChatGPTPreview a campaign launch's ads as they appear in feed: primary text, headline, call to action and the creative image for every ad in the launch, in structure order. Read-only — it renders what is already there and changes nothing.
remove-nodes
ChatGPTRemove one or many campaign/adset/ad nodes from the KOAST TREE only — this does NOT pause or delete the entity on the ad platform and does NOT stop spend on already-published ads. Pass nodes: [{ nodeId, nodeType }, ...]. Accepts a mix of node types; unknown ids return in notFound, the rest are removed from the Koast tree. To actually stop spend on a live ad/adset/campaign, use update-node with properties: { status: "PAUSED" } instead. Destructive on the Koast tree and cannot be undone.
rename-node
ChatGPTRename a campaign, ad set, or ad node.
run-workflow
ChatGPTTrigger a workflow to run now, starting a new execution. WRITE.
save-automation
ChatGPTCreate or update a monitoring automation for a brand. Omit automationId to create; pass it to update. automation holds the full spec. WRITE.
save-campaign-snapshot
ChatGPTSave the current campaign's SETTINGS as a reusable CAMPAIGN-SNAPSHOT template. It captures the campaign-level settings only — not ad sets, ads or creatives. NOT a structure template (rule-based blueprint).
save-workflow
ChatGPTCreate or update a Workflow. Omit workflowId to create a new one; pass it to update. spec holds the full workflow definition. WRITE.
select-brand
ChatGPTMakes a brand the active brand for this session. Most tools operate on the active brand, and the tools available can change with the brand's ad provider; templates, workflows and pipeline columns are shared across the whole organisation. Take the brandId from list-brands.
set-automation-status
ChatGPTSet a monitoring automation's status: ACTIVE or PAUSED. WRITE.
set-workflow-status
ChatGPTSet a workflow's status: DRAFT, ACTIVE (armed), or PAUSED. WRITE.
suggest-structure-templates
ChatGPTSuggest structure templates by reverse-engineering the user's last few launches and AI-naming them. Returns candidate templates (id, name, intent, flags) saved as drafts. Use when the user asks "suggest a template" or "templates from my recent launches".
swap-creatives
ChatGPTReplace the creatives on an existing ad set's ads while PRESERVING each ad's copy (primary text + headline). For each creative it edits an existing ad's creative in place (copy untouched); if there are more creatives than ads it clones an existing ad (inheriting its copy) and sets the new creative; if fewer, it removes the surplus. NEVER delete-and-re-add ads to change a creative — that drops the copy. Use this for "swap in these creatives" / "use these N videos on this ad set". Pass the Koast adset nodeId and the numeric creativeIds.
turn-launch-into-template
ChatGPTReverse a single specified launch (batch) into a saved structure template. Use when the user asks to "turn this batch into a template" or "save this launch as a structure template". WRITE.
update-node
ChatGPTUpdate a campaign, ad set, or ad node. To attach a creative to an ad, pass creativeId (numeric). To attach a persisted copy generation to an ad, pass copyGenerationId (numeric). To attach an existing Meta post to an ad, pass postId (string). To pause/activate/resume a live node, pass properties: { status: "PAUSED" | "ACTIVE" } — status is NOT a settings path, it lives on the node itself and must go through update-node. Turning a live node ACTIVE can restart spend, so it runs only on the user's explicit approval: in Koast chat the call returns an approval card and nothing changes until the user approves it. Pausing runs immediately. properties accepts only status and copy: names go through rename-node and settings through update-settings, and any other key is refused with nothing applied. At least one of creativeId / copyGenerationId / postId / properties must be provided.
update-settings
ChatGPTApply one or more settings to one or more nodes in a single call. settings is a key-value object of dot-notation paths (1+ paths); nodeIds is an array of node IDs (1+ nodes). Each path is applied to every node. CURRENCY: budget.dailyAmount / budget.lifetimeAmount are CENTS (5000 = $50.00); optimization.bidAmount / budget.adSetMinimumSpend / budget.adSetMaximumSpend are DOLLARS. For varying values PER node use duplicate-and-vary. status is NOT a settings path — to pause/activate/resume a node, use update-node with properties: { status: "PAUSED"|"ACTIVE" }.
upload-creative
ChatGPTStore an image in the active brand's creative library and return its creativeId, ready to put in an ad with add-ads, distribute-creative or swap-creatives. Give it a public https imageUrl and Koast downloads and re-hosts it. Uploading the same bytes twice returns the creative that already exists rather than duplicating it. Images only — videos are uploaded on the Creatives page. This does NOT create or change any ad; it only adds to the library.
validate-launch
ChatGPTRead-only check whether the campaign launch is publishable to the ad platform. Returns any missing required assets (for example a Facebook Page, Pixel or conversion event on Meta) and structural validation errors with per-node inputId + message. Call this during wrap-up after a build/edit flow BEFORE offering launch to the user — if valid: false, surface each issue (with its inputId + message) as actionable next steps and DO NOT propose launch. NOT a write; safe to call anytime. Pure validation against the current tree state.
validate-structure-rules
ChatGPTValidate an engine StructureState against the rules engine WITHOUT saving. Returns whether it is representable and the derived distribution (sets x creatives x max-per-set) plus any issues. Always call before authoring/editing to confirm the distribution is real. Read-only.
add-ads
Claudeadd-adset
Claudeadd-campaign
Claudeapply-snapshot-template
Claudeapply-structure-template
Claudeattach-lead-form
Claudeauthor-structure-template
Claudeclone-live-campaign
Claudecompute-creative-fatigue
Claudeconfigure-pipeline-column
Claudecreate-campaign-launch
Claudecreate-notification
Claudecreate-pipeline-ticket
Claudedelete-automation
Claudedelete-batch
Claudedelete-snapshot-template
Claudedelete-structure-template
Claudedelete-workflow
Claudedistribute-creative
Claudeduplicate-and-vary
Claudeduplicate-node
Claudeedit-live-campaign
Claudeedit-structure-template-rules
Claudegenerate-copy
Claudeget-account-naming-convention
Claudeget-account-overview
Claudeget-ad-delivery-status
Claudeget-ad-details
Claudeget-adset-details
Claudeget-automation
Claudeget-available-options
Claudeget-campaign-tree
Claudeget-copy
Claudeget-insights-daily
Claudeget-metrics
Claudeget-settings
Claudeget-settings-schema
Claudeget-structure-template
Claudeget-structure-template-rules
Claudeget-targeting-options
Claudeget-team-activity-log
Claudeget-workflow
Claudeget-workflow-execution
Claudeimport-campaigns
Claudeimport-live-campaign
Claudelaunch-campaign
Claudelist-account-campaigns
Claudelist-automations
Claudelist-brands
Claudelist-creatives
Claudelist-koast-batches
Claudelist-lead-forms
Claudelist-my-ad-accounts
Claudelist-pipeline-columns
Claudelist-snapshot-templates
Claudelist-structure-templates
Claudelist-workflows
Claudemove-pipeline-card
Claudepreview-ads
Clauderemove-nodes
Clauderename-node
Clauderun-workflow
Claudesave-automation
Claudesave-campaign-snapshot
Claudesave-workflow
Claudeselect-brand
Claudeset-automation-status
Claudeset-workflow-status
Claudesuggest-structure-templates
Claudeswap-creatives
Claudeturn-launch-into-template
Claudeupdate-node
Claudeupdate-settings
Claudeupload-creative
Claudevalidate-launch
Claudevalidate-structure-rules
Claude