Audio-driven avatar video generation server with MCP (Model Context Protocol) interface
StableAvatar has clear tool names starting with verbs (generate_, get_, release_, extract_, separate_) and complete parameter schemas with type definitions. However, descriptions lack depth, most are 1-2 sentences and do not explain WHEN to use each tool, what prerequisites exist, or how they compose. Parameter descriptions exist but are minimal (e.g., 'Path to the reference image (PNG/JPG)' lacks constraints on file size, resolution, or format validation). Error handling is present but generic ('return status: error'). No output schema documentation. Critical security issue: generate_avatar_video accepts arbitrary file paths without validation, risking path traversal. No tool annotations (readOnlyHint, destructiveHint). Missing discussion of resource limits, latency expectations, and multi-step workflows.
Extract audio from a video file.
Generate audio-driven avatar video from a reference image and audio file.
Get current GPU status including memory usage and model state.
Release GPU memory by unloading the model. Use this when you need to free up VRAM for other tasks.
Separate vocals from background music in an audio file. Useful for cleaner lip synchronization.
Path traversal vulnerability: generate_avatar_video, extract_audio_from_video, and separate_vocals accept image_path, audio_path, and video_path parameters without validating that they point to safe locations. An adversary could pass '/etc/passwd' or '../../../sensitive/file' causing information disclosure or unintended file access.
Tool descriptions are generic and lack WHEN-to-use guidance. 'Generate audio-driven avatar video...' tells WHAT but not WHEN (before or after preprocessing?), WHEN to call get_gpu_status / release_gpu_memory, or what prerequisites exist. LLMs struggle to compose tools without explicit workflow hints.
Output schemas undocumented. Tools return dicts with keys like 'status', 'video_path', 'seed', but the response structure is not formally documented. LLMs cannot reliably extract fields or plan downstream tool calls without knowing what keys to expect.
| Scored | Grade | Overall | Spec posture | Rubric |
|---|---|---|---|---|
| 2026-09-22 | D | 56 | 2026-07-28+ | v2 |
| 2026-03-09 | F | 42 | - | v1 |
Missing tool annotations. Tools like release_gpu_memory and generate_avatar_video (expensive operation) have no destructiveHint, readOnlyHint, or idempotentHint. This prevents agents and UIs from correctly categorizing tool safety.
Constraint validation not enforced in schema. Parameter 'clip_sample_n_frames' has a constraint 'must be 4n+1' mentioned in description but not expressed as JSON Schema pattern or enum. LLMs cannot verify constraints; invalid values will be caught only at runtime.
Error handling is generic. Exceptions return {'status': 'error', 'error': str(e)}, which may expose stack traces or internal details to the LLM context. Errors lack guidance on recovery (e.g., 'GPU out of memory, call release_gpu_memory() then retry').
Parameter descriptions lack units and constraints. E.g., 'width: Output video width (256-2048, default 512)' does not specify units (pixels?), and 'audio_guide_scale (1.0-10.0)' lacks explanation of what this scale controls or how it affects output quality.
No input validation constraints in schema. Parameters like 'fps', 'width', 'height', 'num_inference_steps' are documented with ranges in descriptions but lack JSON Schema minValue/maxValue constraints, allowing LLMs to pass out-of-range values.