Skip to main content
Glama

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-maestro

Get 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

maestro_create_video

Create a video or run remix, edit, or extend on an earlier task

maestro_get_task

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 build

See the Maestro API documentation for billing and response details.

Documentation

Documentation

Available Tools

2 tools
maestro_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.
ParametersJSON Schema
NameRequiredDescriptionDefault
langsNoOutput language codes, such as zh-cn, en, ja, or pt-br. Each language produces a localized video variant.
styleNoVisual 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.
voiceNoNarration voice preset. Use 'auto' or omit to let the server decide.
actionNogenerate creates a new video. remix, edit, and extend iterate on a previous Maestro task and require ref_task_id.generate
aspectNoOutput 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.
promptYesNatural-language production brief: topic, audience, scenes, tone, and desired outcome. Maestro plans the script, assets, voiceover, edit, captions, and render.
durationNoTarget 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.
scenarioNoProduction 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_urlsNoReference image, video, or audio URLs for Maestro to use.
ref_task_idNoPrevious Maestro task ID for remix, edit, or extend.
callback_urlNoOptional webhook URL called when the task succeeds or fails.

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A4.4/5.0
Behavior4/5

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.

Conciseness5/5

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.

Completeness4/5

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.

Parameters3/5

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.

Purpose5/5

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.

Usage Guidelines5/5

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.

ParametersJSON Schema
NameRequiredDescriptionDefault
task_idYesTask ID returned by maestro_create_video.

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A4.1/5.0
Behavior3/5

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.

Conciseness5/5

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.

Completeness5/5

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.

Parameters3/5

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.

Purpose5/5

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.

Usage Guidelines4/5

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. 1 tool updatev0.1.3
    • Changedmaestro_create_video2 fields changed
      • changedInput schema / properties / file_urls / anyOf
        Previous value: -[
        -  {
        -    "items": {
        -      "type": "string"
        -    },
        -    "type": "array"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]New value: +[
        +  {
        +    "items": {
        +      "type": "string"
        +    },
        +    "maxItems": 20,
        +    "type": "array"
        +  },
        +  {
        +    "type": "null"
        +  }
        +]
      • removedInput schema / properties / quality
        Removed 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. 2 tool updatesv0.1.2
    • Changedmaestro_create_video1 field changed
      • removedInput schema / properties / task_id
        Removed 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"
        -}
    • Removedmaestro_list_tasks
  3. 1 tool updatev0.1.1
    • Changedmaestro_create_video12 fields changed
      • changedInput schema / properties / duration / anyOf
        Previous value: -[
        -  {
        -    "maximum": 600,
        -    "minimum": 1,
        -    "type": "integer"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]New value: +[
        +  {
        +    "maximum": 300,
        +    "minimum": 5,
        +    "type": "integer"
        +  },
        +  {
        +    "type": "null"
        +  }
        +]
      • changedInput schema / properties / duration / description
        Previous 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."
      • changedInput schema / properties / langs / anyOf
        Previous value: -[
        -  {
        -    "items": {
        -      "type": "string"
        -    },
        -    "type": "array"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]New value: +[
        +  {
        +    "items": {
        +      "type": "string"
        +    },
        +    "maxItems": 4,
        +    "type": "array"
        +  },
        +  {
        +    "type": "null"
        +  }
        +]
      • changedInput schema / properties / quality / anyOf
        Previous value: -[
        -  {
        -    "enum": [
        -      "draft",
        -      "standard",
        -      "premium"
        -    ],
        -    "type": "string"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]New value: +[
        +  {
        +    "enum": [
        +      "lite",
        +      "standard",
        +      "pro"
        +    ],
        +    "type": "string"
        +  },
        +  {
        +    "type": "null"
        +  }
        +]
      • changedInput schema / properties / quality / description
        Previous 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."
      • changedInput schema / properties / scenario / anyOf
        Previous value: -[
        -  {
        -    "enum": [
        -      "auto",
        -      "narrated",
        -      "drama",
        -      "avatar",
        -      "motion",
        -      "slideshow"
        -    ],
        -    "type": "string"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]New value: +[
        +  {
        +    "enum": [
        +      "auto",
        +      "narrated",
        +      "captions",
        +      "avatar",
        +      "drama"
        +    ],
        +    "type": "string"
        +  },
        +  {
        +    "type": "null"
        +  }
        +]
      • changedInput schema / properties / scenario / description
        Previous 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."
      • changedInput schema / properties / style / anyOf
        Previous 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"
        +  }
        +]
      • changedInput schema / properties / style / description
        Previous 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."
      • addedInput schema / properties / task_id
        Added 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"
        +}
      • changedInput schema / properties / voice / anyOf
        Previous 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"
        +  }
        +]
      • changedInput schema / properties / voice / description
        Previous 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."
  4. 3 tool updatesv0.1.0
    • First observedmaestro_create_video
    • First observedmaestro_get_task
    • First observedmaestro_list_tasks

TDQS

A4.3/5.0
Disambiguation5/5

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.

Naming Consistency5/5

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.

Tool Count4/5

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.

Completeness4/5

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

ActivityActive
ResponsivenessNo issues

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

Related MCP Servers

Latest Blog Posts

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