Skip to main content
Glama
README.md
# NanoBanana MCP

[![npm](https://img.shields.io/npm/v/@ycse/nanobanana-mcp)](https://www.npmjs.com/package/@ycse/nanobanana-mcp)
[![MCP](https://img.shields.io/badge/MCP-1.0.1-blue)](https://modelcontextprotocol.io)
[![Gemini](https://img.shields.io/badge/Gemini-Image%20Models-orange)](https://ai.google.dev)
[![License](https://img.shields.io/badge/License-MIT-green)](LICENSE)

MCP server that brings Gemini's image generation and editing capabilities to Claude Desktop, Claude Code, and Cursor. Supports **Nano Banana 2** (Flash) and **Nano Banana Pro** models.

## Features

- **Image Generation** - Create 2K images from text prompts
- **Image Editing** - Transform images with natural language instructions
- **Session Consistency** - Maintain style/character across generations
- **Runtime Model Switching** - Switch between Flash and Pro models without restart
- **Multi-turn Chat** - Conversational context with image support

## Quick Start

### Prerequisites

- Node.js 18+
- Google AI API Key ([Get one here](https://makersuite.google.com/app/apikey))

### Add to Claude Code

```bash
claude mcp add nanobanana-mcp -- npx -y @ycse/nanobanana-mcp \
  -e "GOOGLE_AI_API_KEY=your_api_key"
```

### Add to Claude Desktop

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

```json
{
  "mcpServers": {
    "nanobanana-mcp": {
      "command": "npx",
      "args": ["-y", "@ycse/nanobanana-mcp"],
      "env": {
        "GOOGLE_AI_API_KEY": "your_api_key"
      }
    }
  }
}
```

### Add to Cursor

Create or edit `.cursor/mcp.json` (project-level) or `~/.cursor/mcp.json` (global):

```json
{
  "mcpServers": {
    "nanobanana-mcp": {
      "command": "npx",
      "args": ["-y", "@ycse/nanobanana-mcp"],
      "env": {
        "GOOGLE_AI_API_KEY": "your_api_key"
      }
    }
  }
}
```

See [Cursor MCP Documentation](https://cursor.com/docs/context/mcp) for more details.

## Tools

| Tool | Purpose |
|------|---------|
| `set_aspect_ratio` | **Required.** Set aspect ratio before image generation |
| `set_model` | Switch between flash/pro models at runtime |
| `gemini_generate_image` | Generate images from text prompts |
| `gemini_edit_image` | Edit images with natural language |
| `gemini_chat` | Multi-turn conversation with images |
| `get_image_history` | View session image history |
| `clear_conversation` | Reset session context |

### set_aspect_ratio (Required)

Must be called before generating or editing images.

```
Valid ratios: 1:1, 9:16, 16:9, 3:4, 4:3, 3:2, 2:3, 5:4, 4:5, 21:9
```

### set_model

Switch models per-session without restarting:

| Value | Model | Description |
|-------|-------|-------------|
| `flash` | gemini-3.1-flash-image-preview | Nano Banana 2 - Faster (default) |
| `pro` | gemini-3-pro-image-preview | Nano Banana Pro - Higher quality |

### gemini_generate_image

```typescript
{
  prompt: string;              // Image description
  aspect_ratio?: string;       // Override session ratio
  output_path?: string;        // Save path (default: ~/Documents/nanobanana_generated/)
  conversation_id?: string;    // Session ID
  use_image_history?: boolean; // Use previous images for consistency
  reference_images?: string[]; // Reference images for style
}
```

### gemini_edit_image

```typescript
{
  image_path: string;          // File path, "last", or "history:N"
  edit_prompt: string;         // Edit instructions
  aspect_ratio?: string;       // Override session ratio
  output_path?: string;        // Save path
  conversation_id?: string;    // Session ID
  reference_images?: string[]; // Style references
}
```

## Slash Commands

### Claude Code

```bash
npx @ycse/nanobanana-mcp --install-commands claude-code
# Or manually:
# mkdir -p ~/.claude/commands
# cp commands/claude-code/*.md ~/.claude/commands/
```

### Cursor

```bash
npx @ycse/nanobanana-mcp --install-commands cursor
# Or manually:
# mkdir -p .cursor/commands
# cp commands/cursor/*.md .cursor/commands/
```

See [Cursor Slash Commands](https://cursor.com/changelog/1-6) for more details.

### Available Commands

```
/nb-flash  - Switch to Flash model (faster)
/nb-pro    - Switch to Pro model (higher quality)
```

## Usage Examples

### Basic Generation

```
1. Set aspect ratio: set_aspect_ratio("16:9")
2. Generate: "A cyberpunk cityscape at sunset"
```

### Character Consistency

```typescript
// First image
{ prompt: "A red-hat cat", conversation_id: "cat" }

// Second image - same character
{ prompt: "The cat taking a nap", conversation_id: "cat", use_image_history: true }
```

### Edit with History Reference

```typescript
// Edit the last generated image
{ image_path: "last", edit_prompt: "Change hat to blue" }

// Edit specific image from history
{ image_path: "history:0", edit_prompt: "Add sunglasses" }
```

### Switch Models Mid-Session

```typescript
// Start with Flash for quick iterations
set_model({ model: "flash" })
{ prompt: "Draft concept art" }

// Switch to Pro for final render
set_model({ model: "pro" })
{ prompt: "Final polished version", use_image_history: true }
```

## Configuration

### Environment Variables

| Variable | Required | Description |
|----------|----------|-------------|
| `GOOGLE_AI_API_KEY` | Yes | Google AI API key |
| `NANOBANANA_MODEL` | No | Default model (`gemini-3.1-flash-image-preview` or `gemini-3-pro-image-preview`) |

### Output Location

Generated images save to `~/Documents/nanobanana_generated/`:
- Generated: `generated_[timestamp].png`
- Edited: `[original]_edited_[timestamp].png`

## Development

```bash
git clone https://github.com/YCSE/nanobanana-mcp.git
cd nanobanana-mcp
npm install
npm run dev      # Development mode with hot reload
npm run build    # Production build
npm run start    # Run compiled server
```

## Troubleshooting

**Image generation fails:**
- Verify API key is valid
- Check quota at [Google AI Studio](https://aistudio.google.com)
- Ensure `set_aspect_ratio` was called first

**Tools not showing:**
1. Restart Claude Desktop/Code
2. Check config file syntax
3. Verify `npx -y @ycse/nanobanana-mcp` runs without errors

## License

MIT

## Links

- [npm Package](https://www.npmjs.com/package/@ycse/nanobanana-mcp)
- [Report Issues](https://github.com/YCSE/nanobanana-mcp/issues)
- [MCP Documentation](https://modelcontextprotocol.io)
- [Google AI Studio](https://aistudio.google.com)

TDQS

A3.7/5.0

Scored across 7 tools

Disambiguation5/5

Each tool has a clearly distinct purpose: retrieving history, chatting, generating images, editing images, clearing conversation, and setting session parameters. There is no functional overlap between generate and edit, and chat is text-focused while image tools are visual. Even the history and clear tools are unambiguous (images vs. conversation).

Naming Consistency3/5

Most tools follow a verb_noun pattern (get_image_history, clear_conversation, set_aspect_ratio, set_model), but three tools are prefixed with 'gemini_' (gemini_chat, gemini_generate_image, gemini_edit_image), creating an inconsistency in form. The verbs are clear, but the prefix usage is not uniform, and 'gemini_chat' reads more as a noun phrase than a verb_noun command.

Tool Count5/5

Seven tools is a well-scoped count for a server focused on image generation/editing and session management. Each tool serves a necessary function without redundancy or bloat, fitting comfortably within the ideal 3-15 range.

Completeness4/5

The surface covers the main lifecycle for image work: generate (create), edit (update), view history (read), and session management. The only minor gap is the lack of an explicit delete/image removal tool and no way to view conversation history outside of image history, but these are workarounds in most use cases.

Maintenance

ActivityInactive
ResponsivenessSlow