ms-image-gen-mcp
by bozoyan
README.md
# ms-image-gen-mcp(本地修改版)
基于 PyPI 包 [`ms-image-gen-mcp`](https://pypi.org/project/ms-image-gen-mcp/) v1.3.0 的本地修改版本,新增了 `loras` 参数,支持通过 ModelScope API-Inference 调用 LoRA 模型生图。
## 目录结构
```
~/mcp-local/ms-image-gen-mcp/
├── README.md # 本文档
├── pyproject.toml # 备用打包配置(当前未使用)
└── ms_image_gen_mcp/ # 包源码(修改版)
├── __init__.py # 入口:导出 mcp 实例和 main()
├── __main__.py # python -m 方式运行入口
└── server.py # MCP 工具定义(核心修改文件)
```
## 本地修改内容
对比原版 v1.3.0,有三处改动(均在 `ms_image_gen_mcp/server.py`):
### 1. `text_to_image` 和 `text_image_to_image` 新增 `loras` 参数 ⭐
- 类型:可选字符串(`str | None`),默认不传
- 行为(2026-09-11 修正):不传时 payload **不携带** `loras` 字段,仅显式传入时才发送
- 背景:ModelScope API-Inference 支持将 LoRA 模型 ID 直接作为调用对象,平台会自动加载 LoRA 所需的基础模型(参考[官方文章](https://modelscope.cn/learn/2577))
- ⚠️ 修正原因:旧逻辑不传时把 `loras` 填成 `model` 值,图生图编辑模型(FireRed-Image-Edit、FLUX.1-Kontext 等)会因被当作 LoRA 加载而任务失败(实测去掉该字段后任务正常)
### 2. `text_image_to_image` 支持本地图片路径
- `image_url` 传入本地文件路径时,自动转为 base64 data URL 提交
- 图片最大边超过 2048px 时自动等比缩小(API 限制),依赖 Pillow
- 公网 URL 原样透传,行为不变
请求体示例:
```json
{
"model": "xxx/xxx-lora",
"prompt": "描述文本",
"loras": "xxx/xxx-lora",
"negative_prompt": "...",
"size": "1536x1536",
"seed": 12345,
"steps": 8,
"guidance": 1
}
```
请求体示例:
```json
{
"model": "xxx/xxx-lora",
"prompt": "描述文本",
"loras": "xxx/xxx-lora",
"negative_prompt": "...",
"size": "1536x1536",
"seed": 12345,
"steps": 30,
"guidance": 34
}
```
## 提供的工具
### 1. text_to_image — 文生图
| 参数 | 类型 | 默认值 | 说明 |
|------|------|--------|------|
| description | string | 必填 | 图片描述(提示词) |
| model | string | `bozoyan/k-yanbo` | 模型 ID |
| negative_prompt | string | 通用负面词 | 负面提示词 |
| size | string | `960x1664` | 图片尺寸 |
| seed | int | `12345` | 随机种子 |
| steps | int | `8` | 推理步数 |
| guidance | float | `1` | 引导系数 |
| **loras** ⭐ | string \| null | 不传时等于 model | LoRA 模型 ID(本地新增) |
### 2. text_image_to_image — 图生图
同上参数,另加 `image_url`(必填,参考图的公网 URL **或本地文件路径**,本地路径自动转 base64 data URL 并限制最大边 2048px),`model` 默认为 `FireRedTeam/FireRed-Image-Edit-1.1`(文档字符串中标注的 FLUX.1-Kontext-dev 为可选编辑模型)。
### 3. search_models — 模型搜索
按关键词搜索 ModelScope 上的模型,可用 `task="text-to-image"` 和 `libraries="LoRA"` 过滤。
## 配置方式
本机 `~/.claude.json` 中的配置:
```json
{
"mcpServers": {
"modelscope-image-gen-mcp": {
"command": "uvx",
"args": [
"--from", "ms_image_gen_mcp",
"--with", "mcp<2",
"--with", "pillow",
"python", "-c",
"import sys; sys.path.insert(0, '/Users/yons/mcp-local/ms-image-gen-mcp'); from ms_image_gen_mcp import main; main()"
],
"env": {
"MODELSCOPE_API_KEY": "ms-xxxx"
}
}
}
}
```
### 加载原理
- `uvx --from ms_image_gen_mcp` 仍从 PyPI 安装原版包,提供 `mcp`、`requests` 等依赖环境(走本地 uv 缓存,无需联网)
- 启动脚本通过 `sys.path.insert(0, ...)` 把本地修改目录插到搜索路径最前面,**覆盖**原版 `ms_image_gen_mcp` 模块,从而加载修改版代码
- 这种方式规避了本地包构建(本机访问 PyPI 构建后端受限)
## 环境要求与注意事项
- **API Key**:需要 ModelScope API Token([获取地址](https://modelscope.cn/my/myAccessToken)),通过环境变量 `MODELSCOPE_API_KEY` 传入
- **Python >= 3.12**(uvx 自动处理)
- 修改 `server.py` 后需**重启 Claude Code**(或 `/mcp` 重连)才能生效
- 原配置备份:`~/.claude.json.bak-mcp-loras`
- 若 PyPI 原版包升级,本地修改仍会生效(因为 `sys.path` 优先加载本地目录),但需留意新版 API 是否有变化
## 调用示例
在 Claude Code 中:
```
帮我用 text_to_image 生成一张图,model 用 "xxx/xxx-lora"(LoRA 模型 ID)
```
`loras` 参数不指定时会自动与 `model` 保持一致;也可显式指定不同的 LoRA ID。
This server cannot be deployed
Maintenance
ActivityMaintained
ResponsivenessNo issues