Skip to main content
Glama

easyeffects-mcp

test

An MCP server that lets AI assistants (Claude Code, Claude Desktop, Cursor, VS Code, etc.) control Easy Effects, the PipeWire audio effects app for Linux.

Ask things like:

  • "Turn off all my audio effects" / "turn them back on"

  • "Load my headphones preset"

  • "Boost the bass a bit on my EQ"

  • "Apply this AutoEQ profile for my HD 600s: …"

  • "What plugins are active on my mic?"

Requirements

  • Linux with Easy Effects running (native package or Flatpak)

  • uv (it installs Python 3.10+ for you if needed)

Easy Effects version

What works

8.0+ (Arch, Fedora, Flatpak)

Everything

7.x (e.g. Ubuntu 24.04, Debian 12)

Global bypass and presets only, through the easyeffects command line. EQ and plugin settings need 8.0+, which you can get from Flathub.

Check your version with easyeffects --version (or flatpak run com.github.wwmm.easyeffects --version).

Related MCP server: Twill

Install

You don't need to clone anything. Point your MCP client at:

uvx --from git+https://github.com/kaushikgunasekaren/easyeffects-mcp easyeffects-mcp

Claude Code

claude mcp add easyeffects --scope user -- uvx --from git+https://github.com/kaushikgunasekaren/easyeffects-mcp easyeffects-mcp

Claude Desktop, Cursor, Windsurf and other JSON-configured clients

{
  "mcpServers": {
    "easyeffects": {
      "command": "uvx",
      "args": ["--from", "git+https://github.com/kaushikgunasekaren/easyeffects-mcp", "easyeffects-mcp"]
    }
  }
}

VS Code (.vscode/mcp.json)

{
  "servers": {
    "easyeffects": {
      "command": "uvx",
      "args": ["--from", "git+https://github.com/kaushikgunasekaren/easyeffects-mcp", "easyeffects-mcp"]
    }
  }
}

uvx caches the install. To pick up a newer version, run uv cache clean easyeffects-mcp and restart your client.

Tools

Tool

What it does

get_status

Bypass / mic monitoring / audio sharing state, devices, last presets, plugin chains

set_global_bypass

Turn all effects off (bypass) or on

set_microphone_monitoring

Hear your processed microphone

set_audio_sharing

Route processed output to the virtual source

window

Show or hide the Easy Effects window

list_presets / load_preset

List and load saved input/output presets

read_preset / save_preset

Read or write preset JSON files

list_plugin_instances

Active plugins in a pipeline with their bypass state

bypass_plugin

Bypass a single plugin

get_plugin_property / set_plugin_property

Read/write any plugin property (e.g. compressor threshold)

get_equalizer

Full parametric EQ state, both channels

set_equalizer_band

Change gain/frequency/Q/type/mode of one band

apply_parametric_eq

Replace the EQ with a list of bands (great for AutoEQ profiles)

