Self-hosted AI media generation platform with MCP server support for video, image, and audio generation via multiple providers (Kling, Seedream, ElevenLabs, mock demo)
CTXAI defines 8 tools with complete JSON schemas and descriptions. Naming follows verb_noun convention (list_models, generate_video, wait_for_job). Descriptions are substantive (100-250 chars typical), explaining WHAT the tool does and WHEN to use it. However, several parameter descriptions are minimal or missing entirely. Output schemas are not explicitly documented, responses are inferred from code. Error handling is present but lacks recovery guidance. No tool annotations (readOnlyHint/destructiveHint) despite clear risk classifications. Composition is sound: tools chain logically (generate → wait_for_job → compose). Security: no secrets in params (good). Overall: solid foundation with gaps in parameter documentation and error messaging.
Compose generated assets into a publish-ready video (YouTube Shorts 9:16, YouTube 16:9 or square). Scenes play in order; scenes with voiceover text get ElevenLabs narration and burned-in word-level captions. Returns a compose job — use wait_for_job for the final MP4. Typical agent workflow: generate clips/images first, then compose them.
Start an image generation (e.g. Seedream). Usually completes within seconds; the response then already contains the asset URL.
Start a video generation (e.g. Kling text-to-video or image-to-video). Returns a job_id; use wait_for_job to get the finished video.
Generate a voiceover (ElevenLabs) with word-level timestamps. Returns an MP3 asset plus an alignment JSON asset for captions.
Get the current status, progress and assets of a generation job.
Parameter descriptions incomplete or missing. 'params' object in generate_video, generate_image, generate_voiceover lacks detail on what model-specific parameters are valid. 'voice_id' in generate_voiceover has no description. LLMs cannot infer valid values without explicit guidance.
Output schemas not documented. Tools return job payloads with fields like job_id, status, assets, but no formal schema is visible in tool definitions. LLMs must infer response structure from descriptions alone, risking misuse of returned fields.
No tool annotations (readOnlyHint/destructiveHint). Tools are marked with Risk classifications (READ_ONLY, WRITE) in comments, but MCP tool definitions lack formal annotations. Agents cannot programmatically distinguish safe reads from destructive writes.
| Scored | Grade | Overall | Spec posture | Rubric |
|---|---|---|---|---|
| 2026-09-23 | C | 62 | 2026-07-28+ | v2 |
List recent generation jobs of the authenticated user.
List all generation models on this CTXAI instance, including whether the user has configured credentials for them and each model's parameter JSON schema.
Block until a generation job finishes (or the timeout elapses) and return its final status with asset URLs.
Error messages lack recovery guidance. Code throws generic errors ('No configured video provider', 'Unknown or unconfigured model') but does not suggest next steps. Per pattern:recovery-guide, errors should tell LLMs what to do: 'Call list_models() to see available options.'
compose_video scenes parameter is complex nested array with conditional required fields. 'voiceover' and 'duration' are mutually exclusive but not documented. LLMs may pass both or neither, causing silent failures.