Grok Image MCP
by fl0w1nd
README.md
# Grok Image MCP
[English](#english) | [中文](#中文)
---
<a id="english"></a>
An MCP (Model Context Protocol) server for image generation and editing using the [Grok](https://docs.x.ai/developers/model-capabilities/images/generation) image model from xAI.
> **Note**: This package was previously published as [`grok2-image-mcp-server`](https://www.npmjs.com/package/grok2-image-mcp-server). That package is now deprecated — please use `grok-image-mcp` instead.
## Features
- **Image Generation** — Generate images from text prompts with configurable aspect ratio, resolution, and batch count
- **Image Editing** — Edit existing images with natural language instructions, supporting 1–3 source images
- **Local File Support** — Provide local image paths for editing; the server reads and encodes them automatically
- **Image Proxy** — Optional proxy domain for `imgen.x.ai` to handle network restrictions
- **HTTP Proxy** — Optional network proxy for API requests
## Installation
### Using npx (recommended)
```json
{
"mcpServers": {
"grok_image": {
"command": "npx",
"args": ["grok-image-mcp"],
"env": {
"XAIAPI_KEY": "your-xai-api-key"
}
}
}
}
```
## Tools
### `generate_image`
Generate images from text prompts.
| Parameter | Type | Required | Description |
|---|---|---|---|
| `prompt` | string | ✅ | Text description of the image to generate |
| `n` | number | | Number of images (1–10, default 1) |
| `aspect_ratio` | string | | Aspect ratio (`1:1`, `16:9`, `9:16`, `4:3`, `3:4`, `3:2`, `2:3`, `2:1`, `1:2`, `auto`, etc.) |
| `resolution` | string | | Resolution (`1k` or `2k`, default 1k) |
### `edit_image`
Edit existing images using a text prompt.
| Parameter | Type | Required | Description |
|---|---|---|---|
| `prompt` | string | ✅ | Text description of the desired edits |
| `image_urls` | string[] | ✅ | 1–3 source images: URLs, base64 data URIs, or local file paths |
| `n` | number | | Number of output images (1–10, default 1) |
| `aspect_ratio` | string | | Override output aspect ratio (default: follows first input image) |
| `resolution` | string | | Resolution (`1k` or `2k`, default 1k) |
## Environment Variables
| Variable | Required | Description |
|---|---|---|
| `XAIAPI_KEY` | ✅ | xAI API key |
| `XAIAPI_BASE_URL` | | API base URL (default: `https://api.x.ai/v1`). Use a proxy if the API is inaccessible |
| `IMAGE_PROXY_DOMAIN` | | Proxy domain to replace `imgen.x.ai` in returned image URLs |
| `HTTP_PROXY` | | HTTP/HTTPS proxy for API requests (e.g. `http://127.0.0.1:7890`) |
### Proxy Examples
**API proxy**:
```bash
XAIAPI_BASE_URL=https://api-proxy.me/xai/v1
```
**Image proxy**:
```bash
IMAGE_PROXY_DOMAIN=https://image.proxy.workers.dev
```
**Network proxy**:
```bash
HTTP_PROXY=http://127.0.0.1:7890
```
### Using Cloudflare Workers to Proxy Image URLs
If image URLs from `imgen.x.ai` are inaccessible, deploy a Cloudflare Worker as a reverse proxy and set `IMAGE_PROXY_DOMAIN` to your custom domain:
```js
addEventListener('fetch', event => {
event.respondWith(handleRequest(event.request))
})
const TARGET_DOMAIN = 'imgen.x.ai'
async function handleRequest(request) {
const url = new URL(request.url)
const targetUrl = `https://${TARGET_DOMAIN}${url.pathname}${url.search}`
const init = {
method: request.method,
headers: request.headers,
body: request.method === 'GET' || request.method === 'HEAD' ? undefined : request.body,
redirect: 'follow'
}
const response = await fetch(targetUrl, init)
const newHeaders = new Headers(response.headers)
newHeaders.set('Access-Control-Allow-Origin', '*')
return new Response(response.body, {
status: response.status,
statusText: response.statusText,
headers: newHeaders
})
}
```
## License
MIT
---
<a id="中文"></a>
基于 [MCP](https://modelcontextprotocol.io/) 协议的 [Grok](https://docs.x.ai/developers/model-capabilities/images/generation) 图像生成与编辑服务。
> **注意**: 此包的前身是 [`grok2-image-mcp-server`](https://www.npmjs.com/package/grok2-image-mcp-server),该包已弃用,请使用 `grok-image-mcp`。
## 功能
- **图像生成** — 通过文本提示生成图像,可配置宽高比、分辨率和批量数量
- **图像编辑** — 使用自然语言编辑现有图像,支持 1–3 张源图
- **本地文件支持** — 可提供本地图片路径进行编辑,服务端自动读取并编码
- **图片代理** — 可选代理域名替换 `imgen.x.ai`,解决网络访问问题
- **网络代理** — 支持 HTTP/HTTPS 代理
## 安装
### 使用 npx(推荐)
```json
{
"mcpServers": {
"grok_image": {
"command": "npx",
"args": ["grok-image-mcp"],
"env": {
"XAIAPI_KEY": "你的 xAI API 密钥"
}
}
}
}
```
## 工具
### `generate_image`
通过文本提示生成图像。
| 参数 | 类型 | 必填 | 说明 |
|---|---|---|---|
| `prompt` | string | ✅ | 描述要生成的图像内容 |
| `n` | number | | 生成数量(1–10,默认 1) |
| `aspect_ratio` | string | | 宽高比(`1:1`、`16:9`、`9:16`、`4:3`、`3:4`、`3:2`、`2:3`、`2:1`、`1:2`、`auto` 等) |
| `resolution` | string | | 分辨率(`1k` 或 `2k`,默认 1k) |
### `edit_image`
使用文本提示编辑现有图像。
| 参数 | 类型 | 必填 | 说明 |
|---|---|---|---|
| `prompt` | string | ✅ | 描述所需的编辑内容 |
| `image_urls` | string[] | ✅ | 1–3 张源图:URL、base64 data URI 或本地文件路径 |
| `n` | number | | 输出图像数量(1–10,默认 1) |
| `aspect_ratio` | string | | 覆盖输出宽高比(默认跟随第一张输入图) |
| `resolution` | string | | 分辨率(`1k` 或 `2k`,默认 1k) |
## 环境变量
| 变量 | 必填 | 说明 |
|---|---|---|
| `XAIAPI_KEY` | ✅ | xAI API 密钥 |
| `XAIAPI_BASE_URL` | | API 基础地址(默认 `https://api.x.ai/v1`),可填写代理地址 |
| `IMAGE_PROXY_DOMAIN` | | 图片代理域名,替换返回 URL 中的 `imgen.x.ai` |
| `HTTP_PROXY` | | HTTP/HTTPS 网络代理地址(如 `http://127.0.0.1:7890`) |
### 代理示例
**API 代理**:
```bash
XAIAPI_BASE_URL=https://api-proxy.me/xai/v1
```
**图片代理**:
```bash
IMAGE_PROXY_DOMAIN=https://image.proxy.workers.dev
```
**网络代理**:
```bash
HTTP_PROXY=http://127.0.0.1:7890
```
### 使用 Cloudflare Workers 代理图片 URL
如果 `imgen.x.ai` 的图片无法访问,可部署 Cloudflare Worker 反向代理,然后将 `IMAGE_PROXY_DOMAIN` 设为你的自定义域名:
```js
addEventListener('fetch', event => {
event.respondWith(handleRequest(event.request))
})
const TARGET_DOMAIN = 'imgen.x.ai'
async function handleRequest(request) {
const url = new URL(request.url)
const targetUrl = `https://${TARGET_DOMAIN}${url.pathname}${url.search}`
const init = {
method: request.method,
headers: request.headers,
body: request.method === 'GET' || request.method === 'HEAD' ? undefined : request.body,
redirect: 'follow'
}
const response = await fetch(targetUrl, init)
const newHeaders = new Headers(response.headers)
newHeaders.set('Access-Control-Allow-Origin', '*')
return new Response(response.body, {
status: response.status,
statusText: response.statusText,
headers: newHeaders
})
}
```
## 许可证
MIT
TDQS
A4.2/5.0
Scored across 2 tools
Disambiguation5/5
The two tools have clearly distinct purposes: one generates new images from text, the other edits existing images. There is no overlap or confusion.
Naming Consistency5/5
Both tools follow a consistent verb_noun pattern in snake_case (edit_image, generate_image), making the naming predictable and clear.
Tool Count4/5
With only two tools, the server is minimal but covers the core operations of image generation and editing. The count is slightly low but reasonable for a focused purpose.
Completeness5/5
The server provides the essential operations for an image generation and editing tool: creating new images from prompts and editing existing images. No obvious gaps are present for its stated purpose.
Maintenance
ActivityInactive
ResponsivenessNo issues