Skip to main content
Glama
README.md
# GenImgMCP ๐ŸŽจ

Local **MCP (Model Context Protocol)** server for image generation and editing using the `google/gemini-3.1-flash-image` model via **OpenRouter**.

Designed specifically for **coding agents** (such as Antigravity, Claude Code, Cursor, and other MCP clients), saving images directly to the project's local file system and returning the file path and structured metadata in a lightweight manner (without cluttering the context window with Base64 strings).

---

## โœจ Features

- ๐Ÿ–ผ๏ธ **Image Generation (`generate_image`)**: Create images from detailed text prompts.
- ๐Ÿ–Œ๏ธ **Image Editing and Variations (`edit_image`)**: Transform, refine, or add elements to existing images on disk.
- ๐Ÿ’พ **Automatic Local Saving**: Saves image files directly to the project directory requested by the agent (or in `./generated_images/`).
- โšก **Lightweight & Efficient Response**: Returns only the absolute file path and metadata (size, format, aspect ratio), preserving the caller LLM's context tokens.
- ๐Ÿ“ **Aspect Ratio & Format Control**: Supports multiple aspect ratios (`1:1`, `16:9`, `9:16`, `4:3`, `3:4`, `3:2`, `2:3`, `21:9`) and file formats (`png`, `webp`, `jpeg`).
- ๐Ÿ”„ **Model Flexibility**: Defaults to `google/gemini-3.1-flash-image`, with support for any multimodal model available on OpenRouter.

---

## ๐Ÿš€ Installation and Build

### 1. Prerequisites
- Node.js 18 or higher
- [OpenRouter](https://openrouter.ai/keys) API Key

### 2. Install Dependencies and Build

```bash
# In the project root:
npm install
npm run build
```

---

## โš™๏ธ Configuration

You can configure the API key in one of three ways:

1. **Environment Variable**: Set `OPENROUTER_API_KEY` in your environment.
2. **`.env` File**: Create a `.env` file in the root of the project:
   ```env
   OPENROUTER_API_KEY=sk-or-v1-xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
   DEFAULT_IMAGE_MODEL=google/gemini-3.1-flash-image
   DEFAULT_OUTPUT_DIR=./generated_images
   ```
3. **Command Line Argument**: Pass `--api-key <your_key>` in arguments when starting the server.

---

## ๐Ÿ› ๏ธ Available Tools

### 1. `generate_image`
Generates a new image based on a text prompt.

| Parameter | Type | Required | Description |
| :--- | :--- | :---: | :--- |
| `prompt` | `string` | **Yes** | Detailed description of the image to generate. |
| `output_path` | `string` | No | File path where the image will be saved (e.g., `./assets/banner.png`). |
| `aspect_ratio` | `string` | No | Aspect ratio of the image (`1:1`, `16:9`, `9:16`, `4:3`, `3:4`, `3:2`, `2:3`, `21:9`). Default: `1:1`. |
| `output_format`| `string` | No | File format (`png`, `webp`, `jpeg`). Default: `png`. |
| `model` | `string` | No | Model on OpenRouter (Default: `google/gemini-3.1-flash-image`). |

### 2. `edit_image`
Modifies an existing image provided by local file path.

| Parameter | Type | Required | Description |
| :--- | :--- | :---: | :--- |
| `image_path` | `string` | **Yes** | Source image path (e.g., `./assets/logo.png`) or Data URL. |
| `prompt` | `string` | **Yes** | Modification instructions or elements to add. |
| `output_path` | `string` | No | Destination path for the edited image. |
| `aspect_ratio` | `string` | No | Desired aspect ratio for the resulting image. |
| `output_format`| `string` | No | Output file format (`png`, `webp`, `jpeg`). |
| `model` | `string` | No | Model on OpenRouter (Default: `google/gemini-3.1-flash-image`). |

---

## ๐Ÿ”Œ How to Integrate with MCP Clients

### Configuration in Claude Desktop (`claude_desktop_config.json`)

```json
{
  "mcpServers": {
    "genimg": {
      "command": "node",
      "args": [
        "D:/MyProjs.Github/GenImgMCP/dist/index.js"
      ],
      "env": {
        "OPENROUTER_API_KEY": "sk-or-v1-your-key-here"
      }
    }
  }
}
```

### Configuration in Antigravity / Cursor / MCP Config (`mcp_config.json`)

```json
{
  "mcpServers": {
    "genimg": {
      "command": "node",
      "args": [
        "D:/MyProjs.Github/GenImgMCP/dist/index.js"
      ],
      "env": {
        "OPENROUTER_API_KEY": "sk-or-v1-your-key-here"
      }
    }
  }
}
```

---

## ๐Ÿงช Testing the Server Locally

You can run the server directly in the terminal to verify startup:

```bash
node dist/index.js
```
*The server will start and wait for JSON-RPC messages on the stdio channel.*

---

## ๐Ÿ“„ License

MIT

TDQS

A3.9/5.0

Scored across 2 tools

Disambiguation5/5

generate_image and edit_image have clearly distinct purposes: one creates new images from a prompt, while the other transforms an existing local image. There is no meaningful overlap or ambiguity between the two tools.

Naming Consistency5/5

Both tools follow a consistent verb_noun pattern: generate_image and edit_image. The naming is predictable, clear, and uniform.

Tool Count3/5

Two tools is on the thin side for an image generation/editing server, even though both are core operations. The count is borderline but not unreasonable for a minimal focused toolset.

Completeness4/5

The server covers the two primary image operations: generation and editing. It lacks supporting operations like listing locally saved images or deleting them, but these are minor gaps that agents can work around using file paths.