Reading state
Read-only calls: what exists, how it is configured, and what is running right now. Nothing here writes a file, so an assistant can look as often as it likes before it changes anything.
list_stacks
List all stacks with post type, brand/platform combinations and render status: rendered = outputs present and current, rendered_stale = outputs exist but the stack changed since the render (re-render to refresh), uploaded = a real upload run already handled it — posted, or exported into the import CSV (the hub hides such stacks from its upload list; exact duplicates are skipped at schedule time anyway).
No parameters.
get_stack
One stack in full detail: post type, brands/platforms, media, all post texts, hook angles, render status and the last upload history entries.
| Parameter | Type | Description |
|---|---|---|
stack (required) |
string | Stack name. |
get_editor
The COMPLETE stack-editor state of one stack: every editor field (hook/endcard config, captions look, layout zones, templates, z-order), every widget's geometry and style at every context level (stack / per brand / per channel) incl. the canvas rect each media asset occupies on the 300x533 canvas, the background, the brand asset pools the render falls back to, and the resolved captions config — plus 'layout' (how the main clip sits in the 9:16 frame: cover / contain with letterbox bands, and what fills the bands) and 'motion_windows' (hook/endcard windows with the moment an animated title is fully legible). Use view_frame on any returned path to SEE the asset; change fields via update_stack and geometry via set_widget_geometry.
| Parameter | Type | Description |
|---|---|---|
stack (required) |
string | Stack name. |
with_rects |
boolean | Probe media files and include canvas_rect per widget state (default true). |
list_brands
List the global brands (accounts): configured platforms, content language, posting time and timezone. Brands are the accounts posts go out on — a stack targets one or more of them.
No parameters.
list_pools
The named asset pools (shared libraries the brand slots reference): id, name, kind (media/audio/hashtags), resolved count, live folders and which brand slots use each pool (used_by carries the platform tag: platforms/except, both null = every platform). Filter by brand/name/kind — the unfiltered library is large and comes back capped. Also reports brand slots that still hold plain paths instead of pool references (loose_slot_entries).
| Parameter | Type | Description |
|---|---|---|
kind |
enum: media, audio, hashtags |
Only pools of this kind. |
brand |
string | Only pools assigned to this brand's slots. |
name |
string | Only pools whose name contains this text. |
limit |
integer | Max pools to return (default 50, max 200). |
list_presets
List stack presets (reusable stack configurations for create_stack) and assembly-line presets (full automation recipes for run_assembly, with their field values).
No parameters.
list_caption_styles
List all caption styles (built-in + user-defined) with their full look definition — keys usable in update_stack (auto_captions_style/auto_captions_styles) and set_brand_caption_style.
No parameters.
list_video_templates
List output-format templates (resolution/fps/codec/quality) — names usable in update_stack's video_template field.
No parameters.
list_motion_templates
The animated motion-title templates for hook/endcard (update_stack's hook_motion_template / endcard_motion_template) and whether motion capture is available on this machine.
No parameters.
find_clips
List video and/or image files in the configured inbox folder (the drop folder for new footage), newest first, with a used/unused flag. Images feed carousel posts.
| Parameter | Type | Description |
|---|---|---|
kind |
enum: videos, images, all |
What to list (default videos). |
unused_only |
boolean | Only files not yet consumed by a stack. |
limit |
integer | Max entries (default 20). |
list_files
Browse the file system like the app's file picker: without path the drives plus the VidVertex data folder and the inbox; with a folder path its sub-folders and files (exts filters, e.g. 'mp4,mov'). Use the returned paths with assign_media, save_pool, set_brand_pools or view_frame.
| Parameter | Type | Description |
|---|---|---|
path |
string | Folder path; empty lists the roots. |
exts |
any | Comma list or array of extensions to keep. |
limit |
integer | Max files returned (default 500). |
The calendar is read live from the posting service you have configured — Metricool's planner or the Zernio API — and falls back to the newest export CSV when no key is set. The answer names which of the two replied, so an assistant never presents a stale CSV as the live plan.
get_calendar
Already-scheduled posts (date, time, platform, brand, title, status) — live from the Zernio API when a key is configured (source='live'), otherwise from the newest CSV export (source='csv'). Plus the configured upload mode — tells you whether schedule posts via the Zernio API or writes a Zernio/Metricool import CSV for the user.
| Parameter | Type | Description |
|---|---|---|
month |
string | YYYY-MM (± a week around it). Defaults to the current month; pass 'all' for the whole account — that can be thousands of posts and comes back truncated. |
upload_preflight
The upload confirm dialog without uploading: the brand x platform tasks the given stacks produce, the planned count over the day window and every warning (duplicates, platform limits, past posting time). retry_tasks = [{stack, brand, platform}] narrows it to a previous run's failures.
| Parameter | Type | Description |
|---|---|---|
stacks (required) |
array of string | Stack names. |
start_date |
string | YYYY-MM-DD (default today). |
days |
integer | Day window (default 1). |
retry_tasks |
array of object |
get_transcript
Read a stack's auto-captions transcript: the timestamped text (the same form edit_transcript takes back), spoken language and which brand-language translations are cached. Pass 'language' to read one cached translation instead.
| Parameter | Type | Description |
|---|---|---|
stack (required) |
string | Stack name. |
language |
string | Read this language's cached translation instead. |
get_clip_brief
The cached content brief of a stack's main clip (summary, transcript, visual beats, hook moments, risk flags) and the context block the AI generators inject — no API call. analyze_clip produces/refreshes it.
| Parameter | Type | Description |
|---|---|---|
stack (required) |
string | Stack name. |
render_status
Progress of the render batch started by render_batch: per-stack status (pending/rendering/done/error) with video counts, and — once running=false — the final per-stack rendered/stale verdict. Poll roughly once a minute while a batch runs. With no batch in this process (a restarted server, a render started elsewhere) it reports any interrupted render queue plus the rendered/stale verdict from disk — pass 'stacks' to ask about specific ones.
| Parameter | Type | Description |
|---|---|---|
stacks |
array of string | Optional stack names to report the rendered/stale verdict for, whoever rendered them. |
An upload run outlives the process that started it. After a restart
upload_status still answers: a fresh heartbeat means the run is still finishing,
a stale one means it was interrupted — and it names the posts that were made.
upload_status
Progress and result of an upload run started by schedule: running flag, posts so far, preflight warnings, skipped duplicates, failed tasks — and once running=false the complete result object a synchronous run used to return. Without run_id it reports the active run (or the most recent one). Runs persist their state, so this also answers after a server restart: a run still finishing in the previous server process shows as running with a fresh heartbeat, an interrupted one says exactly which posts were already made.
| Parameter | Type | Description |
|---|---|---|
run_id |
string | The run_id schedule returned (optional — default: the active or most recent run). |
get_review_queue
The hub's Review queue: posts an agentic dry run proposed (watch folder, assembly schedule, MCP schedule) with their texts, media file and status (pending/approved/rejected/consumed). view_frame with an entry's file shows it; decide_review decides.
| Parameter | Type | Description |
|---|---|---|
status |
string | Optional filter: pending, approved, rejected or consumed. |
list_schedules
Assembly schedules (hub → Assembly → clock): which preset runs daily at what time on which weekdays, enabled/approved flags and the last run result.
No parameters.
Settings come back with every API key as configured or not configured, never as a value. An assistant cannot read a key, cannot enter one, and cannot switch AI providers or change the guardrails it runs under.
get_settings
The app settings (upload mode, scheduling, inbox folder, render/randomizer options, AI/TTS provider+model, prompt templates, labels, theme) plus configured-flags for the API keys and the current guardrails. Secrets are never returned.
No parameters.
get_app_status
App version, data folder (current + pending change), the cached update verdict, who is connected to the MCP server right now, Google Drive connection state, the configured upload mode and the GPU encoder status.
No parameters.
get_license_status
License status of this install (plan, masked key, expiry) — read-only; activation happens in the app.
No parameters.
check_for_update
Check the update server for a newer VidVertex version now (the 'Check for updates' button). Installing happens in the app.
No parameters.
get_housekeeping
Settings → Storage: disk usage of the cache folders (preview proxies, voiceovers, motion titles, logs) and every stack's rendered outputs, biggest first.
No parameters.
VidVertex can only see the files it uploaded itself. The Drive permission it asks for covers its own uploads, so nothing else in your Drive is ever listed — or deletable.
get_drive_uploads
Settings → Storage → Google Drive uploads: the files VidVertex uploaded to Google Drive for the Metricool modes, the account's quota, and per file whether a scheduled Metricool post still uses it (in_use), it came from a Metricool CSV export (csv_export — free only once that export is imported, the app cannot tell), it is free to delete (free) or the scheduler could not be checked (unverified). Metricool copies media to its own servers when a post is scheduled/imported, so Drive copies are dead weight afterwards.
| Parameter | Type | Description |
|---|---|---|
check_scheduler |
boolean | Check Metricool's scheduler for references (default true; false = faster, every file reports unverified). |
list_backups
The automatic .bakN backup sets of every critical config file (stack.json, brand config, settings …), newest first per file.
No parameters.
list_stack_snapshots
The restore points of a stack (see snapshot_stack), newest first.
| Parameter | Type | Description |
|---|---|---|
stack (required) |
string |
list_zernio_profiles
List the Zernio profiles of the configured account (id + name) — the input for apply_zernio_profile and import_zernio_profiles.
No parameters.
list_metricool_brands
List the Metricool brands (blogs) of the configured account (id, name, timezone, connected networks) — the input for set_brand's metricool_blog_id, which the Metricool API upload mode posts to.
No parameters.
This call uses the stored TTS key to ask the provider for the account's real voice list. The key is used, never returned.
list_voiceover_voices
The configured TTS provider's live voice list (ElevenLabs: the account's real voices incl. clones) — voice ids for set_brand's voiceover_voice or the global tts_voice.
No parameters.
list_ai_providers
The AI and TTS provider/model/voice catalogs Settings → AI offers (models per provider, audio capability, key placeholders). No secrets.
No parameters.
list_languages
The app's language list (code, English and native name) for brand content languages and caption translations.
No parameters.
list_caption_fonts
Installed font families a caption style may use (anything else is silently substituted at render time).
No parameters.
get_prompt_templates
The AI prompt templates (title_desc, first_comment, text_widget, hook, endcard): the shipped default, whether the user overrides it and the effective text. Override via set_settings with the settings_key.
| Parameter | Type | Description |
|---|---|---|
kind |
string | Optional single kind. |
get_folders
The hub's folder tree for stacks or brands (root items + folders with their members).
| Parameter | Type | Description |
|---|---|---|
kind |
string | 'stacks' (default) or 'brands'. |