Skip to main content
Glama
serum-gen-mcp
by biogin

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)

  1. Download the latest .mcpb file.

  2. Double-click it. Claude Desktop installs it and asks where your Serum presets live — leave that blank to use the standard location.

  3. 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-mcp

Any 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-mcp

Use 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_patch(patch, constraints=[])

Write a new preset from settings you designed. Returns a Patch Summary (the exact values written) and the Preset's path.

edit_patch(preset, changes, constraints=[])

Apply a partial change to an existing preset as a new Revision (<name>_v2, …); the original is never touched. Returns the Patch Summary plus every resulting difference.

list_parameters()

The full Parameter Reference: every settable name, its range/options and Init value, plus valid modulation sources/destinations and factory wavetables.

describe_preset(preset)

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 preset

That'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_GEN_OUTPUT_DIR

Serum's Presets/User/AI

SERUM_GEN_SERUM_ROOT

/Library/Audio/Presets/Xfer Records/Serum Presets

SERUM_GEN_TEMPLATE

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_patch has 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 --check

Tests 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

MIT

Available Tools

4 tools
describe_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

    A4/5.0

    Scored across 4 tools

    Disambiguation5/5

    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.

    Naming Consistency5/5

    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.

    Tool Count5/5

    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.

    Completeness4/5

    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

    ActivityNo data
    ResponsivenessOutdated data

    Related MCP Connectors

    Related MCP Servers

    • A
      license
      A
      quality
      D
      maintenance
      Enables AI-powered music composition and synthesis by generating Pure Data patches, VCV Rack modules, and MIDI controller mappings through natural language.
      10
      12 npm
      5
      MIT
    • A
      license
      A
      quality
      B
      maintenance
      An 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.
      4
      26
      MIT
    • A
      license
      Not graded
      quality
      C
      maintenance
      This 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.
      1
      MIT