Skip to main content
Glama

WanMCP

PyPI version PyPI downloads Python 3.10+ License: MIT MCP

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

wan_generate_video

Generate AI video from a text prompt using Wan.

wan_generate_video_from_image

Generate AI video using a reference image as the starting frame.

wan_get_task

Query the status and result of a video generation task.

wan_get_tasks_batch

Query multiple video generation tasks at once.

wan_list_models

List all available Wan models for video generation.

wan_list_resolutions

List all available resolution options.

wan_list_actions

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 Authorization: Bearer … header. Keep it in a local secret store or environment variable.

Local stdio

The client runs a local MCP process

Install mcp-wan and pass ACEDATACLOUD_API_TOKEN to that process. It still calls the AceDataCloud API.

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, enter https://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 local claude_desktop_config.json is a separate setup. Claude connector guide.

  • Claude Code: claude mcp add --transport http --scope user wan https://wan.mcp.acedata.cloud/mcp, then claude 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.json or the user profile. Check MCP: List Servers. VS Code MCP setup.

  • Codex: codex mcp add wan --url https://wan.mcp.acedata.cloud/mcp, then codex 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

  1. Open Ace Data Cloud → Applications. Sign in, or register an account first.

  2. 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.

  3. 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.

  4. 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.

  5. 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 HTTP Authorization header needs the Bearer prefix. A platform-... account-management token cannot replace a generation API key.

Copy an application API key or open Manage Keys

Create a separately named key with optional restrictions

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

For 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

  1. https://wan.mcp.acedata.cloud/health returning {"status":"ok"} checks endpoint reachability only.

  2. Confirm that the MCP client loads tools. wan_list_models is a reference tool; it does not verify downstream API access or balance.

  3. If you need a full API check, call wan_generate_video with your own valid input after reviewing current service documentation and displayed pricing. If the result contains a task ID, call wan_get_task on 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

wan2.6-t2v

Text to video

Generate video from text prompts

wan2.6-i2v

Image to video

Standard image-to-video generation

wan2.6-r2v

Reference video-to-video

Character extraction and transfer

wan2.6-i2v-flash

Fast image to video

Quick preview, lower quality

wan3.0-video

Text to video

Video generation with optional media

Configuration

Environment Variables

Variable

Description

Default

ACEDATACLOUD_API_TOKEN

API token from AceDataCloud

Required

ACEDATACLOUD_API_BASE_URL

API base URL

https://api.acedata.cloud

WAN_DEFAULT_MODEL

Default video model

wan2.6-t2v

WAN_DEFAULT_RESOLUTION

Default resolution

720P

WAN_REQUEST_TIMEOUT

Request timeout in seconds

1800

LOG_LEVEL

Logging level

INFO

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 integration

Code Quality

# Format code
ruff format .

# Lint code
ruff check .

# Type check
mypy core tools

Build & 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.md

API 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:

  1. Fork the repository

  2. Create a feature branch (git checkout -b feature/amazing)

  3. Commit your changes (git commit -m 'Add amazing feature')

  4. Push to the branch (git push origin feature/amazing)

  5. Open a Pull Request

Documentation

Documentation

License

MIT License - see LICENSE for details.


Made with love by AceDataCloud

Available Tools

8 tools
wan_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.
ParametersJSON Schema
NameRequiredDescriptionDefault
seedNoOptional random seed.
sizeNoThe size of the generated video (e.g., '1280x720').
audioNoWhether the generated video should include audio. Default is false.
mediaNoOptional media inputs with a type and URL, supported by wan3.0-video.
modelNoWan model to use. Default: 'wan2.6-t2v'.wan2.6-t2v
ratioNoVideo aspect ratio. Options include 'adaptive', '16:9', and '9:16'.
promptYesDescription of the video to generate. Be descriptive about the scene, motion, style, and mood.
durationNoVideo duration in seconds. Use 2-30, or -1 when supported by the model.
audio_urlNoURL of reference audio to use in the video. Only used when audio is enabled.
watermarkNoWhether to add a watermark. Default is false.
resolutionNoVideo resolution. Options: '480P', '720P' (default), '1080P'.720P
callback_urlNoWebhook callback URL for asynchronous notifications. When provided, the API will call this URL when the video is generated.
prompt_extendNoEnable LLM-based prompt rewriting for better results. Default is false.
negative_promptNoContent to exclude from the video. Maximum 500 characters.

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A3.8/5.0
Behavior3/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 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.

Conciseness4/5

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.

Completeness3/5

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.

Parameters3/5

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.

Purpose5/5

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.

Usage Guidelines4/5

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.

ParametersJSON Schema
NameRequiredDescriptionDefault
seedNo
audioNo
mediaNoMedia objects with type and URL. Types: first_frame, last_frame, reference_image, reference_video, reference_audio, file, link.
ratioNoadaptive, 16:9, 4:3, 1:1, 3:4, or 9:16.adaptive
promptNoVideo intent; refer to media as image 1, video 1, or audio 1 by order.
durationNoOutput seconds: 2-30, or -1 for automatic duration.
watermarkNo
resolutionNo480P, 720P, or 1080P.1080P
callback_urlNo

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

