Drive the film studio API (vivijure-cf / vivijure-local) and optionally the hosted control plane admin API from an agent.
Vivijure Studio MCP provides 7 read-only tools with clear naming (verb_noun pattern: studio_modules, list_cast, get_cast, etc.) and detailed descriptions (avg ~180 chars). All tools have input schemas with proper JSON Schema structure. However, parameter descriptions are sparse or missing entirely, most tools accept empty objects with no documented constraints. Output schemas are not documented, forcing LLMs to infer response structure. Error handling is minimal; no recovery guidance or actionable error messages visible. The codebase shows thoughtful design (stateless, forward-compatible, raw body handling for uploads) but lacks LLM-optimized parameter documentation and output schema contracts.
GET /api/cast/:id. One cast member by its public id.
GET /api/storyboard/projects/:id. One project (incl. its last saved storyboard).
GET /api/cast. Every cast member (id, name, bible, portrait, LoRA status, voice).
GET /api/storyboard/projects. Every storyboard project.
GET /api/storyboard/models. The planning model catalog (the model ids accepted by plan_storyboard / refine_storyboard / chat).
GET /api/modules. The studio projection the whole pipeline renders from: installed modules and their config_schema, which module names serve each hook (pre-sorted), the hook catalog, and render.quality_tiers + default_tier. Read this first to discover motion.backend names, quality tiers, and available capabilities before planning or rendering.
Output schemas not documented. LLMs cannot infer response structure (fields, types, nested objects). Agents must guess what data is available after each call, risking wrong field access and wasted follow-up calls.
Parameter descriptions missing or trivial for tools accepting empty objects (studio_modules, voices, storyboard_models, list_cast, list_projects). No guidance on pagination, filtering, or result limits. LLMs cannot optimize queries.
No error handling or recovery guidance visible in tool definitions. If a cast member ID is invalid or a project not found, LLMs receive no actionable error message or suggestion for next steps (e.g., 'Try list_cast() first').
| Scored | Grade | Overall | Spec posture | Rubric |
|---|---|---|---|---|
| 2026-09-23 | C | 65 | 2026-07-28+ | v2 |
GET /api/voices. The 12 valid Aura-1 speaker ids + labels; the only legal voice_id values for update_cast AND for submit_film dialogue_lines[].voice_id (the voice-only film path, mcp#29).
List tools (list_cast, list_projects) lack pagination parameters (limit, offset, cursor). No indication of result count limits. Large result sets could exhaust context window without agent control.
Parameter 'id' in get_cast and get_project has minimal description ('Cast member public id', 'Project public id'). No guidance on format, length, or how to obtain valid IDs. LLMs may pass invalid values without clear feedback.