Skip to main content
Glama
vcv-rack-mcp

vcv-rack-mcp

vcv-rack-mcp

MCP server for VCV Rack 2 built around one insight: .vcv patch files are plain JSON, so an LLM can compose modular synth patches by emitting structured data — no GUI automation, ever.

Status: v0.1.0 — Webapp and Core complete. Patch generation, catalog, validation, OSC bridge, webapp dashboard, Playwright E2E tests, and agentic workflow all working. Manual gates P2 (round-trip in Rack) and P3 (OSC e2e) still need a human with Rack open.

Quick Start

git clone https://github.com/sandraschi/vcv-rack-mcp
cd vcv-rack-mcp
uv sync
uv run -m vcv_rack_mcp

Related MCP server: synthlab-mcp

Tools

Tool

What it does

vcv_patch

Create, edit, validate, list, get, open_in_rack, rack_cycle, import patches, set_module_data

vcv_catalog

Search catalog, get module details, verify installed, library link, sideload, suggest rack

vcv_live

OSC address map, performance sheet for live tweaking

vcv_agentic_workflow

ctx.sample loop: brief → generate → validate → retry (max 3)

show_patch_card / show_catalog_card

Prefab UI cards

hub_status

Catalog size, depot health, Rack path

vcv_shutdown

Graceful self-termination (+ POST /api/shutdown)

Architecture

vcv-rack-mcp (port 10916, stdio / HTTP /mcp)
  ├── catalog/modules.yaml — 50 modules, 50/50 generative/performance
  ├── depot/ — .vcv patches + SQLite metadata + sidecar .md
  └──→ osc-mcp (port 10767) — vcv_manager consumes address maps

What's Real vs What Needs Human

Feature

Status

Gate

Catalog (50 modules, incl. Stoermelder TRANSIT)

Done, validated

P1

Patch generation

Done, deterministic

P2 (needs Rack round-trip)

Validation (4 checks, incl. module data)

Done with tests

P2

OSC address map

Done

P3 (needs osc-mcp e2e)

Agentic workflow

Done

P4

Webapp

Done, with Playwright E2E tests

P5

Tauri wrapper

Future

P5

Ports

  • Backend: 10916 (FastMCP + FastAPI)

  • Frontend: 10917 (Vite React, active)

  • OSC control: delegates to osc-mcp port 10767

Available Tools

7 tools
hub_statusA

Show hub status: catalog size, depot health, Rack path.

Inputs: no named parameters. Returns: object

show_catalog_cardC

Show a rich in-chat card for the module catalog.

Return Format

ToolResult with PrefabApp content.

Inputs: persona_tag, function_tag. Returns: object

show_patch_cardC

Show a rich in-chat card for a patch.

Return Format

ToolResult with PrefabApp content.

Inputs: patch_id (required). Returns: object

vcv_agentic_workflowB

SEP-1577 sampling loop: brief -> catalog selection -> generate -> validate -> retry (max 3).

Uses ctx.sample when available for autonomous iteration. Falls back to structured result with recovery_options for hosts without sampling.

Return Format

{"success": bool, "patch_id": str, "iterations": int, "report": list}

Examples

vcv_agentic_workflow(brief="slow ambient drone, two detuned voices, filtered noise swells, big reverb")

Inputs: brief (required), ctx, persona, max_iterations. Returns: object

vcv_catalogC

Module catalog portmanteau — search, get_module, verify_installed, library_link, sideload, suggest_rack.

Return Format

{"success": bool, "operation": str, ...operation-specific keys}

Examples

vcv_catalog(operation="search", function_tag="osc") vcv_catalog(operation="get_module", plugin_slug="Fundamental", model_slug="VCO") vcv_catalog(operation="suggest_rack", persona_tag="generative", intent="ambient drone")

Inputs: operation (required), url, limit, query, +5 more. Returns: object

vcv_liveD

Live performance portmanteau — address_map, performance_sheet.

Return Format

{"success": bool, "operation": str, ...}

Examples

vcv_live(operation="address_map", patch_id="ambient-drone") vcv_live(operation="performance_sheet", patch_id="ambient-drone")

Inputs: operation (required), patch_id. Returns: object

vcv_patchC

Patch authorship portmanteau — create, edit, validate, list, get, open_in_rack, rack_cycle, import.

Return Format

{"success": bool, "operation": str, ...operation-specific keys}

Examples

vcv_patch(operation="create", name="Ambient Drone", persona="generative", description="slow detuned drone") vcv_patch(operation="validate", patch_id="ambient-drone") vcv_patch(operation="list", persona="generative")

Inputs: operation (required), name, path, limit, +7 more. Returns: object

Tool Schema Changelog

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

Loading tool schema changelog…

    TDQS

    C2.8/5.0

    Scored across 7 tools

    Disambiguation4/5

    Most tools have distinct purposes, but the vcv_* portmanteau tools (vcv_catalog, vcv_live, vcv_patch, vcv_agentic_workflow) could cause some confusion as they share a prefix and bundle multiple operations. However, descriptions clarify their domains.

    Naming Consistency3/5

    Naming conventions are mixed: snake_case for hub_status and show_* tools, but vcv_* prefix with underscores. The pattern is not uniform, though the vcv_ prefix provides some consistency for the main tools.

    Tool Count5/5

    Seven tools is well-scoped for a VCV Rack assistant. Each tool covers a distinct area (system status, catalog, patches, live performance, generative workflow), and none feel extraneous.

    Completeness4/5

    The tool surface covers core operations: system monitoring, catalog browsing/search/installation, patch management (CRUD), a generative workflow, and live performance. Minor gaps like detailed module parameter control are acceptable for the scope.

    Maintenance

    ActivityActive
    ResponsivenessOutdated data

    Related MCP Connectors

    Related MCP Servers