Maestro MCP Server
OfficialMaestro MCP Server creates and manages AI-generated videos from natural-language briefs, with iteration, monitoring, and task listing.
Create videos (
maestro_create_video): Generate a complete video from a text prompt; Maestro handles scripting, media sourcing/creation, voiceover, music, editing, captions, and rendering. Specify optional parameters such as style, voice, duration, aspect ratio, quality, production scenario (narrated, drama, avatar, motion, slideshow), output languages, reference media URLs, callback URL, and action (generate/remix/edit/extend).Iterate on existing videos: Use
ref_task_idwithactionset toremix,edit, orextendto modify, remix, or extend a previously created video.Monitor task progress (
maestro_get_task): Check status (pending, processing, succeeded, failed) and retrieve final outputs, including video URLs, captions, cover images, duration, and QC scores for each language variant.List past tasks (
maestro_list_tasks): Retrieve recent video generation tasks, with optional filters for creation time and a configurable result limit (up to 100).Flexible production settings: Control aspect ratio (9:16, 16:9, 1:1), duration (1–600 seconds), visual style (cinematic, editorial, neon, retro, etc.), narration voice (warm-female, documentary-male, etc.), quality tier (draft, standard, premium), output languages, and reference images/videos/audio.
Webhook notifications: Optionally provide a callback URL to receive automatic notifications when a task succeeds or fails.
MCP integration: Works as an MCP server and can be configured with Claude Desktop or other MCP clients.
Click on "Install Server".
Wait a few minutes for the server to deploy. Once ready, it will show a "Started" state.
In the chat, type
@followed by the MCP server name and your instructions, e.g., "@Maestro MCP ServerCreate a 30-second product demo video with upbeat music and professional voiceover."
That's it! The server will respond to your query, and you can continue using it as needed.
Here is a step-by-step guide with screenshots.
Maestro MCP Server
Produce complete videos from a natural-language brief with Maestro through the Ace Data Cloud API. Maestro plans the script, creates or sources media, generates voiceover and music, edits, captions, renders, and returns finished video variants.
Install
pip install mcp-maestro
export ACEDATACLOUD_API_TOKEN="your-token"
mcp-maestroGet an API token from platform.acedata.cloud.
For a hosted connection, use https://maestro.mcp.acedata.cloud/mcp. It accepts a direct Ace Data Cloud Bearer token and supports OAuth sign-in.
Related MCP server: vimax-mcp
Tools
Tool | Purpose |
| Create a video or run |
| Read progress, status, and final language variants for one task |
Example
Ask an MCP client:
Create a 45-second 16:9 English product launch video from this product photo. Use an editorial style and a documentary voice.
The tool returns a task_id immediately. Query that ID until status is succeeded or failed. Successful tasks expose videos in response.data.variants.
Production contract
Maestro provides the complete capability set on every request: all actions and scenarios, 5–300 seconds, up to 4 languages, and 1080p/30fps output. The base price is 0.60 Credits per delivered second. Avatar uses a 1.15× scenario multiplier, drama uses 1.35×, and each additional delivered language adds 6 Credits. Failed tasks and task polling are free.
To revise an existing result, call maestro_create_video with an iteration action and the prior task ID:
{
"prompt": "Keep the visuals but tighten the first 10 seconds and use a warmer voice.",
"action": "edit",
"ref_task_id": "previous-task-id"
}MCP Client Configuration
{
"mcpServers": {
"maestro": {
"command": "uvx",
"args": ["mcp-maestro"],
"env": {
"ACEDATACLOUD_API_TOKEN": "your-token"
}
}
}
}Development
pip install -e ".[dev,test,release]"
pytest --cov=core --cov=tools
ruff check .
ruff format --check .
mypy core tools main.py
python -m buildSee the Maestro API documentation for billing and response details.
Documentation
Available Tools
2 toolsmaestro_create_videoAInspect
Create a complete video or iterate on a prior Maestro video.
The call returns immediately with a task_id. Use maestro_get_task to monitor progress and obtain
each completed language variant's output_url, captions_url, cover_url, duration, and QC score.
| Name | Required | Description | Default |
|---|---|---|---|
| langs | No | Output language codes, such as zh-cn, en, ja, or pt-br. Each language produces a localized video variant. | |
| style | No | Visual style preset. Named presets: cinematic, glass, luxury, swiss, modern, editorial, warm, vibrant, neon, mono, pastel, bold, industrial, futuristic, retro. Use 'auto' or omit to let the server decide. | |
| voice | No | Narration voice preset. Use 'auto' or omit to let the server decide. | |
| action | No | generate creates a new video. remix, edit, and extend iterate on a previous Maestro task and require ref_task_id. | generate |
| aspect | No | Output aspect ratio: 9:16, 16:9, or 1:1. Omit to use the server default (9:16) on a new video, or to inherit the source task's ratio when iterating. | |
| prompt | Yes | Natural-language production brief: topic, audience, scenes, tone, and desired outcome. Maestro plans the script, assets, voiceover, edit, captions, and render. | |
| duration | No | Target video duration in seconds, from 5 to 300. Omit to use the server default (30) on a new video, or to inherit the source task's duration when iterating. | |
| scenario | No | Production workflow: auto, narrated, captions, avatar, or drama. Captions requires a source video in file_urls. Avatar normally needs a portrait in file_urls. Omit to let the server decide. | |
| file_urls | No | Reference image, video, or audio URLs for Maestro to use. | |
| ref_task_id | No | Previous Maestro task ID for remix, edit, or extend. | |
| callback_url | No | Optional webhook URL called when the task succeeds or fails. |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full behavioral burden. It discloses the key non-obvious behavior: the call is asynchronous and returns immediately with a task_id, with progress and results available only through another tool. It could add failure/reversibility details, but the async handoff is well communicated.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two tight sentences: the first states the core action, the second covers the async contract and points to the monitoring sibling. No filler or redundancy; every sentence earns its place.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For an 11-parameter tool with rich schema coverage and an output schema, the description is nearly sufficient: it sets expectations for async invocation and result retrieval. It could briefly mention the iteration dependency on ref_task_id, but that is already fully documented in the schema and action parameter.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the baseline is 3. The description itself adds no parameter-level detail beyond what the schema already documents, but it doesn't need to; the schema provides thorough meaning for all 11 parameters.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description uses a specific verb ('Create') with a clear resource ('a complete video') and explicitly covers the iterate-on-prior case, distinguishing it cleanly from the only sibling, maestro_get_task. No ambiguity about what this tool produces.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description states the asynchronous flow: this tool returns immediately with task_id, then directs the agent to maestro_get_task for monitoring and output retrieval. It gives explicit routing to the alternative tool and makes the division of labor clear.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
maestro_get_taskAInspect
Get live progress and final outputs for one Maestro video task.
| Name | Required | Description | Default |
|---|---|---|---|
| task_id | Yes | Task ID returned by maestro_create_video. |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries full responsibility for behavioral disclosure. The verb 'Get' clearly implies a read-only operation, and it mentions 'live progress' suggesting polling. However, it doesn't explicitly state side-effect-freeness, error behavior, or rate limits. It provides baseline transparency but lacks depth.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single sentence, front-loaded with the action and resource, and contains no filler. Every word adds value.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple get-by-ID tool with one parameter and an output schema present, the description sufficiently states what it does and what it returns. It is complete for the tool's complexity and relies appropriately on the output schema for return details.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The schema description already covers the task_id parameter fully (100% coverage), with a clear description 'Task ID returned by maestro_create_video.' The tool description does not add additional parameter semantics beyond the schema, so the baseline of 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description uses the specific verb 'Get' with a clear resource ('live progress and final outputs for one Maestro video task'). It explicitly scopes to a single task, distinguishing it from siblings like 'maestro_list_tasks' (listing) and 'maestro_create_video' (creating).
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The phrase 'for one Maestro video task' clearly implies this is for a single task, contrasting with the sibling list tool. It does not explicitly state 'when not to use' or name alternatives, but the context is clear enough for an agent to decide.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
Tool Schema Changelog
Recent tool additions, removals, and schema changes observed during successful MCP inspections. Dates show when Glama detected each change.
1 tool update
v0.1.3- Changed
maestro_create_video2 fields changed- changed
Input schema / properties / file_urls / anyOfPrevious value: -[ - { - "items": { - "type": "string" - }, - "type": "array" - }, - { - "type": "null" - } -]New value: +[ + { + "items": { + "type": "string" + }, + "maxItems": 20, + "type": "array" + }, + { + "type": "null" + } +] - removed
Input schema / properties / qualityRemoved value: -{ - "anyOf": [ - { - "enum": [ - "lite", - "standard", - "pro" - ], - "type": "string" - }, - { - "type": "null" - } - ], - "default": null, - "description": "Production tier: lite, standard, or pro. Omit to use the server default (standard) on a new video, or to inherit the source task's tier when iterating.", - "title": "Quality" -}
2 tool updates
v0.1.2- Changed
maestro_create_video1 field changed- removed
Input schema / properties / task_idRemoved value: -{ - "anyOf": [ - { - "format": "uuid", - "type": "string" - }, - { - "type": "null" - } - ], - "default": null, - "description": "Optional client-generated UUID. Reusing it is rejected; omit it to let the server generate a task ID.", - "title": "Task Id" -}
- Removed
maestro_list_tasks
1 tool update
v0.1.1- Changed
maestro_create_video12 fields changed- changed
Input schema / properties / duration / anyOfPrevious value: -[ - { - "maximum": 600, - "minimum": 1, - "type": "integer" - }, - { - "type": "null" - } -]New value: +[ + { + "maximum": 300, + "minimum": 5, + "type": "integer" + }, + { + "type": "null" + } +] - changed
Input schema / properties / duration / descriptionPrevious value: -"Target video duration in seconds, from 1 to 600. Omit to use the server default (30) on a new video, or to inherit the source task's duration when iterating."New value: +"Target video duration in seconds, from 5 to 300. Omit to use the server default (30) on a new video, or to inherit the source task's duration when iterating." - changed
Input schema / properties / langs / anyOfPrevious value: -[ - { - "items": { - "type": "string" - }, - "type": "array" - }, - { - "type": "null" - } -]New value: +[ + { + "items": { + "type": "string" + }, + "maxItems": 4, + "type": "array" + }, + { + "type": "null" + } +] - changed
Input schema / properties / quality / anyOfPrevious value: -[ - { - "enum": [ - "draft", - "standard", - "premium" - ], - "type": "string" - }, - { - "type": "null" - } -]New value: +[ + { + "enum": [ + "lite", + "standard", + "pro" + ], + "type": "string" + }, + { + "type": "null" + } +] - changed
Input schema / properties / quality / descriptionPrevious value: -"Production tier: draft, standard, or premium. Omit to use the server default (standard) on a new video, or to inherit the source task's tier when iterating."New value: +"Production tier: lite, standard, or pro. Omit to use the server default (standard) on a new video, or to inherit the source task's tier when iterating." - changed
Input schema / properties / scenario / anyOfPrevious value: -[ - { - "enum": [ - "auto", - "narrated", - "drama", - "avatar", - "motion", - "slideshow" - ], - "type": "string" - }, - { - "type": "null" - } -]New value: +[ + { + "enum": [ + "auto", + "narrated", + "captions", + "avatar", + "drama" + ], + "type": "string" + }, + { + "type": "null" + } +] - changed
Input schema / properties / scenario / descriptionPrevious value: -"Production workflow: auto, narrated, drama, avatar, motion, or slideshow. Avatar normally needs a portrait in file_urls. Omit to let the server decide."New value: +"Production workflow: auto, narrated, captions, avatar, or drama. Captions requires a source video in file_urls. Avatar normally needs a portrait in file_urls. Omit to let the server decide." - changed
Input schema / properties / style / anyOfPrevious value: -[ - { - "enum": [ - "auto", - "cinematic", - "glass", - "luxury", - "swiss", - "modern", - "editorial", - "warm", - "vibrant", - "neon", - "mono", - "pastel", - "bold", - "industrial", - "futuristic", - "retro" - ], - "type": "string" - }, - { - "type": "string" - }, - { - "type": "null" - } -]New value: +[ + { + "enum": [ + "auto", + "cinematic", + "glass", + "luxury", + "swiss", + "modern", + "editorial", + "warm", + "vibrant", + "neon", + "mono", + "pastel", + "bold", + "industrial", + "futuristic", + "retro" + ], + "type": "string" + }, + { + "type": "null" + } +] - changed
Input schema / properties / style / descriptionPrevious value: -"Visual style preset or freeform style hint. Named presets: cinematic, glass, luxury, swiss, modern, editorial, warm, vibrant, neon, mono, pastel, bold, industrial, futuristic, retro. Use 'auto' or omit to let the server decide."New value: +"Visual style preset. Named presets: cinematic, glass, luxury, swiss, modern, editorial, warm, vibrant, neon, mono, pastel, bold, industrial, futuristic, retro. Use 'auto' or omit to let the server decide." - added
Input schema / properties / task_idAdded value: +{ + "anyOf": [ + { + "format": "uuid", + "type": "string" + }, + { + "type": "null" + } + ], + "default": null, + "description": "Optional client-generated UUID. Reusing it is rejected; omit it to let the server generate a task ID.", + "title": "Task Id" +} - changed
Input schema / properties / voice / anyOfPrevious value: -[ - { - "enum": [ - "auto", - "warm-female", - "bright-female", - "anchor-female", - "clean-female", - "calm-male", - "deep-male", - "documentary-male", - "energetic-male", - "storyteller-male" - ], - "type": "string" - }, - { - "type": "string" - }, - { - "type": "null" - } -]New value: +[ + { + "enum": [ + "auto", + "warm-female", + "bright-female", + "anchor-female", + "clean-female", + "calm-male", + "deep-male", + "documentary-male", + "energetic-male", + "storyteller-male" + ], + "type": "string" + }, + { + "type": "null" + } +] - changed
Input schema / properties / voice / descriptionPrevious value: -"Narration voice preset, auto, or a 32-hex-character Fish reference ID. Omit to let the server decide."New value: +"Narration voice preset. Use 'auto' or omit to let the server decide."
3 tool updates
v0.1.0- First observed
maestro_create_video - First observed
maestro_get_task - First observed
maestro_list_tasks
TDQS
The two tools have clearly distinct responsibilities: one creates/submits a video task and the other retrieves its progress/output. There is no overlap or ambiguity between them.
Both tool names follow the same `maestro_<verb>_<noun>` pattern, using consistent snake_case and clear action words. The naming convention is uniform and predictable.
Two tools is minimal but works well for a focused async create-and-poll workflow. It is slightly under the typical well-scoped range, but each tool serves a necessary and distinct role.
The core lifecycle of creating a video and retrieving its results is covered. Missing task management operations like listing, canceling, or deleting tasks are minor gaps for this narrow domain.
Maintenance
Resources
Unclaimed servers have limited discoverability.
Looking for Admin?
If you are the server author, to access and configure the admin panel.
Related MCP Connectors
Generate finished AI videos from a brief or a script, with voiceover, scenes and captions.
1Render video and run AI media tasks from a single declarative JSON request.
Create and manage cinematic AI video renders through the Future Video Studio Agent API.
Plan, compare, price, generate, and recover AI video from compatible MCP clients.
Related MCP Servers
- AlicenseAqualityBmaintenanceWan AI video generation with text-to-video, image-to-video, and multiple quality models via AceDataCloud API.71MIT
- FlicenseAqualityDmaintenanceEnables AI video generation from ideas or screenplays via ViMax, with job management and daily quota control.6-
- AlicenseNot gradedqualityDmaintenanceEnables AI video generation from text prompts, status monitoring, and video management through the Sisif AI Video API.1MIT
- AlicenseAqualityAmaintenanceEnables AI video generation and editing, including text-to-video, image-to-video, reference-to-video, and video editing through the Ace Data Cloud API.7MIT
Latest Blog Posts
- Who's Calling? MCP Hosts Are an Identity Blind Spot (And the Spec Knows It)By Om-Shree-0709 on .mcpAgent IdentityOAuth 2.1
- Your AI Chatbot Just Exposed Your CEO's Salary to an InternBy Om-Shree-0709 on .Agent IdentityMCP SecurityOAuth Delegation
- Why MCP Servers Need Execution Sandboxing (And Why Your Current Stack Isn't Enough)By Om-Shree-0709 on .Agentic AiPrompt InjectionWebAssembly
MCP directory API
We provide all the information about MCP servers via our MCP API.
curl -X GET 'https://glama.ai/api/mcp/v1/servers/AceDataCloud/MaestroMCP'
If you have feedback or need assistance with the MCP directory API, please join our Discord server