Skip to main content
Glama
goodmannn

Jimeng AI Image Generator

by goodmannn
README.md
# 即梦AI图像生成 MCP 服务

这是一个基于 [FastMCP](https://github.com/jlowin/fastmcp) 框架的 MCP (Model Context Protocol) 服务,用于调用即梦AI图像生成API。

---

**📚 快速链接:**
- 🚀 [快速开始指南](QUICKSTART.md) - 5分钟快速测试
- 🧪 [测试指南](TESTING.md) - 详细的测试方法说明
- 📖 完整文档(当前页面)

---

## 功能特性

- 🎨 AI图像生成
- 🔄 自动轮询等待生成完成
- 📥 自动下载并保存图片到指定文件夹
- 📝 按顺序命名文件(01.jpg, 02.jpg等)
- 🔧 完整的参数配置(尺寸、模型、提示词等)
- 🔐 安全的token管理
- 📊 详细的响应结果

## 项目结构

```
jimeng-mcp/
├── server.py         # FastMCP服务器主文件
├── service.py        # 图像生成服务核心逻辑
├── header_util.py    # HTTP请求头生成工具
├── requirements.txt  # Python依赖
├── curl.sh          # 原始curl命令参考
└── README.md        # 项目文档
```

## 安装

1. 克隆或下载本项目

2. 安装依赖:
```bash
pip install -r requirements.txt
```

## 配置

设置环境变量 `JIMENG_TOKEN`,这是即梦平台的认证token(sessionid):

```bash
export JIMENG_TOKEN="your_session_id_here"
```

或者在运行时指定:

```bash
JIMENG_TOKEN="your_token" python server.py
```

## 使用方法

### 方式 1: 快速测试(推荐)

使用测试脚本快速验证功能:

```bash
# 1. 设置token
export JIMENG_TOKEN="your_session_id_here"

# 2. 运行测试
python test_client.py

# 3. 查看生成的图片
ls -lh ./test_output/
```

详细测试说明请查看 [TESTING.md](TESTING.md)

### 方式 2: 作为MCP服务使用

#### 在 Claude Desktop 中配置:

编辑配置文件:
- macOS: `~/Library/Application Support/Claude/claude_desktop_config.json`
- Windows: `%APPDATA%\Claude\claude_desktop_config.json`

添加以下配置:

```json
{
  "mcpServers": {
    "jimeng-image-generator": {
      "command": "python",
      "args": ["/absolute/path/to/jimeng-mcp/server.py"],
      "env": {
        "JIMENG_TOKEN": "your_session_id_here"
      }
    }
  }
}
```

重启 Claude Desktop 后即可使用。

### 方式 3: 在代码中直接使用

```python
from service import create_service

token = "your_token"
service = create_service(token)

result = service.generate_image(
    prompt="秋日街道旁的时尚店铺",
    save_folder="./output",
    width=960,
    height=1024
)
print(result)
```

### MCP工具

#### generate_image - 生成图像并保存

生成AI图像,自动轮询等待完成,下载并保存到指定文件夹。

**参数:**
- `prompt` (str, 必需): 图像生成提示词,详细描述要生成的图像内容
- `save_folder` (str, 必需): 图片保存文件夹路径(相对路径或绝对路径)
- `width` (int, 可选): 图像宽度,默认1728
- `height` (int, 可选): 图像高度,默认2304
- `model` (str, 可选): 使用的模型,默认 high_aes_general_v40
- `negative_prompt` (str, 可选): 负面提示词,描述不希望出现的内容
- `sample_strength` (float, 可选): 采样强度(0-1),默认0.5

**示例:**
```python
generate_image(
    prompt="秋日街道旁的时尚店铺,一位长发微卷的亚洲女性站在橱窗边",
    save_folder="./output/autumn_fashion",
    width=960,
    height=1024
)
```

**返回:**
```json
{
  "success": true,
  "submit_id": "9fff4adc-ed58-479c-9d99-5a2fee0bb097",
  "image_urls": [
    "https://...",
    "https://...",
    "https://..."
  ],
  "saved_files": [
    "./output/autumn_fashion/01.jpg",
    "./output/autumn_fashion/02.jpg",
    "./output/autumn_fashion/03.jpg"
  ],
  "total_images": 3,
  "save_folder": "./output/autumn_fashion"
}
```

**工作流程:**
1. 提交图像生成请求
2. 自动轮询等待生成完成(最多3分钟,每3秒轮询一次)
3. 获取生成的图片URL列表
4. 依次下载所有图片
5. 按顺序保存为 01.jpg, 02.jpg, 03.jpg 等

### MCP资源

#### jimeng://config - 查看配置信息

获取当前服务配置信息,包括token状态、默认参数等。

## 图像尺寸建议

根据小红书等平台的推荐尺寸:

- **竖图(15:16)**:1728x2304 或 960x1024 - 推荐用于小红书
- **方图(1:1)**:1024x1024
- **横图(16:9)**:1920x1080

## 服务架构

```
┌─────────────────┐
│   MCP Client    │
│   (Claude等)    │
└────────┬────────┘
         │
         ▼
┌─────────────────┐
│   server.py     │  FastMCP服务器
│   (MCP接口层)    │
└────────┬────────┘
         │
         ▼
┌─────────────────┐
│   service.py    │  业务逻辑层
│                 │  • 图像生成请求
│                 │  • 轮询生成结果
│                 │  • 下载图片
└────────┬────────┘
         │
         ▼
┌─────────────────┐
│  header_util.py │  工具层
│   (签名生成)     │
└────────┬────────┘
         │
         ▼
┌─────────────────┐
│   即梦AI API    │
│  (外部服务)      │
│  • /generate    │
│  • /history     │
└─────────────────┘
```

## 技术细节

### 核心功能

1. **请求签名生成** (`header_util.py`)
   - 动态生成设备ID和WebID
   - 计算请求签名(MD5)
   - 构建完整的HTTP请求头

2. **图像生成服务** (`service.py`)
   - 构建复杂的draft_content JSON结构
   - 处理图像尺寸和比例计算
   - 管理UUID和随机种子生成
   - 封装API调用逻辑
   - **轮询机制**:自动轮询检查生成状态
   - **下载功能**:批量下载并保存图片

3. **MCP服务器** (`server.py`)
   - 使用FastMCP框架
   - 提供标准化的工具接口
   - 环境变量管理
   - 一站式生成和下载流程

### 完整工作流程

1. **提交生成请求**
   - 生成唯一的submit_id、draft_id等UUID
   - 根据prompt和参数构建draft_content
   - 使用header_util生成签名和请求头
   - 发送POST请求到 `/mweb/v1/aigc_draft/generate`

2. **轮询生成结果**
   - 使用submit_id轮询 `/mweb/v1/get_history_by_ids` 接口
   - 每3秒检查一次状态
   - 最多轮询60次(总计3分钟)
   - 状态码:1=生成中, 2=成功, 3=失败

3. **下载图片**
   - 从返回结果中提取图片URL列表
   - 依次下载每张图片
   - 按照顺序命名为 01.jpg, 02.jpg, 03.jpg 等
   - 保存到指定文件夹

4. **返回结果**
   - 返回包含图片URL和本地路径的完整结果

## 开发

### 环境要求

- Python 3.8+
- fastmcp >= 0.1.0
- requests >= 2.31.0

### 测试

直接运行服务器进行测试:

```bash
JIMENG_TOKEN="your_token" python server.py
```

然后使用MCP客户端(如Claude Desktop)连接测试。

## 故障排查

### Token未设置

**错误:** `JIMENG_TOKEN环境变量未设置`

**解决:** 确保设置了环境变量:
```bash
export JIMENG_TOKEN="your_session_id"
```

### API请求失败

**可能原因:**
1. Token过期或无效
2. 网络连接问题
3. API参数错误

**解决:**
1. 检查token是否有效
2. 确认网络连接
3. 查看详细错误信息

## 注意事项

⚠️ **重要提示:**

1. **Token安全**:请勿在代码中硬编码token,使用环境变量
2. **请求频率**:遵守API的调用频率限制
3. **提示词质量**:更详细的提示词能生成更好的图像
4. **图像尺寸**:确保宽高比符合需求
5. **轮询超时**:图像生成最多等待3分钟,超时将返回错误
6. **文件命名**:图片自动按顺序命名(01.jpg, 02.jpg等),不会覆盖现有文件
7. **网络稳定性**:确保网络连接稳定,下载大图片可能需要时间

## 许可证

本项目仅供学习和研究使用。

## 相关链接

- [FastMCP 文档](https://github.com/jlowin/fastmcp)
- [MCP 协议说明](https://modelcontextprotocol.io/)
- 即梦AI官网: https://jimeng.jianying.com