Skip to main content
Glama

imagen-mcp

A Model Context Protocol (MCP) server for intelligent multi-provider image generation.

CI Python 3.10+ License: MIT

Features

  • Auto Provider Selection - Analyzes prompts to choose the best provider

  • Multi-Provider Support - OpenAI GPT-Image-1 and Google Gemini

  • Reference Images - Up to 14 images for character/style consistency (Gemini)

  • Real-time Data - Google Search grounding for current info (Gemini)

  • Conversational History - Iteratively refine images with context (Gemini)

  • High Resolution - Up to 4K output (Gemini)

  • Flexible Storage - Save to ~/Downloads/images/ or custom locations

Architecture

flowchart TB
    subgraph Clients["MCP Clients"]
        CD[Claude Desktop]
        CC[Claude Code CLI]
        GC[Gemini CLI]
        CX[Codex CLI]
    end

    subgraph Server["imagen-mcp Server"]
        MCP[MCP Protocol Layer]

        subgraph Tools["MCP Tools"]
            GI[generate_image]
            CI[conversational_image]
            LP[list_providers]
            LM[list_gemini_models]
        end

        subgraph Core["Core Components"]
            PS[Provider Selector]
            PR[Provider Registry]
        end

        subgraph Providers["Image Providers"]
            OAI[OpenAI Provider<br/>GPT-Image-1]
            GEM[Gemini Provider<br/>Nano Banana Pro]
        end
    end

    subgraph APIs["External APIs"]
        OAPI[OpenAI API]
        GAPI[Google Gemini API]
    end

    subgraph Storage["Local Storage"]
        DL[~/Downloads/images/]
    end

    CD & CC & GC & CX --> MCP
    MCP --> Tools
    GI & CI --> PS
    PS --> PR
    PR --> OAI & GEM
    OAI --> OAPI
    GEM --> GAPI
    OAI & GEM --> DL

Provider Comparison

Feature

OpenAI GPT-Image-1

Gemini Nano Banana Pro

Text Rendering

Excellent

Good

Photorealism

Good

Excellent

Speed

~60s

~15s

Max Resolution

1536x1024

4K

Sizes

3 options

1K, 2K, 4K

Aspect Ratios

3

10

Reference Images

No

Yes (up to 14)

Real-time Data

No

Yes (Google Search)

Use OpenAI for: Text-heavy images, menus, infographics, comics, diagrams

Use Gemini for: Portraits, product photography, 4K output, reference images

Available Models

OpenAI Models

Model ID

Description

gpt-image-1

Dedicated image generation model (default)

gpt-5-image

GPT-5 with image generation capabilities

gpt-5.1

Latest reasoning model (conversation orchestration)

Gemini Models

Model ID

Description

gemini-3-pro-image-preview

Nano Banana Pro - highest quality (default)

gemini-2.0-flash-exp-image-generation

Fast experimental

imagen-3.0-generate-002

Alternative image model

Installation

git clone https://github.com/michaeljabbour/imagen-mcp.git
cd imagen-mcp
pip install -r requirements.txt
chmod +x run.sh

Configuration

At least one API key is required. Both are recommended for auto-selection.

Claude Desktop

Edit ~/Library/Application Support/Claude/claude_desktop_config.json (macOS) or %APPDATA%\Claude\claude_desktop_config.json (Windows):

{
  "mcpServers": {
    "imagen": {
      "command": "/path/to/imagen-mcp/run.sh",
      "args": [],
      "env": {
        "OPENAI_API_KEY": "sk-...",
        "GEMINI_API_KEY": "AI..."
      }
    }
  }
}

Note: Claude Desktop doesn't support cwd, so use the run.sh wrapper script which handles the directory change.

Restart Claude Desktop (Cmd+Q, then reopen) after editing.

Claude Code CLI

Use the CLI to add the server:

claude mcp add -s user imagen /path/to/imagen-mcp/run.sh

Then add environment variables by editing ~/.claude.json:

{
  "mcpServers": {
    "imagen": {
      "type": "stdio",
      "command": "/path/to/imagen-mcp/run.sh",
      "args": [],
      "env": {
        "OPENAI_API_KEY": "sk-...",
        "GEMINI_API_KEY": "AI..."
      }
    }
  }
}

Verify with:

claude mcp list

Reference: Claude Code MCP Documentation

Gemini CLI

Edit ~/.gemini/settings.json:

{
  "mcpServers": {
    "imagen": {
      "command": "/path/to/imagen-mcp/run.sh",
      "args": [],
      "env": {
        "OPENAI_API_KEY": "sk-...",
        "GEMINI_API_KEY": "AI..."
      }
    }
  }
}

Reference: Gemini CLI MCP Documentation

OpenAI Codex CLI

Edit ~/.codex/config.toml:

[mcp_servers.imagen]
command = "/path/to/imagen-mcp/run.sh"
args = []

[mcp_servers.imagen.env]
OPENAI_API_KEY = "sk-..."
GEMINI_API_KEY = "AI..."

Or use the CLI:

codex mcp add imagen -- /path/to/imagen-mcp/run.sh

