Skip to main content
Glama
README.md
# MCP Yandex Voice — голосовые ответы в Cursor

MCP-сервер для Cursor: по сообщению из чата получает ответ от **Yandex GPT** (AI Studio) и озвучивает его через **Yandex SpeechKit TTS**. В чате можно вызывать инструмент и получать ответ текстом и аудио.

## Что нужно

- Доступ к [Yandex Cloud AI Studio](https://yandex.cloud/en/services/ai-studio) (Yandex GPT).
- Включённый [SpeechKit](https://cloud.yandex.com/en/docs/speechkit/) (TTS) в том же каталоге (folder).
- API-ключ сервисного аккаунта с ролями в каталоге:
  - `ai.languageModels.user` (Yandex GPT)
  - `ai.speechkit-tts.user` (SpeechKit TTS)

## Настройка доступа к Yandex Cloud

**Подробная инструкция:** [docs/YANDEX-CLOUD-SETUP.md](docs/YANDEX-CLOUD-SETUP.md)

Включает:

- Регистрацию и создание каталога
- Включение AI Studio и SpeechKit
- Создание сервисного аккаунта и добавление ролей в каталоге (`ai.languageModels.user`, `ai.speechkit-tts.user`)
- Создание API-ключа (через консоль или YC CLI)
- Проверку доступа через curl
- Разбор частых ошибок

## Установка

```bash
cd mcp-yandex-voice
npm install
npm run build
```

## Переменные окружения

Скопируйте `.env.example` в `.env` и заполните:

| Переменная | Обязательно | Описание |
|------------|-------------|----------|
| `YANDEX_API_KEY` или `YC_API_KEY` | да | API-ключ сервисного аккаунта |
| `YANDEX_FOLDER_ID` или `YC_FOLDER_ID` | да | ID каталога в Yandex Cloud |
| `YANDEX_MODEL` | нет | Модель (по умолчанию `yandexgpt-lite`) |
| `YANDEX_TTS_VOICE` | нет | Голос TTS (по умолчанию `alena`) |
| `YANDEX_TTS_LANG` | нет | Язык (по умолчанию `ru-RU`) |
| `YANDEX_TTS_FORMAT` | нет | Формат аудио (по умолчанию `oggopus`) |
| `YANDEX_TTS_SPEED` | нет | Скорость речи: 0.1–3.0 (по умолчанию 1.0). 1.2–1.5 — быстрее |
| `YANDEX_GPT_MAX_TOKENS` | нет | Макс. токенов ответа GPT (по умолчанию 350). Меньше — быстрее ответ |

## Подключение в Cursor

В корне репозитория уже есть конфиг **`.cursor/mcp.json`**. Подставьте в нём свои `YANDEX_API_KEY` и `YANDEX_FOLDER_ID` в блоке `env` для сервера `yandex-voice`, затем перезапустите Cursor.

Либо настройте вручную:

1. Откройте **Cursor Settings → MCP** (или конфиг MCP вручную).
2. Добавьте сервер, например в `~/.cursor/mcp.json` или в настройках проекта:

```json
{
  "mcpServers": {
    "yandex-voice": {
      "command": "node",
      "args": ["/ABSOLUTE/PATH/TO/leetcode/mcp-yandex-voice/dist/index.js"],
      "env": {
        "YANDEX_API_KEY": "ваш_api_ключ",
        "YANDEX_FOLDER_ID": "ваш_folder_id"
      }
    }
  }
}
```

Замените `ABSOLUTE/PATH/TO/leetcode` на полный путь к репозиторию. После `npm run build` исполняемый файл — `dist/index.js`.

Вариант с `tsx` (без сборки):

```json
{
  "mcpServers": {
    "yandex-voice": {
      "command": "npx",
      "args": ["tsx", "/ABSOLUTE/PATH/TO/leetcode/mcp-yandex-voice/src/index.ts"],
      "env": {
        "YANDEX_API_KEY": "ваш_api_ключ",
        "YANDEX_FOLDER_ID": "ваш_folder_id"
      }
    }
  }
}
```

3. Перезапустите Cursor или перезагрузите MCP.

## Инструмент `speak_response`

- **Название:** Голосовой ответ (speak_response)
- **Вход:**
  - `message` — вопрос пользователя; Yandex GPT генерирует ответ и озвучивает.
  - `textToSummarize` — текст ответа ассистента; Yandex GPT кратко пересказывает (2–3 предложения) и озвучивает. Используй для озвучивания своих ответов.
  - `systemPrompt` (опционально) — системный промпт (роль, стиль). При `textToSummarize` не используется.
- **Выход:** текст и аудио (base64). Cursor может отобразить текст и воспроизвести аудио.

Нужен один из `message` или `textToSummarize`. Режим `textToSummarize` — для краткого озвучивания длинных ответов Cursor.

## Инструмент `playback_control`

- **Название:** Остановка / пауза воспроизведения (playback_control)
- **Вход:** `action` — `"stop"` или `"pause"` (остановить текущее воспроизведение).
- **Выход:** сообщение об успехе или подсказка.

Работает только на macOS. Останавливает воспроизведение, запущенное через **afplay** (ответы Yandex Voice в формате WAV). Если воспроизведение идёт через приложение по умолчанию (OGG), остановите его вручную. В чате можно написать: «Останови воспроизведение» или «Вызови playback_control с action stop».

### Кнопки управления воспроизведением (пауза/стоп)

Пока MCP-сервер запущен (Cursor с подключённым yandex-voice), на macOS поднимается локальная панель с кнопками:

- Открой в браузере: **http://127.0.0.1:3846**
- Кнопки **Стоп** и **Пауза** останавливают текущее воспроизведение ответа Yandex Voice (работает только для afplay/WAV).

Держи вкладку открытой или добавь в закладки — во время озвучки ответа можно нажать «Стоп» прямо из браузера, без запроса в чате.

## Локальная проверка

Запуск через stdio (для отладки или MCP Inspector):

```bash
export YANDEX_API_KEY=... YANDEX_FOLDER_ID=...
npm run dev
# или после сборки:
npm start
```

Сервер общается по stdin/stdout; для теста можно использовать [MCP Inspector](https://modelcontextprotocol.io/legacy/tools/inspector):  
`npx @modelcontextprotocol/inspector node dist/index.js`

## Ускорение ответов

Чтобы диктор отвечал быстрее:

1. **`YANDEX_TTS_SPEED=1.3`** — ускорить речь (1.2–1.5 — комфортно, до 3.0 — максимально быстро).
2. **`YANDEX_GPT_MAX_TOKENS=250`** — короче ответы GPT → меньше времени на генерацию и синтез.

Чанки TTS обрабатываются параллельно, что ускоряет длинные ответы.

## Ограничения

- SpeechKit TTS: размер одного запроса ограничен (в коде текст разбивается на чанки по 500 символов).
- Для длинных ответов генерация и синтез могут занять несколько секунд.

## Лицензия

MIT.

TDQS

A4/5.0

Scored across 4 tools

Disambiguation5/5

Each tool has a distinct purpose: health monitoring, playback control, sound playback, and TTS with GPT. No overlapping functionalities.

Naming Consistency4/5

Tool names mostly follow a verb_noun pattern (play_sound, speak_response) with some compound nouns (health_check, playback_control). Consistent snake_case but minor variation in structure.

Tool Count4/5

4 tools is a reasonable scope for a voice interaction server, covering health, playback control, sound playback, and speech response. Slightly thin but not undermanned.

Completeness4/5

Core voice interaction workflows are covered: health check, playback control, sound playback, and TTS with GPT context. Minor gaps like volume control or direct TTS are acceptable for this specific focus.

Maintenance

ActivityInactive
ResponsivenessNo recent community issues