WanMCP
WanMCP is an MCP server that generates AI videos from text, images, or reference media via the AceDataCloud Wan API.
Text-to-video (
wan_generate_video): create a video from a prompt, with options for model, resolution, aspect ratio, duration, seed, audio, watermark, negative prompt, prompt extension, and webhook callback.Image-to-video (
wan_generate_video_from_image): animate a reference image (image_url), optionally using reference videos for character/timbre extraction and single vs. multi-shot output.All-in-one generation (
wan_generate_video_all_in_one): build a Wan 3 video from text, first/last frames, reference images, videos, audio, files, or public links.Model choice:
wan2.6-t2v,wan2.6-i2v,wan2.6-r2v,wan2.6-i2v-flash,wan3.0-video.Task tracking (
wan_get_task,wan_get_tasks_batch): poll one or many task IDs for status (pending,processing,completed,failed) and retrieve resulting video URLs and metadata.Reference info tools (
wan_list_models,wan_list_resolutions,wan_list_actions): look up supported models, resolutions (480P/720P/1080P), and API actions with their matching tools.Flexible connectivity: hosted MCP endpoint with OAuth or Bearer API token, or local stdio install (
pip install mcp-wan,ACEDATACLOUD_API_TOKEN), plus self-hosted HTTP mode.
Provides integration with Amazon Q Developer, allowing users to generate AI videos from text and images using Wan video generation models by configuring the MCP server endpoint within the Amazon Q Developer environment.
Enables AI video generation capabilities within JetBrains IDEs by connecting to the Wan MCP server through the Model Context Protocol integration in the AI Assistant, supporting text-to-video and image-to-video generation workflows.
WanMCP
A Model Context Protocol (MCP) server for AI video generation using Wan through the AceDataCloud API.
Generate AI videos from text or images directly from Claude, VS Code, or any MCP-compatible client.
Features
Text to Video - Create AI-generated videos from text prompts
Image to Video - Generate videos using reference images
Multiple Models - Support for 5 Wan models (wan2.6-t2v, wan2.6-i2v, wan2.6-r2v, wan2.6-i2v-flash, wan3.0-video)
Multiple Resolutions - 480P (draft), 720P (default), 1080P (high quality)
Audio Support - Generate videos with sound
Character Transfer - Extract character appearance via reference videos (wan2.6-r2v)
Task Tracking - Monitor generation progress and retrieve results
Related MCP server: HailuoMCP
Tool Reference
Tool | Description |
| Generate AI video from a text prompt using Wan. |
| Generate AI video using a reference image as the starting frame. |
| Query the status and result of a video generation task. |
| Query multiple video generation tasks at once. |
| List all available Wan models for video generation. |
| List all available resolution options. |
| List all available Wan API actions and corresponding tools. |
Connect: hosted OAuth, API token, or local stdio
The hosted endpoint is https://wan.mcp.acedata.cloud/mcp. Choose one route for the MCP client:
Route | When to use it | Credential setup |
Hosted OAuth | The client supports remote MCP OAuth | Add only the URL, then sign in to AceDataCloud and approve access. No token needs to be pasted into client configuration. |
Hosted API token | The client cannot finish OAuth, or you need an explicit integration credential | Send an AceDataCloud API token in the |
Local stdio | The client runs a local MCP process | Install |
The hosted service advertises OAuth metadata and Dynamic Client Registration (DCR). DCR registers the client application; it is not an API key. OAuth signs you in and the client sends the resulting Bearer token; it may reuse or create an API credential for the account. Browser sign-in still requires an AceDataCloud account. The hosted service can be metered: review current service documentation and displayed pricing before a real operation. Do not configure both an OAuth login and a fixed Authorization header for the same server.
Hosted OAuth examples
Claude and Claude Desktop chat: Add a remote custom connector in
Customize → Connectors → Add custom connector, enterhttps://wan.mcp.acedata.cloud/mcp, select sign-in, and choose Register automatically if Claude asks how to register its OAuth client. Complete consent. Claude Desktop's localclaude_desktop_config.jsonis a separate setup. Claude connector guide.Claude Code:
claude mcp add --transport http --scope user wan https://wan.mcp.acedata.cloud/mcp, thenclaude mcp login wan. Check/mcp. Claude Code MCP guide.Cursor: Add a remote server with only
https://wan.mcp.acedata.cloud/mcp. For a project, merge the entry below into<project>/.cursor/mcp.json; for personal use, use~/.cursor/mcp.json. Cursor MCP guide.VS Code / Copilot: Run MCP: Add Server, select HTTP, enter
https://wan.mcp.acedata.cloud/mcp, then finish the browser sign-in. New portable workspace configs use<project>/.mcp.json; the VS Code-specific format below uses<project>/.vscode/mcp.jsonor the user profile. Check MCP: List Servers. VS Code MCP setup.Codex:
codex mcp add wan --url https://wan.mcp.acedata.cloud/mcp, thencodex mcp login wan. Its user settings are in~/.codex/config.toml. Official Codex MCP guide.
Cursor project config (OAuth):
{
"mcpServers": {
"wan": {"url": "https://wan.mcp.acedata.cloud/mcp"}
}
}VS Code-specific workspace config (OAuth):
{
"servers": {
"wan": {"type": "http", "url": "https://wan.mcp.acedata.cloud/mcp"}
}
}Hosted API token
Open Ace Data Cloud → Applications. Sign in, or register an account first.
Find General application. If it has not been created, choose Initialize General Application. A general key can use the services available to your account; a dedicated application's key is limited to its service. Check the required service/model access and current pricing.
Copy the API Key from the application card, or open Keys / Manage Keys → Create to create a separate key for this integration. Give it a recognizable name so you can revoke or rotate it independently.
When creating a key, review Expiration Time, Set Usage Limitation, and Allowed APIs. Enable only the restrictions you need, allow the operations you will call, then click Create and copy the token from the key list. Task lookup does not grant permission to submit a generation. Confirm the application's balance can cover your first request; any trial allowance is whatever your account currently displays.
Copy only the token value, without quotation marks, spaces, or
Bearer. An API Key / API Token field expects this raw value; only a manually configured HTTPAuthorizationheader needs theBearerprefix. Aplatform-...account-management token cannot replace a generation API key.


