MCP Server for Midjourney AI Image Generation via AceDataCloud API
The server provides 16 tools with generally strong naming conventions and descriptive docstrings. However, there are significant gaps in parameter validation, output schema documentation, and error handling guidance. Most tools follow the verb_noun pattern well (midjourney_describe, midjourney_imagine, midjourney_transform), and descriptions are informative with use-case guidance. The main weaknesses are: (1) output schemas are not formally documented in the code, descriptions mention what is returned but do not include JSON Schema definitions; (2) several parameters lack type constraints (e.g., 'mode' accepts string but no enum is defined in the visible schema); (3) error handling does not provide recovery guidance; (4) some parameters could benefit from explicit constraints (timeouts, image limits, aspect ratios). The tool definitions are clearly registered via @mcp.tool() decorators, so they are directly visible and not inferred.
Blend multiple images together using Midjourney. This allows you to combine 2-5 images into a new creative fusion. Use this when: - You want to merge elements from multiple images - You want to create composite images - You want to blend styles or subjects together Example: - Blend a bear image with a chainsaw image with prompt "The bear is holding the chainsaw" Returns: Task ID and blended image information.
Get AI-generated descriptions of an image. This analyzes an image and returns 4 alternative text descriptions that could be used as prompts to recreate similar images with Midjourney. Use this when: - You want to understand what prompts might create a similar image - You want to reverse-engineer an image's style or composition - You need inspiration for prompts based on existing artwork - You want to describe an image for documentation The descriptions include style tags and aspect ratio parameters that Midjourney understands. Returns: Four alternative descriptions of the image with Midjourney-compatible formatting.
Edit an existing image using Midjourney. This allows you to modify an existing image based on a text prompt, optionally using a mask to specify which regions to edit. Use this when: - You want to modify an existing image with AI - You want to add or change elements in an image - You want to apply style changes to an image - You need to edit specific regions using a mask For masks: - White areas in the mask indicate regions to regenerate - Black areas will be preserved from the original Returns: Task ID and edited image information including URLs and dimensions.
Output schemas not formally documented. Tools return formatted strings (e.g., format_describe_result, format_edit_result) but the actual JSON structure is not visible in parameter definitions or return type annotations. LLMs cannot plan downstream tool calls without knowing what fields are present in the response.
Parameter 'mode' (MidjourneyMode) is used across 9+ tools but never constrained with an explicit enum in the visible schema. Code shows a type alias but LLMs see only 'string' without knowing valid values are 'fast', 'relax', 'turbo'. This invites hallucinated mode values.
Inferred effective spec: 2026-07-28+.
| Scored | Grade | Overall | Spec posture | Rubric |
|---|---|---|---|---|
| 2026-09-23 | C | 63 | 2026-07-28+ | v2 |
Extend an existing Midjourney video to make it longer. This allows you to continue a previously generated video by adding more frames based on your prompt description. Use this when: - You want to make a video longer - You want to continue the story or motion from an existing video - You need to add more content to a short clip Returns: Task ID and extended video information including new video URLs.
Generate a video from a reference image using Midjourney. This creates an AI-generated video based on your description and a starting frame image. Midjourney video generation is image-to-video only — a reference image is always required. You can optionally specify an ending frame for more control. Use this when: - You want to animate a still image - You want to create short video clips from a reference image - You need AI-generated video content The generation process returns 4 video variations. Returns: Task ID and video information including cover image and video URLs.
Get guidance on writing effective prompts for Midjourney. Shows how to structure prompts and use parameters for best results. Following this guide helps Midjourney understand your creative vision. Returns: Complete guide with prompt structure, parameters, and examples.
Get the seed value of a previously generated Midjourney image. The seed is a numeric value that controls the randomness of generation. Using the same seed with the same prompt will produce similar results, which is useful for reproducible generation or fine-tuning prompts. Use this when: - You want to reproduce a specific generation result - You need the seed to use with --seed parameter in prompts - You want to create variations with consistent base randomness Returns: The seed value for the specified image.
Query the status and result of a Midjourney generation task. Use this to check if a generation is complete and retrieve the resulting image/video URLs and metadata. Use this when: - You want to check if a generation has completed - You need to retrieve URLs from a previous generation - You want to get the full details of a generated image or video - You used async callback and want to check results later Returns: Task status and generation result including URLs, dimensions, and available actions.
Query multiple Midjourney generation tasks at once. Efficiently check the status of multiple tasks in a single request. More efficient than calling midjourney_get_task multiple times. Use this when: - You have multiple pending generations to check - You want to get status of several images/videos at once - You're tracking a batch of generations - You want to list recent tasks with pagination (omit task_ids and trace_ids) Returns: Status and result information for all queried tasks.
Generate AI images from a text prompt using Midjourney. This is the primary way to create images - describe what you want and Midjourney will generate a 2x2 grid of 4 image variations. Use this when: - You want to create new images from a text description - You have a creative vision to visualize - You need AI-generated artwork or illustrations For image transformations like upscaling or variations, use midjourney_transform instead. Returns: Task ID and generated image information including URLs, dimensions, and available actions.
List all available Midjourney API actions and corresponding tools. Reference guide for what each action does and which tool to use. Helpful for understanding the full capabilities of the Midjourney MCP. Returns: Categorized list of all actions and their corresponding tools.
List all available transformation actions for Midjourney images. Reference guide for transform actions used with midjourney_transform tool. Returns: Detailed list of all transformation actions and when to use them.
Shorten and analyze a Midjourney prompt using Midjourney's built-in prompt analyzer. This tool helps optimize long or complex prompts by identifying the most important elements and producing up to 5 shortened candidate prompts that preserve the dominant ideas. Use this when: - You have a long prompt and want to identify the most impactful words - You want to understand which parts of your prompt carry the most weight - You need to simplify a complex prompt while keeping its essence Returns: Up to 5 shortened candidate prompts derived from the original.
Transform an existing Midjourney image with various operations. This allows you to upscale, create variations, zoom, or pan existing images generated by Midjourney. Use this when: - You want to upscale one of the 4 images from a generation - You want to create variations of a specific image - You want to zoom out or pan an image - You want to regenerate with the same prompt Workflow example: 1. Generate with midjourney_imagine -> get image_id 2. Upscale favorite: midjourney_transform(image_id, "upscale2") 3. Further upscale: midjourney_transform(new_image_id, "upscale_4x") Returns: Task ID and transformed image information.
Translate Chinese text to English for use as Midjourney prompts. Midjourney works best with English prompts. This tool helps translate Chinese descriptions to English, optimized for image generation. Use this when: - You have a Chinese description that needs translation - You want to convert Chinese prompts to English - You need English prompts for better Midjourney results Returns: Translated English text ready to use as a Midjourney prompt.
Generate images using a reference image as inspiration. This allows you to use an existing image as a starting point and modify it based on your prompt description. Use this when: - You want to reimagine an existing image with modifications - You want to change the style of an image - You want to add or change elements while keeping the composition Tips: - Use --iw parameter (image weight) to control reference influence (0-2) - Higher --iw values make the output more similar to the reference
Error handling does not provide recovery guidance. The code calls client methods that may fail (describe, imagine, edit, etc.) but there is no visible error classification, retry logic, or recovery suggestions in tool docstrings. An LLM receiving a failure has no guidance on what to try next.
Timeout parameter in midjourney_imagine defaults to 480 seconds but lacks min/max constraints. No validation visible in schema. An LLM could pass 0, negative, or absurdly large values without pushback.
Video resolution parameter accepts string ('720p' or '480p') but is not constrained as an enum in visible schema. Invites typos like '720P' or '1080p'.
Parameter 'async_' uses validation_alias='async' due to Python keyword conflict. This is a valid workaround, but the LLM sees 'async_' which is less intuitive than internal remapping. Consider documenting this edge case in description.
Tools that accept 'callback_url' parameter do not document callback payload format, timing, or expected response format. An LLM setting up async operations cannot reason about what to expect.
midjourney_get_tasks_batch allows pagination via offset/limit but description does not clarify maximum batch size, default behavior when both task_ids and trace_ids are omitted, or whether results are ordered.