Official CLI and MCP server for muapi.ai — expose generative media tools (image, video, audio generation and editing) as MCP tools for AI agent integration
Moderate quality across 8 tools. Strong points: all tools have descriptions (50 - 200 chars, within baseline); naming follows verb_noun pattern; input schemas present with type information and enums. Weak points: tool descriptions lack WHEN-to-use guidance and prerequisites; parameters lack constraint details (ranges, patterns); output schemas are inferred from docstrings but not formally documented in JSON Schema; error handling is generic (returns {ok: False, error: str()}) without recovery guidance; no evidence of idempotency hints or confirmation patterns on destructive ops. Tools 1 - 4 are LangChain integrations with good high-level docs; Tools 5 - 8 are CLI commands with more detailed parameter enums but missing output schema formalization.
Hand a multi-asset brief to muapi's creative agent — it will plan and execute a DAG of generation calls (e.g. "make a 30s product story with visuals and music"). This tool can spend significant credits. Wrap it with `interrupt_on` in your Deep Agent config so a human approves the plan before execution.
Generate ONE media asset via muapi (image / video / audio / edit / enhance). Use this for a single, clear ask. Costs credits. For multi-step asks (story, campaign, multi-asset packs), use muapi_creative_agent or a matching muapi_run_skill instead.
Edit or transform an image using a text prompt and a source image URL.
Generate an image from a text prompt using muapi.ai. Returns URLs of generated images.
Run a named muapi skill — a pre-baked multi-step recipe (e.g. "ugc-ads-workflow", "storyboard", "product-ad-cinematic"). Skills bundle several generation calls into a deterministic workflow. Use `muapi_select` to discover skill names and their required inputs, then call this with the inputs filled in.
Output schemas not formally documented. Tool descriptions mention return types (e.g., '{ok, url, model, kind, request_id}') but no JSON Schema definition is visible. LLMs cannot reliably extract structured data without a formal schema. This breaks downstream tool composition.
Error handling is generic and non-actionable. All tools return {ok: False, error: str(exc)} without guidance on next steps. Per pattern:recovery-guide, errors should tell the LLM what to do next (e.g., 'Invalid model. Try muapi_select() to discover available models for kind=image').
| Scored | Grade | Overall | Spec posture | Rubric |
|---|---|---|---|---|
| 2026-09-22 | C | 66 | 2025-06-18+ | v2 |
| 2026-03-09 | F | 0 | - | v1 |
Discover muapi models and skills for a brief — free, no credits spent. Use this FIRST when you don't know which model/skill fits, or to budget a multi-step plan before calling muapi_generate / muapi_run_skill.
Animate an image into a video using muapi.ai.
Generate a video from a text prompt using muapi.ai.
Destructive tools lack confirmation or dry-run pattern. muapi_creative_agent and muapi_generate spend credits (money); muapi_run_skill executes multi-step workflows. No pattern:confirmation-request. Tools should warn the agent about credit consumption and optionally support a preview/plan mode before execution.
Parameter descriptions lack constraint details. E.g., 'tier' accepts 'best|balanced|fast|budget' (enum defined in schema) but description does not explain when to use each. 'kind' description lists 9 values but no guidance on modality trade-offs. Per pattern:constrained-input, enums should be paired with contextual descriptions.
Missing WHEN-to-use guidance in tool descriptions. muapi_select description says 'Use this FIRST' (good), but muapi_image_generate vs muapi_generate distinction is not clear. Per pattern:tool-description, each tool description should answer: What does it do? When should I call it vs other tools? What does it return?
The 'extra' parameter in muapi_generate is a free-form dict with no documented fields or constraints. Per pattern:tool-description, all parameters need descriptions. What model-specific params does each model accept? How does the LLM know what to put in 'extra'?
No pagination or result-limiting documented for muapi_select. If 'limit' parameter returns 5 models per category, what is the max total? Can the shortlist exceed context? Per pattern:paginated-result, tools returning lists should document limits and pagination.
No tool annotations (idempotentHint, readOnlyHint, destructiveHint) visible. Per MCP spec 2026-07-28, tool annotations help LLMs reason about side effects and retry safety. muapi_select is read-only (should have readOnlyHint=true); muapi_generate, muapi_creative_agent are destructive (should have destructiveHint=true); no idempotency stated.