Brands and the asset library — MCP tool reference — VidVertex Docs
Docs/MCP tool reference/Brands and the asset library

Brands and the asset library

Brands are the accounts a stack posts as; pools are the shared asset libraries their slots point at. These calls set up both, in bulk if you have many brands.

A named asset pool assigned to several brands, one assignment tagged to one platformpool“Backgrounds”Brand ABrand BonlyBrand Cone library, many brands —a tag limits an assignment to one platform
FIG 1One named pool, several brands — and one assignment narrowed to a single platform.

create_brand

Create a new brand (account container), optionally inside a folder (created if missing) and with any brand settings in the same call. Connect its social accounts via apply_zernio_profile.

Parameter Type Description
name (required) string Brand name.
folder string Optional brand folder.
posting_time string Daily posting time HH:MM — or several comma-separated times ('18:00, 19:30'): plan day N posts at entry N, cycling. Empty = the platform slot table.
posting_delay_minutes integer Minutes between this brand's posts in a batch.
posting_time_rules array of object Custom posting times per platform and/or post type. Each rule: {platforms: [...], post_types: [...], times: ['HH:MM', ...]} — empty platforms/post_types = any. The most specific matching rule wins (platform+type > platform > type > generic, ties by list order); plan day N takes the rule's Nth time, cycling; a matched rule pins exact times (posting_delay_minutes staggers only the base posting_time). Replaces ALL rules; [] clears.
timezone string IANA timezone, e.g. Europe/Berlin.
content_language string The language this brand publishes in (language axis) — name or code, normalized; empty = the briefing's language.
voiceover_voice string TTS voice id for the AI voiceover (empty = global default).
metricool_blog_id string Metricool brand (blog) id for the Metricool API upload mode — see list_metricool_brands.
youtube_category string YouTube category (Metricool vocabulary, e.g. GAMING, PEOPLE_BLOGS) — the Metricool import drops YouTube rows without one; empty = PEOPLE_BLOGS default.
logo_path string Logo image file — also the watermark-widget fallback.
identity_niche string Short niche description.
identity_audience string Audience & tone — how the brand addresses its audience.
identity_ai_enabled boolean Feed the identity into AI texts (default on).
identity_color_primary string Primary color #RRGGBB.
identity_color_accent string Accent color #RRGGBB — default motion-title accent.
platforms object Per-platform account config, merged per platform: {"tiktok": {"enabled": true, "channel_name": "…", "late_account_id": "…"}}. Prefer apply_zernio_profile — it imports all of this from the connected Zernio profile.

duplicate_brand

Deep-copy a brand (pools + meta) under a new name — the fast path when setting up many similar brands. The copy keeps the source's Zernio accounts until apply_zernio_profile points it at its own Zernio profile. Settings fields tweak the copy in the same call.

Parameter Type Description
source (required) string Brand to copy.
new_name (required) string Name of the copy.
posting_time string Daily posting time HH:MM — or several comma-separated times ('18:00, 19:30'): plan day N posts at entry N, cycling. Empty = the platform slot table.
posting_delay_minutes integer Minutes between this brand's posts in a batch.
posting_time_rules array of object Custom posting times per platform and/or post type. Each rule: {platforms: [...], post_types: [...], times: ['HH:MM', ...]} — empty platforms/post_types = any. The most specific matching rule wins (platform+type > platform > type > generic, ties by list order); plan day N takes the rule's Nth time, cycling; a matched rule pins exact times (posting_delay_minutes staggers only the base posting_time). Replaces ALL rules; [] clears.
timezone string IANA timezone, e.g. Europe/Berlin.
content_language string The language this brand publishes in (language axis) — name or code, normalized; empty = the briefing's language.
voiceover_voice string TTS voice id for the AI voiceover (empty = global default).
metricool_blog_id string Metricool brand (blog) id for the Metricool API upload mode — see list_metricool_brands.
youtube_category string YouTube category (Metricool vocabulary, e.g. GAMING, PEOPLE_BLOGS) — the Metricool import drops YouTube rows without one; empty = PEOPLE_BLOGS default.
logo_path string Logo image file — also the watermark-widget fallback.
identity_niche string Short niche description.
identity_audience string Audience & tone — how the brand addresses its audience.
identity_ai_enabled boolean Feed the identity into AI texts (default on).
identity_color_primary string Primary color #RRGGBB.
identity_color_accent string Accent color #RRGGBB — default motion-title accent.
platforms object Per-platform account config, merged per platform: {"tiktok": {"enabled": true, "channel_name": "…", "late_account_id": "…"}}. Prefer apply_zernio_profile — it imports all of this from the connected Zernio profile.

