Skip to main content
Glama
README.md
# ai-media-mcp

A single-file, zero-dependency MCP server for **image & video generation** across **GPT-Image / Gemini / Grok / Jimeng**, with **zero base64** โ€” everything is saved to disk and only file paths are returned.

> Node.js 18+ required. No `npm install`, no build step. Just run the `.mjs`.

---

## โœจ Features

- **๐Ÿ–ผ Image generation** โ€” `generate_image`: one OpenAI-compatible path, model name pass-through (`gpt-image-2` / `gemini-3-pro-image` / `grok-imagine-image-quality` / `doubao-seedream` / Jimeng image models โ€ฆ)
- **๐ŸŽฌ Video generation** โ€” `generate_video` (submit only) / `get_video_status` (poll) / `generate_video_and_wait` (submit โ†’ poll โ†’ download). Auto-routes Grok video & Jimeng video.
- **๐Ÿ”‘ Multi-key routing** โ€” different models automatically use their own API key & base URL (common with relay/aggregator gateways).
- **๐Ÿšซ Zero base64** โ€” images/videos are saved to local disk; responses only contain `Saved to: ...` (~350 bytes vs ~3 MB with typical MCP wrappers).
- **๐Ÿ“š Capability lookup** โ€” `list_model_capabilities`: query supported resolutions / aspect ratios / durations per model; reverse-lookup (`size: "720p"`, `aspect_ratio: "21:9"`). Zero cost.
- **๐Ÿ–ผ Multi-reference images (image-to-image)** โ€” `images` array (up to 5): Gemini native multi-image via multiple `inlineData`; GPT/Grok arrays with automatic `edits โ†’ generations` fallback. The requested model is preserved; GPT, Gemini, and Grok have each passed two-reference gateway tests.
- **๐ŸŽฌ Reference-image video (image-to-video)** โ€” single `image` (Grok `image_url`, Jimeng `first_frame_url`) or multiple `images` (Jimeng `reference_image_urls` up to 9, Grok `image_url` array fallback).
- **โœ๏ธ Auto prompt enhancement** โ€” `auto_prompt: true` (default): if the prompt is < 15 chars **and** reference images are present, an internal "seamless fusion" template is applied (lighting / perspective / color grading / anti-cutout instructions verified on real generations).
- **๐Ÿงช `@chatbox-latest`** โ€” pass `image: "@chatbox-latest"` to auto-read the most recent image dragged into the Chatbox window (`chatbox-blobs\pictureinput-*`). Repeated aliases in `images` preserve the UI attachment order.
- **๐Ÿ”Ž Verifiable references** โ€” every generated image reports ordered `reference_images` metadata derived from the exact bytes sent upstream: safe source label, MIME, byte count, dimensions, and SHA-256.
- **๐Ÿ“ฅ Sandbox delivery** โ€” callers can pass their writable sandbox as `output_dir`, keep `return_mode: "path"`, and turn returned files into download cards without moving files from unrelated external directories.

---

## ๐Ÿ“ฆ Install

```bash
# Just clone/copy the mjs and run it directly
node ai-media-mcp.mjs
```

No npm dependencies. Add it to your MCP client (e.g. Chatbox / Claude Desktop) as a stdio server:

```json
{
  "command": "node",
  "args": ["/path/to/ai-media-mcp.mjs"],
  "env": { "...": "see .env.example" }
}
```

---

## โš™๏ธ Configuration

All variables are **optional**. A group falls back to the unified `AI_MEDIA_API_KEY` / `AI_MEDIA_BASE_URL` only when its group variable is absent. If a group key is explicitly present but empty (for example `AI_MEDIA_JIMENG_API_KEY=`), that group is disabled and will not reuse another provider's key.

| Variable | Group | Description |
|---|---|---|
| `AI_MEDIA_GPT_API_KEY` / `AI_MEDIA_GPT_BASE_URL` | GPT | `gpt-image-2` / `doubao-*` / Jimeng image |
| `AI_MEDIA_GEMINI_API_KEY` / `AI_MEDIA_GEMINI_BASE_URL` | Gemini | native Gemini API (`/v1beta/models/...:generateContent`) |
| `AI_MEDIA_GROK_API_KEY` / `AI_MEDIA_GROK_BASE_URL` | Grok | `grok-imagine-image-quality` / `grok-imagine-video` |
| `AI_MEDIA_JIMENG_API_KEY` / `AI_MEDIA_JIMENG_BASE_URL` | Jimeng | `as-sd2.0-fast` / `video-ds-2.0` |
| `AI_MEDIA_API_KEY` / `AI_MEDIA_BASE_URL` | unified | fallback for all groups |
| `AI_MEDIA_IMAGE_MODEL` | โ€” | default image model (`gpt-image-2`) |
| `AI_MEDIA_VIDEO_MODEL` | โ€” | default video model (`grok-imagine-video`) |
| `AI_MEDIA_IMAGE_OUTPUT_DIR` / `AI_MEDIA_VIDEO_OUTPUT_DIR` | โ€” | output dirs |
| `AI_MEDIA_RETURN_MODE` | โ€” | `path` (default, zero base64) / `inline` / `both` |
| `AI_MEDIA_AUTO_PROMPT` | โ€” | `auto` (default) / `never` |
| `AI_MEDIA_TIMEOUT_MS` / `AI_MEDIA_POLL_INTERVAL_MS` | โ€” | timeouts |

---

## ๐Ÿงญ Routing

By model name prefix:

| Model prefix | Group | API |
|---|---|---|
| `gemini-*` / `imagen-*` | Gemini | native `/v1beta/models/{model}:generateContent` |
| `grok-*` | Grok | OpenAI-compatible |
| `video-ds*` / `as-sd*` | Jimeng | task-based `/videos` |
| others (`gpt-*`, `doubao-*`, Jimeng image) | GPT | OpenAI-compatible |

---

## ๐Ÿ›  Tools

| Tool | Purpose |
|---|---|
| `generate_image` | Generate images (n, size/aspect_ratio/quality, `image`/`images` references, `auto_prompt`) |
| `generate_video` | Submit a video task only (Grok/Jimeng auto-route, `image`/`images` supported) |
| `get_video_status` | Query task status |
| `generate_video_and_wait` | Submit โ†’ poll โ†’ download to `output_dir` (or the configured default), return file path |
| `list_model_capabilities` | Query model capabilities (resolutions/ratios/durations), reverse-lookup by size or ratio |
| `probe_capabilities` | Probe actual supported sizes/ratios via minimal real calls, cache results |

---

## ๐Ÿ“„ License

MIT

TDQS

A4.2/5.0

Scored across 6 tools

Disambiguation5/5

Each tool has a clearly distinct purpose: local capability lookup vs. live probing, image generation vs. video generation, async submission vs. status polling vs. synchronous wait-and-download. Even related pairs like generate_video and generate_video_and_wait are cleanly separated by behavior.

Naming Consistency5/5

All tool names follow a consistent verb_noun snake_case pattern: list_, probe_, generate_, get_. The longer generate_video_and_wait is still a predictable extension of generate_video without mixing conventions.

Tool Count5/5

With six tools, the server is well-scoped for an AI media generation service. Each tool addresses a distinct part of the workflow: capability discovery, image generation, video submission, status polling, and synchronous video generation.

Completeness4/5

The surface covers the core workflow: check capabilities, generate an image, submit/synchronously wait for video, and poll video status. Minor gaps exist, such as no way to cancel a pending video job or list/manage previously generated files, but these are not critical to the server's stated purpose.

Maintenance

ActivityMaintained
ResponsivenessNo issues