MCP server for Volcengine Ark Doubao-Seedream image generation and editing
Server has 4 tools with complete input schemas and descriptions. Naming follows verb_noun convention (generate_image, edit_image, get_image_result). Descriptions are present and moderately detailed (80-180 chars), explaining what each tool does and its return value. However, parameter descriptions are sparse or missing for several fields (e.g., 'watermark' lacks explanation of what the watermark does; 'response_format' description is minimal). Output schemas are not documented, LLMs cannot predict the structure of results. Error handling exists but is minimal (generic error messages without recovery guidance). No tool annotations (readOnlyHint/destructiveHint) despite clear write/read semantics. Job store pattern is reasonable but not idempotent-safe for retries.
Edit or restyle a single reference image using a text prompt (uses doubao-seededit-3-0-i2i). Output size is adaptive to input image aspect ratio. Returns a request_id to poll with get_image_result.
Generate a single image from a text prompt (text-to-image), or using 1–14 reference images (image-to-image). Returns a request_id to poll with get_image_result.
Generate a group of related images from a prompt and optional reference images. Returns a request_id to poll with get_image_result.
Poll the result of a previous generate_image, edit_image, or generate_image_group call. Returns state: pending | succeeded | error.
Output schema not documented. LLMs cannot predict the structure of results returned by generate_image, edit_image, generate_image_group, or get_image_result. The job store returns {state, data?, error?} but this is not exposed in tool definitions.
Parameter descriptions incomplete. 'watermark' (all tools) lacks explanation of what the watermark does or when to use it. 'response_format' descriptions are minimal. 'model' descriptions mention resolution constraints but not quality/speed tradeoffs.
No tool annotations. generate_image, edit_image, and generate_image_group are destructive (WRITE) operations but lack destructiveHint annotation. get_image_result is read-only but lacks readOnlyHint. Agents cannot infer safety semantics.
| Scored | Grade | Overall | Spec posture | Rubric |
|---|---|---|---|---|
| 2026-09-23 | D | 55 | 2026-07-28+ | v2 |
Error handling lacks recovery guidance. failJob() stores generic error messages. When get_image_result returns an error state, the LLM receives only the error string with no guidance on whether to retry, adjust parameters, or escalate.
Job TTL and idempotency not documented. Jobs expire after 10 minutes, but this is not mentioned in tool descriptions. Agents may retry get_image_result after expiry and receive 'job not found' with no explanation.