serum-gen-mcp
You can generate, edit, inspect, and describe Serum 1 presets locally through this MCP server.
Write presets:
write_patchcreates a new.fxpin Serum'sUser → AIfolder from parameter values, modulation routings, and wavetable selections you provide.Edit with revisions:
edit_patchapplies partial changes to an existing preset as a new file (<name>_v2, etc.), returns a summary and differences, and never overwrites the original.Enforce constraints: Both write/edit tools can check hard requirements like clean sub, no reverb, no distortion, or mono before writing.
Look up valid settings:
list_parametersgives the full Parameter Reference, including valid names, ranges/options, Init values, modulation sources/destinations, and factory wavetables.Describe existing presets:
describe_presetreturns a human-readable summary of a preset's current settings and modulation matrix.Stay private and local: It only reads/writes files on your machine, validates against Serum 1's real parameters, and lets your chat app/model design the sound.
Click on "Deploy Server".
Wait a few minutes for the server to deploy. Once ready, it will show a "Started" state.
In the chat, type
@followed by the MCP server name and your instructions, e.g., "@serum-gen-mcp make me a warm evolving pad, no reverb"
That's it! The server will respond to your query, and you can continue using it as needed.
Here is a step-by-step guide with screenshots.
Serum 1 Preset Generator
Describe a sound in plain language — "aggressive cyberpunk bass that keeps the
sub clean," or in Russian — to Claude Desktop, Claude Code, or another local
AI chat app on your own computer. You get a real, ready-to-load Preset
sitting in Xfer Serum 1's browser (User → AI).
It needs a local app, not claude.ai in a browser — it writes the Preset file straight into Serum's folder on your machine, which a web chat can't reach.
Free, no sign-up. Nothing to subscribe to, no API key to go get. If you can chat with Claude, you can use this.
Trustworthy. Every setting is checked against all 299 of Serum 1's real parameters before anything is written, so you don't get a broken preset.
Never loses work. It never overwrites an existing preset — a name that's taken gets
_2,_3, and so on. Asking for a change always writes a new file; the one you started with is untouched.Private. It never sends anything anywhere — it only reads and writes files on your own computer.
Results aren't guaranteed to be perfect — always load the preset in Serum and listen before you commit to it.
Install (Claude Desktop)
Download the latest
.mcpbfile.Double-click it. Claude Desktop installs it and asks where your Serum presets live — leave that blank to use the standard location.
Restart Claude Desktop.
Related MCP server: serum-mcp
Try it
Ask Claude something like:
"deep sub bass for a dark trap beat"
"Make me a Serum preset: warm evolving pad, no reverb"
"bright plucky arp for a melodic house drop"
"warm pad, Don Toliver-ish", "glassy pluck, Four Tet style", "aggressive bass, Skrillex-ish" — style and artist references work too; Claude draws on its general sense of that sound (genre, mood, typical gear), not an exact reproduction of any one track
"тёмный мягкий пэд" — works in any language your chat app understands
"Make me a Serum preset: metallic FX riser", then "make the one you just made darker" — asking for a change always writes a new file; the original stays untouched
For developers
Other ways to install
Using Claude Code, or an MCP client other than Claude Desktop, pinned to a stable release, no clone needed:
claude mcp add serumv1-preset-generator -- \
uvx --from git+https://github.com/biogin/serumv1-preset-generator@v1.0.0 serum-gen-mcpAny MCP client that reads a JSON config (Claude Desktop's own
claude_desktop_config.json, under Settings → Developer → Edit Config,
works the same way):
{
"mcpServers": {
"serumv1-preset-generator": {
"command": "uvx",
"args": ["--from", "git+https://github.com/biogin/serumv1-preset-generator@v1.0.0",
"serum-gen-mcp"]
}
}
}Or hand the whole thing to an assistant with file/terminal access on the target machine:
Please set up the serumv1-preset-generator MCP server on this computer.
1. Install `uv` (a Python package manager) if it isn't already installed --
on Mac/Linux: `curl -LsSf https://astral.sh/uv/install.sh | sh`
on Windows: `powershell -ExecutionPolicy ByPass -c "irm https://astral.sh/uv/install.ps1 | iex"`
2. Register it as an MCP server pointed at
https://github.com/biogin/serumv1-preset-generator (no need to clone it
yourself -- `uv` fetches and builds it). If I'm on Claude Code, run:
`claude mcp add serumv1-preset-generator -- uvx --from git+https://github.com/biogin/serumv1-preset-generator@v1.0.0 serum-gen-mcp`
If I'm on Claude Desktop, add this to claude_desktop_config.json
(Settings -> Developer -> Edit Config):
{"mcpServers": {"serumv1-preset-generator": {"command": "uvx", "args":
["--from", "git+https://github.com/biogin/serumv1-preset-generator@v1.0.0",
"serum-gen-mcp"]}}}
3. Tell me exactly what you did, then tell me to fully quit and restart my
chat app (not just close the window) for it to take effect.For development, or to configure beyond the defaults (SERUM_GEN_SERUM_ROOT,
a custom Init template, etc. — see Configuration below):
git clone https://github.com/biogin/serumv1-preset-generator
cd serumv1-preset-generator
uv sync
claude mcp add serumv1-preset-generator --scope user -- \
/opt/homebrew/bin/uv --directory "$(pwd)" run serum-gen-mcpUse an absolute path for uv (Claude Desktop doesn't start servers with your
shell's PATH) — replace /opt/homebrew/bin/uv with the output of which uv.
Architecture
No model call and no API key live anywhere in this codebase (ADR
0004): the calling MCP client
designs the sound; this project only validates it against the Parameter
Reference and writes the .fxp bytes.
Tools
Tool | Description |
| Write a new preset from settings you designed. Returns a Patch Summary (the exact values written) and the Preset's path. |
| Apply a partial change to an existing preset as a new Revision ( |
| The full Parameter Reference: every settable name, its range/options and Init value, plus valid modulation sources/destinations and factory wavetables. |
| A human-readable summary of an existing preset's current settings and modulation matrix. |
You don't call these by hand — the chat app builds them from your request,
guided by this server's own instructions and list_parameters().
Command line
uv run serum-gen inspect path/to/preset.fxp # every parameter and Routing of a presetThat's the only CLI command: designing or revising a preset from a description needs a model, and there's no model in this codebase — so there's nothing for a bare terminal command to call.
Configuration
All settings are optional, set in the environment or .env:
Variable | Default |
| Serum's |
|
|
| the packaged Init preset |
Developed and tested on macOS; Windows and Linux likely work too via
SERUM_GEN_SERUM_ROOT but are untested — there's no macOS-specific code
anywhere in this project.
Known limitations
edit_patchhas worked well on presets like "Biggest Hard 808" + "hit harder," but at least one case ("PR 808 Kick Circuit [SD]" + "hit harder") didn't clearly change the sound as asked, in testing before this project dropped its own model. Treat a Revision as a starting point to audition, not a guaranteed result.Result quality tracks whatever chat app and model you're using — this server has no sound-design opinion of its own.
Development
uv run pytest # no API key or network needed anywhere in this suite
uv run mypy # strict
uv run ruff check && uv run ruff format --checkTests that read the factory library skip when Serum isn't installed.
Prior art
serum-mcp does the same thing for
Serum 2, whose .SerumPreset format Xfer doesn't publish (its own docs
note parameters are shipped with confidence levels, not certainty). This
project targets Serum 1's .fxp format instead, verified byte-for-byte
against the installed factory library — a different synth version, not a
better approach to the same one.
Design notes
CONTEXT.md (glossary) and docs/adr/ (decisions).
License
Available Tools
4 toolsdescribe_presetB
A human-readable summary of an existing preset's current settings and mod matrix.
Args:
preset: The preset's name as shown in Serum's browser (a partial name
works if it's unique), or a full path to its .fxp file.
Inputs: preset (required). Returns: result
edit_patchA
Make a Revision of an existing Serum 1 preset: only the settings you list change.
Writes a new Preset next to the others in User → AI (named <preset>_v2,
_v3, ...; the original is never changed, and keeps its name) and returns
a Patch Summary of what you set plus every resulting difference from the
original.
Args:
preset: The preset's name as shown in Serum's browser (a partial name
works if it's unique), or a full path to its .fxp file.
changes: Only the settings to change; everything else keeps its current value.
constraints: Hard requirements to check before writing.
Inputs: preset (required), changes (required), constraints. Returns: result
list_parametersA
The full Parameter Reference: every settable name, its range/options and Init
value, plus valid modulation sources/destinations and factory wavetables.
Call this whenever you're unsure of an exact name, range or option before
write_patch/edit_patch.
Inputs: no named parameters. Returns: result
write_patchB
Write a new Serum 1 preset from settings you designed.
Returns a Patch Summary (the exact settings written) and the path of the
Preset written into Serum's preset browser (User → AI).
Args:
patch: The settings to write.
constraints: Hard requirements to check before writing (e.g. the producer
said "keep the sub clean" or "no reverb").
Inputs: patch (required), constraints. Returns: result
Tool Schema Changelog
Recent tool additions, removals, and schema changes observed during successful MCP inspections.
Loading tool schema changelog…
TDQS
Scored across 4 tools
Each tool targets a distinct operation: write_patch creates a new preset, edit_patch mutates an existing one, list_parameters is a reference lookup, and describe_preset reads a preset. The write vs edit boundary is clearly spelled out (new preset vs _v2 revision of the original), leaving no real ambiguity.
All four tools follow a strict verb_noun snake_case pattern (write_patch, edit_patch, list_parameters, describe_preset) with no deviation in style or casing.
Four tools is well-scoped for a focused Serum preset-generation task, and each one covers a necessary part of the authoring loop (create, revise, inspect, reference) without redundancy.
The surface covers the full create/read/update/reference lifecycle for preset authoring. Minor gaps exist: no delete_preset or list/browse operation for existing presets, though describe_preset's partial-name matching mitigates discovery.
Maintenance
Related MCP Connectors
MCP server for Producer/Riffusion AI music generation
Remote MCP server for audio stem separation, denoise, reverb, and MIDI export.
Generate game-ready 3D models, textures, and audio from natural language, over MCP.
Generate AI music via the Lacuna Music API from MCP clients like Claude Desktop & Code.
Related MCP Servers
- AlicenseAqualityDmaintenanceEnables AI-powered music composition and synthesis by generating Pure Data patches, VCV Rack modules, and MIDI controller mappings through natural language.1012 npm5MIT
- AlicenseAqualityBmaintenanceAn MCP server that lets users generate, edit, and save Xfer Serum 2 presets from plain-English descriptions directly through MCP clients like Claude Code or Claude Desktop, without any separate API keys or LLM calls.426MIT
- AlicenseAqualityBmaintenanceEnables MCP clients to run hosted audio tools such as stem splitting, analysis, segmentation, mastering, sample-pack generation, audio-to-MIDI conversion, music generation, synth-preset creation, and text-to-vox singing.19308 PyPIMIT
- AlicenseNot gradedqualityCmaintenanceThis MCP server enables MCP clients to generate background music, instrument loops, and sound effects from plain-language prompts, then edit them (variation, inpainting, extension) and finish them into seamless loops, fades, loudness-normalized WAV/OGG/FLAC files. All generation runs locally on your own machine without cloud services or API keys, with reproducible prompt/seed metadata saved alongside each output.1MIT