# MCP: изображения и видео из чата

## LeinAPI Connect для Windows

В LeinAPI Connect 0.24 откройте настройки подключённого приложения и нажмите
«Подключить» в строке «MCP · изображения и видео». Поддерживаются Codex,
Claude Code (включая раздел Code в Desktop) и Antigravity. MCP использует текущий
ключ текстового подключения; новый ключ или регистрация не нужны. При замене
текстового ключа MCP автоматически использует новый. Ключ остаётся в защищённом
хранилище Windows и не записывается в конфигурацию MCP.

Обновите MCP в приложении или перезапустите его после настройки. Доступ к медиа,
срок действия и бюджет определяются тем же ключом: текстовый доступ не расширяет
его разрешения на изображения и видео. MCP можно отключить отдельно в Connect.

## Другие способы подключения

LeinAPI Media подключает к MCP-клиенту генерацию/редактирование изображений,
видео, каталог, задачи и файлы. Основное подключение — удалённый `/mcp` по
Streamable HTTP. Установка Python или исходников клиенту сайта не требуется.
Отдельная аудиогенерация не поддержана. Каталог описывает возможности, а не живую проверку.

## Подключение с сайта

В личном кабинете откройте раздел «MCP», чтобы скачать
Markdown-файл с инструкцией и ключом аккаунта. Прикрепите его к чату вместе с задачей. Файл подходит только для
ИИ с инструментом HTTP-запросов либо выполнения кода с сетевым доступом. Он сам
не устанавливает инструменты и не включает доступ к сети.

При создании выберите изображения, видео или оба формата. Срок доступа — от
1 часа до «Никогда»: доступны 1 час, 6 часов, день, 7 дней и 30 дней.
Лимит генераций — положительное целое число либо «Без ограничений (∞)».
Количество одновременных генераций задаётся отдельно (1–1000).
Повтор с тем же Idempotency-Key и тем же телом не расходует новую задачу.
Одна задача может содержать несколько изображений. Ключ можно отозвать в кабинете.

POST /api/console/keys/chat-file принимает media, minutes (целое от60 либо null
для бессрочного доступа), max_generation_tasks (положительное целое либо null
для неограниченного количества) и max_concurrent (целое1–1000).
По умолчанию: 30дней, без лимита количества, 1одновременная задача.
Ограничения применяются сервером. Старые ключи сохраняют ранее выбранный срок и лимит.
Доступны выбранные медиа-модели, собственные задачи этого ключа и их результаты.
Создание файла, настройки доступа, инструкции подключения приложений и skill находятся в разделе «MCP».

Откройте «Подключить ИИ» в меню сайта и выберите приложение. Для Cursor и локального
чата VS Code + Copilot показаны отдельные шаги. Настройки Cursor собираются в памяти
вкладки; введённый ключ не отправляется по сети и не сохраняется в браузерном хранилище.
VS Code запрашивает ключ в самом приложении. Готового подключения через настройки
обычных чатов ChatGPT/Claude в LeinAPI пока нет. Файл выше применим только там,
где конкретный чат действительно предоставляет подходящий сетевой инструмент.
Подключение: **https://leinapi.com/mcp**, транспорт **Streamable HTTP**.
Авторизация: `Authorization: Bearer YOUR_LEINAPI_KEY` в настройках клиента.
Ключ не передавайте в URL и не публикуйте. Для проверки вызовите initialize,
tools/list и list_models: тестовая генерация для установки не требуется.

Пример для клиентов с форматом `mcpServers`:

```json
{
  "mcpServers": {
    "leinapi": {
      "url": "https://leinapi.com/mcp",
      "headers": {"Authorization": "Bearer YOUR_LEINAPI_KEY"}
    }
  }
}
```

Сайт позволяет скачать настройки для https://leinapi.com/mcp. Замените YOUR_LEINAPI_KEY
в локальных настройках клиента или используйте его хранилище секретов. Форматы
настроек клиентов различаются. Требуется поддержка собственного Bearer-заголовка;
клиенты, требующие исключительно OAuth-вход, пока не поддерживаются.

Удалённый MCP предоставляет 12 инструментов: `list_models`, `get_model`, `get_pricing`, `get_balance`,
`generate_image`, `edit_image`, `generate_video`, `get_task`, `list_tasks`,
`cancel_task`, `get_file`, `read_file`. Для локального референса передайте содержимое файла как data URI
(data:<mime>;base64,...) прямо в options.image/video или массиве референсов.
Отдельная загрузка не нужна; HTTPS-ссылки и ранее полученные ID также поддерживаются.
Сервер не читает и не пишет локальные файлы компьютера клиента или сервера сайта.