C2.7/5.0
Behavior2/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, 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.

Conciseness4/5

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.

Completeness2/5

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.

Parameters2/5

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.

Purpose4/5

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.

Usage Guidelines2/5

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.
ParametersJSON Schema
NameRequiredDescriptionDefault
seedNoOptional random seed.
sizeNoThe size of the generated video (e.g., '1280x720').
audioNoWhether the generated video should include audio. Default is false.
mediaNoOptional media inputs with a type and URL, supported by wan3.0-video.
modelNoWan model to use. Default: 'wan2.6-i2v'.wan2.6-i2v
ratioNoVideo aspect ratio. Options include 'adaptive', '16:9', and '9:16'.
promptYesDescription of the video motion and content. Describe what should happen in the video.
durationNoVideo duration in seconds. Use 2-30, or -1 when supported by the model.
audio_urlNoURL of reference audio to use in the video.
image_urlYesURL of the reference image for video generation. The video will be generated based on this image.
shot_typeNoShot type: 'single' for continuous shot, 'multi' for multi-cut editing.
watermarkNoWhether to add a watermark. Default is false.
resolutionNoVideo resolution. Options: '480P', '720P' (default), '1080P'.720P
callback_urlNoWebhook callback URL for asynchronous notifications.
prompt_extendNoEnable LLM-based prompt rewriting. Default is false.
negative_promptNoContent to exclude from the video. Maximum 500 characters.
reference_video_urlsNoJSON 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

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

C2.9/5.0
Behavior2/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 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.

Conciseness4/5

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.

Completeness3/5

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.

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

Purpose4/5

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.

Usage Guidelines2/5

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.
ParametersJSON Schema
NameRequiredDescriptionDefault
task_idYesThe task ID returned from a generation request. This is the 'task_id' field from any wan_generate_* tool response.

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A4.6/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 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.

Conciseness5/5

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.

Completeness5/5

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.

Parameters5/5

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.

Purpose5/5

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.

Usage Guidelines4/5

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.
ParametersJSON Schema
NameRequiredDescriptionDefault
task_idsYesList of task IDs to query. Maximum recommended batch size is 50 tasks.

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?

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.

Conciseness5/5

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.

Completeness5/5

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.

Parameters3/5

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.

Purpose5/5

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.

Usage Guidelines4/5

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.
ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A4.3/5.0
Behavior3/5

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.

Conciseness5/5

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.

Completeness5/5

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.

Parameters4/5

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.

Purpose5/5

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.

Usage Guidelines4/5

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.
ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A3.8/5.0
Behavior2/5

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.

Conciseness5/5

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.

Completeness4/5

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.

Parameters4/5

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.

Purpose5/5

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.

Usage Guidelines3/5

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.
ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A4.3/5.0
Behavior4/5

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.

Conciseness5/5

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.

Completeness5/5

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.

Parameters4/5

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.

Purpose5/5

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.

