MCP server exposing the Wan 3.0 Prime Python client as agent tools for AI video generation
Server exposes 4 tools with complete JSON schemas and basic descriptions. However, descriptions are generic and lack actionable context for LLM selection. Parameter descriptions are minimal (e.g., 'Descriptive text prompt' for prompt param). No output schema documentation. No error handling guidance. Tool names follow verb_noun pattern but lack specificity about async behavior and polling requirements. Schemas are present but descriptions fall short of production baseline (194 chars avg; these average ~80 chars).
Get the status and outputs for a Wan Prime generation job.
Animate a source image URL into a Wan 3.0 Prime video with synchronized audio.
Generate a Wan 3.0 Prime video conditioned on up to 10 reference images, 5 reference videos, and 5 reference audios.
Generate a higher-fidelity Wan 3.0 Prime video with synchronized audio from a descriptive text prompt.
Descriptions lack actionable context. 'Generate a higher-fidelity Wan 3.0 Prime video...' does not explain WHEN to use this vs image_to_video or reference_to_video, or that calls are async and require polling via get_task_status.
No output schema documented. Tools return JSON strings but LLMs cannot infer response structure (e.g., does result contain 'video_url', 'request_id', 'status'?). Downstream tool calls (get_task_status) require knowing the request_id field name.
Parameter descriptions are minimal and lack constraints. 'Descriptive text prompt' does not specify length limits, content restrictions, or examples. 'Video resolution' lacks enum values (is '720p' the only option? What about '1080p', '480p'?).
| Scored | Grade | Overall | Spec posture | Rubric |
|---|---|---|---|---|
| 2026-09-23 | D | 59 | 2026-07-28+ | v2 |
No error handling guidance. Tools return JSON but no documentation of error response format, retry logic, or what to do if generation fails. LLM cannot distinguish transient failures from permanent ones.
Async polling pattern not documented. get_task_status requires a request_id, but tool descriptions do not explain that generation calls return a request_id and that polling is required. LLM must infer this from context.