Skip to main content
Glama
jau123

MeiGen AI Image Generation MCP

by jau123

What Is This?

An open-source MCP Server (installed via plugin marketplace) that gives LLMs creative and aesthetic capabilities through 7 tools and carefully designed skills, enabling them to handle complex design tasks. It teaches LLMs how to use various image generation models effectively, delivering professional results through reference images and multi-direction parallel workflows.

  • Works with local ComfyUI — no external API dependency; also easily integrates with any custom API

  • Built-in 1,500+ curated prompt templates from nanobanana-trending-prompts and fine-tuned prompt engineering techniques that turn requirements into concrete image generation tasks

  • Parallel batch generation and sub-agent execution to keep the main context window clean


Related MCP server: MCP Doubao Seedream 4.0

See It in Action

Product Photo — 4 Directions in Parallel

"Create 4 product display images for this perfume, one of which should feature a model."

Process — AI uploads the reference image, crafts 4 distinct prompts, then generates all 4 in parallel:

Result — 4 creative directions delivered in under 2 minutes:

Generated images:


Quick Start

# Add the plugin marketplace
/plugin marketplace add jau123/MeiGen-AI-Design-MCP

# Install
/plugin install meigen@meigen-marketplace

Restart Claude Code after installation (close and reopen, or open a new terminal tab).

Alternative marketplace — also available via wshobson/agents (30k+ stars):

/plugin marketplace add wshobson/agents
/plugin install meigen-ai-design@claude-code-workflows

This marketplace doesn't bundle MCP server config. After installing, add to your project's .mcp.json:

{ "mcpServers": { "meigen": { "command": "npx", "args": ["-y", "meigen@1.2.10"] } } }

First-Time Setup

Free features work immediately after restart — try:

"Search for some creative inspiration"

To unlock image generation, run the setup wizard:

/meigen:setup

The wizard walks you through:

  1. Choose a provider — local ComfyUI, MeiGen Cloud, or any OpenAI-compatible API (bring your own key & endpoint)

  2. Enter credentials — ComfyUI URL, API token, or key

  3. Done — restart Claude Code once more, then start generating

Cursor / VS Code / Windsurf / Roo Code

One command to set up MeiGen for any supported AI coding tool:

npx meigen init cursor      # Cursor
npx meigen init vscode      # VS Code / GitHub Copilot
npx meigen init windsurf    # Windsurf
npx meigen init roo         # Roo Code
npx meigen init claude      # Claude Code (project-level)

This writes the correct MCP config file with the right format and path for your tool. If a config file already exists, MeiGen is merged in without overwriting your other servers.

OpenClaw

Install the full plugin from ClawHub (includes commands, skills, and MCP server):

openclaw bundles install clawhub:meigen-ai-design

Or install only the skill (no commands/agents):

npx clawhub@latest install creative-toolkit

Other MCP-Compatible Hosts

Add to your MCP config (e.g. .mcp.json, claude_desktop_config.json):

{
  "mcpServers": {
    "meigen": {
      "command": "npx",
      "args": ["-y", "meigen@latest"],
      "env": {
        "MEIGEN_API_TOKEN": "meigen_sk_..."
      }
    }
  }
}

Free features (inspiration search, prompt enhancement, model listing) work without any API key.


MCP Tools

Tool

Free

Description

search_gallery

Yes

Search 1,500+ curated trending prompts with visual previews (powered by nanobanana-trending-prompts)

get_inspiration

Yes

Get full prompt, all images, and metadata for any gallery entry

enhance_prompt

Yes

Transform a brief idea into a professional image prompt

list_models

Yes

List available models across all configured providers

comfyui_workflow

Yes

Manage ComfyUI workflow templates: list, view, import, modify, delete

manage_preferences

Yes

Remember your preferred style, aspect ratio, model, and favorite prompts

generate_image

Key

Generate an image — routes to the best available provider automatically. Local reference images are auto-compressed and uploaded.

Slash Commands

Command

Description

/meigen:gen <prompt>

Quick generate — skip conversation, go straight to image

/meigen:find <keywords>

Search 1,300+ curated prompts for inspiration

/meigen:models

Browse and switch AI models for this session

/meigen:setup

Interactive provider configuration wizard

Smart Agents

MeiGen uses specialized sub-agents for efficient parallel execution:

Agent

Purpose

image-generator

Executes generate_image in isolated context — enables true parallel generation

prompt-crafter

Writes multiple distinct prompts for batch generation (runs on Haiku for cost efficiency)

gallery-researcher

Deep gallery exploration without cluttering the main conversation (runs on Haiku)

Output Styles

Switch creative modes with /output-style:

  • Creative Director — Art direction mode with visual storytelling, mood boards, and design thinking

  • Minimal — Just images and file paths, no commentary. Ideal for batch workflows

Automation Hooks

  • Config Check — Validates provider configuration on session start, guides setup if missing

  • Auto-Open — Generated images automatically open in Preview (macOS)


MeiGen MCP supports three image generation backends. Configure one or multiple — the system auto-selects the best available.

ComfyUI — Local & Free

Run generation on your own GPU with full control over models, samplers, and workflow parameters. Import any ComfyUI API-format workflow — MeiGen auto-detects KSampler, CLIPTextEncode, EmptyLatentImage, and LoadImage nodes.

{
  "comfyuiUrl": "http://localhost:8188",
  "comfyuiDefaultWorkflow": "txt2img"
}

Perfect for Flux, SDXL, or any model you run locally. Your images never leave your machine.

MeiGen Cloud

Cloud API with multiple models: GPT Image 2.0, Nanobanana 2, Seedream 5.0, and more. No GPU required.

Get your API token:

  1. Sign in at meigen.ai

  2. Click your avatar → SettingsAPI Keys

  3. Create a new key (starts with meigen_sk_)

{ "meigenApiToken": "meigen_sk_..." }

GPT Image 2.0 resolution & quality — the default model accepts two optional generate_image parameters:

  • resolution: "1K" (default) / "2K" / "4K" — upgrade for posters, prints, wallpapers

  • quality: "low" / "medium" (default) — use "low" for quick drafts and thumbnails

Pricing: 1K/low ≈ 2 credits, 1K/medium = 10 credits (default), 2K/medium ≈ 25, 4K/medium ≈ 40. Run list_models to see each model's supported tiers.

Bring Your Own API (OpenAI-Compatible)

Connect any image generation API that follows the OpenAI format — Together AI, Fireworks AI, DeepInfra, SiliconFlow, or your own endpoint. Just provide your key, base URL, and model name:

{
  "openaiApiKey": "sk-...",
  "openaiBaseUrl": "https://api.together.xyz/v1",
  "openaiModel": "black-forest-labs/FLUX.1-schnell"
}

All three providers support reference images. MeiGen and OpenAI-compatible APIs accept URLs directly; ComfyUI accepts both URLs and local file paths, injecting them into LoadImage nodes in your workflow.


Configuration

/meigen:setup

The wizard walks you through provider selection, API key entry, and ComfyUI workflow import. You can also paste a curl command from your API provider's docs — it auto-extracts the key, URL, and model.

Config File

Configuration is stored at ~/.config/meigen/config.json. ComfyUI workflows are stored at ~/.config/meigen/workflows/.

Environment Variables

Environment variables take priority over the config file.

Variable

Description

MEIGEN_API_TOKEN

MeiGen platform token

OPENAI_API_KEY

Your API key (any OpenAI-compatible provider)

OPENAI_BASE_URL

API base URL — change this to use Together AI, Fireworks AI, etc.

OPENAI_MODEL

Model ID supported by your endpoint

COMFYUI_URL

