Skip to main content
Glama

@nanobanana/mcp ๐ŸŒ

A lean MCP server for Google's Nano Banana (Gemini) image models and Veo video models. It generates and edits images and generates video from any MCP client (Claude Code, Claude Desktop, Cursor) and hands back file paths instead of base64, so your agent's context stays small.

  • Six tools and nothing else: generate_image, edit_image, generate_video, extend_video, get_video_result, list_models

  • Defaults to Nano Banana 2 (gemini-3.1-flash-image) and Veo 3.1 Fast (veo-3.1-fast-generate-preview). Switch models per call or via env. If a pinned model id ever goes stale, list_models shows what your key can actually use.

  • Multi-image editing: pass reference images for style transfer, characters, or compositing

  • Control over aspect ratio (1:1 through 21:9, out to 1:4 and 8:1) and resolution (512, 1K, 2K, 4K)

  • Google Search grounding for images that need real-world accuracy, like infographics

  • Video as a job, not a blocked call: generation takes 1โ€“6 min, so generate_video returns a job id and get_video_result polls within every client's 60s timeout

  • Safe output paths. The server never writes to / when a desktop MCP client spawns it there.

  • Auth lives in env vars only, so your API key never passes through chat context

Quick start

Get a free Gemini API key at aistudio.google.com/apikey.

Claude Code

claude mcp add nanobanana -e GEMINI_API_KEY=your_key -- npx -y @nanobanana/mcp

Also listed in the MCP Registry as io.github.getjoystick/nanobanana-mcp.

Claude Desktop / Cursor: add this to claude_desktop_config.json or .cursor/mcp.json:

{
  "mcpServers": {
    "nanobanana": {
      "command": "npx",
      "args": ["-y", "@nanobanana/mcp"],
      "env": { "GEMINI_API_KEY": "your_key" }
    }
  }
}

Related MCP server: nano-banana-claude

Tools

generate_image

Param

Required

Description

prompt

โœ…

Image description

model

Gemini image model id (default gemini-3.1-flash-image)

aspectRatio

1:1, 16:9, 9:16, 21:9, extremes up to 1:4 and 8:1

size

512, 1K, 2K, or 4K

grounding

Ground with Google Search for factual accuracy

thinkingLevel

minimal or high; high helps complex or text-heavy images

outputDir

Save directory (default ./nano-banana)

filename

Base filename without extension

edit_image

Same params, plus:

Param

Required

Description

images

โœ…

Input file path(s): png, jpg, webp, heic, or pdf. The first is the base; the rest are references.

Both tools save to disk and return the file path.

list_models

Takes no params. Lists the image and video model ids your API key can use, in two sections. Handy when a pinned model id stops working, which is how earlier Nano Banana servers broke โ€” and Veo's ids are previews that will be renamed.

Video

Veo generation takes 1โ€“6 minutes, and MCP clients kill a tool call at ~60s. So video is a job: you start one, then poll.

generate_video   โ†’  "Video job started: <jobId>"
get_video_result โ†’  "Still processing (<jobId>)โ€ฆ"   โ† blocks up to 45s, then call again
get_video_result โ†’  "Saved: /path/to/clip.mp4 (veo-3.1-fast-generate-preview)
                     Veo URI (needed for extend_video; expires ~2 days): https://โ€ฆ"

