Skip to main content
Glama
Nano Banana MCP Server

Nano Banana MCP Server

by mikeroussell
README.md
# Nano Banana MCP Server

An MCP (Model Context Protocol) server for Google's **Nano Banana Pro** (Gemini 3 Pro Image) and **Nano Banana** (Gemini 2.5 Flash Image) AI image generation models.

## Features

- 🎨 **Text-to-Image Generation** - Create images from natural language descriptions
- ✏️ **Image Editing** - Modify existing images with text prompts
- 🖼️ **Multi-Image Composition** - Combine up to 14 reference images
- 📐 **Flexible Aspect Ratios** - 10 aspect ratio options (1:1, 16:9, 9:16, etc.)
- 🔍 **High Resolution** - Up to 4K output with Nano Banana Pro
- 🔤 **Text Rendering** - Generate images with accurate, legible text
- 🌐 **Google Search Grounding** - Real-time information for current events/weather

## Prerequisites

- Node.js 18 or higher
- Google AI API key from [Google AI Studio](https://aistudio.google.com/apikey)

## Installation

### From Source

```bash
# Clone or download this directory
cd nanobanana-mcp-server

# Install dependencies
npm install

# Build the TypeScript
npm run build
```

### Configuration

Set your API key as an environment variable:

```bash
# Linux/macOS
export GEMINI_API_KEY="your-api-key-here"

# Windows (PowerShell)
$env:GEMINI_API_KEY="your-api-key-here"

# Windows (CMD)
set GEMINI_API_KEY=your-api-key-here
```

## Usage

### As stdio Server (for Claude Desktop, etc.)

```bash
npm start
```

Or directly:

```bash
node dist/index.js
```

### As HTTP Server

```bash
TRANSPORT=http PORT=3000 npm start
```

The server will listen at `http://localhost:3000/mcp`.

### Claude Desktop Configuration

Add to your Claude Desktop config (`~/Library/Application Support/Claude/claude_desktop_config.json` on macOS):

```json
{
  "mcpServers": {
    "nanobanana": {
      "command": "node",
      "args": ["/path/to/nanobanana-mcp-server/dist/index.js"],
      "env": {
        "GEMINI_API_KEY": "your-api-key-here"
      }
    }
  }
}
```

## Available Tools

### `nanobanana_generate_image`

Generate images from text descriptions.

**Parameters:**
| Name | Type | Required | Description |
|------|------|----------|-------------|
| `prompt` | string | Yes | Text description of the image |
| `model` | string | No | Model ID (default: `gemini-3-pro-image-preview`) |
| `aspect_ratio` | string | No | Aspect ratio (e.g., `1:1`, `16:9`) |
| `resolution` | string | No | Resolution: `1K`, `2K`, `4K` (Pro only) |
| `use_google_search` | boolean | No | Enable real-time info grounding (Pro only) |

**Example:**
```json
{
  "prompt": "A photorealistic portrait of an astronaut on Mars at sunset, dramatic lighting, 85mm lens",
  "model": "gemini-3-pro-image-preview",
  "aspect_ratio": "16:9",
  "resolution": "4K"
}
```

### `nanobanana_edit_image`

Edit an existing image using text prompts.

**Parameters:**
| Name | Type | Required | Description |
|------|------|----------|-------------|
| `prompt` | string | Yes | Description of the edit |
| `image_base64` | string | Yes | Base64-encoded image data |
| `image_mime_type` | string | Yes | MIME type (e.g., `image/png`) |
| `model` | string | No | Model ID |
| `aspect_ratio` | string | No | Output aspect ratio |
| `resolution` | string | No | Output resolution (Pro only) |

**Example:**
```json
{
  "prompt": "Add a wizard hat to the cat",
  "image_base64": "<base64-image-data>",
  "image_mime_type": "image/png"
}
```

### `nanobanana_compose_images`

Compose images using multiple reference images (Nano Banana Pro only).

**Parameters:**
| Name | Type | Required | Description |
|------|------|----------|-------------|
| `prompt` | string | Yes | Description of composition |
| `images` | array | Yes | Array of `{base64, mime_type}` objects (max 14) |
| `aspect_ratio` | string | No | Output aspect ratio |
| `resolution` | string | No | Output resolution |

**Example:**
```json
{
  "prompt": "Create a group photo of these 5 people at a beach party",
  "images": [
    {"base64": "<image1>", "mime_type": "image/jpeg"},
    {"base64": "<image2>", "mime_type": "image/jpeg"}
  ],
  "aspect_ratio": "16:9",
  "resolution": "2K"
}
```

### `nanobanana_list_models`

List available models and their capabilities.

**Parameters:**
| Name | Type | Required | Description |
|------|------|----------|-------------|
| `response_format` | string | No | `markdown` (default) or `json` |

## Models

### Nano Banana Pro (`gemini-3-pro-image-preview`)

Google's most advanced image generation model. Best for:
- Professional asset production
- Images with accurate text rendering
- Complex compositions
- High-resolution output (up to 4K)
- Real-time information grounding

### Nano Banana (`gemini-2.5-flash-image`)

Fast, low-latency image generation. Best for:
- Quick experimentation
- Batch processing
- Iterative design
- Cost-effective generation

## Aspect Ratios

| Ratio | Use Case |
|-------|----------|
| `1:1` | Square, social media posts |
| `16:9` | Landscape, presentations, YouTube thumbnails |
| `9:16` | Portrait, mobile screens, Stories |
| `4:3` | Classic photo format |
| `3:2` | DSLR photo format |
| `21:9` | Ultra-wide, cinematic |

## Tips for Best Results

### Prompting

1. **Be Descriptive**: Include details about style, lighting, composition, colors, and mood
2. **Use Photography Terms**: For photorealistic images, mention camera angles, lens types, lighting setups
3. **Specify Style**: "Oil painting", "3D render", "watercolor", "photorealistic", etc.
4. **Include Context**: Describe the environment, atmosphere, and mood

### Example Prompts

**Photorealistic:**
```
A photorealistic close-up portrait of an elderly Japanese ceramicist with 
deep wrinkles and a warm smile, inspecting a glazed tea bowl. Soft golden 
hour light from a window. Shot with 85mm portrait lens, bokeh background.
```

**Stylized:**
```
A kawaii-style sticker of a happy red panda wearing a bamboo hat, munching 
on a leaf. Bold outlines, cel-shading, vibrant colors. White background.
```

**Logo:**
```
Create a modern, minimalist logo for a coffee shop called 'The Daily Grind'. 
Clean, bold sans-serif font. Black and white. Circular design with a clever 
coffee bean element.
```

## Error Handling

Common errors and solutions:

| Error | Solution |
|-------|----------|
| "GEMINI_API_KEY is required" | Set the environment variable |
| Rate limit exceeded | Wait and retry, or reduce request frequency |
| Content policy violation | Modify prompt to comply with Google's policies |
| Invalid image format | Use supported formats: PNG, JPEG, GIF, WebP |

## Development

```bash
# Install dependencies
npm install

# Build TypeScript
npm run build

# Watch mode for development
npm run dev
```

## License

MIT

## Links

- [Google AI Studio](https://aistudio.google.com) - Get your API key
- [Gemini API Docs](https://ai.google.dev/gemini-api/docs/image-generation) - Official documentation
- [MCP Protocol](https://modelcontextprotocol.io) - Learn about MCP

TDQS

A4.2/5.0

Scored across 4 tools

Disambiguation5/5

Each tool has a distinct and well-defined purpose: compose_images combines multiple reference images, edit_image modifies a single image, generate_image creates from text, and list_models provides metadata. The descriptions clearly differentiate their scopes, with no overlap or ambiguity in functionality.

Naming Consistency5/5

All tool names follow a consistent snake_case pattern with the prefix 'nanobanana_' and a clear verb_noun structure (e.g., compose_images, edit_image, generate_image, list_models). This uniformity makes the set predictable and easy to navigate.

Tool Count5/5

With 4 tools, this server is well-scoped for image generation and editing tasks. Each tool serves a unique and essential function in the workflow, from listing models to creating, editing, and composing images, without being overly sparse or bloated.

Completeness4/5

The tool set covers core image operations: generation, editing, composition, and model listing. Minor gaps might include batch processing or advanced filtering, but the surface supports typical agent workflows effectively, with no dead ends in the image manipulation lifecycle.