ComfyUI server URL (default: http://localhost:8188)


Privacy

MeiGen MCP respects your privacy. Here's what happens with your data:

  • ComfyUI (local) — All processing stays on your machine. No data is sent externally.

  • MeiGen Cloud — Prompts and reference images are sent to api.meigen.ai for generation. Generated images are stored temporarily on Cloudflare R2. See meigen.ai/privacy.

  • OpenAI-compatible — Prompts and reference images are sent to the configured API endpoint. See your provider's privacy policy.

  • Reference image upload — Images are compressed locally (max 2MB) and uploaded to Cloudflare R2 via gen.meigen.ai. Uploaded images expire automatically after 24 hours. No authentication required. ComfyUI users can skip uploading entirely by passing local file paths directly.

  • Gallery search & prompt enhancement — Run locally against bundled data. No external API calls.

No telemetry, analytics, or tracking of any kind.

Custom Storage Backend

If you prefer to use your own S3/R2 bucket for reference image uploads, set the UPLOAD_GATEWAY_URL environment variable or uploadGatewayUrl in ~/.config/meigen/config.json to point to your own presign endpoint. The endpoint must implement:

POST /upload/presign
Content-Type: application/json

Request:  { "filename": "photo.jpg", "contentType": "image/jpeg", "size": 123456 }
Response: { "success": true, "presignedUrl": "https://...", "publicUrl": "https://..." }

The presignedUrl is used for a PUT upload, and publicUrl is the publicly accessible URL returned to the user.


License

MIT — free for personal and commercial use.

Available Tools

17 tools
check_generationA
Read-only

Read an existing MeiGen job without new charges. Provide generationId OR the caller requestId UUID. requestId lookup works after a lost submit response, process restart or another host. Follow structured status and nextAction; do not turn an uncertain status into a new paid UUID.

ParametersJSON Schema
NameRequiredDescriptionDefault
requestIdNoOriginal workflow step UUID supplied to generate_image/video; authenticated lookup across hosts. Provide exactly one identifier.
generationIdNoAccepted generation ID. Provide exactly one of generationId and requestId.
requestedMediaTypeNoOriginal workflow step intent, when known. Preserve it from nextAction.arguments to detect a completed result of the other media type; this does not change or resubmit the job.

Output Schema

ParametersJSON Schema
NameRequiredDescription
urlsYes
errorNo
statusYes
dedupedNo
modelIdNo
successYes
imageUrlNo
providerNo
videoUrlNo
mediaTypeNo
requestIdNo
savedPathNo
nextActionNo
creditsUsedNo
generationIdNo
creditsStatusNo
receiptWarningNo
downloadWarningNo
observationEndedNo
pollAfterSecondsNo
requestedMediaTypeNo

TDQS

A4.9/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already include readOnlyHint=true, and the description adds value beyond that by guaranteeing no new charges and explaining that requestId lookup survives restarts and host changes. It also instructs the agent to follow structured status and nextAction, giving practical behavioral guidance.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Four concise sentences, each earning its place: purpose, identifier rule, recovery scenario, and action guidance. The most important information is front-loaded, with no redundant phrasing.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the output schema, full parameter documentation, and readOnly annotation, the description covers the essential operational details: what the tool reads, how to identify the job, recovery scenarios, and a caution against unnecessary paid actions. Nothing critical is missing for correct invocation.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100%, so the baseline is 3. The description adds useful semantic guidance by clarifying the OR relationship between generationId and requestId and explaining when requestId lookup is valuable, which is not fully captured in the schema. It does not add much for requestedMediaType, but the schema already documents that parameter well.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The first sentence states a specific action and resource: 'Read an existing MeiGen job without new charges.' This clearly distinguishes a read/status operation from the generation siblings like generate_image and generate_video, and clarifies the non-billing aspect upfront.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description gives concrete when-to-use context: after a lost submit response, process restart, or another host. It also explicitly warns against converting an uncertain status into a new paid UUID, effectively telling the agent when not to fall back to generation.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

check_skillA
Read-only

Read all skill images, partial failures and refund states. No new charges. Follow nextAction: wait afterSeconds before polling (normally 10s); recover only when it says retry_request, with its exact parameters. Payment/auth/input failures and daily limits require the indicated action instead of polling. Show completed resource links.

ParametersJSON Schema
NameRequiredDescriptionDefault
skillYes
requestIdYes

TDQS

A4.2/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations only provide readOnlyHint=true, and the description meaningfully extends this with 'No new charges,' concrete retry timing, and a conditional recovery rule. This gives the agent operational expectations beyond the structured annotation.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Three compact sentences, front-loaded with the core read behavior and side-effect note, followed by precise polling and recovery rules. No filler; the closing instruction about resource links adds actionable output guidance.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Even without an output schema, the description covers what the response should surface ('Show completed resource links'), how to poll, when to stop polling, and how to handle retryable versus non-retryable failures. The remaining gap is explicit parameter guidance, already penalized separately.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters2/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 0%, and the description never names or explains the two parameters, skill and requestId. It implies a request context via 'retry_request, with its exact parameters,' but does not clarify that requestId identifies the operation or how skill selects the resource, leaving the agent to rely solely on field names and enum values.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

Description states a specific verb ('Read') and resource ('skill images, partial failures and refund states'), and clarifies the operation has no side effects ('No new charges'). It does not explicitly contrast with sibling check_generation, but the skill-specific wording makes the tool's role clear.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Provides explicit polling instructions: 'wait afterSeconds before polling (normally 10s)' and 'recover only when it says retry_request, with its exact parameters.' It also directly handles when-not-to-poll by stating that payment/auth/input failures and daily limits require a different action instead of polling.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

comfyui_workflowA
Destructive

Manage ComfyUI workflow templates: list, view parameters, import from file, modify settings, or delete.

ParametersJSON Schema
NameRequiredDescriptionDefault
nameNoWorkflow name. Required for view/modify/delete. For import, used as the save name (defaults to filename).
inputNoInput field name to modify (for modify action). E.g. "steps", "cfg", "sampler_name", "ckpt_name".
valueNoNew value as JSON (for modify action). Examples: "30", "\"euler\"", "7.5", "true".
actionYesAction to perform on ComfyUI workflows
nodeIdNoNode ID to modify (for modify action). Use "view" action first to see available node IDs.
filePathNoPath to a ComfyUI API-format workflow JSON file (for import action).

TDQS

A3.9/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already indicate destructive action (destructiveHint=true, readOnlyHint=false), and the description's action list is consistent with that. However, the description adds no extra behavioral details such as permanence of deletion, side effects of modification, or output format.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is a single concise sentence that front-loads the primary verb and lists all supported actions without fluff. It is appropriately sized for the tool's scope.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

The tool has a complex multi-action interface with no output schema, and the description does not mention what actions return (e.g., whether view returns the workflow JSON or list returns names). While the param descriptions are thorough, the lack of output/return info leaves a gap for agents.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Input schema has 100% description coverage with detailed descriptions for all six parameters, including the enum for action and examples for modify values. The description itself adds no parameter semantics beyond the schema, so baseline of 3 applies.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

Description clearly states the tool manages ComfyUI workflow templates and enumerates the five supported actions (list, view, import, modify, delete). This distinguishes it from sibling tools focused on generation or search.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description implies usage for workflow template management but does not explicitly state when to use this tool over alternatives, nor does it mention any prerequisites or exclusions. However, the action list provides clear context for when each action is appropriate.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

enhance_promptA
Read-only

Transform a simple idea into a professional image generation prompt. Use when the user provides a brief description (e.g., "a cat in a garden") and needs a detailed, high-quality prompt. Combine with gallery inspiration for best results. Free, no API key needed.

ParametersJSON Schema
NameRequiredDescriptionDefault
styleNoTarget visual style: realistic (photorealistic), anime (2D/Japanese), illustration (concept art). Use "realistic" for general/photorealistic generation (GPT Image, Nanobanana, Seedream, Midjourney V8.1 in default mode, etc.). Use "anime" when the user wants anime/illustration output — V8.1 and most general-purpose models follow the prompt and benefit from explicit anime trigger words; the default "realistic" produces prompts poorly suited for stylized output.realistic
promptYesThe simple prompt to enhance (e.g., "a cat in a garden")

TDQS

A4.1/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint=true, so the description's mention of 'free, no API key needed' adds minor behavioral context. It does not detail rate limits or failure modes, but the tool's simplicity and annotation coverage make this acceptable.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Three sentences, each serving a purpose: stating the transformation, providing a use case, and offering a tip. No wasted words, front-loaded with the main function.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a simple read-only tool with two parameters and no output schema, the description covers the core functionality, usage context, and accessibility. It is sufficiently complete for an AI agent to understand and invoke the tool correctly.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100% with detailed parameter descriptions. The description's mention of 'simple idea' aligns with the prompt parameter, but adds no new information beyond the schema. Baseline 3 is appropriate given full schema coverage.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the tool's purpose: transforming a simple idea into a professional image generation prompt. It provides a concrete example ('a cat in a garden') and implies its role as a prompt enhancer distinct from image generation tools.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description explicitly states when to use the tool ('when the user provides a brief description and needs a detailed, high-quality prompt') and suggests combining with gallery inspiration. It does not explicitly list when not to use or compare to siblings, but the context is clear enough.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

generate_ai_backgroundA

Create one product photo with a new background. Required: one actual product photo. White mode produces a fixed white background; smart chooses a scene; custom needs a background description, inferred from the request when present (e.g. a beach). Background references are not required. Use remove_background for transparent PNG cutouts. Requires a MeiGen API key configured for this local npm server (MEIGEN_API_TOKEN or saved local configuration), and purchased credits only. Local files and external public HTTPS URLs are uploaded automatically. Use the dedicated skill directly; skip unrequested prompt enhancement, preference loading and delegation. Preserve caller-supplied inputs. Infer omitted optional settings from the request and defaults; when only a requested count is known, choose suitable modules unless the caller selected them. Ask only for missing required material or unresolved scope. An explicit user request or authorized upstream workflow establishes its count, quality and budget: do not reconfirm that scope or add paid images. The caller persists a requestId for each logical step; never ask an end user for technical IDs. Use live list_skills prices and account for in-flight charges when planning within a budget; a batch is not atomic and an estimate is not a server-enforced spending cap. Recovery actions take precedence over generic retry advice: check an interrupted submission, preserve exact retryParameters and do not create a new ID or replace failed modules automatically. Retry a temporary upload at most once after the suggested wait. Return structured status, handles, errors and completed URLs to the caller; it owns progress, previews, downloads and final presentation. If interacting directly with the user, explain the problem and a concrete next step in their language. Describe image details only after actual inspection.

ParametersJSON Schema
NameRequiredDescriptionDefault
modeNowhite=fixed white-background output; smart=AI chooses a suitable scene (default); custom=customPrompt required.
ratioNoSupported output ratio from list_skills for this Skill; omit for its default. Smart/custom only; auto matches source proportions. Ignored in white mode.
qualityNoSmart/custom only: fast=1K default, hd=2K; ignored in white mode.
requestIdYesGenerate a new UUID for a new paid request; reuse the SAME requestId and inputs on retry. Use check_skill after interruptions.
customPromptNoRequired in custom mode: describe the desired background and lighting.
productImageYesRequired product photo: preserve the product while replacing its surroundings. Do not pre-remove its background. An accessible absolute local path (Windows drive/UNC, POSIX, ~/, or file://) or public direct HTTPS image URL without credentials, fragments or custom ports. Relative paths are ambiguous and rejected. Files are fully decoded, metadata removed, transparency preserved; GIF uses the first frame. Never invent attachment paths or URLs.

TDQS

A4.6/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations are provided, so the description carries the full disclosure burden and meets it thoroughly: it discloses authentication requirements (MEIGEN_API_TOKEN or saved local config), purchased-credit gating, automatic upload of local files and HTTPS URLs, non-atomic batch behavior, lack of a server-enforced spending cap, exact retry semantics (same requestId, at most one retry after suggested wait), and recovery-action precedence over generic retry advice.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness3/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The core purpose is front-loaded and the opening sentences are tight, but the description becomes a dense wall of operational policy — budget planning, requestId persistence, user-interaction language, and progress ownership — with some redundancy (e.g., asking only for missing material vs. explaining problems to the user). Most sentences carry information, but the length strains conciseness.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a complex 6-parameter tool with no annotations and no output schema, the description is unusually complete: it covers auth, cost accounting, upload behavior, retry/recovery semantics, and return expectations ('structured status, handles, errors and completed URLs'). The only minor gap is that it doesn't describe the concrete shape of the success/failure return structure, but it says the caller owns presentation, which covers the essentials.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100%, so baseline is 3, and the description adds real value on top: mode/customPrompt interdependence ('custom=customPrompt required'), ratio and quality being smart/custom-only and ignored in white mode, and nuanced productImage semantics (do not pre-remove background, no credentials/fragments/custom ports, GIF first frame, never invent paths). This exceeds the baseline meaningfully.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The first sentence states a specific verb and resource — 'Create one product photo with a new background' — and the three modes (white/smart/custom) are clearly enumerated. It distinguishes itself from siblings by explicitly naming remove_background for transparent PNG cutouts, so an agent can differentiate it without opening schemas.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description gives explicit when-to-use and when-not-to-use guidance: 'Use remove_background for transparent PNG cutouts', 'Use the dedicated skill directly; skip unrequested prompt enhancement, preference loading and delegation', and 'Use live list_skills prices'. It also directs recovery flows to check_skill and names the sibling for pricing lookups, leaving little to inference.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

generate_imageA
Destructive

Generate an image using AI. Supports MeiGen platform, local ComfyUI, or OpenAI-compatible APIs. Tip: get prompts from get_inspiration() or enhance_prompt(), and use gallery image URLs as referenceImages for style guidance. For Midjourney V8.1, an optional style reference can be passed by appending --sref <code> at the end of the prompt — only when the user provides a Midjourney style code (numeric or text). Do NOT pass URLs or local paths via --sref; for any image-based reference, use the referenceImages parameter instead.

ParametersJSON Schema
NameRequiredDescriptionDefault
sizeNoImage size for OpenAI-compatible providers: "1024x1024", "1536x1024", "auto". MeiGen/ComfyUI: use aspectRatio instead.
waitNoMeiGen only: false returns the accepted generation ID immediately; poll check_generation separately. Default true waits for completion. Submit-only requires requestId.
modelNoModel name. For OpenAI-compatible providers: any model ID your endpoint supports. For MeiGen: use model IDs from list_models (e.g. "gpt-image-2", "grok-image" = xAI Grok Imagine Quality, 1K/2K, supports image-to-image, "nanobanana-2", "seedream-4.5", "flux2-klein").
promptYesThe image generation prompt
modelIdNoAlias of model for portable workflow calls. If both are present they must match.
qualityNoImage quality. MeiGen gpt-image-2: "low" / "medium" / "high". OpenAI-compatible providers also accept "high".
downloadNoSave the completed result locally (default true). Set false for URL-only workflows. Ignored when wait=false. Other providers may return inline image content when local saving is disabled.
providerNoWhich provider to use. Auto-detected from configuration if not specified.
workflowNoComfyUI workflow name to use (from comfyui_workflow list). Uses default workflow if not specified.
requestIdNoPersistent UUID for this workflow step. Required when wait=false. Reuse with identical inputs after interruption, including after MCP restart; use a new UUID for a new generation. Omit only for a new interactive generation.
resolutionNoResolution tier. MeiGen: "1K" / "2K" / "3K" / "4K" — each model supports a subset (list_models reports resolutions when applicable). OpenAI: not used (use size instead).
aspectRatioNoAspect ratio for MeiGen provider. Use "auto" (recommended, default when omitted) to let MeiGen infer the best ratio from the prompt content. Explicit values: "1:1", "3:4", "4:3", "16:9", "9:16", "21:9", "2:3", "3:2", "4:5", "5:4", etc. (model-dependent). ComfyUI: use comfyui_workflow modify to adjust dimensions before generating.
modelVariantNoOptional model variant from live list_models, such as a supported GPT Image 2.5 variant. Forwarded unchanged to MeiGen.
negativePromptNoNegative prompt for OpenAI-compatible providers. ComfyUI: use comfyui_workflow modify to set negative prompt in the workflow before generating.
referenceImagesNoImage references for style/content guidance. Accepts direct public HTTPS URLs without credentials/fragments or accessible absolute local paths. Relative paths are rejected. Local PNG/JPEG/WebP/GIF references up to 32 MiB and 64 million pixels are fully decoded, stripped of metadata and prepared up to 4096px, preserving transparency. For ComfyUI: local files are passed directly to the workflow (requires LoadImage node). Sources: gallery URLs from search_gallery/get_inspiration, URLs from previous generate_image results, or local file paths.

Output Schema

ParametersJSON Schema
NameRequiredDescription
urlsYes
errorNo
statusYes
dedupedNo
modelIdNo
successYes
imageUrlNo
providerNo
videoUrlNo
mediaTypeNo
requestIdNo
savedPathNo
nextActionNo
creditsUsedNo
generationIdNo
creditsStatusNo
receiptWarningNo
downloadWarningNo
observationEndedNo
pollAfterSecondsNo
requestedMediaTypeNo

TDQS

A3.9/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already flag readOnlyHint=false and destructiveHint=true; the description adds a valuable behavioral rule: only append --sref for Midjourney when a style code is provided, and never pass URLs or local paths through it. This prevents a real misuse and clarifies referenceImages as the image-reference pathway. It does not explicitly discuss costs or file-writing side effects in the main description, but the annotations and schema cover part of that burden.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Four dense sentences are front-loaded with the core operation and platform support. The tip and sref warning earn their place; there is no filler and no redundant restatement of what the schema already documents.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given 15 parameters and multiple provider backends, the description plus the rich schema covers the critical call decisions: provider, async wait behavior, reference images, and Midjourney style handling. It does not enumerate every provider quirk, but an output schema exists and the parameter descriptions are detailed, so the definition is sufficiently complete.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The schema already documents 100% of the 15 parameters, so the baseline is 3. The description adds meaning beyond the schema by explaining the Midjourney --sref modifier (only when a style code exists) and by explicitly routing image-based references to referenceImages instead of the prompt.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the operation ('Generate an image using AI') and names the supported backends (MeiGen, local ComfyUI, OpenAI-compatible APIs). It is generic enough to be distinguished from specialized siblings like generate_marketing_poster or generate_ai_background, but it does not explicitly name those alternatives for direct differentiation.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The tip points the agent to get_inspiration/enhance_prompt for prompt quality and to gallery URLs for style reference, giving useful context about how to compose a call. However, it does not state when to choose this general generator over the specialized generation siblings, nor does it give exclusions or alternative routing conditions.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

generate_marketing_posterA

Design one poster for a brand, shop, event, promotion or topic. Required: only the subject. An image is not required. Exact wording, dates, offers, logo, product photos and style references are optional. Keep supplied copy with autoCopy=false; never invent event details or offers. The service plans the layout and writes the prompt. Requires a MeiGen API key configured for this local npm server (MEIGEN_API_TOKEN or saved local configuration), and purchased credits only. Local files and external public HTTPS URLs are uploaded automatically. Use the dedicated skill directly; skip unrequested prompt enhancement, preference loading and delegation. Preserve caller-supplied inputs. Infer omitted optional settings from the request and defaults; when only a requested count is known, choose suitable modules unless the caller selected them. Ask only for missing required material or unresolved scope. An explicit user request or authorized upstream workflow establishes its count, quality and budget: do not reconfirm that scope or add paid images. The caller persists a requestId for each logical step; never ask an end user for technical IDs. Use live list_skills prices and account for in-flight charges when planning within a budget; a batch is not atomic and an estimate is not a server-enforced spending cap. Recovery actions take precedence over generic retry advice: check an interrupted submission, preserve exact retryParameters and do not create a new ID or replace failed modules automatically. Retry a temporary upload at most once after the suggested wait. Return structured status, handles, errors and completed URLs to the caller; it owns progress, previews, downloads and final presentation. If interacting directly with the user, explain the problem and a concrete next step in their language. Describe image details only after actual inspection.

ParametersJSON Schema
NameRequiredDescriptionDefault
logoNoOptional exact brand logo to reproduce accurately, not a style reference. An accessible absolute local path (Windows drive/UNC, POSIX, ~/, or file://) or public direct HTTPS image URL without credentials, fragments or custom ports. Relative paths are ambiguous and rejected. Files are fully decoded, metadata removed, transparency preserved; GIF uses the first frame. Never invent attachment paths or URLs.
brandYesPoster subject: brand, event, shop, campaign or topic.
ratioNoSupported output ratio from list_skills for this Skill; omit for its default.
contentNoPoster brief when autoCopy=true; exact visible wording when autoCopy=false (the selected language may translate it). Put style, layout and design directions in extraNotes or customStyle, not in verbatim content.
qualityNolow=Fast (default); medium=Pro. These select rendering quality, not output resolution. Read list_skills for current output specifications and purchased-credit prices; no fixed completion time is guaranteed.
styleIdNoPreset ID, not its display label; choose from list_skills style options. Omit styleId and customStyle for Auto. Nonempty customStyle overrides this preset.
autoCopyNoDefault true: compose copy from the brief. False: use supplied wording faithfully; selected language may translate it.
languageNoCopy language, e.g. auto, en, zh; see list_skills for supported values
uiLocaleNoOptional UI locale fallback; language controls the text inside images.
requestIdYesGenerate a new UUID for a new paid request; reuse the SAME requestId and inputs on retry. Use check_skill after interruptions.
extraNotesNoAdditional verified facts, explicitly requested display copy, or layout/design constraints, up to 500 characters. Treat design instructions as directions, not text to print verbatim. Preserve supplied details; do not invent dates, prices, offers or claims.
styleImageNoOptional PRIMARY visual-style reference: palette, lighting, typography and mood. Do not copy its content, products, text or layout; written style is only a compatible supplement. An accessible absolute local path (Windows drive/UNC, POSIX, ~/, or file://) or public direct HTTPS image URL without credentials, fragments or custom ports. Relative paths are ambiguous and rejected. Files are fully decoded, metadata removed, transparency preserved; GIF uses the first frame. Never invent attachment paths or URLs.
customStyleNoOptional written visual direction, up to 200 characters. Nonempty text overrides styleId; omit both for Auto. If styleImage is supplied, supplement its visual style without conflicting with it.
productImagesNoOptional product/subject photos, up to three; these identify what the poster depicts, not its visual style.

TDQS

A4.6/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations provided, the description carries the full burden and does so thoroughly. It discloses authentication/credit requirements, automatic file uploads, non-atomic batch behavior, retry semantics, budget estimation caveats, and the caller's ownership of progress and presentation. It also warns against inventing event details or describing images before actual inspection.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is front-loaded with purpose and essential constraints, and the guidance is topically organized from scope to prerequisites to execution to recovery. However, it is a long single paragraph with some operational details that could be condensed or split for easier scanning, though virtually every sentence carries actionable information.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a complex tool with 14 parameters and no output schema, the description covers the full call lifecycle: prerequisites, file upload, budget planning, retry handling, caller responsibilities, and response shape. It also correctly points to list_skills for dynamic details like prices, ratios, and style options, leaving no critical gap for an agent to invoke the tool correctly.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100%, so the baseline is 3; the description adds meaningful semantic guidance beyond the schema by explaining copy preservation rules, omitted-setting inference, confirmation boundaries, and requestId reuse/retry behavior. It does not redefine every parameter, but it clarifies how parameter choices should be made in context.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description opens with a specific verb and resource: 'Design one poster for a brand, shop, event, promotion or topic.' It clearly states the tool's unique scope (a single poster) and differentiates it from generic image generation by noting an image is not required and the service plans the layout and writes the prompt.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description gives clear context: use the dedicated skill directly, skip prompt enhancement, preference loading and delegation, and ask only for missing required material. It does not explicitly name sibling alternatives like generate_image for non-poster requests, but it does define the tool's boundaries and prerequisites, including API key and purchased credits.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

generate_product_detail_imagesA

Create 1–6 coordinated ecommerce listing images. Required: one actual product photo and a resolved image count. Product name, verified selling points, logo, model photo and extra angles are optional. Each module creates one paid image. If only the count is specified, choose suitable modules; MCP calls must explicitly select modules to match that count. Requires a MeiGen API key configured for this local npm server (MEIGEN_API_TOKEN or saved local configuration), and purchased credits only. Local files and external public HTTPS URLs are uploaded automatically. Use the dedicated skill directly; skip unrequested prompt enhancement, preference loading and delegation. Preserve caller-supplied inputs. Infer omitted optional settings from the request and defaults; when only a requested count is known, choose suitable modules unless the caller selected them. Ask only for missing required material or unresolved scope. An explicit user request or authorized upstream workflow establishes its count, quality and budget: do not reconfirm that scope or add paid images. The caller persists a requestId for each logical step; never ask an end user for technical IDs. Use live list_skills prices and account for in-flight charges when planning within a budget; a batch is not atomic and an estimate is not a server-enforced spending cap. Recovery actions take precedence over generic retry advice: check an interrupted submission, preserve exact retryParameters and do not create a new ID or replace failed modules automatically. Retry a temporary upload at most once after the suggested wait. Return structured status, handles, errors and completed URLs to the caller; it owns progress, previews, downloads and final presentation. If interacting directly with the user, explain the problem and a concrete next step in their language. Describe image details only after actual inspection.

ParametersJSON Schema
NameRequiredDescriptionDefault
logoNoOptional exact brand logo to reproduce accurately. An accessible absolute local path (Windows drive/UNC, POSIX, ~/, or file://) or public direct HTTPS image URL without credentials, fragments or custom ports. Relative paths are ambiguous and rejected. Files are fully decoded, metadata removed, transparency preserved; GIF uses the first frame. Never invent attachment paths or URLs.
modulesYesRequired selection; one paid image each: hero=main shot, detail=close-up, scene=lifestyle, material=texture/craft, usage=how to use, brand=brand story. Set [] for custom modules only; otherwise select modules explicitly. Match the requested count.
qualityNolow=Fast (default); medium=Pro. These select rendering quality, not output resolution. Read list_skills for current output specifications and purchased-credit prices; no fixed completion time is guaranteed.
autoCopyNoDefault true: draft copy from the supplied product brief. False: preserve supplied wording, subject to the selected-language translation.
languageNoCopy language, e.g. auto, en, zh; see list_skills for supported values
platformNoMarketplace preset from list_skills; default amazon.
uiLocaleNoOptional UI locale fallback; language controls the text inside images.
requestIdYesGenerate a new UUID for a new paid request; reuse the SAME requestId and inputs on retry. Use check_skill after interruptions.
modelImageNoOptional person/model reference for hero and scene modules: show that person wearing or using the product. Not an image-generation model identifier. An accessible absolute local path (Windows drive/UNC, POSIX, ~/, or file://) or public direct HTTPS image URL without credentials, fragments or custom ports. Relative paths are ambiguous and rejected. Files are fully decoded, metadata removed, transparency preserved; GIF uses the first frame. Never invent attachment paths or URLs.
aspectRatioNoSupported output ratio from list_skills; default 4:5.
productNameNoOptional supplied product name; do not invent a brand or model.
productImageYesRequired main product photo: preserve the actual shape, color, packaging and readable labels. An accessible absolute local path (Windows drive/UNC, POSIX, ~/, or file://) or public direct HTTPS image URL without credentials, fragments or custom ports. Relative paths are ambiguous and rejected. Files are fully decoded, metadata removed, transparency preserved; GIF uses the first frame. Never invent attachment paths or URLs.
customModulesNo
sellingPointsNoOptional verified benefits or specifications from the caller; do not invent product claims.
extraRequirementsNoOptional additional copy, layout or product presentation requirements from the caller; preserve factual constraints.
extraProductImagesNoOptional extra product angles or detail photos, up to two; these supplement the main productImage.

TDQS

A4.7/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations provided, the description carries the full burden of behavioral disclosure, and it does so extensively. It discloses that each module creates one paid image, that batches are not atomic, that estimates are not spending caps, that uploads are automatic, that retries should preserve retryParameters, and that recovery actions take precedence over generic retry advice. It also explains the requestId reuse semantics and that image details should only be described after actual inspection.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness3/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is information-dense and front-loaded with the core purpose, but it is quite long and covers many operational details that could arguably live in a separate workflow document. Every sentence does add some value, but the density makes it harder to parse quickly. It is structured as a block of prose rather than scannable sections, which hurts usability for an agent.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a complex paid-image-generation tool with 16 parameters, no annotations, and no output schema, the description is remarkably complete. It covers required inputs, optional inputs, pricing/credit behavior, retry semantics, error recovery, caller responsibilities, and user interaction guidelines. The only minor gap is that it doesn't describe the exact return structure, but it explicitly says it returns 'structured status, handles, errors and completed URLs,' which is sufficient given no output schema exists.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 94%, so the schema already documents most parameters well. The description adds meaningful context beyond the schema: it explains the relationship between modules and count ('MCP calls must explicitly select modules to match that count'), clarifies that quality selects rendering quality not resolution, and emphasizes that productName and sellingPoints must not be invented. It doesn't add per-parameter syntax details, but the schema already covers those.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description opens with a specific verb and resource: 'Create 1–6 coordinated ecommerce listing images.' It clearly distinguishes this tool from siblings like generate_marketing_poster or generate_ai_background by focusing on coordinated listing images with modules. It also names the dedicated skill and explicitly says to skip delegation, which further differentiates it.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description gives explicit when-to-use guidance: 'Use the dedicated skill directly; skip unrequested prompt enhancement, preference loading and delegation.' It also states when to ask the user ('Ask only for missing required material or unresolved scope') and when not to reconfirm scope. It references list_skills for prices and check_skill for interruptions, providing clear alternatives and recovery paths.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

generate_videoA
Destructive

Generate a MeiGen video using a required live model ID from list_models. Reference videos and reference audio are passed as referenceVideos / referenceAudios arrays (images.meigen.ai URLs, or local files which are uploaded for you — other hosts are rejected); per-model counts and second budgets come from list_models, and reference audio is never billed. Preserve the caller’s resolved prompt, parameters and authorized scope. Set requestId, wait=false and download=false for workflow submission; then query check_generation. At most four submissions run concurrently per MCP process; the backend quota and Retry-After remain authoritative. Video generation consumes purchased credits.

ParametersJSON Schema
NameRequiredDescriptionDefault
tierNoOptional model tier. Use list_models for the selected model's live tier values.
waitNoMeiGen only: false returns the accepted generation ID immediately; poll check_generation separately. Default true waits for completion. Submit-only requires requestId.
modelNoVideo model ID. REQUIRED; call list_models for the live lineup and capabilities.
promptYesThe video generation prompt. Describe motion, scene, and style — not just the still image.
modelIdNoAlias of model. Provide at least one; both must match when supplied.
downloadNoSave the completed result locally (default true). Set false for URL-only workflows. Ignored when wait=false. Other providers may return inline image content when local saving is disabled.
durationNoVideo duration in seconds. Use list_models for the model's enum/range; when omitted the server uses the omitted-request default shown there.
lastFrameNoOptional last-frame image for a model that supports it. Accepts a public URL or local file path; requires firstFrame. Use list_models for the live model contract.
requestIdNoPersistent UUID for this workflow step. Required when wait=false. Reuse with identical inputs after interruption, including after MCP restart; use a new UUID for a new generation. Omit only for a new interactive generation.
firstFrameNoFirst-frame image when required or supported by the selected model. Accepts a public URL or local file path (auto-uploaded); use list_models and let the server enforce the live model contract.
resolutionNoOutput resolution. Use list_models for the selected model/tier's live values.
aspectRatioNoAspect ratio: "16:9", "9:16", "1:1", "4:3", "3:4", "21:9", "auto", "adaptive" (model-dependent). Defaults to "auto" when omitted.
referenceVideoNoDeprecated single-clip alias of referenceVideos. Still accepted forever; when referenceVideos is also supplied it must equal its first entry. Prefer referenceVideos.
referenceAudiosNoReference audio clips for a model whose list_models entry shows a "Reference audio" line. Each entry is either an https://images.meigen.ai/... URL or a local .wav/.mp3 path, which is uploaded for you (local paths require MEIGEN_API_TOKEN). Other hosts are rejected: pass the local file and the server uploads it. Per-model limits (clip count, per-clip seconds, total seconds, accepted formats and per-file size) come from list_models. On a model whose line says it requires a visual reference (Seedance 2.0), the request must also carry at least one reference image or reference video — audio alone is rejected. Refer to a clip in the prompt as "Audio 1", "Audio 2" … numbered in the order given here. Reference audio seconds are never billed.
referenceVideosNoReference video clips for a model that advertises reference-video support in list_models. Each entry is either an https://images.meigen.ai/... URL — typically a clip MeiGen generated earlier, passed through unchanged — or a local .mp4/.mov path, which is uploaded for you (local paths require MEIGEN_API_TOKEN). Other hosts are rejected: the server only probes clips it can fetch from that CDN, so pass the local file instead. Per-model limits — maximum number of clips, per-clip seconds and the maximum SUM of clip seconds — come from list_models; the server enforces them and rejects an over-limit request before charging. IMPORTANT — prompt requirement: to make the new clip semantically continue a reference, the `prompt` MUST explicitly say "extend" / "continue" (e.g. "Extend this video with the following plot:"). Without that, the model treats the clips as visual reference only. Refer to a specific clip in the prompt as "Video 1", "Video 2" … numbered in the order given here. Output behavior: the output is only the configured `duration` of new content — reference clips are never concatenated into it. Billing counts the SUM of the server-probed input video seconds plus the output; do not estimate it from client-side metadata.
referenceVideoDurationNoDeprecated compatibility hint. Ignored because the server probes the authoritative duration of every clip.

Output Schema

ParametersJSON Schema
NameRequiredDescription
urlsYes
errorNo
statusYes
dedupedNo
modelIdNo
successYes
imageUrlNo
providerNo
videoUrlNo
mediaTypeNo
requestIdNo
savedPathNo
nextActionNo
creditsUsedNo
generationIdNo
creditsStatusNo
receiptWarningNo
downloadWarningNo
observationEndedNo
pollAfterSecondsNo
requestedMediaTypeNo

TDQS

A4.5/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

The annotations only signal readOnlyHint=false and destructiveHint=true. The description goes further by disclosing credit consumption, the fact that reference audio is never billed, the concurrency limit of four submissions, and that backend quota/Retry-After are authoritative. It also clarifies output behavior — only configured duration, no concatenation — and that billing uses server-probed seconds, which is valuable beyond the annotation hints.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Five dense sentences front-load the core action and then immediately cover dependencies, workflow submission, concurrency, and billing. The parentheticals are information-dense rather than padding, and each sentence contributes a distinct, necessary fact for a complex generation tool.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a 16-parameter tool with concurrency, billing, file-upload, and workflow-state constraints, the description covers all key decisions: model selection, reference handling, polling pattern, quota authority, and credit consumption. With an output schema present, not restating return values is appropriate.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, so the schema already documents the model, prompt, reference arrays, wait, download, and requestId semantics. The description restates key workflow conditions such as "Set requestId, wait=false and download=false" and "reference audio is never billed," but these are also present in the input schema. This matches the baseline where the schema carries the parameter-meaning burden.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

Opens with "Generate a MeiGen video" — a specific verb and resource that clearly distinguishes it from sibling tools like generate_image and generate_marketing_poster. It also names the required dependency on list_models for a live model ID, making the scope and prerequisite explicit.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Gives clear context for when to use the tool: after selecting a model via list_models, and for workflow submission with requestId, wait=false, download=false, followed by polling with check_generation. It does not explicitly compare against sibling tools or state when not to use it, so it stops short of a full alternatives statement.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

get_inspirationA
Read-only

Get the full prompt and all image URLs for a gallery entry. Show the images to the user as visual examples. The prompt can be used directly with generate_image(), and image URLs can be passed as referenceImages for style transfer.

ParametersJSON Schema
NameRequiredDescriptionDefault
imageIdYesImage/prompt ID from search_gallery results

TDQS

A4.3/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations declare readOnlyHint=true, so the tool is safe. Description adds that it returns full prompt and image URLs and suggests showing images to users, which is helpful context beyond annotations.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Three concise sentences that front-load the main action and provide immediate value with downstream usage tips. No redundant or extraneous content.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a simple retrieval tool with one parameter and no output schema, the description fully explains what is returned and how to use it in conjunction with sibling tools. No gaps.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100% with a clear description for the single parameter imageId. The tool description does not add further detail about the parameter, so baseline of 3 is appropriate.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the tool retrieves the full prompt and all image URLs for a gallery entry, distinguishing it from search_gallery (which lists entries) and generate_image (which creates images).

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Provides direct guidance on using the prompt with generate_image() and image URLs as referenceImages for style transfer, and implies it should be used after selecting an entry from search_gallery. Lacks explicit when-not-to-use, but context is clear.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

list_modelsA
Read-only

List available AI image generation models and their capabilities. For up-to-date pricing, see https://www.meigen.ai/model-comparison.

ParametersJSON Schema
NameRequiredDescriptionDefault
activeOnlyNoOnly show active models (default: true)

Output Schema

ParametersJSON Schema
NameRequiredDescription
errorNo
modelsYes
successYes
configuredProvidersYes
executionCapabilitiesYes

TDQS

A3.8/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations declare readOnlyHint=true, so the agent knows this is a safe read operation. The description adds the context that it lists models and their capabilities, and points to an external URL for up-to-date pricing, which is useful. It doesn't describe pagination or response format, but the output schema exists to cover that.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Two sentences with no waste. The core purpose is front-loaded, and the pricing link is a useful addition that doesn't clutter the description.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a simple read-only list tool with one optional parameter and an output schema, the description is nearly complete. The only minor gap is not explicitly stating that it returns a list of models with capabilities, but that's implied by 'List available AI image generation models and their capabilities.'

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, so the schema already documents the activeOnly parameter. The description doesn't add much beyond the schema, but it does mention 'capabilities' which hints at what the output contains. Baseline 3 is appropriate.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the tool lists available AI image generation models and their capabilities, which is a specific verb+resource. It distinguishes itself from siblings like list_skills by explicitly scoping to AI image generation models.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description implies usage for discovering available models and capabilities, and the activeOnly parameter provides context for filtering. However, it doesn't explicitly state when to use this tool versus alternatives like list_skills or check_skill, nor does it mention exclusions.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

list_skillsC
Read-only

Choose a Skill by use case and required materials; read account setup, top-up instructions, live prices and upload options. Set skill to inspect one workflow. Returned inputSchema is the HTTP API schema; this local MCP also accepts actual file paths and external HTTPS image URLs using its tool schemas.

ParametersJSON Schema
NameRequiredDescriptionDefault
skillNo

TDQS

C2.4/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

The annotation readOnlyHint is true and the description does not contradict it; it mentions reading account setup, prices, etc. The description adds useful context by noting that the returned schema is the HTTP API schema and that local MCP accepts file paths/URLs, which goes beyond the annotation. However, it does not elaborate on other behavioral aspects like authentication or rate limits, but with readOnlyHint present the bar is lower.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness2/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is two sentences but not front-loaded with a clear verb+resource. The first sentence mixes selection guidance with a list of informational items; the second is technical but tangential for a listing tool. It is not concise because the core purpose is obscured.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness2/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a simple read-only tool with one optional parameter and no output schema, the description is incomplete. It does not clarify whether the tool returns a list of available skills or details for a selected skill, and the mention of 'inputSchema' is confusing. An agent would struggle to anticipate the exact return shape or how to use the output.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 0%, so the description must compensate. It partially explains the 'skill' parameter by saying 'Set skill to inspect one workflow' and hints at selection by use case, adding meaning beyond the enum values. However, it does not explain the specific enum options or how the parameter affects the output, leaving gaps.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose2/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description does not clearly state that the tool lists skills. It says 'Choose a Skill by use case and required materials' and 'Set skill to inspect one workflow,' which suggests selection/inspection rather than a simple list. The verb 'list' in the name is not echoed clearly, and it is ambiguous whether this returns a list of skills or details for one skill.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

There is no explicit guidance on when to use this tool versus siblings like check_skill or list_models. The note about 'Returned inputSchema' and accepting file paths/URLs provides some contextual usage, but it does not explain when to choose this tool over alternatives or any exclusion criteria.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

manage_preferencesA

Read or update user preferences: default style, aspect ratio, model, style notes, and favorite prompts. Call with action "get" at conversation start to load preferences.

ParametersJSON Schema
NameRequiredDescriptionDefault
indexNoremove_favorite: 0-based index of the favorite to remove
modelNoset: preferred default model name
styleNoset: preferred default style (e.g. "realistic", "anime", "illustration")
actionYesAction to perform: "get" reads all preferences, "set" updates defaults/styleNotes, "add_favorite" saves a prompt, "remove_favorite" removes by index
promptNoadd_favorite: the prompt text to save
providerNoset: preferred default provider
styleNotesNoset: free-text style notes (e.g. "cinematic lighting, shallow DOF, brand colors #1A1A2E")
aspectRatioNoset: preferred default aspect ratio. Use "auto" (recommended) to let MeiGen infer per-prompt, or pin a value like "16:9", "1:1", "9:16".

TDQS

A3.9/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations set readOnlyHint=false, implying mutation, and the description confirms 'Read or update'. No additional behavioral traits are disclosed (e.g., side effects, permissions, rate limits). The description adds minimal value beyond the annotation.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Two sentences, front-loaded with purpose, no wasted words. Efficient and clear.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

The description lacks details about return values for each action, especially since no output schema is provided. It mentions one usage scenario (get at conversation start) but not the semantics of other actions. Overall adequate but with noticeable gaps.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, so each parameter is already documented. The tool description lists the preferences categories but does not add significant new meaning beyond the schema. Baseline 3 is appropriate.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the tool reads or updates user preferences and lists specific preferences (style, aspect ratio, model, style notes, favorite prompts). It is a specific verb+resource combination that distinguishes it from sibling tools like generate_image or list_models.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description explicitly advises calling with action 'get' at conversation start to load preferences. However, it does not provide guidance on when to use 'set', 'add_favorite', or 'remove_favorite', nor does it mention when not to use this tool or alternatives.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

remove_backgroundA

Create one transparent PNG cutout for compositing, catalog assets or logos. Required: one actual source photo containing the subject. No prompt or product facts needed. This removes the background; it does not create a new scene. Requires a MeiGen API key configured for this local npm server (MEIGEN_API_TOKEN or saved local configuration), and purchased credits only. Local files and external public HTTPS URLs are uploaded automatically. Use the dedicated skill directly; skip unrequested prompt enhancement, preference loading and delegation. Preserve caller-supplied inputs. Infer omitted optional settings from the request and defaults; when only a requested count is known, choose suitable modules unless the caller selected them. Ask only for missing required material or unresolved scope. An explicit user request or authorized upstream workflow establishes its count, quality and budget: do not reconfirm that scope or add paid images. The caller persists a requestId for each logical step; never ask an end user for technical IDs. Use live list_skills prices and account for in-flight charges when planning within a budget; a batch is not atomic and an estimate is not a server-enforced spending cap. Recovery actions take precedence over generic retry advice: check an interrupted submission, preserve exact retryParameters and do not create a new ID or replace failed modules automatically. Retry a temporary upload at most once after the suggested wait. Return structured status, handles, errors and completed URLs to the caller; it owns progress, previews, downloads and final presentation. If interacting directly with the user, explain the problem and a concrete next step in their language. Describe image details only after actual inspection.

ParametersJSON Schema
NameRequiredDescriptionDefault
requestIdYesGenerate a new UUID for a new paid request; reuse the SAME requestId and inputs on retry. Use check_skill after interruptions.
productImageYesRequired source containing the subject to cut out; the subject may be a product, person or logo. The output has a transparent background. An accessible absolute local path (Windows drive/UNC, POSIX, ~/, or file://) or public direct HTTPS image URL without credentials, fragments or custom ports. Relative paths are ambiguous and rejected. Files are fully decoded, metadata removed, transparency preserved; GIF uses the first frame. Never invent attachment paths or URLs.

TDQS

A4.5/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations provided, the description carries the full burden of behavioral disclosure, and it does so extensively: it discloses upload behavior (local files and public HTTPS URLs uploaded automatically), auth requirements (MeiGen API key, MEIGEN_API_TOKEN or saved config), credit requirements (purchased credits only), retry semantics (at most once after suggested wait, preserve retryParameters), batch non-atomicity, and the fact that estimates are not spending caps. It also discloses that files are decoded, metadata removed, and GIF uses the first frame. The only minor gap is that it doesn't explicitly state the output format beyond 'transparent PNG cutout' and 'completed URLs', but the description is unusually transparent.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness3/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is information-dense and front-loaded with the core purpose, but it is quite long and includes a large amount of operational policy (budget planning, recovery actions, caller ownership of progress) that, while valuable, could be trimmed or moved to a more structured location. Every sentence does earn its place in terms of content, but the sheer length makes it harder to parse quickly. It's not bloated with fluff, but it's at the edge of what an agent can absorb efficiently.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a tool with 2 parameters, no output schema, and no annotations, the description is remarkably complete. It covers input requirements, auth, upload behavior, retry semantics, error handling, caller responsibilities, and interaction guidance. An agent has everything it needs to invoke this tool correctly and handle failures appropriately. The only thing not specified is the exact response shape, but the description says it returns 'structured status, handles, errors and completed URLs', which is sufficient given no output schema exists.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100%, so the schema already documents both parameters well. The description adds meaningful context beyond the schema: it clarifies that productImage must be an actual source photo containing the subject, that relative paths are rejected, that files are decoded and metadata removed, and that GIF uses the first frame. It also reinforces the requestId reuse semantics. This goes beyond the baseline 3 by adding operational meaning to the parameters.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description opens with a specific verb and resource: 'Create one transparent PNG cutout' for compositing, catalog assets, or logos. It explicitly distinguishes itself from scene creation ('it does not create a new scene'), which separates it from siblings like generate_ai_background and generate_marketing_poster. The purpose is unmistakable.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description gives explicit when-to-use guidance: requires one actual source photo, no prompt or product facts needed, and it explicitly says to use the dedicated skill directly while skipping prompt enhancement, preference loading, and delegation. It also names the alternative path (list_skills for prices, check_skill for interruptions) and clarifies when to ask the user. This is comprehensive routing guidance.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

upload_skill_imageB

Prepare a reference image and return imageUrl. External URLs and local file paths can also be passed directly to the generation skill. Use actual accessible bytes/URLs only; never fabricate base64 or attachment paths. No generation is started.

ParametersJSON Schema
NameRequiredDescriptionDefault
purposeNoUse upscale for enhancement attachments: preserves source dimensions until the backend asks for resizing acceptance.reference
sourceUrlNoActual public direct HTTPS image URL to prepare; choose either sourceUrl or imageBase64. Local paths go directly to a generation Skill image field, not this URL field.
imageBase64NoActual raw base64 image bytes, max 3 MiB decoded. Exactly one input is required.

TDQS

B3.4/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations provided, the description carries the full burden. It adds a key safety trait ('No generation is started') and the instruction to use 'actual accessible bytes/URLs only,' which helps agents avoid invalid inputs. It does not disclose storage, lifetime, permissions, or other side effects of preparing the image, so transparency is only partial.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Three sentences with the core purpose and return value front-loaded, followed by concise caveats about real inputs and no generation. The direct-passing note is slightly ambiguous but not padding, and the overall length is appropriate.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

The definition covers the essential contract: it returns imageUrl, does not start generation, and requires real accessible bytes/URLs. However, without an output schema or annotations, it leaves the purpose/upscale distinction and the exact relationship to direct generation partly ambiguous, so an agent may still need to infer important call context.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, so baseline 3 applies. The description reinforces the no-fabrication rule and notes that external URLs/local paths can bypass the tool, but it adds little new meaning about purpose, sourceUrl, or imageBase64 beyond what the property descriptions already provide.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description states a concrete outcome ('Prepare a reference image and return imageUrl') and explicitly distinguishes the tool from generation by adding 'No generation is started.' The verb 'prepare' is slightly vague, but the tool name, the return-value mention, and the sibling context make the resource and result reasonably clear.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description gives partial routing guidance by noting that external URLs and local file paths 'can also be passed directly to the generation skill' and by warning against fabricated inputs. However, it never clearly states when upload_skill_image is required versus when to skip it, and the sourceUrl parameter makes the 'external URLs can be passed directly' advice ambiguous.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

upscale_imageA

Enhance one still image. Crisp preserves structure; creative regenerates detail for blurry images. Pass the original public URL directly, including external URLs; avoid generic reference-image resizing. The shared backend prepares the image. Inputs above 4096px or 16 MP require acceptance of resizing; the output may be smaller than the original. Source safety cap: 64 MiB / 64 MP. Video enhancement is not exposed through this API. Requires a MeiGen API key configured for this local npm server (MEIGEN_API_TOKEN or saved local configuration), and purchased credits only. Local files and external public HTTPS URLs are uploaded automatically. Use the dedicated skill directly; skip unrequested prompt enhancement, preference loading and delegation. Preserve caller-supplied inputs. Infer omitted optional settings from the request and defaults; when only a requested count is known, choose suitable modules unless the caller selected them. Ask only for missing required material or unresolved scope. An explicit user request or authorized upstream workflow establishes its count, quality and budget: do not reconfirm that scope or add paid images. The caller persists a requestId for each logical step; never ask an end user for technical IDs. Use live list_skills prices and account for in-flight charges when planning within a budget; a batch is not atomic and an estimate is not a server-enforced spending cap. Recovery actions take precedence over generic retry advice: check an interrupted submission, preserve exact retryParameters and do not create a new ID or replace failed modules automatically. Retry a temporary upload at most once after the suggested wait. Return structured status, handles, errors and completed URLs to the caller; it owns progress, previews, downloads and final presentation. If interacting directly with the user, explain the problem and a concrete next step in their language. Describe image details only after actual inspection.

ParametersJSON Schema
NameRequiredDescriptionDefault
modeNocrisp=faithful enhancement (default); creative=AI reconstructs details and may change them. Use creative only when the user accepts those changes.crisp
imageUrlYesOriginal still PNG/JPEG/WebP: absolute local path, ~/, file://, or public direct HTTPS URL. Maximum 64 MiB/64 million pixels. Local uploads remove metadata, preserve alpha and dimensions, and compress below the gateway limit; if that fails, provide a public original URL. The backend asks before any resizing.
requestIdYesGenerate a new UUID for a new paid request; reuse the SAME requestId and inputs on retry. Use check_skill after interruptions.
allowDownscaleNoTrue only after the user accepts resizing a large source and potentially receiving a smaller result. On upscale_resize_required, no charge occurred; after acceptance use a new requestId.
confirmedCreditsYesRequired on every MCP submission, including the first: current list_skills quote within the user or upstream workflow accepted budget. Reuse explicit acceptance. On price_changed, accept the updated quote before a new requestId. This pre-dispatch check is not an atomic spending cap.

TDQS

A4.7/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations provided, the description carries the full transparency burden and does so thoroughly: it discloses upload behavior, metadata removal, 64 MiB/64 MP caps, possible downscaling, non-atomic batches, quote-vs-spending-cap semantics, retry rules, requestId reuse, and the structured return contract. This goes well beyond simple 'upscale this image' and gives an agent realistic expectations of side effects and failures.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is long, but it is front-loaded with the core purpose and then parcels planning, retry, and cost guidance into useful clauses. It earns most of its length, though a few operational policies could be tightened without losing meaning; this keeps it just shy of a 5.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a paid, upload-capable, retry-sensitive tool with no output schema, the description is remarkably complete: it covers prerequisites, cost handling, failure recovery, interaction boundaries, and what the caller receives. An agent has enough context to invoke it correctly and to coordinate with check_skill and list_skills.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters5/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Although schema coverage is 100%, the description enriches every parameter meaningfully: imageUrl gets path formats, size limits, and metadata behavior; requestId gets retry semantics; confirmedCredits gets quote and budget context; allowDownscale gets a clear charge-related caveat; mode gets user-acceptance considerations. This is far beyond the baseline 3 for complete schemas.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description opens with a specific verb and resource — 'Enhance one still image' — and immediately distinguishes the two operating modes, crisp vs creative. It also explicitly separates this from video enhancement and general image generation, making it easy to differentiate from siblings like generate_image and generate_video.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description gives concrete when-to-use guidance: pass original public URLs, avoid generic reference-image resizing, do not use this for video, and use the dedicated skill directly rather than routing through prompt enhancement or delegation. It references check_skill and list_skills as supporting tools, though it does not explicitly name sibling tools as alternatives for similar still-image operations.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

Tool Schema Changelog

Recent tool additions, removals, and schema changes observed during successful MCP inspections.

  1. 13 tool updatesv2.0.1
    • Addedcheck_generation
    • Addedcheck_skill
    • Addedgenerate_ai_background
    • Changedgenerate_image8 fields changed
      • addedInput schema / properties / download
        Added value: +{
        +  "default": true,
        +  "description": "Save the completed result locally (default true). Set false for URL-only workflows. Ignored when wait=false. Other providers may return inline image content when local saving is disabled.",
        +  "type": "boolean"
        +}
      • addedInput schema / properties / model / minLength
        Added value: +1
      • addedInput schema / properties / modelId
        Added value: +{
        +  "description": "Alias of model for portable workflow calls. If both are present they must match.",
        +  "minLength": 1,
        +  "type": "string"
        +}
      • addedInput schema / properties / modelVariant
        Added value: +{
        +  "description": "Optional model variant from live list_models, such as a supported GPT Image 2.5 variant. Forwarded unchanged to MeiGen.",
        +  "type": "string"
        +}
      • changedInput schema / properties / referenceImages / description
        Previous value: -"Image references for style/content guidance. Accepts both public URLs (http/https) and local file paths. Local files are automatically compressed and uploaded when needed. For ComfyUI: local files are passed directly to the workflow (requires LoadImage node). Sources: gallery URLs from search_gallery/get_inspiration, URLs from previous generate_image results, or local file paths."New value: +"Image references for style/content guidance. Accepts direct public HTTPS URLs without credentials/fragments or accessible absolute local paths. Relative paths are rejected. Local PNG/JPEG/WebP/GIF references up to 32 MiB and 64 million pixels are fully decoded, stripped of metadata and prepared up to 4096px, preserving transparency. For ComfyUI: local files are passed directly to the workflow (requires LoadImage node). Sources: gallery URLs from search_gallery/get_inspiration, URLs from previous generate_image results, or local file paths."
      • addedInput schema / properties / requestId
        Added value: +{
        +  "description": "Persistent UUID for this workflow step. Required when wait=false. Reuse with identical inputs after interruption, including after MCP restart; use a new UUID for a new generation. Omit only for a new interactive generation.",
        +  "format": "uuid",
        +  "type": "string"
        +}
      • addedInput schema / properties / wait
        Added value: +{
        +  "default": true,
        +  "description": "MeiGen only: false returns the accepted generation ID immediately; poll check_generation separately. Default true waits for completion. Submit-only requires requestId.",
        +  "type": "boolean"
        +}
      • changedOutput schema / (root)
        Previous value: -nullNew value: +{
        +  "$schema": "http://json-schema.org/draft-07/schema#",
        +  "additionalProperties": false,
        +  "properties": {
        +    "creditsStatus": {
        +      "type": "string"
        +    },
        +    "creditsUsed": {
        +      "type": "number"
        +    },
        +    "deduped": {
        +      "type": "boolean"
        +    },
        +    "downloadWarning": {
        +      "type": "string"
        +    },
        +    "error": {
        +      "additionalProperties": false,
        +      "properties": {
        +        "available": {
        +          "type": "number"
        +        },
        +        "code": {
        +          "type": "string"
        +        },
        +        "httpStatus": {
        +          "type": "number"
        +        },
        +        "message": {
        +          "type": "string"
        +        },
        +        "required": {
        +          "type": "number"
        +        },
        +        "retryAfterSeconds": {
        +          "type": "number"
        +        },
        +        "retryable": {
        +          "type": "boolean"
        +        }
        +      },
        +      "required": [
        +        "code",
        +        "message",
        +        "retryable"
        +      ],
        +      "type": "object"
        +    },
        +    "generationId": {
        +      "type": "string"
        +    },
        +    "imageUrl": {
        +      "type": "string"
        +    },
        +    "mediaType": {
        +      "enum": [
        +        "image",
        +        "video"
        +      ],
        +      "type": "string"
        +    },
        +    "modelId": {
        +      "type": "string"
        +    },
        +    "nextAction": {
        +      "additionalProperties": false,
        +      "properties": {
        +        "afterSeconds": {
        +          "type": "number"
        +        },
        +        "arguments": {
        +          "additionalProperties": {},
        +          "type": "object"
        +        },
        +        "message": {
        +          "type": "string"
        +        },
        +        "tool": {
        +          "type": "string"
        +        },
        +        "type": {
        +          "type": "string"
        +        }
        +      },
        +      "required": [
        +        "type"
        +      ],
        +      "type": "object"
        +    },
        +    "observationEnded": {
        +      "type": "boolean"
        +    },
        +    "pollAfterSeconds": {
        +      "type": "number"
        +    },
        +    "provider": {
        +      "enum": [
        +        "meigen",
        +        "openai",
        +        "comfyui"
        +      ],
        +      "type": "string"
        +    },
        +    "receiptWarning": {
        +      "type": "string"
        +    },
        +    "requestId": {
        +      "type": "string"
        +    },
        +    "requestedMediaType": {
        +      "enum": [
        +        "image",
        +        "video"
        +      ],
        +      "type": "string"
        +    },
        +    "savedPath": {
        +      "type": "string"
        +    },
        +    "status": {
        +      "enum": [
        +        "processing",
        +        "completed",
        +        "failed",
        +        "error",
        +        "unknown"
        +      ],
        +      "type": "string"
        +    },
        +    "success": {
        +      "type": "boolean"
        +    },
        +    "urls": {
        +      "items": {
        +        "type": "string"
        +      },
        +      "type": "array"
        +    },
        +    "videoUrl": {
        +      "type": "string"
        +    }
        +  },
        +  "required": [
        +    "success",
        +    "status",
        +    "urls"
        +  ],
        +  "type": "object"
        +}
    • Addedgenerate_marketing_poster
    • Addedgenerate_product_detail_images
    • Changedgenerate_video16 fields changed
      • addedInput schema / properties / download
        Added value: +{
        +  "default": true,
        +  "description": "Save the completed result locally (default true). Set false for URL-only workflows. Ignored when wait=false. Other providers may return inline image content when local saving is disabled.",
        +  "type": "boolean"
        +}
      • changedInput schema / properties / duration / description
        Previous value: -"Video duration in seconds. seedance-2-0 / happyhorse-1.0 currently accept ~3–15s (any integer in range). veo-3.1 accepts exactly 4, 6, or 8 (default 4) — other values will be rejected. Defaults to the model's default duration. Call list_models for the current allowed values per model."New value: +"Video duration in seconds. Use list_models for the model's enum/range; when omitted the server uses the omitted-request default shown there."
      • changedInput schema / properties / firstFrame / description
        Previous value: -"First-frame image to control where the video starts. Accepts public URL or local file path (auto-uploaded). REQUIRED for grok-video (image-to-video only — backend rejects it without a firstFrame). For seedance/happyhorse/veo it is optional: with no first frame they do pure text-to-video."New value: +"First-frame image when required or supported by the selected model. Accepts a public URL or local file path (auto-uploaded); use list_models and let the server enforce the live model contract."
      • changedInput schema / properties / lastFrame / description
        Previous value: -"Optional last-frame image to also control where the video ends. Used by seedance-2-0 and veo-3.1; happyhorse-1.0 ignores this field. Accepts public URL or local file path. Requires firstFrame to also be provided — passing lastFrame alone is rejected."New value: +"Optional last-frame image for a model that supports it. Accepts a public URL or local file path; requires firstFrame. Use list_models for the live model contract."
      • changedInput schema / properties / model / description
        Previous value: -"Video model ID. Use list_models to see available video models. Common (as of writing): \"seedance-2-0\" (multi-tier general purpose), \"happyhorse-1.0\" (cost-effective i2v/t2v), \"veo-3.1\" (Google Veo with two tiers, 4/6/8s, native audio), \"grok-video\" (xAI Grok Imagine 1.5 — IMAGE-TO-VIDEO ONLY: firstFrame REQUIRED, pure text-to-video is rejected; native audio; 4-15s; 480p/720p)."New value: +"Video model ID. REQUIRED; call list_models for the live lineup and capabilities."
      • addedInput schema / properties / modelId
        Added value: +{
        +  "description": "Alias of model. Provide at least one; both must match when supplied.",
        +  "minLength": 1,
        +  "type": "string"
        +}
      • addedInput schema / properties / referenceAudios
        Added value: +{
        +  "description": "Reference audio clips for a model whose list_models entry shows a \"Reference audio\" line. Each entry is either an https://images.meigen.ai/... URL or a local .wav/.mp3 path, which is uploaded for you (local paths require MEIGEN_API_TOKEN). Other hosts are rejected: pass the local file and the server uploads it. Per-model limits (clip count, per-clip seconds, total seconds, accepted formats and per-file size) come from list_models. On a model whose line says it requires a visual reference (Seedance 2.0), the request must also carry at least one reference image or reference video — audio alone is rejected. Refer to a clip in the prompt as \"Audio 1\", \"Audio 2\" … numbered in the order given here. Reference audio seconds are never billed.",
        +  "items": {
        +    "type": "string"
        +  },
        +  "maxItems": 10,
        +  "type": "array"
        +}
      • changedInput schema / properties / referenceVideo / description
        Previous value: -"Optional reference video URL for Seedance 2.0 \"video continuation\". Must be a publicly accessible HTTPS URL (typically a previous generation result `videoUrl`); local paths are not supported. Only seedance-2-0 accepts this — passing it with other models will fail. IMPORTANT — prompt requirement: to make the new clip semantically continue the reference, the `prompt` MUST explicitly say \"extend\" / \"continue\" (e.g. prefix with \"Extend this video with the following plot:\"). Without that, the model treats the video as visual reference only and the new clip may drift from a true continuation. Output behavior: the output is ONLY your `duration` seconds (4-15s) of new content — the reference video is NOT concatenated into the output. To get a single \"original + new\" clip the user must stitch them locally. Billing: credits are charged at the With-reference-video rate, with `billable_seconds = max(reference_duration + duration, min_billable[duration])`. Total cost is often higher than direct generation of the same output length. Always pass `referenceVideoDuration` alongside this field — omitting it causes underbilling and broken continuation behavior."New value: +"Deprecated single-clip alias of referenceVideos. Still accepted forever; when referenceVideos is also supplied it must equal its first entry. Prefer referenceVideos."
      • changedInput schema / properties / referenceVideoDuration / description
        Previous value: -"Duration of the reference video in seconds (typically 2–15 — backend validates the current allowed range). REQUIRED whenever `referenceVideo` is set; if omitted the backend treats it as 0, leading to undercharged credits and misconfigured generation. Pass the actual duration of the clip at `referenceVideo`."New value: +"Deprecated compatibility hint. Ignored because the server probes the authoritative duration of every clip."
      • addedInput schema / properties / referenceVideos
        Added value: +{
        +  "description": "Reference video clips for a model that advertises reference-video support in list_models. Each entry is either an https://images.meigen.ai/... URL — typically a clip MeiGen generated earlier, passed through unchanged — or a local .mp4/.mov path, which is uploaded for you (local paths require MEIGEN_API_TOKEN). Other hosts are rejected: the server only probes clips it can fetch from that CDN, so pass the local file instead. Per-model limits — maximum number of clips, per-clip seconds and the maximum SUM of clip seconds — come from list_models; the server enforces them and rejects an over-limit request before charging. IMPORTANT — prompt requirement: to make the new clip semantically continue a reference, the `prompt` MUST explicitly say \"extend\" / \"continue\" (e.g. \"Extend this video with the following plot:\"). Without that, the model treats the clips as visual reference only. Refer to a specific clip in the prompt as \"Video 1\", \"Video 2\" … numbered in the order given here. Output behavior: the output is only the configured `duration` of new content — reference clips are never concatenated into it. Billing counts the SUM of the server-probed input video seconds plus the output; do not estimate it from client-side metadata.",
        +  "items": {
        +    "type": "string"
        +  },
        +  "maxItems": 10,
        +  "type": "array"
        +}
      • addedInput schema / properties / requestId
        Added value: +{
        +  "description": "Persistent UUID for this workflow step. Required when wait=false. Reuse with identical inputs after interruption, including after MCP restart; use a new UUID for a new generation. Omit only for a new interactive generation.",
        +  "format": "uuid",
        +  "type": "string"
        +}
      • changedInput schema / properties / resolution / description
        Previous value: -"Output resolution. Common: \"480p\" / \"720p\" / \"1080p\" / \"4k\" (model-dependent; e.g. Seedance Pro adds 1080p and 4k, while Fast/Mini are 480p/720p only). Use list_models to see what each model supports. Higher resolutions cost more credits per second."New value: +"Output resolution. Use list_models for the selected model/tier's live values."
      • changedInput schema / properties / tier / description
        Previous value: -"Quality tier — only for models that support tiers. seedance-2-0 accepts \"mini\" (default, cheapest; 480p/720p, no reference video), \"fast\" (480p/720p), or \"pro\" (highest fidelity; native 1080p and 4K); veo-3.1 accepts \"fast\" (default) or \"pro\". Tiers may be added by the platform — call list_models to see what each model exposes."New value: +"Optional model tier. Use list_models for the selected model's live tier values."
      • addedInput schema / properties / wait
        Added value: +{
        +  "default": true,
        +  "description": "MeiGen only: false returns the accepted generation ID immediately; poll check_generation separately. Default true waits for completion. Submit-only requires requestId.",
        +  "type": "boolean"
        +}
      • changedInput schema / required
        Previous value: -[
        -  "prompt",
        -  "model"
        -]New value: +[
        +  "prompt"
        +]
      • changedOutput schema / (root)
        Previous value: -nullNew value: +{
        +  "$schema": "http://json-schema.org/draft-07/schema#",
        +  "additionalProperties": false,
        +  "properties": {
        +    "creditsStatus": {
        +      "type": "string"
        +    },
        +    "creditsUsed": {
        +      "type": "number"
        +    },
        +    "deduped": {
        +      "type": "boolean"
        +    },
        +    "downloadWarning": {
        +      "type": "string"
        +    },
        +    "error": {
        +      "additionalProperties": false,
        +      "properties": {
        +        "available": {
        +          "type": "number"
        +        },
        +        "code": {
        +          "type": "string"
        +        },
        +        "httpStatus": {
        +          "type": "number"
        +        },
        +        "message": {
        +          "type": "string"
        +        },
        +        "required": {
        +          "type": "number"
        +        },
        +        "retryAfterSeconds": {
        +          "type": "number"
        +        },
        +        "retryable": {
        +          "type": "boolean"
        +        }
        +      },
        +      "required": [
        +        "code",
        +        "message",
        +        "retryable"
        +      ],
        +      "type": "object"
        +    },
        +    "generationId": {
        +      "type": "string"
        +    },
        +    "imageUrl": {
        +      "type": "string"
        +    },
        +    "mediaType": {
        +      "enum": [
        +        "image",
        +        "video"
        +      ],
        +      "type": "string"
        +    },
        +    "modelId": {
        +      "type": "string"
        +    },
        +    "nextAction": {
        +      "additionalProperties": false,
        +      "properties": {
        +        "afterSeconds": {
        +          "type": "number"
        +        },
        +        "arguments": {
        +          "additionalProperties": {},
        +          "type": "object"
        +        },
        +        "message": {
        +          "type": "string"
        +        },
        +        "tool": {
        +          "type": "string"
        +        },
        +        "type": {
        +          "type": "string"
        +        }
        +      },
        +      "required": [
        +        "type"
        +      ],
        +      "type": "object"
        +    },
        +    "observationEnded": {
        +      "type": "boolean"
        +    },
        +    "pollAfterSeconds": {
        +      "type": "number"
        +    },
        +    "provider": {
        +      "enum": [
        +        "meigen",
        +        "openai",
        +        "comfyui"
        +      ],
        +      "type": "string"
        +    },
        +    "receiptWarning": {
        +      "type": "string"
        +    },
        +    "requestId": {
        +      "type": "string"
        +    },
        +    "requestedMediaType": {
        +      "enum": [
        +        "image",
        +        "video"
        +      ],
        +      "type": "string"
        +    },
        +    "savedPath": {
        +      "type": "string"
        +    },
        +    "status": {
        +      "enum": [
        +        "processing",
        +        "completed",
        +        "failed",
        +        "error",
        +        "unknown"
        +      ],
        +      "type": "string"
        +    },
        +    "success": {
        +      "type": "boolean"
        +    },
        +    "urls": {
        +      "items": {
        +        "type": "string"
        +      },
        +      "type": "array"
        +    },
        +    "videoUrl": {
        +      "type": "string"
        +    }
        +  },
        +  "required": [
        +    "success",
        +    "status",
        +    "urls"
        +  ],
        +  "type": "object"
        +}
    • Changedlist_models1 field changed
      • changedOutput schema / (root)
        Previous value: -nullNew value: +{
        +  "$schema": "http://json-schema.org/draft-07/schema#",
        +  "additionalProperties": false,
        +  "properties": {
        +    "configuredProviders": {
        +      "items": {
        +        "enum": [
        +          "meigen",
        +          "openai",
        +          "comfyui"
        +        ],
        +        "type": "string"
        +      },
        +      "type": "array"
        +    },
        +    "error": {
        +      "additionalProperties": false,
        +      "properties": {
        +        "code": {
        +          "type": "string"
        +        },
        +        "message": {
        +          "type": "string"
        +        },
        +        "retryable": {
        +          "type": "boolean"
        +        }
        +      },
        +      "required": [
        +        "code",
        +        "message",
        +        "retryable"
        +      ],
        +      "type": "object"
        +    },
        +    "executionCapabilities": {
        +      "additionalProperties": false,
        +      "properties": {
        +        "concurrency": {
        +          "type": "string"
        +        },
        +        "download": {
        +          "type": "boolean"
        +        },
        +        "maxConcurrentSubmissions": {
        +          "type": "number"
        +        },
        +        "submitOnly": {
        +          "type": "boolean"
        +        }
        +      },
        +      "required": [
        +        "submitOnly",
        +        "download",
        +        "maxConcurrentSubmissions",
        +        "concurrency"
        +      ],
        +      "type": "object"
        +    },
        +    "models": {
        +      "items": {
        +        "additionalProperties": true,
        +        "properties": {
        +          "id": {
        +            "type": "string"
        +          },
        +          "name": {
        +            "type": "string"
        +          }
        +        },
        +        "required": [
        +          "id",
        +          "name"
        +        ],
        +        "type": "object"
        +      },
        +      "type": "array"
        +    },
        +    "success": {
        +      "type": "boolean"
        +    }
        +  },
        +  "required": [
        +    "success",
        +    "models",
        +    "configuredProviders",
        +    "executionCapabilities"
        +  ],
        +  "type": "object"
        +}
    • Addedlist_skills
    • Addedremove_background
    • Changedsearch_gallery2 fields changed
      • changedInput schema / properties / limit / default
        Previous value: -5New value: +3
      • changedInput schema / properties / limit / description
        Previous value: -"Number of results (1-20, default 5)"New value: +"Requested number of results. The server returns at most 3; larger values from existing automations are accepted and clamped rather than rejected."
    • Addedupload_skill_image
    • Addedupscale_image
  2. 2 tool updatesv1.3.3
    • Changedgenerate_image1 field changed
      • changedInput schema / properties / model / description
        Previous value: -"Model name. For OpenAI-compatible providers: any model ID your endpoint supports. For MeiGen: use model IDs from list_models."New value: +"Model name. For OpenAI-compatible providers: any model ID your endpoint supports. For MeiGen: use model IDs from list_models (e.g. \"gpt-image-2\", \"grok-image\" = xAI Grok Imagine Quality, 1K/2K, supports image-to-image, \"nanobanana-2\", \"seedream-4.5\", \"flux2-klein\")."
    • Changedgenerate_video4 fields changed
      • changedInput schema / properties / firstFrame / description
        Previous value: -"Optional first-frame image to control where the video starts. Accepts public URL or local file path (auto-uploaded). Highly recommended for image-to-video; with no first frame the model does pure text-to-video."New value: +"First-frame image to control where the video starts. Accepts public URL or local file path (auto-uploaded). REQUIRED for grok-video (image-to-video only — backend rejects it without a firstFrame). For seedance/happyhorse/veo it is optional: with no first frame they do pure text-to-video."
      • changedInput schema / properties / model / description
        Previous value: -"Video model ID. Use list_models to see available video models. Common (as of writing): \"seedance-2-0\" (multi-tier general purpose), \"happyhorse-1.0\" (cost-effective i2v/t2v), \"veo-3.1\" (Google Veo with two tiers, 4/6/8s, native audio)."New value: +"Video model ID. Use list_models to see available video models. Common (as of writing): \"seedance-2-0\" (multi-tier general purpose), \"happyhorse-1.0\" (cost-effective i2v/t2v), \"veo-3.1\" (Google Veo with two tiers, 4/6/8s, native audio), \"grok-video\" (xAI Grok Imagine 1.5 — IMAGE-TO-VIDEO ONLY: firstFrame REQUIRED, pure text-to-video is rejected; native audio; 4-15s; 480p/720p)."
      • changedInput schema / properties / resolution / description
        Previous value: -"Output resolution. Common: \"480p\" / \"720p\" / \"1080p\" (model-dependent). Use list_models to see what each model supports. Higher resolutions cost more credits per second."New value: +"Output resolution. Common: \"480p\" / \"720p\" / \"1080p\" / \"4k\" (model-dependent; e.g. Seedance Pro adds 1080p and 4k, while Fast/Mini are 480p/720p only). Use list_models to see what each model supports. Higher resolutions cost more credits per second."
      • changedInput schema / properties / tier / description
        Previous value: -"Quality tier — only for models that support tiers. seedance-2-0 and veo-3.1 currently accept \"fast\" (default, cheaper) or \"pro\" (higher fidelity). Tiers may be added by the platform — call list_models to see what each model exposes."New value: +"Quality tier — only for models that support tiers. seedance-2-0 accepts \"mini\" (default, cheapest; 480p/720p, no reference video), \"fast\" (480p/720p), or \"pro\" (highest fidelity; native 1080p and 4K); veo-3.1 accepts \"fast\" (default) or \"pro\". Tiers may be added by the platform — call list_models to see what each model exposes."
  3. 8 tool updatesv1.3.1
    • Addedcomfyui_workflow
    • Addedenhance_prompt
    • Addedgenerate_image
    • Addedgenerate_video
    • Addedget_inspiration
    • Addedlist_models
    • Addedmanage_preferences
    • Addedsearch_gallery

TDQS

A3.5/5.0

Scored across 17 tools

Disambiguation3/5

Most tools are clearly separated by purpose, but generate_image overlaps with the specialized generators (generate_marketing_poster, generate_product_detail_images, generate_ai_background), creating possible selection ambiguity. Also, check_skill vs check_generation and list_skills vs list_models require careful reading, though the descriptions help clarify boundaries.

Naming Consistency4/5

The vast majority of tools follow a verb_noun pattern (generate_*, list_*, check_*, manage_*, enhance_*), making the naming predictable. The main outlier is comfyui_workflow, which lacks a verb and breaks the otherwise consistent convention.

Tool Count3/5

17 tools is on the heavier end for an MCP server, though the breadth of image generation, video generation, skills, gallery search, ComfyUI workflows, and preferences mostly justifies the count. The set feels slightly large but not bloated to the point of being unwieldy.

Completeness4/5

The server covers the core workflow well: skill discovery, image upload, specialized generation, generic generation, video generation, status polling, prompt enhancement, inspiration, gallery search, and preferences. Minor gaps exist such as no explicit cancel operation, no image editing/remix tool, and no direct account/billing management, but these do not create dead ends.

Maintenance

ActivityMaintained
ResponsivenessWithin a week

Related MCP Connectors

Related MCP Servers