Usage Guidelines3/5

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.

  1. 3 tool updatesv0.1.20
    • Changedwan_generate_video13 fields changed
      • addedInput schema / $defs
        Added 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"
        +  }
        +}
      • changedInput schema / properties / audio / default
        Previous value: -trueNew value: +false
      • changedInput schema / properties / audio / description
        Previous value: -"Whether the generated video should include audio. Default is true."New value: +"Whether the generated video should include audio. Default is false."
      • changedInput schema / properties / duration / anyOf
        Previous value: -[
        -  {
        -    "enum": [
        -      5,
        -      10,
        -      15
        -    ],
        -    "type": "integer"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]New value: +[
        +  {
        +    "const": -1,
        +    "type": "integer"
        +  },
        +  {
        +    "maximum": 30,
        +    "minimum": 2,
        +    "type": "integer"
        +  },
        +  {
        +    "type": "null"
        +  }
        +]
      • changedInput schema / properties / duration / description
        Previous 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."
      • addedInput schema / properties / media
        Added 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"
        +}
      • addedInput schema / properties / model
        Added 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"
        +}
      • changedInput schema / properties / prompt_extend / default
        Previous value: -trueNew value: +false
      • changedInput schema / properties / prompt_extend / description
        Previous 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."
      • addedInput schema / properties / ratio
        Added 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"
        +}
      • addedInput schema / properties / seed
        Added value: +{
        +  "anyOf": [
        +    {
        +      "maximum": 2147483647,
        +      "minimum": 0,
        +      "type": "integer"
        +    },
        +    {
        +      "type": "null"
        +    }
        +  ],
        +  "default": null,
        +  "description": "Optional random seed.",
        +  "title": "Seed"
        +}
      • removedInput schema / properties / timeout
        Removed value: -{
        -  "anyOf": [
        -    {
        -      "type": "integer"
        -    },
        -    {
        -      "type": "null"
        -    }
        -  ],
        -  "default": null,
        -  "description": "Timeout in seconds for the API to return data. Default is 1800.",
        -  "title": "Timeout"
        -}
      • addedInput schema / properties / watermark
        Added value: +{
        +  "default": false,
        +  "description": "Whether to add a watermark. Default is false.",
        +  "title": "Watermark",
        +  "type": "boolean"
        +}
    • Addedwan_generate_video_all_in_one
    • Changedwan_generate_video_from_image14 fields changed
      • addedInput schema / $defs
        Added 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"
        +  }
        +}
      • changedInput schema / properties / audio / default
        Previous value: -trueNew value: +false
      • changedInput schema / properties / audio / description
        Previous value: -"Whether the generated video should include audio. Default is true."New value: +"Whether the generated video should include audio. Default is false."
      • changedInput schema / properties / duration / anyOf
        Previous value: -[
        -  {
        -    "enum": [
        -      5,
        -      10,
        -      15
        -    ],
        -    "type": "integer"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]New value: +[
        +  {
        +    "const": -1,
        +    "type": "integer"
        +  },
        +  {
        +    "maximum": 30,
        +    "minimum": 2,
        +    "type": "integer"
        +  },
        +  {
        +    "type": "null"
        +  }
        +]
      • changedInput schema / properties / duration / description
        Previous 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."
      • addedInput schema / properties / media
        Added 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"
        +}
      • changedInput schema / properties / model / description
        Previous 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'."
      • addedInput schema / properties / model / enum
        Added value: +[
        +  "wan2.6-t2v",
        +  "wan2.6-i2v",
        +  "wan2.6-r2v",
        +  "wan2.6-i2v-flash",
        +  "wan3.0-video"
        +]
      • changedInput schema / properties / prompt_extend / default
        Previous value: -trueNew value: +false
      • changedInput schema / properties / prompt_extend / description
        Previous value: -"Enable LLM-based prompt rewriting. Default is true."New value: +"Enable LLM-based prompt rewriting. Default is false."
      • addedInput schema / properties / ratio
        Added 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"
        +}
      • addedInput schema / properties / seed
        Added value: +{
        +  "anyOf": [
        +    {
        +      "maximum": 2147483647,
        +      "minimum": 0,
        +      "type": "integer"
        +    },
        +    {
        +      "type": "null"
        +    }
        +  ],
        +  "default": null,
        +  "description": "Optional random seed.",
        +  "title": "Seed"
        +}
      • removedInput schema / properties / timeout
        Removed value: -{
        -  "anyOf": [
        -    {
        -      "type": "integer"
        -    },
        -    {
        -      "type": "null"
        -    }
        -  ],
        -  "default": null,
        -  "description": "Timeout in seconds. Default is 1800.",
        -  "title": "Timeout"
        -}
      • addedInput schema / properties / watermark
        Added value: +{
        +  "default": false,
        +  "description": "Whether to add a watermark. Default is false.",
        +  "title": "Watermark",
        +  "type": "boolean"
        +}
  2. 1 tool updatev0.1.18
    • Changedwan_generate_video_from_image2 fields changed
      • changedInput schema / properties / reference_video_urls / anyOf
        Previous value: -[
        -  {
        -    "type": "string"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]New value: +[
        +  {
        +    "items": {
        +      "type": "string"
        +    },
        +    "minItems": 1,
        +    "type": "array"
        +  },
        +  {
        +    "type": "null"
        +  }
        +]
      • changedInput schema / properties / reference_video_urls / description
        Previous 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."
  3. 2 tool updatesv0.1.17
    • Changedwan_generate_video4 fields changed
      • changedInput schema / properties / audio / default
        Previous value: -falseNew value: +true
      • changedInput schema / properties / audio / description
        Previous value: -"Whether the generated video should include audio. Default is false."New value: +"Whether the generated video should include audio. Default is true."
      • changedInput schema / properties / prompt_extend / default
        Previous value: -falseNew value: +true
      • changedInput schema / properties / prompt_extend / description
        Previous 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."
    • Changedwan_generate_video_from_image4 fields changed
      • changedInput schema / properties / audio / default
        Previous value: -falseNew value: +true
      • changedInput schema / properties / audio / description
        Previous value: -"Whether the generated video should include audio. Default is false."New value: +"Whether the generated video should include audio. Default is true."
      • changedInput schema / properties / prompt_extend / default
        Previous value: -falseNew value: +true
      • changedInput schema / properties / prompt_extend / description
        Previous value: -"Enable LLM-based prompt rewriting. Default is false."New value: +"Enable LLM-based prompt rewriting. Default is true."

TDQS

A3.6/5.0

Scored across 8 tools

Disambiguation3/5

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.

Naming Consistency5/5

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.

Tool Count4/5

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.

Completeness4/5

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

ActivityActive
ResponsivenessUnresponsive

Related MCP Connectors

Related MCP Servers