Initial commit: Suno MCP server with 24 tools, proxy support, and opencode skill
This commit is contained in:
@@ -0,0 +1,16 @@
|
||||
{
|
||||
"$schema": "https://opencode.ai/config.json",
|
||||
"mcp": {
|
||||
"suno": {
|
||||
"type": "local",
|
||||
"command": [
|
||||
"node",
|
||||
"/home/user/moder/mcp/suno-server/dist/index.js"
|
||||
],
|
||||
"env": {
|
||||
"SUNO_API_KEY": "YOUR_SUNO_API_KEY_HERE"
|
||||
},
|
||||
"enabled": true
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,186 @@
|
||||
---
|
||||
name: suno
|
||||
description: Используй когда пользователь просит создать музыку, текст песни, кавер, ремикс, мэшап, видео, или работать с Suno AI Music API. Покрывает генерацию музыки, тексты, разделение вокала/стемов, Persona, стили и конвертацию.
|
||||
---
|
||||
|
||||
# Suno Music API Skill
|
||||
|
||||
Этот skill описывает MCP-сервер для работы с [Suno API](https://sunoapi.org) через opencode.
|
||||
|
||||
## Лимиты и цены
|
||||
|
||||
- **Rate limit**: 20 запросов на 10 секунд.
|
||||
- **Стоимость кредита**: $0.005 USD.
|
||||
- **Кредиты не истекают**.
|
||||
- Сгенерированные файлы хранятся **15 дней**.
|
||||
|
||||
## Прокси
|
||||
|
||||
Если сервис недоступен из вашей сети, MCP сервер поддерживает прокси через переменные окружения (в порядке приоритета):
|
||||
|
||||
```
|
||||
SUNO_HTTP_PROXY=http://user:pass@proxy:8080
|
||||
HTTPS_PROXY=http://proxy:8080
|
||||
HTTP_PROXY=http://proxy:8080
|
||||
```
|
||||
|
||||
## Основные сценарии
|
||||
|
||||
### 1. Сгенерировать песню с нуля
|
||||
|
||||
```
|
||||
suno_generate_music
|
||||
prompt: "Мелодичный инди-фолк с акустической гитарой, мягким вокалом, ностальгическое настроение"
|
||||
customMode: false
|
||||
instrumental: false
|
||||
model: "V4_5ALL"
|
||||
```
|
||||
|
||||
Вернёт `taskId`. Затем нужно подождать и вызвать:
|
||||
|
||||
```
|
||||
suno_get_task_status
|
||||
taskId: "..."
|
||||
```
|
||||
|
||||
Результат: 2 трека с `audio_url`, `title`, `tags`, `duration`, `prompt`.
|
||||
|
||||
### 2. Сгенерировать песню в кастомном режиме
|
||||
|
||||
```
|
||||
suno_generate_music
|
||||
prompt: "[Verse] Ночной город, огни витрин..."
|
||||
customMode: true
|
||||
instrumental: false
|
||||
style: "Synthwave, cinematic, 80s"
|
||||
title: "Neon Rain"
|
||||
model: "V4_5"
|
||||
```
|
||||
|
||||
В `customMode: true` поля `style` и `title` обязательны. Если `instrumental: false` — ещё и `prompt` (он станет точным текстом песни).
|
||||
|
||||
### 3. Получить текст песни
|
||||
|
||||
```
|
||||
suno_generate_lyrics
|
||||
prompt: "Песня о путешествии, вдохновляющая, indie pop"
|
||||
```
|
||||
|
||||
Полученный текст можно передать в `suno_generate_music(prompt=текст, customMode=true)`.
|
||||
|
||||
### 4. Разделить вокал и музыку
|
||||
|
||||
```
|
||||
suno_separate_vocals
|
||||
taskId: "<taskId генерации>"
|
||||
audioId: "<id трека>"
|
||||
```
|
||||
|
||||
Для продвинутого разделения по инструментам:
|
||||
|
||||
```
|
||||
suno_separate_stems
|
||||
taskId: "<taskId>"
|
||||
audioId: "<id трека>"
|
||||
```
|
||||
|
||||
### 5. Сделать кавер существующего аудио
|
||||
|
||||
```
|
||||
suno_upload_and_cover
|
||||
uploadUrl: "https://example.com/my-song.mp3"
|
||||
customMode: true
|
||||
instrumental: false
|
||||
style: "Jazz"
|
||||
title: "Jazz Version"
|
||||
prompt: "[Verse] Smooth jazz arrangement..."
|
||||
model: "V4_5ALL"
|
||||
```
|
||||
|
||||
### 6. Создать персону из трека
|
||||
|
||||
```
|
||||
suno_generate_persona
|
||||
taskId: "<taskId>"
|
||||
audioId: "<id трека>"
|
||||
```
|
||||
|
||||
Бесплатно. Возвращает `personaId`, который потом можно использовать в `suno_generate_music` (`personaId` + `personaModel: style_persona`) для единого стиля.
|
||||
|
||||
### 7. Узнать промпт по готовому треку
|
||||
|
||||
```
|
||||
suno_get_task_status
|
||||
taskId: "<taskId генерации>"
|
||||
```
|
||||
|
||||
В ответе будут поля `prompt`, `title`, `tags` для каждого трека.
|
||||
|
||||
## Полный список инструментов
|
||||
|
||||
| Инструмент | Назначение | Кредиты |
|
||||
|---|---|:---:|
|
||||
| `suno_generate_music` | Генерация музыки | 12 |
|
||||
| `suno_generate_lyrics` | Генерация текста | 0.4 |
|
||||
| `suno_generate_sounds` | Звуки/амбиенты/лупы | 2.5 |
|
||||
| `suno_extend_music` | Продлить трек | 12 |
|
||||
| `suno_replace_section` | Заменить фрагмент трека | 5 |
|
||||
| `suno_add_vocals` | Добавить вокал на инструментал | 12 |
|
||||
| `suno_add_instrumental` | Добавить инструментал к вокалу | 12 |
|
||||
| `suno_upload_and_cover` | Загрузить аудио и сделать кавер | 12 |
|
||||
| `suno_upload_and_extend` | Загрузить аудио и продлить | 12 |
|
||||
| `suno_generate_mashup` | Мэшап из двух аудио | 12 |
|
||||
| `suno_separate_vocals` | Вокал + минус | 10 |
|
||||
| `suno_separate_stems` | Разделение по инструментам | 20 |
|
||||
| `suno_create_video` | Видео из трека | 2 |
|
||||
| `suno_create_cover` | Обложка трека | 0 |
|
||||
| `suno_convert_to_wav` | Конвертация в WAV | 0.4 |
|
||||
| `suno_boost_style` | Улучшить описание стиля | 0.4 |
|
||||
| `suno_generate_persona` | Создать персону из трека | 0 |
|
||||
| `suno_get_task_status` | Статус и метаданные трека | 0 |
|
||||
| `suno_get_timestamped_lyrics` | Текст с таймкодами | 0.5 |
|
||||
| `suno_get_lyrics_details` | Детали генерации текста | 0 |
|
||||
| `suno_get_wav_details` | Детали конвертации WAV | 0 |
|
||||
| `suno_get_vocal_separation_details` | Детали разделения | 0 |
|
||||
| `suno_get_video_details` | Детали видео | 0 |
|
||||
| `suno_get_credits` | Остаток кредитов | 0 |
|
||||
|
||||
## Выбор модели
|
||||
|
||||
| Модель | Длина | Когда использовать |
|
||||
|---|---|---|
|
||||
| `V4` | до 4 мин | Лучшее качество звука |
|
||||
| `V4_5` | до 8 мин | Умные промпты, быстрее |
|
||||
| `V4_5PLUS` | до 8 мин | Более насыщенный звук |
|
||||
| `V4_5ALL` | до 8 мин | Лучшая структура песни |
|
||||
| `V5` | до 8 мин | Высокая музыкальность, скорость |
|
||||
| `V5_5` | до 8 мин | Персонализированные голоса |
|
||||
|
||||
## Лимиты символов в `customMode`
|
||||
|
||||
| Поле | V4 | V4_5 / V4_5PLUS / V4_5ALL / V5 / V5_5 |
|
||||
|---|---|---|
|
||||
| `prompt` | 3000 | 5000 |
|
||||
| `style` | 200 | 1000 |
|
||||
| `title` | 80 | 100 |
|
||||
|
||||
В `customMode: false` только `prompt`, максимум 500 символов.
|
||||
|
||||
## Рекомендации по промптам
|
||||
|
||||
- Опиши жанр, настроение, инструменты, темп, энергию.
|
||||
- Для вокальных треков в `customMode` пиши текст в формате `[Verse] ... [Chorus] ...`.
|
||||
- Избегай противоречивых описаний.
|
||||
- Для повторяемого стиля используй `suno_generate_persona`.
|
||||
|
||||
## Обработка ошибок
|
||||
|
||||
| Код | Причина |
|
||||
|---|---|
|
||||
| 400 | Неверные параметры |
|
||||
| 401 | Неверный API ключ |
|
||||
| 429 | Недостаточно кредитов |
|
||||
| 430 | Слишком частые запросы |
|
||||
| 455 | Технические работы |
|
||||
|
||||
Если async-задача не завершилась за 15 минут, сервер вернёт таймаут — используй `suno_get_task_status` позже.
|
||||
Reference in New Issue
Block a user