Skip to main content
Glama
mikeroussell

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.

Maintenance

ActivityInactive
ResponsivenessNo issues