mcp-svstudio
Synthesizer V Studio 2 MCP Server (mcp-svstudio)
Промышленный сервер Model Context Protocol (MCP) для Dreamtonics Synthesizer V Studio 2 Pro, позволяющий агентам генеративного ИИ и LLM безопасно, структурно и эффективно управлять нотами, текстами, фонемами, вокальными атрибутами, параметрами и транспортом воспроизведения через официальный Dreamtonics Scripting API.
Обзор архитектуры
Synthesizer V Studio 2 Pro выполняет скрипты во встроенной среде Lua 5.4 / Duktape JS без внешних сетевых сокетов. Для достижения высокой производительности, низкой задержки и нулевых зависимостей от C-библиотек этот MCP-сервер использует протокол атомарной файловой почтовой ячейки (Atomic File-Mailbox IPC):
+--------------------------------------+
| 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-протокола
Атомарные переименования файлов: запись в
<id>.tmpи атомарное переименование в<id>.req/<id>.resдля предотвращения гонок и частичного чтения файлов.Уникальные идентификаторы запросов: гарантируют сопоставление запрос-ответ даже при быстрых последовательных командах.
Мгновенная проверка активности (heartbeat): Lua-скрипт обновляет
heartbeat.jsonкаждые 500 мс. MCP-сервер проверяет свежесть heartbeat и мгновенно сообщает о состоянии офлайн (<50 мс) вместо зависания по таймауту.Автоматическая сборка мусора: автоматически очищает устаревшие временные файлы старше 60 секунд при запуске и во время опроса.
Related MCP server: aviutl2-mcp
Установка и настройка
Предварительные требования
Node.js (v18 или выше; протестировано на v22 и v26)
Synthesizer V Studio Pro (версия 2.0 или 2.1+)
1. Сборка MCP-сервера
git clone https://github.com/shotarokawade/SV-MCP.git
cd SV-MCP
npm install
npm run build2. Установка Lua-скриптов в Synthesizer V Studio
Запустите автоматический установщик:
npm run install-scriptsИли вручную скопируйте файлы из sv-scripts/ в папку скриптов Synthesizer V Studio:
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. Запуск обработчика сервера в Synthesizer V Studio
Запустите Synthesizer V Studio 2 Pro.
Откройте или создайте проект с вокальными дорожками.
В верхней строке меню выберите: Scripts > MCP > Start MCP Server Request Handler
Фоновый обработчик теперь запущен и отвечает. (Чтобы остановить его, выберите Scripts > MCP > Stop MCP Server Request Handler).
Конфигурация MCP-клиента
Antigravity (~/.gemini/config/mcp_config.json или конфигурация проекта)
{
"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-инструментов
Имя инструмента | Описание |
| Возвращает статус подключения, временную метку heartbeat скрипта и информацию о текущем проекте. |
| Получает имя файла проекта, длительность (в бликах), количество дорожек, групп, метки темпа и тактов. |
| Перечисляет дорожки с именами, количеством ссылок на группы, цветами отображения и настройками микшера (усиление, панорама, мьют, соло). |
| Перечисляет все группы нот в библиотеке проекта с UUID и количеством нот. |
| Получает ноты для дорожки и группы (индексы с нуля), включая высоту, начало, длительность, текст, фонемы и атрибуты нот. |
| Ищет ноты по диапазону начала, диапазону высоты, подстроке/регулярному выражению текста или фонемам. |
| Добавляет одну или несколько нот в группу. Поддерживает |
| Обновляет существующие ноты по индексу или локатору ( |
| Удаляет ноты по индексам или локатору. Поддерживает |
| Получает заданные пользователем фонемы для ноты(т). |
| Напрямую задаёт формальные строки фонем, разделённые пробелами ( |
| Запрашивает результаты внутреннего движка текст-в-фонемы и вычисленные атрибуты ( |
| Получает атрибуты нот (detune, languageOverride, phonesetOverride, musicalType, rapAccent, тайминг/сила по фонемам). |
| Изменяет атрибуты нот и пофонемные атрибуты ( |
| Получает параметры голоса на |
| Изменяет параметры голоса дорожки/группы и вокальные режимы. |
| Читает точки кривых автоматизации для параметров ( |
| Добавляет, заменяет или удаляет точки автоматизации с проверкой диапазонов. |
| Запускает воспроизведение. |
| Приостанавливает воспроизведение без сброса позиции. |
| Останавливает воспроизведение и сбрасывает позицию на начало. |
| Перемещает позицию воспроизведения в указанное количество секунд. |
| Читает позицию и статус ( |
| Устанавливает область циклического воспроизведения между |
| Выполняет несколько операций атомарно в одной транзакции отмены с предварительной проверкой и предпросмотром изменений. |
Манипуляция фонемами и исправление немецких многосложных текстов
Проблема
При импорте MusicXML из MuseScore в Synthesizer V Studio немецкие многосложные слова, разделённые между нотами (например, schö- и -ne) с syllabic=begin/end, часто объединяются с сырым текстом фонем в тексте песни:
Предполагаемая нота 1:
.sh erПредполагаемая нота 2:
.n axРезультат в SynthV, если поместить в текст:
.sh er.n ax(вызывает предупреждения о произношении и фонетические ошибки).
Решение: прямое внедрение фонем через MCP
С помощью этого MCP-сервера LLM задаёт текст и фонемы напрямую через официальные API:
{
"trackIndex": 0,
"groupIndex": 0,
"assignments": [
{ "noteIndex": 0, "phonemes": ".sh er" },
{ "noteIndex": 1, "phonemes": ".n ax" }
]
}Проверка произношения в обе стороны
Вызовите
set_phonemes, чтобы применить целевые фонемы.Вызовите
get_computed_phonemes, чтобы повторно запросить внутренний синтезирующий движок Synthesizer V.Сравните вычисленные фонемы с ожидаемым произношением для проверки точного совпадения.
Конвейер интеграции MuseScore MCP
[ 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 pronunciationГарантии безопасности, пробного запуска и отката
dry_run: true: Все инструменты изменения поддерживаютdry_run: true. Сервер возвращает прогнозируемые изменения и diff без изменения состояния проекта.Одношаговая отмена в приложении (
project.newUndoRecord()): Каждая изменяющая операция MCP регистрирует запись отмены проекта. Пользователь может нажатьCmd+Z/Ctrl+Zвнутри Synthesizer V Studio, чтобы мгновенно отменить всю операцию.Откат транзакции в пакетном режиме: Если во время
batch_editвозникает ошибка, скрипт сохраняет состояние до изменения и автоматически откатывает изменённые элементы перед возвратом ошибки.Проверка границ и диапазонов:
MIDI-высота:
0-127Громкость: от
-48дБ до+12дБНапряжение / Дыхание / Гендер: от
-1.0до+1.0Озвучка: от
0.0до+1.0Отклонение высоты: от
-1200до+1200центовВокальный режим: от
0до150
Ссылки и соответствие официальным API
Официальное руководство по скриптингу: https://resource.dreamtonics.com/scripting/index.html
Ключевые используемые официальные API:
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()
Лицензия
Лицензия MIT.
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