nano-banana-mcp
by bartadaniel
README.md
# nano-banana-mcp
[](https://www.npmjs.com/package/@daniel.barta/nano-banana-mcp)
Nano Banana MCP server for generating and editing images with Google Gemini. No Gemini CLI required -- just an API key.
## Quick Start
1. Get a Gemini API key from [Google AI Studio](https://aistudio.google.com/apikey)
2. Add to your Claude Code settings (`~/.claude/settings.json`) or Claude Desktop config:
```json
{
"mcpServers": {
"nano-banana": {
"command": "npx",
"args": ["-y", "@daniel.barta/nano-banana-mcp"],
"env": {
"GEMINI_API_KEY": "your-api-key"
}
}
}
}
```
3. Restart Claude and ask it to generate an image.
## Configuration
| Environment Variable | Required | Default | Description |
|---------------------|----------|---------|-------------|
| `GEMINI_API_KEY` | Yes | -- | Your Google AI API key |
| `GEMINI_MODEL` | No | `gemini-3.1-flash-image-preview` | Gemini model for image generation/editing |
| `GEMINI_DESCRIBE_MODEL` | No | `gemini-2.5-flash` | Gemini model for image description (text-only output) |
| `GEMINI_BASE_URL` | No | -- | Custom base URL for Gemini API (proxy support) |
| `OUTPUT_DIR` | No | `~/nano-banana-output` | Directory for saved images |
### Supported Models
| Model | Notes |
|-------|-------|
| `gemini-3.1-flash-image-preview` | Default. Latest, fastest |
| `gemini-3-pro-image-preview` | Higher quality, slower |
| `gemini-2.5-flash-image` | Fast, cost-effective |
## Tools
### `generate_image`
Generate an image from a text prompt. Supports batch generation (up to 4 images). Response contains a thumbnail preview; full-res image is saved to disk.
| Parameter | Type | Required | Description |
|-----------|------|----------|-------------|
| `prompt` | string | Yes | Text description of the image |
| `aspectRatio` | string | No | Aspect ratio (`1:1`, `1:4`, `1:8`, `2:3`, `3:2`, `3:4`, `4:1`, `4:3`, `4:5`, `5:4`, `8:1`, `9:16`, `16:9`, `21:9`) |
| `size` | string | No | Image size (`512px`, `1K`, `2K`, `4K`) |
| `n` | number | No | Number of images to generate (1-4, default 1) |
| `negativePrompt` | string | No | Things to exclude from the generated image |
| `systemInstruction` | string | No | System instruction to guide the model |
### `edit_image`
Edit an existing image based on a text instruction. Supports multi-image input (up to 10 images total). Response contains a thumbnail preview; full-res image is saved to disk.
| Parameter | Type | Required | Description |
|-----------|------|----------|-------------|
| `prompt` | string | Yes | What to change |
| `filePath` | string | Yes | Path to the source image |
| `additionalFilePaths` | string[] | No | Additional image paths (up to 9) for multi-image editing |
| `aspectRatio` | string | No | Aspect ratio (`1:1`, `1:4`, `1:8`, `2:3`, `3:2`, `3:4`, `4:1`, `4:3`, `4:5`, `5:4`, `8:1`, `9:16`, `16:9`, `21:9`) |
| `size` | string | No | Image size (`512px`, `1K`, `2K`, `4K`) |
| `negativePrompt` | string | No | Things to exclude from the edited image |
| `systemInstruction` | string | No | System instruction to guide the model |
### `describe_image`
Get a text description of an image.
| Parameter | Type | Required | Description |
|-----------|------|----------|-------------|
| `filePath` | string | Yes | Path to the image |
| `question` | string | No | Specific question about the image |
| `systemInstruction` | string | No | System instruction to guide the model |
## Supported Input Formats
For `edit_image` and `describe_image`, the following image formats are supported:
JPEG, PNG, WebP, GIF, BMP, TIFF, SVG, HEIC/HEIF
## File Path Resolution
When you provide a file path for editing or describing, the server searches for the file in this order:
1. Absolute path as given
2. Relative to the current working directory
3. Relative to the output directory
4. Basename only in the output directory
## Thumbnails
To avoid hitting Claude Code's session file size limits, MCP responses contain **thumbnail previews** (max 512px, JPEG quality 80, ~20-50KB) instead of full-resolution images. Full-res images are always saved to disk at the path shown in the response metadata.
The first content block in generate/edit responses is a JSON metadata object:
```json
{
"model": "gemini-3.1-flash-image-preview",
"count": 1,
"images": [
{ "filePath": "/Users/you/nano-banana-output/a-cat-1234567890.png", "mimeType": "image/png" }
]
}
```
## Development
```bash
git clone https://github.com/bartadaniel/nano-banana-mcp.git
cd nano-banana-mcp
npm install
npm run build
```
Use the local build in your config:
```json
{
"mcpServers": {
"nano-banana": {
"command": "node",
"args": ["path/to/nano-banana-mcp/dist/index.js"],
"env": {
"GEMINI_API_KEY": "your-api-key"
}
}
}
}
```
### Testing
```bash
npm test
```
Runs unit tests using Node.js built-in test runner (`node:test`). Tests cover error classes, all documented Gemini API response codes (BlockedReason, FinishReason), config shapes, image extraction edge cases, file operations, path security, and thumbnail generation.
## License
MIT
TDQS
A4.2/5.0
Scored across 3 tools
Disambiguation5/5
Each tool has a clearly distinct purpose: generating a new image, editing an existing image, and describing an image. There is no overlap or ambiguity between them.
Naming Consistency5/5
All tool names follow the consistent verb_noun pattern: generate_image, edit_image, describe_image. This makes the set highly predictable and easy to navigate.
Tool Count5/5
With 3 tools, the server is well-scoped for its purpose of image generation, editing, and analysis. Each tool earns its place and the count is appropriate for the domain.
Completeness5/5
The tool surface covers the core lifecycle of image handling: create (generate), modify (edit), and understand (describe). There are no obvious gaps for the stated purpose.
Maintenance
ActivityInactive
ResponsivenessNo issues