Veltake Studio
Server Details
Drive Veltake Studio from any AI agent: create film and ad projects, have the Studio agent build scenes on the canvas, price and start renders, and export edited cuts. Also makes single images, video, speech and music in one call; every paid call runs only at the price it was quoted.
- Status
- Healthy
- Uptime
- 100.0% over the last 24 hours
- OAuth
- Works in Glama
- Last Tested
- Transport
- Streamable HTTP · MCP 2025-11-25
- URL
- ChatGPT
- –
- Claude
- –
TDQS
Scored across 40 tools
The app_* tools intentionally duplicate core actions such as generate, upscale, estimate, list_models, list_generations, and import_media, and are scoped only by 'for app screens, not a conversation.' An agent can often tell them apart from descriptions, but the set still contains several near-overlapping pairs that invite misselection.
Most tools use predictable snake_case verb_noun naming, and the app_ prefix is consistently used for UI-specific wrappers. Minor deviations exist, such as app_home/app_library/app_models being noun-style while other app_ tools are verb-style, plus open_* alongside app_home.
With 40 tools, the surface is heavy for the domain, and a meaningful portion is duplicated through app-only wrappers of core conversation tools. The server would be better scoped if UI concerns were separated from the agent-facing tool set.
Core workflows are covered: generation and upscaling with pricing, media import, projects, chats, turns, cuts, exports, and canvas runs. However, several lifecycle gaps remain, including no project/chat/cut update or delete operations, no run cancellation, and only limited export listing/cancel capabilities.
Available Tools
40 toolsapp_generateGenerate from the composer (app)AInspect
For the Veltake app's own screens only — not for a conversation. generate from the composer: this SPENDS the user's coins at expected_cost, the number on the button the person pressed.
| Name | Required | Description | Default |
|---|---|---|---|
| kind | Yes | what to make: image | video | speech | music. Each argument below says which kinds take it | |
| lines | No | speech: the script, in order — each line is {speaker, text, style} | |
| model | Yes | a model id from list_models for this kind | |
| style | No | music: the style — a genre, a mood, the instruments (custom songs) | |
| title | No | music: the song's title (custom songs) | |
| images | No | image, video: hosted image URLs — references for an image model; for a video model the first frame, or with images_are_references the subject/style references (at most the model's max_images). Import a link with import_media first | |
| lyrics | No | music: the words to be sung. With lyrics, title and style are required | |
| prompt | No | image, video: what to make. music: the description of the song (simple mode; for a song with its own lyrics use lyrics) | |
| funding | No | who pays: personal (the person's own coins) or team (their team's pool — only when the person allowed this connection to spend team coins and the team approved this app). Omit to use the payer the person chose when connecting | |
| duration | No | video: seconds, one of the model's durations. music: the song's length in seconds (custom songs only) | |
| speakers | No | speech: the voices, in order (list_models has the voices, accents, styles and paces). Each is {name, voice, accent, style, pace, profile}, all optional except that a script needs at least one speaker. A model with line_style lists no accents, styles or paces: direct each line with its own style instead | |
| last_frame | No | video: a hosted image URL for the LAST frame — only for models with supports_transition; then images holds exactly the first frame | |
| resolution | No | image, video: one of the model's resolutions — a higher tier costs more | |
| video_task | No | video: what reference_video is for — edit (change that one clip; images are references, and with no duration the answer runs the clip's length) or extend (add new footage to it; duration is the new part's length, the answer is that part alone, and images are refused). Omitted, it is a reference; on a model with clip_is_source it is required, and images are refused either way (there a clip is never a reference, an edit runs the clip's length, and an extension answers the clip plus the new part and takes up to 10 seconds). Only for models with video_tasks; needs a prompt and exactly one clip | |
| aspect_ratio | No | image, video: the frame, one of the model's aspect_ratios (e.g. 16:9) | |
| filler_words | No | speech: add filler words and natural interjections to a TWO-speaker dialogue — only for models with filler_words | |
| instrumental | No | music: no vocals | |
| expected_cost | Yes | the coins estimate_generation answered for these very arguments — omit it only when the host confirms prices with the person itself | |
| generate_audio | No | video (and any image model that has it): make the sound too — only for models with supports_audio, and it costs audio_cost more | |
| idempotency_key | No | optional: repeat it on a retry so the retry answers the first generation instead of charging again | |
| reference_audio | No | video: a hosted audio URL to take sound from — only for models with max_reference_audios above 0 | |
| reference_video | No | video: a hosted video URL to take motion or style from, or on a model with clip_is_source the clip to edit or extend (video_task is then required) — only for models with max_reference_videos above 0 | |
| images_are_references | No | video: read images as references to draw from, NOT as the first frame — the video does not start on them. Needs at least one image, cannot be combined with last_frame, and only models with supports_reference take it |
Output Schema
| Name | Required | Description |
|---|---|---|
| v | No | |
| id | Yes | |
| kind | Yes | |
| coins | Yes | |
| model | Yes | |
| takes | No | |
| result | No | |
| status | Yes | |
| balance | No | |
| replayed | No |
app_homeVeltake home (app)ARead-onlyIdempotentInspect
For the Veltake app's own screens only — not for a conversation. Answers the home: balance, recent work, workflows.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
Output Schema
| Name | Required | Description |
|---|---|---|
| v | Yes | |
| host | Yes | |
| kinds | Yes | |
| links | Yes | |
| recent | Yes | |
| balance | No | |
| prefill | No | |
| upscale | Yes | |
| workflows | Yes |
app_import_fileImport an attached file (app)AInspect
For the Veltake app's own screens only — not for a conversation. import_media for a file the person picked in the app.
| Name | Required | Description | Default |
|---|---|---|---|
| file | Yes | the picked file |
Output Schema
| Name | Required | Description |
|---|---|---|
| v | No | |
| url | Yes | |
| kind | Yes | |
| size | Yes | |
| content_type | Yes |
app_libraryThe library (app)ARead-onlyIdempotentInspect
For the Veltake app's own screens only — not for a conversation. list_generations with posters for the grid.
| Name | Required | Description | Default |
|---|---|---|---|
| kind | No | only this kind — omit for all | |
| limit | No | how many (default 20, at most 50) | |
| since | No | optional: only generations of the last N hours | |
| offset | No | where to continue — the previous answer's next_offset |
Output Schema
| Name | Required | Description |
|---|---|---|
| v | No | |
| generations | Yes | |
| next_offset | No |
apply_turnApply the agent's proposalAInspect
Apply a turn's proposed canvas. With run:true also start the run the agent asked for — this SPENDS coins; pass expected_total (the turn's estimate.total_coins) so the charge cannot differ from the quote. Without expected_total, a host that can ask the person confirms the price with them. The agent reviews the results when the run finishes. A turn's cut_proposal (a large cut edit held for review) is applied separately, with cut_only:true.
| Name | Required | Description | Default |
|---|---|---|---|
| run | No | ||
| funding | No | who pays: personal (the person's own coins) or team (their team's pool — only when the person allowed this connection to spend team coins and the team approved this app). Omit to use the payer the person chose when connecting | |
| turn_id | Yes | from send_message | |
| cut_only | No | ||
| expected_total | No |
app_modelsModels for the picker (app)ARead-onlyIdempotentInspect
For the Veltake app's own screens only — not for a conversation. Answers list_models for one kind with the picker's extra fields (logo, badge, a one-line summary, the default).
| Name | Required | Description | Default |
|---|---|---|---|
| kind | Yes | image | video | speech | music |
Output Schema
| Name | Required | Description |
|---|---|---|
| v | No | |
| auto | Yes | |
| kind | No | |
| models | Yes | |
| balance | No |
app_quotePrice the composer (app)BRead-onlyIdempotentInspect
For the Veltake app's own screens only — not for a conversation. estimate_generation for the composer's settings.
| Name | Required | Description | Default |
|---|---|---|---|
| kind | Yes | what to make: image | video | speech | music. Each argument below says which kinds take it | |
| lines | No | speech: the script, in order — each line is {speaker, text, style} | |
| model | Yes | a model id from list_models for this kind | |
| style | No | music: the style — a genre, a mood, the instruments (custom songs) | |
| title | No | music: the song's title (custom songs) | |
| images | No | image, video: hosted image URLs — references for an image model; for a video model the first frame, or with images_are_references the subject/style references (at most the model's max_images). Import a link with import_media first | |
| lyrics | No | music: the words to be sung. With lyrics, title and style are required | |
| prompt | No | image, video: what to make. music: the description of the song (simple mode; for a song with its own lyrics use lyrics) | |
| duration | No | video: seconds, one of the model's durations. music: the song's length in seconds (custom songs only) | |
| speakers | No | speech: the voices, in order (list_models has the voices, accents, styles and paces). Each is {name, voice, accent, style, pace, profile}, all optional except that a script needs at least one speaker. A model with line_style lists no accents, styles or paces: direct each line with its own style instead | |
| last_frame | No | video: a hosted image URL for the LAST frame — only for models with supports_transition; then images holds exactly the first frame | |
| resolution | No | image, video: one of the model's resolutions — a higher tier costs more | |
| video_task | No | video: what reference_video is for — edit (change that one clip; images are references, and with no duration the answer runs the clip's length) or extend (add new footage to it; duration is the new part's length, the answer is that part alone, and images are refused). Omitted, it is a reference; on a model with clip_is_source it is required, and images are refused either way (there a clip is never a reference, an edit runs the clip's length, and an extension answers the clip plus the new part and takes up to 10 seconds). Only for models with video_tasks; needs a prompt and exactly one clip | |
| aspect_ratio | No | image, video: the frame, one of the model's aspect_ratios (e.g. 16:9) | |
| filler_words | No | speech: add filler words and natural interjections to a TWO-speaker dialogue — only for models with filler_words | |
| instrumental | No | music: no vocals | |
| generate_audio | No | video (and any image model that has it): make the sound too — only for models with supports_audio, and it costs audio_cost more | |
| reference_audio | No | video: a hosted audio URL to take sound from — only for models with max_reference_audios above 0 | |
| reference_video | No | video: a hosted video URL to take motion or style from, or on a model with clip_is_source the clip to edit or extend (video_task is then required) — only for models with max_reference_videos above 0 | |
| images_are_references | No | video: read images as references to draw from, NOT as the first frame — the video does not start on them. Needs at least one image, cannot be combined with last_frame, and only models with supports_reference take it |
Output Schema
| Name | Required | Description |
|---|---|---|
| v | No | |
| kind | Yes | |
| coins | Yes | |
| model | Yes | |
| enough | No | |
| balance | No | |
| settings | No |
app_spend_statusDid this spend land (app)ARead-onlyIdempotentInspect
For the Veltake app's own screens only — not for a conversation. Read-only: did the idempotency_key of an unconfirmed app_generate / app_upscale create a generation for this person? Never spends, never retries.
| Name | Required | Description | Default |
|---|---|---|---|
| tool | Yes | the spend the key was sent to | |
| idempotency_key | Yes | the key the spend carried |
Output Schema
| Name | Required | Description |
|---|---|---|
| v | No | |
| id | No | |
| kind | No | |
| coins | No | |
| found | Yes | |
| model | No | |
| status | No |
app_upscaleUpscale from the app (app)AInspect
For the Veltake app's own screens only — not for a conversation. upscale from the app: this SPENDS the user's coins at expected_cost, the number on the button the person pressed.
| Name | Required | Description | Default |
|---|---|---|---|
| kind | Yes | image or video — what the file is | |
| model | No | as passed to estimate_upscale | |
| funding | No | who pays: personal (the person's own coins) or team (their team's pool — only when the person allowed this connection to spend team coins and the team approved this app). Omit to use the payer the person chose when connecting | |
| resolution | No | as passed to estimate_upscale | |
| source_url | Yes | the hosted URL, as passed to estimate_upscale | |
| expected_cost | No | the coins estimate_upscale answered for these very arguments | |
| idempotency_key | No | optional: repeat it on a retry so the retry answers the first upscale instead of charging again |
Output Schema
| Name | Required | Description |
|---|---|---|
| v | No | |
| id | Yes | |
| kind | Yes | |
| coins | Yes | |
| model | Yes | |
| takes | No | |
| result | No | |
| status | Yes | |
| balance | No | |
| replayed | No |
app_upscale_quotePrice an upscale (app)BRead-onlyIdempotentInspect
For the Veltake app's own screens only — not for a conversation. estimate_upscale for the app's Upscale card.
| Name | Required | Description | Default |
|---|---|---|---|
| kind | Yes | image or video — what the file is | |
| model | No | optional: an upscaler id from a previous estimate_upscale answer — omit for the default | |
| resolution | No | optional: the target, one of the upscaler's resolutions — omit for its default | |
| source_url | Yes | the hosted URL of the file to upscale (from import_media or a generation's result_url) |
Output Schema
| Name | Required | Description |
|---|---|---|
| v | No | |
| kind | Yes | |
| coins | Yes | |
| model | Yes | |
| enough | No | |
| balance | No | |
| settings | No |
cancel_generationCancel a generationADestructiveIdempotentInspect
Cancel a queued or running generation. The coins it held are returned in full; the provider is not told, so a result already on its way is discarded. A finished generation cannot be canceled.
| Name | Required | Description | Default |
|---|---|---|---|
| id | Yes | from generate or list_generations |
create_projectCreate a Studio projectAInspect
Create a Studio project (with one empty canvas) and answer its id and canvas id.
| Name | Required | Description | Default |
|---|---|---|---|
| kind | No | film (default) | marketing | |
| name | Yes | project name |
estimate_generationPrice a generationARead-onlyIdempotentInspect
Price a generation without making it. Free, changes nothing. Takes the same arguments as generate (without expected_cost) and answers the coins it would cost, the coin balance and the settings that price is for (resolution, duration, audio). Every check generate makes runs here too, so a refused request is found before the person is asked anything. Pass the answered coins to generate as expected_cost.
| Name | Required | Description | Default |
|---|---|---|---|
| kind | Yes | what to make: image | video | speech | music. Each argument below says which kinds take it | |
| lines | No | speech: the script, in order — each line is {speaker, text, style} | |
| model | Yes | a model id from list_models for this kind | |
| style | No | music: the style — a genre, a mood, the instruments (custom songs) | |
| title | No | music: the song's title (custom songs) | |
| images | No | image, video: hosted image URLs — references for an image model; for a video model the first frame, or with images_are_references the subject/style references (at most the model's max_images). Import a link with import_media first | |
| lyrics | No | music: the words to be sung. With lyrics, title and style are required | |
| prompt | No | image, video: what to make. music: the description of the song (simple mode; for a song with its own lyrics use lyrics) | |
| duration | No | video: seconds, one of the model's durations. music: the song's length in seconds (custom songs only) | |
| speakers | No | speech: the voices, in order (list_models has the voices, accents, styles and paces). Each is {name, voice, accent, style, pace, profile}, all optional except that a script needs at least one speaker. A model with line_style lists no accents, styles or paces: direct each line with its own style instead | |
| last_frame | No | video: a hosted image URL for the LAST frame — only for models with supports_transition; then images holds exactly the first frame | |
| resolution | No | image, video: one of the model's resolutions — a higher tier costs more | |
| video_task | No | video: what reference_video is for — edit (change that one clip; images are references, and with no duration the answer runs the clip's length) or extend (add new footage to it; duration is the new part's length, the answer is that part alone, and images are refused). Omitted, it is a reference; on a model with clip_is_source it is required, and images are refused either way (there a clip is never a reference, an edit runs the clip's length, and an extension answers the clip plus the new part and takes up to 10 seconds). Only for models with video_tasks; needs a prompt and exactly one clip | |
| aspect_ratio | No | image, video: the frame, one of the model's aspect_ratios (e.g. 16:9) | |
| filler_words | No | speech: add filler words and natural interjections to a TWO-speaker dialogue — only for models with filler_words | |
| instrumental | No | music: no vocals | |
| generate_audio | No | video (and any image model that has it): make the sound too — only for models with supports_audio, and it costs audio_cost more | |
| reference_audio | No | video: a hosted audio URL to take sound from — only for models with max_reference_audios above 0 | |
| reference_video | No | video: a hosted video URL to take motion or style from, or on a model with clip_is_source the clip to edit or extend (video_task is then required) — only for models with max_reference_videos above 0 | |
| images_are_references | No | video: read images as references to draw from, NOT as the first frame — the video does not start on them. Needs at least one image, cannot be combined with last_frame, and only models with supports_reference take it |
Output Schema
| Name | Required | Description |
|---|---|---|
| v | No | |
| kind | Yes | |
| coins | Yes | |
| model | Yes | |
| enough | No | |
| balance | No | |
| settings | No |
estimate_runPrice a canvas runARead-onlyIdempotentInspect
Price running a canvas (free, spends nothing): the total in coins, who pays (payer: personal, or team — a team project's runs are always paid from its team's pool), that payer's balance, each node's price and model, and the canvas version the price is for. Pass the total and the version to start_run.
| Name | Required | Description | Default |
|---|---|---|---|
| graph_id | Yes | canvas id, from get_project | |
| force_nodes | No | re-generate these even when a cached result exists | |
| scope_nodes | No | run exactly these nodes (not with from_node_id) | |
| from_node_id | No | run this node and everything downstream of it — omit for the whole canvas |
estimate_upscalePrice an upscaleARead-onlyIdempotentInspect
Price upscaling an image or a video (a sharper, larger copy of a file the person already has). Free, changes nothing. The price comes from the file itself — its size and, for a video, its length and frame rate — so it reads the file first. Answers the coins, the balance, the output size and the targets the upscaler offers. Pass the answered coins to upscale as expected_cost. The file must be hosted: import_media first.
| Name | Required | Description | Default |
|---|---|---|---|
| kind | Yes | image or video — what the file is | |
| model | No | optional: an upscaler id from a previous estimate_upscale answer — omit for the default | |
| resolution | No | optional: the target, one of the upscaler's resolutions — omit for its default | |
| source_url | Yes | the hosted URL of the file to upscale (from import_media or a generation's result_url) |
Output Schema
| Name | Required | Description |
|---|---|---|
| v | No | |
| kind | Yes | |
| coins | Yes | |
| model | Yes | |
| enough | No | |
| balance | No | |
| settings | No |
export_cutRender a cut to a filmAInspect
Queue a render of a cut to a video file — one export per aspect ratio. Rendering spends no coins; the quality rungs and formats the account allows, and a daily export allowance, apply. Poll get_export for the file.
| Name | Required | Description | Default |
|---|---|---|---|
| fit | No | pad (default, letterbox) | crop (fill, keeping each clip's focus) | blur (over a blurred fill) | |
| cut_id | Yes | from list_cuts | |
| format | No | h264 (default) | hevc | prores | |
| quality | No | sd | hd | master — omit for the best the account allows | |
| aspect_ratio | No | one frame, e.g. "9:16" — the same as a one-item aspect_ratios | |
| aspect_ratios | No | frames to render, e.g. ["16:9", "9:16"] — omit for the cut's own; one export each (at most 4) |
generateGenerate an image, video, speech or musicAInspect
Make an image, a video, a spoken script or a song. This SPENDS the user's coins: pass expected_cost exactly as estimate_generation answered it — if the price changed, nothing is charged and the new price is answered. The charge is a reservation of at most that number: a failed or canceled generation is refunded in full and the settlement may return part of it. Every call is paid in coins — a Relax queue or an unlimited allowance does not apply through an agent, and nothing here buys coins. Media (images, last_frame, reference_video, reference_audio) must be hosted: a URL import_media answered, or one on Veltake's own media host — import anything else first. Answers the generation (music answers its two takes); poll get_generation for the result — a host that runs tool tasks waits for the result itself. Repeat idempotency_key on a retry so it answers the first generation instead of charging again. Without expected_cost, a host that can ask the person shows them the price and the generation runs only when they accept; any other host is answered the price (price_required) and nothing is charged.
| Name | Required | Description | Default |
|---|---|---|---|
| kind | Yes | what to make: image | video | speech | music. Each argument below says which kinds take it | |
| lines | No | speech: the script, in order — each line is {speaker, text, style} | |
| model | Yes | a model id from list_models for this kind | |
| style | No | music: the style — a genre, a mood, the instruments (custom songs) | |
| title | No | music: the song's title (custom songs) | |
| images | No | image, video: hosted image URLs — references for an image model; for a video model the first frame, or with images_are_references the subject/style references (at most the model's max_images). Import a link with import_media first | |
| lyrics | No | music: the words to be sung. With lyrics, title and style are required | |
| prompt | No | image, video: what to make. music: the description of the song (simple mode; for a song with its own lyrics use lyrics) | |
| funding | No | who pays: personal (the person's own coins) or team (their team's pool — only when the person allowed this connection to spend team coins and the team approved this app). Omit to use the payer the person chose when connecting | |
| duration | No | video: seconds, one of the model's durations. music: the song's length in seconds (custom songs only) | |
| speakers | No | speech: the voices, in order (list_models has the voices, accents, styles and paces). Each is {name, voice, accent, style, pace, profile}, all optional except that a script needs at least one speaker. A model with line_style lists no accents, styles or paces: direct each line with its own style instead | |
| last_frame | No | video: a hosted image URL for the LAST frame — only for models with supports_transition; then images holds exactly the first frame | |
| resolution | No | image, video: one of the model's resolutions — a higher tier costs more | |
| video_task | No | video: what reference_video is for — edit (change that one clip; images are references, and with no duration the answer runs the clip's length) or extend (add new footage to it; duration is the new part's length, the answer is that part alone, and images are refused). Omitted, it is a reference; on a model with clip_is_source it is required, and images are refused either way (there a clip is never a reference, an edit runs the clip's length, and an extension answers the clip plus the new part and takes up to 10 seconds). Only for models with video_tasks; needs a prompt and exactly one clip | |
| aspect_ratio | No | image, video: the frame, one of the model's aspect_ratios (e.g. 16:9) | |
| filler_words | No | speech: add filler words and natural interjections to a TWO-speaker dialogue — only for models with filler_words | |
| instrumental | No | music: no vocals | |
| expected_cost | No | the coins estimate_generation answered for these very arguments — omit it only when the host confirms prices with the person itself | |
| generate_audio | No | video (and any image model that has it): make the sound too — only for models with supports_audio, and it costs audio_cost more | |
| idempotency_key | No | optional: repeat it on a retry so the retry answers the first generation instead of charging again | |
| reference_audio | No | video: a hosted audio URL to take sound from — only for models with max_reference_audios above 0 | |
| reference_video | No | video: a hosted video URL to take motion or style from, or on a model with clip_is_source the clip to edit or extend (video_task is then required) — only for models with max_reference_videos above 0 | |
| images_are_references | No | video: read images as references to draw from, NOT as the first frame — the video does not start on them. Needs at least one image, cannot be combined with last_frame, and only models with supports_reference take it |
Output Schema
| Name | Required | Description |
|---|---|---|
| v | No | |
| id | Yes | |
| kind | Yes | |
| coins | Yes | |
| model | Yes | |
| takes | No | |
| result | No | |
| status | Yes | |
| balance | No | |
| replayed | No |
get_chatRead a conversationARead-onlyIdempotentInspect
Read one conversation with its transcript: each turn's message, status, reply and what it proposed or changed.
| Name | Required | Description | Default |
|---|---|---|---|
| last | No | only the newest N turns (default 20, at most 50) | |
| chat_id | Yes | from start_chat or list_chats |
get_cutRead a cutARead-onlyIdempotentInspect
Read one cut: its full timeline document (clips, voiceovers, music, captions, aspect ratio) and version. A clip's source is a take, a text card, or an upload (the person's own footage, by url); takes and uploads carry the media behind them, and a clip missing from both has no usable media.
| Name | Required | Description | Default |
|---|---|---|---|
| cut_id | Yes | from list_cuts |
get_exportRead an exportARead-onlyIdempotentInspect
Read an export: status, and when done the film's URL, frame size and frame rate.
| Name | Required | Description | Default |
|---|---|---|---|
| export_id | Yes | from export_cut |
get_generationRead a generationARead-onlyIdempotentInspect
Read one generation made with generate (or in the app's Create): its status (queued, in_progress, succeeded, failed, canceled), progress, and once it has succeeded the result URL, preview image, size and length. Music answers one take per call; the take_group ties the two.
| Name | Required | Description | Default |
|---|---|---|---|
| id | Yes | from generate or list_generations |
Output Schema
| Name | Required | Description |
|---|---|---|
| id | Yes | |
| kind | Yes | |
| take | No | |
| model | No | |
| takes | No | |
| width | No | |
| height | No | |
| prompt | No | |
| status | Yes | |
| progress | No | |
| coin_cost | No | |
| thumb_url | No | |
| created_at | No | |
| result_url | No | |
| take_group | No | |
| duration_sec | No | |
| fail_category | No |
get_projectRead a projectARead-onlyIdempotentInspect
Read one project: its canvases, scenes and shots, cast, and the agent conversations on it.
| Name | Required | Description | Default |
|---|---|---|---|
| project_id | Yes | from list_projects |
get_runRead a runARead-onlyIdempotentInspect
Read a canvas run: status, cost, and each node's state, model and result URLs.
| Name | Required | Description | Default |
|---|---|---|---|
| run_id | Yes | from a turn or apply_turn |
get_turnRead an agent turnARead-onlyIdempotentInspect
Read a turn: its status (running | waiting | done | failed | canceled), the agent's reply (its final answer), the steps it took (kind "call" carries tool; kind "say" is a step where the agent only spoke and has no tool; either may carry say, what the agent said on the way), its proposal, estimate, question, plan and what it changed.
| Name | Required | Description | Default |
|---|---|---|---|
| turn_id | Yes | from send_message |
import_mediaImport media from a link or an attachmentAInspect
Bring a file into the account's uploads and answer a hosted URL to pass to generate (images, last_frame, reference_video, reference_audio), to upscale, or to a Studio send_message as an attachment. Give either url — a DIRECT link to an image, video or audio file, not a web page — or file, a file the person attached in this conversation. The file is kept as a temporary upload.
| Name | Required | Description | Default |
|---|---|---|---|
| url | No | an https link straight to the file | |
| file | No | a file the person attached in this conversation |
interject_turnTell a running turn somethingAInspect
Hand the agent a message WHILE a turn is running ("no, use the other character"): it reads it at its next step instead of finishing the wrong work first. Only a running turn of a conversation you can message; once the turn has ended (or already has messages waiting) it is refused — send it with send_message as the next message instead. Answers how many of your messages the turn has not read yet; get_turn shows the rest. Repeat message_id on a retry so the message lands once. Omitted, it is derived from you, the turn and the words — so the same words sent twice are ONE message (already_received:true says a message was not queued again); pass your own message_id to send a deliberate repeat.
| Name | Required | Description | Default |
|---|---|---|---|
| text | Yes | what you want to tell the agent, in words | |
| turn_id | Yes | the running turn, from send_message or get_chat | |
| message_id | No | optional: your id for this message — repeat it on a retry |
list_chatsList agent conversationsARead-onlyIdempotentInspect
List the agent conversations on a project (yours, and any a teammate shared), newest first, without their transcripts.
| Name | Required | Description | Default |
|---|---|---|---|
| project_id | Yes | from list_projects |
list_cutsList a project's cutsARead-onlyIdempotentInspect
List a project's cuts (edited films), each with its length, clip count and newest export.
| Name | Required | Description | Default |
|---|---|---|---|
| project_id | Yes | from list_projects |
list_generationsList generationsARead-onlyIdempotentInspect
List the account's Create generations, newest first (logos and Studio takes are not listed here). limit defaults to 20, at most 50; next_offset pages on.
| Name | Required | Description | Default |
|---|---|---|---|
| kind | No | only this kind — omit for all | |
| limit | No | how many (default 20, at most 50) | |
| offset | No | where to continue — the previous answer's next_offset (default 0) |
Output Schema
| Name | Required | Description |
|---|---|---|
| generations | Yes | |
| next_offset | No |
list_modelsList generation modelsARead-onlyIdempotentInspect
List the models that make one kind of creation — image, video, speech or music. Each has its id, name and maker, what it accepts (aspect ratios, resolutions, durations, audio, reference images, voices, lengths) and what a default generation costs in coins; the coin balance comes too. Pass a model's id to estimate_generation and generate.
| Name | Required | Description | Default |
|---|---|---|---|
| kind | Yes | image | video | speech | music |
list_projectsList Studio projectsBRead-onlyIdempotentInspect
List the account's Studio projects (film and marketing), newest first, with their ids.
| Name | Required | Description | Default |
|---|---|---|---|
| kind | No | film | marketing — omit for both |
open_generation_trayShow recent generationsARead-onlyIdempotentInspect
Show the person the generations of the last 24 hours, live, each one playable. Use it when they ask what is running or what was just made. Takes no arguments.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
Output Schema
| Name | Required | Description |
|---|---|---|
| count | Yes | |
| opened | Yes | |
| running | Yes |
open_veltakeOpen VeltakeARead-onlyIdempotentInspect
Open Veltake's home for the person: a composer for images, videos, voice and music that shows each generation's price in coins before it is made, their recent work, and ready-made workflows. Use it when the person wants to browse, pick a model or settings themselves, or start from a workflow. Takes no arguments; kind and prompt optionally pre-fill the composer. The answer is a short summary for you — the home itself is shown to the person.
| Name | Required | Description | Default |
|---|---|---|---|
| kind | No | optional: the composer's starting kind | |
| prompt | No | optional: words to pre-fill the composer with |
Output Schema
| Name | Required | Description |
|---|---|---|
| note | No | |
| opened | Yes | |
| balance | No |
retry_turnRegenerate or edit the latest messageADestructiveInspect
Ask again: regenerate the conversation's LATEST message (omit message), or replace its words (message) and let the agent answer the edit. The old answer is kept as an earlier version and stops being part of the conversation. Only your own message, only the latest one, never while it is running; refused while what it changed outside the canvas is still in place — undo_turn it (and its reviews) first. Waits like send_message.
| Name | Required | Description | Default |
|---|---|---|---|
| message | No | the edited words — omit to regenerate the same message | |
| turn_id | Yes | the latest message's turn, from send_message or get_chat |
send_messageMessage the Studio agentAInspect
Send a message to the Studio agent and wait (up to ~45s) for its answer. The agent builds on a working copy and answers with a PROPOSAL (apply it with apply_turn), a question, a priced plan (answer with plan_approved:true to build it), or a run request with its price. If the turn is still working when the wait ends, poll get_turn. A host that runs tool tasks gets the turn as a task instead and waits for its answer.
| Name | Required | Description | Default |
|---|---|---|---|
| chat_id | Yes | from start_chat | |
| message | Yes | what you want, in words | |
| attachments | No | hosted media URLs (≤4) | |
| plan_approved | No | true when this message approves the plan the agent proposed |
start_chatOpen an agent conversationBInspect
Open a conversation with the Studio agent on a project's canvas. Answers the chat id.
| Name | Required | Description | Default |
|---|---|---|---|
| graph_id | No | canvas id — omit for the project's first canvas | |
| project_id | Yes | from list_projects |
start_runRun a canvasAInspect
Start rendering a canvas. This SPENDS the user's coins: pass expected_total and version exactly as estimate_run answered them — if the canvas or its price changed since, the run is refused and nothing is spent. Without both, a host that can ask the person confirms the price with them; any other host is answered the price and the version. Poll get_run (a host that runs tool tasks waits for it itself).
| Name | Required | Description | Default |
|---|---|---|---|
| funding | No | who pays: personal (the person's own coins) or team (their team's pool — only when the person allowed this connection to spend team coins and the team approved this app). Omit to use the payer the person chose when connecting | |
| version | No | the canvas version from estimate_run (with expected_total) | |
| graph_id | Yes | canvas id | |
| force_nodes | No | as passed to estimate_run | |
| scope_nodes | No | as passed to estimate_run | |
| from_node_id | No | as passed to estimate_run | |
| expected_total | No | total_coins from estimate_run — omit both only when the host confirms prices with the person itself | |
| idempotency_key | No | optional: repeat it on a retry so the retry answers the first run instead of charging again |
stop_turnStop an agent turnADestructiveInspect
Stop a running turn (its work so far is kept) or cancel a waiting turn's review.
| Name | Required | Description | Default |
|---|---|---|---|
| turn_id | Yes | from send_message |
undo_turnUndo what a turn changedADestructiveInspect
Revert what a turn changed OUTSIDE the canvas — cuts it created or edited, voiceovers or music it placed, notes it wrote, shots it filed — each only while it is still what the agent wrote. A canvas proposal never lands without apply_turn, so it needs no undo.
| Name | Required | Description | Default |
|---|---|---|---|
| turn_id | Yes | from send_message or get_chat |
upscaleUpscale an image or a videoAInspect
Upscale an image or a video. This SPENDS the user's coins: pass expected_cost exactly as estimate_upscale answered it for these arguments — if the price changed, nothing is charged and the new price is answered. A failed or canceled upscale is refunded in full. Answers the generation; poll get_generation for the result (a host that runs tool tasks waits for it itself). Repeat idempotency_key on a retry. Without expected_cost, a host that can ask the person confirms the price with them; any other host is answered the price and nothing is charged.
| Name | Required | Description | Default |
|---|---|---|---|
| kind | Yes | image or video — what the file is | |
| model | No | as passed to estimate_upscale | |
| funding | No | who pays: personal (the person's own coins) or team (their team's pool — only when the person allowed this connection to spend team coins and the team approved this app). Omit to use the payer the person chose when connecting | |
| resolution | No | as passed to estimate_upscale | |
| source_url | Yes | the hosted URL, as passed to estimate_upscale | |
| expected_cost | No | the coins estimate_upscale answered for these very arguments | |
| idempotency_key | No | optional: repeat it on a retry so the retry answers the first upscale instead of charging again |
Output Schema
| Name | Required | Description |
|---|---|---|
| v | No | |
| id | Yes | |
| kind | Yes | |
| coins | Yes | |
| model | Yes | |
| takes | No | |
| result | No | |
| status | Yes | |
| balance | No | |
| replayed | No |
Tool Schema Changelog
Recent tool additions, removals, and schema changes observed during successful MCP inspections.
5 tool updates
- Changed
app_generate2 fields changed- changed
Input schema / properties / expected_cost / descriptionPrevious value: -"the coins estimate_generation answered for these very arguments"New value: +"the coins estimate_generation answered for these very arguments — omit it only when the host confirms prices with the person itself" - added
Output schema / properties / resultAdded value: +{ + "additionalProperties": true, + "properties": { + "coin_cost": { + "minimum": 0, + "type": "integer" + }, + "created_at": { + "type": "string" + }, + "duration_sec": { + "type": "number" + }, + "fail_category": { + "type": "string" + }, + "height": { + "type": "integer" + }, + "id": { + "type": "string" + }, + "kind": { + "type": "string" + }, + "model": { + "additionalProperties": true, + "properties": { + "id": { + "type": "string" + }, + "name": { + "type": "string" + }, + "vendor": { + "type": "string" + } + }, + "required": [ + "id" + ], + "type": "object" + }, + "progress": { + "maximum": 100, + "minimum": 0, + "type": "number" + }, + "prompt": { + "type": "string" + }, + "result_url": { + "type": "string" + }, + "status": { + "enum": [ + "queued", + "in_progress", + "succeeded", + "failed", + "canceled", + "submit_unknown" + ], + "type": "string" + }, + "take": { + "type": "integer" + }, + "take_group": { + "type": "string" + }, + "takes": { + "type": "integer" + }, + "thumb_url": { + "type": "string" + }, + "width": { + "type": "integer" + } + }, + "required": [ + "id", + "status", + "kind" + ], + "type": "object" +}
- Changed
app_upscale2 fields changed- changed
Input schema / requiredPrevious value: -[ - "kind", - "source_url", - "expected_cost" -]New value: +[ + "kind", + "source_url" +] - added
Output schema / properties / resultAdded value: +{ + "additionalProperties": true, + "properties": { + "coin_cost": { + "minimum": 0, + "type": "integer" + }, + "created_at": { + "type": "string" + }, + "duration_sec": { + "type": "number" + }, + "fail_category": { + "type": "string" + }, + "height": { + "type": "integer" + }, + "id": { + "type": "string" + }, + "kind": { + "type": "string" + }, + "model": { + "additionalProperties": true, + "properties": { + "id": { + "type": "string" + }, + "name": { + "type": "string" + }, + "vendor": { + "type": "string" + } + }, + "required": [ + "id" + ], + "type": "object" + }, + "progress": { + "maximum": 100, + "minimum": 0, + "type": "number" + }, + "prompt": { + "type": "string" + }, + "result_url": { + "type": "string" + }, + "status": { + "enum": [ + "queued", + "in_progress", + "succeeded", + "failed", + "canceled", + "submit_unknown" + ], + "type": "string" + }, + "take": { + "type": "integer" + }, + "take_group": { + "type": "string" + }, + "takes": { + "type": "integer" + }, + "thumb_url": { + "type": "string" + }, + "width": { + "type": "integer" + } + }, + "required": [ + "id", + "status", + "kind" + ], + "type": "object" +}
- Changed
generate3 fields changed- changed
Input schema / properties / expected_cost / descriptionPrevious value: -"the coins estimate_generation answered for these very arguments"New value: +"the coins estimate_generation answered for these very arguments — omit it only when the host confirms prices with the person itself" - changed
Input schema / requiredPrevious value: -[ - "kind", - "model", - "expected_cost" -]New value: +[ + "kind", + "model" +] - added
Output schema / properties / resultAdded value: +{ + "additionalProperties": true, + "properties": { + "coin_cost": { + "minimum": 0, + "type": "integer" + }, + "created_at": { + "type": "string" + }, + "duration_sec": { + "type": "number" + }, + "fail_category": { + "type": "string" + }, + "height": { + "type": "integer" + }, + "id": { + "type": "string" + }, + "kind": { + "type": "string" + }, + "model": { + "additionalProperties": true, + "properties": { + "id": { + "type": "string" + }, + "name": { + "type": "string" + }, + "vendor": { + "type": "string" + } + }, + "required": [ + "id" + ], + "type": "object" + }, + "progress": { + "maximum": 100, + "minimum": 0, + "type": "number" + }, + "prompt": { + "type": "string" + }, + "result_url": { + "type": "string" + }, + "status": { + "enum": [ + "queued", + "in_progress", + "succeeded", + "failed", + "canceled", + "submit_unknown" + ], + "type": "string" + }, + "take": { + "type": "integer" + }, + "take_group": { + "type": "string" + }, + "takes": { + "type": "integer" + }, + "thumb_url": { + "type": "string" + }, + "width": { + "type": "integer" + } + }, + "required": [ + "id", + "status", + "kind" + ], + "type": "object" +}
- Changed
start_run3 fields changed- changed
Input schema / properties / expected_total / descriptionPrevious value: -"total_coins from estimate_run"New value: +"total_coins from estimate_run — omit both only when the host confirms prices with the person itself" - changed
Input schema / properties / version / descriptionPrevious value: -"the canvas version from estimate_run"New value: +"the canvas version from estimate_run (with expected_total)" - changed
Input schema / requiredPrevious value: -[ - "graph_id", - "version", - "expected_total" -]New value: +[ + "graph_id" +]
- Changed
upscale2 fields changed- changed
Input schema / requiredPrevious value: -[ - "kind", - "source_url", - "expected_cost" -]New value: +[ + "kind", + "source_url" +] - added
Output schema / properties / resultAdded value: +{ + "additionalProperties": true, + "properties": { + "coin_cost": { + "minimum": 0, + "type": "integer" + }, + "created_at": { + "type": "string" + }, + "duration_sec": { + "type": "number" + }, + "fail_category": { + "type": "string" + }, + "height": { + "type": "integer" + }, + "id": { + "type": "string" + }, + "kind": { + "type": "string" + }, + "model": { + "additionalProperties": true, + "properties": { + "id": { + "type": "string" + }, + "name": { + "type": "string" + }, + "vendor": { + "type": "string" + } + }, + "required": [ + "id" + ], + "type": "object" + }, + "progress": { + "maximum": 100, + "minimum": 0, + "type": "number" + }, + "prompt": { + "type": "string" + }, + "result_url": { + "type": "string" + }, + "status": { + "enum": [ + "queued", + "in_progress", + "succeeded", + "failed", + "canceled", + "submit_unknown" + ], + "type": "string" + }, + "take": { + "type": "integer" + }, + "take_group": { + "type": "string" + }, + "takes": { + "type": "integer" + }, + "thumb_url": { + "type": "string" + }, + "width": { + "type": "integer" + } + }, + "required": [ + "id", + "status", + "kind" + ], + "type": "object" +}
4 tool updates
- Changed
app_generate2 fields changed- changed
Input schema / properties / reference_video / descriptionPrevious value: -"video: a hosted video URL to take motion or style from — only for models with max_reference_videos above 0"New value: +"video: a hosted video URL to take motion or style from, or on a model with clip_is_source the clip to edit or extend (video_task is then required) — only for models with max_reference_videos above 0" - changed
Input schema / properties / video_task / descriptionPrevious value: -"video: what reference_video is for — edit (change that one clip; images are references, and with no duration the answer runs the clip's length) or extend (add new footage to it; duration is the new part's length, the answer is that part alone, and images are refused). Omitted, it is a reference. Only for models with video_tasks; needs a prompt and exactly one clip"New value: +"video: what reference_video is for — edit (change that one clip; images are references, and with no duration the answer runs the clip's length) or extend (add new footage to it; duration is the new part's length, the answer is that part alone, and images are refused). Omitted, it is a reference; on a model with clip_is_source it is required, and images are refused either way (there a clip is never a reference, an edit runs the clip's length, and an extension answers the clip plus the new part and takes up to 10 seconds). Only for models with video_tasks; needs a prompt and exactly one clip"
- Changed
app_quote2 fields changed- changed
Input schema / properties / reference_video / descriptionPrevious value: -"video: a hosted video URL to take motion or style from — only for models with max_reference_videos above 0"New value: +"video: a hosted video URL to take motion or style from, or on a model with clip_is_source the clip to edit or extend (video_task is then required) — only for models with max_reference_videos above 0" - changed
Input schema / properties / video_task / descriptionPrevious value: -"video: what reference_video is for — edit (change that one clip; images are references, and with no duration the answer runs the clip's length) or extend (add new footage to it; duration is the new part's length, the answer is that part alone, and images are refused). Omitted, it is a reference. Only for models with video_tasks; needs a prompt and exactly one clip"New value: +"video: what reference_video is for — edit (change that one clip; images are references, and with no duration the answer runs the clip's length) or extend (add new footage to it; duration is the new part's length, the answer is that part alone, and images are refused). Omitted, it is a reference; on a model with clip_is_source it is required, and images are refused either way (there a clip is never a reference, an edit runs the clip's length, and an extension answers the clip plus the new part and takes up to 10 seconds). Only for models with video_tasks; needs a prompt and exactly one clip"
- Changed
estimate_generation2 fields changed- changed
Input schema / properties / reference_video / descriptionPrevious value: -"video: a hosted video URL to take motion or style from — only for models with max_reference_videos above 0"New value: +"video: a hosted video URL to take motion or style from, or on a model with clip_is_source the clip to edit or extend (video_task is then required) — only for models with max_reference_videos above 0" - changed
Input schema / properties / video_task / descriptionPrevious value: -"video: what reference_video is for — edit (change that one clip; images are references, and with no duration the answer runs the clip's length) or extend (add new footage to it; duration is the new part's length, the answer is that part alone, and images are refused). Omitted, it is a reference. Only for models with video_tasks; needs a prompt and exactly one clip"New value: +"video: what reference_video is for — edit (change that one clip; images are references, and with no duration the answer runs the clip's length) or extend (add new footage to it; duration is the new part's length, the answer is that part alone, and images are refused). Omitted, it is a reference; on a model with clip_is_source it is required, and images are refused either way (there a clip is never a reference, an edit runs the clip's length, and an extension answers the clip plus the new part and takes up to 10 seconds). Only for models with video_tasks; needs a prompt and exactly one clip"
- Changed
generate2 fields changed- changed
Input schema / properties / reference_video / descriptionPrevious value: -"video: a hosted video URL to take motion or style from — only for models with max_reference_videos above 0"New value: +"video: a hosted video URL to take motion or style from, or on a model with clip_is_source the clip to edit or extend (video_task is then required) — only for models with max_reference_videos above 0" - changed
Input schema / properties / video_task / descriptionPrevious value: -"video: what reference_video is for — edit (change that one clip; images are references, and with no duration the answer runs the clip's length) or extend (add new footage to it; duration is the new part's length, the answer is that part alone, and images are refused). Omitted, it is a reference. Only for models with video_tasks; needs a prompt and exactly one clip"New value: +"video: what reference_video is for — edit (change that one clip; images are references, and with no duration the answer runs the clip's length) or extend (add new footage to it; duration is the new part's length, the answer is that part alone, and images are refused). Omitted, it is a reference; on a model with clip_is_source it is required, and images are refused either way (there a clip is never a reference, an edit runs the clip's length, and an extension answers the clip plus the new part and takes up to 10 seconds). Only for models with video_tasks; needs a prompt and exactly one clip"
4 tool updates
- Changed
app_generate1 field changed- added
Input schema / properties / video_taskAdded value: +{ + "description": "video: what reference_video is for — edit (change that one clip; images are references, and with no duration the answer runs the clip's length) or extend (add new footage to it; duration is the new part's length, the answer is that part alone, and images are refused). Omitted, it is a reference. Only for models with video_tasks; needs a prompt and exactly one clip", + "type": "string" +}
- Changed
app_quote1 field changed- added
Input schema / properties / video_taskAdded value: +{ + "description": "video: what reference_video is for — edit (change that one clip; images are references, and with no duration the answer runs the clip's length) or extend (add new footage to it; duration is the new part's length, the answer is that part alone, and images are refused). Omitted, it is a reference. Only for models with video_tasks; needs a prompt and exactly one clip", + "type": "string" +}
- Changed
estimate_generation1 field changed- added
Input schema / properties / video_taskAdded value: +{ + "description": "video: what reference_video is for — edit (change that one clip; images are references, and with no duration the answer runs the clip's length) or extend (add new footage to it; duration is the new part's length, the answer is that part alone, and images are refused). Omitted, it is a reference. Only for models with video_tasks; needs a prompt and exactly one clip", + "type": "string" +}
- Changed
generate1 field changed- added
Input schema / properties / video_taskAdded value: +{ + "description": "video: what reference_video is for — edit (change that one clip; images are references, and with no duration the answer runs the clip's length) or extend (add new footage to it; duration is the new part's length, the answer is that part alone, and images are refused). Omitted, it is a reference. Only for models with video_tasks; needs a prompt and exactly one clip", + "type": "string" +}
4 tool updates
- Changed
app_generate5 fields changed- added
Input schema / properties / filler_wordsAdded value: +{ + "description": "speech: add filler words and natural interjections to a TWO-speaker dialogue — only for models with filler_words", + "type": "boolean" +} - changed
Input schema / properties / lines / descriptionPrevious value: -"speech: the script, in order — each line is {speaker, text}"New value: +"speech: the script, in order — each line is {speaker, text, style}" - added
Input schema / properties / lines / items / properties / styleAdded value: +{ + "description": "how this line is said, in your own words (tone, emotion, pace) — only for models with line_style, at most max_line_style_chars", + "type": "string" +} - changed
Input schema / properties / lines / items / properties / text / descriptionPrevious value: -"what they say"New value: +"what they say — on a model with tags, a sound tag from its list may sit inside the words (e.g. <laugh>)" - changed
Input schema / properties / speakers / descriptionPrevious value: -"speech: the voices, in order (list_models has the voices, accents, styles and paces). Each is {name, voice, accent, style, pace, profile}, all optional except that a script needs at least one speaker"New value: +"speech: the voices, in order (list_models has the voices, accents, styles and paces). Each is {name, voice, accent, style, pace, profile}, all optional except that a script needs at least one speaker. A model with line_style lists no accents, styles or paces: direct each line with its own style instead"
- Changed
app_quote5 fields changed- added
Input schema / properties / filler_wordsAdded value: +{ + "description": "speech: add filler words and natural interjections to a TWO-speaker dialogue — only for models with filler_words", + "type": "boolean" +} - changed
Input schema / properties / lines / descriptionPrevious value: -"speech: the script, in order — each line is {speaker, text}"New value: +"speech: the script, in order — each line is {speaker, text, style}" - added
Input schema / properties / lines / items / properties / styleAdded value: +{ + "description": "how this line is said, in your own words (tone, emotion, pace) — only for models with line_style, at most max_line_style_chars", + "type": "string" +} - changed
Input schema / properties / lines / items / properties / text / descriptionPrevious value: -"what they say"New value: +"what they say — on a model with tags, a sound tag from its list may sit inside the words (e.g. <laugh>)" - changed
Input schema / properties / speakers / descriptionPrevious value: -"speech: the voices, in order (list_models has the voices, accents, styles and paces). Each is {name, voice, accent, style, pace, profile}, all optional except that a script needs at least one speaker"New value: +"speech: the voices, in order (list_models has the voices, accents, styles and paces). Each is {name, voice, accent, style, pace, profile}, all optional except that a script needs at least one speaker. A model with line_style lists no accents, styles or paces: direct each line with its own style instead"
- Changed
estimate_generation5 fields changed- added
Input schema / properties / filler_wordsAdded value: +{ + "description": "speech: add filler words and natural interjections to a TWO-speaker dialogue — only for models with filler_words", + "type": "boolean" +} - changed
Input schema / properties / lines / descriptionPrevious value: -"speech: the script, in order — each line is {speaker, text}"New value: +"speech: the script, in order — each line is {speaker, text, style}" - added
Input schema / properties / lines / items / properties / styleAdded value: +{ + "description": "how this line is said, in your own words (tone, emotion, pace) — only for models with line_style, at most max_line_style_chars", + "type": "string" +} - changed
Input schema / properties / lines / items / properties / text / descriptionPrevious value: -"what they say"New value: +"what they say — on a model with tags, a sound tag from its list may sit inside the words (e.g. <laugh>)" - changed
Input schema / properties / speakers / descriptionPrevious value: -"speech: the voices, in order (list_models has the voices, accents, styles and paces). Each is {name, voice, accent, style, pace, profile}, all optional except that a script needs at least one speaker"New value: +"speech: the voices, in order (list_models has the voices, accents, styles and paces). Each is {name, voice, accent, style, pace, profile}, all optional except that a script needs at least one speaker. A model with line_style lists no accents, styles or paces: direct each line with its own style instead"
- Changed
generate5 fields changed- added
Input schema / properties / filler_wordsAdded value: +{ + "description": "speech: add filler words and natural interjections to a TWO-speaker dialogue — only for models with filler_words", + "type": "boolean" +} - changed
Input schema / properties / lines / descriptionPrevious value: -"speech: the script, in order — each line is {speaker, text}"New value: +"speech: the script, in order — each line is {speaker, text, style}" - added
Input schema / properties / lines / items / properties / styleAdded value: +{ + "description": "how this line is said, in your own words (tone, emotion, pace) — only for models with line_style, at most max_line_style_chars", + "type": "string" +} - changed
Input schema / properties / lines / items / properties / text / descriptionPrevious value: -"what they say"New value: +"what they say — on a model with tags, a sound tag from its list may sit inside the words (e.g. <laugh>)" - changed
Input schema / properties / speakers / descriptionPrevious value: -"speech: the voices, in order (list_models has the voices, accents, styles and paces). Each is {name, voice, accent, style, pace, profile}, all optional except that a script needs at least one speaker"New value: +"speech: the voices, in order (list_models has the voices, accents, styles and paces). Each is {name, voice, accent, style, pace, profile}, all optional except that a script needs at least one speaker. A model with line_style lists no accents, styles or paces: direct each line with its own style instead"
40 tool updates
- First observed
app_generate - First observed
app_home - First observed
app_import_file - First observed
app_library - First observed
app_models - First observed
app_quote - First observed
app_spend_status - First observed
app_upscale - First observed
app_upscale_quote - First observed
apply_turn - First observed
cancel_generation - First observed
create_project - First observed
estimate_generation - First observed
estimate_run - First observed
estimate_upscale - First observed
export_cut - First observed
generate - First observed
get_chat - First observed
get_cut - First observed
get_export - First observed
get_generation - First observed
get_project - First observed
get_run - First observed
get_turn - First observed
import_media - First observed
interject_turn - First observed
list_chats - First observed
list_cuts - First observed
list_generations - First observed
list_models - First observed
list_projects - First observed
open_generation_tray - First observed
open_veltake - First observed
retry_turn - First observed
send_message - First observed
start_chat - First observed
start_run - First observed
stop_turn - First observed
undo_turn - First observed
upscale
Publisher details
- Operator
- Rolio Intelligence LLC · Publisher source
- Operator website
- https://veltake.ai/ · Publisher source
- Vendor relationship
- First-party · Publisher source
- Documentation
- https://veltake.ai/en/mcp
- Trust center
- Unknown
- Restrictions
- Unknown
Related MCP Servers
- AlicenseNot gradedqualityCmaintenanceRemote MCP server that lets AI assistants read tracked competitive intelligence — competitor news, reviews, website changes, social posts and ads — and act on it by managing projects, competitors, battle cards, reports and canvases. Every answer carries a source and a date, and write actions only publish when explicitly shared.MIT
- AlicenseCqualityCmaintenanceCompetitor Monitor AI - MCP server providing AI-powered tools and automation by MEOK AI Labs112 npm29 PyPIMIT
- AlicenseAqualityDmaintenanceEnables brand visibility monitoring across major AI platforms like ChatGPT, Claude, Gemini, and Perplexity. It allows users to track visibility scores, analyze competitor data, and receive actionable insights to improve AI-generated brand recommendations.1623 npm1MIT

industrylens-mcpofficial
AlicenseNot gradedqualityCmaintenanceBrowse IndustryLens's published competitive-intelligence reports and head-to-head competitor comparisons from any AI agent — real, source-backed data.MIT
Glama MCP Gateway
Add one secure layer between your agents and this server.