z_ai_image_gen_mcp
# Z.AI Image & Video Generation MCP Server
A [Model Context Protocol (MCP)](https://modelcontextprotocol.io/) server that provides access to Z.AI's image and video generation models for LLM applications.
## Features
- **Image Generation**: GLM-Image and CogView-4 models for high-quality image generation
- **Video Generation**: CogVideoX-3, Vidu Q1, and Vidu 2 models for AI video creation
- **Multiple Input Modes**: Text-to-image/video, image-to-video, start-end frame animation
- **Asynchronous Processing**: Submit long-running tasks and poll for results
- **Automatic Downloads**: Generate and download in a single operation
- **Automatic Retries**: Built-in retry logic with exponential backoff
- **Comprehensive Validation**: Input validation with clear error messages
- **Type-Safe**: Full TypeScript support with detailed type definitions
## Installation
```bash
npm install z-ai-image-mcp
```
## Configuration
Set your Z.AI API key as an environment variable:
```bash
export ZAI_API_KEY=your_api_key_here
```
Get your API key from the [Z.AI API Keys page](https://z.ai/manage-apikey/apikey-list) or sign up for the [GLM Coding Plan](https://z.ai/subscribe?ic=E7H8IV5TXG).
### Optional Configuration
| Environment Variable | Description | Default |
|---------------------|-------------|---------|
| `ZAI_API_BASE_URL` | API base URL | `https://api.z.ai/api` |
| `ZAI_DEFAULT_MODEL` | Default model | `glm-image` |
| `ZAI_DEFAULT_SIZE` | Default image size | `1280x1280` |
| `ZAI_REQUEST_TIMEOUT` | Request timeout (ms) | `60000` |
| `ZAI_MAX_RETRIES` | Max retry attempts | `3` |
| `ZAI_RETRY_DELAY` | Initial retry delay (ms) | `1000` |
## Usage
### With Claude Desktop
Add to your Claude Desktop configuration (`~/Library/Application Support/Claude/claude_desktop_config.json` on macOS):
```json
{
"mcpServers": {
"z-ai-image": {
"command": "npx",
"args": ["z-ai-image-mcp"],
"env": {
"ZAI_API_KEY": "your_api_key_here"
}
}
}
}
```
### With Other MCP Clients
Run the server directly:
```bash
npx z-ai-image-mcp
```
Or programmatically:
```typescript
import { createServer, loadConfig } from 'z-ai-image-mcp';
const config = loadConfig();
const server = createServer(config);
// Connect to your transport...
```
### With OpenCode
Add to your OpenCode configuration (`opencode.json` or `opencode.jsonc` in your project root):
```json
{
"$schema": "https://opencode.ai/config.json",
"mcp": {
"z-ai-image": {
"type": "local",
"command": ["npx", "z-ai-image-mcp"],
"enabled": true,
"environment": {
"ZAI_API_KEY": "your_api_key_here"
}
}
}
}
```
Or using an environment variable reference:
```json
{
"$schema": "https://opencode.ai/config.json",
"mcp": {
"z-ai-image": {
"type": "local",
"command": ["npx", "z-ai-image-mcp"],
"enabled": true,
"environment": {
"ZAI_API_KEY": "{env:ZAI_API_KEY}"
}
}
}
}
```
**Using with OpenCode prompts:**
```
Generate a professional logo for a tech startup. use z-ai-image
```
Or add to your `AGENTS.md`:
```markdown
When generating images, use the `z-ai-image` MCP server tools.
```
**Per-agent configuration (optional):**
To enable the MCP server only for specific agents:
```json
{
"$schema": "https://opencode.ai/config.json",
"mcp": {
"z-ai-image": {
"type": "local",
"command": ["npx", "z-ai-image-mcp"],
"enabled": true,
"environment": {
"ZAI_API_KEY": "{env:ZAI_API_KEY}"
}
}
},
"tools": {
"z-ai-image*": false
},
"agent": {
"design-agent": {
"tools": {
"z-ai-image*": true
}
}
}
}
```
## Available Tools
### 1. `list_models`
List all available image generation models and their capabilities.
```
Use this tool to discover available models, their features, and recommended settings.
```
### 2. `generate_image`
Generate an image synchronously from a text prompt.
**Parameters:**
- `prompt` (required): Text description of the image (max 4000 characters)
- `model` (optional): `glm-image` or `cogview-4-250304` (default: `glm-image`)
- `size` (optional): Image dimensions, e.g., `1280x1280` (default: `1280x1280`)
- `quality` (optional): `hd` or `standard` (default: `hd` for GLM-Image)
- `user_id` (optional): End user ID for abuse prevention (6-128 characters)
**Example:**
```
Generate an image of a cute kitten sitting on a windowsill with a sunset background.
```
### 3. `generate_image_async`
Start an asynchronous image generation task. Returns a task ID for polling.
**Parameters:**
- `prompt` (required): Text description of the image
- `model` (optional): Only `glm-image` supports async (default: `glm-image`)
- `size` (optional): Image dimensions (default: `1280x1280`)
- `quality` (optional): Only `hd` supported for async (default: `hd`)
- `user_id` (optional): End user ID for abuse prevention
**Example:**
```
Start async generation of a complex poster design.
```
### 4. `get_async_result`
Retrieve the result of an asynchronous image generation task.
**Parameters:**
- `task_id` (required): The task ID from `generate_image_async`
**Example:**
```
Check the status of task ID "task-12345".
```
### 5. `download_image`
Download an image from a URL and return it as base64 or save to a file.
**Parameters:**
- `url` (required): The URL of the image to download (e.g., from `generate_image` or `get_async_result`)
- `output` (optional): `base64` or `file_output` (default: `base64`)
- `file_output` (optional): Absolute path to save the image file (required if output is `file_output`). Example: `/path/to/image.png`
**Output Modes:**
- `base64`: Returns the image data directly as base64 (auto-switches to file if > 1MB)
- `file_output`: Saves the image to disk at the specified path
**Example:**
```
Download the generated image and save it to /home/user/images/logo.png
```
> **Note:** Z.AI image URLs expire after 30 days. Use this tool to download and store images permanently.
### 6. `generate_and_download_image` ⭐ Recommended
Generate an image and automatically download it in a single operation. This is the most convenient tool when you want the image data immediately.
**Parameters:**
- `prompt` (required): Text description of the image (max 4000 characters)
- `model` (optional): `glm-image` or `cogview-4-250304` (default: `glm-image`)
- `size` (optional): Image dimensions, e.g., `1280x1280` (default: `1280x1280`)
- `quality` (optional): `hd` or `standard` (default: `hd` for GLM-Image)
- `user_id` (optional): End user ID for abuse prevention (6-128 characters)
- `output` (optional): `base64` or `file_output` (default: `base64`)
- `file_output` (optional): Absolute path to save the image file (required if output is `file_output`)
- `poll_interval` (optional): Seconds to wait between polling for async results (default: 3)
- `max_wait` (optional): Maximum seconds to wait for generation (default: 120)
**Output Modes:**
- `base64`: Returns the image data directly as base64 (auto-switches to file if > 1MB)
- `file_output`: Saves the image to disk at the specified path
**Examples:**
```
# Generate and get as base64
Generate a logo for my company and show me the image.
# Generate and save to file
Generate a logo and save it to /home/user/images/logo.png
```
**Behavior:**
- For GLM-Image: Uses async API with automatic polling until complete
- For CogView-4: Uses synchronous API
- Automatically downloads the result once generation completes
- Returns image as base64 or saves to specified path
---
## Video Generation Tools
### 7. `list_video_models`
List all available video generation models and their capabilities.
```
Use this tool to discover available video models, their features, and supported parameters.
```
### 8. `generate_video`
Generate a video asynchronously from text or images. Returns a task ID for polling.
**Parameters:**
- `model` (required): Video generation model
- `cogvideox-3`: Z.AI flagship model (up to 4K, 5-10s, audio support)
- `viduq1-text`: Text-to-video, 1080P, 5s
- `viduq1-image`: Image-to-video, 1080P, 5s
- `viduq1-start-end`: Start-end frame, 1080P, 5s
- `vidu2-image`: Image-to-video, 720P, 4s (faster, cheaper)
- `vidu2-start-end`: Start-end frame, 720P, 4s
- `vidu2-reference`: Reference-based, 720P, 4s
- `prompt` (optional): Text description (max 512 characters)
- `image_url` (optional): Image URL(s) for image-to-video generation
- `quality` (CogVideoX-3): `quality` or `speed`
- `size` (optional): Video resolution
- `duration` (optional): Video duration in seconds
- `fps` (CogVideoX-3): 30 or 60
- `with_audio` (optional): Generate AI sound effects
- `style` (Vidu Q1 text): `general` or `anime`
- `aspect_ratio` (Vidu Q1/2): `16:9`, `9:16`, or `1:1`
- `movement_amplitude` (Vidu): `auto`, `small`, `medium`, or `large`
- `user_id` (optional): End user ID for abuse prevention
**Examples:**
```
# Text-to-video
Generate a video of a cat playing with a ball.
# Image-to-video
Animate this image: [image_url]
# Start-end frame
Create a smooth transition from [first_frame] to [last_frame].
```
### 9. `get_video_result`
Retrieve the result of an asynchronous video generation task.
**Parameters:**
- `task_id` (required): The task ID from `generate_video`
> **Note:** Video generation typically takes 30 seconds to several minutes depending on duration and quality.
### 10. `generate_and_download_video` ⭐ Recommended
Generate a video and automatically download it. Polls for completion and saves the video file.
**Parameters:**
- All parameters from `generate_video` plus:
- `file_output` (optional): Absolute path to save the video file
- `poll_interval` (optional): Seconds to wait between polling (default: 10)
- `max_wait` (optional): Maximum seconds to wait (default: 300)
**Example:**
```
Generate a video of a sunset over the ocean and save it to /home/user/videos/sunset.mp4
```
> **Note:** Videos are always saved to file (too large for base64). Video URLs expire after 1 day.
## Models
### GLM-Image
Z.AI's flagship image generation model with a hybrid autoregressive + diffusion architecture.
- **Best for**: Complex compositions, text rendering, detailed illustrations, commercial posters
- **Quality options**: `hd` (detailed, ~20s), `standard` (faster, ~5-10s)
- **Size range**: 1024-2048px per dimension (divisible by 32)
- **Recommended sizes**: 1280×1280, 1568×1056, 1056×1568, 1472×1088, 1088×1472, 1728×960, 960×1728
- **Async support**: Yes
### CogView-4-250304
General-purpose image generation with fast text understanding.
- **Best for**: General image generation, quick iterations
- **Quality options**: `hd`, `standard`
- **Size range**: 512-2048px per dimension (divisible by 16)
- **Recommended sizes**: 1024×1024, 768×1344, 864×1152, 1344×768, 1152×864, 1440×720, 720×1440
- **Async support**: No
---
## Video Models
### CogVideoX-3
Z.AI's flagship video generation model with improved frame stability and clarity.
- **Best for**: Text-to-video, image-to-video, start-end frame animation
- **Resolution**: Up to 4K (3840x2160)
- **Duration**: 5 or 10 seconds
- **Features**: Audio generation, 30/60 FPS, quality/speed modes
- **Price**: $0.20/video
### Vidu Q1
High-quality video generation with 1080P output.
| Model | Capability | Duration | Price |
|-------|------------|----------|-------|
| `viduq1-text` | Text-to-video | 5s | $0.40 |
| `viduq1-image` | Image-to-video | 5s | $0.40 |
| `viduq1-start-end` | Start-end frame | 5s | $0.40 |
- **Features**: General/anime styles, motion amplitude control
### Vidu 2
Fast and cost-effective video generation with 720P output.
| Model | Capability | Duration | Price |
|-------|------------|----------|-------|
| `vidu2-image` | Image-to-video | 4s | $0.20 |
| `vidu2-start-end` | Start-end frame | 4s | $0.20 |
| `vidu2-reference` | Reference-based | 4s | $0.40 |
- **Features**: Audio generation, motion amplitude control, multi-image reference
## Error Handling
The server handles various error scenarios:
| Error Type | Description |
|-----------|-------------|
| `AUTH_ERROR` | Invalid or missing API key |
| `RATE_LIMIT` | Too many requests - will auto-retry |
| `VALIDATION_ERROR` | Invalid parameters |
| `SERVER_ERROR` | Z.AI server issues - will auto-retry |
| `NETWORK_ERROR` | Connection issues - will auto-retry |
| `TIMEOUT_ERROR` | Request timeout - will auto-retry |
| `CONTENT_FILTER` | Prompt blocked by content policy |
## Development
### Setup
```bash
git clone https://github.com/GeorgH93/z_ai_image_gen_mcp.git
cd z_ai_image_gen_mcp
npm install
cp .env.example .env
# Edit .env with your API key
```
### Scripts
```bash
npm run build # Build TypeScript
npm run dev # Run in development mode
npm test # Run all tests
npm run test:unit # Run unit tests only
npm run test:integration # Run integration tests
npm run test:e2e # Run E2E tests
npm run test:coverage # Run tests with coverage
npm run typecheck # Type check without emit
```
## License
MIT
## Links
- [Z.AI Documentation](https://docs.z.ai/)
- [MCP Documentation](https://modelcontextprotocol.io/)
- [Get API Key](https://z.ai/manage-apikey/apikey-list)
- [GLM Coding Plan](https://z.ai/subscribe?ic=E7H8IV5TXG)
TDQS
Scored across 10 tools
Tools are mostly distinct: image vs video generation, sync vs async, and combined download operations. However, there is some overlap between generate_image_async+get_async_result and generate_image (sync), but descriptions clarify usage.
Names follow a mostly consistent verb_noun pattern (e.g., list_models, generate_image). A minor inconsistency: 'get_async_result' is ambiguous (could be image or video), but the complementary 'get_video_result' helps. Compound names like 'generate_and_download_image' break the pattern slightly.
10 tools cover the core workflows for image and video generation without being excessive. Each tool has a clear purpose, and the number is well-scoped for the domain.
Covers essential operations: model listing, generation (sync/async), result retrieval, and download. Lacks a synchronous video generation option and management tools (e.g., list/cancel tasks), but the main generation pipeline is complete.