Generate image, video, music and speech through Chutes and save assets into your project.
Copy the AI prompt to install this server into Claude Code, Cursor, or another agent β or use 1-click editor setup below.
π‘ Paste into ~/Library/Application Support/Claude/claude_desktop_config.json (macOS) or %APPDATA%\Claude\claude_desktop_config.json (Windows)
Generate image, video, music and speech through Chutes from inside any coding agent β Claude Code, Cursor, Cline, Windsurf, Codex, OpenCode, Claude Desktop β and save the generated asset straight into the project you're working on.
Independent community project. Not officially affiliated with or endorsed by Chutes.
Requires Node.js 20.3+ and a Chutes API key. Add the server to Claude Code:
Then ask your agent naturally:
Generate a cinematic hero image of a misty mountain range and save it in this project.
The agent discovers a suitable model, reads its live input schema, validates the request, and saves
the result under assets/chutes/<kind>/. For Cursor, Cline, Windsurf, OpenCode and Claude Desktop,
see Use as an MCP server.
| Live model contract | Safer project I/O | Project-native output | One shared core |
|---|---|---|---|
| Reads each model's current schema instead of hardcoding payloads. | Contains file access to the workspace and protects existing assets by default. | Saves generated media and optional provenance directly beside your code. | MCP and CLI expose the same discovery, validation and generation behavior. |
It ships as:
chutes-media-mcp, stdio) β the primary, universal interface,chutes-media) β a fallback for shells and agents without MCP support, andskill/chutes-media) documenting the
describeβgenerate workflow (auto-loaded by Claude Code; usable as reference by any agent).Both frontends are thin adapters over one shared, transport-agnostic core.
./assets/chutes/<kind>/) and returns the path.Chutes models differ wildly (FLUX vs Qwen-Image vs Wan vs LTX vs ACE-Step vs a TTS model), so payloads are never hardcoded. The flow is always:
list_media_models β discover a model for the kind you want.describe_media_model β fetch the model's live cords and input schema.generate_media β submit the payload you composed; the asset is saved into the workspace.The server owns all the plumbing: auth, cold-start warmup + retry, blocking invocation with progress, downloading, saving, light validation, and best-effort cost reporting.
CHUTES_API_KEY). Create one in your Chutes account.An MCP server isn't "installed" like an app β it's registered as a command in your MCP client's config (see Use as an MCP server). Pick whichever way of providing that command suits you:
1. npx from npm β recommended (no install):
2. Global install:
3. Directly from GitHub (no npm needed): builds on install via the prepare script.
4. From source (for development):
The package ships two bins:
chutes-media-mcp(the MCP server) andchutes-media(the CLI).
| Variable | Required | Default | Purpose |
|---|---|---|---|
CHUTES_API_KEY | β | β | Your Chutes API key. Read from the environment; never written to disk. |
CHUTES_AUTH_SCHEME | raw | How the key is sent in Authorization: raw (the key as-is) or bearer (prefixed Bearer ). On a 401, try flipping this. | |
CHUTES_API_BASE_URL | https://api.chutes.ai | Management API base URL. HTTPS is required except for loopback development; custom endpoints receive no Chutes API key. | |
CHUTES_OUTPUT_DIR | assets/chutes | Output directory inside the agent's CWD. A <kind>/ subfolder is appended. | |
CHUTES_WARMUP | true | Warm models up before invoking. Set false to skip. | |
CHUTES_COLD_START_RETRIES | 4 | Retries when a cold model returns 503 no-instances (0 disables). | |
CHUTES_COLD_START_BACKOFF_MS | 8000 | Base backoff between cold-start retries (grows per attempt). | |
CHUTES_MAX_ASSET_MB | 512 | Maximum response or local input-asset size accepted in memory (max 4096). | |
CHUTES_PROGRESS_INTERVAL_MS | 5000 | How often progress heartbeats are emitted while a call blocks. | |
CHUTES_ALLOW_UNKNOWN_PARAMS | false | When true, allow params not in the model schema. Default rejects them so a renamed/unknown field fails loudly. | |
CHUTES_PROVENANCE | true | Write a <asset>.json provenance sidecar (model, cord, params, schema hash). Set false to disable. |
Generated assets are saved to ./assets/chutes/<kind>/ by default, relative to wherever the agent is
running β so they land inside the project being worked on. Output traversal and symlink escapes are
rejected. Existing files are not replaced unless overwrite is explicitly enabled.
Claude Code:
Cursor / Cline / Windsurf / OpenCode / Claude Desktop (generic mcpServers config):
To run without npm, replace the args with
["-y", "github:TheStreamCode/chutes-media-mcp"].
list_media_models β { kind?, query?, limit? } β matching models.describe_media_model β { model } β every cord with required fields, types, defaults, a
minimal example payload, and a top-level supportsEditing. Call this before generating.generate_media β { model, kind, params, cord?, output_dir?, filename?, timeout_ms?, overwrite? } β
runs the generation and returns
{ path, kind, model, cord, bytes, contentType, cost?, durationMs, schemaHash?, provenancePath? }.
params is what you composed from the described schema. schemaHash pins the exact cord schema the
payload was validated against; provenancePath points at the sidecar (omitted when
CHUTES_PROVENANCE=false).Each tool publishes an output schema and returns the same JSON object both as text and as MCP
structuredContent, so clients can consume typed results without parsing the text representation.
"Generate a hero image of a misty mountain range and drop it into the landing page."
The agent calls describe_media_model on an image model, composes
{ prompt: "misty mountain range at dawn, cinematic", width: 1024, height: 1024 }, calls
generate_media, gets back ./assets/chutes/image/<model>-<timestamp>.png, and references that path
in index.html.
Progress is printed to stderr; the JSON result (including the saved path) is printed to
stdout, so agents can parse it.
Chutes has no platform-wide edit endpoint. Editing exists only when a model publishes an edit
cord (e.g. img2img, inpaint) or is a dedicated edit model. describe_media_model reports
supportsEditing and lists those cords. To use one, reference a workspace file in params (a single
field like image, or an array like image_b64s) β the server reads the file and base64-encodes it:
When a model has no edit cord, only generation is available.
The MCP server already ships instructions (the describeβgenerate workflow), so any client receives guidance on connect β no skill required.
For Claude Code you can additionally install the bundled Agent Skill
(skill/chutes-media) for richer, auto-loaded guidance:
(Or copy the folder into your skills directory manually.) Agents without skill auto-loading don't need it β the tool descriptions and server instructions already guide them.
Chutes prices by compute units. When a model exposes the cost via a response header it is returned as
cost; otherwise cost is omitted. Check the Chutes pricing for per-model
rates.
π‘ Many public models scale to zero and may return
503 no-instancesuntil they warm up. The server retries automatically; if a model stays cold, pick another of the same kind.
See CONTRIBUTING.md for setup, the build/test commands, and the Windows #-path
caveat. Quick version:
Never commit your API key. Credential-bearing requests are limited to HTTPS Chutes hosts, remote asset URLs are screened against private-network destinations, and file access is contained to the workspace. Query strings and fragments are removed from network-error messages so signed asset URLs are not copied into logs. See SECURITY.md for details and vulnerability reporting.
Version 2.0 makes the safety boundaries enforceable instead of best-effort:
overwrite / --overwrite is explicitly set.CHUTES_MAX_ASSET_MB (512 MiB by default).If an existing automation intentionally replaces a file, add the explicit overwrite option after confirming the target path.
Built by Michael Gasperini β founder of Mikesoft, building small, focused, privacy-aware developer tools.
If this project is useful to you, consider sponsoring its development.
MIT Β© Michael Gasperini (Mikesoft). Project-owned code, documentation, and other project-created materials are MIT-licensed except for the third-party rights below.
This independent project is not affiliated with, sponsored by, or endorsed by Chutes Global Corp. The Chutes name, logo, platform, services, branding, and related marks are the property of Chutes Global Corp or their respective owners. The MIT License and this project grant no rights to use them.
assets/chutes-media-mcp.png is the only
project image in this repository that incorporates Chutes logo/marks. It is one
of exactly three user-created Chutes-logo image compositions across the Chutes
projects; the embedded Chutes logo/marks remain the property of their owner and
are not licensed under MIT.
The MIT License does not grant rights in Chutes services or in third-party models, model content, or generated outputs. Their use is subject to applicable provider terms and model licenses. Review Chutes' official Terms of Service and Privacy Policy. See NOTICE for the packaged notice.
Showcase your server listing on GitHub or your project documentation. Embed this dynamic SVG badge to highlight official listing status and live engagement.
[](https://allmcps.com/mcp/chutes-media-mcp)<a href="https://allmcps.com/mcp/chutes-media-mcp"><img src="https://allmcps.com/api/badge/chutes-media-mcp?style=directory" alt="Chutes Media MCP on AllMCPs" /></a>