Skip to main content
Glama
README.md
# gen-image MCP

中文 | [English](./README.en.md)

[![npm version](https://img.shields.io/npm/v/gen-image-mcp?logo=npm&label=npm)](https://www.npmjs.com/package/gen-image-mcp)
[![MCP Registry](https://img.shields.io/badge/MCP%20Registry-active-10B981)](https://registry.modelcontextprotocol.io/v0/servers?search=io.github.yuluo688%2Fgen-image-mcp)
[![License: MIT](https://img.shields.io/badge/license-MIT-0B7BB9)](./LICENSE)

面向 AI 编程 Agent 的本地图片工作流 MCP。通过用户自选的 OpenAI 兼容或 Gemini 图像接口生成、编辑图片,直接保存到项目目录。

GitHub 项目:[yuluo688/gen-image-mcp](https://github.com/yuluo688/gen-image-mcp) | 已登记 [官方 MCP Registry](https://registry.modelcontextprotocol.io/v0/servers?search=io.github.yuluo688%2Fgen-image-mcp)

## 为什么使用它

- **直接写入本地项目**:生成或编辑的图片保存到调用 MCP 的机器,可立即被代码仓库引用。
- **使用自己的上游服务**:自行配置 API 地址、Key 和模型,不依赖本服务托管模型。
- **失败自动恢复**:可按配置顺序重试容量或限流错误,并切换到后续模型。
- **覆盖完整图片流程**:支持文生图、本地参考图生成和图片编辑,并返回预览与资源链接。

## 使用前准备

- 安装 Node.js,建议使用 Node.js 24 LTS;服务最低要求为 20。
- 准备支持对应图像接口的服务地址、API Key 和模型名称。
- 使用支持 stdio 的 MCP 客户端。

本服务没有内置地址、Key 或模型。缺少必填配置会拒绝启动,也不会自动读取 `.env` 文件。

## 通过 npx 使用

包名:[`gen-image-mcp`](https://www.npmjs.com/package/gen-image-mcp)。

用户无需克隆源码、手动安装项目依赖或编译。`npx` 会自动下载并缓存 npm 包,再在本机启动服务;它不是远程托管服务。

在 MCP 客户端中添加一个 stdio 服务,启动命令与参数为:

```text
命令:npx
参数:-y gen-image-mcp
```

下面是使用 `mcpServers`、`command`、`args`、`env` 字段的通用配置示例。不同客户端的配置结构可能不同,对应填入启动命令、参数和环境变量即可。

```json
{
  "mcpServers": {
    "gen-image": {
      "command": "npx",
      "args": ["-y", "gen-image-mcp"],
      "env": {
        "GEN_IMAGE_BASE_URL": "https://your-proxy.example",
        "GEN_IMAGE_API_KEY": "your-api-key",
        "GEN_IMAGE_MODEL": "images-model-a,images-model-b",
        "GEN_IMAGE_GEMINI_MODEL": "gemini-image-model-a",
        "GEN_IMAGE_AUTO_FALLBACK": "true"
      }
    }
  }
}
```

将示例地址、Key 和模型替换为实际值。两组模型至少配置一组;不使用的组应删除对应环境变量,不要填写空字符串。图片读写发生在启动此 MCP 的机器上,建议使用绝对路径。

配置完成后,连接或重启该 MCP 服务,客户端应能发现四个工具。直接在终端启动时,服务会等待标准输入中的 MCP 消息,不会打开网页或交互式命令菜单。

生产使用建议将参数中的包名固定为已发布版本,例如 `gen-image-mcp@<version>`,避免升级时行为变化。首次运行需要能够访问 npm 仓库。

### 命令行参数

也可以把非敏感配置放在启动参数中。以下命令要求已通过进程环境设置 `GEN_IMAGE_API_KEY`:

```bash
npx -y gen-image-mcp --base-url "https://your-proxy.example" --model "images-model-a,images-model-b" --auto-fallback true
```

API Key 建议通过 MCP 客户端的环境变量配置传入,避免出现在命令历史和进程参数中。

## 配置项

命令行参数优先于环境变量。

| 环境变量 | 命令行参数 | 说明 |
| --- | --- | --- |
| `GEN_IMAGE_BASE_URL` | `--base-url` | 必填,完整 HTTP/HTTPS 根地址;不含认证信息、查询参数和片段,不要填写具体图像端点 |
| `GEN_IMAGE_API_KEY` | `--api-key` | 必填,非空 API Key |
| `GEN_IMAGE_MODEL` | `--model` | Images 模型列表,逗号分隔,按顺序使用 |
| `GEN_IMAGE_GEMINI_MODEL` | `--gemini-model` | Gemini 图像模型列表,逗号分隔,按顺序使用 |
| `GEN_IMAGE_AUTO_FALLBACK` | `--auto-fallback` | `true` 或 `false`,默认 `false` |
| `GEN_IMAGE_TIMEOUT_MS` | `--timeout-ms` | 单次上游请求超时,默认 `120000` 毫秒;正整数,最大 `2147483647` |

模型名称不能重复,也不能包含空项。URL、Key 或配置值无效时直接报错,不会替换成默认服务或模型。

### 模型选择与失败切换

- 未指定工具参数 `model` 时,使用对应组的第一个模型。
- `model` 只能指定该组已经配置的模型。
- 开启自动切换后,上游 HTTP 错误、网络错误、超时或无有效图片会触发下一模型。
- 显式指定模型时,从该项开始,只向后尝试;不会绕回列表开头。
- 明确的容量不足或限流(含外层 500 包裹内层 503 / no capacity)会先对同一模型做有限退避重试(默认最多额外 2 次,并尊重有上界的 `Retry-After`);超时、网络、鉴权、内容策略等错误不重试。
- 非上述可重试错误,或同模型重试仍失败后,才按开关切换下一模型;成功即停止,全部失败返回最后一个模型的结构化错误(保留 HTTP 状态与类别)。
- 每次调用重新从第一项或指定模型开始,不永久改变模型顺序。
- 单次调用参数 `auto_fallback` 可覆盖全局开关;设为 `false` 时只尝试当前模型(仍可对容量/限流做同模型重试)。
- 参数错误、本地图片读取错误和保存失败不触发模型切换。
- 两组模型不会跨接口切换。未配置某组时,其对应工具返回错误。

客户端的请求超时应为每个模型最多 3 次请求及两次退避等待留出余量;开启切换时还需乘以最多尝试的模型数,并考虑文件读写时间。无 `Retry-After` 时默认等待 400ms、800ms,单次等待最多 5 秒。普通 503 不视为明确容量不足。多次上游请求可能产生额外费用。

## 工具调用

以下 JSON 是工具参数,不是终端命令。三个生图/编辑工具都要求 `prompt` 和 `output_path`;示例省略 `model`,使用对应组第一个模型。`list_models` 无需参数。

| 工具 | 用途 | 上游端点 |
| --- | --- | --- |
| `list_models` | 查询已配置模型、所属接口组、默认模型和对应工具 | 无网络请求 |
| `generate_image` | 文本生成图片 | `POST /v1/images/generations` |
| `edit_image` | 编辑或合并本地图片 | `POST /v1/images/edits` |
| `generate_gemini_image` | Gemini 文生图或参考图生成 | `POST /v1/chat/completions` |

### generate_image

```json
{
  "prompt": "白色桌面上的红色立方体,柔和自然光",
  "output_path": "exports/cube.png",
  "size": "1024x1024",
  "quality": "high",
  "n": 1,
  "output_format": "png",
  "auto_fallback": true
}
```

可选参数:`filename`、`model`、`size`、`quality`、`n`、`output_format`、`auto_fallback`。`size` 默认 `auto`;`n` 为 1–4,默认 1;`quality` 可取 `low`、`medium`、`high`、`auto`;`output_format` 可取 `png`、`jpeg`、`webp`,省略时由上游决定。

### edit_image

```json
{
  "prompt": "将天空改为日落,保留建筑细节",
  "output_path": "exports/edited.png",
  "images": ["inputs/photo.png"],
  "auto_fallback": true
}
```

`images` 必填,包含 1–16 个本地图片路径。可选参数:`filename`、`mask`(本地蒙版路径)、`model`、`size`、`quality`、`auto_fallback`。蒙版和编辑能力取决于上游模型。

### generate_gemini_image

```json
{
  "prompt": "将这张草图转为水彩画",
  "output_path": "exports/watercolor.png",
  "images": ["inputs/sketch.png"],
  "aspect_ratio": "16:9",
  "auto_fallback": false
}
```

省略 `images` 即为纯文生图。可选参数:`filename`、`images`、`model`、`aspect_ratio`、`auto_fallback`。

支持的宽高比:`1:1`、`2:3`、`3:2`、`3:4`、`4:3`、`4:5`、`5:4`、`9:16`、`16:9`、`21:9`。

### list_models

调用参数为 `{}`。返回文本和 `structuredContent`,包含按配置顺序排列的 `groups`:每组有 `api`(`images` 或 `gemini`)、`models`、`default_model` 和 `tools`。未配置的组返回空列表及 `default_model: null`;顶层 `auto_fallback` 表示全局切换设置。

此工具只读取本地配置,不发网络请求、不返回 API Key 或服务地址。`availability_checked: false` 明确表示没有检查模型当前是否可用。

### AI 文件命名

由调用方 AI 根据主题填写可选 `filename`,服务本身不额外调用模型命名。三个生图/编辑工具均支持:

```json
{
  "prompt": "夕阳花园中的优雅成年女性人像,自然光摄影",
  "output_path": "exports/",
  "filename": "夕阳花园人像.png",
  "n": 1
}
```

`filename` 是单个文件名,不是路径,可包含中文,扩展名可省略,最终后缀以实际图片格式为准。名称最多 200 个 UTF-8 字节,为序号和后缀预留空间。提供该参数时 `output_path` 必须为目录;空名称、路径分隔符、Windows 保留名称等无效输入会在生图请求前拒绝。

同名输出通过独占创建和递增序号防覆盖,例如 `夕阳花园人像.png`、`夕阳花园人像-2.png`、`夕阳花园人像-3.png`,最多尝试 1000 个候选名称。多图输出先添加图片序号,再处理已有文件冲突。不传 `filename` 时保持原有命名方式。

## 文件与输出

- 输入和输出的相对路径均相对于 MCP 进程工作目录,而不是 npm 缓存或包安装目录;不确定工作目录时使用绝对路径。
- `output_path` 以 `/` 或 `\` 结尾、指向现有目录,或没有受支持的图片扩展名时,按目录处理。
- 未指定 `filename` 时,目录输出命名为 `{slug}-{YYYYMMDD-HHmmss}-{随机UUID}[-序号].扩展名`;纯中文提示词的 slug 为 `image`,时间戳使用本地时间。
- 文件输出保留指定基名;多张图片插入 `-1`、`-2` 等序号,扩展名以实际图片格式为准。
- 缺少的父目录会自动创建。直接将 `output_path` 设为文件时仍覆盖,不备份;目录输出采用独占创建,不覆盖已有文件。使用 `filename` 时自动尝试序号后缀,其他目录输出遇到碰撞则报错。
- 最多输入 16 张图片,每个本地输入文件最多 50 MiB。
- 图片响应只接受可识别的 PNG、JPEG、WebP、GIF Base64 或 data URL,不会自动下载上游返回的普通远程 URL。

### 返回内容

成功时依次返回:

1. 保存路径和 `gen-image:///<id>` 资源 URI 的文本。
2. 第一张图片的内联预览,仅在其解码大小不超过 2 MiB 时附带。
3. 每张图片的 `resource_link`。

三个生图/编辑工具还返回 `structuredContent`,便于客户端直接处理,不必解析文本路径:

| 字段 | 含义 |
| --- | --- |
| `images` | 文件列表,每项包含 `path`、`name`、`mime_type`、`byte_size`、`uri`,不重复携带图片 Base64 |
| `model` | 实际成功的模型;失败时为最后尝试的模型,没有上游尝试时为 `null` |
| `elapsed_ms` | 总耗时,包含重试等待与文件保存 |
| `attempt_count` | 上游尝试次数,不计生图前的本地校验失败 |
| `retry_count` | 同一模型连续再次尝试的次数,不把切换模型算作重试 |
| `model_switches` | 按顺序记录模型切换,每项为 `from`、`to` |
| `attempts` | 每次尝试的 `model`、`outcome`、`elapsed_ms`;上游失败时可含 `error_category`、`http_status` |

执行失败时保留 `isError: true` 和错误文本,并返回上述摘要、空 `images` 及 `error`。SDK 输入 schema 校验失败发生在执行前,不保证附带执行摘要。摘要不额外记录提示词、密钥或完整请求/响应正文,也不新增历史数据库。

客户端可以通过 `resources/list` 列出当前服务实例保存的图片,再用 `resources/read` 读取完整 Base64 内容;资源读取不受 2 MiB 预览限制。服务重启后资源列表清空,但已经保存的文件不会删除。

工具失败返回 `isError: true` 和错误文本。stdout 仅用于 MCP 协议,日志写入 stderr。

## 常见问题

**npx 提示找不到包**

检查包名、版本和 npm 仓库地址。可运行 `npm view gen-image-mcp version --registry=https://registry.npmjs.org` 查询公共仓库中的版本;第三方镜像可能存在同步延迟。

**提示配置缺失或没有可用模型**

检查 MCP 进程是否收到 URL、Key 和至少一组模型环境变量。只配置 Gemini 模型时,请使用 `generate_gemini_image`;只配置 Images 模型时,请使用 `generate_image` 或 `edit_image`。

**命令启动后没有页面或输出**

这是 stdio MCP 服务,不提供 HTTP 服务或网页。有效配置下,它需要由 MCP 客户端连接并发送协议消息。

**找不到生成的图片**

以工具返回的绝对保存路径为准。使用 `npx` 不会把图片自动保存到 npm 包目录;可以直接指定绝对 `output_path`。

## 开源许可证

本项目采用 [MIT 许可证](./LICENSE),版权归属 `Copyright (c) 2026 yuluo688`。

允许商用、修改和分发,包括闭源使用;须保留版权及许可证声明。软件按原样提供,不作担保。该许可证适用于本项目软件,不替代上游模型服务条款或对生成图片权利的约定。

TDQS

A3.9/5.0

Scored across 4 tools

Disambiguation4/5

Each tool is tied to a specific API/model family: generate_image/edit_image for OpenAI image endpoints, generate_gemini_image for Gemini chat-completions, and list_models for configuration. There is slight functional overlap between generate_gemini_image and generate_image, but the usage rules make selection clear.

Naming Consistency5/5

All tool names follow a consistent snake_case verb_noun pattern: list_models, generate_image, edit_image, generate_gemini_image. The model qualifier in generate_gemini_image is informative rather than inconsistent.

Tool Count5/5

Four tools cover the core image generation and editing workflows plus model discovery. This is a well-scoped set with no redundant or filler tools.

Completeness4/5

The set covers generation and editing for both Gemini and OpenAI image models, plus model listing. Missing image variation functionality is a minor gap, but the main workflows have no dead ends.

Maintenance

ActivityNo data
ResponsivenessNo issues