Reference: Codex MCP Documentation

Generic MCP Client

For any MCP-compatible client:

Setting

Value

Command

/path/to/imagen-mcp/run.sh

Args

[]

Environment

OPENAI_API_KEY, GEMINI_API_KEY

The Wrapper Script

The run.sh script handles the working directory requirement:

#!/bin/bash
cd /path/to/imagen-mcp
exec python3 -m src.server "$@"

This is necessary because the server runs as a Python module (-m src.server) which requires being in the project directory.

Usage

Auto Provider Selection

The server analyzes your prompt and selects the best provider:

"Create a menu card for an Italian restaurant"  → OpenAI (text rendering)
"Professional headshot with studio lighting"    → Gemini (photorealism)
"Infographic about climate change"              → OpenAI (diagram + text)
"Product shot of perfume on marble"             → Gemini (product photography)

Manual Provider Selection

Override auto-selection with the provider parameter:

generate_image(prompt="...", provider="openai")
generate_image(prompt="...", provider="gemini")

Save Location

Specify a custom save path (directory or filename) with output_path:

# Save to specific directory (auto-generated filename)
generate_image(prompt="...", output_path="~/Desktop/logos/")

# Save to specific file
generate_image(prompt="...", output_path="~/Desktop/logos/my-logo.png")

If output_path is omitted, images are saved to ~/Downloads/images/{provider} by default (openai or gemini). Override the base directory with the OUTPUT_DIR environment variable (supports ~ and env vars).

Logs are written to ~/Downloads/images/logs/ by default (or OUTPUT_DIR/logs/ when OUTPUT_DIR is set).

Gemini-Specific Features

# High resolution
generate_image(prompt="...", size="4K")

# Specific model
generate_image(prompt="...", gemini_model="gemini-2.0-flash-exp-image-generation")

# Reference images (base64 encoded)
generate_image(prompt="...", reference_images=["base64..."])

# Real-time data
generate_image(prompt="Current weather in NYC", enable_google_search=True)

MCP Tools

Tool

Description

generate_image

Main tool with auto provider selection

conversational_image

Multi-turn refinement with history

list_conversations

List active conversations and their history

list_providers

Show available providers and capabilities

list_gemini_models

Query available Gemini image models

Development

# Install dev dependencies
pip install -r requirements.txt
pip install pytest pytest-asyncio

# Run tests
pytest tests/ -v

# Test server loads
python3 -c "from src.server import mcp; print('Server loads')"

# Test providers
python3 -c "from src.providers import get_provider_registry; print(get_provider_registry().list_providers())"

# Check logs (macOS)
tail -f ~/Library/Logs/Claude/mcp-server-imagen.log

Project Structure

imagen-mcp/
├── src/
│   ├── server.py              # MCP entry point
│   ├── config/
│   │   ├── constants.py       # Provider constants
│   │   └── settings.py        # Environment configuration
│   ├── providers/
│   │   ├── base.py            # Abstract provider interface
│   │   ├── openai_provider.py # OpenAI implementation
│   │   ├── gemini_provider.py # Gemini implementation
│   │   ├── selector.py        # Auto-selection logic
│   │   └── registry.py        # Provider factory
│   └── models/
│       └── input_models.py    # Pydantic input models
├── tests/
│   ├── test_selector.py       # Provider selection tests
│   ├── test_providers.py      # Provider unit tests
│   └── test_server.py         # Server integration tests
├── .github/
│   └── workflows/
│       └── ci.yml             # GitHub Actions CI
├── run.sh                     # Wrapper script for MCP clients
├── requirements.txt
├── CLAUDE.md
└── README.md

Environment Variables

Variable

Description

Required

OPENAI_API_KEY

OpenAI API key

One of these

GEMINI_API_KEY

Google Gemini API key

required

GOOGLE_API_KEY

Alias for GEMINI_API_KEY

DEFAULT_PROVIDER

Default: "auto"

No

DEFAULT_OPENAI_SIZE

Default: "1024x1024"

No

DEFAULT_GEMINI_SIZE

Default: "2K"

No

ENABLE_GOOGLE_SEARCH

Default: "false"

No

OUTPUT_DIR

Default directory for saved images

No

IMAGEN_MCP_LOG_DIR

Log directory override

No

IMAGEN_MCP_LOG_LEVEL

Log level (e.g. INFO, DEBUG)

No

IMAGEN_MCP_LOG_PROMPTS

Log prompts (default: false)

No

Requirements

mcp>=1.16.0
fastmcp>=2.12.5
pydantic>=2.12.3
httpx>=0.24.0
google-genai>=1.52.0
pillow>=10.4.0

License

MIT

Sources

-
security - not tested
F
license - not found
-
quality - not tested

Resources

Unclaimed servers have limited discoverability.

Looking for Admin?

If you are the server author, to access and configure the admin panel.

Latest Blog Posts

MCP directory API

We provide all the information about MCP servers via our MCP API.

curl -X GET 'https://glama.ai/api/mcp/v1/servers/michaeljabbour/imagen-mcp'

If you have feedback or need assistance with the MCP directory API, please join our Discord server