После успеха вызовите `read_file` для каждого `result_file_ids`: PNG возвращается
как MCP image, MP4 — как встроенный бинарный ресурс. Показ/сохранение зависит от
возможностей клиента; размер MP4 не ограничен квотой хранилища. Если клиент
не умеет работать с таким ресурсом, результат доступен в кабинете «Задачи».
Приватные файлы не получают публичных ссылок.

Ключ проверяется на каждом запросе, включая initialize и tools/list; каждый
авторизованный запрос учитывается в RPM один раз. Сохраняются существующие
права аккаунта, ограничения моделей и лимиты генерации. Сессии MCP не сохраняются;
постоянный GET/SSE-поток не предоставляется (405). Задачи генерации сохраняются
независимо от соединения. Правила идемпотентности и опроса ниже общие для обоих вариантов.

[Скачать SKILL.md](/api/public/mcp-skill) можно без ключа. Поместите его в папку
`leinapi-media` каталога навыков клиента. Это необязательная инструкция для модели;
подключение MCP настраивается отдельно.

## Альтернатива: локальный stdio-пакет

Нужны Python 3.12+ и uv. Из каталога исходников LeinAPI:

```sh
uv sync --project integrations/mcp --frozen --no-dev
```

Это отдельный пакет, без установки зависимостей в backend. Он использует официальный
[Python MCP SDK, ветку 1.x](https://py.sdk.modelcontextprotocol.io/v1/), зафиксированную
lock-файлом. Исходники пакета пока не опубликованы в реестре пакетов.

В настройках MCP-клиента добавьте сервер с командой Python из нового окружения.
Пример для Windows и клиентов с форматом `mcpServers` (замените оба пути):

```json
{
  "mcpServers": {
    "leinapi-media": {
      "command": "C:/path/to/LeinAPI/integrations/mcp/.venv/Scripts/python.exe",
      "args": ["-m", "leinapi_mcp.server"],
      "env": {
        "LEINAPI_BASE_URL": "https://leinapi.com",
        "LEINAPI_MEDIA_DIR": "C:/path/to/leinapi-media"
      }
    }
  }
}
```

Для Linux/macOS команда — абсолютный путь
`/path/to/LeinAPI/integrations/mcp/.venv/bin/python`.
Клиенты с другим форматом конфигурации используют те же command, args и переменные.
Передайте `LEINAPI_API_KEY` из безопасного хранилища MCP-клиента в окружение
дочернего процесса. Если клиент не наследует окружение, задайте переменную в его
локальных настройках секретов. Ключ не нужно отправлять модели в сообщении.
Не включайте заполненную конфигурацию с ключом в репозиторий.

`LEINAPI_BASE_URL=https://leinapi.com` — адрес API без `/v1`.

## Инструменты локального stdio-пакета

| Инструмент | Назначение |
| --- | --- |
| `list_models`, `get_model` | Разрешённые модели и комбинации параметров |
| `generate_image` | Создать асинхронную задачу изображений |
| `edit_image` | Редактировать с base64-исходником прямо в запросе |
| `generate_video` | Создать задачу видео |
| `get_task`, `list_tasks` | Статус, история и все ID результатов |
| `cancel_task` | Отменить задачу, пока она в очереди |
| `upload_reference` | Загрузить PNG/JPEG/WebP или MP4 из папки медиа |
| `get_file`, `download_file` | Метаданные и сохранение результата на компьютер |

Генерация принимает `model_id`, `prompt`, `idempotency_key` и `options`.
В `options` передаются поля из [изображений](images.md) или [видео](videos.md):
например, `aspect_ratio`, `resolution`, `n` либо `seconds` строкой и `input_mode`.
Необязательные поля опускайте; пустые настройки — `{}`.
Параметры проверяются API, неподдерживаемые не игнорируются, модель не подменяется.
Для локального референса передайте data URI в `image`, `video`, `first_frame`,
`last_frame` или массивах `reference_images`, `reference_videos`, `reference_audios`.
`upload_reference` остаётся необязательным способом повторно использовать файл.

Сохраните уникальный ключ операции до первого POST. При неопределённом исходе
повтор допустим только с тем же ключом и неизменным телом. MCP не выполняет
автоматических повторов. После получения ID опрашивайте `get_task` примерно раз
в 5 секунд с ограниченным общим временем; после `succeeded` скачайте все
`result_file_ids`. При 429 увеличьте паузу. Истечение ожидания не отменяет работу.
Путь результата локальный: для показа в чате клиент должен уметь открывать файлы
на компьютере, где запущен MCP. Публичные ссылки на приватные файлы не создаются.

## Skill

В исходниках есть переносимый `.agents/skills/leinapi-media/SKILL.md` с порядком
выбора модели, референсов, ожидания и повторов. Для клиента, поддерживающего skills,
скопируйте папку `leinapi-media` в его каталог навыков. Сам skill не устанавливает
и не подключает MCP. Без поддержки skills можно пользоваться описаниями инструментов.

После подключения можно написать: «Создай изображение маяка на скале через LeinAPI,
подбери доступную модель, сохрани результат» или «Оживи этот референс в короткое видео».
Проверки пакета выполняются командой `uv run --project integrations/mcp pytest
integrations/mcp/tests -q` из корня исходников. Они проверяют синтетический HTTP
и настоящий stdio-сеанс MCP; живую генерацию и доступность конкретной модели
не подтверждают.

## Цены через MCP

`get_pricing` возвращает публичные розничные цены в RUB. Передайте `model_id`,
чтобы получить цены одной модели, либо опустите его для полного прайса.
Учитывайте режим входа, качество, длительность и единицу тарифа. Денежные значения
передаются точными десятичными строками. Отсутствующая модель возвращает not_found;
не подставляйте цену другой модели. Инструмент доступен через удалённый MCP и stdio.
`billing_enabled=false` описывает автоматические списания, а не запрет генерации
и не обещание бесплатного обслуживания. Просмотр прайса не расширяет доступ ключа.

## Подключить Codex ссылкой или файлом

В разделе MCP выберите «Codex — постоянное MCP-подключение», задайте срок и лимиты
и нажмите «Подключить в Codex». Кнопка создаёт ключ и сразу открывает
Codex через codex://new?prompt=…:
открывает установленное приложение с готовым сообщением. Пользователь нажимает
«Отправить». Автоматической отправки сообщения и установки от одного открытия нет.

«Скачать файл для Codex» — отдельный вариант в один клик: создаёт ключ и скачивает
инструкцию. После создания повторное скачивание или открытие использует тот же ключ. Прикрепите файл
к Codex и попросите настроить подключение. Codex должен сохранить сервер в пользовательском
config.toml, сохранив другие настройки, и проверить initialize/tools/list/list_models
без генерации. Может понадобиться перезапуск подключения. Постоянство настройки
не продлевает срок ключа; для бессрочного доступа выберите «Никогда не истекает».
Если приложение не открывается по ссылке, используйте файл или раскрываемый текст.
Инструкция для других чатов с HTTP-инструментами остаётся отдельным вариантом.

## Максимальный расход ключа

При создании API-ключа или подключения MCP можно выбрать общий бюджет в рублях
либо «Без ограничений» (по умолчанию). Это лимит за весь срок ключа, не месячный.
Сервер учитывает списанные суммы и резервы параллельных запросов. Превышающий
бюджет запрос отклоняется до отправки на генерацию с budget_exceeded.
При отключённых списаниях денежный бюджет не расходуется.

В POST /api/console/keys и POST /api/console/keys/chat-file поле spend_limit_rub
принимает десятичную строку (например "1000.50") или null. Числа JSON и отрицательные
суммы запрещены; ноль запрещает платные запросы с ненулевой стоимостью.
При обновлении обычного ключа это поле можно изменить; пропуск сохраняет бюджет,
null снимает ограничение. Нельзя уменьшить бюджет ниже уже потраченной и
зарезервированной суммы. Общий бюджет любого ключа также можно менять через
существующий раздел «Баланс» и PUT /api/console/billing/keys/{key_id}.
Список ключей возвращает spend_limit_rub, spent_rub и reserved_rub точными строками.


## Claude Code, Cursor и Antigravity

В разделе MCP теперь можно выбрать каждый из этих клиентов. Срок по умолчанию —
30 дней; доступны прежние настройки срока, количества генераций, параллельности
и максимального расхода. Кнопка скачивания создаёт ключ и файл за один клик.
Повторное скачивание и переключение клиента после создания используют тот же ключ.

- Claude Code: «Подключить в Claude Code» создаёт ключ и открывает локальный
  терминальный клиент с готовым сообщением через claude-cli://open?q=… . Нажмите Enter.
  Альтернатива — файл: укажите агенту путь к нему или вставьте текст.
  Настройка сохраняется в пользовательской области, обычно ~/.claude.json.
  Если ссылка не открывается, запустите установленный Claude Code и отправьте
  первое сообщение: клиент регистрирует обработчик ссылок при первом использовании.
- Cursor: кнопка создаёт ключ и открывает готовое сообщение через
  cursor://anysphere.cursor-deeplink/prompt?text=… . Отправьте сообщение агенту.
  Также доступен файл для настройки глобального ~/.cursor/mcp.json.
- Antigravity: скачайте файл, укажите агенту путь к нему или вставьте его текст
  с просьбой настроить подключение. Инструкция использует serverUrl и headers,
  проверяет активный глобальный конфиг: ~/.gemini/config/mcp_config.json в новых
  версиях либо ~/.gemini/antigravity/mcp_config.json в старых IDE.
  Кнопки запуска с сообщением пока нет: подтверждённый формат такой ссылки не найден.

Инструкции сохраняют другие серверы и настройки, проверяют доступ без генерации.
Может понадобиться обновить подключения или перезапустить клиент. Это настройки
MCP для локальных агентов, а не для обычного веб-чата Claude. Ссылка заполняет
сообщение, но не отправляет его автоматически. При проблемах используйте файл.

Форматы сверены с документацией:
[Claude Code MCP](https://code.claude.com/docs/en/mcp),
[Claude Code ссылки](https://code.claude.com/docs/en/deep-links),
[Cursor ссылки](https://cursor.com/docs/reference/deeplinks),
[Antigravity MCP](https://antigravity.google/docs/mcp).


## Баланс через MCP

`get_balance` без аргументов возвращает баланс аккаунта и бюджет текущего ключа.
Инструмент доступен через удалённый MCP и локальный stdio-мост. Для обычного API
доступен тот же ответ: GET /v1/balance с Authorization: Bearer <API_KEY>.

Все денежные значения — точные десятичные строки в RUB:
- balance_rub — текущий баланс, включая резервы;
- available_rub — доступно для новых запросов;
- reserved_rub — зарезервировано для выполняющихся запросов;
- key.spend_limit_rub — максимальный расход за весь срок текущего ключа;
- key.spent_rub, key.reserved_rub — списания и резервы этого ключа;
- key.remaining_rub — лимит минус списания и резервы, не меньше нуля.

null у лимита и остатка означает отсутствие лимита ключа, а не бесконечный баланс
аккаунта. При включённых списаниях ограничивают и доступные средства аккаунта,
и остаток бюджета ключа. billing_enabled=false означает, что автоматические
списания выключены; само по себе это не запрещает генерацию.
Ответ — согласованный снимок, не гарантия средств для будущего запроса:
при отправке сервер снова проверяет баланс и лимиты. Просмотр ничего не списывает
и не создаёт кошелёк. Другие ключи, платёжные данные и история операций не выдаются.
После обновления сервера переподключите MCP, если клиент сохранил старый список инструментов.


## Файлы внутри запроса MCP

Предварительный upload не нужен. Прочитайте файл средствами вашего агента,
закодируйте его байты в base64 и передайте значение в обычном поле options:

```json
{
  "model_id": "MODEL_ID",
  "prompt": "Отредактируй изображение",
  "idempotency_key": "unique-operation-001",
  "options": {"image": "data:image/png;base64,BASE64_BYTES"}
}
```

Это вызов edit_image. Для generate_video аналогично доступны image, video,
first_frame/last_frame и массивы reference_images/reference_videos/reference_audios,
если эти входы разрешены выбранной моделью. В одном массиве можно сочетать
HTTPS-ссылки и inline-содержимое. Неподдерживаемые параметры отклоняются.
Тот же формат работает в JSON обычного API; multipart остаётся доступным в API.

Типы: image/png, image/jpeg, image/webp; video/mp4; audio/wav, audio/x-wav,
audio/mpeg, audio/mp3, audio/mp4, audio/ogg, audio/flac. Аудиореференс — до 4 МиБ; у фото и MP4 нет отдельной квоты размера файла. Проверяется реальное содержимое; повреждённые
файлы отклоняются. Общий JSON/MCP-запрос ограничен размером base64-представления
128 МиБ плюс 64 КиБ служебных полей. У клиента может быть меньший лимит передачи.

Путь вроде C:/photo.png не является содержимым файла: удалённый сервер не видит
диск пользователя. Агент должен прочитать файл и передать реальные байты;
если клиент не умеет читать вложения или передавать большие аргументы, используйте
HTTPS-ссылку. Файл обрабатывается и связывается с задачей на сервере автоматически.