Save the key in the client's credential store or the environment variable shown below. Never put it in a prompt, shared workflow, screenshot, or Git commit. If authentication fails, check the full copied value, application/service access, expiration, usage limit, and balance before creating another key.
A fixed Bearer header bypasses OAuth. If the header is invalid, remove it before trying browser sign-in; keep the saved credential private.
For Claude Code, the shell expands the token when you add the server; treat the saved user MCP config as a secret:
export ACEDATACLOUD_API_TOKEN='YOUR_API_TOKEN'
claude mcp add --transport http --scope user wan https://wan.mcp.acedata.cloud/mcp \
--header "Authorization: Bearer $ACEDATACLOUD_API_TOKEN"For a Claude Code project config, put a variable reference in <project>/.mcp.json and set that variable in the environment that launches Claude Code:
{
"mcpServers": {
"wan": {
"type": "http",
"url": "https://wan.mcp.acedata.cloud/mcp",
"headers": {"Authorization": "Bearer ${ACEDATACLOUD_API_TOKEN}"}
}
}
}Cursor uses a different environment-variable syntax in ~/.cursor/mcp.json or an uncommitted project config:
{
"mcpServers": {
"wan": {
"url": "https://wan.mcp.acedata.cloud/mcp",
"headers": {"Authorization": "Bearer ${env:ACEDATACLOUD_API_TOKEN}"}
}
}
}In VS Code, run MCP: Open User Configuration and merge this server plus its masked input; ${input:...} is for VS Code's user/workspace format and is not portable to the Agent Host .mcp.json format:
{
"inputs": [
{"id": "acedata-wan-token", "type": "promptString", "description": "AceDataCloud API token", "password": true}
],
"servers": {
"wan": {
"type": "http",
"url": "https://wan.mcp.acedata.cloud/mcp",
"headers": {"Authorization": "Bearer ${input:acedata-wan-token}"}
}
}
}For Cline, use its MCP configuration UI or CLI file ~/.cline/data/settings/cline_mcp_settings.json; its remote transport value is streamableHttp. For JetBrains AI Assistant, add a remote URL from Settings → Tools → AI Assistant → Model Context Protocol (MCP). For Zed, use a context_servers entry with the URL only for OAuth or add a local Bearer header. These clients have different configuration schemas; follow their current UI rather than copying another client's JSON. Cline · JetBrains · Zed.
Local stdio
Install the package and give the local process an API token:
python -m pip install mcp-wan
export ACEDATACLOUD_API_TOKEN='YOUR_API_TOKEN'
mcp-wanFor Claude Desktop local MCP, merge this entry into the file opened by its developer settings (~/Library/Application Support/Claude/claude_desktop_config.json on macOS). uvx requires uv on PATH:
{
"mcpServers": {
"wan": {
"command": "uvx",
"args": ["mcp-wan"],
"env": {"ACEDATACLOUD_API_TOKEN": "YOUR_API_TOKEN"}
}
}
}Keep this user-level file private. Self-hosted HTTP uses mcp-wan --transport http --port 8000; expose it only with suitable network and TLS controls. Local execution still calls the AceDataCloud API.
Check before using the service
https://wan.mcp.acedata.cloud/healthreturning{"status":"ok"}checks endpoint reachability only.Confirm that the MCP client loads tools.
wan_list_modelsis a reference tool; it does not verify downstream API access or balance.If you need a full API check, call
wan_generate_videowith your own valid input after reviewing current service documentation and displayed pricing. If the result contains a task ID, callwan_get_taskon that same ID until terminal success or failure. Do not resubmit the operation just to check progress.
For 401, check which auth route the client used and whether the token or OAuth session is valid. A 403 may mean an account permission or content moderation failure; read the returned error. Insufficient balance and downstream service failures need their own diagnosis. A listed tool or submitted task does not prove a successful result.
Available Models
Model | Description | Use Case |
| Text to video | Generate video from text prompts |
| Image to video | Standard image-to-video generation |
| Reference video-to-video | Character extraction and transfer |
| Fast image to video | Quick preview, lower quality |
| Text to video | Video generation with optional media |
Configuration
Environment Variables
Variable | Description | Default |
| API token from AceDataCloud | Required |
| API base URL |
|
| Default video model |
|
| Default resolution |
|
| Request timeout in seconds |
|
| Logging level |
|
Command Line Options
mcp-wan --help
Options:
--version Show version
--transport Transport mode: stdio (default) or http
--port Port for HTTP transport (default: 8000)Development
Setup Development Environment
# Clone repository
git clone https://github.com/AceDataCloud/WanMCP.git
cd WanMCP
# Create virtual environment
python -m venv .venv
source .venv/bin/activate # or `.venv\Scripts\activate` on Windows
# Install with dev dependencies
pip install -e ".[dev,test]"Run Tests
# Run unit tests
pytest
# Run with coverage
pytest --cov=core --cov=tools
# Run integration tests (requires API token)
pytest tests/test_integration.py -m integrationCode Quality
# Format code
ruff format .
# Lint code
ruff check .
# Type check
mypy core toolsBuild & Publish
# Install build dependencies
pip install -e ".[release]"
# Build package
python -m build
# Upload to PyPI
twine upload dist/*Project Structure
WanMCP/
├── core/ # Core modules
│ ├── __init__.py
│ ├── client.py # HTTP client for Wan API
│ ├── config.py # Configuration management
│ ├── exceptions.py # Custom exceptions
│ ├── oauth.py # OAuth 2.1 provider
│ ├── server.py # MCP server initialization
│ ├── types.py # Type definitions
│ └── utils.py # Utility functions
├── tools/ # MCP tool definitions
│ ├── __init__.py
│ ├── video_tools.py # Video generation tools
│ ├── task_tools.py # Task query tools
│ └── info_tools.py # Information tools
├── prompts/ # MCP prompts
│ └── __init__.py # Prompt templates
├── tests/ # Test suite
│ ├── conftest.py
│ └── __init__.py
├── deploy/ # Deployment configs
│ └── production/
│ ├── deployment.yaml
│ ├── ingress.yaml
│ └── service.yaml
├── .env.example # Environment template
├── CHANGELOG.md
├── Dockerfile # Docker image for HTTP mode
├── docker-compose.yaml # Docker Compose config
├── LICENSE
├── main.py # Entry point
├── pyproject.toml # Project configuration
└── README.mdAPI Reference
This server wraps the AceDataCloud Wan API:
Wan Videos API - Video generation (text2video, image2video)
Wan Tasks API - Task queries
Contributing
Contributions are welcome! Please:
Fork the repository
Create a feature branch (
git checkout -b feature/amazing)Commit your changes (
git commit -m 'Add amazing feature')Push to the branch (
git push origin feature/amazing)Open a Pull Request
Documentation
License
MIT License - see LICENSE for details.
Links
Made with love by AceDataCloud
Available Tools
8 toolswan_generate_videoAInspect
Generate AI video from a text prompt using Wan text-to-video model.
This uses the wan2.6-t2v model to create video from text descriptions.
For creating video from images, use wan_generate_video_from_image instead.
Returns:
Task ID and generated video information including URLs and state.
| Name | Required | Description | Default |
|---|---|---|---|
| seed | No | Optional random seed. | |
| size | No | The size of the generated video (e.g., '1280x720'). | |
| audio | No | Whether the generated video should include audio. Default is false. | |
| media | No | Optional media inputs with a type and URL, supported by wan3.0-video. | |
| model | No | Wan model to use. Default: 'wan2.6-t2v'. | wan2.6-t2v |
| ratio | No | Video aspect ratio. Options include 'adaptive', '16:9', and '9:16'. | |
| prompt | Yes | Description of the video to generate. Be descriptive about the scene, motion, style, and mood. | |
| duration | No | Video duration in seconds. Use 2-30, or -1 when supported by the model. | |
| audio_url | No | URL of reference audio to use in the video. Only used when audio is enabled. | |
| watermark | No | Whether to add a watermark. Default is false. | |
| resolution | No | Video resolution. Options: '480P', '720P' (default), '1080P'. | 720P |
| callback_url | No | Webhook callback URL for asynchronous notifications. When provided, the API will call this URL when the video is generated. | |
| prompt_extend | No | Enable LLM-based prompt rewriting for better results. Default is false. | |
| negative_prompt | No | Content to exclude from the video. Maximum 500 characters. |
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 usefully discloses the asynchronous, task-based nature of the call ('Returns: Task ID ... and state'), which is real context beyond the schema. But it omits permissions/auth requirements, latency expectations, whether generation is billed or rate-limited, and how the task should be polled afterwards.
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 short sentences plus a brief returns note, front-loaded with the core action. Slightly bulky with a header-style 'Returns:' block and a trailing blank line, but nothing is wasted or repeated.
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?
An output schema exists, so return values need not be spelled out, and the alternative tool is named. But for a 14-parameter async generation tool with zero annotations, the description leaves the agent without model-selection guidance, async/polling workflow, or any note about which parameters only apply to certain models (e.g., media and duration=-1).
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 every parameter is already documented in the schema, including model enum values, resolution, duration ranges, and media types. The description adds no parameter syntax: it names wan2.6-t2v but never explains which of the five models to choose or what the media inputs require. Baseline 3 applies when the schema does the heavy lifting.
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?
States a specific verb and resource ('Generate AI video from a text prompt') and names the underlying model (wan2.6-t2v), so the agent knows exactly what output to expect. It also explicitly distinguishes itself from the sibling wan_generate_video_from_image, so the tool is identifiable without opening the schema.
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?
Gives a clear routing rule: use this for text-to-video, use wan_generate_video_from_image for image-to-video. That is a genuine when/when-not pair. It does not, however, address the other siblings (wan_generate_video_all_in_one) or explain when to pick among the five selectable models, so guidance is clear but incomplete.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
wan_generate_video_all_in_oneCInspect
Generate a Wan 3 video from text, frames, reference media, a file, or a public link.
| Name | Required | Description | Default |
|---|---|---|---|
| seed | No | ||
| audio | No | ||
| media | No | Media objects with type and URL. Types: first_frame, last_frame, reference_image, reference_video, reference_audio, file, link. | |
| ratio | No | adaptive, 16:9, 4:3, 1:1, 3:4, or 9:16. | adaptive |
| prompt | No | Video intent; refer to media as image 1, video 1, or audio 1 by order. | |
| duration | No | Output seconds: 2-30, or -1 for automatic duration. | |
| watermark | No | ||
| resolution | No | 480P, 720P, or 1080P. | 1080P |
| callback_url | No |
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, and it says almost nothing beyond 'generate'. It omits whether the call is synchronous or returns a task for polling (callback_url and wan_get_task strongly suggest async), and says nothing about cost, rate limits, or failure behavior.
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?
A single front-loaded sentence with no filler; it is efficient and easy to scan. It is arguably too terse for a 9-parameter generator, but there is no wasted text.
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 9-parameter, unannotated generator with only 56% schema coverage, one sentence is insufficient. An output schema exists so return values need not be explained, but async behavior, parameter roles, and sibling differentiation are all missing.
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 coverage is only 56%, and the description adds zero parameter meaning beyond the schema. Key parameters such as seed, audio, watermark, and callback_url are undocumented in both places, and the description does not compensate for the coverage gap.
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?
States a specific verb+resource (generate a Wan 3 video) and enumerates the input modes it accepts, which hints at its 'all-in-one' nature. However, it never distinguishes itself from the sibling tools wan_generate_video and wan_generate_video_from_image, leaving the agent to guess which generator to call.
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?
There is no explicit when-to-use or when-not-to-use guidance and no mention of alternatives, despite three sibling video-generation tools. At best the input-mode list implies 'use this for any input type', but that inference is left entirely to the agent.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
wan_generate_video_from_imageCInspect
Generate AI video from a reference image using Wan image-to-video models.
This supports three models:
- wan2.6-i2v: Standard image-to-video generation
- wan2.6-r2v: Reference video-to-video with character/timbre extraction
- wan2.6-i2v-flash: Fast image-to-video generation
Returns:
Task ID and generated video information including URLs and state.
| Name | Required | Description | Default |
|---|---|---|---|
| seed | No | Optional random seed. | |
| size | No | The size of the generated video (e.g., '1280x720'). | |
| audio | No | Whether the generated video should include audio. Default is false. | |
| media | No | Optional media inputs with a type and URL, supported by wan3.0-video. | |
| model | No | Wan model to use. Default: 'wan2.6-i2v'. | wan2.6-i2v |
| ratio | No | Video aspect ratio. Options include 'adaptive', '16:9', and '9:16'. | |
| prompt | Yes | Description of the video motion and content. Describe what should happen in the video. | |
| duration | No | Video duration in seconds. Use 2-30, or -1 when supported by the model. | |
| audio_url | No | URL of reference audio to use in the video. | |
| image_url | Yes | URL of the reference image for video generation. The video will be generated based on this image. | |
| shot_type | No | Shot type: 'single' for continuous shot, 'multi' for multi-cut editing. | |
| watermark | No | Whether to add a watermark. Default is false. | |
| resolution | No | Video resolution. Options: '480P', '720P' (default), '1080P'. | 720P |
| callback_url | No | Webhook callback URL for asynchronous notifications. | |
| prompt_extend | No | Enable LLM-based prompt rewriting. Default is false. | |
| negative_prompt | No | Content to exclude from the video. Maximum 500 characters. | |
| reference_video_urls | No | JSON array of reference video URLs for character/timbre extraction. Used with the wan2.6-r2v model. Pass each URL as a separate array item; never join URLs with commas and never JSON-stringify the array. Legacy comma-separated strings are still accepted for backward compatibility. |
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 one useful trait: the call returns a Task ID, implying asynchronous generation. However, it says nothing about cost, latency, expected polling via wan_get_task, permission requirements, or which parameters are model-gated, which are critical for a long-running generation call.
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 purpose sentence is front-loaded and the model bullets are scannable, with no filler text. The 'Returns' block is somewhat redundant given an output schema exists, but the overall structure is tight and readable.
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 17-parameter, multi-model generative tool with no annotations, the description is thin: it omits the async polling workflow, model-to-parameter dependencies, and cost/credit implications. An output schema exists, so the return summary is somewhat redundant. Adequate but with clear gaps for a tool of this complexity.
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 does add meaning for three models, but it omits two enum values ('wan2.6-t2v', 'wan3.0-video') and doesn't explain how model choice constrains other params (e.g., reference_video_urls, audio_url, media). Marginal value beyond what the schema already documents.
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 states a specific verb and resource ('Generate AI video from a reference image') and names the Wan i2v model family. It does not differentiate this tool from the sibling 'wan_generate_video' or 'wan_generate_video_all_in_one', so an agent must infer which one to pick. The model list also oddly includes 'wan2.6-r2v' (reference video-to-video), which blurs the tool's stated image-input scope.
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?
No when-to-use, when-not-to-use, or alternative-tool guidance is given, despite three closely related video-generation siblings. It doesn't note that wan2.6-r2v requires reference_video_urls rather than an image, nor when to prefer the all-in-one sibling. The agent gets model options but no routing logic.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
wan_get_taskAInspect
Query the status and result of a video generation task.
Use this to check if a generation is complete and retrieve the resulting
video URLs and metadata.
Task states:
- 'pending': Generation is queued
- 'processing': Generation is in progress
- 'completed': Generation finished successfully
- 'failed': Generation failed (check error message)
Returns:
Task status and generated video information including URLs.
| Name | Required | Description | Default |
|---|---|---|---|
| task_id | Yes | The task ID returned from a generation request. This is the 'task_id' field from any wan_generate_* tool response. |
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 burden. It describes the task states (pending, processing, completed, failed) and indicates the tool returns status and result URLs. It does not cover rate limits or polling behavior, but for a status-checking tool, this is adequate and not misleading.
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 concise and well-structured, with a clear purpose statement followed by bullet points for task states. Every sentence adds value, and there is no extraneous information.
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?
Given the output schema exists (not shown but indicated), the description appropriately summarizes the return type (status and video URLs). The sibling tools list provides sufficient context for understanding the tool's role in the broader workflow.
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 single parameter 'task_id' is described in the schema, but the description adds valuable context: 'The task ID returned from a generation request. This is the 'task_id' field from any wan_generate_* tool response.' This clarifies the origin and usage beyond the schema's description.
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 clearly states that the tool queries the status and result of a video generation task. It is well differentiated from sibling tools like wan_generate_video (which creates tasks) and wan_get_tasks_batch (which retrieves multiple tasks).
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 explicitly states to use this tool to check if a generation is complete and retrieve results. It also lists task states, providing guidance on when to call it. However, it does not explicitly state when not to use or mention alternatives beyond the context.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
wan_get_tasks_batchAInspect
Query multiple video generation tasks at once.
Efficiently check the status of multiple tasks in a single request.
Returns:
Status and video information for all queried tasks.
| Name | Required | Description | Default |
|---|---|---|---|
| task_ids | Yes | List of task IDs to query. Maximum recommended batch size is 50 tasks. |
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 burden. It states the return includes status and video information, which is basic. It does not disclose rate limits, authentication needs, or any side effects. The mention of max batch size is in the schema description, not the main description.
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 three sentences: purpose, benefit, and return. It is front-loaded and concise, with no unnecessary information.
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?
Given the tool's simplicity (one parameter, output schema exists), the description sufficiently covers what the tool does and returns. The output schema handles return value details, so no further elaboration is needed.
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% for the single parameter 'task_ids', with a clear description of its purpose and constraints. The main description adds no additional semantic value beyond what the schema already provides, meeting the baseline for high coverage.
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 'query' and resource 'multiple video generation tasks', clearly distinguishing it from the sibling tool 'wan_get_task' which queries a single task. The phrase 'at once' and 'batch' reinforce the batching behavior.
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 implies usage for checking multiple tasks efficiently, and the sibling tool names provide clear contrast with 'wan_get_task' for single tasks. However, it does not explicitly state when not to use or mention alternative scenarios.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
wan_list_actionsAInspect
List all available Wan API actions and corresponding tools.
Reference guide for what each action does and which tool to use.
Returns:
Categorized list of all actions and their corresponding tools.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description says it returns a categorized list. No annotations exist, so the description carries the burden. It's adequate but doesn't add extra behavioral traits beyond listing.
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?
Three sentences, no fluff. First sentence states purpose, second adds context, third describes output. 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 a simple listing tool with no parameters and an output schema present, the description is complete. It tells what it does and what it returns.
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?
No parameters exist in the schema. Baseline for 0 params is 4. The description adds no parameter info, but none is needed.
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 clearly states it lists all available Wan API actions and corresponding tools, serving as a reference guide. This distinguishes it from sibling tools like wan_generate_video or wan_get_task.
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?
Usage is implied as a reference to discover available actions and tools. No explicit when-not or alternatives, but the context of siblings makes it clear.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
wan_list_modelsAInspect
List all available Wan video generation models.
Shows models with their capabilities, supported actions, and use cases.
Returns:
Table of all models with descriptions and constraints.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
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 full responsibility for behavioral disclosure. It only states that it lists models and returns a table, without mentioning any constraints, permissions, or side effects. The read-only nature is implied but not explicit.
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 exceptionally concise with only three sentences. The first sentence front-loads the purpose, followed by additional detail. Every sentence contributes meaning without redundancy.
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 listing tool with an output schema, the description adequately covers what the tool does and what it returns. It does not mention any error conditions or prerequisites, but given the tool's simplicity, it is mostly complete.
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?
There are zero parameters, so the schema coverage is complete. The description adds value by explaining the return format (table with descriptions and constraints), which is not captured in the empty input schema. Baseline 4 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 clearly states the tool lists all available Wan video generation models and specifies what information it shows (capabilities, supported actions, use cases). The verb-resource pair is specific, and the tool is well differentiated from sibling tools that handle generation or list other entities.
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 implies using this tool before generating videos, but it does not explicitly state when not to use it or mention alternative tools. Given the distinct sibling tools, the context is clear, but explicit guidance is missing.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
wan_list_resolutionsAInspect
List all available resolutions for Wan video generation.
Shows resolution options with their quality and use cases.
Returns:
Table of resolutions with descriptions.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description indicates a read-only operation (list, shows) and specifies the return format (table of resolutions with descriptions). Despite no annotations, it effectively communicates behavior without contradictions.
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?
Three concise sentences front-load the purpose, followed by details on content and return format. No superfluous information.
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 parameterless tool with an output schema, the description fully covers the purpose and return structure. No gaps remain.
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?
With zero parameters in the input schema, the description does not need to explain parameters. It adds value by clarifying scope ('all available') and the nature of returns.
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 clearly states 'List all available resolutions for Wan video generation', specifying the verb (list) and resource (resolutions). It distinguishes from sibling tools like wan_generate_video by focusing on listing options rather than generation.
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 implies usage to retrieve resolution options but provides no explicit guidance on when to use this tool versus alternatives, such as before generating a video to select a resolution.
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.
3 tool updates
v0.1.20- Changed
wan_generate_video13 fields changed- added
Input schema / $defsAdded value: +{ + "MediaItem": { + "description": "A media input for video generation.", + "properties": { + "type": { + "enum": [ + "first_frame", + "last_frame", + "reference_image", + "reference_video", + "reference_audio", + "file", + "link" + ], + "title": "Type", + "type": "string" + }, + "url": { + "title": "Url", + "type": "string" + } + }, + "required": [ + "type", + "url" + ], + "title": "MediaItem", + "type": "object" + } +} - changed
Input schema / properties / audio / defaultPrevious value: -trueNew value: +false - changed
Input schema / properties / audio / descriptionPrevious value: -"Whether the generated video should include audio. Default is true."New value: +"Whether the generated video should include audio. Default is false." - changed
Input schema / properties / duration / anyOfPrevious value: -[ - { - "enum": [ - 5, - 10, - 15 - ], - "type": "integer" - }, - { - "type": "null" - } -]New value: +[ + { + "const": -1, + "type": "integer" + }, + { + "maximum": 30, + "minimum": 2, + "type": "integer" + }, + { + "type": "null" + } +] - changed
Input schema / properties / duration / descriptionPrevious value: -"Video duration in seconds. Options: 5, 10, or 15. Default depends on model."New value: +"Video duration in seconds. Use 2-30, or -1 when supported by the model." - added
Input schema / properties / mediaAdded value: +{ + "anyOf": [ + { + "items": { + "$ref": "#/$defs/MediaItem" + }, + "maxItems": 10, + "type": "array" + }, + { + "type": "null" + } + ], + "default": null, + "description": "Optional media inputs with a type and URL, supported by wan3.0-video.", + "title": "Media" +} - added
Input schema / properties / modelAdded value: +{ + "default": "wan2.6-t2v", + "description": "Wan model to use. Default: 'wan2.6-t2v'.", + "enum": [ + "wan2.6-t2v", + "wan2.6-i2v", + "wan2.6-r2v", + "wan2.6-i2v-flash", + "wan3.0-video" + ], + "title": "Model", + "type": "string" +} - changed
Input schema / properties / prompt_extend / defaultPrevious value: -trueNew value: +false - changed
Input schema / properties / prompt_extend / descriptionPrevious value: -"Enable LLM-based prompt rewriting for better results. Default is true."New value: +"Enable LLM-based prompt rewriting for better results. Default is false." - added
Input schema / properties / ratioAdded value: +{ + "anyOf": [ + { + "enum": [ + "adaptive", + "16:9", + "4:3", + "1:1", + "3:4", + "9:16" + ], + "type": "string" + }, + { + "type": "null" + } + ], + "default": null, + "description": "Video aspect ratio. Options include 'adaptive', '16:9', and '9:16'.", + "title": "Ratio" +} - added
Input schema / properties / seedAdded value: +{ + "anyOf": [ + { + "maximum": 2147483647, + "minimum": 0, + "type": "integer" + }, + { + "type": "null" + } + ], + "default": null, + "description": "Optional random seed.", + "title": "Seed" +} - removed
Input schema / properties / timeoutRemoved value: -{ - "anyOf": [ - { - "type": "integer" - }, - { - "type": "null" - } - ], - "default": null, - "description": "Timeout in seconds for the API to return data. Default is 1800.", - "title": "Timeout" -} - added
Input schema / properties / watermarkAdded value: +{ + "default": false, + "description": "Whether to add a watermark. Default is false.", + "title": "Watermark", + "type": "boolean" +}
- Added
wan_generate_video_all_in_one - Changed
wan_generate_video_from_image14 fields changed- added
Input schema / $defsAdded value: +{ + "MediaItem": { + "description": "A media input for video generation.", + "properties": { + "type": { + "enum": [ + "first_frame", + "last_frame", + "reference_image", + "reference_video", + "reference_audio", + "file", + "link" + ], + "title": "Type", + "type": "string" + }, + "url": { + "title": "Url", + "type": "string" + } + }, + "required": [ + "type", + "url" + ], + "title": "MediaItem", + "type": "object" + } +} - changed
Input schema / properties / audio / defaultPrevious value: -trueNew value: +false - changed
Input schema / properties / audio / descriptionPrevious value: -"Whether the generated video should include audio. Default is true."New value: +"Whether the generated video should include audio. Default is false." - changed
Input schema / properties / duration / anyOfPrevious value: -[ - { - "enum": [ - 5, - 10, - 15 - ], - "type": "integer" - }, - { - "type": "null" - } -]New value: +[ + { + "const": -1, + "type": "integer" + }, + { + "maximum": 30, + "minimum": 2, + "type": "integer" + }, + { + "type": "null" + } +] - changed
Input schema / properties / duration / descriptionPrevious value: -"Video duration in seconds. Options: 5, 10, or 15."New value: +"Video duration in seconds. Use 2-30, or -1 when supported by the model." - added
Input schema / properties / mediaAdded value: +{ + "anyOf": [ + { + "items": { + "$ref": "#/$defs/MediaItem" + }, + "maxItems": 10, + "type": "array" + }, + { + "type": "null" + } + ], + "default": null, + "description": "Optional media inputs with a type and URL, supported by wan3.0-video.", + "title": "Media" +} - changed
Input schema / properties / model / descriptionPrevious value: -"Model to use. Options: 'wan2.6-i2v' (standard image-to-video), 'wan2.6-r2v' (reference video-to-video), 'wan2.6-i2v-flash' (fast image-to-video). Default: 'wan2.6-i2v'."New value: +"Wan model to use. Default: 'wan2.6-i2v'." - added
Input schema / properties / model / enumAdded value: +[ + "wan2.6-t2v", + "wan2.6-i2v", + "wan2.6-r2v", + "wan2.6-i2v-flash", + "wan3.0-video" +] - changed
Input schema / properties / prompt_extend / defaultPrevious value: -trueNew value: +false - changed
Input schema / properties / prompt_extend / descriptionPrevious value: -"Enable LLM-based prompt rewriting. Default is true."New value: +"Enable LLM-based prompt rewriting. Default is false." - added
Input schema / properties / ratioAdded value: +{ + "anyOf": [ + { + "enum": [ + "adaptive", + "16:9", + "4:3", + "1:1", + "3:4", + "9:16" + ], + "type": "string" + }, + { + "type": "null" + } + ], + "default": null, + "description": "Video aspect ratio. Options include 'adaptive', '16:9', and '9:16'.", + "title": "Ratio" +} - added
Input schema / properties / seedAdded value: +{ + "anyOf": [ + { + "maximum": 2147483647, + "minimum": 0, + "type": "integer" + }, + { + "type": "null" + } + ], + "default": null, + "description": "Optional random seed.", + "title": "Seed" +} - removed
Input schema / properties / timeoutRemoved value: -{ - "anyOf": [ - { - "type": "integer" - }, - { - "type": "null" - } - ], - "default": null, - "description": "Timeout in seconds. Default is 1800.", - "title": "Timeout" -} - added
Input schema / properties / watermarkAdded value: +{ + "default": false, + "description": "Whether to add a watermark. Default is false.", + "title": "Watermark", + "type": "boolean" +}
1 tool update
v0.1.18- Changed
wan_generate_video_from_image2 fields changed- changed
Input schema / properties / reference_video_urls / anyOfPrevious value: -[ - { - "type": "string" - }, - { - "type": "null" - } -]New value: +[ + { + "items": { + "type": "string" + }, + "minItems": 1, + "type": "array" + }, + { + "type": "null" + } +] - changed
Input schema / properties / reference_video_urls / descriptionPrevious value: -"Comma-separated URLs of reference videos for character/timbre extraction. Used with wan2.6-r2v model."New value: +"JSON array of reference video URLs for character/timbre extraction. Used with the wan2.6-r2v model. Pass each URL as a separate array item; never join URLs with commas and never JSON-stringify the array. Legacy comma-separated strings are still accepted for backward compatibility."
2 tool updates
v0.1.17- Changed
wan_generate_video4 fields changed- changed
Input schema / properties / audio / defaultPrevious value: -falseNew value: +true - changed
Input schema / properties / audio / descriptionPrevious value: -"Whether the generated video should include audio. Default is false."New value: +"Whether the generated video should include audio. Default is true." - changed
Input schema / properties / prompt_extend / defaultPrevious value: -falseNew value: +true - changed
Input schema / properties / prompt_extend / descriptionPrevious value: -"Enable LLM-based prompt rewriting for better results. Default is false."New value: +"Enable LLM-based prompt rewriting for better results. Default is true."
- Changed
wan_generate_video_from_image4 fields changed- changed
Input schema / properties / audio / defaultPrevious value: -falseNew value: +true - changed
Input schema / properties / audio / descriptionPrevious value: -"Whether the generated video should include audio. Default is false."New value: +"Whether the generated video should include audio. Default is true." - changed
Input schema / properties / prompt_extend / defaultPrevious value: -falseNew value: +true - changed
Input schema / properties / prompt_extend / descriptionPrevious value: -"Enable LLM-based prompt rewriting. Default is false."New value: +"Enable LLM-based prompt rewriting. Default is true."
TDQS
Scored across 8 tools
The list_* and get_task tools are clearly distinct, but wan_generate_video, wan_generate_video_from_image, and especially wan_generate_video_all_in_one overlap heavily since all_in_one accepts text, frames, reference media, files, and links. An agent has no clear guidance on when to prefer the specialized tools over the all-in-one.
All tools use a consistent wan_ prefix followed by a verb_noun pattern (wan_generate_video, wan_get_task, wan_list_models), with snake_case throughout. Suffixes like _from_image, _batch, and _all_in_one remain readable and predictable.
Eight tools is a well-scoped set for a video generation API covering generation, task polling, and reference listings. The all-in-one tool is arguably redundant with the specialized generators, slightly inflating the count.
The surface covers generation (t2v, i2v, all-in-one), single and batch task polling, and reference listings for actions, models, and resolutions. Minor gaps exist around task lifecycle management (cancel/delete) and direct video download, but core workflows are covered.
Maintenance
Related MCP Connectors
One API for 100+ AI video, image, music and speech models.
AI video, images, music & SFX: Seedance 2.5, Veo 3.1, Kling 3.0, Nano Banana Pro, 20+ models.
- MusevateOAuthcom.musevate
Text, image and reference-to-video across many AI video models. Musevate account required.
AI images and videos with any model, AI personas, and AI clips from long videos.
Related MCP Servers
- AlicenseAqualityAmaintenanceKling AI video generation with text-to-video, image-to-video, and multiple quality/speed models via AceDataCloud API.15846 PyPI1MIT
- AlicenseAqualityBmaintenanceHailuo AI video generation with text-to-video, image-to-video, subject reference video, and multiple models via AceDataCloud API.6741 PyPI1MIT
- AlicenseBqualityBmaintenanceMCP server for the Wan model line enabling AI-driven animation, video editing, and image/video generation tasks via RunAPI with status polling and pricing.953 npmApache 2.0

Maestro MCP Serverofficial
AlicenseAqualityAmaintenanceProduce complete videos from a natural-language brief with Maestro through the Ace Data Cloud API.3607 PyPIMIT