mcp-svstudio
Click on "Install 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., "@mcp-svstudioChange the first note's lyric in track 1 to 'hello'"
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.
Synthesizer V Studio 2 MCP Server (mcp-svstudio)
A production-grade Model Context Protocol (MCP) server for Dreamtonics Synthesizer V Studio 2 Pro, enabling Generative AI and LLM agents to safely, structurally, and effectively manipulate notes, lyrics, phonemes, vocal attributes, parameters, and playback transport via the official Dreamtonics Scripting API.
Architecture Overview
Synthesizer V Studio 2 Pro executes scripts within an embedded Lua 5.4 / Duktape JS environment without external network sockets. To achieve high performance, low latency, and zero C-library dependencies, this MCP server uses an Atomic File-Mailbox IPC Protocol:
+--------------------------------------+
| LLM / MCP Client |
| (Antigravity / Claude / Cursor) |
+------------------+-------------------+
| JSON-RPC over Stdio
v
+--------------------------------------+
| Node.js MCP Server |
| - Tool Schema & Validation (Zod) |
| - Stable Note Locator Resolver |
| - Safe Diff & Dry Run Engine |
| - Mailbox IPC Client |
+------------------+-------------------+
| Atomic Mailbox IPC (.req / .res)
| Live Heartbeat Monitor (heartbeat.json)
v
+--------------------------------------+
| Synthesizer V Studio 2 Pro (Lua 5.4)|
| `StartMCPServerRequestHandler.lua` |
| - Non-blocking SV:setTimeout loop |
| - Dreamtonics Official Scripting API|
| - Automatic Snapshot Rollback & Undo|
+--------------------------------------+IPC Protocol Highlights
Atomic File Renames: Writes to
<id>.tmpand atomically renames to<id>.req/<id>.resto prevent race conditions and partial file reads.Unique Request IDs: Guarantees request-response pairing even during rapid sequential commands.
Instant Heartbeat Liveness: The Lua script updates
heartbeat.jsonevery 500ms. The MCP server checks heartbeat freshness and instantly reports offline state (<50ms) instead of hanging on timeouts.Automatic Garbage Collection: Auto-cleans stale temporary files older than 60 seconds on startup and during polling.
Related MCP server: aviutl2-mcp
Installation & Setup
Prerequisites
Node.js (v18 or higher; tested on v22 & v26)
Synthesizer V Studio Pro (Version 2.0 or 2.1+)
1. Build the MCP Server
git clone https://github.com/shotarokawade/SV-MCP.git
cd SV-MCP
npm install
npm run build2. Install Lua Scripts to Synthesizer V Studio
Run the automated installer:
npm run install-scriptsOr manually copy the files in sv-scripts/ to your Synthesizer V Studio scripts folder:
macOS:
~/Library/Application Support/Dreamtonics/Synthesizer V Studio 2/scripts/MCP/Windows:
%APPDATA%\Dreamtonics\Synthesizer V Studio 2\scripts\MCP\Linux:
~/.local/share/Dreamtonics/Synthesizer V Studio 2/scripts/MCP/
3. Start the Server Handler in Synthesizer V Studio
Launch Synthesizer V Studio 2 Pro.
Open or create a project with vocal tracks.
In the top menu bar, select: Scripts > MCP > Start MCP Server Request Handler
The background handler is now running and responsive. (To stop it, select Scripts > MCP > Stop MCP Server Request Handler).
MCP Client Configuration
Antigravity (~/.gemini/config/mcp_config.json or project configuration)
{
"mcpServers": {
"synthv": {
"command": "node",
"args": ["/absolute/path/to/SV-MCP/build/index.js"],
"env": {
"MCP_SVSTUDIO_IPC_DIR": "/absolute/path/to/.mcp-svstudio/ipc"
}
}
}
}Claude Desktop (claude_desktop_config.json)
{
"mcpServers": {
"synthv": {
"command": "node",
"args": ["/path/to/SV-MCP/build/index.js"]
}
}
}MCP Tool Reference
Tool Name | Description |
| Returns connection status, script heartbeat timestamp, and current project info. |
| Retrieves project filename, duration (in blicks), track count, group count, tempo & measure marks. |
| Lists tracks with names, group reference counts, display colors, and mixer settings (gain, pan, mute, solo). |
| Lists all note groups in the project library with UUIDs and note counts. |
| Retrieves notes for a track and group (0-based indices) including pitch, onset, duration, lyrics, phonemes, and note attributes. |
| Searches notes matching onset range, pitch range, lyrics substring/regex, or phonemes. |
| Adds one or more notes to a group. Supports |
| Updates existing notes by index or locator ( |
| Deletes notes by indices or locator. Supports |
| Retrieves user-specified phonemes for note(s). |
| Directly sets formal space-separated phoneme strings ( |
| Queries the internal text-to-phoneme engine results and computed attributes ( |
| Gets note attributes (detune, languageOverride, phonesetOverride, musicalType, rapAccent, per-phoneme timing/strength). |
| Modifies note attributes and per-phoneme attributes ( |
| Gets voice parameters on |
| Modifies track/group voice parameters and vocal modes. |
| Reads automation curve points for parameters ( |
| Adds, replaces, or removes automation points with range validation. |
| Starts playback transport. |
| Pauses playback without resetting playhead. |
| Stops playback and resets playhead to start position. |
| Moves playhead to position in seconds. |
| Reads playhead position and status ( |
| Sets loop playback region between |
| Executes multiple operations atomically in a single undo transaction with pre-validation and diff preview. |
Phoneme Manipulation & German Multi-syllabic Lyrics Fix
The Problem
When importing MusicXML from MuseScore into Synthesizer V Studio, German multi-syllabic words split across notes (e.g. schö- and -ne) with syllabic=begin/end often get merged with raw phoneme text in lyrics:
Intended Note 1:
.sh erIntended Note 2:
.n axResult in SynthV if placed in lyrics:
.sh er.n ax(causing pronunciation warnings and phonetic errors).
The Solution: Direct Phoneme Injection via MCP
Using this MCP server, the LLM sets lyrics and phonemes directly via official APIs:
{
"trackIndex": 0,
"groupIndex": 0,
"assignments": [
{ "noteIndex": 0, "phonemes": ".sh er" },
{ "noteIndex": 1, "phonemes": ".n ax" }
]
}Round-Trip Pronunciation Verification
Call
set_phonemesto apply the target phonemes.Call
get_computed_phonemesto re-query Synthesizer V's internal synthesizer engine.Compare the computed phonemes against expected pronunciation to verify exact match.
MuseScore MCP Integration Pipeline
[ MuseScore MCP ]
│ 1. Extract note pitches, onset blicks, measure positions, and lyric syllables
▼
[ LLM Agent ]
│ 2. Perform German grapheme-to-phoneme (G2P) conversion to Synthesizer V phonemes
│ (e.g., "Freude" -> [".f r oy", "d ax"])
▼
[ Synthesizer V MCP ]
│ 3. `find_notes` or `get_notes` matching onset and measure range
│ 4. `batch_edit` with `dry_run: true` to inspect diff
│ 5. `batch_edit` with `dry_run: false` to apply notes and `set_phonemes`
│ 6. `get_computed_phonemes` to verify synthesis pronunciationSafety, Dry Run, and Rollback Guarantees
dry_run: true: All mutation tools supportdry_run: true. The server returns the predicted changes and diff without modifying project state.One-Step In-App Undo (
project.newUndoRecord()): Every mutating MCP operation registers a project undo record. The user can pressCmd+Z/Ctrl+Zinside Synthesizer V Studio to instantly revert the entire operation.Transaction Rollback in Batch: If an error occurs during
batch_edit, the script captures the pre-mutation state and automatically rolls back modified items before returning the error.Boundary & Range Validation:
MIDI pitch:
0-127Loudness:
-48dB to+12dBTension / Breathiness / Gender:
-1.0to+1.0Voicing:
0.0to+1.0Pitch Delta:
-1200to+1200centsVocal Mode:
0to150
References & Official API Compliance
Official Scripting Manual: https://resource.dreamtonics.com/scripting/index.html
Key Official APIs Used:
Note.getPhonemes()/Note.setPhonemes(phonemes)SV.getPhonemesForGroup(groupRef)SV.getComputedAttributesForGroup(groupRef)(SynthV 2.1.1+)Note.getAttributes()/Note.setAttributes(attributes)NoteGroupReference.getVoice()/NoteGroupReference.setVoice(voice)NoteGroup.getParameter(name)/AutomationPlaybackControl(play,pause,stop,seek,loop,getPlayhead)Project.newUndoRecord()
License
MIT License.
Maintenance
Resources
Unclaimed servers have limited discoverability.
Looking for Admin?
If you are the server author, to access and configure the admin panel.
Related MCP Servers
- AlicenseBqualityDmaintenanceMCP server for Synthesizer V AI Vocal Studio, which allows LLMs to create/edit vocal tracks e.g. adding lyrics to the melody.612Apache 2.0
- FlicenseAqualityBmaintenanceEnables LLMs to create, edit, and manage AviUtl2 video projects, with optional real-time control via a native bridge plugin.19
- FlicenseNot gradedqualityCmaintenanceControls OpenUtau (vocal synthesis software) from Claude Desktop, enabling project creation, editing, and live note manipulation via a bridge plugin.
- AlicenseBqualityBmaintenanceEnables coding agents to compose, tune, render, mix, and audit native VOCALOID3/4 projects from scratch, acting as a production bridge between intent and finished song.221MIT
Related MCP Connectors
Create and manage cinematic AI video renders through the Future Video Studio Agent API.
Build and run visual creative-production workflows from your AI agent.
Operate your Sapiens Sintéticos AI studio: generate image, article, voice, music and video.
Latest Blog Posts
- Who's Calling? MCP Hosts Are an Identity Blind Spot (And the Spec Knows It)By Om-Shree-0709 on .mcpAgent IdentityOAuth 2.1
- Your AI Chatbot Just Exposed Your CEO's Salary to an InternBy Om-Shree-0709 on .Agent IdentityMCP SecurityOAuth Delegation
- Why MCP Servers Need Execution Sandboxing (And Why Your Current Stack Isn't Enough)By Om-Shree-0709 on .Agentic AiPrompt InjectionWebAssembly
MCP directory API
We provide all the information about MCP servers via our MCP API.
curl -X GET 'https://glama.ai/api/mcp/v1/servers/shotarokawade/SV-MCP'
If you have feedback or need assistance with the MCP directory API, please join our Discord server