get_video_result does the waiting for you โ€” each call blocks up to waitSeconds (45 by default, the most that fits inside a client's 60s timeout). Call it right away and call it again the moment it returns; there is no need to pause in between, which matters because an agent has no way to sleep.

The job id carries everything the server needs, so it keeps working even if the server process restarts in between. Download promptly: Google deletes generated videos server-side after ~2 days โ€” and that server-side copy is the only thing extend_video can extend, so keep the Veo URI if you plan to continue the shot.

Animating an image you just generated? Give generate_image an aspectRatio of 16:9 or 9:16 first. Veo only outputs those two ratios and crops the frame you hand it, so a square image loses its edges โ€” and you pay for the clip either way.

generate_video

Param

Required

Description

prompt

โœ…

Scene, motion, camera, and any dialogue or SFX โ€” Veo generates native audio

image

Image path used as the starting frame (image-to-video). Veo crops it to aspectRatio, so make it 16:9 or 9:16.

referenceImages

Image paths for character/object/style consistency: up to 3 for asset, only 1 for style. Not combinable with image; not supported by Lite.

referenceType

asset (characters, objects, scenes โ€” default) or style (aesthetics)

model

Veo model id (default veo-3.1-fast-generate-preview)

aspectRatio

16:9 or 9:16

resolution

720p, 1080p, or 4k; 1080p and 4k require durationSeconds: 8

durationSeconds

4, 6, or 8; must be 8 with referenceImages or 1080p/4k

negativePrompt

What should not appear

personGeneration

allow_all (text-to-video and extension only) or allow_adult. Image-based generation โ€” image, referenceImages โ€” requires allow_adult, and EU/UK/CH/MENA accept only allow_adult.

Frames (image, referenceImages) must be png or jpg.

extend_video

Extends a Veo-generated clip by ~7s, continuing from its final second. Input up to ~141s, output up to ~148s across at most 20 extensions, always 720p. Not supported by Lite.

Extension runs on Google's copy of the video, not on your local file โ€” pass the Veo URI that get_video_result prints. It expires with the video after ~2 days.

Param

Required

Description

prompt

โœ…

What happens next

video

โœ…

The Veo URI from get_video_result (an https:// URI, not a file path)

model

Veo model id (default veo-3.1-fast-generate-preview); Lite cannot extend

negativePrompt

What should not appear

get_video_result

Param

Required

Description

jobId

โœ…

The id returned by generate_video / extend_video

waitSeconds

How long this call blocks waiting for the job (default 45, which is also the max)

outputDir

Save directory (default ./nano-banana)

filename

Base filename without extension

Saves the finished video as .mp4 and returns the absolute path, plus the Veo URI of the server-side copy that extend_video needs.

Configuration

Env var

Description

GEMINI_API_KEY

Required. Gemini API key (GOOGLE_API_KEY also works)

NANOBANANA_MODEL

Default image model override

NANOBANANA_VIDEO_MODEL

Default video model override

NANOBANANA_OUTPUT_DIR

Default output directory override

Models

Model id

Notes

gemini-3.1-flash-image

Default. Nano Banana 2: 4K output, strong text rendering

gemini-3-pro-image

Nano Banana Pro, for complex scenes that need deeper reasoning

gemini-2.5-flash-image

The original Nano Banana (legacy; Google retires it 2026-10-02)

Video models

Veo has no free tier โ€” you need a billing-enabled API key, and you are charged per second of output.

Model id

Price

8s clip

Notes

veo-3.1-fast-generate-preview

$0.10/s

~$0.80

Default. Full feature set; best quality-per-dollar

veo-3.1-generate-preview

$0.40/s

~$3.20

Full feature set; highest fidelity

veo-3.1-lite-generate-preview

$0.05/s

~$0.40

Cheapest; text- and image-to-video only โ€” no extension, no reference images, 1080p max

All three do text-to-video, image-to-video, and native audio. Extension, reference images, and 4k are Veo 3.1 and 3.1 Fast only. Clips are 4, 6, or 8 seconds, in 16:9 or 9:16.

Development

npm install
npm run build
GEMINI_API_KEY=your_key npm run smoke   # end-to-end test against the live API
GEMINI_API_KEY=your_key SMOKE_VIDEO=1 npm run smoke   # also generates a 4s clip (~$0.20)

Acknowledgements

Inspired by other Nano Banana MCPs. Built with Claude Code.

License

MIT

Available Tools

3 tools
edit_imageA

Edit or combine images per a text prompt. First image is the base; any others are references (style, characters, objects). Saves to disk and returns the file path.

ParametersJSON Schema
NameRequiredDescriptionDefault
sizeNoOutput resolution
modelNoGemini image model id (default: gemini-3.1-flash-image)
imagesYesInput image file path(s)
promptYesEdit instruction
filenameNoBase filename without extension
groundingNoGround with Google Search for factual accuracy
outputDirNoSave directory (default: ./nano-banana)
aspectRatioNoe.g. 1:1, 16:9, 9:16, 21:9, up to 1:4 or 8:1
thinkingLevelNoModel reasoning effort; high helps complex or text-heavy images

TDQS

A4.2/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations are provided, so the description must disclose behavioral traits. It states 'Saves to disk and returns the file path,' which is a key behavior. However, it does not mention whether original input images are modified, overwriting behavior, or output format requirements, leaving gaps in transparency.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is two sentences, starting with the core action and then the output behavior. It uses concise, direct language with no unnecessary filler.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the tool has 9 parameters and no output schema, the description covers the essential flow: input images, prompt, save, and return. It would benefit from an explicit note about using generate_image for new images, but overall it is adequate for an agent to understand the tool's purpose and basic usage.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100%, so the description is not required to repeat parameter details. It adds meaning by clarifying the `images` parameter (first is base, others references) and the `prompt` as a 'text prompt,' which enriches the schema definitions.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description begins with 'Edit or combine images per a text prompt,' which clearly identifies the tool's function as image editing/combination. It also mentions the base/reference role of images, distinguishing it from sibling generate_image which likely creates new images from scratch.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

It explains that the first image is the base and others are references, giving clear guidance on how to structure the images array. However, it does not explicitly state when to use this tool over generate_image, so it lacks an explicit exclusion clause.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

generate_imageA

Generate an image from a text prompt. Saves to disk and returns the file path.

ParametersJSON Schema
NameRequiredDescriptionDefault
sizeNoOutput resolution
modelNoGemini image model id (default: gemini-3.1-flash-image)
promptYesImage description
filenameNoBase filename without extension
groundingNoGround with Google Search for factual accuracy
outputDirNoSave directory (default: ./nano-banana)
aspectRatioNoe.g. 1:1, 16:9, 9:16, 21:9, up to 1:4 or 8:1
thinkingLevelNoModel reasoning effort; high helps complex or text-heavy images

TDQS

A4/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations, the description must disclose behaviors, and it does mention saving to disk and returning a file path, which is a key side effect. Yet it omits other important behaviors such as overwrite behavior, permissions, or error handling, leaving gaps in transparency.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is two sentences, concise, and front-loaded with the core purpose and return value. It contains no unnecessary words and is well-structured.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a tool with 8 parameters and no annotations or output schema, the description covers the essential flow: generate, save to disk, and return the file path. It does not provide guidance on model/size selection or potential edge cases, but it is adequate for the tool's simplicity.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The schema provides descriptions for all 8 parameters, so the baseline is 3. The tool description does not add additional meaning beyond the schema's parameter details, so it remains at the baseline.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states it generates an image from a text prompt, which is a specific verb+resource combination. It distinguishes from sibling tools edit_image and list_models by focusing on creation from text.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description provides clear context that this tool is for generating new images from text. However, it does not explicitly state when not to use it or mention alternatives like edit_image for existing images, so it lacks explicit exclusions.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

list_modelsA

List Gemini image model ids usable with generate_image/edit_image.

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

TDQS

A4.2/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations, the description only states that it lists IDs, without disclosing any behavioral details such as whether the list is comprehensive, sorted, or if it might return empty. The description is straightforward but does not go beyond the obvious.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is a single, focused sentence with no redundant wording. It front-loads the action and resource.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a simple, no-parameter listing tool, the description adequately conveys its purpose and relationship to sibling tools. Although no output schema exists, the phrase 'List ... ids' sufficiently indicates the return type is a collection of model IDs.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

There are zero parameters, so the schema already covers all inputs. The description adds no parameter semantics, but none are needed. Per the baseline for 0-param tools, this scores 4.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description uses a specific verb 'List' and clearly specifies the resource as 'Gemini image model ids' and its purpose 'usable with generate_image/edit_image'. This distinguishes it from its siblings which perform generation/editing.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description implies it is used to obtain model ids for generate_image and edit_image, but does not explicitly state when to call it or when not to. It provides clear context but lacks explicit alternative guidance or exclusions.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

Tool Schema Changelog

Recent tool additions, removals, and schema changes observed during successful MCP inspections.

  1. 3 tool updatesv0.2.0
    • First observededit_image
    • First observedgenerate_image
    • First observedlist_models

TDQS

A4.4/5.0

Scored across 3 tools

Disambiguation5/5

Each tool has a clearly distinct purpose: list_models for available model IDs, generate_image for text-to-image, and edit_image for image editing/combining with references. Descriptions are precise, leaving no ambiguity.

Naming Consistency5/5

All tool names follow a consistent verb_noun pattern: list_models, generate_image, edit_image. This makes the API predictable and easy to navigate.

Tool Count5/5

With 3 tools, the server is appropriately scoped for image generation and editing. Each tool covers a distinct step in the workflow, and no excessive or redundant tools exist.

Completeness5/5

The tool set covers the full lifecycle: discovering models, generating images from scratch, and editing/combining existing images. No critical operations are missing for the stated purpose.

Maintenance

ActivityMaintained
ResponsivenessNo issues

Related MCP Connectors

Related MCP Servers