Skip to main content
Glama
README.md
# CapyAgent Meet MCP

MCP-сервер, который заходит в онлайн-встречу, молча её записывает и расшифровывает запись локально. Поддерживает Яндекс Телемост (`telemost.yandex.ru` и `telemost.360.yandex.ru`), Google Meet, Zoom и Webex.

Бот входит гостем с выключенными микрофоном и камерой. На случай, если интерфейс встречи их всё-таки включит, вместо настоящих устройств ему подсунуты тишина и чёрный кадр. Расшифровка делается на своей машине через faster-whisper, наружу ничего не уходит, ключи внешних сервисов не нужны.

## Инструменты

| Инструмент | Что делает |
|---|---|
| `join_meeting(url, display_name, platform="auto")` | Заходит во встречу и начинает запись, возвращает id. Вход подтверждается только тогда, когда файл записи появился и растёт. |
| `meeting_status(id)` | Показывает, в звонке ли бот, растёт ли файл, есть ли звук в последних 20 секундах, сколько минут записано и как идёт расшифровка. |
| `leave_meeting(id)` | Выходит из встречи и запускает расшифровку в фоне. |
| `get_transcript(id, offset=0)` | Отдаёт текст с таймкодами `[ЧЧ:ММ:СС]` и путь к WAV. Длинный текст приходит частями. |
| `list_meetings(limit=10)` | Показывает последние записи. |
| `transcribe_recording(id)` | Запускает расшифровку заново, если она упала или процесс записи оборвался. |

Ни один вызов не висит всю встречу. Каждая запись идёт отдельным фоновым процессом со своим звуковым устройством и своим виртуальным экраном, поэтому параллельные записи не смешиваются. Если по той же ссылке запись уже идёт, `join_meeting` вернёт её id, второго бота не будет.

Где есть systemd, каждая запись запускается в своём scope `capymeet-<id>.scope`. Поэтому перезапуск агента или MCP-сервера идущую запись не обрывает, а после перезапуска `meeting_status` видит её по-прежнему живой. Отключить такой запуск можно переменной `CAPY_MEET_NO_SCOPE=1`.

## Установка

Системные пакеты (Ubuntu или Debian):

```bash
apt-get install -y git pulseaudio xvfb ffmpeg
```

Нужен [uv](https://docs.astral.sh/uv/). Дальше:

```bash
git clone https://github.com/smolnikov-k/capy-meet-mcp && cd capy-meet-mcp
uv sync --frozen --no-dev
.venv/bin/python -m playwright install --with-deps chromium
.venv/bin/capy-meet-doctor
```

`capy-meet-doctor` проверяет всё, что нужно для записи, и подсказывает, как исправить найденное. Нужна полная сборка Chromium: в headless-сборке нет звука, и запись выйдет тихой.

Модель расшифровки (`small`, около 500 МБ) скачивается при первой расшифровке.

## Подключение к MCP-клиенту

Сервер работает по stdio:

```bash
/path/to/capy-meet-mcp/.venv/bin/capy-meet-mcp
```

## Настройки (переменные окружения)

| Переменная | По умолчанию | Смысл |
|---|---|---|
| `CAPY_MEET_HOME` | `~/.capy-meet` | где лежат записи: `recordings/<id>/` |
| `CAPY_MEET_DISPLAY_NAME` | `Запись встречи` | имя бота во встрече, если не задано при вызове |
| `WHISPER_MODEL` | `small` | модель faster-whisper |
| `WHISPER_LANGUAGE` | не задан | язык расшифровки, без него определяется сам |
| `WHISPER_DEVICE`, `WHISPER_COMPUTE_TYPE` | `cpu`, `int8` | где и как считать |
| `MAX_MEETING_SECONDS` | `21600` | потолок длины записи |

## Что лежит в папке записи

`meta.json` и `state.json` описывают запрос и состояние записи, `audio.wav` это сама запись (16 кГц, моно), `transcript.txt` и `segments.json` содержат расшифровку, `engine.log`, `worker.log` и `ffmpeg.log` это журналы. Если войти не удалось, рядом появится снимок экрана `debug_failed_join.png`.

## Лицензия

MIT, см. `LICENSE`.

TDQS

A3.7/5.0

Scored across 6 tools

Disambiguation4/5

Each tool maps to a clear lifecycle action: joining, checking status, leaving, listing, and fetching transcripts. There is slight overlap between transcribe_recording and leave_meeting since both can trigger transcription, but the descriptions distinguish a normal finish from a retry after failure.

Naming Consistency4/5

Most tools follow a clear verb_noun pattern: join_meeting, leave_meeting, get_transcript, list_meetings, transcribe_recording. meeting_status breaks the pattern by using a noun phrase instead of an imperative verb, creating a minor inconsistency.

Tool Count5/5

Six tools is well-scoped for a meeting recording and transcription server. Each tool serves a necessary function without redundancy or bloat.

Completeness5/5

The toolset covers the full workflow: join a meeting, monitor recording status, leave and trigger transcription, retrieve transcripts, list past meetings, and re-transcribe failed recordings. There are no obvious dead ends for the stated purpose.

Maintenance

ActivityMaintained
ResponsivenessNo issues