output is the speakers/headphones pipeline, input is the microphone pipeline. Property names are the camelCase keys Easy Effects stores in ~/.config/easyeffects/db/*rc (e.g. inputGain, band3Gain, bypass).

Limitations

  • Adding or removing plugins from the chain isn't exposed by Easy Effects' control socket. Do that in the app, or save a preset with the plugins you want and load it.

  • Live property changes aren't saved into a preset until you save it in Easy Effects.

Troubleshooting

"control socket not found": Easy Effects isn't running. Start it in the background with easyeffects --service-mode -w (Flatpak: flatpak run com.github.wwmm.easyeffects --service-mode -w). Enabling "Launch on system startup" in its settings keeps it running.

"error_plugin_not_found": that plugin isn't in the chain. Ask for get_status to see which plugins are loaded, and add the plugin in the Easy Effects window.

Socket in an unusual place: set EASYEFFECTS_SOCKET to its path in your MCP client's env block.

Development

git clone https://github.com/kaushikgunasekaren/easyeffects-mcp.git
cd easyeffects-mcp
uv sync
uv run pytest
npx @modelcontextprotocol/inspector uv run easyeffects-mcp   # MCP Inspector

License

MIT

Available Tools

16 tools
apply_parametric_eqB

Replace the whole equalizer with a list of bands (e.g. from an AutoEQ ParametricEQ.txt), applied to both channels.

Requires an equalizer plugin in the chain.

Inputs: bands (required), mode, preamp, instance, +1 more. Returns: result

bypass_pluginC

Bypass (disable) or re-enable a single plugin in the chain.

Inputs: plugin (required), bypassed (required), pipeline (required), instance. Returns: result

get_equalizerB

Read the parametric equalizer: gains, mode and every active band for both channels.

Inputs: instance, pipeline.

get_plugin_propertyA

Read one property of an active plugin (see get_status for the plugin chain).

Inputs: plugin (required), pipeline (required), property (required), channel, +1 more. Returns: result

get_statusB

Overview: global bypass, mic monitoring, audio sharing, devices, last loaded presets and active plugin chains.

Inputs: no named parameters.

list_plugin_instancesB

Active plugins in a pipeline, in processing order, with their bypass state.

Inputs: pipeline (required). Returns: result

list_presetsB

List saved input and output presets, plus the last loaded one for each.

Inputs: no named parameters.

load_presetC

Load a saved preset into the input or output pipeline.

Inputs: name (required), pipeline (required). Returns: result

read_presetC

Return the JSON contents of a saved preset file.

Inputs: name (required), pipeline (required).

save_presetA

Write a preset JSON file (same format read_preset returns; top-level key must be the pipeline name).

Tip: read an existing preset first and modify it, rather than writing one from scratch.

Inputs: name (required), preset (required), pipeline (required), overwrite. Returns: result

set_audio_sharingB

Turn audio sharing (route processed output to the virtual source) on or off.

Inputs: enabled (required). Returns: result

set_equalizer_bandC

Change one equalizer band. Only the fields you pass are changed. Applies to both channels by default.

Inputs: band (required), q, gain, mode, +6 more.

set_global_bypassA

Enable (true) or disable (false) the global bypass. Bypass on = all effects off.

Inputs: enabled (required). Returns: result

set_microphone_monitoringB

Turn microphone monitoring (hear your processed mic) on or off.

Inputs: enabled (required). Returns: result

set_plugin_propertyB

Set one property of an active plugin. Returns the value read back from Easy Effects.

Inputs: value (required), plugin (required), pipeline (required), property (required), +2 more. Returns: result

windowB

Show or hide the Easy Effects window.

Inputs: action (required). Returns: result

Tool Schema Changelog

Recent tool additions, removals, and schema changes observed during successful MCP inspections.

Loading tool schema changelog…

    TDQS

    B3.2/5.0

    Scored across 16 tools

    Disambiguation4/5

    Most tools target clearly distinct actions (e.g., set_equalizer_band vs. apply_parametric_eq vs. get_equalizer), and global vs. plugin-specific bypass are separated. Minor overlap exists between the generic set_plugin_property and the specialized equalizer tools, but descriptions help disambiguate.

    Naming Consistency4/5

    Nearly all tools follow a verb_noun pattern (get_status, set_global_bypass, list_presets, save_preset, etc.). The outlier is 'window', which lacks a verb, but otherwise naming is predictable.

    Tool Count3/5

    With 16 tools, the set sits at the borderline of being heavy for the apparent scope. While no tool seems entirely redundant, the count is above the ideal 3–15 range and some generic property tools could potentially be consolidated.

    Completeness3/5

    Core operations for equalizer, presets, plugins, and toggles are present, but notable gaps exist: no delete_preset, no add/remove plugin, and no reset-to-flat equalizer or device selection. These gaps may cause agent workarounds.

    Maintenance

    ActivityMaintained
    ResponsivenessNo recent community issues

    Related MCP Connectors

    Related MCP Servers

    • F
      license
      Not graded
      quality
      B
      maintenance
      Enables control of Equalizer APO profiles, filters, headphones, and diagnostics through MCP tools, allowing profile switching and audio management from any MCP client.
      -
    • A
      license
      C
      quality
      B
      maintenance
      Enables AI assistants and voice companions to control a Linux desktop over MCP, exposing desktop tools and system controls through stdio.
      46
      2
      Apache 2.0
    • A
      license
      Not graded
      quality
      B
      maintenance
      Enables AI agents to control Linux desktops and compositors, including Hyprland/Wayland window management, PipeWire audio routing, systemd diagnostics and self-healing, notifications, screenshots, and optional agent memory.
      MIT
    • A
      license
      C
      quality
      C
      maintenance
      Enables an AI assistant to control a Hyprland/Wayland Linux desktop through 178 tools across 30 categories, covering audio, window and workspace management, themes and wallpapers, screenshots and recording, Bluetooth, media playback, notifications, system stats, and chained multi-step macros. Everything runs locally via hyprctl, PipeWire, and standard Linux utilities, with no cloud dependencies.
      178
      MIT