rename_brand

Rename a brand — every stack's brand-keyed data (texts, channels, widget states) is rewritten along with it.

Parameter Type Description
brand (required) string Current brand name.
new_name (required) string New brand name.
WARNING

Deleting a brand needs a confirmation flag the assistant may only set after you said yes. Stacks keep the brand's name until you adjust them in the editor — nothing is rewritten behind your back.

delete_brand

DELETE a brand: its accounts config, asset pools and tree entry. Stacks keep the brand name until adjusted in the editor (warning-only semantics). Requires confirm=true after the user confirmed.

Parameter Type Description
brand (required) string Brand to delete.
confirm (required) boolean Required true. Only pass it after the user explicitly confirmed this deletion in chat.

move_brand_to_folder

Move a brand into a folder of the brand tree (created if missing). Empty folder = back to the root level.

Parameter Type Description
brand (required) string Brand name.
folder string Folder name ('' = root).

set_brand

Update a brand's settings: posting time/delay, timezone, content language, voiceover voice, Metricool blog id, logo, the brand identity (niche, audience & tone, colors, AI toggle) and per-platform account config. new_name renames the brand (stack data follows). Only the fields passed change.

Parameter Type Description
brand (required) string Brand name (see list_brands).
new_name string Rename the brand.
posting_time string Daily posting time HH:MM — or several comma-separated times ('18:00, 19:30'): plan day N posts at entry N, cycling. Empty = the platform slot table.
posting_delay_minutes integer Minutes between this brand's posts in a batch.
posting_time_rules array of object Custom posting times per platform and/or post type. Each rule: {platforms: [...], post_types: [...], times: ['HH:MM', ...]} — empty platforms/post_types = any. The most specific matching rule wins (platform+type > platform > type > generic, ties by list order); plan day N takes the rule's Nth time, cycling; a matched rule pins exact times (posting_delay_minutes staggers only the base posting_time). Replaces ALL rules; [] clears.
timezone string IANA timezone, e.g. Europe/Berlin.
content_language string The language this brand publishes in (language axis) — name or code, normalized; empty = the briefing's language.
voiceover_voice string TTS voice id for the AI voiceover (empty = global default).
metricool_blog_id string Metricool brand (blog) id for the Metricool API upload mode — see list_metricool_brands.
youtube_category string YouTube category (Metricool vocabulary, e.g. GAMING, PEOPLE_BLOGS) — the Metricool import drops YouTube rows without one; empty = PEOPLE_BLOGS default.
logo_path string Logo image file — also the watermark-widget fallback.
identity_niche string Short niche description.
identity_audience string Audience & tone — how the brand addresses its audience.
identity_ai_enabled boolean Feed the identity into AI texts (default on).
identity_color_primary string Primary color #RRGGBB.
identity_color_accent string Accent color #RRGGBB — default motion-title accent.
platforms object Per-platform account config, merged per platform: {"tiktok": {"enabled": true, "channel_name": "…", "late_account_id": "…"}}. Prefer apply_zernio_profile — it imports all of this from the connected Zernio profile.

save_pool

Create a named pool (name + kind) or update one ('pool' by id/name): rename, replace or append items/folders. A folder is a LIVE folder — re-scanned on every render, new downloads count automatically. Assign pools to brand slots via assign_pools.

Parameter Type Description
pool string Existing pool (id or name) to update; omit to create.
name string Pool name (create/rename).
kind enum: media, audio, hashtags Pool kind (create only; media = video + image).
items array of string File paths (or hashtag strings for kind=hashtags).
folders array of string Live folder paths (media/audio pools).
append boolean Add items/folders instead of replacing them.

duplicate_pool

Duplicate a named asset pool (items + live folders) under a new name; the copy is unassigned.

Parameter Type Description
pool (required) string Pool id or name.
name string Name of the copy (default ' copy').

delete_pool

Delete a named pool from the library and remove its assignments from every brand slot. Files on disk are never touched. DESTRUCTIVE: requires confirm=true, which you only pass after the user explicitly confirmed in chat; check used_by via list_pools first.

Parameter Type Description
pool (required) string Pool id or name.
confirm (required) boolean Must be true — only after the user confirmed in chat.

assign_pools

