Nano Banana 2 Polza MCP Server
# Nano Banana 2 Polza MCP Server
`mcp-name: io.github.ivanantigravity-lgtm/nanobanana-2-polzaia-mcp-server`
MCP-сервер для генерации и редактирования изображений через `Polza` с моделями семейства Google Nano Banana:
- `google/gemini-3.1-flash-image-preview` — Nano Banana 2, модель по умолчанию
- `google/gemini-3-pro-image-preview` — для сложных композиций и максимального качества
- `google/gemini-2.5-flash-image` — для быстрых черновиков
Сервер отдаёт изображения настоящими MCP image content-блоками и параллельно — структурированный JSON с метаданными и подсказками по воспроизводимости.
## Инструменты MCP
- `generate_image` — генерация и редактирование. Поддерживает до трёх референсов для conditioning, выбор модели, aspect ratio, разрешение и прочие параметры.
- `fetch_generation` — докачка уже запущенной генерации по `gen_...` id. Нужен, когда MCP-клиент отвалился по таймауту, а генерация на стороне Polza успешно завершилась. Позволяет не перегенерировать (и не оплачивать повторно).
- `upload_file` — загрузка файлов в Polza Storage.
- `show_output_stats` — статистика локальной выходной директории.
- `maintenance` — обслуживание кэша, квот и БД.
## Что нужно пользователю
- `Claude Code` или любой другой MCP-клиент
- `uv`
- `Python 3.11+`
- `POLZA_AI_API_KEY` (токен аккаунта Polza)
## Быстрая установка за 2 минуты
Для `Claude Code` / `VS Code`:
1. Установите `uv` (`brew install uv` на macOS).
2. В корне проекта создайте файл `.mcp.json`.
3. Вставьте конфиг и подставьте свой Polza-ключ.
```json
{
"mcpServers": {
"nanobanana-polza": {
"command": "uvx",
"args": ["nanobanana-2-polzaia-mcp-server@latest"],
"env": {
"POLZA_AI_API_KEY": "your-polza-api-key-here",
"POLZA_BASE_URL": "https://polza.ai/api",
"IMAGE_OUTPUT_DIR": "/Users/yourname/Documents/nanobanana"
}
}
}
}
```
Перезапустите Claude Code / VS Code.
## Восстановление после таймаута
MCP-клиенты (в том числе Claude Code) обычно имеют собственный таймаут на один tool call порядка 60 секунд. Nano Banana 2 укладывается в это окно не всегда, и клиент может вернуть `The read operation timed out` ещё до того, как Polza успела отдать результат. Сервер Polza в этот момент доводит генерацию до конца и сохраняет её под `gen_...` id.
Если такое случилось:
1. Посмотрите `gen_...` id в веб-интерфейсе Polza (раздел генераций).
2. Вызовите `fetch_generation` с этим id — сервер опросит статус и сохранит файл локально.
```
fetch_generation(media_id="gen_2158267363095220225",
output_path="/abs/path/to/slide_3.png")
```
Параметр `output_path` принимает как конкретный файл, так и директорию. При отсутствии параметра файл сохраняется в `IMAGE_OUTPUT_DIR`.
## Локальная разработка
```bash
git clone https://github.com/ivanantigravity-lgtm/nanobanana-2-polzaia-mcp-server.git
cd nanobanana-2-polzaia-mcp-server
uv sync
cp .env.example .env
```
Минимум в `.env`:
```env
POLZA_AI_API_KEY=your_polza_api_key
POLZA_BASE_URL=https://polza.ai/api
IMAGE_OUTPUT_DIR=/absolute/path/to/output
```
Запуск:
```bash
uv run python -m nanobanana_2_polzaia_mcp_server.server
```
## Claude Code / VS Code (варианты конфига)
Установленный через PyPI пакет — рекомендуемый вариант:
```json
{
"mcpServers": {
"nanobanana-polza": {
"command": "uvx",
"args": ["nanobanana-2-polzaia-mcp-server@latest"],
"env": {
"POLZA_AI_API_KEY": "your-polza-api-key-here",
"POLZA_BASE_URL": "https://polza.ai/api",
"IMAGE_OUTPUT_DIR": "/Users/demo/Documents/nanobanana"
}
}
}
}
```
Запуск из исходников:
```json
{
"mcpServers": {
"nanobanana-polza-local": {
"command": "uv",
"args": ["run", "python", "-m", "nanobanana_2_polzaia_mcp_server.server"],
"cwd": "/absolute/path/to/nanobanana-2-polzaia-mcp-server",
"env": {
"POLZA_AI_API_KEY": "your-polza-api-key-here",
"POLZA_BASE_URL": "https://polza.ai/api",
"IMAGE_OUTPUT_DIR": "/absolute/path/to/output"
}
}
}
}
```
## Claude Desktop
На macOS добавьте сервер в файл:
`~/Library/Application Support/Claude/claude_desktop_config.json`
Пример:
```json
{
"mcpServers": {
"nanobanana-polza": {
"command": "uvx",
"args": ["nanobanana-2-polzaia-mcp-server@latest"],
"env": {
"POLZA_AI_API_KEY": "your-polza-api-key-here",
"POLZA_BASE_URL": "https://polza.ai/api",
"IMAGE_OUTPUT_DIR": "/Users/demo/Documents/nanobanana"
}
}
}
}
```
## Переменные окружения
| Переменная | Обязательно | Описание |
|---|---|---|
| `POLZA_AI_API_KEY` | да | Токен доступа к Polza API |
| `POLZA_BASE_URL` | нет | База API, по умолчанию `https://polza.ai/api` |
| `IMAGE_OUTPUT_DIR` | нет | Директория для сохранённых файлов, по умолчанию `~/nanobanana-images` |
| `POLZA_POLL_INTERVAL_SECONDS` | нет | Интервал поллинга статуса, по умолчанию `2` |
| `POLZA_POLL_TIMEOUT_SECONDS` | нет | Таймаут ожидания генерации, по умолчанию `120` |
| `POLZA_EXTERNAL_USER_ID` | нет | Передаётся в Polza как `user` для антифрода |
| `RETURN_FULL_IMAGE` | нет | Возвращать полное изображение в MCP-ответе вместо thumbnail |
| `NANOBANANA_MODEL` | нет | Дефолтный tier: `auto`, `nb2`, `pro`, `flash` |
## Публикация новой версии
```bash
# 1. bump версии в pyproject.toml и nanobanana_2_polzaia_mcp_server/__init__.py
# 2. обновить CHANGELOG.md
# 3. прогнать быстрый smoke-test
PYTHONPYCACHEPREFIX=/tmp/pycache python3 -m compileall nanobanana_2_polzaia_mcp_server
uv build
# 4. публикация на PyPI
uv publish --token "$UV_PUBLISH_TOKEN"
# 5. публикация метаданных в MCP Registry
brew install mcp-publisher # один раз
mcp-publisher login
mcp-publisher publish
```
MCP Registry хранит только метаданные, сам пакет должен лежать на PyPI.
## Используемые эндпоинты Polza
- `POST /v1/media` — запуск генерации
- `GET /v1/media/{id}` — статус и результат (используется для `fetch_generation` и поллинга)
- `POST /v1/storage/upload` — загрузка референса
- `GET /v1/storage/files/{id}` — метаданные файла
- `DELETE /v1/storage/files/{id}` — удаление файла
## Лицензия
MIT. См. файл `LICENSE`.
TDQS
Scored across 5 tools
Most tools have clear descriptions, but 'fetch_generation' lacks any description, creating ambiguity about its purpose and potential overlap with 'generate_image'. This makes it hard for an agent to distinguish between them.
Tool names consistently use snake_case, but they mix verb and noun forms (e.g., 'maintenance' is a noun while others are verb+noun). The pattern is partially predictable but not fully uniform.
With 5 tools, the server covers core image generation and file management tasks reasonably well. The count is appropriate for a focused service, though not overly extensive.
The tool set lacks a way to list or delete previously generated images, and 'fetch_generation' is undefined. This leaves significant gaps in the lifecycle, likely causing agent failures during cleanup or retrieval tasks.