loading…
Search for a command to run...
loading…
A remote MCP image generation server that unifies OpenAI Images and Gemini generateContent APIs with preset-based configuration for multi-provider support.
A remote MCP image generation server that unifies OpenAI Images and Gemini generateContent APIs with preset-based configuration for multi-provider support.
一个基于 UV + Python 的远程 MCP 图片生成服务,统一封装 OpenAI Images 兼容接口与 Gemini generateContent 生图接口。
本子项目在源码仓开发时复用工作区根目录
.venv。这只适用于开发与测试;正式 systemd 部署推荐使用 wheel 安装到独立部署目录.venv,不要使用源码 editable 安装作为生产形态。
注意,timeout为关键参数;当前 preset 统一只有
1次默认机会 +1次重试机会,且按支持尺寸档位分配上游 HTTP 超时:仅1K为120s、支持2K为150s、支持4K为200s。如果不设置客户端超时,默认30秒通常一定生成不了图片。 文档仍推荐将 MCP 客户端timeout显式设置为500000毫秒(500 秒);它可以覆盖当前4Kpreset 最长约400秒的两次尝试预算,并为网络抖动留出余量。
gpt_image_2_official 工具,兼容 OpenAI Images 风格的文生图与参考图编辑nano_banana_2_official 工具,兼容 Gemini generateContent 风格的文生图与参考图编辑gpt_image_2_temporary 与 nano_banana_2_temporary 临时探索工具,用于陌生兼容站点试跑;成功后应固化为正式 presetlist_image_tools_catalog 工具,用于输出当前服务的 default-active preset、尺寸支持、参数指导与非敏感环境变量信息skills/gpt-icon-generate/SKILL.md 图标生成技能,约定规则网格图标板生成、校验和切图流程Provider、model、base_url、timeout、retry 及字段派发行为默认由启动期 preset 决定。
这次 1.0.0-beta1 版本把“不同供应商 / 不同兼容站点的差异”正式上收为一层稳定的预设体系:
provider、model、base_url、timeout、retry、支持 mode、尺寸能力与字段派发策略可以把 preset 理解为:
“同一个 MCP 图片工具,在某个供应商 / 某个模型 / 某种协议下,应该怎样发请求、哪些字段该转发、支持哪些尺寸与模式、超时和重试如何设置。” 由于不同第三方供应商之间,虽然大致遵循同一个 调用规范,但是总有这里那里的细节不同,有些不能发 quality ,有些不能发size,有些默认就有超时,有些需要我们自己设置超时;所以我们把这些细节都收敛到 preset 里,调用方只要选对 preset,剩下的可以编码处理。
启动期选择 active preset:通过环境变量决定正式工具默认绑定哪个 preset
按次临时切换 preset:正式工具允许本次调用临时传入 preset + api_key,但不重新暴露 base_url、model、timeout、retry 这类底层运行参数
class-first preset registry:稳定供应商能力通过内置 preset class 注册,而不是 YAML 或运行时自由拼配置
临时探索与正式 preset 分离:陌生兼容站点可以走 *_temporary 工具临时跑,如果你觉得合适,就可以提PR或自行修改源码添加新的 preset 预设。
具体哪些字段会传到 post 请求以进行真正生图:现在不用 mcp 调用方指定了,每个预设可以处理这些细节问题——quality、size、output_format、background、moderation 是否真正发给上游,不再让调用方猜测,而由当前 preset 的 dispatch policy 决定
gpt_image_2_official 与 nano_banana_2_official 允许按次传入 preset 与 api_key 做临时覆盖
如果按次传入 preset,则同一请求里必须同时传入 api_key
不传按次覆盖参数时,仍回退到环境变量配置的 preset 与 API Key
通过local的或服务式配置环境变量 IMG_GEN_GPT_IMAGE_2_OFFICIAL_PRESET 选择 gpt_image_2_official 的 active preset,例如 openai_gpt_image_2、right_codes_gpt_image_2、apiyi_gpt_image_2、laozhang_gpt_image_2_default、laozhang_gpt_image_2_sora_official、laozhang_gpt_image_2_enterprise、laozhang_gpt_image_2_vip
通过 IMG_GEN_NANO_BANANA_2_OFFICIAL_PRESET 选择 nano_banana_2_official 的 active preset,例如 google_nano_banana、apiyi_nano_banana_2
不配置时回退到内置默认 preset(openai_gpt_image_2 / google_nano_banana)
典型接口:
POST /v1/images/generationsPOST /v1/images/editsPOST /v1beta/models/{model}:generateContentuv 本身没有单独的“官方包仓库”,常规做法是把包发布到 PyPI,然后让用户通过 uv 直接下载运行。
当前发布链路会把 GitHub Release 对应版本自动发布到 PyPI。
image-generate-mcp-remoteuv tool install image-generate-mcp-remote.whl 后安装到部署目录自己的 .venv./SYSTEMD_DEPLOYMENT_GUIDE.md例如,安装 v1.0.0-beta1 后可用于远端 MCP 服务部署或供 MCP 客户端以 stdio 模式拉起:
# 安装为全局工具
uv tool install image-generate-mcp-remote
# 指定版本
uv tool install --refresh image-generate-mcp-remote==1.0.0-beta1
如果你要做正式的 systemd --user 远端部署,推荐流程不是直接把源码目录长期放在线上运行,而是:
uv build
cp dist/image_generate_mcp_remote-1.0.0b1-py3-none-any.whl <deploy-root>/wheels/
uv venv <deploy-root>/.venv
uv pip install --python <deploy-root>/.venv/bin/python <deploy-root>/wheels/image_generate_mcp_remote-1.0.0b1-py3-none-any.whl
这样部署后,服务运行代码来自 wheel 安装结果,而不是源码 editable 注入。
这一节只用于本地开发、测试、调试,不是推荐的正式部署方式。
uv sync
cp .env.example .env
至少填写你要使用的工具对应 API Key:
IMG_GEN_GPT_IMAGE_2_OFFICIAL_API_KEYIMG_GEN_NANO_BANANA_2_OFFICIAL_API_KEY# Streamable HTTP(默认)
uv run image-generate-mcp-remote --transport streamable-http --host 127.0.0.1 --port 3001
# SSE
uv run image-generate-mcp-remote --transport sse --host 127.0.0.1 --port 3001
这里不再单列 stdio 的独立启动命令;对本项目而言,stdio 的意义在于由 MCP 客户端按配置拉起,而不是人工单独启动。真正的 MCP 配置导览请直接看 ./SYSTEMD_DEPLOYMENT_GUIDE.md。
本项目当前真正使用中的远端 MCP 服务,不是 stdio 直连,而是 systemd --user 托管的 streamable-http 服务。
推荐的正式部署形态是:
部署目录保存 .env、.venv、storage/、wheels/
.venv 中安装的是已构建好的 .whl
systemd 只启动部署目录 .venv/bin/image-generate-mcp-remote
不依赖源码树是否存在或是否被改动
服务名:image-generate-mcp.service
unit 文件位置模式:~/.config/systemd/user/image-generate-mcp.service
工作目录:部署目录 <deploy-root>
环境文件:<deploy-root>/.env
当前接入地址:http://127.0.0.1:25235/mcp
部署、更新、修改环境变量、重启服务、OpenCode MCP JSON 配置的完整说明见:
./SYSTEMD_DEPLOYMENT_GUIDE.md对于当前这个远端服务,需要特别注意:
env,不会改变已启动服务的环境变量<deploy-root>/.env 或 image-generate-mcp.service.env 后执行 systemctl --user restart image-generate-mcp.service.service 后执行 systemctl --user daemon-reload && systemctl --user restart image-generate-mcp.service以下配置示例均为当前项目可直接使用的正确写法。
如果你关注的是真实远端部署、systemd 托管、客户端如何接入在线 MCP 服务,建议优先阅读 ./SYSTEMD_DEPLOYMENT_GUIDE.md;本节仅保留最常见配置摘要。
适用于使用通用 MCP 配置风格的客户端,主要是 claude code
{
"mcpServers": {
"image-generate-mcp-remote": {
"type": "stdio",
"command": "uv",
"args": [
"run",
"image-generate-mcp-remote",
"--transport",
"stdio"
],
"timeout": 500000,
"cwd": "/Users/zhongting/workspace/image-generate-mcp-remote",
"env": {
"IMG_GEN_GPT_IMAGE_2_OFFICIAL_API_KEY": "sk-xxxx",
"IMG_GEN_GPT_IMAGE_2_OFFICIAL_PRESET": "openai_gpt_image_2",
"IMG_GEN_NANO_BANANA_2_OFFICIAL_API_KEY": "sk-xxxx",
"IMG_GEN_NANO_BANANA_2_OFFICIAL_PRESET": "google_nano_banana",
"IMAGE_OUTPUT_DIR": "storage/images",
"LOG_LEVEL": "INFO"
}
}
}
}
OpenCode 的 opencode.json 使用自己的 MCP 配置结构:本地 MCP 需要声明 type: "local",并把启动命令和参数合并写入 command 数组;环境变量字段名是 environment,不是通用示例里的 env;OpenCode 也不使用 mcpServers 作为顶层字段,而是使用 mcp。
适用于项目级配置文件,例如:<project>/.opencode/opencode.json。
{
"$schema": "https://opencode.ai/config.json",
"mcp": {
"image-generate-mcp-remote": {
"type": "local",
"command": [
"uv",
"run",
"--directory",
"/absolute/path/to/image-generate-mcp-remote",
"image-generate-mcp-remote",
"--transport",
"stdio"
],
"enabled": true,
"timeout": 500000,
"environment": {
"IMG_GEN_GPT_IMAGE_2_OFFICIAL_API_KEY": "sk-xxxx",
"IMG_GEN_GPT_IMAGE_2_OFFICIAL_PRESET": "openai_gpt_image_2",
"IMG_GEN_NANO_BANANA_2_OFFICIAL_API_KEY": "sk-xxxx",
"IMG_GEN_NANO_BANANA_2_OFFICIAL_PRESET": "google_nano_banana",
"IMAGE_OUTPUT_DIR": "storage/images",
"LOG_LEVEL": "INFO"
}
}
}
}
两种 stdio 配置的区别:
mcpServers.command + args + cwd + envmcp.<name>.type=local + command[] + environmenttimeout,推荐 500000 毫秒先启动服务:
uv run image-generate-mcp-remote --transport streamable-http --host 127.0.0.1 --port 3001
服务默认 MCP 路径为:/mcp
{
"mcpServers": {
"image-generate-mcp-remote": {
"url": "http://127.0.0.1:3001/mcp",
"timeout": 500000
}
}
}
上面的 timeout 不要省略。注意,timeout为关键参数;当前 preset 统一只有 1 次默认机会 + 1 次重试机会,且按支持尺寸档位分配上游 HTTP 超时:仅 1K 为 120s、支持 2K 为 150s、支持 4K 为 200s。文档示例推荐值为 500000 毫秒(500 秒),用于覆盖当前 4K preset 最长约 400 秒的两次尝试预算。
先启动服务:
uv run image-generate-mcp-remote --transport sse --host 127.0.0.1 --port 3001
服务默认路径为:
/sse/messages/对于要求分别填写 SSE 地址与消息地址的客户端,可使用:
http://127.0.0.1:3001/ssehttp://127.0.0.1:3001/messages/如果客户端还支持单独配置 MCP tool-call 超时,也应显式设置 timeout;文档推荐值为 500000 毫秒(500 秒),用于覆盖当前 4K preset 两次尝试的最长预算,并为网络抖动留出余量。
list_image_tools_catalog输出当前服务暴露的图片工具目录,包括:
gpt_image_2_officialOpenAI Images 兼容工具。
mode=generate 时调用文生图mode=edit 时调用参考图编辑 / 图生图preset 与 api_key 临时切换 preset;若传 preset,必须同传 api_keyimage_size + aspect_ratio 两个枚举,preset 按共享尺寸合同映射到对应 GPT 请求像素尺寸data[0].b64_json 与 data[0].url;若上游返回 url,服务端会自动下载并保存到 save_pathlist_image_tools_catalog 查看 supported_size_presetsnano_banana_2_officialGemini generateContent 兼容工具。
mode=generate 时调用文生图mode=edit 时调用参考图编辑 / 图生图preset 与 api_key 临时切换 preset;若传 preset,必须同传 api_keyAuthorization: Bearer <key> 与 x-goog-api-key: <key> 以兼容更多 Gemini 兼容网关inlineData / inline_data 与 mimeType / mime_typeimage_size + aspect_ratio 两个枚举,服务会按共享尺寸合同映射到 imageConfiggpt 请求尺寸与 nano banana 实际输出尺寸gpt_image_2_temporaryOpenAI Images 兼容站点的临时探索工具。
api_key、base_url、model、timeout_secondsmodel、prompt、由 image_size + aspect_ratio 映射得到的 sizequality、output_format、background、moderation 默认不发送;只有显式设置对应 send_* 参数时才转发b64_json、url、markdown 图片链接、data URL 等形态nano_banana_2_temporaryGemini generateContent 兼容站点的临时探索工具。
api_key、base_url、model、timeout_secondsgenerationConfig.imageConfiginlineData / inline_data,也会扫描文本中的 markdown 图片链接、data URL 与 HTTPS URLgpt-icon-generateskills/gpt-icon-generate/SKILL.mdgpt_image_2_official 生成 2K、1:1、4x4 / 16 图标板skills/gpt-icon-generate/scripts/verify_image_output.py、skills/gpt-icon-generate/scripts/plan_icon_sheet_params.py、skills/gpt-icon-generate/scripts/split_icon_sheet_connected_bbox.py| 变量名 | 必填 | 默认值 | 说明 |
|---|---|---|---|
IMG_GEN_GPT_IMAGE_2_OFFICIAL_API_KEY |
是 | 空 | gpt_image_2_official 使用的 API Key |
IMG_GEN_GPT_IMAGE_2_OFFICIAL_PRESET |
否 | openai_gpt_image_2 |
启动期 active preset id |
| 变量名 | 必填 | 默认值 | 说明 |
|---|---|---|---|
IMG_GEN_NANO_BANANA_2_OFFICIAL_API_KEY |
是 | 空 | nano_banana_2_official 使用的 API Key |
IMG_GEN_NANO_BANANA_2_OFFICIAL_PRESET |
否 | google_nano_banana |
启动期 active preset id |
| 变量名 | 必填 | 默认值 | 说明 |
|---|---|---|---|
IMAGE_OUTPUT_DIR |
否 | storage/images |
生成图片的落盘目录 |
LOG_LEVEL |
否 | INFO |
日志级别 |
本项目采用 MIT 许可证,完整文本见 LICENSE。
Run in your terminal:
claude mcp add image-generate-mcp-remote -- npx Yes, Image Generate Remote MCP is free — one-click install via Unyly at no cost.
No, Image Generate Remote runs without API keys or environment variables.
Self-hosted: the server runs locally on your machine via the install command above.
Open Image Generate Remote on unyly.org, pick your client tab (Claude Desktop, Claude Code, Cursor) and press Install — the config is generated automatically, no JSON editing.
Transcripts, channel stats, search
by YouTubeAI image generation using various models.
by modelcontextprotocolUnified GPU inference API with 30 AI services (LLM, image gen, video, TTS, whisper, embeddings, reranking, OCR) as MCP tools. Pay-per-use via x402 USDC or API k
by gpu-bridgeA powerful image generation tool using Google's Imagen 3.0 API through MCP. Generate high-quality images from text prompts with advanced photography, artistic,
by hamflxNot sure what to pick?
Find your stack in 60 seconds
Author?
Embed badge for your README
Browse similar
All media MCPs