Point a brand's slot at named pools (the brand editor's assign dropdown): slot = backgrounds/cta/brainrot/sounds/outro_clips/hook_clips/endcard_clips/hashtags. Replaces the slot's assignments (append=true adds; clear=true with no pools empties the slot). Assignments apply on every platform unless tagged with 'platforms' (only these) or 'except' (all but these); a variant renders the union of every assignment serving its platform.

Parameter Type Description
brand (required) string Brand name.
slot (required) string Slot key (see description).
pools array of string Pool ids or names (see list_pools).
platforms array of string Tag the written assignments: only these platforms.
except array of string Tag the written assignments: every platform but these.
append boolean Add to the slot instead of replacing it.
clear boolean Allow an empty 'pools' list to clear the slot.
NOTE

A brand-scoped call never rewrites a shared pool. Loose file paths and folders land in the brand's own pool, created on the spot; folders stay live and are re-scanned on every render.

set_brand_pools

Fill a brand's asset slots (backgrounds, cta, brainrot, sounds, outro_clips, hook_clips, endcard_clips, hashtags). Slots reference NAMED POOLS: a value that is a pool name/id assigns that pool; file paths, directories (kept as live folders, re-scanned every render) and hashtags land in the brand's own pool, created on the spot. Default replaces the slot's assignments; append=true adds. An assignment applies on every platform unless tagged: 'platforms' (only these) or 'except' (all but these) — a variant renders the union of every assignment serving its platform, there is no per-platform context or inheritance.

Parameter Type Description
brand (required) string Brand name.
platforms array of string Tag the written assignments: only these platforms.
except array of string Tag the written assignments: every platform but these.
pools (required) object Values by slot key — pool names/ids, file paths, directories or hashtags, e.g. {"backgrounds": ["Valorant BGs", "D:/assets/bg"], "hashtags": ["#fyp"]}.
append boolean Add to existing assignments instead of replacing.

distribute_assets

The app's asset funnel, pool edition: distribute media files or hashtags INTO named pools. mode=shared fills ONE pool (existing 'pool' or a 'new_pool_name') and assigns it to the given brands; mode=exclusive deals the items round-robin into one pool per brand (the slot's assigned pool, or a fresh one), so channels do not post identical material. Videos can be split into clips first. Slot kinds: backgrounds, cta, brainrot, sounds, outro_clips, hook_clips, endcard_clips, hashtags.

Parameter Type Description
kind (required) string Slot kind (see description).
mode enum: shared, exclusive shared = one pool for all; exclusive = per-brand pools, round-robin.
brands array of string Brands to assign the shared pool to (optional), or the per-brand targets in exclusive mode (required there).
pool string Shared mode: target pool id or name (see list_pools).
new_pool_name string Shared mode: create a new pool with this name instead.
files array of string Media file paths (every kind except hashtags).
hashtags array of string Hashtags (kind=hashtags).
platform string Platform tag of the assignment: 'all' (default) = the pool serves every platform of the brand, a platform key (e.g. tiktok) = only there.
split boolean Split videos into clips before distributing.
clip_seconds integer Clip length in seconds when splitting (default 10).

estimate_funnel

How many clips the asset funnel would cut the given video files into at clip_seconds (distribute_assets with split).

Parameter Type Description
files (required) array of string
clip_seconds integer Clip length in seconds (default 10).

set_brand_caption_style

Pin a caption style for a brand (the default for stacks without an explicit style choice - a style set on the stack itself wins) and/or override caption colors (primary/highlight/outline/back/glow, #RRGGBB; colors recolor whatever style runs). clear=true removes the pin.

Parameter Type Description
brand (required) string Brand name.
style string Style key (see list_caption_styles).
colors object Color overrides, e.g. {"highlight": "#FF0000"}.
clear boolean Remove the pin.

apply_zernio_profile

Connect one Zernio profile to an existing brand: imports the profile's connected social accounts into the brand's platform config (found platforms enabled with account id + channel name, the rest disabled).

Parameter Type Description
brand (required) string Brand name.
profile (required) string Zernio profile id or name (see list_zernio_profiles).

import_zernio_profiles

Bulk brand setup from Zernio: create or update one brand per profile (existing brands matched by profile id, then name) and import each profile's connected accounts. all=true imports every profile — the one-call answer to 'set up my 10 brands'.

Parameter Type Description
profiles array of string Profile ids or names (see list_zernio_profiles).
all boolean Import every profile.