Aetherwave Studio
OfficialThis MCP server exposes AetherWave Studio media-generation and utility tools for images, video, music, and audio mastering, plus account and gallery reads.
Check credit balance and list available image models, video models, and audio mastering presets.
Generate images from text or reference images, with model-selection guidance and I2I support.
Edit existing images, upscale images, reframe images to new aspect ratios, and remove image backgrounds.
Generate videos from text or a starting image, upscale/reframe videos, and remove video backgrounds.
Generate music with Suno, including instrumental output and optional lyrics/title.
Master audio tracks using presets such as streaming, loud, EDM, rock, podcast, and cinematic.
Browse the user's AetherWave gallery with pagination and filters for image, video, audio, or favorites.
Allows generating music using Suno AI models (V3.5 to V5.5) with support for lyrics, instrumental mode, and multiple tracks per submission.
@aetherwave-studio/mcp
Model Context Protocol server for AetherWave Studio. Drop it into any MCP-compatible client (Claude Code, Cursor, Continue, Claude Desktop, custom agents) and your LLM can generate, edit, upscale, reframe, and master across every flagship creative AI provider through one API key, one credit pool.
One install. One token. Thirty-five default tools covering:
Music - Suno V3.5 / V4 / V4.5 / V5 / V5.5 / V6
Image gen - Grok Imagine, GPT Image 2, Seedream V4, Wan 2.7, Nano Banana 2, Flux 2, Qwen Image, Z-Image Turbo
Image edit - Grok Imagine I2I, Seedream V4 Edit, Flux Kontext, Wan 2.5 Spicy, Qwen Edit, GPT Image 1.5
Image utility - 2x / 4x upscale, Recraft background removal (with fal BiRefNet v2 fallback), Reframe (outpaints to a new aspect ratio)
Video - Grok Imagine (KIE+fal fallback), Wan 2.7, Hailuo 02, Seedance Pro/Lite, Kling 2.6 (audio), VEO 3.1, Happy Horse
Video utility - Atlas upscaler (1080p/2K), rembg u2netp background removal, Luma Ray 2 Flash reframe
Audio mastering - 12 genre/style presets via the AetherWave Python service
Voiceover - text to speech in 9 voices on Fish Audio, 5 credits per 1,000 characters
Gallery - upload your own images, audio and video (local file, URL or data URL), and a paginated list of your saved creations
User manuals - the MCP, Graphic Novel Studio, UGC Studio and Project Studio manuals as PDF links (saved to Downloads on the npx server)
Comic books - 9 tools driving the AetherWave Graphic Novel Engine end to end: cast, character references, script, panels, lettered pages, and a PDF / EPUB / CBZ download link
Merch - 4 tools: garment catalog, design-to-mockup, and (with
PRINTFUL_API_TOKEN) 2 more that create and list products in your own Printful store, plus 1 admin shop-listing tool
Every generation tool submits the job and waits up to a soft 45 s deadline for the result. Fast jobs come back with the final URL in one round-trip; anything longer returns state: "running" with a taskId, and aetherwave_get_job covers every pipeline (image, video, music, mastering, comics, merch) for polling. Pass async: true on any tool to return immediately. Results auto-save to your Cloudflare R2 gallery so URLs don't expire.
The comic tools are built around this from the start: a book takes about an hour to draw, so each slow step starts and returns at once, and aetherwave_comic_status is how the agent checks back. See Make a comic book with the MCP.
Quick start
# 1. Get a key at https://aetherwavestudio.com/profile (Developer tab)
# 2. Add to your MCP client config (see below)
# 3. Restart the client
# 4. Ask your agent to "generate a synthwave album cover, then animate it"Claude Code
claude mcp add aetherwave \
-e AETHERWAVE_API_KEY=aw_live_your_key_here \
-- npx -y @aetherwave-studio/mcpClaude Desktop
Edit ~/Library/Application Support/Claude/claude_desktop_config.json (macOS) or %APPDATA%\Claude\claude_desktop_config.json (Windows):
{
"mcpServers": {
"aetherwave": {
"command": "npx",
"args": ["-y", "@aetherwave-studio/mcp"],
"env": {
"AETHERWAVE_API_KEY": "aw_live_..."
}
}
}
}Restart Claude Desktop.
Cursor
In Cursor Settings -> MCP -> Add new server:
{
"aetherwave": {
"command": "npx",
"args": ["-y", "@aetherwave-studio/mcp"],
"env": { "AETHERWAVE_API_KEY": "aw_live_..." }
}
}Continue (VS Code / JetBrains)
In your ~/.continue/config.yaml:
mcpServers:
- name: aetherwave
command: npx
args: ["-y", "@aetherwave-studio/mcp"]
env:
AETHERWAVE_API_KEY: aw_live_...Custom / programmatic clients
Standard stdio MCP server. Any client that speaks JSON-RPC 2.0 over stdio per the MCP spec can connect:
AETHERWAVE_API_KEY=aw_live_... npx -y @aetherwave-studio/mcpRelated MCP server: Google Veo 3.1 MCP Server
Tools at a glance
Tool | Purpose |
| Your saved UGC characters with identity block, reference pack, voice and personality |
| Poll any job a tool handed back as |
| Current credit balance + plan |
| Enumerate every image model with cost, speed, I2I support |
| Enumerate every video model with cost-per-second, durations, resolutions |
| Enumerate the 12 mastering presets with target LUFS, tags, descriptions |
| T2I or I2I across 8+ models. Default |
| T2V or I2V across 7+ model families. Native audio, reference-image identity lock, async submit |
| Suno V6 by default. Two tracks per submission, lyrics + instrumental |
| I2I editing. Default |
| 2x or 4x upscale, 4 cr |
| Reframe to a new aspect ratio (outpaints edges, 12 cr flat) |
| Recraft primary + fal BiRefNet v2 fallback (auto failover). Output auto-saved to gallery |
| Atlas (1080p, 2K) or BytePlus (1080p to 8K) video upscale |
| Frame-by-frame bg removal via rembg u2netp. Transparent WebM or solid color output. 2 cr/sec |
| Luma Ray 2 Flash reframe to new aspect ratio |
| AI mastering across 12 genre/style presets. 20 cr/track, free on Producer / Mogul / Ultimate plans |
| Paginated gallery read for chained workflows |
| Put your own image, audio or video into your gallery from a local file (npx only), a URL or a data URL. Free, counts against storage, up to 95 MB |
| Link to a user manual PDF ( |
| Voiceover MP3 from text on Fish Audio, 9 voices. 5 cr per 1,000 characters, min 2, up to 1,000 characters a call |
| The voiceover voices with descriptions, the price and the per-call limit. Free |
| Free quote for a comic: script + panel credits for a page count |
| Create a comic project (title, premise, cast, art style). Free |
| Generate (6 cr each) or approve a character's reference image |
| Start writing the script (2-3 min, charged on use, about 40 cr for 12 pages) |
| Start drawing every undrawn panel (9 cr a panel, charged on success). Safe to call again |
| Progress, stalled runs, failed panels with reasons, page URLs, next step. Free |
| Redraw one panel, optionally with a reworded scene (9 cr on success) |
| Lay out and letter the pages (about 4 s a page). Free |
| PDF, EPUB, CBZ or bundle as a download link that lasts about a day. Free |
Every generation tool includes a model-selection rubric in its description. Your agent can pick the right model from prompt intent without round-tripping list_image_models or list_video_models.
Make a comic book with the MCP
Nine tools drive the AetherWave Graphic Novel Engine from start to finish, so an agent can turn one sentence into a finished, lettered comic. You say something like:
Make me a 12-page Franco-Belgian adventure comic about a 14-year-old courier and her grumbling mechanic uncle who fly the village's last airmail balloon over the Alps at night to deliver a letter that stops a dam from flooding their home. All ages. Keep it under 350 credits.
and the agent runs this sequence:
Step | Tool | What happens | Time | Credits |
1 |
| Confirms which account pays and that it can afford the book | instant | 0 |
2 |
| Quotes an upper bound (it assumes 4 panels a page) | instant | 0 |
3 |
| Creates the project and the cast; returns | seconds | 0 |
4 |
| Draws a full-body reference for each character, in the book's style | up to about a minute | 6 each |
5 |
| Locks the chosen image; every panel uses it to keep the face the same | seconds | 0 |
6 |
| Starts the script: chapters, pages, panels, dialogue, captions | 2-3 min | charged on use |
7 |
| Polls until | instant | 0 |
8 |
| Starts drawing every panel, one at a time; | 1.5-6 min a panel | 9 a panel, on success |
9 |
| Polls every few minutes. | instant | 0 |
10 |
| For a panel that keeps failing on a content refusal: reword its scene and redraw | 1.5-6 min | 9, on success |
11 |
| Lays out and letters every page | about 4 s a page | 0 |
12 |
| Returns a PDF (or EPUB / CBZ / bundle) download link | about 15-30 s | 0 |
Measured on a real book
"The Last Balloon Post" (2026-09-25) was made exactly this way, through the same API these tools call:
12 pages, 27 panels, 301 credits: 27 panels x 9 = 243, script 40, three character references 18. The estimate had quoted 462, because it assumes 48 panels for 12 pages. Re-quote from
creditsToFinishDrawingonce the script exists.About 65 minutes of drawing, 1.5 to 6 minutes a panel, strictly one after another. About 80 minutes end to end.
9 panel failures along the way, none charged: 3 content-filter refusals, 4 upstream "Internal Error" flakes, 2 panels cut off when the server restarted. Every one was drawn on a later run.
Assembly took about 45 seconds for 12 pages. The PDF was 130 MB, which is why export returns a link rather than the file.
Rules the agent should follow
Approve references before writing the script. Approving re-describes the character from the picture, and the script writer reads that description. A character with no approved reference is drawn from text alone and their face drifts between panels.
Never treat a stopped run as finished. A server restart ends a drawing run silently.
aetherwave_comic_statusreportsdrawing: "stalled"whenever panels are pending or failed and no run is active.aetherwave_comic_drawis safe to call again: it draws only what is missing and never double-starts (a second start reportsalreadyDrawing).Reword, do not retry, a refused panel.
failedPanels[].errorMessagein the status carries the reason. A content refusal repeats on a plain retry;aetherwave_comic_redraw_panelwith a newpromptreplaces the scene description for that drawing. Scenes of physical contact between an adult and a child are refused by the image filter.Rewriting the script deletes every panel.
aetherwave_comic_write_scriptrefuses on a project that has panels unlessreplaceExisting: true.Re-assemble after a redraw on a page that was already assembled;
aetherwave_comic_statuslists those pages underpages.staleSinceAssembly.Only permanent images can be references.
approverefuses temporary links (for example a raw provider result URL), because the book would break when the link expires.Every comic tool result carries
account: the AetherWave username that is paying. Check it if you run more than one MCP connection.
Programmatic video with your own characters
The tools above compose into something the API could not do before: hand an agent a description and get back a finished multi-shot film, starring a character you already created, with one consistent face and voice throughout.
A UGC character is a recurring on-screen person you have saved in AetherWave - their locked appearance, an approved pack of reference images, a voice and a personality. aetherwave_list_characters is how an agent discovers they exist. Without it, an agent told "shoot this with my Amy character" has no way to learn who Amy is, and invents a different face for every clip.
Shortcut (0.4.0): pass character: "Amy" to aetherwave_generate_image or aetherwave_generate_video and the tool does steps 1 to 3 for you: it looks the character up in your teams, puts their approved reference pack first in referenceImages (your own references, such as a T-shirt or a location, go after), and appends their identityBlock verbatim. On generate_image the model defaults to gpt-image-2-t2i, which takes up to 16 references. A name that matches nothing, or more than one character, is an error that lists the names you do have, and nothing is charged.
// "Put Amy in this T-shirt, facing forward" - one call
await generateImage({ prompt: "Amy wearing this T-shirt, facing forward, clean studio background", character: "Amy", referenceImages: [shirtMockupUrl], aspectRatio: "3:4" });The loop
// 1. Discover the character. There is no other way to find them.
const { characters } = await listCharacters({ name: "amy" });
const amy = characters[0];
// 2. Build every prompt from her stored identity - VERBATIM, never paraphrased.
// Identical text is identical conditioning; that IS the consistency mechanism.
const prompt = [
shotDescription,
amy.identityBlock, // "CORE IDENTITY: same woman, Nordic, ..."
`Her speaking voice: ${amy.voiceSpec ?? amy.voiceDescriptor}`,
`She says exactly this and nothing else: "${line}"`,
].join("\n\n");
// 3. Submit async, anchored to her approved pack, with audio on.
const { taskId } = await generateVideo({
prompt,
model: "seedance-2-mini",
duration: 12,
resolution: "480p",
aspectRatio: "16:9",
generateAudio: true, // without this the clip is SILENT
referenceImages: amy.referenceImages, // NOT imageUrl - that drops the anchors
async: true, // returns in ~2s, survives the client timeout
});
// 4. Poll until the render lands.
let job;
do { await sleep(15000); job = await getJob({ taskId, kind: "video" }); }
while (!job.done && !job.error);
// 5. Repeat per shot, then assemble the clips in order.The four rules that actually keep a character consistent
Append
identityBlockverbatim to every prompt. Rewriting it in your own words breaks the lock - identical text is the whole mechanism.Pass
referenceImages, neverimageUrl. A first frame switches the engine to first-frame mode and discards the anchors. When a character has an approved pack, that pack replaces the hero image rather than riding alongside it; mixing them pulls the face two ways.Keep the voice text byte-identical across clips, for the same reason as the identity block.
Set
generateAudio: trueon anything with dialogue. It is off by default and free on Seedance 2.x, so a silent clip is never the cheaper choice - just a worse one.
Writing lines to length
duration is authoritative. The engine honours the seconds you ask for to within ~0.1s and then fits the line to that length by changing pace, rather than finishing early. So write the line to the clip, not the clip to the line - roughly 2 words per second is the measured working figure. A words-per-minute number in a voice description describes the character, not the engine; budgeting by it overran a 22-clip production by 35%.
Spell hard words the way they should be spoken: "super intelligence" renders more reliably than "superintelligence".
⚠️ Verify the speech before you assemble
A take can come back saying the wrong words and still report success with a URL. Re-rendering an identical prompt has produced one clean take and one that dropped an entire sentence - it is per-take randomness, and nothing in the response distinguishes them. On a 22-clip production, four clips were mis-spoken and none was detectable without listening.
For anything assembled unattended, transcribe each clip and score it against the line you asked for before using it, and re-shoot the ones that fail. Checking costs nothing; the clip already cost credits. Score against the script, not against whatever the previous step handed you.
Sell merch from a conversation (Printful)
Turn any design into a print-on-demand product by asking for it:
"Make a tee that says NIGHT SHIFT in chrome letters, put it on a black Bella+Canvas 3001, show me mockups, then add it to my Printful store at $29.99."
Tool | Cost | What it does |
| free | Tees, tanks, hoodies, hats: colours, US in-stock sizes, print areas in inches, embroidery thread colours |
| 1 credit | Any image (AetherWave URL, data URL, or a local file path) becomes a transparent, trimmed print PNG. |
| 3 credits | Builds the print file at the garment's real print area and DPI, then renders Printful mockups. Refunded if the render fails; bad garment, colour or placement is never charged. 20 an hour |
| free | Checks a render that outlived the 90-second wait |
| free | Creates the product in your own Printful store |
| free | Lists your store's products |
Connect your Printful store
Add your Printful token to the server's env. It is used only between your machine and api.printful.com; it never goes to AetherWave.
{
"mcpServers": {
"aetherwave": {
"command": "npx",
"args": ["-y", "@aetherwave-studio/mcp"],
"env": {
"AETHERWAVE_API_KEY": "aw_live_...",
"PRINTFUL_API_TOKEN": "your Printful private token",
"PRINTFUL_STORE_ID": "only needed for account-level tokens"
}
}
}
}Create the token in Printful under Settings > API (a private token scoped to one store is simplest). The two aetherwave_printful_* tools appear only when PRINTFUL_API_TOKEN is set, and only on the local npx server: the remote connector never asks for your store key. Products land in Printful; publishing to Shopify, Etsy and other connected channels happens there as usual.
Before you promote a product: Printful charges per order (garment, shipping, and in the US often sales tax). Check that your retail price covers it. You are the seller: only print artwork and wording you have the rights to.
Printify: coming next. Its catalog works differently (the same garment from several print providers, with their own prices and stock), so it gets its own tools rather than a half-working flag.
Tools reference
aetherwave_balance
Returns current credit balance. No inputs.
Returns: { credits, plan, ... }
aetherwave_list_image_models
Returns every image model with credit cost, supported inputs, resolution/aspect options. No inputs.
Returns: { models: [...] }
aetherwave_list_video_models
Returns every video model with per-second credit cost, durations, resolutions, aspect ratios. No inputs.
Returns: { models: [...] }
aetherwave_list_master_presets
Returns every mastering preset with target LUFS, tags, descriptions, difficulty. No inputs. Call this before master_audio when you don't know which preset fits the track.
Returns: { presets: [...] } (each: { id, name, description, target_lufs, tags, difficulty, icon })
aetherwave_generate_image
T2I or I2I. Submits, polls, returns final URLs.
Param | Type | Required | Default | Notes |
| string | yes | - | Text description of the image |
| string | no | - | Name or handle of one of your UGC characters. Attaches their reference pack and identity text; defaults the model to |
| string | no |
| Model ID. Use |
| string | no | model default | e.g. |
| string | no | model default |
|
| string[] | no | - | URLs for I2I; required if model is I2I |
| int (1-6) | no | model default | Images to return, billed per image. Only |
| int (1-6) | no | - | Old name for |
| string | no | - | Supported by some models |
| int | no | - | Deterministic generation, supported by some |
Selection signals (built into the tool description): single best image → gpt-image-2-t2i (9 cr at 1K, 12 at 2K). Photoreal → gpt-image-2-t2i or nano-banana-2. Text-in-image → gpt-image-2-t2i. NSFW → wan-2.5-spicy-t2i. Premium → grok-imagine-quality-t2i (14 cr). Cheapest → z-image-turbo (2 cr).
Returns: { taskId, state, images, autoSaved, creationIds }
aetherwave_list_characters
Your saved UGC characters - the recurring, named people you shoot with - with everything needed to hold one consistent across a production. Call this first whenever a request names a person the user already has.
Param | Type | Required | Notes |
| string | no | Case-insensitive substring filter on name or handle. Omit to list all |
Returns: { count, characters[], usage }, each character carrying:
Field | Why it matters |
| The locked CORE IDENTITY string. Append verbatim to every prompt |
| The approved pack. Pass as |
| True when a pack exists - prefer it over |
| Single fallback anchor for characters with no pack |
| Voice conditioning text; keep byte-identical across clips |
| Tones, quirks, speechStyle - the tonal direction the user wrote |
| The character's negative prompt |
| Per-mode reference strengths |
Long jobs return within 45 seconds
MCP clients (claude.ai, Claude Desktop, Cursor) abandon a tool call at about 60 seconds. Before 0.3.0 every long tool blocked for 6 to 15 minutes, so a 90-second image render "failed" on the client while the job finished and was charged, and the taskId died with the abandoned call.
Now every tool that submits a job (generate_image, edit_image, upscale_image, reframe_image, remove_background, generate_video, upscale_video, reframe_video, remove_background_video, generate_music, merch_mockup, comic_export) polls for at most ~45 seconds and then returns:
{ "state": "running", "taskId": "…", "kind": "image", "checkWith": "aetherwave_get_job", "pollEverySeconds": 10, "next": "…" }Poll aetherwave_get_job with that taskId and kind until done. Two explicit escapes on each of those tools:
Arg | Effect |
| Submit and return the taskId immediately, no polling |
| The old long block (6-15 min budget). Only if your client permits calls over 60 s |
master_audio has no job id (the request itself is the job): it also returns within ~45 s, and a master that outlives the call is saved to the gallery - find it with aetherwave_list_my_creations type audio rather than resubmitting.
aetherwave_get_job
Check a job by taskId. Use it for any state: "running" result, after an async: true submit, or to recover any generation whose call timed out, since the job keeps running server-side and saves to your gallery regardless of what happened to the client.
Param | Type | Required | Notes |
| string | yes | The taskId (or taskKey / exportId) a tool returned |
| enum | yes |
|
| string | for | The comic project the export belongs to |
Returns: { taskId, kind, state, done, failed, videoUrl, imageUrls, tracks, mockups, downloadUrl, autoSaved, creationIds, error, next, raw }
aetherwave_generate_video
T2V or I2V. Submits, polls for up to ~45 s, and returns the URL if the render finished - otherwise state: "running" with the taskId (video takes 1-8 min, so that is the usual case).
Param | Type | Required | Default | Notes |
| string | yes | - | Text description of the scene |
| string | no | - | Name or handle of one of your UGC characters. Attaches their reference pack as |
| string | no |
| Model ID. Use |
| int (2-30) | no | model default | Seconds. Grok accepts 6-15 |
| enum | no | model default |
|
| string | no | model default | e.g. |
| string | no | - | Required for I2V models |
| string | no | - | Some I2V models support first+last frame |
| enum | no |
| Grok Imagine: |
| bool | no |
| Render speech/sound with the video. Clips are SILENT without it. Free on Seedance 2.x at every resolution |
| string[] (max 9) | no | - | Identity anchors held consistent across the clip. Mutually exclusive with |
| bool | no |
| Return a |
| bool | no |
| Block up to 8 min. Only if your client permits calls over 60 s |
Returns (finished): { taskId, state, videoUrl, fallbackProvider, autoSaved, creationId, kieTaskId }
Returns (still rendering, or async): { state: "running", taskId, kind: "video", checkWith, pollEverySeconds, next }
A render takes 1-8 minutes and most MCP clients abandon a call at 60 seconds (
MCP error -32001), so this tool returnsstate: "running"within ~45 s and you pollaetherwave_get_job. The job itself is submitted, billed and saved to your gallery regardless of what the client does.
⚠️
imageUrlandreferenceImagesare not additive. A supplied first frame switches the engine to first-frame mode exclusively and drops the reference images - which silently disables the only no-drift mechanism available. Passing both is rejected with an explicit error rather than quietly honouring one.
aetherwave_generate_music
Suno music generation. Two tracks per submission.
Param | Type | Required | Default | Notes |
| string | yes | - | Style/mood/topic description |
| boolean | no |
| If true, no vocals |
| enum | no |
|
|
| string | no | - | Optional title for the tracks |
| string | no | - | Custom lyrics, omit to let Suno write them |
Returns: { taskId, status, tracks }
aetherwave_edit_image
I2I editing guided by a text prompt.
Param | Type | Required | Default | Notes |
| string | yes | - | Text description of the edit |
| string | yes | - | Public URL of source image |
| string | no |
| 10 cr, one image |
| string | no | source ratio | e.g. |
| string | no | model default | Some models: |
| enum | no | model default |
|
| int (1-6) | no | - | Variations to return, billed per image. Only |
| enum | no | model default |
|
| string | no | - | Supported by some models |
Selection signals: subtle edits / character consistency → flux-kontext-pro. NSFW → wan-2.5-spicy-i2i. Highest quality → gpt-image-1.5-i2i or grok-imagine-quality-i2i. Single-output / 4K → seedream-v4-edit.
URL gotcha: source URLs with spaces or parentheses may fail upstream. Prefer clean URLs without special characters.
Returns: { taskId, state, images, autoSaved, creationIds }
aetherwave_upscale_image
Upscales 2x or 4x for a flat 4 credits.
Param | Type | Required | Default | Notes |
| string | yes | - | Public URL of source image |
| enum | no |
|
|
Credit cost scales with source resolution × factor.
Returns: { taskId, state, images, autoSaved, creationIds }
aetherwave_reframe_image
Reframe. Outpaints edges to fit a new aspect ratio: the source is kept whole and centred, new picture is painted on the two sides that grow, and nothing is cropped. 12 credits per image, flat. The output size follows the source (capped at 4096 px on the long edge), so resize afterwards if you need exact pixels.
Param | Type | Required | Default | Notes |
| string | yes | - | Public URL of source image |
| enum | yes | - |
|
| enum | no | - | Ignored since 0.5.5; kept so older calls still work. Every reframe is 12 cr |
Returns: { taskId, state, images, autoSaved, creationIds }
aetherwave_remove_background
Recraft primary + fal.ai BiRefNet v2 fallback. ~5 cr per image.
Param | Type | Required | Default | Notes |
| string | yes | - | Public URL of source image |
Returns: { taskId, state, images } (PNG with transparent alpha)
aetherwave_upscale_video
Two engines. Atlas reaches 1080p and 2K; BytePlus reaches 1080p, 2K, 4K and 8K and is selected automatically for 4K and 8K.
A tier is not a dimension: the names are 16:9 standards, so the source is fitted inside the tier's box and the smaller dimension wins. A square source at 4k returns 2160x2160, not 3840x3840. For an exact pixel target, take the highest sensible tier and resize in ffmpeg.
Param | Type | Required | Default | Notes |
| string | yes | - | Public URL of source video (MP4) |
| enum | no |
|
|
| enum | no |
|
|
Returns: { taskId, status, videoUrl, autoSaved, creationId }
aetherwave_remove_background_video
Frame-by-frame background removal via rembg u2netp on AetherWave's Python service. 2 cr/sec.
Param | Type | Required | Default | Notes |
| string | yes | - | Public URL of source video (MP4) |
| enum | no |
|
|
| string | no |
| Hex color for solid replacement when |
Returns: { taskId, status, videoUrl, autoSaved, creationId }
aetherwave_reframe_video
Luma Ray 2 Flash reframe to a new aspect ratio. 17 cr/sec.
Param | Type | Required | Default | Notes |
| string | yes | - | Public URL of source video (MP4) |
| enum | yes | - |
|
| string | no | - | Optional steering prompt for new edge content (e.g. "extend the sky with sunset clouds") |
Returns: { taskId, status, videoUrl, autoSaved, creationId }
aetherwave_master_audio
AI mastering via the AetherWave Python service. Synchronous response (route polls internally, expect 30s-5min). 20 credits per track. Free on Artist, Producer, Mogul and Ultimate plans. Output is WAV (~50MB per 3-min track) and auto-rehosted to Cloudflare R2.
Param | Type | Required | Default | Notes |
| string | yes | - | Public URL to MP3 or WAV |
| string | yes | - | One of 12 (see below) |
| string | no | - | Optional title for gallery row |
Preset list (12, retrieved live from /api/master-presets):
Preset | Name | Target LUFS | Use for |
| Streaming Ready | -14 | Spotify, Apple Music, YouTube |
| Loud & Punchy | -9 | Competitive loudness |
| Gentle Touch | -16 | Acoustic, classical, jazz |
| Hip Hop / Trap | -11 | Heavy low + crisp highs + 808s |
| EDM / Electronic | -10 | House, techno, dubstep, drops |
| Pop / Top 40 | -12 | Radio-ready polish |
| Rock / Alternative | -12 | Punchy mids, gritty edge |
| Lo-Fi / Chill | -14 | Warm, relaxed |
| R&B / Soul | -13 | |
| Acoustic / Folk | -16 | Preserves dynamics |
| Cinematic / Orchestral | -18 | Wide dynamics |
| Podcast / Voice | -16 | Voice-forward |
Returns: { success, masteredUrl, preset, trackTitle, creditsCharged, isFree }
aetherwave_upload_to_gallery
Saves a file the user already has into their AetherWave gallery and returns a permanent URL that every other tool accepts. Free (no credits); it counts against the account's storage, and an upload over the plan's storage is refused with the space left.
Param | Type | Required | Notes |
| string | one of the three | A file on this computer. npx server only; the remote connector cannot read your disk |
| string | one of the three | Public http or https link. Fetched by the server; links that resolve to private or internal addresses are refused |
| string | one of the three | A |
| string | no | Gallery title. Defaults to the file name |
| string | no | |
| string[] | no | Up to 20 |
Types: images png jpg webp gif, audio mp3 wav m4a flac ogg, video mp4 webm mov. Up to 95 MB per file; larger files go through the website uploader.
Returns: { success, creationId, url, type, title, sizeBytes }
aetherwave_get_user_manual
The download link for a user manual PDF. On the npx server it also saves the PDF to the user's Downloads folder (or saveTo), and returns the path. Free.
Param | Type | Required | Default | Notes |
| enum | no |
|
|
| string | no | Downloads | npx server only. A folder, or |
Returns: { manual, title, url, savedTo?, sizeBytes? }
aetherwave_generate_speech
Turns text into a spoken MP3 on Fish Audio (s2.1-pro): narration, an ad read, a podcast intro, a character line. Synchronous on the platform, usually a few seconds. Charged when the request is accepted, refunded automatically if no audio is delivered; saved to the gallery as audio. The tool reads the exact price from POST /api/v1/audio/speech/estimate first, so an unknown voice or a too-long text fails before anything is spent.
Param | Type | Required | Default | Notes |
| string | yes | - | Up to 1,000 characters (about a minute of speech). Split longer scripts at sentence ends. [bracketed] directions like [excited] are performed |
| string | no |
|
|
| int | no | - | Refuse (nothing charged) if the price is higher, or if the platform returns no price |
| boolean | no | false | Wait up to 3 minutes instead of ~45 s |
Price: 5 credits per 1,000 characters, minimum 2, billed per UTF-8 byte (plain English is one byte per character; accented and non-Latin text costs up to 3x).
Returns: { success, audioUrl, voice, durationSec, creationId, creditsUsed, creditsRemaining }. If the call outlives ~45 s you get state: "running"; the voiceover lands in aetherwave_list_my_creations type audio. Do not resubmit.
aetherwave_list_voices
Free. The 9 voices with a short description, the default voice, the price and the per-call limit.
aetherwave_list_my_creations
Paginated gallery read. Useful for chaining ("reframe my last 5 images to 9:16").
Param | Type | Required | Default | Notes |
| enum | no | all |
|
| int (1-500) | no | 100 | Max items |
| int | no | 0 | Pagination offset |
| boolean | no |
| Filter to favorites |
Returns: { items, total, offset, limit, hasMore }. Each item: { id, type, title, prompt, model, createdAt, isFavorite, contentUrl, thumbnailUrl, visibility, rating, duration?, width?, height?, likeCount, totalPlays, metadata }.
Comic book tools
All nine wrap the /api/graphic-novel/* routes the Graphic Novel Studio web app uses, so a book made through the MCP opens in the studio and the reverse. Every result includes account, the username that is billed.
aetherwave_comic_estimate
Free upper-bound quote. Assumes 4 panels a page, so short books usually cost less (12 pages: quoted 462, cost 301).
Param | Type | Required | Default | Notes |
| int (4-64) | yes | - | The studio offers 12, 16, 24, 32, 48, 64 |
| enum | no |
|
|
Returns: { account, scriptCredits, panelCredits, assumedPanels, creditsPerPanel, totalCredits, imageModel, note }
aetherwave_comic_create
Creates the project and its cast. Free. Nothing is generated yet.
Param | Type | Required | Default | Notes |
| string | yes | - | Painted into the cover panel |
| string | yes | - | The situation, goal and stakes |
| array (1-12) | yes | - | Each |
| enum | no |
|
|
| enum | no |
|
|
| enum | no |
|
|
| int (4-64) | no | 24 | Target pages |
| enum | no |
| As above. Locked once created |
| string | no | - | Places, era, landmarks. Every panel prompt includes it |
| string | no | - | Steer the script writer |
| string[] | no | - | Comics or films to evoke |
| enum | no |
|
|
| enum | no |
| Balloon style: |
Returns: { account, projectId, status, characters: [{ characterId, name, role }], estimate, nextStep }
aetherwave_comic_character_reference
action: "generate" draws count (1-4) full-body references in the book's style, 6 credits each, and adds them to the character's options. editPrompt alone steers a fresh drawing; editPrompt with baseUrl (one of the character's images) edits that image and keeps the same person. If the call runs past about 50 seconds the images still land server-side and show up in aetherwave_comic_status.
action: "approve" (free) sets imageUrl as the reference. Only the character's own images or permanent AetherWave storage (media.aetherwavestudio.com) are accepted.
Param | Type | Required | Default | Notes |
| string | yes | - | |
| enum | yes | - |
|
| string | one of | - | Name is matched without case |
| int (1-4) | no | 1 | generate |
| string (max 500) | no | - | generate |
| URL | no | - | generate; needs |
| URL | approve | - |
Returns (generate): { account, characterId, characterName, newImages, creditsCharged, stillGenerating, errors, referenceOptions, nextStep }. Returns (approve): { account, approved, characterId, characterName, referenceImageUrl }
aetherwave_comic_write_script
Starts the script and returns. About 2 to 3 minutes; charged on actual use when it finishes (40 credits for the 12-page book). Refuses on a project that already has panels unless replaceExisting: true, because a new script deletes them all.
Param | Type | Required | Default | Notes |
| string | yes | - | |
| boolean | no |
| Required to rewrite a script that already has panels |
Returns: { account, started, status, message, warning?, nextStep }. warning names characters with no approved reference.
aetherwave_comic_draw
action: "start" (default) starts drawing every pending or failed panel, one at a time, and returns. 9 credits a panel, charged only on success; the balance must cover the whole run to start. Calling it while a run is active starts nothing and reports alreadyDrawing. action: "stop" asks the active run to stop after its current panel.
Param | Type | Required | Default | Notes |
| string | yes | - | |
| enum | no |
|
|
| int | no | - | start: refuse if the remaining panels would cost more |
Returns: { account, started, panelsQueued, creditsPerPanel, upToCredits, message, expectedMinutes, nextStep }, or { started: false, alreadyDrawing: true }
aetherwave_comic_status
Free. The one tool to poll. With no projectId it lists your recent comic projects.
Param | Type | Required | Default | Notes |
| string | no | - | Omit to list projects |
| enum | no |
|
|
Returns: { account, projectId, title, projectStatus, projectError, drawing, drawingDetail, panels: { total, completed, failed, pending, generating, batchRunning }, creditsToFinishDrawing, failedPanels: [{ panelId, page, panelIndex, errorMessage, scene }], pages: { total, assembled, missing, staleSinceAssembly, urls }, characters: [{ characterId, name, role, approvedReference, referenceOptions }], nextStep }
drawing is one of no_script, not_started, drawing, redrawing, stalled, done. stalled means panels are pending or failed and no run is active; call aetherwave_comic_draw again.
aetherwave_comic_redraw_panel
Redraws one panel. 9 credits on success, nothing on failure. prompt replaces the panel's scene description for this drawing (dialogue and captions are kept), which is how to get past a content refusal. Refused while a full run is active. If the redraw outlasts about 50 seconds the tool returns stillDrawing: true and the result appears in aetherwave_comic_status.
Param | Type | Required | Default | Notes |
| string | yes | - | |
| string | yes | - | From |
| string (max 4000) | no | - | New scene description |
Returns: { account, redrawn, panelId, status, imageUrl }, { redrawn: false, stillDrawing: true }, or a refusal carrying the panel's errorMessage
aetherwave_comic_assemble
Free. Lays out and letters every page, about 4 seconds a page, and returns at once. Refuses while panels are drawing, and refuses while any panel is undrawn unless allowPartial: true (pages with an undrawn panel are skipped and the book is marked pages-partial).
Param | Type | Required | Default | Notes |
| string | yes | - | |
| boolean | no |
| Assemble the complete pages anyway |
Returns: { account, started, pages, message, nextStep }
aetherwave_comic_export
Free. Builds the assembled book and returns a download link on AetherWave storage that lasts about a day. Usually finishes within the call (a 12-page PDF took about 15 seconds to build and upload in testing); otherwise it returns an exportId to check with a second call. One export builds per account at a time: if one is already building, the tool reports that one (alreadyExporting: true, with its projectId) instead of starting another. When the service is busy it refuses with retryAfterSeconds.
Param | Type | Required | Default | Notes |
| string | yes | - | |
| enum | no |
|
|
| boolean | no |
| Append the project's promotional back pages if turned on |
| string | no | - | Check an export started earlier |
Returns: { account, exportId, format, status, url, megabytes, note }. status is building, complete or error.
Embedding the tools in your own server
@aetherwave-studio/mcp/embed runs the same tools in-process, so an assistant you host gets every tool, schema and description this server has and picks up new ones with a package update. AetherWave's own VoxBot Chat is built on it.
import { connectEmbedded, runsWithoutConfirm } from "@aetherwave-studio/mcp/embed";
const session = await connectEmbedded({
baseUrl: "https://aetherwavestudio.com",
headers: { "X-AW-Key": userApiKey }, // or the member's session headers on a loopback URL
allowRequest: (method, path) => isAllowed(method, path), // optional (method, path) allowlist
});
session.tools; // [{ name, description, inputSchema, policy }], operator-only tools left out
if (runsWithoutConfirm(name)) await session.call(name, args); // free reads
// anything else spends credits or replaces something: quote it and get the user's OK firstEvery tool carries a policy (TOOL_POLICY): charge ("none" or "credits", with a note on how the price is known up front), effect ("read", "create" or "destructive") and embed (false for tools that need the operator's own tokens). A test fails the build if a tool ships without one. Importing the module never starts the stdio server.
Credits & pricing
AetherWave uses a single credit pool. Buy bundles starting at $4.99 / 500 credits (bundle credits never expire) or subscribe to Studio ($9.99/mo, 1,700 credits; no free trial, billing starts at signup). Both work for API calls.
Typical costs:
Image gen - 2 cr (Z-Image Turbo) to 34 cr (premium models at 4K); default 6 cr for 2 images
Image edit - 6 cr to 34 cr; default 10 cr (Grok Imagine I2I)
Image utility - 4 cr (2x or 4x upscale), 5 cr (background removal), 12 cr (reframe, flat)
Video - 4 cr/sec (Grok Imagine at 480p) up to 143 cr/sec (Seedance 2 at 1080p); VEO 3.1 is a fixed 42 / 84 / 350 cr per 8 s clip
Music - 20 cr per generation (2 tracks)
Mastering - 20 cr/track (free on Artist / Producer / Mogul / Ultimate)
Voiceover - 5 cr per 1,000 characters, minimum 2
Comic books - 9 cr a panel (charged on success), 6 cr a character reference, script charged on use (about 40 cr for 12 pages). A 12-page, 27-panel book cost 301 cr
See live pricing at https://aetherwavestudio.com/buy-credits or via aetherwave_list_*_models.
Environment variables
Variable | Required | Default | Description |
| yes | - | Your API key. Get one at /profile -> Developer tab. Must start with |
| no |
| Override the API base URL (useful for staging or self-hosted). |
Troubleshooting
"AETHERWAVE_API_KEY environment variable is required"
Your MCP client isn't passing the env var. Make sure the env block in your client config has AETHERWAVE_API_KEY set. After editing config, fully restart the client.
"AetherWave API ... failed: 401 - Invalid API key" The key has been revoked or regenerated. Visit https://aetherwavestudio.com/profile -> Developer tab and copy a fresh key.
"AetherWave API ... failed: 402 - Insufficient credits"
Your balance is too low for the requested operation. Call aetherwave_balance to confirm, then top up at https://aetherwavestudio.com/buy-credits.
"AetherWave generation timed out after Xs"
The provider is queueing. The job may still complete server-side - check the AetherWave gallery at https://aetherwavestudio.com/gallery.html. If timeouts persist for a particular model, try a different one (e.g. switch from grok-imagine-t2v to wan-2-7-t2v, or gpt-image-1.5-i2i to grok-imagine-i2i).
Reframe fails before it starts
The source must be a public https link the platform can download. Upload a local file with aetherwave_upload_to_gallery first and pass the URL it returns. An aspectRatio outside the list in the tool is refused before any credit is charged.
"internal error, please try again later" on remove_background KIE Recraft transient outage. The tool will auto-fall-back to fal.ai BiRefNet v2 on retry, but a single call returning this error means both providers refused. Wait a minute and retry.
Comic status says drawing: "stalled"
The drawing run ended with panels left: a server restart, the balance ran out, or it was stopped. Call aetherwave_comic_draw again; it draws only the missing panels and charges only for panels that succeed.
A comic panel keeps failing with "may violate our content policies"
Retrying the same scene gets the same refusal. Reword it with aetherwave_comic_redraw_panel and a new prompt. Physical contact between an adult and a child is refused even in an all-ages book.
aetherwave_comic_export says the server "does not support export links yet"
The AetherWave server you are pointed at predates export links. Download the book from the Graphic Novel Studio in the web app.
Soul Forge band generation Not exposed via MCP. Soul Forge remains a consumer feature on the web at https://aetherwavestudio.com/soul-forge.
Versioning
This package follows semver. Tools that change behavior in a breaking way will bump the major version. New tools and additive parameters bump the minor version. Bug fixes bump the patch version.
0.5.5: aetherwave_reframe_image matches the platform's new Reframe (since 2026-11-11): one flat price of 12 credits, eleven exact shapes (adds 3:2, 2:3, 5:4, 4:5, 9:21), and the ratio is sent as given. speed is accepted and ignored; the old 5 / 10 / 14 tiers are gone.
0.5.4: a "not enough credits" error now carries the platform's next step (how short you are) and a one-tap link to the right credit pack, the cheapest one that covers the shortfall.
0.5.3: aetherwave_generate_speech waits 49 s (the platform's voice provider times out at 45 s, so a refunded call no longer reads as still running), and a failure says whether the credits were refunded (state: "failed", refunded), or state: "unknown" when the connection dropped mid-call.
0.5.2: aetherwave_generate_music adds Suno V6 and makes it the default (the website default too). Same 20 credits as every other version.
0.5.1: aetherwave_generate_music sends title on an instrumental (it was dropped, and Suno named the track itself), and a lyric request without a title no longer fails with "Title and Style are required in Custom Mode" (the title defaults to the start of the description).
0.5.0: aetherwave_generate_speech and aetherwave_list_voices, voiceover on Fish Audio (9 voices, 5 credits per 1,000 characters). 35 default tools.
0.4.0: character on aetherwave_generate_image and aetherwave_generate_video (one of your UGC characters by name). Image count: generate_image now sends maxImages, the field the platform reads (numImages, which no model read, is kept as an alias). A reference URL that resolves to a private address is refused. New @aetherwave-studio/mcp/embed entry for hosting the tools inside another server (see Embedding).
0.3.1 (unreleased, folded into 0.4.0): aetherwave_upload_to_gallery and aetherwave_get_user_manual, 33 default tools.
0.3.0 (2026-09-30): soft 45 s deadline on every long tool (returns state: "running" + taskId instead of timing out the client), async: true on every tool, aetherwave_get_job covers all pipelines, 9 comic tools, 4 merch tools (+2 Printful tools with PRINTFUL_API_TOKEN, +1 admin), 31 default tools.
The MCP protocol version itself (currently 2024-11-05) is negotiated at handshake time by the SDK; no client config needed.
Links
AetherWave Studio: https://aetherwavestudio.com
Developer docs: https://aetherwavestudio.com/developers
Get an API key: https://aetherwavestudio.com/profile (Developer tab)
Buy credits: https://aetherwavestudio.com/buy-credits
License
MIT. See LICENSE.
Available Tools
16 toolsaetherwave_balanceCheck credit balanceARead-only
Returns the current AetherWave credit balance for the API key. Use this BEFORE a generation to confirm sufficient credits, especially for video which can cost 30-300+ credits depending on model/duration/resolution.
Inputs: no named parameters.
aetherwave_edit_imageEdit image with AI (I2I)A
Edits an existing image guided by a text prompt. Pass a public imageUrl plus a prompt describing the change ("add a moon to the sky", "swap the background for a neon city", "make it look like a comic panel"). Submits, polls, and returns the edited image URL(s). Default model is 'grok-imagine-i2i' (6 cr per call, returns 2 variations, ~30s, best cost-to-quality on standard edits). Other I2I-capable models: 'seedream-v4-edit', 'wan-2.5-spicy-i2i', 'flux-kontext-pro', 'qwen-image-edit', 'gpt-image-1.5-i2i' (slow, ~5min). Use list_image_models for full lineup. Note: source URLs with spaces or parentheses may fail upstream; prefer clean URLs.
Model selection guide for edits
Default: grok-imagine-i2i (6 cr per call, returns 2 variations = 3 cr/image effective, fast ~30s, strong general-purpose edit quality).
Pick a different model when:
Need a single deterministic output, or 4K resolution ->
seedream-v4-edit(7 cr per image, supports 1K/2K/4K, multi-image up to 6)Subtle edits / preserve composition / character consistency ->
flux-kontext-proorflux-kontext-maxNSFW edits ->
wan-2.5-spicy-i2iHighest quality, time is not a concern (~5 min OK) ->
gpt-image-1.5-i2iorgrok-imagine-quality-i2i(16 cr @ 1K, 22 cr @ 2K)Stylized / artistic transformation ->
midjourney-i2i
If the user simply says "edit this image" with no other signal, default to grok-imagine-i2i.
Inputs: prompt (required), imageUrl (required), model, aspectRatio, +5 more.
aetherwave_generate_imageGenerate image (Grok Imagine, GPT Image 2, Seedream V4, Wan, Imagen 4, Nano Banana, Ideogram V3, Z-Image Turbo)A
Generates one or more images from a text prompt (T2I) or a text prompt + reference image(s) (I2I). Submits the job, polls until terminal, and returns the final image URLs. Default model is 'grok-imagine-t2i' (fast, 6 images per generation, 5 credits). Use list_image_models to see the full lineup with pricing. For I2I, pass referenceImages as an array of public image URLs and pick a model with I2I support (e.g. 'grok-imagine-i2i', 'wan-2.5-spicy-i2i').
Model selection guide (when the user does not specify a model)
Default: grok-imagine-t2i (5 cr, 6 outputs per call, fast, general purpose).
Strong recommendation: when a single high-quality output is what's wanted (most agent / one-shot workflows), prefer gpt-image-2-t2i (9 cr @ 1K / higher @ 2K, single deterministic image, best general quality across realism, illustration, typography, and composition; supports up to 2K resolution and most aspect ratios including auto). This is the front-runner for serious creative output where you don't need to pick from 6 variations.
Pick a different model when the prompt has these signals:
"single best result" / "one image" / production / no time to pick from variations ->
gpt-image-2-t2i(9 cr, 1 output, top general quality)"photoreal" / "photo of" / "realistic" ->
gpt-image-2-t2i(9 cr, best general realism) orimagen-4(12 cr, very high quality) orz-image-turbo(3 cr, fastest)"highest quality" / "premium" / no budget ->
gpt-image-2-t2iat 2K, orgrok-imagine-quality-t2i(16 cr @ 1K, 22 cr @ 2K), orimagen-4-ultraText inside the image (signs, posters, typography) ->
ideogram-v3-t2i(best in class) orgpt-image-2-t2i(also strong)Artistic / painterly / stylized ->
midjourney-t2iAlbum art / cover art ->
gpt-image-2-t2ifor one strong image;grok-imagine-t2ifor 6 variations to choose from;seedream-v4-t2iif 4K wantedLogo or design with embedded text ->
ideogram-v3-t2iNSFW / adult / explicit ->
wan-2.5-spicy-t2i(auto-tags creation as 18+; routes to adult gallery)Cheapest possible / quick test ->
z-image-turbo(3 cr)Multiple variations to compare -> keep
grok-imagine-t2i(6 outputs default) or usenumImageson a multi-output model
For I2I (reference image provided): prefer the dedicated aetherwave_edit_image tool for "change something in this image" intent. Use aetherwave_generate_image with I2I models only when you specifically want style transfer (midjourney-i2i), premium quality (grok-imagine-quality-i2i), or adult content (wan-2.5-spicy-i2i).
Always pass an explicit aspectRatio (e.g. "1:1" for square album art, "16:9" for video thumbnails, "9:16" for shorts/reels). Some upstream providers reject submissions with no aspect ratio.
Ask the user only when:
The prompt contradicts itself (e.g., "highest quality but cheapest")
The user requested "the best model" with no context, surface 2-3 options with tradeoffs
A single generation would cost more than 20 credits and the user has not confirmed
Inputs: prompt (required), model, aspectRatio, resolution, +4 more.
aetherwave_generate_musicGenerate music (Suno)A
Generates AI music via Suno. Returns two tracks per submission. Default model is V5.5 (newest, best quality). For instrumental output set instrumental: true. Music gen typically takes 30-90s - this tool polls with up to a 6-minute budget. Note: the title param is advisory for instrumentals - Suno often writes its own title from the prompt content for instrumental generations. Transient GENERATE_AUDIO_FAILED errors are common; retry once before degrading the model version.
Inputs: prompt (required), instrumental, model, title, +1 more.
aetherwave_generate_videoGenerate video (Grok Imagine, Wan 2.7, Hailuo 02, Seedance, Kling 2.6, VEO 3.1, Happy Horse)A
Generates a short-form video from a text prompt (T2V) or a text prompt + starting image (I2V). Submits, polls, and returns the final video URL. Default model is 'grok-imagine-t2v' (fast, 4-6 cr/s, with built-in KIE -> fal.ai fallback). Use list_video_models for the full lineup with credit cost per second. I2V models (e.g. 'grok-imagine-i2v', 'seedance-pro-i2v') require a public imageUrl. Video generation can take 30s to several minutes; this tool polls with up to an 8-minute budget.
Model selection guide for videos (when the user does not specify a model)
Default: grok-imagine-t2v (4-6 cr/s, fast, has KIE -> fal.ai fallback for redundancy. Best general-purpose).
Pick a different model when the prompt has these signals:
"highest quality" / "premium" / broadcast / commercial ->
veo3.1-qualityorveo3-quality(Google's flagship, fixed 350-560 cr for 8s, 3-5 min)"fast premium" / quick high-quality ->
veo3-fastorveo3.1-fast(84 cr fixed for 8s)Cinematic camera moves / dolly / pan ->
seedance-pro-t2v(3-10 cr/s) orkling-3.0-pro-t2v(26 cr/s)Realistic human motion / faces ->
hailuo-2.3-pro-i2v(I2V, supply imageUrl)Talking head / lip sync ->
kling-avatar-pro(23 cr/s) orinfinitalk(5-17 cr/s)Anime / stylized / fantasy ->
wan-2.7-t2vNSFW / adult ->
wan-22-nsfw-i2v(I2V only; auto-tags adult)Animate this exact image -> any I2V variant (
grok-imagine-i2v,seedance-pro-i2v,hailuo-2.3-pro-i2v)First + last frame interpolation ->
seedance-pro-i2vwith bothimageUrl+endImageUrlCheapest test ->
hailuo-2.0-standard@ 512p (3 cr/s, ~18 cr for 6s) orgrok-imagine-t2v@ 480p (4 cr/s, ~24 cr for 6s)Clip 12-15s ->
grok-imagine-t2v(accepts up to 15s)True 4K ->
kling-3.0-4k-t2v(94 cr/s, expensive but native 4K)
Audio in generated video: grok-imagine-t2v, seedance-pro-t2v, and the VEO 3.x family include audio at base cost (no surcharge). Kling 2.6 and Kling 3.0 are the outliers — they price audio as a +50-100% surcharge (Kling 2.6 doubles the cost, Kling 3.0 Pro adds ~46%). Default to Grok / Seedance / VEO when sound matters and you don't want to think about audio pricing.
Cost framing: resolution and duration drive cost more than model choice. A 6-second 480p Grok generation costs ~24 cr; the same prompt at 1080p Seedance 2 is ~858 cr (35x more). Pick the lowest acceptable resolution + duration first.
For I2V models: imageUrl is required. For first+last-frame models, pass endImageUrl too.
Ask the user only when:
Single generation would cost more than 100 credits and they haven't confirmed
They asked for "the best" with no other signal; surface 2-3 options with cost ranges
Inputs: prompt (required), model, duration, resolution, +4 more.
aetherwave_list_image_modelsList available image modelsARead-only
Returns every image-generation model AetherWave supports, with its credit cost, default aspect ratio, supported inputs (T2I vs I2I), and any model-specific options. Call this before generate_image when you don't know the right model ID. The model key (e.g. 'grok-imagine-t2i') is what you pass as model to generate_image.
Inputs: no named parameters.
aetherwave_list_master_presetsList available audio mastering presetsARead-only
Returns every AI mastering preset AetherWave supports, with target LUFS, tags, descriptions, and difficulty level. Call this before master_audio when you don't know which preset fits the track. 12 presets total covering streaming, hip hop, EDM, pop, rock, lo-fi, R&B, acoustic, cinematic, podcast, gentle, and loud-and-punchy mastering styles. Each preset has a target LUFS value (e.g. -14 for streaming, -9 for loud) so you can match the user's distribution target.
Inputs: no named parameters.
aetherwave_list_my_creationsList my AetherWave gallery itemsARead-only
Returns items from the authenticated user's gallery — images, videos, audio tracks they've generated on AetherWave. Useful for agent workflows like 'find my last 5 images and reframe them all to 9:16' or 'list my recent songs and master each one'. Supports pagination and type filtering. Each item includes id, type, prompt, model, contentUrl, thumbnailUrl, createdAt, isFavorite, visibility, rating, and type-specific fields (duration for audio/video, width/height for images).
Inputs: type, limit, offset, favoritesOnly.
aetherwave_list_video_modelsList available video modelsARead-only
Returns every video-generation model AetherWave supports (Grok Imagine, Wan 2.7, Hailuo 02, Seedance Pro/Lite, Kling 2.6 with audio, VEO 3.1, Happy Horse, etc.) with per-second credit cost, supported durations, resolutions, aspect ratios, and whether the model needs an input image (I2V). Call this before generate_video when you don't know the right model ID.
Inputs: no named parameters.
aetherwave_master_audioMaster an audio track (AI mastering)A
Submits an audio file for AI mastering and returns the mastered URL synchronously (route polls the Python service internally; expect 30s-5min). Useful as a final polish step after music generation. Cost: 20 credits per track. Producer, Mogul, and Ultimate plans get mastering free. Output is WAV (~50MB per 3-minute track, lossless for redistribution). Pick a preset to steer the mastering style; call aetherwave_list_master_presets for the full live list (12 presets including streaming, loud, gentle, hip_hop, edm, pop, rock, lofi, rnb, acoustic, cinematic, podcast). Each preset has a target LUFS value so you can match the distribution target.
Inputs: audioUrl (required), preset (required), trackTitle.
aetherwave_reframe_imageReframe image to a new aspect ratio (Ideogram V3 Reframe)A
Reframes an image to a new aspect ratio by intelligently outpainting the edges. Pass a public imageUrl and the target aspectRatio ('16:9', '9:16', '1:1', '4:3', '3:4', etc.). Three speed tiers: 'turbo' (5 cr, fast), 'balanced' (10 cr, default), 'quality' (14 cr, slowest, best edges). Returns the reframed image URL.
Inputs: imageUrl (required), aspectRatio (required), speed.
aetherwave_reframe_videoReframe video to a new aspect ratio (Luma Ray 2 Flash)A
Reframes a video to a new aspect ratio by intelligently outpainting/cropping the edges. Pass a public videoUrl and target reframeAspectRatio. 17 credits per second. Optional reframePrompt lets you steer the new edge content (e.g. 'extend the sky with sunset clouds'). Returns the reframed video URL (R2-hosted).
Inputs: videoUrl (required), reframeAspectRatio (required), reframePrompt.
aetherwave_remove_backgroundRemove background from image (Recraft + fal.ai BiRefNet v2 fallback)A
Strips the background from an image, returning a PNG with transparent alpha. Pass a public imageUrl. Useful for product shots, character cutouts, logo isolation, or compositing onto a new background. ~5 credits per image. Recraft is the primary provider; on outage the tool auto-falls back to fal.ai BiRefNet v2 so single-image calls never silently fail. Works best on photographic subjects (people, products, animals); transparent-PNG inputs have no foreground to segment.
Inputs: imageUrl (required).
aetherwave_remove_background_videoRemove background from videoA
Strips the background from a video frame-by-frame using rembg (u2netp) on AetherWave's Python service. Pass a public videoUrl. Choose bgType: "transparent" for an alpha-channel WebM output (compositing) or bgType: "color" with a customColor hex for a solid replacement. 2 credits per second. Slowest tool in the surface (per-frame processing); a 6s clip takes ~4 min, a 30s clip ~15-20 min. Works best on subjects with clear edges (people, products). Returns the processed video URL (R2-hosted).
Inputs: videoUrl (required), bgType, customColor.
aetherwave_upscale_imageUpscale image (Topaz)A
Upscales a source image using Topaz's high-fidelity upscaler. Pass a public imageUrl and an upscaleFactor. Credit cost depends on the source resolution × factor; small images cost less than large ones at the same factor. Returns the upscaled image URL.
Inputs: imageUrl (required), upscaleFactor.
aetherwave_upscale_videoUpscale video (Atlas Video Upscaler)A
Upscales a source video to 1080p or 2K using Atlas. Pass a public videoUrl and the target resolution. Cost is per-second (7 cr/s @ 1080p, 9 cr/s @ 2K). Atlas-side limits: clips up to 53s at 1080p, 23s at 2K, source must be <=30fps. Returns the upscaled video URL (R2-hosted).
Inputs: videoUrl (required), targetResolution.
Tool Schema Changelog
Recent tool additions, removals, and schema changes observed during successful MCP inspections.
Loading tool schema changelog…
TDQS
Scored across 16 tools
Each tool targets a distinct media type and action (generate, edit, reframe, remove background, upscale, master, list models/presets/creations). No two tools overlap in purpose, and descriptions clearly differentiate them.
All tools follow a consistent 'aetherwave_verb_noun' pattern in snake_case, with clear verbs like generate, edit, list, master, reframe, remove, upscale. Even 'aetherwave_balance' is a concise outlier that still fits the convention.
With 16 tools covering image, video, and audio generation/editing, plus utility tools for models, presets, and user creations, the count is well-scoped for a comprehensive media generation server. No tool feels redundant or missing.
Core workflows (generate, edit, reframe, upscale, background removal, audio mastering) are well covered. However, there is no tool for deleting or managing user creations, which is a minor gap for a complete lifecycle.
Maintenance
Related MCP Connectors
MCP server for Google Veo AI video generation
AI image, video, voice and music generation over MCP, routed to Veo 3.1, Seedance 2.5 and more.
AI video generation MCP server for Kling, MiniMax, Luma & Hunyuan with prompt blueprints.
Generate images, video, audio and short films with 140+ AI models from any MCP client.
Related MCP Servers
- AlicenseNot gradedqualityCmaintenanceAccess 400+ generative AI models directly from your AI assistant — generate images (FLUX, Midjourney, GPT-4o), create videos (Veo3, Kling), make music (Suno), and enhance photos, all via a single MCP server.12MIT
- AlicenseAqualityDmaintenanceMCP server for Google Veo 3.1 video generation. Supports text/video/image-based generation, extension, and interpolation with cost estimation and batch processing.428 npm1MIT
- AlicenseAqualityCmaintenanceMCP server for generating, editing, and batch processing videos using xAI's Grok Imagine Video API, with support for text-to-video, image-to-video, and video editing via natural language prompts.472 npm1MIT
- AlicenseAqualityDmaintenanceMCP server for AI-powered media generation: images, videos, audio, and upscaling using 99 AI models.6MIT