MCP server for DuomiAPI — image generation, image editing, and video generation
Server has 5 tools with complete input schemas and descriptions. Naming follows verb_noun convention (generate_image, edit_image, get_image_task, generate_video, get_video_task). Descriptions are present and moderately detailed (100-200 chars), explaining what each tool does and when to call it. However, output schemas are NOT documented, LLMs cannot see what fields to expect from responses. Parameter descriptions are good but lack explicit constraints (e.g., no min/max for polling intervals, no guidance on retry behavior). Error handling is minimal, no recovery guidance or error classification. Security: API key is properly injected via environment variable, not exposed as a parameter.
Edit or transform images using a prompt (image-to-image). Returns task_id immediately — call get_image_task to poll for the result.
Generate an image from a text prompt using nano-banana. Returns task_id immediately — call get_image_task to poll for the result.
Generate a video from text or reference images using VEO. Returns task_id immediately — call get_video_task to poll for the result.
Poll the status of an image generation or editing task. Call every 5s until state is 'succeeded' or 'error'. On success, images[] contains the result URLs.
Poll the status of a video generation task. Call every 10s until state is 'succeeded' or 'error'. Returns progress percentage and video URLs on success.
Output schemas not documented. LLMs cannot see what fields get_image_task or get_video_task return (e.g., images[], state, progress). This forces agents to guess at response structure and breaks downstream tool chaining.
Polling tools (get_image_task, get_video_task) lack explicit guidance on retry behavior, backoff strategy, and timeout. Description says 'call every 5s' and 'every 10s' but no max retries, timeout duration, or error recovery path documented.
No error handling or recovery guidance. If an API call fails, LLMs receive no actionable error message. No distinction between retryable errors (timeout, rate limit) and fatal errors (invalid API key, malformed prompt).
| Scored | Grade | Overall | Spec posture | Rubric |
|---|---|---|---|---|
| 2026-09-23 | C | 68 | 2026-07-28+ | v2 |
Parameter constraints lack explicit bounds. image_size enum is present, but no guidance on what 'auto' aspect_ratio means, whether image_urls array has a max length (description says 'max 10' for edit_image but not enforced in schema), or what happens if auto_download times out.
Composition risk: generate_image and edit_image both accept auto_download flag, but no guidance on what happens if polling times out or fails. If auto_download=true and the task never completes, does the tool hang indefinitely or return a timeout error? Undocumented behavior invites agent misuse.