Skip to main content
Glama
README.md
# Video Pipeline MCP

Локальный MCP-сервер для управления видеопайплайном. Создает файловую систему и Excel-структуры из гибких конфигурационных шаблонов. Предназначен для безопасного удаленного управления через веб-интерфейс (Studio) или AI-клиентов.

**Возможности:**
- Создание файлов и Excel-книг по шаблонам (ручное и автоматическое).
- Генерация ID и расчет метрик (личные и конкурентные).
- Расчет уникальности контента по ID видео-компонентов (сценарии, персонажи, фоны, склейки).
- Все формулы и правила настраиваются через конфигурацию или создаются с нуля.
- Финальная сборка видео через FFmpeg.

## Структура проекта

```text
video_pipeline_mcp/
├── server.py              точка входа: периметр запроса, JSON-RPC, туннель, хот-релоад config
├── pyproject.toml         сборка и зависимости (PEP 621) — единственный файл зависимостей
├── install.sh · run.sh    установка (.venv + бинарь туннеля) · запуск (--tunnel, --stop)
│
├── config/                декларации поведения (не код)
│   ├── server_reactions.yaml   реестр реакций: коды → класс + recovery
│   ├── firewall.yaml           правила файрвола
│   ├── observability.yaml      корни журналов и след вызовов
│   ├── transport.yaml          бюджет ответа и разрешённые Origin
│   ├── tunnel.yaml             конфиг туннеля (машинный, gitignored; токен — в среде)
│   ├── db/                     дампы таблиц базы — источник правды в git (13 конфигурационных таблиц)
│   └── templates/              шаблоны workspace/ (6) и схемы таблиц tables/
│
├── core/                  ядро (бизнес-логика)
│   ├── db.py              дверь базы: сборка из дампа, выгрузка, запрос — только чтение (Э2)
│   ├── contracts/         Pydantic: ToolResult, ErrorDetail, Fact, TaskStatus
│   ├── engine/            generic-движок + template_engine
│   ├── firewall/          файрвол + rules/ (rate_limit, injection, ip_blocklist, anomaly)
│   ├── state/             read.json / write.json / session log
│   ├── ids/               генерация ID + link_registry
│   ├── tables/ · excel/   слой таблиц и Excel-книг
│   ├── search/            поиск по ФС и таблицам
│   ├── transport/         туннель к Claude (transport + tunnel)
│   ├── runner/            инференс в отдельном процессе: сервис + супервизор
│   ├── providers/         адаптеры: stt/ · tts/ · img/ · ffmpeg/ (медиа-слой в разработке)
│   └── paths.py           containment путей в workspace/
│
├── tools/                 регистрация инструментов по группам (Bounded Context):
│                          filesystem · memory · tables · excel · structure ·
│                          uniqueness · media · montage · search · tasks
├── scripts/               утилиты: установщик и TUI, модели, сторожа, метрики
├── docker/                образ раннера: среда инференса изолирована в контейнере
├── studio/                веб-кабинет (TypeScript, Vite)
├── deploy/                заглушка туннельного входа
├── tests/                 quick/ (юнит) · scenarios/ · симуляции (virus, bot_army, cache_*)
├── docs/                  roadmap/ (план и спеки) · dev/ (gitignored)
├── .github/               CI: восемь джоб гейта + dependabot
└── workspace/             рабочая область данных, создаётся при первом старте
```

## Установка

```bash
./install.sh       # установка
```

## Запуск

```bash
./run.sh           # запуск
./run.sh --stop    # остановка
```

## Получить ключ

Сервер сам создаёт `.env` (рядом с `server.py`) и печатает ключ **один раз** при первом
старте — сохрани его сразу: хранится только хэш, показать повторно неоткуда.

```bash
./run.sh
```

Перевыпустить:

```bash
python3 server.py --rotate-key
```

## Проверить ключ

```bash
curl -s -o /dev/null -w "%{http_code}\n" -X POST http://127.0.0.1:8080/mcp \
  -H "Content-Type: application/json" \
  -H "authorization: Bearer <ключ>" \
  -d '{"jsonrpc":"2.0","id":1,"method":"initialize","params":{}}'
```

`200` — ключ принят, `401` — нет.

## Лицензия

PolyForm Noncommercial 1.0.0 (файл `LICENSE`): source-available, некоммерческое использование.