Skip to main content
Glama
dev66613

openrouter-image-gen-mcp

by dev66613
README.md
# OpenRouter Image Generation MCP Server

An MCP (Model Context Protocol) server that provides image generation capabilities through the OpenRouter API, supporting models like Gemini 2.5 Flash Image Preview.

## Features

- **Image Generation**: Generate images using Google Gemini 2.5 Flash Image Preview

- **Flexible Options**: 
  - Save generated images to local files

## Installation

1. Clone the repository:
```bash
git clone https://github.com/a13.team/openrouter-image-gen-mcp.git
cd openrouter-image-gen-mcp
```

2. Install dependencies:
```bash
npm install
```

3. Build the TypeScript code:
```bash
npm run build
```

4. Set up your OpenRouter API key:
```bash
export OPENROUTER_API_KEY="your-api-key-here"
```

You can get an API key from [OpenRouter](https://openrouter.ai/).

## Configuration for Claude Desktop

Add the following to your Claude Desktop configuration file:

### macOS/Linux
Location: `~/.config/claude/claude_desktop_config.json`

### Windows
Location: `%APPDATA%\Claude\claude_desktop_config.json`


## Cursor IDE Configuration
Location: `./cursor/mcp.json`

```json
{
  "mcpServers": {
    "openrouter-image-gen": {
      "command": "node",
      "args": ["/path/to/openrouter-image-gen-mcp/dist/index.js"],
      "env": {
        "OPENROUTER_API_KEY": "your-api-key-here"
      }
    }
  }
}
```

Replace `/path/to/openrouter-image-gen-mcp` with the actual path to your installation directory.

## Available Tools

### 1. `generate_image`
Generate images using AI models.

**Parameters:**
- `prompt` (required): Text description of the image to generate
- `model`: Model to use (default: `google/gemini-2.5-flash-image-preview`)
- `n`: Number of images to generate (1-4, default: 1)
- `size`: Image dimensions (default: `1024x1024`)
- `save_to_file`: Save images locally (default: false)
- `filename`: Base filename for saved images
- `show_full_response`: Include full base64 data in response (default: false, returns concise info only)

**Example:**
```json
{
  "prompt": "A serene Japanese garden with cherry blossoms",
  "model": "google/gemini-2.5-flash-image-preview",
  "save_to_file": true,
  "filename": "japanese_garden"
}
```

**Note:** Gemini image generation works through the chat completions API. The model will generate an image based on your prompt and return it as a URL or base64 data in the response. The size parameter is not used for Gemini models.

### 2. `list_models`
List all available image generation models.


## Development

### Build
```bash
npm run build
```

### Run in development mode
```bash
npm run dev
```

### Start the server
```bash
npm start
```

## API Documentation

- [Gemini Image Generation](https://ai.google.dev/gemini-api/docs/image-generation)
- [OpenRouter API](https://openrouter.ai/docs)
- [Model Context Protocol](https://modelcontextprotocol.io/)

## Troubleshooting

### 401 Authentication Error
If you get a 401 error, check:
1. Your API key is correctly set in the environment or Claude Desktop config
2. The API key starts with `sk-or-` (OpenRouter format)
3. The API key is valid and has not expired
4. You have credits available in your OpenRouter account

Test your API key loading:
```bash
node test-api-key.js
```

### Common Issues
- **API Key not loading**: Make sure the `OPENROUTER_API_KEY` is set in your Claude Desktop config's `env` section
- **Model access denied**: Some models require specific permissions or higher tier accounts
- **Image not generating for Gemini**: Gemini uses the chat completions endpoint, not the images endpoint

## License

WTFPL - Do What The Fuck You Want To Public License

## Contributing

Contributions are welcome! Please feel free to submit a Pull Request.

Else Models:
```md
`google/gemini-3-pro-image-preview`
`google/gemini-2.5-flash-image`
`google/gemini-2.5-flash-image-preview`
```

TDQS

A3.5/5.0

Scored across 2 tools

Disambiguation5/5

generate_image and list_models serve clearly different purposes: one creates an image, the other retrieves model metadata. There is no overlap or ambiguity between the two tools.

Naming Consistency5/5

Both tool names follow the same verb_noun pattern using snake_case, making the naming predictable and consistent across the set.

Tool Count3/5

Two tools is on the thin side for an image generation server, but the pair covers the essential generation action and a supporting model lookup. It feels minimal yet not unreasonable.

Completeness4/5

The core image generation workflow is covered by generate_image, and list_models provides useful context for model selection. Minor gaps exist, such as no ability to inspect generation parameters or retrieve past generations, but these are not critical for a simple image generation API.

Maintenance

ActivityInactive
ResponsivenessNo issues