gemini-image-mcp-http
Remote MCP server (Streamable HTTP) for generating and editing images via Google Gemini, usable as a custom connector in Claude.
README
gemini-image-mcp-http
Удалённый MCP-сервер (Streamable HTTP): генерация и редактирование изображений через Google Gemini 3.1 Flash Image («Nano Banana 2»), который можно подключить к Claude.ai в браузере (а также Claude Desktop/Cowork/мобильным приложениям) как Custom Connector.
Проверено локально: сервер поднимается, отвечает на MCP initialize/tools/list/tools/call,
неверный секрет в URL получает 404. Единственное, что нельзя было протестировать здесь —
сам вызов Gemini API (в песочнице нет доступа к generativelanguage.googleapis.com),
но запрос к нему формируется по официальной REST-схеме Gemini.
Как это устроено
- Один HTTP-эндпоинт:
POST/GET /mcp/<MCP_SHARED_SECRET> <MCP_SHARED_SECRET>— длинная случайная строка, которую вы сами зададите. Она одновременно служит и частью URL, и защитой: без неё запрос получает 404. Никому не показывайте итоговый URL целиком.- Внутри — два инструмента:
generate_imageиedit_image, оба обращаются к Gemini REST API вашим ключом (ключ хранится только на сервере, Claude его не видит). - Изображение возвращается сразу в чат (как картинка), без сохранения на диск — на большинстве хостингов файловая система эфемерна, так что это осознанный выбор.
⚠️ Про ключ, который вы уже присылали в чат: это больше похоже не на обычный
Gemini API-ключ (те выглядят как AIzaSy...), а на другой тип токена Google.
Перед деплоем зайдите на https://aistudio.google.com/apikey, создайте (или перевыпустите)
именно API-ключ и используйте его — не токен из чата.
Шаг 1. Сгенерируйте секрет
openssl rand -hex 24
Сохраните результат — это будет и MCP_SHARED_SECRET, и часть URL коннектора.
Шаг 2. Задеплойте сервер
Ниже — вариант через Render.com (проще всего для одного файла, есть бесплатный план).
Подойдут и Railway/Fly.io/любой VPS — везде логика одна: Node 18+, переменные окружения,
публичный HTTPS-домен. В архиве есть Dockerfile, так что подойдёт и любой Docker-хостинг.
Render.com (без своего сервера)
- Зайдите на https://render.com → New → Web Service.
- Вариант «Deploy an existing image / upload code» — загрузите содержимое этой папки в свой GitHub-репозиторий (пустой репозиторий, залить файлы можно и через веб-интерфейс GitHub) и подключите его к Render.
- Runtime: Node. Build command:
npm install. Start command:npm start. - В разделе Environment добавьте:
GEMINI_API_KEY= ваш настоящий ключ из AI StudioMCP_SHARED_SECRET= строка из шага 1- (необязательно)
GEMINI_IMAGE_MODEL=gemini-3.1-flash-image
- Deploy. После сборки Render даст домен вида
https://ваш-сервис.onrender.com.
Через Docker (Fly.io / Railway / свой VPS)
docker build -t gemini-image-mcp-http .
docker run -p 3000:3000 \
-e GEMINI_API_KEY=ваш-ключ \
-e MCP_SHARED_SECRET=строка-из-шага-1 \
gemini-image-mcp-http
Дальше — по инструкции конкретного хостинга, как опубликовать контейнер на HTTPS-домене
(на Fly.io — fly launch + fly deploy, на Railway — просто подключить репозиторий).
Шаг 3. Проверьте, что сервер отвечает
curl https://ваш-домен/ # health-check, должен вернуть "OK"
Шаг 4. Добавьте коннектор в Claude.ai
- В Claude.ai: Settings → Connectors (или «Настроить» → «Коннекторы»).
- Нажмите «+» → Add custom connector.
- В поле URL укажите:
(полный секретный URL, без пробелов)https://ваш-домен/mcp/MCP_SHARED_SECRET_СЮДА - Advanced settings можно оставить пустыми — авторизация уже встроена в сам URL.
- Нажмите «Add», затем включите коннектор для нужного чата через «+» → Connectors.
Готово — в чате можно будет попросить: «сгенерируй через Gemini картинку рыжего кота на подоконнике» или «отредактируй это изображение: сделай фон синим».
Переменные окружения
| Переменная | Обязательна | По умолчанию | Описание |
|---|---|---|---|
GEMINI_API_KEY |
да | — | Ключ Gemini API из Google AI Studio |
MCP_SHARED_SECRET |
да | — | Секрет в URL, защищающий эндпоинт от чужих |
GEMINI_IMAGE_MODEL |
нет | gemini-3.1-flash-image |
Имя модели |
PORT |
нет | 3000 |
Обычно задаётся хостингом автоматически |
S3_ENDPOINT |
нет | — | Эндпоинт S3-совместимого хранилища (см. ниже) |
S3_BUCKET |
нет | — | Имя бакета |
S3_ACCESS_KEY_ID |
нет | — | Access key |
S3_SECRET_ACCESS_KEY |
нет | — | Secret key |
S3_REGION |
нет | auto |
Регион (для R2 оставить auto) |
S3_PUBLIC_URL |
нет | собирается из endpoint+bucket | Публичный базовый URL для отдачи файлов |
S3_FORCE_PATH_STYLE |
нет | true |
Path-style URL (нужно для R2/MinIO) |
PUBLIC_BASE_URL |
нет | определяется автоматически | Базовый URL сервиса — для ссылок локального фолбэка |
Постоянное хранение изображений (важно!)
Каждый вызов generate_image/edit_image всегда сохраняет файл целиком, независимо
от его веса и разрешения, и возвращает в ответе текстовую ссылку Image URL: ....
Инлайн-превью в самом чате при этом появляется только если файл укладывается в
безопасный лимит показа (~900 КБ) — но ссылка работает всегда, для файлов любого размера.
Есть два режима:
-
Без настройки (по умолчанию). Файлы хранятся в памяти самого сервиса и отдаются по адресу
/images/<id>.<ext>. Просто и без доп. шагов, но:- ссылки живут максимум 6 часов;
- на бесплатном тарифе Render контейнер засыпает при простое и теряет память при перезапуске — старые ссылки после этого перестают открываться.
-
С постоянным хранилищем (рекомендуется) — Cloudflare R2.
- Зайдите в Cloudflare Dashboard → R2 → Create bucket. Название, например
gemini-images. - В настройках бакета включите публичный доступ (Public Access → Allow Access),
скопируйте выданный публичный URL (
https://pub-xxxxxxxx.r2.dev) — это и естьS3_PUBLIC_URL. - R2 → Manage API Tokens → Create API Token → права Object Read & Write на этот бакет. Скопируйте Access Key ID, Secret Access Key и Account ID.
- В переменных окружения хостинга (Render → ваш сервис → Environment) добавьте:
S3_ENDPOINT=https://<ACCOUNT_ID>.r2.cloudflarestorage.com S3_BUCKET=gemini-images S3_ACCESS_KEY_ID=<access key> S3_SECRET_ACCESS_KEY=<secret key> S3_PUBLIC_URL=https://pub-xxxxxxxx.r2.dev - Redeploy. В логах при старте должно появиться:
Постоянное хранилище: S3-совместимое (https://<ACCOUNT_ID>.r2.cloudflarestorage.com). - Готово — теперь ссылки на изображения не пропадают ни при засыпании сервиса, ни при редеплое, и работают для файлов любого веса и разрешения (1K/2K/4K).
Вместо R2 подойдёт любое S3-совместимое хранилище (AWS S3, Backblaze B2, MinIO) — просто укажите соответствующие
S3_ENDPOINT/регион. - Зайдите в Cloudflare Dashboard → R2 → Create bucket. Название, например
Безопасность и стоимость
- Секрет в URL — единственная защита. Держите ссылку приватной, не публикуйте её, не коммитьте в открытый репозиторий вместе со значением переменных окружения.
- Каждый вызов
generate_image/edit_imageтратит квоту/деньги вашего Gemini-ключа — теоретически любой, кто узнает секретный URL, сможет им пользоваться. Если нужна более серьёзная защита (OAuth, ротация секрета, лимиты запросов) — можно усилить отдельно, дайте знать. - Хотите вообще не выставлять свой Gemini-ключ в интернет — тогда лучше вариант
из первого архива (
gemini-image-mcp.zip) под Claude Desktop: там сервер работает локально на вашей машине и никуда наружу не торчит.
Recommended Servers
playwright-mcp
A Model Context Protocol server that enables LLMs to interact with web pages through structured accessibility snapshots without requiring vision models or screenshots.
Audiense Insights MCP Server
Enables interaction with Audiense Insights accounts via the Model Context Protocol, facilitating the extraction and analysis of marketing insights and audience data including demographics, behavior, and influencer engagement.
Magic Component Platform (MCP)
An AI-powered tool that generates modern UI components from natural language descriptions, integrating with popular IDEs to streamline UI development workflow.
VeyraX MCP
Single MCP tool to connect all your favorite tools: Gmail, Calendar and 40 more.
graphlit-mcp-server
The Model Context Protocol (MCP) Server enables integration between MCP clients and the Graphlit service. Ingest anything from Slack to Gmail to podcast feeds, in addition to web crawling, into a Graphlit project - and then retrieve relevant contents from the MCP client.
Kagi MCP Server
An MCP server that integrates Kagi search capabilities with Claude AI, enabling Claude to perform real-time web searches when answering questions that require up-to-date information.
E2B
Using MCP to run code via e2b.
Neon Database
MCP server for interacting with Neon Management API and databases
Exa Search
A Model Context Protocol (MCP) server lets AI assistants like Claude use the Exa AI Search API for web searches. This setup allows AI models to get real-time web information in a safe and controlled way.
Qdrant Server
This repository is an example of how to create a MCP server for Qdrant, a vector search engine.